home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / utils / asmutl / clnres.lbr / CLNRES.AZM / CLNRES.ASM
Encoding:
Assembly Source File  |  1987-11-27  |  5.6 KB  |  374 lines

  1. ;  CLNRES10.ASM
  2. ;
  3. ;  Cleans a file freshly created by RESOURCE or MSOURCE.
  4. ;
  5. ;  Removes comments from the end of a line which is only a hex address
  6. ;  and when a label line is encountered, and the line contains only a
  7. ;  comment with no opcode it appends the next line in the file one tab
  8. ;  after the label.
  9. ;
  10. ;    LABEL:        ;1234H
  11. ;        LXI    H,L0234 ;0234H
  12. ;  Becomes
  13. ;
  14. ;    LABEL:    LXI    H,L0234
  15. ;
  16. ;  Lines with comments only are not affected.  Any lines which have been
  17. ;  edited and appear as:
  18. ;
  19. ;  LABEL:    OPCODE    OPERAND ;COMMENT
  20. ;
  21. ;  will only have the comment removed.
  22. ;
  23. ;  To use the program type:
  24. ;
  25. ;  CLNRES filename (newname)
  26. ;
  27. ;  CLNRES looks for an .ASM file and creates a .$$$ file.
  28. ;
  29. ;    Please advise on any problems:      J.A. Prest
  30. ;                      18704 Glastonbury Rd
  31. ;                      Detroit, MI. 48219
  32. ;                      313-538-1204
  33. ;    2,26,80     J.A.P
  34. ;
  35. CPM    EQU    0
  36. BDOS    EQU    5
  37. FCB    EQU    5CH
  38. FCB2    EQU    6CH
  39. TBUFF    EQU    80H
  40. PRNSTR    EQU    9
  41. OPEN    EQU    0FH
  42. CLOSE    EQU    10H
  43. DELETE    EQU    13H
  44. READ    EQU    14H
  45. WRITE    EQU    15H
  46. CREATE    EQU    16H
  47. SETBFR    EQU    1AH
  48. CR    EQU    0DH
  49. LF    EQU    0AH
  50. EOF    EQU    1AH
  51. BFRLEN    EQU    2000H
  52. ;
  53.     ORG    100H
  54. START:    LXI    SP,STACK+20
  55.     MVI    C,PRNSTR
  56.     LXI    D,SIGNON
  57.     CALL    BDOS
  58.     LXI    H,FCB
  59.     LXI    D,REAFCB
  60.     MVI    C,9
  61.     CALL    MOVE
  62. ;
  63. ;  Initialize
  64. ;
  65.     XRA    A
  66.     STA    READEX
  67.     STA    READRC
  68.     LXI    H,BFRLEN
  69.     SHLD    RBFLEN
  70.     SHLD    REAPTR
  71.     MVI    C,OPEN
  72.     LXI    D,REAFCB
  73.     CALL    BDOS
  74.     INR    A
  75.     JNZ    COMP02
  76.     MVI    C,PRNSTR
  77.     LXI    D,NOSMSG
  78.     CALL    BDOS
  79.     JMP    CPM
  80. COMP02:    LDA    FCB2+1
  81.     LXI    H,FCB
  82.     CPI    ' '
  83.     JZ    COMP04
  84.     LXI    H,FCB2
  85. COMP04:    LXI    D,WRIFCB
  86.     MVI    C,9
  87.     CALL    MOVE
  88.     XRA    A
  89.     STA    WRITEX
  90.     STA    WRITRC
  91.     LXI    H,BFRLEN
  92.     SHLD    WBFLEN
  93.     LXI    H,0
  94.     SHLD    WRIPTR
  95.     MVI    C,DELETE
  96.     LXI    D,WRIFCB
  97.     CALL    BDOS
  98.     MVI    C,CREATE
  99.     LXI    D,WRIFCB
  100.     CALL    BDOS
  101.     INR    A
  102.     JNZ    WORKLP
  103.     MVI    C,PRNSTR
  104.     LXI    D,NOSPMS
  105.     CALL    BDOS
  106.     JMP    CPM
  107. ;
  108. ;  Main work loop.   Brings each line into intermediate buffer and tests
  109. ;  it for the proper cleanup feature.
  110. ;
  111. WORKLP:    LXI    H,INTBFR-1
  112.     CALL    LODI02
  113.     XRA    A
  114.     STA    COMSW
  115.     LXI    H,INTBFR-1
  116. WORK02:    INX    H
  117.     MOV    A,M
  118.     CPI    ';'
  119.     JNZ    WORK03
  120.     STA    COMSW
  121.     JMP    SNDIBF
  122. WORK03:    CPI    ' '+1
  123.     JNC    WORK02
  124.     DCX    H
  125.     SHLD    IBFPTR
  126.     INX    H
  127. WORK04:    MOV    A,M
  128.     INX    H
  129.     CPI    LF
  130.     JZ    WORK06
  131.     CPI    ' '+1
  132.     JC    WORK04
  133.     CPI    ';'
  134. WORK06:    CZ    LODIBF
  135. SNDIBF:    LXI    H,SW
  136.     MVI    M,0FFH
  137.     SHLD    IBFPTR
  138. SIBF02:    LXI    H,SW
  139.     MOV    A,M
  140.     CMA
  141.     MOV    M,A
  142. SIBF04:    LHLD    IBFPTR
  143.     INX    H
  144.     SHLD    IBFPTR
  145.     MOV    A,M
  146. SIBF06:    CALL    PUT
  147.     CPI    LF
  148.     JZ    WORKLP
  149.     CPI    27H
  150.     JZ    SIBF02
  151.     CPI    ';'
  152.     JNZ    SIBF04
  153.     LDA    SW
  154.     ORA    A
  155.     JNZ    SIBF04
  156.     LDA    COMSW
  157.     ORA    A
  158.     JNZ    SIBF04
  159.     MVI    A,CR
  160.     CALL    PUT
  161.     MVI    A,LF
  162.     JMP    SIBF06
  163. ;
  164. LODI02:    SHLD    IBFPTR
  165. LODIBF:    CALL    GET
  166.     LHLD    IBFPTR
  167.     INX    H
  168.     SHLD    IBFPTR
  169.     MOV    M,A
  170.     CPI    LF
  171.     JNZ    LODIBF
  172.     RET
  173. ;
  174. ;  Done with the reads so send the rest of the line to the write buffer
  175. ;  and fill the sector out with EOF's.    Then close the file.
  176. ;
  177. DONE:    LHLD    WRIPTR
  178.     MOV    A,L
  179.     ANI    7FH
  180.     JNZ    DONE2
  181.     SHLD    WBFLEN
  182. DONE2:    MVI    A,EOF
  183.     PUSH    PSW
  184.     CALL    PUT
  185.     POP    PSW
  186.     JNZ    DONE
  187.     MVI    C,CLOSE
  188.     LXI    D,WRIFCB
  189.     CALL    BDOS
  190.     INR    A
  191.     JNZ    DONE4
  192.     MVI    C,PRNSTR
  193.     LXI    D,BADCMS
  194.     CALL    BDOS
  195.     JMP    CPM
  196. DONE4:    LXI    D,DONEMS
  197.     MVI    C,PRNSTR
  198.     CALL    BDOS
  199.     JMP    CPM
  200. ;
  201. ;  Get a byte of data from the input file.
  202. ;
  203. GET:    CALL    SEQREA
  204.     CPI    EOF
  205.     RNZ
  206.     JMP    DONE
  207. ;
  208. ;  Move memory (HL) to (DE) for length (C).
  209. ;
  210. MOVE:    MOV    A,M
  211.     STAX    D
  212.     INX    H
  213.     INX    D
  214.     DCR    C
  215.     JNZ    MOVE
  216.     RET
  217. ;
  218. ;  Sequential READ routine
  219. ;
  220. ;  Calling this routine returns the next character in the file or a EOF
  221. ;  at the end of the file.
  222. ;
  223. SEQREA:    LHLD    RBFLEN
  224.     XCHG
  225.     LHLD    REAPTR
  226.     MOV    A,L
  227.     SUB    E
  228.     MOV    A,H
  229.     SBB    D
  230.     JC    READ08
  231.     LXI    H,0
  232.     SHLD    REAPTR
  233. READ02:    XCHG
  234.     LHLD    RBFLEN
  235.     MOV    A,E
  236.     SUB    L
  237.     MOV    A,D
  238.     SBB    H
  239.     JNC    READ06
  240.     LHLD    RBFLOC
  241.     DAD    D
  242.     XCHG
  243.     MVI    C,SETBFR
  244.     CALL    BDOS
  245.     LXI    D,REAFCB
  246.     MVI    C,READ
  247.     CALL    BDOS
  248.     ORA    A
  249.     JNZ    READ04
  250.     LXI    D,80H
  251.     LHLD    REAPTR
  252.     DAD    D
  253.     SHLD    REAPTR
  254.     JMP    READ02
  255. ;
  256. READ04:    LHLD    REAPTR
  257.     SHLD    RBFLEN
  258. READ06:    LXI    D,TBUFF
  259.     MVI    C,SETBFR
  260.     CALL    BDOS
  261.     LXI    H,0
  262.     SHLD    REAPTR
  263. READ08:    XCHG
  264.     LHLD    RBFLOC
  265.     DAD    D
  266.     XCHG
  267.     LHLD    RBFLEN
  268.     MOV    A,L
  269.     ORA    H
  270.     MVI    A,EOF
  271.     RZ
  272.     LDAX    D
  273.     LHLD    REAPTR
  274.     INX    H
  275.     SHLD    REAPTR
  276.     RET
  277. ;
  278. ;  Sequential WRITE routing
  279. ;
  280. ;  Calling this routine with a character in the A register will load it
  281. ;  into the write file.  All disk operations except CLOSE is automatic.
  282. ;  When WRIPTR=WBFLEN, the buffer is sent to the disk.
  283. ;
  284. PUT:    PUSH    PSW
  285.     LHLD    WBFLEN
  286.     XCHG
  287.     LHLD    WRIPTR
  288.     MOV    A,L
  289.     SUB    E
  290.     MOV    A,H
  291.     SBB    D
  292.     JC    PUT08
  293.     LXI    H,0
  294.     SHLD    WRIPTR
  295. PUT02:    XCHG
  296.     LHLD    WBFLEN
  297.     MOV    A,E
  298.     SUB    L
  299.     MOV    A,D
  300.     SBB    H
  301.     JNC    PUT06
  302.     LHLD    WBFLOC
  303.     DAD    D
  304.     XCHG
  305.     MVI    C,SETBFR
  306.     CALL    BDOS
  307.     LXI    D,WRIFCB
  308.     MVI    C,WRITE
  309.     CALL    BDOS
  310.     ORA    A
  311.     JNZ    PUT04
  312.     LXI    D,80H
  313.     LHLD    WRIPTR
  314.     DAD    D
  315.     SHLD    WRIPTR
  316.     JMP    PUT02
  317. ;
  318. PUT04:    MVI    C,PRNSTR
  319.     LXI    D,FULMSG
  320.     CALL    BDOS
  321.     POP    PSW
  322.     JMP    CPM
  323. ;
  324. PUT06:    LXI    D,TBUFF
  325.     MVI    C,SETBFR
  326.     CALL    BDOS
  327.     LXI    H,0
  328.     SHLD    WRIPTR
  329. PUT08:    XCHG
  330.     LHLD    WBFLOC
  331.     DAD    D
  332.     XCHG
  333.     POP    PSW
  334.     STAX    D
  335.     LHLD    WRIPTR
  336.     INX    H
  337.     SHLD    WRIPTR
  338.     RET
  339. ;
  340. SIGNON:    DB    CR,LF,'CLNRES Utility, Version 1.0'
  341.     DB    CR,LF,'Cleans Resource File'
  342.     DB    CR,LF,'$'
  343. NOSMSG:    DB    CR,LF,'No Source File$'
  344. FULMSG:    DB    CR,LF,'Disk Full$'
  345. NOSPMS:    DB    CR,LF,'No Directory Space$'
  346. BADCMS:    DB    CR,LF,'Cannot Close File$'
  347. DONEMS:    DB    'CLNRES Complete$'
  348. ;
  349. ;  Read buffer file control block and variables
  350. ;
  351. REAFCB:    DB    0,'        ASM'
  352. READEX:    DW    0,0,0,0,0,0,0,0,0,0
  353. READRC:    DB    0
  354. RBFLOC:    DW    READBF
  355. RBFLEN:    DW    BFRLEN
  356. REAPTR:    DW    0
  357. ;
  358. ;  Write buffer File Control Block and variables
  359. ;
  360. WRIFCB:    DB    0,'        $$$'
  361. WRITEX:    DW    0,0,0,0,0,0,0,0,0,0
  362. WRITRC:    DB    0
  363. WBFLOC:    DW    WRITBF
  364. WBFLEN:    DW    BFRLEN
  365. WRIPTR:    DW    0
  366. IBFPTR:    DS    2
  367. COMSW:    DS    1
  368. SW:    DS    1
  369. INTBFR:    DS    100H
  370. STACK:    DS    20
  371. READBF:    DS    BFRLEN
  372. WRITBF:    DS    BFRLEN
  373.     END
  374. Wp