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 / SIMTEL / CPMUG / CPMUG042.ARK / PTSRCNVT.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  4KB  |  264 lines

  1.     TITLE    'BLOCK FILE TO TEXT FILE CONVERTER'
  2.     MACLIB    MACRO
  3.     ORG    100H
  4. BDOS    SET    5
  5. $-MACRO
  6.     LXI    H,0
  7.     DAD    SP
  8.     SHLD    STACKPTR
  9.     LXI    SP,STACK
  10.     JMP    MAIN
  11.     DS    40H
  12. STACK:
  13. STACKPTR:    DS    2
  14. ;
  15. TFCB    SET    5CH
  16. FCB1    DS    33
  17. FCB2    DS    33
  18. IBP    DB    0
  19. OBP    DB    0
  20. IBUF    DS    128
  21. OBUF    DS    128
  22. ;
  23. GNB:    ;GET NEXT BYTE
  24.     LDA    IBP
  25.     CPI    80H
  26.     JNZ    G0
  27.     CALL    DISKR
  28.     XRA    A
  29. G0:
  30.     MOV    E,A
  31.     MVI    D,0
  32.     INR    A
  33.     STA    IBP
  34.     PUSH    H
  35.     LXI    H,IBUF
  36.     DAD    D
  37.     MOV    A,M
  38.     POP    H
  39.     INX    H
  40.     RET
  41. ;
  42. DISKR:
  43.     PUSH H! PUSH D! PUSH B
  44.     DISKIO SETDMA,IBUF
  45.     DISKIO READ,FCB1
  46.     POP B! POP D! POP H
  47.     CPI    0    ;ZERO IF NO ERRORS
  48.     RZ
  49.     CPI    1    ;ONE IF END OF FILE
  50.     JZ    FINIS
  51.     JMP    ERR1    ;DISK READ ERROR
  52. ;
  53. SETINP:
  54.     FILL    FCB1,FCB1+32
  55.     FILL    FCB2,FCB2+32
  56.     MOVE    TFCB,FCB1,16
  57.     MOVE    TFCB+16,FCB2,16
  58.     LDA    FCB1+1
  59.     CPI    ' '
  60.     JZ    ERR2    ;NO INPUT FILE
  61.     LDA    FCB2+1
  62.     CPI    ' '
  63.     JZ    ERR3    ;NO OUTPUT FILE
  64.     DISKIO OPEN,FCB1
  65.     INR    A
  66.     JZ    ERR4    ;CAN'T OPEN FILE
  67.     MVI    A,80H
  68.     STA    IBP
  69.     RET
  70. ;
  71. SETOUT:
  72.     DISKIO SEARCH,FCB2
  73.     INR    A
  74.     JZ    CREATE
  75.     DISKIO DELETE,FCB2
  76. CREATE    DISKIO MAKE,FCB2
  77.     INR    A
  78.     JZ    ERR5    ;DIRECTORY FULL
  79. NEXT:
  80.     MVI    A,0
  81.     STA    OBP
  82.     RET
  83. ;
  84. DISKW:
  85.     PUSH H! PUSH D! PUSH B!
  86.     DISKIO SETDMA,OBUF
  87.     DISKIO WRITE,FCB2
  88.     POP B! POP D! POP H
  89.     CPI    0    ;ZERO IF OK
  90.     RZ
  91.     JMP    ERR6    ;ERROR IN WRITING RECORD
  92. ;
  93. ONB:    ;OUTPUT NEXT BYTE
  94.     PUSH    PSW    ;SAVE BYTE
  95.     LDA    OBP
  96.     CPI    80H
  97.     JNZ    G1
  98.     CALL    DISKW
  99.     XRA    A
  100. G1:
  101.     MOV    E,A
  102.     MVI    D,0
  103.     INR    A
  104.     STA    OBP
  105.     XTHL
  106.     MOV    A,H
  107.     LXI    H,OBUF
  108.     DAD    D
  109.     MOV    M,A
  110.     POP    H
  111.     INX    H
  112.     RET
  113. ;
  114. ; MAIN PROGRAM
  115. ;
  116. MAIN:
  117.     PRINT    <'ALS8 File to CP/M ASM File Converter',CR,LF>
  118.     PRINT    <'As of November, 1979 - Tom Digate',CR,LF>
  119.     CALL    SETINP
  120.     CALL    SETOUT
  121. ;
  122. ; TO GET A BYTE FROM INPUT FILE, CALL GNB
  123. ; TO WRITE A BYTE TO OUTPUT FILE, CALL ONB
  124. ; TO EXIT, JMP TO FINIS
  125. ;
  126. ;
  127. ; INSERT PROCESSING CODE HERE...
  128. ;
  129. CR    SET    0DH
  130. STR    SET    27H    ;SINGLE QUOTE CHARACTER
  131. LF    SET    0AH
  132. EOF    SET    01H    ;END OF FILE
  133. TAB    SET    09H
  134. ;
  135. CHRI    SET    GNB
  136. CHRO    SET    ONB
  137. ;
  138.     CALL    CHRI    ;GET FIRST BYTE AND DISCARD IT
  139. LOOP:
  140.     CALL    CHRI    ;GET LINE NUMBER
  141.     CALL    CHRI
  142.     CALL    CHRI
  143.     CALL    CHRI
  144.     CALL    CHRI    ;GET FIRST CHARACTER AND DISCARD
  145. ;
  146.     CALL    CHRI
  147.     CPI    '*'    ;IS IT A COMMENT LINE?
  148.     JZ    COMMENT
  149.     CPI    ' '    ;IS IT NO LABEL?
  150.     JZ    NOLABEL
  151. ;
  152. LABEL:
  153.     CALL    CHRO
  154.     CALL    CHRI
  155.     CPI    ' '    ;END OF LABEL?
  156.     JNZ    LABEL    ;NO
  157. NOLABEL:
  158.     MVI    A,TAB
  159.     CALL    CHRO    ;PUT IN TAB AFTER LABELS
  160. ;
  161. OPCDE:    ;PROCESS OP-CODES NOW
  162.     CALL    CHRI    ;FIND FIRST NON BLANK
  163.     CPI    ' '
  164.     JZ    OPCDE
  165. FOUNDOP:
  166.     CALL    CHRO
  167.     CALL    CHRI
  168.     CPI    CR
  169.     JZ    ENDLINE
  170.     CPI    ' '
  171.     JNZ    FOUNDOP    ;STILL AN OP-CODE
  172.     MVI    A,TAB
  173.     CALL    CHRO    ;OUTPUT A TAB BETWEEN OPCODE AND OPERAND
  174. OPERAND:
  175.     CALL    CHRI    ;FIND NON-BLANK
  176. OP2:
  177.     CPI    ' '
  178.     JZ    COMMENTX
  179. ; THIS CHARACTER CAN BE *,CR, OR OPERAND
  180.     CPI    '*'
  181.     JZ    COMMENTX
  182.     CPI    CR
  183.     JZ    ENDLINE
  184.     CPI    STR
  185.     JZ    STRING
  186. OP1:
  187.     CALL    CHRO
  188.     JMP    OPERAND    ;GET NEXT CHARACTER
  189. ENDLINE1:
  190.     MVI    A,STR
  191.     CALL    CHRO
  192.     MVI    A,CR
  193. ENDLINE:
  194.     CALL    CHRO
  195.     MVI    A,LF
  196.     CALL    CHRO
  197.     CALL    CHRI
  198.     CPI    EOF
  199.     JZ    FINIS
  200.     JMP    LOOP
  201. STRING:
  202.     CALL    CHRO
  203.     CALL    CHRI
  204.     CPI    STR
  205.     JZ    OP1
  206.     CPI    CR
  207.     JZ    ENDLINE1
  208.     JMP    STRING
  209. COMMENTX:
  210.     MVI    A,TAB
  211.     CALL    CHRO
  212. COMMENT:
  213.     MVI    A,';'
  214.     CALL    CHRO
  215. COMLOOP:
  216.     CALL    CHRI
  217.     CPI    CR
  218.     JZ    ENDLINE
  219.     CALL    CHRO
  220.     JMP    COMLOOP
  221. ;
  222. ; FINIS CLOSES OUTPUT FILE WITH CONTROL-Z'S
  223. ;
  224. FINIS:
  225.     DISKIO SETDMA,OBUF
  226.     MVI    B,80H
  227. CLEAN:
  228.     MVI    A,1AH
  229.     PUSH    B
  230.     CALL    ONB
  231.     POP    B
  232.     DCR    B
  233.     JNZ    CLEAN
  234.     DISKIO CLOSE,FCB2
  235.     INR    A
  236.     JZ    ERR7    ;CAN'T CLOSE
  237.     PRINT    <'Conversion Complete',CR,LF>
  238. FINAL:    LHLD    STACKPTR
  239.     SPHL
  240.     RET
  241. ;
  242. ; ERROR HANDLING
  243. ;
  244. ERR1:    LXI D,EMSG1 ! JMP PMSG
  245. ERR2:    LXI D,EMSG2 ! JMP PMSG
  246. ERR3:    LXI D,EMSG3 ! JMP PMSG
  247. ERR4:    LXI D,EMSG4 ! JMP PMSG
  248. ERR5:    LXI D,EMSG5 ! JMP PMSG
  249. ERR6:    LXI D,EMSG6 ! JMP PMSG
  250. ERR7:    LXI D,EMSG7 ! JMP PMSG
  251. ;
  252. PMSG:    MVI C,9 ! CALL BDOS ! JMP FINAL
  253. ;
  254. ; ERROR MESSAGES
  255. ;
  256. EMSG1:    DB    'Disk read error$'
  257. EMSG2:    DB    'No input file specified$'
  258. EMSG3:    DB    'No output file specified$'
  259. EMSG4:    DB    'Can''t open input file$'
  260. EMSG5:    DB    'Can''t make new output file$'
  261. EMSG6:    DB    'Disk write error$'
  262. EMSG7:    DB    'Can''t close output file$'
  263.     END
  264.