home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / nubye / nuby-sup.lbr / ZCPR3.FQX / ZCPR3.FIX
Text File  |  1986-06-29  |  3KB  |  122 lines

  1.  
  2.                             ZCPR3 FIX
  3.                                for
  4.                         3DH and 3FH bytes
  5.  
  6. =====
  7. 03/86  Corrected for proper named directoy use (from John Smith's
  8.          Z3&EMX-2.LBR).          - Murray Simsolo (516) 825-8465
  9. 1986   Original fix              - Joubert Berger
  10. =====
  11.  
  12. The code below is modified from ZCPR3, so you are able to utilize 
  13. the  CHEKDU  savings incorporated in NUBYE,  as well as  the  max 
  14. drive/user checking used by many other utilities (i.e. NUKMD, SD, 
  15. SFILE,  etc).   The  new code is that which is in lower case - be 
  16. sure to comment out the four lines:  CPI MAXDISK+1, CPI MAXUSR+1, 
  17. JRNC DUSE1 (twice) as shown.
  18.  
  19. =======================================================================
  20.  
  21.      IF    ACCPTDU        ;ALLOW DU: FORM
  22. DUSCAN:
  23.     XCHG            ;PTR IN HL
  24.     INX    H        ;PT TO FIRST BYTE OF FN
  25.     MOV    A,M        ;GET FIRST CHAR
  26.     CPI    'A'        ;CONVERT POSSIBLE DRIVE SPEC TO NUMBER
  27.     JRC    DUS1        ;IF LESS THAN 'A', MUST BE DIGIT
  28. ;
  29. ;  SET DISK NUMBER (A=1)
  30. ;
  31.     SUI    'A'-1        ;CONVERT DRIVE NUMBER TO 1-16
  32.     mov    b,a        ; PUT IN B
  33.     lda    003dh        ; GET MAX DRIVE
  34.     adi    1        ; OFFSET BY ONE TO AGREE
  35.     cmp    b        ; WITHIN RANGE?
  36.     mov    a,b        ; RESTORE DRIVE NUMBER TO A
  37.     jrc    duse1        ;INVALID DISK NUMBER
  38. ;**    CPI    MAXDISK+1    ;WITHIN RANGE?         <==comment out
  39. ;**    JRNC    DUSE1        ;INVALID DISK NUMBER    <==comment out
  40.     STA    TEMPDR        ;SET TEMPORARY DRIVE NUMBER
  41.     INX    H        ;PT TO NEXT CHAR
  42.     MOV    A,M        ;SEE IF IT IS A SPACE
  43.     CPI    ' '
  44.     RZ
  45.     CALL    DIGCK        ;CHECK FOR DIGIT
  46.     RC
  47. ;
  48. ;  SET USER NUMBER
  49. ;
  50. DUS1:
  51.     PUSH    H        ;SAVE PTR TO DIGITS
  52.     MVI    B,2        ;UP TO 2 DIGITS
  53. DUS1A:
  54.     MOV    A,M        ;CHECK FOR DIGIT OR SPACE
  55.     CPI    ' '        ;IF SPACE, THEN NO DIGIT
  56.     JRZ    DUS2
  57.     CALL    DIGCK        ;CHECK FOR DIGIT
  58.     JRC    DUSE
  59.     INX    H
  60.     DJNZ    DUS1A        ;COUNT DOWN
  61.     MOV    A,M        ;3RD CHAR
  62.     CPI    ' '        ;MUST BE SPACE
  63.     JRNZ    DUSE
  64. DUS2:
  65.     POP    H
  66.     CALL    NUM0A        ;GET NUMBER
  67.     mov    b,a        ; PUT IT IN B
  68.     lda    003fh        ; GET MAX NUMBER OF USERS
  69.     sui    1        ; CORRECT OFFSET
  70.     cmp    b        ; IS IT WITHIN RANGE?
  71.     mov    a,b        ; RESTORE USER NUMBER IN A
  72.     jrc    duse1        ; UNALLOWED USER NUMBER
  73. ;**    CPI    MAXUSR+1    ;WITHIN LIMIT?        <==comment out
  74. ;**    JRNC    DUSE1                    <==comment out
  75.     STA    TEMPUSR        ;SAVE USER NUMBER
  76.     XRA    A        ;SET OK
  77.     RET
  78. DUSE:    POP    H        ;CLEAR STACK
  79. ;
  80. DUSE1:    XRA    A
  81.     DCR    A
  82.     RET
  83. ;
  84.       ENDIF        ;ACCPTDU
  85.  
  86. This is the additional fix which prevents access to a named directory
  87. which references a drive/user combination which exceeds the maximum.
  88. Again, the code to be added is in lower case.
  89. ;
  90. ; DIR match
  91. ;
  92. DIRS4:     IF    PWCHECK
  93.     PUSH    D        ;SAVE PTR TO DE
  94.     LXI    B,8        ;PT TO PW
  95.     XCHG            ;HL PTS TO ENTRY
  96.     DAD    B
  97.     CALL    PASSCK        ;CHECK FOR PW
  98.     POP    D        ;GET PTR
  99.     JNZ    DIRSERR
  100.      ENDIF        ;PWCHECK
  101. ;
  102.     DCX    D        ;PT TO USER
  103.     LDAX    D        ;GET USER
  104.     mov    b,a        ; PUT IT IN B
  105.     lda    003fh        ; GET MAX NUMBER OF USERS
  106.     sui    1        ; CORRECT OFFSET
  107.     cmp    b        ; WITHIN RANGE?
  108.     mov    a,b        ; RESTORE USER NUMBER IN A
  109.     jrc    dirserr        ; UNALLOWED USER NUMBER
  110.     STA    TEMPUSR
  111.     DCX    D        ;PT TO DISK
  112.     LDAX    D        ;GET IT
  113.     mov    b,a        ; PUT IT IN B
  114.     lda    003dh        ; GET MAX DRIVE
  115.     adi    1        ; OFFSET BY ONE TO AGREE
  116.     cmp    b        ; WITHIN RANGE?
  117.     mov    a,b        ; RESTORE DRIVE NUMBER TO A
  118.     jrc    dirserr        ; UNALLOWED DRIVE
  119.     STA    TEMPDR        ;A=1
  120.     XRA    A        ;SET Z
  121.     RET
  122.