        Page
        page    72,120
TITLE   SUPEREN   Change name of file, sub-dir or vol ID.
COMMENT "       SUPEREN   [d:]name1    name2
        Renames files or subdirectories from name 1 to name 2.
        Name1 & name2 may have extensions and wild caracters.
        Action of the program is as described in the DOS manual
        for INT 21, function 17. (See PC Tech Jr V3 No.4 p41)
"
COM     SEGMENT
        ASSUME CS:COM,DS:COM,ES:COM,SS:COM
        ORG     5CH     ;FCB FORMED FROM NAME1
FCB1    LABEL   BYTE
DRIVE1  DB      ?
NAME1   DB      11 DUP(?)
        ORG     6CH     ;FCB FORMED FROM NAME2
FCB2    LABEL   BYTE
DRIVE2  DB      ?
NAME2   DB      11 DUP(?)
        ORG     100H
SUPEREN PROC
        MOV     DX,OFFSET INVDR$        ;POINT TO ERROR MESSAGE
        TEST    AL,AL           ;TEST FOR VALID DRIVE1 ID
        JNZ     ERROR
        MOV     DX,OFFSET INVPAR$
        CMP     NAME1,' '               ;CHECK IF NAME1 IS THERE
        JE      ERROR
        CMP     NAME2,' '               ;CHECK FOR NAME 2
        JE      ERROR
        MOV     SI,OFFSET FCB1          ;POINT TO NAME1 FCB
        MOV     DI,OFFSET OLDN          ;POINT TO OLD NAME FIELD
        MOV     CX,12           ;MOVE 12 BYTES
        REP     MOVSB           ;MOVE NAME1 TO EXTENDED FCB
        MOV     SI,OFFSET NAME2 ;POINT TO NAME2, NOT DRIVE
        MOV     DI,OFFSET OLDN+11H      ;POINT TO NEW NAME FIELD
        MOV     CX,11           ;NAME EX DRIVE = 11 BYTES
        REP     MOVSB           ;MOVE NAME2 TO EXTENDED FCB
        MOV     DX,OFFSET XFCB          ;POINT DX TO EXTENDED FCB
        MOV     AH,17H          ;FUNCTION 17 = RENAME
        INT     21H
        TEST    AL,AL           ;TEST FOR ERRORS
        JZ      EXIT            ;NO ERRORS IF AL = 0
        MOV     DX,OFFSET INVNAM$       ;ELSE POINT TO ERROR MSG
ERROR:  MOV     AH,9            ;DISPLAY ERROR MESSAGE
        INT     21H
EXIT:   INT     20H             ;RETURN TO DOS
SUPEREN ENDP
INVDR$  DB      0DH,0AH,'Invalid drive id$',0DH,0AH,'$'
INVPAR$ DB      0DH,0AH,'2 params needed: [d:]oldname,newname'
        DB      0DH,0AH,'$'
INVNAM$ DB      0DH,0AH,'Name not found or already exists'
        DB      0DH,0AH,'$'
XFCB    DB      0FFH    ;EXTENDED FCB ID BYTE
        DB      5 DUP(0)
ATTR    DB      18H     ;ATTR FOR SUB-DIRS & VOL LABELS
OLDN    DB      37 DUP(0)       ;OLD & NEW NAMES GO HERE
COM     ENDS
        END     SUPEREN

