home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / SUBMIT / NEWBAT3.LBR / NEWBAT3.AZM / NEWBAT3.ASM
Assembly Source File  |  2000-06-30  |  6KB  |  293 lines

  1. ;NEWBATCH.ASM
  2. ;
  3. ;01/18/88    REVISED TO VERSION 3 VIA DISASSEMBLY OF VERSION 2.
  4. ;        REMOVED ^Z AT START OF SIGN ON MESSAGE, FIXED ERROR
  5. ;        HANDLING IN CASE OF DISK/DIRECTORY FULL.      TAH
  6. ;
  7. BDOS    EQU    0005
  8. FCB    EQU    005CH
  9. CR    EQU    0DH
  10. LF    EQU    0AH
  11. ;
  12. ;
  13.     ORG    100H
  14. ;
  15.     LXI    SP,STACK
  16.     LDA    FCB+1
  17.     CPI    '@'        ;ANY FILE NAME SPECIFIED?
  18.     JP    L0116
  19.     MVI    C,9        ;NO, GIVE MESSAGE AND QUIT
  20.     LXI    D,NFNMSG
  21.     CALL    BDOS
  22.     JMP    EXIT
  23. L0116:
  24.     MVI    C,0FH
  25.     LXI    D,FCB
  26.     CALL    BDOS        ;SEE IF FILE ALREADY EXISTS
  27.     INR    A
  28.     JZ    NOFILE
  29.     MVI    C,9        ;QUIT IF IT DOES.
  30.     LXI    D,EXISTMSG
  31.     CALL    BDOS
  32.     JMP    EXIT
  33. ;FIRST DELETE ANY PRE-EXISTING .COM FILE
  34. NOFILE:
  35.     MVI    C,13H        ;NOT NECESSARY SINCE
  36.     LXI    D,FCB        ;WE WOULD NOT GET HERE
  37.     CALL    BDOS        ;IF IT DID EXIST.
  38. ;NOW CREATE IT
  39.     MVI    C,16H
  40.     LXI    D,FCB
  41.     CALL    BDOS
  42.     LXI    D,DIMSG
  43.     INR    A
  44.     JZ    EXIT1        ;QUIT IF NO SPACE
  45. ;SET DMA
  46.     MVI    C,1AH
  47.     LXI    D,STACK
  48.     PUSH    D
  49.     CALL    BDOS
  50. ;COPY HEADER INTO .COM FILE
  51. ;(THE PORTION THAT CREATES THE $$$.SUB FILE)
  52. ;HERE WE ONLY WRITE OUT 2 SECTORS HENCE THE LENGTH TEST LATER ON.
  53. ;
  54.     MVI    C,15H        ;WRITE
  55.     LXI    D,FCB
  56.     CALL    BDOS
  57.     LXI    D,DAMSG
  58.     ORA    A
  59.     JNZ    EXIT1        ;DISK FULL IF NOT ZERO
  60. ;FINISH LAST PORTION
  61.     POP    D
  62.     LXI    H,128
  63.     DAD    D
  64.     XCHG            ;POINT TO NEXT SECTOR
  65.     MVI    C,1AH        ;SET DMA ADDRESS
  66.     CALL    BDOS
  67.     MVI    C,15H        ;AND WRITE IT
  68.     LXI    D,FCB
  69.     CALL    BDOS
  70.     MVI    C,9
  71.     LXI    D,SOMSG        ;NOW SIGN ON
  72.     CALL    BDOS
  73. L0165:
  74.     LXI    H,SUBBUF
  75.     MVI    B,80H
  76. CLRLOOP:
  77.     MVI    M,0        ;CLEAR 128 BYTES OF MEMORY
  78.     INX    H
  79.     DCR    B
  80.     JNZ    CLRLOOP
  81. ;
  82.     MVI    A,50H        ;MAX CHARACTER COUNT
  83.     STA    COUNT
  84.     MVI    C,0AH
  85.     LXI    D,COUNT
  86.     CALL    BDOS        ;GET SUBMIT COMMAND LINE FROM CONSOLE
  87.     LDA    SUBBUF
  88.     ORA    A        ;EMPTY LINE?
  89.     JZ    L01B2        ;YES, FINISH UP
  90.     MOV    E,A        ;LINE LENGTH TO E
  91.     MVI    D,0        ;CLEAR D
  92.     LXI    H,SUB1
  93.     DAD    D        ;POINT TO END OF LINE
  94.     MVI    M,0        ;TERMINATE WITH 00
  95.     INX    H
  96.     MVI    M,'$'        ;FOLLOWED BY '$'
  97.     INX    H
  98.     MVI    M,CR
  99.     INX    H
  100.     MVI    M,LF        ;AND A CRLF
  101.     MVI    C,1AH
  102.     LXI    D,SUBBUF
  103.     CALL    BDOS
  104.     MVI    C,15H
  105.     LXI    D,FCB
  106.     CALL    BDOS        ;NOW WRITE IT TO DISK.
  107.     LXI    D,DATMSG    ;PREPARE FOR ERROR
  108.     ORA    A
  109.     JNZ    EXIT1        ;WRITE ERROR.
  110.     MVI    C,9
  111.     LXI    D,CRLF
  112.     CALL    BDOS        ;SEND A CRLF TO THE CONSOLE
  113.     JMP    L0165        ;AND GET ANOTHER LINE.
  114. L01B2:
  115.     MVI    A,0FFH        ;FILE TERMINATOR
  116.     STA    STACK
  117.     MVI    C,1AH
  118.     LXI    D,STACK
  119.     CALL    BDOS
  120.     MVI    C,15H
  121.     LXI    D,FCB
  122.     CALL    BDOS        ;WRITE OUT TERMINATOR
  123.     MVI    C,10H        ;CLOSE .COM FILE
  124.     LXI    D,FCB
  125.     CALL    BDOS
  126.     LXI    D,DIMSG
  127.     INR    A
  128.     JZ    EXIT        ;CLOSE ERROR
  129.     MVI    C,9
  130.     LXI    D,ENDMSG
  131.     CALL    BDOS        ;SIGN OFF
  132. EXIT:
  133.     MVI    C,0
  134.     JMP    BDOS
  135. ;
  136. EXIT1:
  137.     MVI    C,9
  138.     CALL    BDOS        ;DISPLAY MESSAGE
  139.     LXI    D,FCB
  140.     MVI    C,13H
  141.     CALL    BDOS        ;DELETE FILE
  142.     JMP    EXIT
  143. CRLF:
  144.     DB    CR,LF,'$'
  145. SOMSG:
  146.     DB    CR,LF,'********************** '
  147.     DB    'NEWBATCH  v3 ***********************'
  148.     DB    CR,LF,LF,'  A program '
  149.     DB    'for creating SUBMIT-type '
  150.     DB    'BATCH COMmand files.',0DH
  151.     DB    CR,LF,'           A revision '
  152.     DB    'of MAKBATCH by E. Helliwell'
  153.     DB    CR,LF,'        with thanks '
  154.     DB    'to Castle Oaks Computer '
  155.     DB    'Services.',CR,LF,LF,'Enter '
  156.     DB    'the desired COMMAND lines '
  157.     DB    'below.',CR,LF,LF,'Enter '
  158.     DB    '<CR> ALONE to Terminate '
  159.     DB    'Input:',CR,LF,LF,'*************'
  160.     DB    '**********************************'
  161.     DB    '************',CR,LF,LF
  162.     DB    '$'
  163. ENDMSG:
  164.     DB    CR,LF,LF,'NEWBATCH COMmand '
  165.     DB    'File has been written to '
  166.     DB    'disk.',CR,LF,'$'
  167. NFNMSG:
  168.     DB    7,CR,LF,'No filename given.'
  169.     DB    CR,LF,'Include filename '
  170.     DB    '(including COM filetype) '
  171.     DB    'in command line.',CR,LF
  172.     DB    'Example:   NEWBATCH START.COM'
  173.     DB    CR,LF,'$'
  174. EXISTMSG:
  175.     DB    7,CR,LF,'File already exists. '
  176.     DB    ' Choose another name and '
  177.     DB    'start over.',CR,LF,'$'
  178.     DB    '*********************',0DH
  179.     DB    0AH,0AH,'$'
  180. ;
  181. ;THE FOLLOWING ARE THE FIRST TWO SECTORS OF THE FILE THAT THIS
  182. ;PROGRAM CREATES. THIS MUST BE ASSEMBLED WITH AN OFFSET BECAUSE,
  183. ;ALTHOUGH IT RESIDES AT THE CURRENT ADDRESS, IT WILL ACTUALLY
  184. ;EXECUTE WITH AN ORIGIN ADDRESS OF 0100H AND ASM.COM LACKS
  185. ;THE PHASE/DEPHASE PSEUDO-OP OF M80.COM
  186. ;
  187. OFFSET    EQU    $-100H
  188. SUBDAT    EQU    0200H        ;SUBMIT COMMANDS START HERE
  189. STK    EQU    SUBDAT-2
  190. ;
  191. STACK:
  192.     LXI    SP,STK
  193.     LXI    D,SUBFCB
  194.     MVI    C,13H        ;DELETE FILE
  195.     CALL    BDOS
  196.     LXI    D,SUBFCB
  197.     MVI    C,16H        ;MAKE FILE
  198.     CALL    BDOS
  199.     LXI    D,DIRMSG
  200.     INR    A
  201.     JZ    EXIT2        ;QUIT IF NO SPACE
  202.     LXI    H,SUBDAT
  203.     SHLD    WRTADR
  204.     MVI    B,0
  205. ;
  206. L0122    EQU    $-OFFSET    ;LOCATE LAST COMMAND
  207.     INR    B
  208.     MOV    A,M
  209.     CPI    0FFH        ;TERMINATOR?
  210.     JZ    L0136        ;YES, WRITE COMMANDS TO $$$.SUB
  211.     LXI    D,0080H
  212.     LHLD    WRTADR
  213.     DAD    D
  214.     SHLD    WRTADR
  215.     JMP    L0122        ;NO, LOOP BACK
  216. ;
  217. L0136    EQU    $-OFFSET
  218.     ADD    B
  219.     JZ    L0162        ;DONE ALL COMMANDS, FINISH UP
  220.     PUSH    B
  221.     LHLD    WRTADR
  222.     LXI    D,-128        ;WRITE COMMANDS IN REVERSE ORDER
  223.     DAD    D
  224.     SHLD    WRTADR
  225.     XCHG
  226.     MVI    C,1AH        ;SET DMA
  227.     CALL    BDOS
  228.     LXI    D,SUBFCB
  229.     MVI    C,15H        ;WRITE NEXT LINE
  230.     CALL    BDOS
  231.     LXI    D,DATMSG
  232.     ORA    A        ;DISK FULL IF NOT ZERO
  233.     JNZ    EXIT2
  234.     POP    B
  235.     DCR    B
  236.     MOV    A,B
  237.     CPI    1
  238.     JNZ    L0136        ;DO NEXT LINE
  239. ;
  240. L0162    EQU    $-OFFSET
  241.     LXI    D,SUBFCB
  242.     MVI    C,10H        ;CLOSE FILE
  243.     CALL    BDOS
  244.     LXI    D,DIRMSG
  245.     INR    A
  246.     JZ    EXIT2        ;CLOSE ERROR
  247. ;
  248. ;
  249.     MVI    C,0        ;SYSTEM RESET
  250.     JMP    BDOS        ;AND DONE.
  251. ;
  252. EXIT2    EQU    $-OFFSET
  253.     MVI    C,9
  254.     CALL    BDOS        ;DISPLAY MESSAGE
  255.     LXI    D,SUBFCB
  256.     MVI    C,13H        ;DELETE FILE IF ERROR
  257.     CALL    BDOS
  258.     JMP    0000        ;WARM START
  259. ;
  260. ;
  261. WRTADR    EQU    $-OFFSET
  262. WADR:    DW    0000    ;POINTER FOR NEXT SECTOR OF DATA
  263. ;
  264. ;THE NEXT TWO MESSAGES ARE EACH DEFINED WITH TWO LABELS SO THAT BOTH
  265. ;THIS PROGRAM AND THE ONE IT CREATES CAN REFERENCE THEM.
  266.  
  267. DIRMSG    EQU    $-OFFSET
  268. DIMSG:    DB    'No directory space',21H,'$'
  269. ;
  270. DATMSG    EQU    $-OFFSET
  271. DAMSG:    DB    'Out of data space',21H,'$'
  272. ;
  273. SUBFCB    EQU    $-OFFSET
  274.     DB    01        ;01=DRIVE A:
  275.     DB    '$$$     SUB'
  276.     DB    0,0,0,0,0,0,0
  277.     DB    0,0,0,0,0,0,0
  278.     DB    0,0,0,0,0,0,0
  279.     DB    0,0,0,0,0,0
  280. ;
  281. LENGTH    EQU    $-STACK
  282. ;
  283.      IF    (256 - LENGTH) SHR 15    ;ERROR IF > 2 SECTORS LENGTH
  284. ERROR    EQU    1/0    ;! .COM HEADER OVERFLOW
  285.      ENDIF
  286. ;
  287. ;DATA BUFFER FOR COMMANDS TO BE SUBMITTED
  288. ;
  289. COUNT    EQU    4FFH
  290. SUBBUF    EQU    500H
  291. SUB1    EQU    501H
  292.     END
  293.