home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / lambda / soundpot / a / chuser.lbr / CHUSER.AZM / CHUSER.ASM
Encoding:
Assembly Source File  |  1993-10-26  |  3.1 KB  |  108 lines

  1. ;    **** CHUSER.ASM ****
  2. ;
  3. ;    MOVES FILES TO SPECIFIED USER AREA
  4. ;
  5. ;    BASED UPON A SUGGESTION IN
  6. ;    DR. DOBBS' JOURNAL #77 (3/83) PAGE 82
  7. ;
  8. ;    JIM SCHENKEL      3/9/83
  9. ;
  10. ;++++++++++++++++++++++++++++++++++++++++++++
  11.  
  12. BDOS    EQU    5
  13. BOOT    EQU    0
  14. FCB    EQU    5CH
  15. FCB2    EQU    6CH
  16. ERAF    EQU    13H
  17. PRINTF    EQU    9
  18. CR    EQU    0DH
  19. LF    EQU    0AH
  20. TAB    EQU    9
  21. BELL    EQU    7
  22.  
  23.     ORG    100H
  24.  
  25. ;TEST FOR GOOD FILE AND USER AREA SPECIFICATION
  26.     LXI    D,HMSG    ;POINT TO HELP MESSAGE
  27.     LDA    FCB+1    ;GET FIRST CHAR OF FILENAME
  28.     CPI    ' '    ;BLANK?
  29.     JZ    MSG    ;YES, SO GIVE HELP
  30.     LXI    D,UMSG    ;POINT TO BAD USER MESSAGE
  31.     LDA    FCB2+1    ;GET USER AREA SPEC
  32.     STA    USER    ;PUT INTO EXIT MESSAGE
  33.     SUI    '0'    ;STRIP ASCII DISPLACEMENT
  34.     JC    MSG    ;EXIT IF TOO LOW
  35.     CPI    9    ;IS IT A DIGIT?
  36.     JC    FIDDLE    ;YES
  37.     SUI    7    ;CHECK FOR HEX DIGIT
  38.     JC    MSG    ;TOO LOW
  39.     CPI    16    ;CHECK IF >'F'
  40.     JNC    MSG    ;TOO HIGH
  41.  
  42. ;GOT A GOOD HEX DIGIT, SO FIND THE ERASE FLAG
  43. ;AND ALTER THE BIOS ERASE FUNCTION
  44. FIDDLE    PUSH    PSW    ;SAVE THE USER AREA
  45.     LHLD    BOOT+1    ;GET WARM START ADDRESS
  46.     LXI    D,654H    ;DISPLACEMENT
  47.     MOV    A,L    ;SUBTRACT IT
  48.     SUB    E
  49.     MOV    L,A
  50.     MOV    A,H
  51.     SBB    D
  52.     MOV    H,A    ;HL NOW POINTS TO FLAG
  53.     LXI    D,VMSG    ;POINT TO BAD VERSION MESSAGE
  54.     MOV    A,M    ;PICK UP THE FLAG
  55.     CPI    0E5H    ;TEST FOR ERASE CHARACTER
  56.     JNZ    MSG    ;NO--MUST BE WRONG VERSION
  57.     SHLD    FLAG    ;SAVE THE ADDRESS
  58.     POP    PSW    ;PICK UP THE USER AREA AGAIN
  59.     MOV    M,A    ;CHANGE FLAG TO USER AREA
  60.     LDA    FCB+1    ;GET FIRST CHAR OF FILENAME
  61.  
  62. ;"ERASE" THE FILE INTO THE CHOSEN USER AREA
  63.     LXI    D,FCB    ;POINT TO FILE SPEC
  64.     MVI    C,ERAF    ;ERASE FUNCTION
  65.     CALL    BDOS    ;GO DO IT
  66.     LXI    D,NMSG    ;POINT TO BAD FILE MESSAGE
  67.     INR    A    ;WAS THE FILE THERE?
  68.     JZ    MSG    ;NO, SO TELL ABOUT IT
  69.     LXI    D,EMSG    ;POINT TO EXIT MESSAGE
  70.  
  71. ;EXIT WITH MESSAGE
  72. MSG    MVI    C,PRINTF
  73.     CALL    BDOS
  74.  
  75. ;FIX UP THE ERASE FLAG AND BAIL OUT
  76.     MVI    A,0E5H    ;ERASE CHARACTER
  77.     LHLD    FLAG    ;GET ADDRESS OF FLAG BYTE
  78.     MOV    M,A    ;RESTORE ERASE FUNCTION
  79.     RET        ;RETURN TO THE CCP
  80.  
  81. ;STORAGE
  82. FLAG    DW    0    ;LOCATION OF ERASE FLAG
  83.  
  84. ;MESSAGES
  85. VMSG    DB    BELL,CR,LF,'+++ WRONG VERSION OF CP/M OR WEIRD BIOS +++',CR,LF,LF,'$'
  86. UMSG    DB    BELL,CR,LF,'+++ SPECIFY USER NUMBER (range = 0-Fh) +++',CR,LF,'$'
  87. NMSG    DB    BELL,CR,LF,'+++ CANNOT FIND THE FILE +++',CR,LF,LF,'$'
  88. EMSG    DB    CR,LF
  89.     DB    'File(s) changed to user area #'
  90. USER    DB    30H,CR,LF,LF,'$'
  91. HMSG    DB    CR,LF
  92.     DB    'CHUSER -- CHANGES A FILE TO A NAMED USER AREA',CR,LF,LF
  93.     DB    'CHUSER needs a file specification and the',CR,LF
  94.     DB    'user area to change it to.  Wild cards (? and *)',CR,LF
  95.     DB    'can be used to move more than one file.',CR,LF,LF
  96.     DB    'The user area must be specified as a single',CR,LF
  97.     DB    'hexadecimal digit in the range 0 - Fh',CR,LF
  98.     DB    '(corresponding to user areas 1 through 15).',CR,LF,LF
  99.     DB    'Examples: CHUSER TEST.FIL 5 changes the file',CR,LF
  100.     DB    '          named "TEST.FIL" from the current',CR,LF
  101.     DB    '          user area to user area number 5.',CR,LF,LF
  102.     DB    '          CHUSER *.BAS E changes all files of',CR,LF
  103.     DB    '          type ".BAS" from the current user',CR,LF
  104.     DB    '          area to user area number 14.',CR,LF,LF
  105.     DB    'Works by abusing the BIOS file deletion function.',CR,LF,LF
  106.     DB    '$'
  107.     END
  108.