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 / SDIR09.Z80 < prev    next >
Text File  |  2000-06-30  |  2KB  |  87 lines

  1. ;
  2. ; SYSLIB Module Name:  SDIR09
  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    dirpack
  9.  
  10.     MACLIB    SDIRHDR.LIB
  11.     EXT    SDMOVE
  12.  
  13. ;*
  14. ;*  DIRECTORY PACK UTILITY -- RESTRUCTURE THE DIRECTORY TO INCLUDE ONLY
  15. ;*    THOSE ENTRIES MARKED BY DIRSEL
  16. ;*
  17. ;*  ON INPUT, HL PTS TO DIRECTORY BUFFER AND BC=NUMBER OF FILES
  18. ;*  ON EXIT, BC=NUMBER OF SELECTED FILES
  19. ;*  REQUIRED SIDE EFFECT IS THAT FLAG EXTENT (SET BY DIR::) BE CORRECT
  20. ;*    (IN MOST CASES, DEFAULT OF 0 IS OK, EXCEPT WHEN EXTENT SIZE >16K)
  21. ;*
  22. DIRPACK:
  23.     PUSH    HL    ; SAVE REGS
  24.     PUSH    DE
  25.     PUSH    AF
  26.     PUSH    HL    ; SAVE HL
  27.     LD    HL,0
  28.     LD    (FCOUNT),HL    ; INIT FILE COUNT
  29.     POP    HL    ; GET HL
  30.     LD    (DIRBUF),HL    ; SAVE PTR
  31.     PUSH    BC    ; SAVE COUNTER
  32. DPLOOP:
  33.     POP    BC    ; GET COUNTER
  34.     LD    A,B    ; CHECK FOR DONE
  35.     OR    C
  36.     JP    Z,DPDONE
  37.     DEC    BC    ; COUNT DOWN
  38.     PUSH    BC    ; SAVE COUNTER
  39.     LD    A,(HL)    ; GET 1ST BYTE OF ENTRY
  40.     AND    80H    ; SELECTED?
  41.     JP    Z,DPNEXT
  42. ;
  43. ;*  FOUND SELECTED ENTRY
  44. ;
  45.     LD    A,(HL)    ; CLEAR MSB OF SELECTED ENTRY
  46.     AND    7FH
  47.     LD    (HL),A
  48.     PUSH    HL    ; SAVE PTR
  49.     LD    HL,(FCOUNT)    ; INCREMENT FILE COUNT
  50.     INC    HL
  51.     LD    (FCOUNT),HL
  52.     POP    DE    ; PT TO CURRENT ENTRY IN DE
  53.     LD    HL,(DIRBUF)    ; PT TO NEXT ENTRY POSITION
  54.     EX    DE,HL        ; HL PTS TO CURRENT, DE PTS TO NEXT ENTRY
  55.     LD    B,ESIZE    ; COPY ENTRY
  56.     CALL    SDMOVE
  57.     EX    DE,HL        ; HL PTS TO NEXT ENTRY
  58.     LD    (DIRBUF),HL    ; SAVE IT
  59.     EX    DE,HL        ; HL PTS TO NEXT ENTRY TO CHECK
  60.     JP    DPLOOP    ; CONTINUE
  61. ;
  62. ;*  SKIP TO NEXT ENTRY
  63. ;
  64. DPNEXT:
  65.     LD    BC,ESIZE    ; SKIP ENTRY
  66.     ADD    HL,BC
  67.     JP    DPLOOP    ; CONTINUE
  68. ;
  69. ;*  COMPRESSION COMPLETE -- SET UP RETURNED VALUES
  70. ;
  71. DPDONE:
  72.     LD    HL,(FCOUNT)    ; PUT FILE COUNT
  73.     LD    B,H    ; ... IN BC
  74.     LD    C,L
  75.     POP    AF    ; RESTORE REGS
  76.     POP    DE
  77.     POP    HL
  78.     RET
  79.  
  80. ;
  81. ;  BUFFERS
  82. ;
  83. FCOUNT:
  84.     DS    2    ; FILE COUNT
  85.  
  86.     END
  87.