home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / USCX / DOSUT-17.ZIP / SETERROR.ASM < prev    next >
Assembly Source File  |  1984-04-26  |  7KB  |  178 lines

  1.  
  2.        page    64,132
  3.        title   SETERROR-sets the ERRORLEVEL for DOS batch file processing
  4.        subttl  by Tony Alan Rhea 10/24/83
  5. ;
  6. ;
  7. comment *
  8.  
  9.        This program accepts one command line argument and sets the
  10.        DOS ERRORLEVEL to that argument.  Currently, this program has
  11.        a limit of 9 for the errorlevel, but apparently DOS has a a
  12.        much higher limit (FFh -- the code is returned in a half-reg).
  13.        An invalid or missing argument gives an error message and an
  14.        errorlevel 0.  This program requires DOS 2.0.
  15.  
  16.        Usage:
  17.              SETERROR n
  18.        where n is between 0 and 9.
  19.  
  20.  
  21.        Copyright (C) 1983  Tony Alan Rhea
  22.        This program may be copied and distributed for personal use
  23.        but not for profit provided this notice is included.  Author makes
  24.        no warranty, expressed or implied, as to the correct nature and
  25.        operation of this software.
  26.  
  27.        You may make and distribute as many copies of this program as you wish
  28.        for your PERSONAL use only ( NOT for business purposes, please! ).
  29.        Feel free to modify, mutilate, or adulterate this program.  If you come
  30.        up with an bug or improvement, please let me know by writing me at this
  31.        address:
  32.                Tony A. Rhea
  33.                1030 Ivy Lane
  34.                Cary, NC  27511
  35.        If you do modify it, please give me credit in the program.  This helps
  36.        to preserve my ego and increase my fame (but, unfortunately, NOT my
  37.        financial status).  Also, I would appreciate a copy of the modified
  38.        version, preferably on disk (I'll be happy to return your diskette).
  39.  
  40.        If you like this program ( or HATE it ), please let me know.  Drop me
  41.        a line at the address given above.
  42.  
  43.        This program has been submitted for publication in PC-WORLD magazine.
  44.  
  45.  
  46.          Revision history:
  47.             rev 1.0  10/24/83                         { original release }
  48.  
  49.        *
  50. ;
  51. ;
  52. ; Equates
  53. ;
  54. ;
  55. space  equ     ' '
  56. zero   equ     '0'
  57. nine   equ     '9'
  58. cr     equ     0dh
  59. lf     equ     0ah
  60. dollar equ     '$'
  61.        page
  62. ;
  63. ;
  64. ; Program entry point
  65. ;
  66. ;
  67. cseg   segment para 'code'
  68.        assume  cs:cseg, ds:cseg, ss:nothing, es:cseg
  69.        org     100h            ;for .COM file
  70. entry  proc    near
  71.        mov     ah,30h          ;set function code -- get DOS version number
  72.        int     21h             ;and request DOS service
  73.        cmp     al,0            ;is it pre-DOS 2.0?
  74.        jne     entry10         ;if not, continue
  75.        jmp     dosexit         ;else tell user & quit
  76. ;
  77. ;
  78. ; At this point we have DOS 2.0 or better.  Check the length of
  79. ; the command line parameter.  The number of characters on the command
  80. ; line is at PSP+80h and the parms themselves start at PSP+81h.
  81. ;
  82. ;
  83. entry10 label  near
  84.        mov     si,80h          ;set up address of parm length in PSP
  85.        mov     cl,[si]         ;and get length into CX
  86.        cmp     cl,2            ;look for two chars (space+digit)
  87.        je      entry20         ;if not, continue
  88.        jmp     errorexit       ;else bad parms -- exit
  89. ;
  90. ;
  91. ; At this point, we have two characters - make sure the
  92. ; first one is a space and the second is a digit.
  93. ;
  94. ;
  95. entry20 label  near
  96.        inc     si              ;get address of parm in PSP
  97.        mov     bl,[si]         ;and get the first char in BL
  98.        cmp     bl,space        ;is it a space?
  99.        je      entry30         ;if so, continue
  100.        jmp     errorexit       ;else bad parm -- exit
  101. entry30 label  near
  102.        inc     si              ;point to next (second) parm char
  103.        mov     bl,[si]         ;and get second char into BL
  104.        cmp     bl,zero         ;is it greater than or equal to a zero?
  105.        jae     entry40         ;if so, continue
  106.        jmp     errorexit       ;else not digit -- exit
  107. entry40 label  near
  108.        cmp     bl,nine         ;is it less than or equal to a nine?
  109.        jbe     entry50         ;if so, continue
  110.        jmp     errorexit       ;else not digit -- exit
  111.        page
  112. ;
  113. ;
  114. ; At this point we have a valid digit as a parameter in BL.
  115. ; Convert the digit to binary and exit, setting the DOS ERRORLEVEL.
  116. ;
  117. ;
  118. entry50 label  near
  119.        sub     bl,zero         ;convert '0' to 0, '1' to 1, etc...
  120.        mov     al,bl           ;and put requested errorlevel in AL
  121.        mov     ah,4ch          ;set DOS function code -- terminate with errorlevel
  122.        int     21h             ;and request DOS service (requested errorlevel returned)
  123. ;
  124. ;
  125. ; If we get here we don't have DOS 2.0.  Tell user about it and terminate via
  126. ; function 0 (which works for all DOS versions).
  127. ;
  128. ;
  129. dosexit label near
  130.        lea     dx,errmsg1      ;point DX to DOS error msg
  131.        mov     ah,9            ;set function code -- print string
  132.        int     21h             ;and request DOS service
  133.        xor     ax,ax           ;set function code to zero -- program terminate
  134.        int     21h             ;and request DOS service (no errorlevel returned)
  135. ;
  136. ;
  137. ; If we get here the user entered an invalid command line parameter.  Show him
  138. ; the syntax and exit, returning errorlevel 0.
  139. ;
  140. ;
  141. errorexit label near
  142.        lea     dx,errmsg2      ;point DX to syntax error msg
  143.        mov     ah,9            ;set function code -- print string
  144.        int     21h             ;and request DOS service
  145.        mov     ax,4c00h        ;set DOS function code -- terminate with errorlevel
  146.        int     21h             ;and request DOS service (errorlevel 0 returned)
  147. entry  endp
  148.        page
  149. ;
  150. ;
  151. ; Error messages
  152. ;
  153. ;
  154. errmsg1 db     'SETERROR requires DOS 2.0 or greater.', cr, lf, dollar
  155. errmsg2 equ    $
  156.         db     'SETERROR -- sets the DOS ERRORLEVEL for batch file processing', cr, lf
  157.         db     'Usage:', cr, lf
  158.         db     '      SETERROR n', cr,lf
  159.         db     'where n is between 0 and 9.', cr, lf, dollar
  160. copyright db   'SETERROR -- Copyright (C) 1983 Tony Alan Rhea'
  161. ;
  162. ;
  163. cseg   ends
  164.        end     entry
  165.  Press <ENTER> Directory # 11 --  Time left 33 minute(s) Enter File #, <L>ist, <Q>uit or <C>hg Dir. SAM : 
  166.  
  167.  
  168.         This disk copy was originally provided by "The Public Library",
  169.         the software library of the Houston Area League of PC Users.
  170.         Disks in the Public Libray are updated monthly.  Check with us
  171.         for the latest versions of all programs.
  172.  
  173.         Programs are available from the Public Library at $2 per disk
  174.         on user-provided disks.  To get a listing of the disks in the
  175.         Public Library, send a self-addressed, stamped envelope to
  176.  
  177.              Nelson Ford,  P.O.Box 61565,  Houston, TX 77208.
  178.