home *** CD-ROM | disk | FTP | other *** search
- ; **** CHUSER.ASM ****
- ;
- ; MOVES FILES TO SPECIFIED USER AREA
- ;
- ; BASED UPON A SUGGESTION IN
- ; DR. DOBBS' JOURNAL #77 (3/83) PAGE 82
- ;
- ; JIM SCHENKEL 3/9/83
- ;
- ;++++++++++++++++++++++++++++++++++++++++++++
-
- BDOS EQU 5
- BOOT EQU 0
- FCB EQU 5CH
- FCB2 EQU 6CH
- ERAF EQU 13H
- PRINTF EQU 9
- CR EQU 0DH
- LF EQU 0AH
- TAB EQU 9
- BELL EQU 7
-
- ORG 100H
-
- ;TEST FOR GOOD FILE AND USER AREA SPECIFICATION
- LXI D,HMSG ;POINT TO HELP MESSAGE
- LDA FCB+1 ;GET FIRST CHAR OF FILENAME
- CPI ' ' ;BLANK?
- JZ MSG ;YES, SO GIVE HELP
- LXI D,UMSG ;POINT TO BAD USER MESSAGE
- LDA FCB2+1 ;GET USER AREA SPEC
- STA USER ;PUT INTO EXIT MESSAGE
- SUI '0' ;STRIP ASCII DISPLACEMENT
- JC MSG ;EXIT IF TOO LOW
- CPI 9 ;IS IT A DIGIT?
- JC FIDDLE ;YES
- SUI 7 ;CHECK FOR HEX DIGIT
- JC MSG ;TOO LOW
- CPI 16 ;CHECK IF >'F'
- JNC MSG ;TOO HIGH
-
- ;GOT A GOOD HEX DIGIT, SO FIND THE ERASE FLAG
- ;AND ALTER THE BIOS ERASE FUNCTION
- FIDDLE PUSH PSW ;SAVE THE USER AREA
- LHLD BOOT+1 ;GET WARM START ADDRESS
- LXI D,654H ;DISPLACEMENT
- MOV A,L ;SUBTRACT IT
- SUB E
- MOV L,A
- MOV A,H
- SBB D
- MOV H,A ;HL NOW POINTS TO FLAG
- LXI D,VMSG ;POINT TO BAD VERSION MESSAGE
- MOV A,M ;PICK UP THE FLAG
- CPI 0E5H ;TEST FOR ERASE CHARACTER
- JNZ MSG ;NO--MUST BE WRONG VERSION
- SHLD FLAG ;SAVE THE ADDRESS
- POP PSW ;PICK UP THE USER AREA AGAIN
- MOV M,A ;CHANGE FLAG TO USER AREA
- LDA FCB+1 ;GET FIRST CHAR OF FILENAME
-
- ;"ERASE" THE FILE INTO THE CHOSEN USER AREA
- LXI D,FCB ;POINT TO FILE SPEC
- MVI C,ERAF ;ERASE FUNCTION
- CALL BDOS ;GO DO IT
- LXI D,NMSG ;POINT TO BAD FILE MESSAGE
- INR A ;WAS THE FILE THERE?
- JZ MSG ;NO, SO TELL ABOUT IT
- LXI D,EMSG ;POINT TO EXIT MESSAGE
-
- ;EXIT WITH MESSAGE
- MSG MVI C,PRINTF
- CALL BDOS
-
- ;FIX UP THE ERASE FLAG AND BAIL OUT
- MVI A,0E5H ;ERASE CHARACTER
- LHLD FLAG ;GET ADDRESS OF FLAG BYTE
- MOV M,A ;RESTORE ERASE FUNCTION
- RET ;RETURN TO THE CCP
-
- ;STORAGE
- FLAG DW 0 ;LOCATION OF ERASE FLAG
-
- ;MESSAGES
- VMSG DB BELL,CR,LF,'+++ WRONG VERSION OF CP/M OR WEIRD BIOS +++',CR,LF,LF,'$'
- UMSG DB BELL,CR,LF,'+++ SPECIFY USER NUMBER (range = 0-Fh) +++',CR,LF,'$'
- NMSG DB BELL,CR,LF,'+++ CANNOT FIND THE FILE +++',CR,LF,LF,'$'
- EMSG DB CR,LF
- DB 'File(s) changed to user area #'
- USER DB 30H,CR,LF,LF,'$'
- HMSG DB CR,LF
- DB 'CHUSER -- CHANGES A FILE TO A NAMED USER AREA',CR,LF,LF
- DB 'CHUSER needs a file specification and the',CR,LF
- DB 'user area to change it to. Wild cards (? and *)',CR,LF
- DB 'can be used to move more than one file.',CR,LF,LF
- DB 'The user area must be specified as a single',CR,LF
- DB 'hexadecimal digit in the range 0 - Fh',CR,LF
- DB '(corresponding to user areas 1 through 15).',CR,LF,LF
- DB 'Examples: CHUSER TEST.FIL 5 changes the file',CR,LF
- DB ' named "TEST.FIL" from the current',CR,LF
- DB ' user area to user area number 5.',CR,LF,LF
- DB ' CHUSER *.BAS E changes all files of',CR,LF
- DB ' type ".BAS" from the current user',CR,LF
- DB ' area to user area number 14.',CR,LF,LF
- DB 'Works by abusing the BIOS file deletion function.',CR,LF,LF
- DB '$'
- END