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 / MBUG / MBUG115.ARC / RENEXT.MAC < prev    next >
Text File  |  1979-12-31  |  8KB  |  391 lines

  1. ;
  2. ;>>> although this is written in z80 code it will run on 8080 systems <<<
  3. ;
  4. ;renext.mac      v1.1        04/04/84
  5. ;
  6. ;original program (v1.0) listed in microsystems, march 1984
  7. ;
  8. ;by:  george m. gallen
  9. ;     ne software dev
  10. ;     p.o. box 17622
  11. ;     philadelphia, pa. 19135
  12. ;
  13. ;renext takes all files of one extension type and renames them to the same
  14. ;filename but with a new extension. ---> renext asm lib <--- would rename all
  15. ;.asm files to .lib...... ---> renext b:asm lib <--- would rename all .asm
  16. ;files on b: to .lib on b:
  17. ;
  18. ;------------------------------------------------------------------------------
  19. ;
  20. ;v1.1 by Simon Ewins, e-mx rcp/m, toronto, ontario, canada.
  21. ;            (416) 484-9663
  22. ;
  23. ;04/04/84        - added setting/resetting attributes of final filetypes
  24. ;            - allowed for stripping of all high bits in filename
  25. ;            - allowed copying existing bits to final files
  26. ;            - allowed maintaining .ext high bits only
  27. ;
  28. ;v1.1 command-line options/structure:
  29. ;
  30. ;'    RENEXT SEXT DEXT /SRC    '
  31. ;
  32. ;where:        sext = source extension
  33. ;        dext = destination extension
  34. ;        /    = options flag
  35. ;         s   = set system attribute on dest file(s)
  36. ;         r   = set read-only attribute on dest file(s)
  37. ;         c   = clear high bits on dest filename(s)
  38. ;
  39. ;note:  the default with no / options at all is to copy all bits from the
  40. ;    filename as they are and clear high bits on the extension. also,
  41. ;    it is noted that with this revision, r/o files cannot be renamed.
  42. ;
  43. ;------------------------------------------------------------------------------
  44. ;
  45. ;intended to be assembled with m80, l80
  46. ;
  47. ;------------------------------------------------------------------------------
  48. ;
  49. ;equates:
  50. ;
  51. CR    EQU    13
  52. LF    EQU    10
  53. BEL    EQU    7
  54. CTAIL    EQU    80H
  55. BDOS    EQU    5
  56. RNM    EQU    23
  57. CLOSE    EQU    16
  58. OPEN    EQU    15
  59. PNTSTR    EQU    9
  60. FCB0    EQU    5CH
  61. NUMOPT    EQU    3    ;number of options allowed
  62. ;
  63.     ASEG
  64.     .Z80
  65.     ORG    100H
  66. ;
  67. START:    LD    HL,0
  68.     ADD    HL,SP
  69.     LD    (STACK),HL
  70.     LD    HL,STKTOP
  71. ;save old stack and set new one
  72. ;
  73.     LD    DE,MSG0
  74.     LD    C,PNTSTR
  75.     CALL    BDOS
  76. ;say hello
  77. ;
  78.     LD    A,(CTAIL)    ;number characters enetered in command
  79.     PUSH    AF        ;save it
  80.     INC    A        ;get passed counter byte
  81.     LD    HL,CTAIL
  82.     ADD    A,L        ;offset to last character of command
  83.     LD    L,A
  84.     XOR    A
  85.     INC    HL
  86.     LD    (HL),A        ;mark end-of line
  87.     DEC    HL        ;reset pointer
  88.     POP    BC        ;get number characters entered
  89. SRCH:    LD    A,(HL)
  90.     CP    ' '        ;find first space
  91.     JP    Z,GSPC        ;got it...
  92.     DEC    HL
  93.     DEC    B        ;keep looking?
  94.     JP    NZ,SRCH        ;yes...
  95.     JP    BF        ;nothing entered so say how to do it
  96. ;
  97. GSPC:    INC    HL        ;see if next character is /
  98.     LD    A,(HL)
  99.     CP    '/'
  100.     JP    NZ,START0    ;no options requested
  101. ;
  102.     LD    B,NUMOPT    ;get number of possible options
  103.     INC    HL
  104. ;
  105. GETOPT:    LD    A,(HL)
  106.     OR    A        ;at end?
  107.     JP    Z,START0
  108.     CP    'S'
  109.     CALL    Z,GOTSYS
  110.     CP    'R'
  111.     CALL    Z,GOTRDO
  112.     CP    'C'
  113.     CALL    Z,GOTCLR
  114.     INC    HL
  115.     DEC    B
  116.     JP    NZ,GETOPT
  117.     JP    START0
  118. ;
  119. SYSFLG:    DB    0
  120. RDOFLG:    DB    0
  121. CLRFLG:    DB    0
  122. ;
  123. GOTSYS:    LD    (SYSFLG),A
  124.     RET
  125. ;
  126. GOTRDO:    LD    (RDOFLG),A
  127.     RET
  128. ;
  129. GOTCLR:    LD    (CLRFLG),A
  130.     RET
  131. ;
  132. START0:    LD    A,(FCB0+1)
  133.     CP    ' '
  134.     JP    Z,BF
  135.     LD    A,(FCB0+17)
  136.     CP    ' '
  137.     JP    Z,BF
  138. ;check to see if both extensions were supplied
  139. ;
  140.     LD    HL,FCB0+1
  141.     LD    DE,FCB1+9
  142.     LD    BC,3
  143.     CALL    MOVE
  144.     LD    HL,FCB0+1
  145.     LD    DE,FCB3+9
  146.     LD    BC,3
  147.     CALL    MOVE
  148. ;move the source extension to 2 spots
  149. ;
  150.     LD    HL,FCB0+17
  151.     LD    DE,FCB2+9
  152.     LD    BC,3
  153.     CALL    MOVE
  154. ;move the destination extension
  155. ;
  156.     LD    A,(RDOFLG)
  157.     OR    A
  158.     JP    Z,NORDO
  159.     LD    A,(FCB2+9)
  160.     ADD    A,80H        ;set read-only
  161.     LD    (FCB2+9),A
  162. NORDO:    LD    A,(SYSFLG)
  163.     OR    A
  164.     JP    Z,NOSYS
  165.     LD    A,(FCB2+10)
  166.     ADD    A,80H        ;set system
  167.     LD    (FCB2+10),A
  168. ;set flags as requested (if requested)
  169. ;
  170. NOSYS:    LD    A,(FCB0)
  171.     LD    (FCB1),A
  172.     LD    (FCB3),A
  173.     LD    (FCB5),A
  174. ;get and save the drive #
  175. ;
  176. RNLOOP:    LD    HL,FCB3
  177.     LD    DE,FCB0
  178.     LD    BC,35
  179.     CALL    MOVE
  180.     LD    C,OPEN
  181.     LD    DE,FCB0
  182.     CALL    BDOS
  183. ;find the first file with the type '????????.[sext]'
  184. ;
  185.     CP    0FFH
  186.     JP    Z,ENDIT
  187. ;if error=255 then there are no more files with source type so
  188. ;program is finished...... exit.
  189. ;
  190.     LD    HL,FCB0+1
  191.     LD    DE,FCB1+1
  192.     LD    BC,8
  193.     CALL    MOVE
  194.     LD    HL,FCB0+1
  195.     LD    DE,FCB2+1
  196.     LD    BC,8
  197.     CALL    MOVE
  198. ;move the filename (now without the '????????') with no extensions
  199. ;to the appropriate spot. the extensions were put in place at the
  200. ;start of the program.
  201. ;
  202.     LD    C,CLOSE
  203.     LD    DE,FCB0
  204.     CALL    BDOS
  205. ;close the original file
  206. ;
  207.     LD    HL,FCB2+1
  208.     LD    DE,FCB5+1
  209.     LD    BC,11
  210.     CALL    MOVE
  211.     LD    HL,FCB3+12
  212.     LD    BC,23
  213.     CALL    MOVE
  214. ;set up fcb for new file with new extension
  215. ;
  216.     LD    HL,FCB5
  217.     LD    DE,FCB0
  218.     LD    BC,35
  219.     CALL    MOVE
  220.     LD    DE,FCB0
  221.     LD    C,OPEN
  222.     CALL    BDOS
  223.     CP    0FFH
  224.     JP    Z,CONT
  225. ;if the file does not exist, then it can be renamed to that name.
  226. ;if it does exist then we can't proceed so we quit.
  227. ;
  228.     LD    C,CLOSE
  229.     LD    DE,FCB0
  230.     CALL    BDOS
  231. ;close up the file, display message and quit
  232. ;
  233.     LD    HL,FCB2+1
  234.     LD    DE,MSG7
  235.     LD    BC,8
  236.     CALL    MOVE
  237.     INC    DE
  238.     LD    BC,3
  239.     CALL    MOVE
  240. ;set up message with name & type
  241. ;
  242.     LD    DE,MSG8
  243.     JP    HOME
  244. ;display the message
  245. ;
  246. CONT:    LD    A,(CLRFLG)
  247.     OR    A
  248.     CALL    NZ,STRIP
  249.     LD    C,RNM
  250.     LD    DE,FCB1
  251.     CALL    BDOS
  252. ;do the rename bdos function using new extension
  253. ;
  254.     LD    HL,FCB1+1
  255.     LD    DE,MSG3
  256.     LD    BC,8
  257.     CALL    MOVE
  258.     INC    DE
  259.     LD    BC,3
  260.     CALL    MOVE
  261.     LD    HL,FCB2+1
  262.     LD    DE,MSG4
  263.     LD    BC,8
  264.     CALL    MOVE
  265.     INC    DE
  266.     LD    BC,3
  267.     CALL    MOVE
  268. ;set up message to show what was just done
  269. ;
  270.     LD    C,PNTSTR
  271.     LD    DE,MSG1
  272.     CALL    BDOS
  273.     JP    RNLOOP
  274. ;display message and get next file that matches source type
  275. ;
  276. ENDIT:    LD    DE,MSG5
  277. ;we're done so display message and quit
  278. ;
  279. HOME:    LD    C,PNTSTR
  280.     CALL    BDOS
  281.     LD    HL,(STACK)
  282.     LD    SP,HL
  283.     RET
  284. ;display appropriate message (error, successful, bad format)
  285. ;reset stack and return to cp/m
  286. ;
  287. BF:    LD    DE,MSG6
  288.     JP    HOME
  289. ;bad format message
  290. ;
  291. ;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  292. ;workarea and fcbs
  293. ;
  294. FCB1:    DB    0
  295.     DB    '????????'
  296.     DB    '???'
  297.     DB    0,0,0,0
  298. ;
  299. FCB2:    DB    0
  300.     DB    '????????'
  301.     DB    '???'
  302.     DB    0,0,0,0
  303. ;
  304. FCB3:    DB    0
  305.     DB    '????????'
  306.     DB    '???'
  307.     DB    0,0,0,0,0,0,0,0,0,0
  308.     DB    0,0,0,0,0,0,0,0,0,0
  309.     DB    0,0,0
  310. ;
  311. FCB5:    DB    0
  312.     DB    '????????'
  313.     DB    '???'
  314.     DB    0,0,0,0,0,0,0,0,0,0
  315.     DB    0,0,0,0,0,0,0,0,0,0
  316.     DB    0,0,0
  317. ;
  318. MSG0:    DB    CR,LF,LF
  319.     DB    'RENEXT v1.1   04/04/84'
  320.     DB    CR,LF,LF,'$'
  321. MSG1:    DB    'Rename: '
  322. MSG3:    DB    '        .     --to-->  '
  323. MSG4:    DB    '        .   ',CR,LF,'$'
  324. MSG5:    DB    CR,LF
  325.     DB    'Done.....',CR,LF,'$'
  326. MSG6:    DB    CR,LF
  327.     DB    '++ BAD COMMAND ++',CR,LF,LF
  328.     DB    'Use:',CR,LF,LF
  329.     DB    'RENEXT [d:]sext dext /sdrwcn'
  330.     DB    CR,LF,LF
  331.     DB    'where:  d:   = optional drive'
  332.     DB    CR,LF
  333.     DB    '        sext = source extension'
  334.     DB    CR,LF
  335.     DB    '        dext = destination extension'
  336.     DB    CR,LF
  337.     DB    '        /    = options flag'
  338.     DB    CR,LF
  339.     DB    '         s   = set system attribute on dest file(s)'
  340.     DB    CR,LF
  341.     DB    '         r   = set read-only attribute on dest file(s)'
  342.     DB    CR,LF
  343.     DB    '         c   = clear high bits on dest filename(s)'
  344.     DB    CR,LF,LF
  345.     DB    'note:  the default with no / options at all is to copy all '
  346.     DB    'bits from the'
  347.     DB    CR,LF
  348.     DB    'filename as they are and clear high bits on the extension.'
  349.     DB    CR,LF
  350.     DB    'r/o files cannot be renamed.'
  351.     DB    CR,LF,LF,'$'
  352. MSG8:    DB    'The file: '
  353. MSG7:    DB    '        .     already exists.'
  354.     DB    CR,LF
  355.     DB    'Rename halted, all files may not be renamed.'
  356.     DB    CR,LF,LF,BEL,'$'
  357. ;
  358. MOVE:    LD    A,(HL)
  359.     LD    (DE),A
  360.     INC    HL
  361.     INC    DE
  362.     DEC    BC
  363.     LD    A,B
  364.     OR    C
  365.     RET    Z
  366.     JP    MOVE
  367. ;
  368. STRIP:    PUSH    BC
  369.     PUSH    HL
  370.     PUSH    AF
  371.     LD    B,8
  372.     LD    HL,FCB2+1
  373. STRIP0:    LD    A,(HL)
  374.     AND    7FH
  375.     LD    (HL),A
  376.     INC    HL
  377.     DEC    B
  378.     JP    NZ,STRIP0
  379.     POP    AF
  380.     POP    HL
  381.     POP    BC
  382.     RET
  383. ;
  384. STACK:    DB    0,0
  385.     DS    32
  386. STKTOP    EQU    $
  387. ;
  388.     END
  389. ;..............................SJE
  390. ,STRIP0
  391.     POP    AF