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 / ZSYS / SIMTEL20 / ZCPR3 / RENAME.MQC / RENAME.MAC
Text File  |  2000-06-30  |  13KB  |  593 lines

  1. ;  PROGRAM:  RENAME
  2. ;  VERSION:  3.0
  3. ;  DATE:  18 MAY 84
  4. ;  AUTHOR:  RICHARD CONN
  5. ;  PREVIOUS VERSIONS:  2.0 (16 JAN 83)
  6. ;  PREVIOUS VERSIONS:  1.4 (6 JAN 83), 1.3 (7 DEC 82), 1.2 (10 NOV 82)
  7. ;  PREVIOUS VERSION:  RENAME.ASM Version 1.1 (26 OCT 81)
  8. VERS    equ    30
  9. z3env    SET    0f400h
  10.  
  11. ;
  12. ;  RENAME Command --
  13. ;    RENAME is used to change the name of one or more files.  Unlike
  14. ; the ZCPR2-resident REN function, RENAME permits ambiguous file names
  15. ; and supports an Inspect mode that allows the user to confirm each
  16. ; rename before it is done.  Additionally, there is a Control Mode which
  17. ; allows the user to manually specify the name for each file as it is
  18. ; presented to him.
  19. ;
  20. ;    The RENAME command may be of the following forms:
  21. ;        RENAME dir:afn1=afn2,dir:afn3=afn4,... o
  22. ;        RENAME dir:afn,dir:afn1=afn2,... o
  23. ;    The first form shows elements of the form
  24. ;            dir:afn1=afn2
  25. ; while the second form shows elements of the form
  26. ;            dir:afn
  27. ; which is the same as
  28. ;            dir:afn=afn
  29. ; and only makes sense if Control Mode is used.
  30. ;
  31. ;    The option characters (o) are none or more of the following:
  32. ;        C -- Control Mode; manually specify each new name
  33. ;        I -- Inspect and approve each rename
  34. ;        S -- Include SYStem files
  35. ;
  36. ;    Examples:
  37. ;        RENAME *.MAC=*.ASM    <-- Rename all ASM files to MAC
  38. ;        RENAME *.MAC C        <-- Rename all MAC files to names
  39. ;                        input by the user
  40. ;        RENAME *.OBJ=*.COM SI    <-- Rename all COM files to OBJ
  41. ;                        and include SYStem files
  42. ;                        and Inspect and approve each
  43. ;                        change
  44. ;
  45.  
  46. FALSE    EQU    0
  47. TRUE    EQU    NOT FALSE
  48.  
  49. ESIZE    EQU    16    ; SIZE OF DIR ENTRY (FROM SYSLIB DIRF ROUTINE)
  50.  
  51.     EXT    DIRQ    ; DIRECTORY PROCESSOR
  52.  
  53.     EXT    Z3INIT    ; INIT BUFFERS
  54.     EXT    ZFNAME    ; FILE NAME PROCESSOR
  55.     EXT    Z3LOG    ; Z3 DU LOG
  56.  
  57.     EXT    F$DELETE    ; DELETE FILE
  58.     EXT    F$RENAME    ; RENAME FILE
  59.     EXT    BBLINE    ; INPUT LINE EDITOR
  60.     EXT    INITFCB    ; INIT FCB
  61.     EXT    BDOS    ; BDOS ENTRY
  62.     EXT    PUTUD    ; SAVE CURRENT USER/DISK
  63.     EXT    GETUD    ; RESTORE CURRENT USER/DISK
  64.     EXT    MOVEB    ; COPY ROUTINE
  65.     EXT    PHLDC    ; PRINT HL AS DECIMAL CHARS
  66.     EXT    PRINT    ; PRINT ROUTINE
  67.     EXT    COUT    ; CONSOLE OUTPUT ROUTINE
  68.     EXT    CIN    ; CONSOLE INPUT ROUTINE
  69.     EXT    CAPS    ; CAPITALIZE ROUTINE
  70.     EXT    CRLF    ; NEW LINE ROUTINE
  71.     EXT    FILLB    ; FILL ROUTINE
  72.     EXT    CODEND    ; CODE END COMPUTATION ROUTINE
  73.  
  74. ;
  75. ;  CP/M EQUATES
  76. ;
  77. CPM    EQU    0    ; WARM BOOT
  78. FCB    EQU    5CH    ; FCB
  79. BUFF    EQU    80H    ; INPUT LINE BUFFER
  80. CR    EQU    13    ; <CR>
  81. LF    EQU    10    ; <LF>
  82.  
  83. ;
  84. ; Environment Definition
  85. ;
  86.     if    z3env ne 0
  87. ;
  88. ; External ZCPR3 Environment Descriptor
  89. ;
  90.     jmp    start
  91.     db    'Z3ENV'    ;This is a ZCPR3 Utility
  92.     db    1    ;External Environment Descriptor
  93. z3eadr:
  94.     dw    z3env
  95. start:
  96.     lhld    z3eadr    ;pt to ZCPR3 environment
  97. ;
  98.     else
  99. ;
  100. ; Internal ZCPR3 Environment Descriptor
  101. ;
  102.     MACLIB    Z3BASE.LIB
  103.     MACLIB    SYSENV.LIB
  104. z3eadr:
  105.     jmp    start
  106.     SYSENV
  107. start:
  108.     lxi    h,z3eadr    ;pt to ZCPR3 environment
  109.     endif
  110.  
  111. ;
  112. ; Start of Program -- Initialize ZCPR3 Environment
  113. ;
  114.     call    z3init    ;initialize the ZCPR3 Env and the VLIB Env
  115.     LXI    H,0    ; GET STACK PTR
  116.     DAD    SP
  117.     SHLD    STACK    ; SAVE IT
  118.     CALL    CODEND
  119.     SHLD    CMDLNE    ; SETUP COMMAND LINE BUFFER
  120.     LXI    D,100H    ; BUFFER SIZE
  121.     DAD    D
  122.     SHLD    NTFCB    ; SET TEMP FCB
  123.     DAD    D
  124.     SHLD    DIRBUF    ; PTR TO DIR BUFFER
  125.     SPHL        ; NEW SP
  126.     LHLD    NTFCB    ; SET 2ND FCB
  127.     LXI    D,40
  128.     DAD    D
  129.     SHLD    OFCB
  130.  
  131.     CALL    PUTUD    ; SAVE CURRENT USER/DISK AWAY
  132.  
  133.     CALL    PRINT
  134.     DB    'RENAME  Version '
  135.     DB    VERS/10+'0','.',(VERS MOD 10)+'0',0
  136.     LDA    FCB+1    ; GET FIRST CHAR OF FILE NAME
  137.     CPI    ' '    ; NO FILE SPEC?
  138.     JZ    HELP
  139.     CPI    '/'    ; OPTION CAUGHT?
  140.     JNZ    ECONT
  141.  
  142. ;  PRINT HELP INFORMATION
  143. HELP:
  144.     CALL    PRINT
  145.     DB    CR,LF,'Syntax:'
  146.     DB    CR,LF,'    RENAME dir:afn1=afn2,afn3=afn4,... o...'
  147.     DB    CR,LF,'Options:'
  148.     DB    CR,LF,'  C -- Control Mode (Allow user to manually name each '
  149.     DB    'file)'
  150.     DB    CR,LF,'  I -- Inspect Mode (Give user approval option)'
  151.     DB    CR,LF,'  S -- Include SYS files'
  152.     DB    CR,LF
  153.     DB    0
  154.  
  155. ;  RETURN TO OS
  156. RETURN:
  157.     LHLD    STACK    ; GET OLD STACK
  158.     SPHL        ; SET IT
  159.     RET
  160.  
  161. ;  COPY BUFFER INTO TEMP BUFFER
  162. ECONT:
  163.     LHLD    CMDLNE    ; PT TO COMMAND LINE SAVE BUFFER
  164.     XCHG        ; ... IN DE
  165.     LXI    H,BUFF+1    ; PT TO BUFFER
  166.     MVI    B,80H    ; BUFFER SIZE
  167.     CALL    MOVEB    ; COPY INTO COMMAND LINE BUFFER
  168.  
  169. ;  EXTRACT FLAGS IF PRESENT
  170.     XRA    A    ; SET NO INSPECT, NO R/O, AND NO SYSTEM FILES
  171.     STA    INSPECT
  172.     STA    CONTROL    ; SET NO CONTROL MODE
  173.     MVI    A,80H    ; SELECT NON-SYS FILES ONLY
  174.     STA    SYSTEM
  175.     LXI    H,0    ; SET FILE COUNT
  176.     SHLD    FILECNT
  177.     LHLD    CMDLNE    ; PT TO BUFFER
  178. ;  SKIP TO FILE NAME STRING
  179. SBLANK:
  180.     MOV    A,M    ; SKIP TO NON-BLANK
  181.     CPI    ' '    ; <SP>?
  182.     JNZ    SBL1
  183.     INX    H    ; PT TO NEXT CHAR
  184.     JMP    SBLANK
  185. ;  SKIP TO END OF FILE NAME STRING
  186. SBL1:
  187.     MOV    A,M    ; SKIP TO <SP> OR EOL
  188.     ORA    A    ; DONE?
  189.     JZ    OPT
  190.     CPI    ' '    ; <SP>
  191.     JZ    OPT
  192.     INX    H    ; PT TO NEXT
  193.     JMP    SBL1
  194. ;  CHECK FOR LEADING SLASH ON OPTION AND SKIP IT IF SO
  195. OPT:
  196.     CPI    '/'    ; OPTION CHAR?
  197.     JNZ    OPTION
  198.     INX    H    ; SKIP SLASH
  199. ;  PROCESS LIST OF OPTIONS
  200. OPTION:
  201.     MOV    A,M    ; GET BYTE
  202.     ORA    A    ; DONE?
  203.     JZ    DSPEC
  204.     INX    H    ; PT TO NEXT CHAR
  205.     CPI    ' '    ; SKIP OVER SPACES
  206.     JZ    OPTION
  207.     CPI    '/'    ; IF OPTION LETTER, OBVIOUS ERROR, SO HELP
  208.     JZ    HELP
  209.     CPI    'C'    ; CONTROL?
  210.     JZ    OPTCTRL
  211.     CPI    'I'    ; INSPECT?
  212.     JZ    OPTINS
  213.     CPI    'S'    ; SYSTEM FILES?
  214.     JNZ    HELP
  215.     MVI    A,0C0H    ; SET FOR SYS FILES
  216.     STA    SYSTEM
  217.     JMP    OPTION
  218. OPTCTRL:
  219.     MVI    A,0FFH    ; CONTROL MODE
  220.     STA    CONTROL
  221.     JMP    OPTION
  222. OPTINS:
  223.     MVI    A,0FFH    ; INSPECT
  224.     STA    INSPECT
  225.     JMP    OPTION
  226.  
  227. ;  EXTRACT DISK, USER, AND FILE NAME INFORMATION
  228. DSPEC:
  229.     LHLD    CMDLNE    ; PT TO BEFORE FIRST BYTE
  230.     DCX    H
  231. DSPEC0:
  232.     INX    H    ; PT TO BYTE
  233.     MOV    A,M    ; GET BYTE
  234.     ORA    A    ; DONE?
  235.     JZ    HELP
  236.     CPI    ' '    ; <SP>?
  237.     JZ    DSPEC0
  238. ;
  239. ;  MAJOR REENTRY POINT WHEN FILE SPECS ARE SEPARATED BY COMMAS
  240. ;    HL PTS TO FIRST BYTE OF NEXT FILE SPEC
  241. ;
  242. DSPEC1:
  243.     CALL    GETUD    ; RESET USER IF NECESSARY
  244.     PUSH    H
  245.     LHLD    NTFCB
  246.     XCHG        ; PT TO FCB IN DE
  247.     POP    H
  248.     MVI    A,0    ; DIR BEFORE DU
  249.     CALL    ZFNAME    ; EXTRACT FILE NAME INTO FCB, AND GET DISK AND USER
  250.     SHLD    NEXTCH    ; SAVE PTR TO DELIMITER WHICH ENDED SCAN
  251.     PUSH    H
  252.     LHLD    NTFCB
  253.     XCHG        ; PT TO FCB IN DE
  254.     POP    H
  255.     CALL    Z3LOG    ; LOG INTO DU
  256.  
  257. ;  FIRST NAME IS NOW EXTRACTED -- EXTRACT POSSIBLE SECOND NAME
  258. NAME2:
  259.     LHLD    OFCB    ; PT TO FCB FOR 2ND NAME
  260.     XCHG
  261.     LHLD    NTFCB    ; PT TO FIRST NAME
  262.     MVI    B,16    ; COPY 16 BYTES
  263.     CALL    MOVEB
  264.     LHLD    NEXTCH    ; PT TO CHAR WHICH ENDED PARSE
  265.     MOV    A,M    ; GET IT
  266.     CPI    '='    ; ASSIGNMENT?
  267.     JNZ    RENAME    ; GO AHEAD IF NOT
  268.     INX    H    ; PT TO CHAR AFTER '='
  269.     PUSH    H
  270.     LHLD    OFCB    ; PT TO TEMP FCB
  271.     XCHG        ; ... IN DE
  272.     POP    H
  273.     MVI    A,0    ; DIR BEFORE DU
  274.     CALL    ZFNAME    ; EXTRACT FILE NAME INTO FCB, AND GET DISK AND USER
  275.     SHLD    NEXTCH    ; SAVE PTR TO DELIMITER WHICH ENDED SCAN
  276.  
  277. ;  LOAD DIRECTORY AND RENAME FILES
  278. RENAME:
  279.     LHLD    OFCB
  280.     XCHG        ; PT TO FCB
  281.     LHLD    DIRBUF    ; PT TO END OF CODE
  282.     CALL    INITFCB    ; INIT THE FCB
  283.     LDA    SYSTEM    ; SET FLAGS
  284.     CALL    DIRQ    ; LOAD DIR, SELECT FILES, PACK, AND ALPHABETIZE
  285.  
  286. ;  REN DIR FILES; HL PTS TO FIRST FILE, BC=FILE COUNT
  287.     CALL    RENFILES
  288.  
  289. ;  CHECK FOR NEXT FILE SPEC
  290.     LHLD    NEXTCH    ; GET PTR
  291.     MOV    A,M    ; GET DELIM
  292.     CPI    ','    ; ANOTHER FILE?
  293.     JNZ    RENDONE
  294.     INX    H    ; PT TO CHAR AFTER COMMA
  295.     JMP    DSPEC1    ; CONTINUE PROCESSING
  296.  
  297. ;  RENAME COMPLETE -- PRINT COUNT AND EXIT
  298. RENDONE:
  299.     CALL    PRCOUNT    ; PRINT FILE COUNT
  300.     JMP    RETURN
  301.  
  302. ;  RENAME SELECTED FILES
  303. RENFILES:
  304.     MOV    A,B    ; CHECK FOR ANY FILES LOADED
  305.     ORA    C
  306.     RZ
  307.  
  308. ;  PRINT FILE NAME
  309. RENLP:
  310.     PUSH    B    ; SAVE ENTRY COUNT
  311.     CALL    PRINT
  312.     DB    CR,LF,'Rename ',0
  313.     PUSH    H    ; SAVE PTR TO FCB
  314.     LHLD    NTFCB    ; COPY NEW TEMPLATE INTO RENFCB
  315.     LXI    D,RENFCB
  316.     MVI    B,16
  317.     CALL    MOVEB
  318.     POP    H    ; GET PTR
  319.     PUSH    H    ; SAVE PTR
  320.     INX    H    ; PT TO FN OF OLD NAME
  321.     INX    D    ; PT TO FN OF RENFCB
  322.     MVI    B,11    ; 11 BYTES TO FN AND FT
  323. RENLP1:
  324.     LDAX    D    ; GET CHAR OF NEW
  325.     CPI    '?'    ; CHANGE '?' TO OLD CHAR
  326.     JNZ    RENLP2
  327.     MOV    A,M    ; GET OLD CHAR
  328.     ANI    7FH    ; MASK OLD CHAR
  329.     STAX    D    ; STORE IT AWAY AS NEW
  330. RENLP2:
  331.     INX    H    ; PT TO NEXT CHAR
  332.     INX    D
  333.     DCR    B    ; COUNT DOWN
  334.     JNZ    RENLP1
  335.     LXI    H,RENFCB    ; PT TO NEW NAME
  336.     CALL    PRFN    ; PRINT FILE NAME
  337.     CALL    PRINT
  338.     DB    ' from ',0
  339.     POP    H    ; GET PTR TO OLD FILE NAME
  340.     PUSH    H    ; SAVE IT AGAIN
  341.     CALL    PRFN    ; PRINT FILE NAME
  342.     POP    H    ; GET PTR
  343.  
  344. ;  CHECK FOR CONTROL MODE AND PERFORM CONTROL FUNCTION IF SET
  345.     LDA    CONTROL    ; GET FLAG
  346.     ORA    A    ; NZ=YES
  347.     JNZ    RENCTRL
  348.  
  349. ;  CHECK FOR INSPECTION AND INSPECT IF SET
  350.     LDA    INSPECT    ; GET FLAG
  351.     ORA    A    ; 0=NO
  352.     JZ    DOIT
  353.  
  354. ;  PROMPT USER FOR RENAME
  355.     CALL    RENQ    ; REN QUESTION
  356.     CPI    'Q'    ; QUIT?
  357.     JZ    QUIT
  358.     CPI    'Y'    ; YES?
  359.     JZ    DOIT
  360.  
  361. ;  DON'T RENAME FILE
  362. NODO:
  363.     CALL    PRINT
  364.     DB    CR,LF,'NO Name Change',0
  365.     JMP    RENTEST
  366.  
  367. ;  PRINT FILE NAME PTED TO BY HL
  368. PRFN:
  369.     INX    H    ; PT TO FILE NAME
  370.     MVI    B,8    ; PRINT NAME
  371.     CALL    PRNT
  372.     MVI    A,'.'    ; DECIMAL
  373.     CALL    COUT
  374.     MVI    B,3    ; PRINT TYPE
  375.     CALL    PRNT
  376.     RET
  377.  
  378. ;  PROMPT USER FOR RENAME
  379. RENQ:
  380.     CALL    PRINT    ; PRINT PROMPT
  381.     DB    ' -- Rename (Y/N/Q=Quit)? ',0
  382.     CALL    CIN    ; GET RESPONSE
  383.     CALL    CAPS    ; CAPITALIZE
  384.     CALL    COUT    ; ECHO
  385.     RET
  386.  
  387. ;  CONTROL FUNCTION -- ALLOW USER TO RENAME AS HE DESIRES
  388. RENCTRL:
  389.     PUSH    H    ; SAVE PTR TO FILE
  390. RCTRL:
  391.     CALL    PRINT
  392.     DB    CR,LF,'    -- New Name (<CR>=No Change)? ',0
  393.     MVI    A,0FFH    ; CAPITALIZE
  394.     CALL    BBLINE    ; INPUT LINE FROM USER
  395.     ORA    A    ; CHECK FOR JUST <CR>
  396.     JNZ    RCTRL0
  397.     POP    H    ; GET PTR TO FILE
  398.     JMP    RENTEST    ; PROCEED WITH NEXT ENTRY
  399. RCTRL0:
  400.     LXI    D,RENFCB    ; PLACE INTO NEW NAME FCB
  401.     CALL    ZFNAME    ; JUST EXTRACT NAME
  402.     MVI    B,11    ; CHECK FOR ANY WILD CHARS
  403. RCTRL1:
  404.     INX    D    ; PT TO NEXT CHAR
  405.     LDAX    D    ; GET IT
  406.     CPI    '?'    ; CAN'T BE WILD
  407.     JZ    WERR
  408.     CPI    '*'    ; CAN'T BE WILD
  409.     JZ    WERR
  410.     DCR    B    ; COUNT DOWN
  411.     JNZ    RCTRL1
  412.     JMP    RDOIT    ; DONE -- PERFORM RENAME
  413. WERR:
  414.     CALL    PRINT
  415.     DB    CR,LF,'Wild Card (?,*) in Name -- Try Again',0
  416.     JMP    RCTRL
  417.  
  418. ;  QUIT RENAME PROGRAM
  419. QUIT:
  420.     CALL    PRCOUNT    ; PRINT COUNT OF FILES RENAMED
  421.     CALL    PRINT
  422.     DB    '  QUIT',0
  423.     JMP    RETURN
  424.  
  425. ;  REN FILE, BUT GET PTR FIRST
  426. RDOIT:
  427.     POP    H    ; GET PTR
  428.  
  429. ;  RENAME FILE; OLD NAME PTED TO BY HL, NEW NAME IN RENFCB
  430. DOIT:
  431.     PUSH    H
  432. ;  STEP 1 -- DETERMINE IF NEW NAME ALREADY EXISTS
  433.     LXI    D,RENFCB    ; PT TO NEW NAME
  434.     CALL    INITFCB
  435.     MVI    C,17    ; SEARCH FOR FIRST
  436.     CALL    BDOS
  437.     INR    A    ; NOT FOUND?
  438.     JZ    DOIT1
  439.     CALL    PRINT
  440.     DB    CR,LF,'  -- File Exists -- Delete It (Y/N)? ',0
  441.     CALL    CIN    ; GET RESPONSE
  442.     CALL    CAPS
  443.     CALL    COUT
  444.     POP    H    ; PREP FOR ABORT
  445.     CPI    'Y'    ; YES -- CONTINUE?
  446.     JNZ    RENTEST    ; NOT YES, SO SKIP IT
  447. ;  DELETE OLD FILE, SO SET ATTRIBUTES AND DO IT
  448.     PUSH    H    ; SAVE PTR AGAIN
  449.     CALL    INITFCB    ; CLEAR FCB
  450.     MVI    C,30    ; SET FILE ATTRIBUTES TO R/W IF NOT ALREADY
  451.     CALL    BDOS
  452.     CALL    INITFCB
  453.     CALL    F$DELETE    ; DELETE FILE
  454. DOIT1:
  455.     POP    H    ; HL PTS TO OLD NAME
  456. ;  CLEAR THE OLD NAME'S ATTRIBUTES IN CASE IT WAS R/O
  457.     PUSH    H    ; SAVE PTR TO OLD NAME
  458.     PUSH    H
  459.     LHLD    OFCB    ; COPY OLD NAME
  460.     XCHG
  461.     POP    H
  462.     MVI    B,16
  463.     CALL    MOVEB
  464.     PUSH    D    ; CLEAR ATTRIBUTES
  465.     MVI    B,11    ; 11 BYTES
  466.     INX    D    ; PT TO FIRST
  467. DOIT2:
  468.     LDAX    D    ; GET CHAR
  469.     ANI    7FH    ; CLEAR ATT
  470.     STAX    D    ; PUT CHAR
  471.     INX    D    ; PT TO NEXT
  472.     DCR    B    ; COUNT DOWN
  473.     JNZ    DOIT2
  474.     POP    D    ; NOW SET ATTRIBUTES OF OLD NAME
  475.     CALL    INITFCB
  476.     MVI    C,30    ; SET ATTRIBUTES
  477.     CALL    BDOS
  478.     CALL    INITFCB
  479. ;  DO THE RENAME
  480.     LXI    H,RENFCB    ; PT TO NEW NAME
  481.     XCHG
  482.     CALL    INITFCB    ; INIT NEW FCB
  483.     XCHG        ; HL PTS TO NEW NAME, DE PTS TO OLD NAME
  484.     CALL    F$RENAME    ; RENAME THE FILE
  485. ;  RESTORE THE ORIGINAL ATTRIBUTE BITS
  486.     POP    H    ; GET PTR TO OLD NAME
  487.     LXI    D,RENFCB+1    ; PT TO NEW NAME
  488.     PUSH    H    ; SAVE PTR TO OLD NAME
  489.     INX    H    ; PT TO FN OF OLD NAME
  490.     XCHG        ; HL PTS TO NEW NAME, DE PTS TO OLD NAME
  491.     MVI    B,11    ; 11 BYTES
  492. DOIT3:
  493.     LDAX    D    ; GET ATTRIBUTE BIT OF OLD NAME
  494.     ANI    80H    ; LOOK ONLY AT ATTRIBUTE BIT
  495.     ORA    M    ; MASK IN NEW NAME BYTE
  496.     MOV    M,A    ; STORE IT AWAY
  497.     INX    H    ; PT TO NEXT
  498.     INX    D
  499.     DCR    B    ; COUNT DOWN
  500.     JNZ    DOIT3
  501. ;  SET THE ORIGINAL ATTRIBUTES INTO THE NEW FILE
  502.     LXI    D,RENFCB    ; PT TO FCB
  503.     CALL    INITFCB
  504.     MVI    C,30    ; SET ATTRIBUTES
  505.     CALL    BDOS
  506.     LHLD    FILECNT    ; INCREMENT FILE COUNT
  507.     INX    H
  508.     SHLD    FILECNT
  509.     POP    H    ; GET PTR TO DIRECTORY ENTRY
  510.  
  511. ;  PT TO NEXT ENTRY
  512. RENTEST:
  513.     LXI    D,ESIZE    ; PT TO NEXT ENTRY
  514.     DAD    D
  515.     POP    B    ; GET COUNT
  516.     DCX    B    ; COUNT DOWN
  517.     MOV    A,B    ; CHECK FOR ZERO
  518.     ORA    C
  519.     JNZ    RENLP
  520.  
  521. ;  RETURN TO CALLER
  522.     RET
  523.  
  524. ;
  525. ;  PRINT CHARS PTED TO BY HL FOR B BYTES
  526. ;
  527. PRNT:
  528.     MOV    A,M    ; GET CHAR
  529.     CALL    COUT
  530.     INX    H    ; PT TO NEXT
  531.     DCR    B    ; COUNT DOWN
  532.     JNZ    PRNT
  533.     RET
  534.  
  535. ;
  536. ;  PRINT COUNT OF NUMBER OF FILES RENAMED
  537. ;
  538. PRCOUNT:
  539.     CALL    CRLF    ; NEW LINE
  540.     LHLD    FILECNT    ; GET COUNT
  541.     MOV    A,L    ; CHECK FOR NONE
  542.     ORA    H
  543.     JZ    PRNO
  544.     CALL    PHLDC    ; PRINT DECIMAL COUNT
  545.     JMP    PRMS
  546. PRNO:
  547.     CALL    PRINT
  548.     DB    'No ',0
  549. PRMS:
  550.     LHLD    FILECNT    ; 1 FILE PROTECTED?
  551.     MOV    A,H    ; HIGH ZERO?
  552.     ORA    A
  553.     JNZ    PRMULT
  554.     MOV    A,L    ; LOW ONE?
  555.     CPI    1
  556.     JZ    PRSING
  557. PRMULT:
  558.     CALL    PRINT
  559.     DB    ' Files Renamed',0
  560.     RET
  561. PRSING:
  562.     CALL    PRINT
  563.     DB    ' File  Renamed',0
  564.     RET
  565.  
  566. ;
  567. ;  BUFFERS
  568. ;
  569. INSPECT:
  570.     DS    1    ; INSPECT FLAG (0=NO, 0FFH=YES)
  571. CONTROL:
  572.     DS    1    ; CONTROL FLAG (0=NO, 0FFH=YES)
  573. SYSTEM:
  574.     DS    1    ; SYSTEM FLAG (80H=NON-SYS, 0C0H=SYS/NON-SYS)
  575. NEXTCH:
  576.     DS    2    ; PTR TO NEXT CHAR IN MULTIFILE COMMAND LINE
  577. FILECNT:
  578.     DS    2    ; COUNT OF NUMBER OF FILES RENAMED
  579. RENFCB:
  580.     DS    40    ; FCB FOR RENAME
  581. OFCB:
  582.     DS    2    ; FCB FOR OLD FILE NAME AND OLD FILE TEMPLATE
  583. NTFCB:
  584.     DS    2    ; FCB FOR NEW FILE TEMPLATE
  585. CMDLNE:
  586.     DS    2    ; PTR TO COMMAND LINE BUFFER
  587. DIRBUF:
  588.     DS    2    ; PTR TO DIRECTORY BUFFER
  589. STACK:
  590.     DS    2    ; OLD STACK PTR
  591.  
  592.     END
  593.