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 / ZCPR3 / FINDF26A.LBR / FINDF26.ZZ0 / FINDF26.Z80
Text File  |  2000-06-30  |  29KB  |  1,253 lines

  1. ; PROGRAM:  FINDF
  2. ; AUTHOR:  RICHARD CONN
  3. ; VERSION:  2.0
  4. ; DATE:  18 May 84
  5. ;
  6.  
  7. Z3ENV    DEFL    0FE00H        ; ZCPR3 Environment address
  8.  
  9. VERS    EQU    26        ; 12 September 86, Howard Goldstein
  10.                 ; 17 September 86, Jay Sage
  11.  
  12. ; This version fixes a bug which was causing garbage to be printed
  13. ; if there was no NDR buffer or if the NDR buffer was empty.  Named
  14. ; directory display code changed to keep file names aligned in column,
  15. ; and display changed to show user number and directory name in a format
  16. ; similar to a system prompt (cleaner display).  Paging added.  Option "P"
  17. ; turns paging off.  Added code to allow user to abort listing with ^C.
  18.  
  19. ;VERS    EQU    25        ; 3 September 86, Joe Wright
  20.  
  21. ; Version 2.5 adds the option of searching a specific disk.
  22. ; Usage:  'FINDF B:afn' will search only drive B: for the afn.
  23.  
  24. ; fixed bug with 1st four files of directory - joe wright 09/25/84
  25. ; PREVIOUS VERSIONS: 1.1 (25 July 83), 1.0 (24 JULY 83)
  26. ;VERS    EQU    21        ;version number
  27. ;
  28. ; Added code to use MAXDRIVE, MAXUSER, and WHEEL ADDRESS from the
  29. ; SYSENV module, which is always designated by a pointer in HL at
  30. ; the beginning of ZCPR3 utilities. Files in User areas greater
  31. ; than MAXUSER are ignored. When WHEEL is OFF (no privileges), any
  32. ; options (i.e. Sytem files option) are ignored. - Al Hawley
  33. ; PREVIOUS VERSIONS; 2.1 (09/25/84) (see above)
  34. ;VERS    EQU    22        ; Version number
  35. ;VERSION DATE: 3 Apr 85  - AEH
  36. ;
  37. ; Added code by Rick Peterson (FINDF23R.MAC) to add named directories
  38. ; to file displays via Z3LIB's GETNDR.    All wheel byte testing now
  39. ; now done by calling Z3LIB's GETWHL.  A non-wheel user now gets the
  40. ; option error treatment instead of being allowed to think he's
  41. ; being granted the S option when he's not.  He also is not informed
  42. ; of the existence of the option in the help message although a
  43. ; wheel gets educated as in version 2.1, eliminating the "(sysop only)"
  44. ; message.  This version doesn't have the long, hand-holding messages
  45. ; of FINDF23R, so some sysops may prefer it - it is definitely more
  46. ; in line with the intent of 2.0 for non-RAS applications than the
  47. ; special "R" variants. - Bruce Morgen
  48. ;PREVIOUS VERSIONS; 2.2 (4/3/85), 2.3R (11/24/85 version for RAS/BYE use)
  49. ;VERS    EQU    24        ; Version number
  50. ;VERSION DATE: 1/12/86 - b/m
  51. ;
  52. ;
  53. ;
  54. ;    FINDF searches through all of the known disks for one or more
  55. ; files matching the passed file specification.  AFNs (Ambiguous File Names)
  56. ; are permitted.  FINDF is invoked by the following command line:
  57. ;        FINDF afn,afn,afn,... o
  58. ; where "afn" refers to the file sought and "o" is none or more of:
  59. ;        S - Include System Files
  60. ;
  61.  
  62. ;
  63. ; System equates:
  64. ;
  65. BOOT    EQU    0000H        ; Cp/m warm boot jump vector
  66. BDOS    EQU    BOOT+05H    ; Cp/m bdos call jump vector
  67. TBUFF    EQU    BOOT+80H    ; Disk i/o buffer
  68. FCB    EQU    BOOT+5CH    ; Default file control block
  69. CR    EQU    'M'-'@'        ; Ctl-m for carriage return
  70. LF    EQU    'J'-'@'        ; Ctl-j for line feed
  71. BELL    EQU    'G'-'@'        ; Bell character
  72. CTRLC    EQU    'C'-'@'        ; Abort
  73. CTRLS    EQU    'S'-'@'        ; Pause
  74. ESIZE    EQU    12        ; 12 bytes/dir entry
  75. ;NEW EQUATES IN V2.2
  76. WHOFF    EQU    29H        ; Offset for wheel byte addr in sys.env
  77. MDOFF    EQU    2CH        ; Max drive offset in sys.env
  78. MUOFF    EQU    2DH        ; Max user offset in sys.env
  79.  
  80. RIGHTCH    EQU    '>'        ; Character to right of directory name
  81. ;
  82. ; SYSLIB and Z3LIB Routines
  83. ;
  84.     EXT    Z3INIT,GETNDR,GETWHL,CODEND,GETCRT
  85.     EXT    CST,CIN,COUT,CRLF,PRINT,PADC
  86.  
  87. ;
  88. ; Environment Definition
  89. ;
  90.      IF    Z3ENV NE 0
  91. ;
  92. ; External ZCPR3 Environment Descriptor
  93. ;
  94.     JP    START
  95.     DB    'Z3ENV'        ; This is a zcpr3 utility
  96.     DB    1        ; External environment descriptor
  97. Z3EADR:
  98.     DW    Z3ENV
  99. START:
  100.     LD    HL,(Z3EADR)    ; Pt to zcpr3 environment
  101. ;
  102.      ELSE
  103. ;
  104. ; Internal ZCPR3 Environment Descriptor
  105. ;
  106.     MACLIB    Z3BASE.LIB
  107.     MACLIB    SYSENV.LIB
  108. Z3EADR:
  109.     JP    START
  110.     SYSENV
  111. START:
  112.     LD    HL,Z3EADR    ; Pt to zcpr3 environment
  113.      ENDIF
  114.  
  115. ;
  116. ; Start of Program -- Initialize ZCPR3 Environment
  117. ;
  118.     LD    (STACK),SP    ; Save ZCPR stack
  119.     PUSH    HL        ; Transfer pointer to sys.env
  120.     POP    IX        ; To the x index register
  121.     CALL    Z3INIT        ; Initialize the zcpr3 env and the vlib env
  122.     CALL    CODEND        ; Determine free space
  123.     LD    (FNTAB),HL    ; File name table
  124.     LD    DE,512        ; 1/2 k space
  125.     ADD    HL,DE
  126.     LD    (SCRATCH),HL    ; Beginning of scratch area
  127.     LD    SP,HL        ; And top of stack
  128.     CALL    GTBIOS        ; Get bios jump table
  129.     CALL    HELLO        ; Sign on message
  130.     CALL    HELPCHK        ; Check for and print help message
  131.     CALL    OPTCHK        ; Build file name table and process options
  132.     CALL    CRLF        ; New line
  133.     CALL    INIT        ; Initialize program
  134.     CALL    FIND        ; Do the searches
  135.     CALL    BYE        ; Sign off message
  136. RETURN:
  137.     LD    SP,(STACK)    ; Quiet return
  138.     RET
  139. ;
  140. ; ** Main Routines **
  141. ;
  142.  
  143. ;
  144. ; SAY WHO WE ARE
  145. ;
  146. HELLO:
  147.     CALL    PRINT
  148.     DB    'FINDF, Version '
  149.     DB    [VERS/10]+'0','.',[VERS    MOD 10]+'0'
  150.     DB    0
  151.     RET
  152. ;
  153. ;  CHECK FOR HELP REQUEST
  154. ;
  155. HELPCHK:
  156.     LD    A,(FCB+1)    ; Get 1st byte of filename
  157.     CP    '/'        ; Help?
  158.     JR    Z,HCK1
  159.     CP    ' '        ; Make sure it is non-blank
  160.     RET    NZ        ; Ok - keep going
  161. ;
  162. ; IF NO FILE NAME IS SPECIFIED, ABORT WITH NOTICE
  163. ;
  164. HCK1:
  165.     CALL    PRINT
  166.     DB    CR,LF,' Find files on all drives or on a specific drive'
  167.     DB    CR,LF
  168.     DB    '  Syntax:  FINDF [D: or DIR:]afn,afn,fn,... o..'
  169.     DB    CR,LF
  170.     DB    '  Options: P - Paging Option Off',0
  171.     CALL    GETWHL
  172.     JP    Z,RETURN
  173.     CALL    PRINT
  174.     DB    CR,LF
  175.     DB    '           S - Include System Files',0
  176.     JP    RETURN
  177. ;
  178. ; INITIALIZATION
  179. ;
  180. INIT:
  181.     CALL    GETCRT        ; Get data on current console
  182.     INC    HL        ; Point to full number of lines on screen
  183.     LD    A,(HL)
  184.     DEC    A        ; Reduce by one
  185.     LD    (LPS),A        ; Save in lines-per-screen location
  186.     XOR    A        ; Turn off flags
  187.     LD    (SYSTEM),A    ; No system files
  188.     LD    (FFLAG),A    ; No files found
  189.     LD    (ECOUNT),A    ; No entries
  190.     LD    (FNCNCT),A    ; No file names
  191.     CPL
  192.     LD    (PAGEOPT),A    ; Paging option on
  193.     LD    A,1
  194.     LD    (LINECNT),A    ; Set initial line count
  195. ;
  196. ; CHECKS FOR S OPTION IN COMMAND LINE AND EXTRACTS FILE NAMES INTO TABLE
  197. ;
  198. OPTCHK:
  199.     LD    HL,(FNTAB)    ; Pt to table
  200.     EX    DE,HL        ; In de
  201.     LD    HL,TBUFF+1    ; Scan thru tbuff, building a file name table
  202.     CALL    SBLANK        ; Skip blanks
  203. FNLOOP:
  204.     PUSH    DE        ; Save table ptr
  205.     CALL    GETFN        ; Extract file name
  206.     POP    DE
  207.     PUSH    HL
  208.     LD    HL,11        ; Pt to next table entry
  209.     ADD    HL,DE
  210.     EX    DE,HL
  211.     POP    HL
  212.     LD    A,(FNCNUNT)    ; Increment count
  213.     INC    A
  214.     LD    (FNCOUNT),A
  215.     LD    A,(HL)        ; Get terminating char
  216.     INC    HL        ; Pt to next
  217.     CP    ','        ; Another follows?
  218.     JR    Z,FNLOOP
  219.     DEC    HL        ; Point back to delim
  220.     CALL    SBLANK        ; Skip to non-blank
  221.     DEC    HL
  222. OPTCK1:
  223.     INC    HL
  224.     LD    A,(HL)        ; Get option
  225.     CALL    DELCHK        ; Done if if im
  226.     RET    Z
  227.  
  228.     LD    C,A        ; Save option in C
  229.     CP    '/'        ; Ignore '/'
  230.     JR    Z,OPTCK1
  231.     CP    'P'        ; Paging Toggle
  232.     JR    Z,POPT
  233.     CP    'S'        ; SYS files option
  234.     JR    NZ,OPTER    ; If not, it's an option error
  235.                 ; Else fall through to SOPT
  236.  
  237. SOPT:
  238.     CALL    GETWHL
  239.     JR    Z,WHLER        ; If z (wheel false), no options
  240.     LD    A,0FFH        ; Set flag
  241.     LD    (SYSTEM),A
  242.     JR    OPTCK1
  243.  
  244. POPT:
  245.     XOR    A
  246.     LD    (PAGEOPT),A
  247.     JR    OPTCK1
  248.  
  249. WHLER:    LD    A,C
  250. OPTER:    CALL    PRINT
  251.     DB    BELL
  252.     DB    CR,LF
  253.     DB    'Invalid Option -- ',0
  254.     LD    A,(HL)
  255.     CALL    COUT
  256.     JP    HCK1
  257.  
  258. GETFN:
  259.     PUSH    DE        ; Fill target fcb
  260.     LD    B,11        ; 11 bytes
  261.     LD    A,' '        ; Space fill
  262. GETFN0:
  263.     LD    (DE),A        ; Put space
  264.     INC    DE
  265.     DJNZ    GETFN0
  266.     POP    DE        ; Pt to entry again
  267.     CALL    SCANCNL        ; Scan for colon
  268.     LD    B,8        ; 8 chars max
  269.     CALL    GETFN1        ; Get and fill entry
  270.     LD    A,(HL)        ; Get char
  271.     CP    '.'        ; Delim?
  272.     RET    NZ        ; Done
  273.     INC    HL        ; Pt to after period
  274.     LD    B,3        ; 3 chars max and do it again
  275. GETFN1:
  276.     LD    A,(HL)        ; Get char
  277.     CP    '.'        ; End of field?
  278.     JR    Z,GETFN3
  279.     CALL    DELCHK        ; Check k miter
  280.     RET    Z
  281.     CP    '*'        ; Wild?
  282.     JR    Z,GETFNQ
  283.     LD    (DE),A        ; Store char
  284.     INC    HL        ; Pt to next
  285.     INC    DE
  286.     DJNZ    GETFN1        ; Count down
  287. GETFN2:
  288.     LD    A,(HL)        ; Flush chars to delim
  289.     CALL    DELCHK        ; Check for for iter
  290.     RET    Z
  291.     INC    HL        ; Pt to next
  292.     JR    GETFN2
  293. GETFN3:
  294.     INC    DE        ; Pt to after field
  295.     DJNZ    GETFN3        ; Count down
  296.     RET
  297. GETFNQ:
  298.     LD    A,'?'        ; Fill with question marks
  299.     LD    (DE),A
  300.     INC    DE
  301.     DJNZ    GETFNQ
  302.     JR    GETFN2        ; Skip to delim
  303. DELCHK:
  304.     OR    A        ; End of line?
  305.     RET    Z
  306.     CP    '.'        ; End of field?
  307.     RET    
  308.     DJ    CP    ','        ; End of entry?
  309.     R?
  310.     R
  311.     CP    ' '
  312.     RET
  313. SBLANK:
  314.     LD    A,(HL)        ; Skip to non-bladel
  315.     CP    ' '
  316.     RET    NZ
  317.     INC    HL
  318.     JR    SBLANK
  319. SCANCOL:
  320.     PUSH    DE        ; Save table ptr
  321.     PUSH    HL        ; Save ptr
  322. SCOL1:
  323.     LD    A,(HL)        ; Get char
  324.     INC    HL        ; Pt to next
  325.     CP    ':'        ; Colon?
  326.     JR    Z,SCOLX
  327.     CALL    DELCHK        ; Check for 
  328.     CALL    Gter
  329.     JR    NZ,SCOL1
  330. SCOL2:
  331.     POP    HL        ; Restore
  332.     POP    DE
  333.     RET    RETOLX:
  334.     EX    DE,HL        ; De pts to after colon
  335.     POP    HL        ; Get old ptr
  336.     EX    DE,HHL        ; RReplace it
  337.     POP    DE        ; Get table 
  338.     CP    ':
  339.     RET
  340. ;
  341. ; LOOK THROUGH DIRECTORY
  342. ;
  343. FIND:    LD    A,(FCB)        ; Disk selection, Zero if all disk
  344.     CP    ' 'ce fISK),A    ; Remember it
  345.     OR    A
  346.     JR    Z,FIND0
  347.     DEC    A
  348.     LD    (FCB),A
  349. FIND0:    CALL    NXTDISK        ; Get info the first time
  350. FIND1:    RET    Z        ; Abort if error
  351. FIND2:    CALL    NXTSEC        ; Get a directory sector
  352.     JR    memIND3        ; Returns z
  353.     CP    ':
  354.  flag if no more
  355.     CALL    CHKENT        ; Check it out
  356.     JR    FIND2        ; Keep it up till doneIND0ND3:    NCTIRALPHA    ; Sort entries
  357.     CALL    PRFILES        ; Print sorted entries    ; SkDISK)
  358.     OR    AZeT    NZ
  359.     LD    A,(FCB)        ; Next disk
  360.     INC    A
  361.     LD    (FCB),A
  362. ;    CALL    NXTDKe        ; Select next disk
  363.     JR    Fe
  364. F
  365.  
  366. ;
  367. ; SIGN OFF
  368. ;
  369. BYE:
  370.     LD    C,1nt sALPeset system
  371.     CALL    BDOS    ; SkFFLAG)    ; Get file found flag
  372.     OR    A        ; No files found?
  373.     JP    NZ,RETURN
  374.     CALL    PRINT
  375.     DB    CR,LF,'NO Files Found',0
  376.     JP    
  377.     CALL    PN
  378. ;
  379. ; CHECKS THE CURRENT 4 DIRECTORY ENTRIES AGAINST ARGUM
  380.     CALL    CH
  381. ; IF MATCH, REWRITES SECTOR WITH REACTIVATED 1ORY BYRIT
  382. ;
  383. CHK
  384.     CALL    CH:
  385.     LD    B,4        ; Number of entries per sector
  386.     LD    HL,TBUFF    ; Beginning of buffer
  387. CKLUP:
  388.     PUSH    BC
  389.     LD    A,(HL)
  390.     CP    0E5H        ; Check for unused
  391.     JR    Z,CKINC
  392. ;V2.2 -- Check for > max user from SYS.ENV
  393.     LD    E,(IX+MUOFF)
  394.     INC    E        ; T flaake cp easy
  395.     CP    A,E        ; > maxuser?
  396.     JR    NC,CKINC    ; Yes, if nc
  397. ;--
  398.     XOR    A        ; A=0
  399.     LD    (CLPFLG),A    ; Set flIND3for no BDes undnd
  400.     LD    A,(FNCOUNT)    ; Get number of file names to look thru
  401.     LD    B,A        ; In b
  402.     PUSH    HL
  403.     LD    HL,(FNTAB)    ; Pt to table
  404.     EX    DE,HL        ; In de
  405.     POP    HL
  406. CKLUP1:
  407.     PUSH    Binfo; Save counafn,fPUSH    HL        ; Save beginning address
  408.     PUSH    DE
  409.     CALL    COMPAR        ; Compare with argument and save if match
  410.     POP    DE
  411.     LD    HL,11        ; Pt to nk
  412.     Ientry
  413.     ADD    HL,DE
  414.     EX    DE,HL
  415.     POP    HL
  416.     POP    BC
  417.     DJNZ    CKLUP1        ; Count down
  418. CKINC:
  419.     POP    BC
  420.     LD    DE,32        ; Length of entry
  421.     ADD    HL,DE
  422.     DL        ; CKLUP
  423.     LD    HL,(S    MAX)
  424.     FIND0Reseduce sectors left
  425.     LD    (DIRMAX),HL
  426.     LD    HL,(SS SER)    ; Point to nk
  427.     Isector
  428.     INC    HL
  429.     LD    (SS SER),HL
  430.     EX    DE,HL
  431.     LD    HL,(MAXSEC)    ; Reached limit?
  432.     CALL    NXINX    H        ;ONE MORE
  433.     LD    A,H        ; Check high
  434.     CP    D
  435. SC    NZ
  436.     LD    A,HL        ; RCheck low
  437.     CP    E
  438.     RET    N dowLD    HL,(TRACK)    ; Nk
  439.     Itrack
  440.     INC    HL
  441.     LD    (TRACK),HL
  442. ;    LXI    H,1        ;FIRST SS SER OF NEXT TRACK
  443.     LD    HL,0
  444.     LD    (SEC; RR),HL
  445. SC
  446. ;
  447. ; COMPARE 11 BYRIT:
  448.     LD    C
  449.     REREC; RRY 
  450.     CALL    CHRY AGAINST ARGUUMNTALPNZ IF NOTIF outD
  451. ;  DE PTE CO TABLE 
  452.     CALL    CHRY ; R COMPARE TO
  453. ;
  454. COMPAR:
  455.     LD    A,(CLPFLG)    ; GetECTOd flaged eA        ; 0=no
  456. SC    NZ
  457.     LD    (TEMP),HL    ; Hold pointer in case of match
  458.     INC    HL
  459.     EX    DE,HL
  460.     LD    B,11
  461. CMPR1:
  462.     LD    A,ce fE)        ; Get directoryit uy character
  463.     AND    7FH        ; Strip any flags
  464.     CP    (HL)ero,CMPR2
  465.     LD    A,(HL)
  466.     CP    '?'
  467.     RET            ; NeCMPR2:
  468.     INC    DE
  469.     INC    HHL        ; RBump to nk
  470.     Icharacter
  471.     DJNZ    CMPR1        ; Loop for 11 characters
  472.     PUSH    DE        ; Save entry  for     LD    A,(DE)        ; Get extent in b
  473.     LD    B,A
  474.     LD    A,(EXT
  475.     CALL    CH)    ; Get extent mask
  476.     CP    B
  477.     POP    DE        ; Getit uy ptr
  478.     JR    C,CMPR4        ; N flaatch    ; SkSYSTEM)    ; Include system files?
  479.     iles     ; 0=no
  480.     JR    NZ,CMPR3
  481.     DEC    DE        ; Back up 2 bytes
  482.     DEC    DENZ
  483. E)        ; Get t2
  484.     AND    80H        ; Check for sys
  485. SC    NZ
  486. CMPR3:
  487.     LD    HL,(TEMP)    ; Check for user limit
  488.     LD    A,31        ; Max user
  489.     CP    (HL)        ; Beyond max?
  490.     JR    C,CMPR4
  491.     LD    HL,(FCJNZ    )    ; Increment count
  492.     INC    HL
  493.     LD    (FCJNZ    ),HL
  494.     LD    HL,ce fSTART)    ; Getfor i to neiskentry
  495.     EX    DE,HL
  496.     LD    HL,(TEMP)
  497.     LD    B,ESIZE        ; Copy entry
  498.     CALL    MOVE
  499.     EX    DE,HL
  500.     LD    (DSTART),HL    ; Ptr to neiskentry
  501.     EX    DE,HL
  502.     LD    HL,(DOSOS+1)    ; Check for IREory overflow
  503.     LD    A,H
  504.     SUB    10        ; Below ccp
  505.     CP    D        ; Pt beyond limit?
  506.     JR    C,MOVFL
  507.     LD    A,0FFH        ; Set undnd fOR    A        LD    (FFLAG),A
  508.     XOR        ; Se    RET            ALPeturns 'zero' flag set for match
  509. CMPR4:
  510.     LD    A,0FFH        ; No matched eA
  511.     RET
  512. MOVFL:
  513.     CALL    PRINT
  514.     DB    CR,LF,'ABORT -- Not Enough Memory for Buffers',0CHE    RETURN
  515. ;
  516. ;  ADVANCE ; R NEXT
  517.     RESK
  518. ;
  519. y sTDISK:
  520.     LD    BC,TBUFF    ; Set dma address
  521.     CALL    SETDMAFFLACB)
  522.  
  523.     LD    HL,0
  524. ;was:    cp    maxdsk
  525. ;V2.2 -- compare with MAX DSK from SYS.ENV
  526.     CP    A,(IX+MDOFF)
  527. ;--
  528. SC    NC
  529.  
  530.     LD    C,A
  531.     LD    B,0
  532.     LD    E,B        ; Force bios to re-log disk
  533.     CALL    SELDSK        ; Make sure drive is
  534.     LD    A,H        ; Sect cted
  535.     OR    L
  536.     RET    Z        ; Error return
  537.     LD    (DPH),HL    ; Save the address
  538.     LD    DE,10        ; Pt to dpb
  539.     ADD    HL,DE
  540.     LD    E,(HL)        ; Get dpb address in hl
  541.     INC    HL
  542.     LD    D,(HL)
  543.     EX    DE,HL
  544.     LD    E,(HL)        ; Number of sectors/track
  545.     INC    HHL        ; RAs 2-byte quantity in de
  546.     LD    D,(HL)
  547.     INC    HL
  548.     EX    DE,HL
  549.     LD    (MAXSEC),HL    ; Set max sectors/track
  550.     EX    DE,HL
  551.     INC    HL
  552.     INC    HL
  553.     LD    A,(HL)        ; Get exm
  554.     LD    (EXT
  555.     CALL    CHDEC    
  556.     INC    HL        ; Pt to drm
  557.     INC    HL
  558.     INC    HL
  559.     LD    E,(HL)        ; Get number of
  560.     INC    HHL        ; RDirectoryit uZeT
  561.     LD    D,(HL)
  562.     EX    DE,HL
  563.     INC    HHL        ; RAccount for - 1
  564.     LD    (DSTART),HL    ;
  565.     DJ    e number of directoryit uZeT
  566.     CALL    SHFHL2        ; Shift 'hl' right 2
  567.     LD    (DIRMAX),HL    ; Save number directory sector
  568.     CP    ' 'HL,5        ; Now point to system
  569.     ADD    HL,DE        ; Track offset    ; SkHL)        ; Pick up number of
  570.     INC    HL
  571.     LD    H,(HL)
  572.     LD    L,A
  573.     LD    (TRACK),HL
  574. ;    LXI    H,1        ;SET SS SER
  575.     LD    HL,0
  576.     LD    (SEC; RR),HL    ; SkECOUNT)    ; Last new line?
  577.     AND    3
  578.     CALL    NZ,CRLFCR,LFRINT
  579.     DB    'Disk ',0
  580.     LD    A,LOOK)
  581.     ADD    'A'
  582.     CALL    COUTCR,LFRINT
  583.     DB    ' --',CR,LF,0
  584.     CALL    CHKPAGE        ; Check for paging
  585.     LD    HL,(SCRATCH)    ; Pt to scratch area
  586.     LD    (ORDER),HL    ; Address of order table
  587.     EX    DE,HL
  588.     LD    HL,(DSTART)    ; Get number of directoryit uZeT
  589.     ADD    HL,HL        ; Double for number of bytes in order table
  590.     ADD    HL,DE        ; Pt to fiNX byte of dirbuf
  591.     LD    (DIRBUF),HL    ; Set  for     LD    ce fSTART),HL    ; Set loop  for     LD    HL,0elet file counafn,fLD    (FCJNZ    ),HL
  592.     XOR    A        ; Set counafn,fLD    (ECOUNTDEC    
  593.     CPL            ; Fliped eA        ; Ok to continue
  594.     RET
  595. ;
  596. ; GET BIOS JUMPS VS SERS FOR EASY REFENT CE
  597. ;
  598. GTBIOS:
  599.     LD    HL,(BOOT+1)    ; Points to bios jump table+3
  600.     LD    DE,WBOOT    ; Where we will keep a copy
  601.     LD    B,16*Ret Move 48 bytes and fall thru to move
  602. ;
  603. ; GENERAL PURPOSE MOVE ROUTINE
  604. ; FROM 'HL' ; R 'DE' FOR COU 4OF 8
  605. ;
  606. MOVE:
  607.     LD    A,(HL)        ; Get a byte
  608.     LD    (DE),A        ; Put a byte
  609.     INC    Z,FIncrement to next
  610.     INC    HL
  611.     LD    (DNZ    MOVE        ; Count down
  612. SC
  613. ;
  614. ; READS NEXT SS SER (GROUP OF FOUR
  615.     REREC; RRY 
  616.     CALL    CHRIES)
  617.     CALL    PNS WITH ZERO FLAG SET IF NO MORE
  618. ;
  619. y sTSEC:
  620.     LD    HL,(S    MAX)    ; See if more sector
  621.     CP    ' 'A,H        ; NoR    L
  622.     RET    Z        ; Returns zero    JR    mg if no more
  623.     LD    HL,(TRACK)    ; Set track
  624.     LD    B,H
  625.     LD    C,L
  626.     CALL    SETTRK
  627.     LD    HL,(SEC; RR)    ; Set seXTSLD    B,H
  628.     LD    C,L
  629.     CALL    TRNSLT
  630.     CALL    SETSEC
  631.     CALL    READ        ; Read a sector
  632.     AND    1        ; Reverse sense of error fOR    A        XOR    1        ; Returns with zero    JR    mg set
  633. SC            ; If bad read
  634. ;
  635. ; PRINT FILIEIN S    BUF
  636. ;
  637. PRo fiES:
  638.     LD    HL,(FCJNZ    )    ; Get counafn,fLD    A,H        ; Any?
  639.     OR    L
  640.     RET    Z
  641.     LD    B,H        ; Count in bc
  642.     LD    C,L
  643.     LD    HL,(S    BUF)    ; Pt to fiNX one
  644. PRFLOOP:
  645.     PUSH    Binfo; Save counafn,fPUSH    HL        ; Save ptrCR,LFRINTFCB    ; Print fcb
  646.     CALL    CST        ; Check for abort character
  647.     JR    NZ,PRFL1    ; If not, go on
  648.     CALL    CINelee if character is control-c
  649.     CP    'C'-'@'ero,PRFL2
  650. PRFL1:
  651.     POP    HHL        ; RGet regs back
  652.     POP    BC
  653.     LD    DE,ESIZE    ; Pt to next
  654.     ADD    HL,DE
  655.     FIND0Binfo; Count down
  656.     LD    A,Bed eC
  657.     JR    NZ,PRFLOOP
  658. SC
  659.  
  660. PRFL2:
  661.     CALL    PRINT
  662.     DB    CR,LF
  663.     DB    ' +++ aborted +++;
  664. ; C    JST ETU    DB    C
  665.  
  666. ;------------------------------------------------------------------------------------------------------------es 
  667. ; FCB PRINTING ROUTINE (modified by R. Peterson for named directory display)
  668. ;
  669. PRINTFCB:CR,LFRINT        ; 4 spaces
  670.     DB    '    ;
  671. ; C    LD    A,(HL)        ; Get user number
  672.     CALL    PADC        ; Ptemt iafn,fLD    A,':'
  673.     CALL    COUT
  674.     EX    DE,HL        ; Save pointer
  675.     CALL    GETNDR        ; Return with hl pointing to ndir buffer
  676.     LD    B,10        ; For padding in case no ndr
  677.     JR    Z,PRFCB5A    ; S(Dprint of dir name if no ndr
  678. PRFCB1:    LD    A,(HL)        ; Get byte
  679.     AND    Aelet flags
  680.     JR    Z,PRFCB5A    ; S(Dprinting directory name
  681.     LD    A,LOOK)        ; Current drive in a
  682.     INC    A        ;
  683.     CP    (HL)        ; Check for match
  684.     JR    NZ,PRFCB2    ; Move to nk
  685.     Ientry
  686.     INC    HHL        ; RPoint to user
  687.     LD    A,ce fE)        ; Get user number
  688.     CP    (HL)        ; Check for matchero,PRFCB3    ; Go print directory name
  689.     FIND0HL        ; Point back at beginning of entry
  690. PRFCB2:    LD    Bet s8        ; Length of directoryit uy
  691.     ADD    HL,Binfo; Move to nk
  692.     Ientry
  693.     LD    B,10        ; For pad just in case
  694.     JR    PRFCB1        ; Loop through again
  695. PRFCB3:    INC    HHL        ; RPoint to name
  696.     LD    B,8        ; Length of name
  697. PRFCB4:    LD    A,(HL)        ; Get character
  698.     CP    ' '        ; Look for space
  699.     JR    Z,PRFCB5    ; Don't print spaces
  700.     CALL    COUT        ;
  701.     INC    HL        ;
  702.     LD    (DNZ    PRFCB4
  703. PRFCB5:    LD    A,RIGHTCH    ;
  704.     CALL    COUT        ;
  705.     INC    B        ; Ptemt one extra space
  706. PRFCB5A:
  707.     LD    A,' '        ; Pad with spaces to align output
  708.     CALL    COUT
  709.     LD    (DNZ    PRFCB5A
  710. PRFCB6:
  711.     EX    DE,Resestore hl
  712.     INC    HL
  713. PR0:
  714.     LD    B,8CR,LFR1
  715.     LD    A,'.'
  716.     CALL    COUT
  717.     LD    B,3
  718.     CALL    PR1
  719.     LD    A,(ECOUNT)    ; Increment count
  720.     INC    A
  721.     LD    (ECOUNTDEC    
  722.     AND    1        ; Every 2
  723. ck i,PR0A
  724.     CALL    PRINT ptrdd extra spacing to second column
  725.     DB    '    ;
  726. ; C,HL    
  727.  
  728. PR0A:
  729.     CALL    CRLF
  730.  
  731. ; Check for end of page of display
  732.  
  733. CHKPAGE:
  734.     LD    A,(PAGEOPT)    ; See if paging in effected eA
  735.     RET    Z        ; Return if option not seafn,fLD    A,(LPS)        ; Get lines-per-screen value
  736.     LD    B,A        ; ..into B    ; SkLINECNT)    ; Get count of lines on page
  737.     INC    A
  738.     LD    (LINECNT),A
  739.     CP    B
  740. SC    C        ; Return if less than full page
  741.  
  742.     LD    A,0        ; Reset line count
  743.     LD    (LINECNT),A
  744.     CALL    PRINT
  745.     DB    ' Strike Any :    Ny -- '
  746.     DB    0
  747.     CALL    CIN
  748.     LD    A,CR
  749.     CALL    COUT
  750.     LD    A,' '
  751.     LD    B,19
  752. CHKP1:    CALL    COUT
  753.     LD    (DNZ    CHKP1
  754.     JP    CRLF
  755.  
  756. PR1:
  757.     LD    A,(HL)
  758.     AND    7FH
  759.     CALL    COUT
  760.     INC    HL
  761.     DL        ; PR1
  762.     RET
  763. ;
  764. ; SHIFT REGS 'HL' RIGHT 2 BITS LOGICAL
  765.  
  766. SHFHL2:
  767.     CALL    SHFHOLXotate right 1 bit and fall thru
  768. SHFHL:
  769.     XOR    A        ; Clear carry
  770.     LD    A,H
  771.     RRA            ; Shifted bit in carry
  772.     LD    H,A
  773.     LD    A,L
  774.     RRA
  775.     LD    L,A
  776.     RET
  777. ;
  778. ; TRANSLATE REG 'BC' FROM LOGICAL TO PHYSICAL SS SER N    AZBER
  779. ;
  780. TRNSLT:
  781.     LD    HL,ce fPH)    ; Get ptr to dph
  782.     LD    E,(HL)        ; Get address of xlt
  783.     INC    HL
  784.     LD    D,(HL)
  785.     CALL    SECTRAN        ; Use bios routine
  786.     LD    C,OLXeturn value in bc
  787.     LD    B,H
  788. SCIG
  789.     RERALPHA -- neIHABETIZES S    S SERY PTED TO BY HL; BC CONTAGA
  790. ;    THE N    AZBER OF FILIEIN THE
  791.     REREC; RRY
  792. ;
  793. S    neIHA:
  794.     LD    HL,(FCJNZ    )    ; Get file counafn,fLD    A,H        ; Any files?ed eL
  795.     RET    Z
  796.     LD    (N),HLelet "N"
  797.     LD    B,H        ; Bc=counafn,fLD    C,L
  798.     LD    HL,(S    BUF)    ; Pt to directory
  799. ;
  800. ;  SHELL SORT --
  801. ;    THIS SORT ROUTINE IS ADAPTED FROM "SOFTWARE TOOLS"
  802. ;    BY KERNI AGBYE:AND PLAUGHER, PAGE 106.  COPYRIGHT, 1976, ADDISON-WESLEY.
  803. ;  ON 
  804.     CALL    CHRY, BC=N    AZBER OFCTORIIEAND HL=ADDRESS:
  805.     LD    C FIRSTCTORY
  806. ;
  807. SORT:
  808.     EX    DE,HL        ; Pointer to directory in de
  809.     LD    HL,(ORDER)    ; Pt to order table
  810. ;
  811. ;  SET UP ORDER TABLE; HL PTE CO NEXTCTORY IN ORDER TABLE, DE PTE CO NEXT
  812. ;    
  813.     CALL    CHRY IN S    S SERY, BC = N    AZBER OF ELEM
  814.     CALL    CHS REMAINING
  815. ;
  816. SORT1:
  817.     LD    (HL),E        ; Store low-order address
  818.     INC    HHL        ; RPt to
  819.  
  820. ;
  821. ; t order byte
  822.     LD    (HL),D        ; Store high-order address
  823.     INC    HHL        ; RPt to
  824.  
  825. ;
  826. ; t order entry
  827.     PUSH    HL        ; Savefor i
  828.     LD    HL,ESIZE    ; Hl=number of bytes/entry
  829.     ADD    HL,DE        ; Pt to nk
  830.     Idir1 entry
  831.     EX    DE,HL        ; De pts to neiskentry
  832.     POP     DIet ptr to order table
  833.     DEC    Binfo; Count down
  834.     LD    A,B        ; Done?
  835.     OR    C
  836.     JR    HL        ; GORT1
  837. ;
  838. ;  THIS IE CHE MAIN SORT LOOP FOR THE SHELL SORT IBYE:"SOFTWARE TOOLS" BY K&P
  839. ;
  840.  
  841. ;
  842. ;  SHELL SORT FROM "SOFTWARE TOOLS" BY KERNINGHAN AND PLAUGER
  843. ;
  844.     LD    HL,(N)        ; Number of items to sorafn,fLD    ( AGP),HL    ; Set initial gap to n for fiNX division by 2
  845.  
  846. ;  FOR ( AGP = N/2; GAP > 0; GAP = GAP/2)
  847. SRTL0:ed eA        ; Clear carry
  848.     LD    HL,( AGP)    ; Get previous gap
  849.     LD    A,H        ; Rotate right to divide by 2
  850.     RRA
  851.     LD    H,A
  852.     LD    A,L
  853.     RRA
  854.     LD    L,A
  855.  
  856. ;  TEST FOR ZEROed eH
  857.     JR    Z,SDONE        ; Done with sorFIND1 gap = 0
  858.  
  859.     LD    ( AGP),HL    ; Set value of gap
  860.     LD    (kip HL        ; Set k=gap for following loop
  861.  
  862. ;  FOR (K = GAP + 1; K <= N; K = K + 1)
  863. SRTL1:
  864.     LD    HL,(K) ptrdd 1 to INC    ANC    HL
  865.     LD    (kip HL
  866.  
  867. ;  TEST FOR K <= N
  868.     EX    DE,HL        ; K is in de
  869.     LD    HL,(N)        ; Get n
  870.     LD    A,HL        ; RCompare by subtraction
  871.     SUB    E
  872.     LD    A,H
  873.     SBC    A,D        ; Carry set means k > n
  874.     JR    C,SRTL0        ; Don't do for loop if k > n
  875.  
  876.     LD    HL,(K)elet j = k initially for fiNX subtraction of gap
  877.     LD    (J),HL
  878.  
  879. ;  FOR (J = K -  AGP; J > 0; J = J -  AGP)
  880. SRTL2:
  881.     LD    HL,( AGP)    ; Get gap
  882.     EX    DE,HL        ; In de
  883.     LD    HL,(J)        ; Get j
  884.     LD    A,HL        ; RCompute j - gap
  885.     SUB    E
  886.     LD    L,A
  887.     LD    A,H
  888.     SBC    A,D
  889.     LD    H,A
  890.     LD    (J),HL        ; J = j - gap
  891.     JR    C,SRTL1        ; If carry from subtractions, j < 0 and abort
  892.     LD    A,H        ; J=0?
  893.     OR    L
  894.     JR    Z,SRTL1        ; If zero, j=0 and abort
  895.  
  896. ;  SET JG = J + GAP
  897.     EX    DE,HL        ; J in de
  898.     LD    HL,( AGP)    ; Get gap
  899.     ADD    HL,DE        ; J + gap
  900.     LD    (JG)        ; Di    ; Jg = j + gap
  901.  
  902. ;  
  903. ; I(V(J) <= V(JG))
  904.     CALL    ICOMPARE    ; J in de, jg in hl
  905.  
  906. ;  ... THEBYE:BREAK
  907.     JR    C,SRTL1
  908.  
  909. ;  ... ELSE EXCHANGE
  910.     LD    HL,(J)        ; Swap j, jg
  911.     EX    DE,HL
  912.     LD    HL,(JG)
  913.     CALL    ISWAP        ; J in de, jg in hl
  914.  
  915. ;  END:
  916.     LD    C INNER-MOORY FOR LOOP
  917.     JR    SRTL2
  918.  
  919. ;
  920. ;  SORT IS DONE -- RESTRUCTURE S    1 IN SORTED ORDER IBYE:PLACE
  921. ;
  922. SDONE:
  923.     LD    HL,(N)        ; Number of entrZeT
  924.     LD    B,H        ; In bc
  925.     LD    C,L
  926.     LD    HL,(ORDER)    ; Ptr to ordered pointer table
  927.     LD    (PTPTR),HL    ; Set ptrfor i
  928.     LD    HL,ce fIRBUF)    ; Ptr to unordered directory
  929.     LD    (PTS    ),HL    ; Set ptr dir buffer
  930.  
  931. ;  FIND PTR TO NEXT
  932.     RER1 
  933.     CALL    CHRY
  934. SRTDN:
  935.     LD    HL,(PTPTR)    ; Pt to remaining pointers
  936.     EX    DE,HL        ; In de
  937.     LD    HL,(PTS    )    ; Hl pts to next dirit uy
  938.     PUSH    Binfo; Save count of remaining BDes
  939.  
  940. ;  FIND PTR TABLE 
  941.     CALL    CHRY
  942. SRTDN1:
  943.     LD    A,ce fE)        ; Get current pointer table entry value
  944.     INC    Z,FPt to high-order pointer byte
  945.     CP    HL        ; RCompare against dir1 address low
  946.     JR    HL        ; GRTDN2    ; Not undnd yetNZ
  947. E)        ; Low-order bytes match -- get high-order pointer byte
  948.     CP    H        ; Compare against dir1 address highero,SRTDN3    ; MatchECTOd
  949. SRTDN2:
  950.     INC    DE        ; Pt to nk
  951.     Iptr table entry
  952.     DEC    Binfo; Count down
  953.     LD    A,info; End of table?
  954.     OR    B
  955.     JR    NZ,SRTDN1    ; Continue if not
  956.  
  957. ;  FATAL ERROR -- INTERNAL ERROR; POINTER TABLE NOT CONSISTENT
  958. FERR$PTR:
  959.     CALL    PRINT
  960.     DB    0DH,0AH,'S    neIHA -- Pointer Error;
  961. ; C    JST ETU    DB    C
  962.  
  963. ;  FOUND THE POINTER TABLE 
  964.     CALL    CHRY WHICH POINTE CO THE NEXT UNORDERED S    1 
  965.     CALL    CHRY
  966. ;    MAKE BOTH POINTERS (PTR ; R NEXT, PTR ; R CREN
  967.     CALL    CH UNORDERED S    1 
  968.     CALL    CHRY)
  969. ;    POINT TO SAUM LOCATION (PTR TO NEXT
  970.     RER1 
  971.     CALL    CHRY ; R BE ORDERED)
  972. SRTDN3:
  973.     LD    HL,(PTPTR)    ; Get ptr to neiskorderedit uy
  974.     FIND0Z,FDe pts to low-order pointer address    ; SkHL)        ; Make ptr to neiskunordered dir1 pt to buffer for
  975.     LD    (DE),A        ; Dir1 entry to be moved to
  976.  
  977. ;
  978. ; t unordered dir1 pos
  979.     INC    HHL        ; RPt to
  980.  
  981. ;
  982. ; t ptr address
  983.     INC    DE
  984.     LD    A,(HL)        ; Make high point similarly
  985.     LD    (DEDEC    
  986.  
  987. ;  COPY NEXT UNORDERED S    1 
  988.     CALL    CHRY ; R HOLD BUFFER
  989.     LD    B,ESIZE        ; B=number of bytes/entry
  990.     LD    HL,(PTS    )    ; Pt to entry
  991.     LD    DE,HOLD        ; Pt to hold buffer
  992.     PUSH    Binfo; Save b=number of bytes/entry
  993.     CALL    MOVE
  994.     POP    BC
  995.  
  996. ;  COPY ; R-BE-ORDERED S    1 
  997.     CALL    CHRY ; R NEXT ORDERED
  998.     RER1 POSITION
  999.     LD    HL,(PTPTR)    ; Point to its pointer
  1000.     LD    E,(HL)        ; Get low-address pointer
  1001.     INC    HL
  1002.     LD    D,(HL)        ; Get high-address pointer
  1003.     LD    HL,(PTS    )    ; Destination address for next ordered dir1 entry
  1004.     EX    DE,HL        ; Hl pts to entry to be moved, de pts to desafn,fPUSH    Binfo; Save b=number of bytes/entry
  1005.     CALL    MOVE
  1006.     POP    BC
  1007.     EX    DE,HL        ; Hl pts to next unordered dir1 entry
  1008.     LD    (PTS    ),HL    ; Set pointer for next loop
  1009.  
  1010. ;  COPY 
  1011.     CALL    CHRY IN HOLD BUFFER TO LOC PREVIOUSLY HELD BY LARITT ORDEREDCTORY
  1012.     LD    HL,(PTPTR)    ; Get ptr to ptr to the destination
  1013.     LD    E,(HL)        ; Get low-address pointer
  1014.     INC    HL
  1015.     LD    D,(HL)        ; High-address pointer
  1016.     LD    HL,HOLD        ; Hl pts to hold buffer, de pts to entry desafn,fCALL    MOVE        ; B=number of bytes/entry
  1017.  
  1018. ;  POINT TO NEXTCTORY IN POINTER TABLE
  1019.     LD    HL,(PTPTR)    ; Pointer to currentit uy
  1020.     INC    HHL        ; RS(Dover it
  1021.     INC    HL
  1022.     LD    (PTPTR),HL
  1023.  
  1024. ;  COU 4DOWN
  1025.     POP    Binfo; Get counter
  1026.     FIND0Binfo; Count down
  1027.     LD    A,info; Done?
  1028.     OR    B
  1029.     JR    NZ,SRTDN
  1030.     RET            ; Do    ; So
  1031.  
  1032. ;
  1033. ;  SWAP (Exchange) the pointers in the ORDER table whose indexes are in
  1034. ;    HL and DE
  1035. ;
  1036. ISWAP:
  1037.     PUSH    HL        ; Save hl
  1038.     LD    HL,(ORDER)    ; Address of order table - 2
  1039.     LD    B,H        ; In bc
  1040.     LD    C,L
  1041.     POP    HL
  1042.     FIND0HL        ; Adjust index to 0...n-1 from 1...n
  1043.     ADD    HL,HL        ; Hl pts to offset address indicated by index
  1044.                 ; Of original hl (1, 2, ...)
  1045.     ADD    HL,Binfo; Hl now pts to pointer involved
  1046.     EX    DE        ; Di    ; De now pts to pointer indexed by hl
  1047.     DEC    HHL        ; RAdjust index to 0...n-1 from 1...n
  1048.     ADD    HL,HL        ; Hl pts to offset address indicated by index
  1049.                 ; Of original de (1, 2, ...)
  1050.     ADD    HL,Binfo; Hl now pts to pointer involved
  1051.     LD    C,(HL)        ; Exchange pointers -- get old (de)
  1052.     LD    A,ce fE)        ; -- get old (hl)
  1053.     EX    DE        ; Di    ; Switch
  1054.     LD    (HL),C        ; Put new (hl)
  1055.     LD    (DE),A        ; Put new (de)
  1056.     INC    HHL        ; RPt to
  1057.  
  1058. ;
  1059. ; t byte of pointer
  1060.     INC    DE
  1061.     LD    C,(HL)        ; Get old (hl)
  1062.     LD    A,ce fE)        ; Get old (de)
  1063.     EX    DE        ; Di    ; Switch
  1064.     LD    (HL),C        ; Put new (de)
  1065.     LD    (DE),A        ; Put new (hl)
  1066.     RET
  1067. ;
  1068. ;  ICOMPARE compares the entry pointed to by the pointer pointed to by HL
  1069. ;    with that pointed to by DE (1st level indirect addressing); on entry,
  1070. ;    HL and DE contain the numbers of the ect ments to compare (1, 2, ...);
  1071. ;    on exit, Carry Set means (ce fE)) < ((HL)), mber ro Set means ((HL)) = (ce fE)),
  1072. ;    and Non-mber ro and No-Carry means (ce fE)) > ((HL))
  1073. ;
  1074. ICOMPARE:
  1075.     PUSH    HL        ; Save hl
  1076.     LD    HL,(ORDER)    ; Address of order - 2
  1077.     LD    B,H        ; In bc
  1078.     LD    C,L
  1079.     POP    HL
  1080.     FIND0HL        ; Adjust index to 0...n-1 from 1...n
  1081.     ADD    HL,HL        ; Double the element number to point to the  for     ADD    HL,Binfo; Add to this the base address of the ptr table
  1082.     EX    DE,Resesult in de
  1083.     DEC    HL ptrdjust index to 0...n-1 from 1...n
  1084.     ADD    HL,HL        ; Do the same with the original de
  1085.     ADD    HL,BC
  1086.     EX    DE,HL
  1087.  
  1088. ;
  1089. ;  HL NOW POINTE CO THE POINTER WHOSE INDEX WAS IBYE:HL TO BEGIN WITH
  1090. ;  DE NOW POINTE CO THE POINTER WHOSE INDEX WAS IBYE:DE TO BEGIN WITH
  1091. ;    FOR EXAMPLE, 
  1092. ; IDE=5 AND HL=4, DE NOW POINTE CO THE 5TH PTR AND HL
  1093. ; TO THE4 DTH POINTER
  1094. ;
  1095.     LD    C,(HL)        ; Bc is made to point to the obje
  1096. Findexed to
  1097.     INC    HHL        ; RBy the original hl
  1098.     LD    B,(HL)
  1099.     EX    DE,HL
  1100.     LD    E,(HL)        ; De is made to point to the obje
  1101. Findexed to
  1102.     INC    HHL        ; RBy the original de
  1103.     LD    D,(HL)
  1104.     LD    H,B        ; Set hl = obje
  1105. Fpted to indirectly by bc
  1106.     LD    L,C
  1107.  
  1108. ;
  1109. ;  COMPARE
  1110.     RER 
  1111.     CALL    CHRY PTED TO BY HL WITH THAT PTED ; R BY DE;
  1112. ;    NO NET EFFECT OBYE:HL, DEALPET W/CARRY SET MEANS DE<HL
  1113.     CALL    NXRET W/ZERO SET MEANS DE=HL
  1114. ;
  1115. CMP$
  1116.     CALL    CHRY:
  1117. ;
  1118. ;  COMPARE BY o fiE NAME, o fiE TYPE, EXTENSION, AND USER N    AZ (IN THAT ORDER)
  1119. ;
  1120.     PUSH    HL
  1121.     PUSH    DE
  1122.     INC    HHL        ; RPt to fn
  1123.     INC    DE
  1124.     LD    B,11        ; Compare fn, fafn,fCALL    COMP
  1125.     POP    DE
  1126.     POP    HL
  1127.     RET    N dowLD    A,ce fE)        ; Compare user number
  1128.     CP    (HL)
  1129. SC
  1130. ;
  1131. ;  COMP COMPARES DE W/HL FOR B BYRITALPET W/CARRY 
  1132. ; IDE<HL
  1133.     CALL    NXMSB IS DISRE AGRDED
  1134. ;
  1135. COMP:
  1136.     LD    A,(HL)        ; Get (hl)
  1137.     AND    7FH        ; Mask msb
  1138.     LD    C,A        ; In cNZ
  1139. E)        ; Compare
  1140.     AND    7FH        ; Mask msb
  1141.     CP    C
  1142.     RET            ; Ne    INC    HHL        ; RPt to
  1143.  
  1144. ;
  1145. ; afn,fINC    DE
  1146.     DL        ; COMP        ; Count down
  1147. SC
  1148. ;
  1149. ;  AS COMP, BUTIF CH OBYE:'?' PTED TO BY HL
  1150. ;
  1151. COMP2:
  1152.     LD    A,(HL)        ; Get (hl)
  1153.     AND    7FH        ; Mask msb
  1154.     CP    '?'        ; Match '?'ero,COMP2A
  1155.     LD    C,A        ; In cNZ
  1156. E)        ; Compare
  1157.     AND    7FH        ; Mask msb
  1158.     CP    C
  1159.     RET            ; NeCOMP2A:
  1160.     INC    HL        ; Pt to next
  1161.     INC    DE
  1162.     LD    (DNZ    COMP2        ; Count down
  1163. SCIG SORT BUFFERS
  1164. ;
  1165. ORDER:
  1166.     DS    2        ; Ptr to order table
  1167. DIRBUF:
  1168.     DS    2        ; Pointer to directory
  1169. DSTART:
  1170.     DS    2        ; Pointer toundNX directoryit uy
  1171. FCJNZ    :
  1172.     DS    2        ; Total number of files/number of selected files
  1173. HOLD:
  1174.     DS    ESIZE        ; Exchange hold buffer for fcb's
  1175. PTPTR:
  1176.     DS    2        ; Pointer pointer
  1177. PTS    :
  1178.     DS    2        ; Directory pointer
  1179. K:
  1180.     DS    2        ; Indexes for sort
  1181. J:
  1182.     DS    2
  1183. JG:
  1184.     DS    2
  1185. N:
  1186.     DS    2        ; Number of elements to sort
  1187.  AGP:
  1188.     DS    2        ; Binary gap size
  1189. ;
  1190. ; THIS IE CHE WORKING COPY OF THE BIOS JUMP TABLE
  1191. ;
  1192. WBOOT:    DS    3
  1193. CONST:    DS    3
  1194. CONIN:    DS    3
  1195. CONOUT:    DS    3
  1196. LIST:    DS    3
  1197. PUNCH:    DS    3
  1198. READER:    DS    3
  1199. HOUM:    DS    3
  1200. SELDSK:    DS    3
  1201. SETTRK:    DS    3
  1202. SETSEC:    DS    3
  1203. SETDMA:    DS    3
  1204. READ:    DS    3
  1205. REWITE:    DS    3
  1206. LISTST:    DS    3
  1207. SECTRAN:DS    3
  1208. ;
  1209. STACK:
  1210.     DS    2        ; Location of stack
  1211. ;
  1212. ; DATA AREAS
  1213. ;
  1214. FNCNUNT:
  1215.     DS    1        ; Number of file namesECTOd
  1216. CLPFLG:    DS    1        ; 0 for no match locally
  1217. SYSTEM:    DS    1        ; 0ag  no system files
  1218. ECOUNT:    DS    1        ; Count of BDes printed - 1
  1219. Get fG:    DS    1        ;d'e f
  1220.     JP    JR    mg (0=no)
  1221. TEMP:    DS    2        ; Temp storage for fcb print
  1222. ;
  1223.     RESK PARAMETER DATA
  1224. ;
  1225. DISK:    DS    1        ; Disk to searchHL        ; RRC        for all disks.
  1226. DPH:    DS    2        ; Address of dph
  1227. DIRMAX:    DS    2        ; Number of sectors in directory =
  1228. ;                ;   MAXIM    AZ N    AZBER OF
  1229.     REREC; RRY 
  1230.     CALL    CHRIES
  1231. ;                ;   DIVIDED BY4 D (
  1232.     CALL    CHRIIEPER SS SER)
  1233. EXT
  1234.     CALL    CH:    DS    1        ; Extent mask
  1235. MAXSEC:    DS    2        ; Maximum number of sectors/track
  1236. SS SER:    DS    2        ; Current sector number
  1237. TRACK:    DS    2        ; Track number of directory
  1238.  
  1239. FNTAB:    DS    2        ; File name table
  1240.     RETORATCH:
  1241.     DS    2        ; Scratch area
  1242.  
  1243. LPS:
  1244.     DS    1        ; Lines-per-screen value
  1245. LINECNT:
  1246.     DS    1        ; Current line count
  1247. PAGEOPT:
  1248.     DS    1
  1249.  
  1250.     END
  1251.