home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / submit / subtool.lbr / TESTFILE.AQM / TESTFILE.ASM
Assembly Source File  |  1986-11-15  |  3KB  |  133 lines

  1. ; TESTFILE.ASM - Aborts Submit if file is not present
  2. ; Mark Anaker 08/18/83
  3. ; From Byte magazine listing in the March 1985 issue .
  4. ; Modified by Merlin R. Null, 5/23/85.
  5. ; Added BEGIN and DONE to return to CP/M without
  6. ; warm boot when aborting.  For CP/M 2.2 only.
  7. ;
  8. ;----------------------------------------------------------------
  9. ;
  10. ; Define CP/M Routines
  11. ;
  12. RCONF    EQU    1        ; read CON: into (A)
  13. WCONF    EQU    2        ; write (A) to CON:
  14. DRIVE    EQU    4        ; check current drive number
  15. BDOS    EQU    5        ; system call entry
  16. CSTAF    EQU    11        ; check CON: status
  17. DELFIL    EQU    19        ; delete file
  18. ;
  19. ; Misc. Equates
  20. ;
  21. BOOT    EQU    0
  22. FCB    EQU    005CH        ; default file control block
  23. BEL    EQU    7        ; bell
  24. LF    EQU    10        ; line feed
  25. CR    EQU    13        ; carriage return
  26. TRUE    EQU    0FFH        ; flag for true
  27. TBUFF    EQU    80H        ; transient default buffer
  28. ;
  29.     ORG    0100H        ; load at start of TPA
  30. ;
  31. ; Set Up Stack
  32. ;
  33. BEGIN:    LXI    H,0        ; save CP/M stack
  34.     DAD    SP
  35.     SHLD    CPMSP
  36.     LXI    SP,STAK        ; set up local stack
  37.     LDA    DRIVE        ; save current disk
  38.     STA    DRSAV
  39.     MVI    C,CSTAF        ; check console status
  40.     CALL    BDOS        ; for any input
  41.     ORA    A
  42.     JZ    START        ; if none, run the program
  43.     MVI    C,RCONF        ; read and ignore CON:
  44.     CALL    BDOS        ; (debounce keys)
  45.     JMP    START        ; run the program
  46. ;
  47. ;     COMMON SUBROUTINES
  48. ;
  49. ; Message Pointed to by Stack out to Console
  50. ;
  51. SPMSG:    XTHL            ; get "return address" to HL
  52.     PUSH    B        ; save BC
  53.     PUSH    D        ; save DE
  54. ;
  55. SPMSG1:    MOV    A,M        ; get one message character
  56.     ORA    A        ; check for zero
  57.     INX    H        ; point to next
  58.     JZ    SPMSG2        ; exit if done
  59.     MVI    C,WCONF        ; select write to CON:
  60.     MOV    E,A        ; character to E
  61.     PUSH    H        ; save HL
  62.     CALL    BDOS        ; output to CP/M
  63.     POP    H        ; restore HL
  64.     JMP    SPMSG1        ; get another
  65. ;
  66. SPMSG2:    POP    D        ; restore DE
  67.     POP    B        ; restore BC
  68.     XTHL            ; restore stack for
  69.     RET            ; "return" when done
  70. ;
  71. ; End of Program Execution
  72. ;
  73. DONE:    LDA    DRSAV        ; restore "current" disk
  74.     STA    DRIVE
  75.     LHLD    CPMSP        ; restore CP/M stack
  76.     SPHL
  77.     RET            ; return to CP/M
  78. ;
  79. ; Main Program Area
  80. ;
  81. START:    LDA    TBUFF        ; get command line tail length
  82.     CPI    16        ; is [d]:filename.ext > 15?
  83.     JNC    BADFIL        ; yes, branch to error message
  84.     MVI    C,17        ; search for first function
  85.     LXI    D,FCB        ; point to filename
  86.     CALL    BDOS        ; let BDOS find it
  87.     CPI    TRUE        ; true if file not found
  88.     JZ    ABORT        ; nope, not here
  89.     CALL    SPMSG        ; message out to console
  90.     DB    CR,LF,'File found, continuing with Submit',CR,LF,0
  91.     JMP    BOOT        ; found, continue with Submit
  92. ;
  93. ; Bad File Name Message
  94. ;
  95. BADFIL:    CALL    SPMSG        ; message to console
  96.     DB    CR,LF
  97.     DB    '***  Filename exceeds maximum length  ***',CR,LF,LF,0
  98.     JMP    KILLIT        ; kill $$$.SUB
  99. ;
  100. ; Abort SUBMIT Operaton, File Not Found
  101. ;
  102. ABORT:    CALL    SPMSG        ; message to console
  103.     DB    CR,LF,LF
  104.     DB    '****  File not found  ****',CR,LF,0
  105.                 ; fall through to KILLIT
  106. ;
  107. ; Kill $$$.SUB
  108. ;
  109. KILLIT:    LXI    D,SUBFCB    ; point to $$$.SUB
  110.     MVI    C,DELFIL    ; DELETE FILE function
  111.     CALL    BDOS        ; let BDOS do it
  112.     CALL    SPMSG        ; message to console
  113.     DB    BEL,CR,LF,'Submit processing aborted!',CR,LF,0
  114.     JMP    DONE        ; exit to CP/M
  115. ;
  116. ; Data Area
  117. ;
  118. SUBFCB:    DB    1        ; drive A:
  119.     DB    '$$$     SUB'    ; SUBMIT processor file
  120.     DS    24        ; the rest of the FCB
  121. ;
  122. ; Define Space
  123. ;
  124. DRSAV:    DB    0        ; Current Drive Number
  125. CPMSP:    DW    0        ; CP/M stack pointer
  126. ;
  127. ;
  128.     DS    20H        ; reserve stack of 32 bytes
  129. STAK:
  130. ;
  131.     END
  132. T        ; nope, not here
  133.     CALL    SPMSG        ; message ou