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 / SYSLIB / SLIB1.LBR / SDIR07.Z80 < prev    next >
Text File  |  2000-06-30  |  2KB  |  109 lines

  1. ;
  2. ; SYSLIB Module Name:  SDIR07
  3. ; Author:  Richard Conn
  4. ; Part of SYSLIB3 SDIR Series
  5. ; SYSLIB Version Number:  3.6
  6. ; Module Version Number:  1.5
  7.  
  8.     public    dirsel
  9.  
  10.     MACLIB    SDIRHDR.LIB
  11.     EXT    SDFCHK
  12.  
  13. ;*
  14. ;*  DIRSEL -- SELECT DIRECTORY ENTRIES WHICH MATCH USER NUMBER, FILE
  15. ;*    NAME, AND FILE TYPE PTED TO BY DE
  16. ;*
  17. ;*  ON INPUT, HL PTS TO DIRECTORY, DE PTS TO FCB, BC=NUMBER OF FILES, A=FLAG:
  18. ;*            Bit 7 - Select Non-Sys, Bit 6 - Select Sys
  19. ;*            Bit 5 - Select All Users, Bits 4-0 - User Number
  20. ;*  ON OUTPUT, THE MS BIT OF THE USER OF THE SELECTED FILES IS SET
  21. ;*
  22. DIRSEL:
  23.     PUSH    HL    ; SAVE REGS
  24.     PUSH    DE
  25.     PUSH    BC
  26.     PUSH    AF
  27.     LD    (SELFLG),A    ; SAVE SELECT FLAG
  28.     PUSH    BC    ; SAVE COUNT
  29.  
  30. ;*  CHECK FOR MATCH
  31. DSMAT:
  32.     POP    BC    ; GET COUNT
  33.     LD    A,B    ; CHECK FOR NO ENTRIES
  34.     OR    C
  35.     JP    Z,DSDONE    ; DONE IF NONE
  36.     DEC    BC    ; COUNT DOWN
  37.     PUSH    BC    ; SAVE COUNT
  38.     PUSH    HL    ; SAVE PTRS
  39.     PUSH    DE
  40.     INC    HL    ; PT TO FN
  41.     INC    DE
  42.     LD    B,8    ; CHECK 8 CHARS
  43.     EX    DE,HL        ; LET HL PT TO FCB
  44.     CALL    COMP2    ; COMPARE WITH '?' MATCH
  45.     POP    DE    ; GET PTRS
  46.     POP    HL
  47.     JP    NZ,DSMATNX    ; ADVANCE TO NEXT ENTRY IF NO MATCH
  48.     PUSH    HL    ; SAVE PTRS
  49.     PUSH    DE
  50.     LD    BC,9    ; CHECK R/O FLAG, SYS FLAG, LAST BYTE
  51.     ADD    HL,BC
  52.     EX    DE,HL
  53.     ADD    HL,BC    ; DON'T EXCHANGE -- HL PTS TO FCB, DE PTS TO DIR
  54.     LD    B,3    ; CHECK 3 BYTES
  55.     CALL    COMP2    ; COMPARE WITH '?' MATCH
  56.     POP    DE    ; RESTORE PTRS
  57.     POP    HL
  58.     JP    NZ,DSMATNX    ; NO MATCH?
  59.     CALL    SDFCHK    ; CHECK FLAGS
  60.     JP    NZ,DSMATNX    ; NO MATCH?
  61.  
  62. ;*
  63. ;*  WE HAVE A MATCH -- MARK ENTRY
  64. ;*
  65. DSMARK:
  66.     LD    A,(HL)    ; GET BYTE
  67.     OR    80H    ; SET MSB
  68.     LD    (HL),A    ; PUT BYTE
  69.  
  70. ;*
  71. ;*  ADVANCE TO NEXT ENTRY
  72. ;*
  73. DSMATNX:
  74.     LD    BC,ESIZE    ; NUMBER OF BYTES/ENTRY
  75.     ADD    HL,BC    ; PT TO NEXT ENTRY
  76.     JP    DSMAT    ; CONTINUE
  77.  
  78. ;*
  79. ;*  DONE WITH SCAN
  80. ;*
  81. DSDONE:
  82.     POP    AF        ; RESTORE REGS
  83.     POP    BC
  84.     POP    DE
  85.     POP    HL
  86.     RET
  87.  
  88. ;*
  89. ;*  AS COMP, BUT MATCH ON '?' PTED TO BY HL
  90. ;*
  91. COMP2:
  92.     LD    A,(HL)    ; GET (HL)
  93.     AND    7FH    ; MASK MSB
  94.     CP    '?'    ; MATCH '?'
  95.     JP    Z,COMP2A
  96.     LD    C,A    ; ... IN C
  97.     LD    A,(DE)    ; COMPARE
  98.     AND    7FH    ; MASK MSB
  99.     CP    C
  100.     RET    NZ
  101. COMP2A:
  102.     INC    HL    ; PT TO NEXT
  103.     INC    DE
  104.     DEC    B    ; COUNT DOWN
  105.     JP    NZ,COMP2
  106.     RET
  107.  
  108.     END
  109.