!*************************** AMUS Program Label ****************************** ! Filename: DIRHSH.BAS Date: 2/27/90 ! Category: UTIL Hash Code: 723-641-516-067 Version: 1.0(102) ! Initials: GR/AM Name: James A. Jarboe IV ! Company: Educational Video Network, Inc. Telephone #: 4092955767 ! Related Files: DIRHSH.M68, DIRHSH.SBR ! Min. Op. Sys.: AMOSL 1.3 Expertise Level: BEG ! Special: Must have DIRHSH.SBR ! Description: An example basic program to show how to use DIRHSH.SBR from ! within a BASIC program. ! !***************************************************************************** !*! Updated on 27-Feb-90 at 7:52 PM by James A. Jarboe IV; edit time: 1:22:41 !**************************************************************************** ! * ! DIRHSH.BAS - Example to show DIRHSH.SBR usage. * ! * !**************************************************************************** ! ! This program was designed and implemented by ! ! James A. Jarboe IV ! Educational Video Network, INC. ! 1401 19th Street ! Huntsville, TX 77340 ! 1-409-295-5767 ! ! AMUS Network Email - GR/AM ! ! Edit History: ! ! [102] 27-Feb-90 Added fifth argument demonstration. [JAJ] ! [101] 23-Feb-90 Modified, cleaned up, Sent to AMUS. [JAJ] ! [100] 14-Feb-90 Written - James A. Jarboe IV ! ! -NOTICE- Not sure if this subroutine will work under AMOS 2.x operating ! system extended file format. MFD's and UFD's are read manually ! inside this program and follow the format for 1.3x operating ! systems. Works well on AMOS 1.3C - 1.3D, AMOS BASIC and d/BASIC. ! ! Description: A basic subroutine which will return device spec, filename, ! extension, PPN, version number, and hash total of ! requested files in an array in the same format as the AMOS ! command DIR/V/H/D. This subroutine WILL accept wildcard ! filename and file extensions. This subroutine will NOT ! accept wildcard Device and/or PPN specifications. This ! subroutine will also return a success flag of 0 or an ! unsuccessful flag if an error occurs as listed in this ! program. The fifth argument is optional. If used, it allows ! the user to set characteristics of how the ARRAY will be ! handled as defined in OPTIONS below. ! ! ! Usage: XCALL DIRHSH, DEVICE'SPEC, FILE'SPEC, ARRAY, FLAG, OPTION ! ! Where: DEVICE'SPEC = A valid Device/PPN specification, ERSATZ ! device. If DEVICE'SPEC is an empty string ! then DIRHSH will default to the current logged ! in device and PPN. ! ! FILE'SPEC = A filename.extension of the file to find. This ! can also be a valid AMOS wildcard specification ! using "*" and "?" as wildcard characters. If this ! is an empty field the default will be a "*.*" ! wildcard search. ! ! ARRAY = Found file specifications will be returned in ! this argument. Minimum size must be equal to ! or greater than the L..STR constant (74 bytes in ! this version). When doing a wildcard match there ! is no way to assume how many files will be found. ! Make sure this array is large enough to hold the ! number of expected files you are looking for to ! hash. Multiply the number of files you expect ! by the value in L..STR to get the correct size ! of this variable. If more files are found than ! this array can hold an error flag of 1 will be ! returned. ! ! FLAG = A one byte binary number that will return the value ! of any errors found while processing. ! 0 = Everything OK. ! 1 = Did not allocate enough arg space. ! 2 = Device does not exist. ! 3 = PPN does not exist. ! 4 = Control C interrupt. ! 255 = Subroutine ERROR. (255 in BASIC) ! ! OPTION = An optional flag consisting of a one byte binary ! number that will set the following options ! to the output of the array: ! 0 = Leave array as is, and overwrite existing ! data if user failed to preclear the array ! from the basic program. ! NOTE: In version 102 it was assumed that ! the BASIC program would preclear the ! ARRAY if multiple calls were made. ! Now the user has options. ! 1 = Prelcear ARRAY to nulls. ! 2 = Append the output of this call to the ! existing data in the ARRAY. ! ! Notes: ! ! Argument 1 - String - Device, PPN specification. ! Argument 2 - String - File, extension specification. ! Argument 3 - String - File results are returned. ! Argument 4 - Binary - Returned error flags. ! Argument 5 - Binary - (optional) Set array output characteristics. ! ! PROGRAM DIRHSH, 1.0(102) ! MAP1 DEV'SPEC, S, 20 ! Device, drive, PPN specification. ! DIRHSH.SBR will accept valid ERSATZ ! device names. MAP1 FIL'SPEC, S, 10 ! File(s) to search for. MAP1 OPTS(3),S,60 ! Define 5th argument options. OPTS(1) = "Leave array as is." OPTS(2) = "Preclear array with nulls." OPTS(3) = "Append new files to existing array." ! ARRAY size has been made large enough to be useful but hopefully ! small enough to show how the errors will be reported in the event ! a user requests more files than the array can hold. MAP1 MAX'FILES, F, 6, 5 ! Number of files to return. ! This number should be the same ! value as the number of FNAMES ! you desire to use. MAP1 ARRAY ! Returned filespecs from DIRHSH.SBR MAP2 FNAMES(5), S, 74 ! Returned files.(make as large as you ! deem necessary for your application. ! ! DIRHSH will return the file information in the ARRAY, just as if ! an AMOS command DIR/V/H/D was given. ! ! Example of DIR???.* ! !TOA0:DIRHSH.OBJ[160,50] 325-432-346-070 !TOA0:DIR.M68[160,50] 265-736-016-304 !TOA0:DIRHSH.SBR[160,50] 1.0(100) 341-424-770-117 !TOA0:DIRHSH.SYM[160,50] 504-067-537-513 !TOA0:DIR.RUN[160,50] 1.0(100) 442-315-406-237 !TOA0:DIRHSH.RUN[160,50] 1.0(100) 174-244-627-755 !TOA0:DIRHSH.BAS[160,50] 776-127-052-360 !TOA0:DIRHSH.BAK[160,50] 723-631-003-606 !TOA0:DIRHSH.M68[160,50] 126-114-424-115 ! MAP1 FLAG, B, 1 ! Returned error flag. MAP1 OPTI, B, 1 ! Array characteristics option. MAP1 I, F ! Counter MAP1 A, F ! Total files. ! Error FLAG is offset by 1 to report these errors on terminal. ! MAP1 DH'ERROR(5),S, 50 DH'ERROR(1) = "No errors." DH'ERROR(2) = "Array not large enough to hold all files." DH'ERROR(3) = "Device does not exist." DH'ERROR(4) = "PPN does not exist." DH'ERROR(5) = "Control C exit." ! SETUP: ? TAB(-1,0) ! Clear Screen. CALL MESSAGE ! Report how to use. ! START: DEV'SPEC = "" ! Preclear Device specification. FIL'SPEC = "" ! Preclear File specification. ? "Device spec cannot contain any wild cards." ? "If Device spec is left empty, it will default to current" ? "logged in device and PPN." ? INPUT LINE "Enter Device to search (DSK3:[20,10]) : ",DEV'SPEC IF UCS(DEV'SPEC[1,3]) = "END" THEN GOTO OUT ? ? "File(s) to search can contain wildcards." ? INPUT LINE "Enter File(s) to search (*.BAS) : ",FIL'SPEC D'OPT: OPTI = 0 INPUT "Enter Option (0, 1, or 2 )", OPTI IF OPTI>2 THEN GOTO D'OPT ? ? "Using option: ";OPTS(OPTI+1) ? ? "Hashing ";DEV'SPEC;FIL'SPEC ? ! Call Hashing subroutine. ! The fifth argument (OPTI) can be dropped from the XCALL list ! if the user wants. Not using the fifth argument it is best to ! preclear the array from within the BASIC program. XCALL DIRHSH, DEV'SPEC, FIL'SPEC, ARRAY, FLAG, OPTI !!! XCALL DIRHSH, DEV'SPEC, FIL'SPEC, ARRAY, FLAG ! Also valid use. SHOW: ? FOR I = 1 TO MAX'FILES IF FNAMES(I) <> "" THEN ? FNAMES(I) & : A=A+1 !!! FNAMES(I)="" ! Use this if you don't use OPTI. NEXT I ? ? A;" Total files" CALL ERRFLG ! Show error flag of 0. IF FLAG> 4 THEN GOTO START A = 0 ! Reset file count. ? DH'ERROR(FLAG+1) ? GOTO START ! Try again. OUT: END ! Quit this program. ERRFLG: ? ? "Returned error flag ";FLAG ? RETURN MESSAGE: ? ? "This program demonstrates how to use DIRHSH.SBR. " ? "DIRHSH.SBR will return an array of filenames to the BASIC " ? "program just like the AMOS command DIR/V/H/D. " ? ? RETURN