home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol004 / change.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  3.7 KB  |  280 lines

  1. ;        XEK->CPM
  2. ;
  3. ; THIS PROGRAM WILL CHANGE SOURCE PROGRAMS WRITTEN BY SP1,
  4. ; ALS-8, XEK, AND PDS ASSEMBLERS TO TEXT ACCEPTABLE TO CP/M
  5. ; ASSEMBLERS AND EDITORS.
  6. ;
  7. ; TO USE THE PROGRAM, FIRST THE SP1 FILE MUST BE SAVED ON THE
  8. ; CP/M DISK.  LOAD THE SOURCE FILE INTO RAM AT 100H, BOOT IN
  9. ; CP/M AND TYPE:
  10. ;    SAVE XX NAME.EXT
  11. ;
  12. ; NEXT RUN THE CHANGE PROGRAM BY TYPING THE COMMAND LINE:
  13. ;    A>CHANGE B:NAME.EXT NAME2.EXT
  14. ;
  15. ; WHERE NAME.EXT IS THE SP1 FILE NAME AND
  16. ;       NAME2.EXT IS THE CP/M FILE NAME
  17. ;
  18. ; REF. DDJ VOL. 41, PG 37
  19. ;
  20. ; WRITTEN BY MARK M. ZEIGER
  21. ;
  22. ;************************************************************
  23. ;
  24.     ORG    100H
  25. BDOS    EQU    0005H
  26. SOURCE    EQU    5CH
  27. PRTBUF    EQU    9
  28. OPEN    EQU    15
  29. CLOSE    EQU    16
  30. MAKE    EQU    22
  31. READFIL    EQU    20
  32. WRTFILE    EQU    21
  33. SETDMA    EQU    26
  34. DELETE    EQU    19
  35. RESET    EQU    13
  36. BL    EQU    ' '
  37. ;
  38. ;
  39.     LXI    H,0
  40.     DAD    SP
  41.     SHLD    STKSAVE
  42.     LXI    SP,NEWSTK
  43. ;
  44.     CALL    GETNAMES
  45.     CALL    OPENFILE
  46.     CALL    READREC
  47.     CALL    MOVEREC
  48.     CALL    WRITEREC
  49.     CALL    CLOSEFILE
  50. ;
  51.     LHLD    STKSAVE
  52.     SPHL
  53.     RET
  54. ;
  55. ;
  56. TAB    DB    5
  57. EOLCNT    DB    0
  58. DEST    DB    0,'           ',0,0    ;ELEVEN BLANKS
  59.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  60. INBUF    DS    80H
  61. OUTBUF    DS    128
  62.     DS    40H
  63. NEWSTK    EQU    $-1
  64. STKSAVE    DS    2
  65. ;
  66. ;
  67. MSG1    DB    'SOURCE FILE NOT ON DISK',0DH,0AH,'$'
  68. MSG2    DB    'READ PAST END OF FILE',0DH,0AH,'$'
  69. MSG3    DB    'NO MORE DIRECTORY SPACE',0DH,0AH,'$'
  70. MSG4    DB    'DISK FULL',0DH,0AH,'$'
  71. MSG5    DB    'ERROR IN EXTENDING FILE',0DH,0AH,'$'
  72. MSG6    DB    'NO SOURCE FILE INDICATED',0DH,0AH,'$'
  73. MSG7    DB    'NO DESTINATION FILE INDICATED',0DH,0AH,'$'
  74. ;
  75. GETNAMES
  76.     LDA    SOURCE+1
  77.     CPI    BL
  78.     JZ    ERROR6
  79.     LDA    SOURCE+17
  80. ;
  81.     CPI    BL
  82.     JZ    ERROR7
  83.     LXI    H,SOURCE+16
  84.     LXI    D,DEST
  85.     MVI    B,12
  86. MOVNAME    MOV    A,M
  87.     STAX    D
  88.     INX    H
  89.     INX    D
  90.     DCR    B
  91.     JNZ    MOVNAME
  92.     LXI    H,SOURCE+12
  93.     MVI    A,0
  94.     MVI    B,24
  95. ZEROS    MOV    M,A
  96.     INX    H
  97.     DCR    B
  98.     JNZ    ZEROS
  99.     RET
  100. OPENFILE
  101.     MVI    C,OPEN
  102.     LXI    D,SOURCE
  103.     CALL    BDOS
  104.     CPI    0FFH
  105.     JZ    ERROR1
  106.     MVI    C,DELETE
  107.     LXI    D,DEST
  108.     CALL    BDOS
  109.     MVI    C,MAKE
  110.     LXI    D,DEST
  111.     CALL    BDOS
  112.     CPI    0FFH
  113.     JZ    ERROR3
  114.     MVI    C,OPEN
  115.     LXI    D,DEST
  116.     CALL    BDOS
  117.     RET
  118. ;
  119. READREC
  120.     PUSH    PSW
  121.     PUSH    B
  122.     PUSH    D
  123.     PUSH    H
  124.     MVI    C,SETDMA
  125.     LXI    D,INBUF
  126.     CALL    BDOS
  127.     MVI    C,READFIL
  128.     LXI    D,SOURCE
  129.     CALL    BDOS
  130.     CPI    1
  131.     JZ    ERROR2
  132.     POP    H
  133.     POP    D
  134.     POP    B
  135.     POP    PSW
  136.     LXI    H,INBUF
  137.     MVI    B,128
  138.     RET
  139. ;
  140. MOVEREC
  141.     MVI    B,128
  142.     MVI    C,128
  143.     LXI    H,INBUF
  144.     LXI    D,OUTBUF
  145. NEWLINE    MOV    A,M
  146.     CPI    1
  147.     JZ    EOFMARK
  148.     MVI    A,0
  149.     STA    TAB
  150.     MOV    A,M
  151.     SUI    6
  152.     STA    EOLCNT
  153.     MOV    A,B
  154.     SUI    6
  155.     MOV    B,A
  156.     INX    H
  157.     INX    H
  158.     INX    H
  159.     INX    H
  160.     INX    H
  161.     INX    H
  162.     CM    READREC
  163.     CZ    READREC
  164.     CM    RESTORENEG
  165. OLDLINE    LDA    TAB
  166.     CPI    0
  167.     MOV    A,M
  168.     JNZ    NOTAB
  169.     CPI    3BH
  170.     JNZ    ASTK
  171.     STA    TAB
  172.     JMP    NOTAB
  173. ASTK    CPI    '*'
  174.     JNZ    BLANK
  175.     STA    TAB
  176.     JMP    NOTAB
  177. BLANK    CPI    ' '
  178.     JNZ    NOTAB
  179.     MVI    A,9
  180.     STA    TAB
  181. NOTAB    STAX    D
  182.     INX    H
  183.     INX    D
  184.     DCR    B
  185.     CZ    READREC
  186.     DCR    C
  187.     CZ    WRITEREC
  188.     LDA    EOLCNT
  189.     DCR    A
  190.     STA    EOLCNT
  191.     JNZ    OLDLINE
  192.     MVI    A,0AH
  193.     STAX    D
  194.     INX    D
  195.     DCR    C
  196.     CZ    WRITEREC
  197.     JMP    NEWLINE
  198. EOFMARK    MVI    A,0AH
  199.     STAX    D
  200.     INX    D
  201.     DCR    C
  202.     CZ    WRITEREC
  203.     MVI    A,1AH
  204.     STAX    D
  205.     RET
  206. ;
  207. RESTORENEG
  208.     CMA
  209.     ADI    1
  210.     PUSH    PSW
  211.     PUSH    D
  212.     MOV    D,A
  213.     MOV    A,B
  214.     SUB    D
  215.     MOV    B,A
  216.     POP    D
  217.     POP    PSW
  218.     ADD    L
  219.     MOV    L,A
  220.     RET
  221. ;
  222. WRITEREC
  223.     PUSH    PSW
  224.     PUSH    B
  225.     PUSH    D
  226.     PUSH    H
  227.     MVI    C,SETDMA
  228.     LXI    D,OUTBUF
  229.     CALL    BDOS
  230.     MVI    C,WRTFILE
  231.     LXI    D,DEST
  232.     CALL    BDOS
  233.     CPI    0FFH
  234.     JZ    ERROR3
  235.     CPI    2
  236.     JZ    ERROR4
  237.     CPI    1
  238.     JZ    ERROR5
  239.     POP    H
  240.     POP    D
  241.     POP    B
  242.     POP    PSW
  243.     MVI    C,128
  244.     LXI    D,OUTBUF
  245.     RET
  246. ;
  247. ERROR1    LXI    D,MSG1
  248.     CALL    MESG
  249. ERROR2    LXI    D,MSG2
  250.     CALL    MESG
  251. ERROR3    LXI    D,MSG3
  252.     CALL    MESG
  253. ERROR4    LXI    D,MSG4
  254.     CALL    MESG
  255. ERROR5    LXI    D,MSG5
  256.     CALL    MESG
  257. ERROR6    LXI    D,MSG6
  258.     CALL    MESG
  259. ERROR7    LXI    D,MSG7
  260.     CALL    MESG
  261. ;
  262. CLOSEFILE
  263.     MVI    C,CLOSE
  264.     LXI    D,DEST
  265.     CALL    BDOS
  266.     MVI    C,RESET
  267.     CALL    BDOS
  268.     RET
  269. ;
  270. MESG    MVI    C,PRTBUF
  271.     CALL    BDOS
  272.     MVI    C,RESET
  273.     CALL    BDOS
  274.     LHLD    STKSAVE
  275.     SPHL
  276.     RET
  277. ;
  278. ;
  279.     END
  280.