home *** CD-ROM | disk | FTP | other *** search
- '
- '
- '******************************************************************************
- ' Function : TAGDIR *
- ' *
- ' Purpose: *
- ' *
- ' *
- ' Results: *
- ' *
- ' Usage : *
- ' *
- ' *
- ' Date Written : 09/01/90 - Date Tested: 09/01/90 - Author: James P Morgan *
- ' Date Modified: - : - : *
- '-----------------------------------------------------------------------------*
- ' NOTE: *
- '******************************************************************************
- ' *
- ' SUB PROGRAM NAME (PARAMETERS) STATIC/RECURSIVE *
- '-----------------------------------------------------------------------------*
- ' *
- SUB TAGDIR(SEARCH$,SHOWITEMS%,FORE%,BACK%,HFORE%,HBACK%,QUADRANT$,SHADOW%,NUMTAGGED%,TAG$(1),RETURN.CODE%) STATIC
-
- DEFINT A-Z 'make all short intergers by default
-
- RETURN.CODE%=0
- DIR.RETURN.CODE%=0
-
- TAG.MIN%=LBOUND(TAG$) 'adjust for callers OPTION BASE
-
- TAG.MAX=(UBOUND(TAG$)-TAG.MIN%)+1 'user reserved spaces for this many tagged filenames
-
- '
- 'am not sure that FILES$ will be placed in FAR HEAP, since it is var. string array
- '
-
- REM $DYNAMIC 'allocate arrays off far heap
- DIM FILES$(TAG.MIN% TO TAG.MIN%+1) 'make each one ONLY 1 element to start with
- DIM TAGITEMS%(TAG.MIN% TO TAG.MIN%+1) 'make each one ONLY 1 element to start with
- REM $STATIC 'default arrays back to Basics Data segment
-
- TAGDIR.START:
- ATTR=NUMFILES%
-
- COUNT=&HFF00 OR ATTR 'Get number of filenames that match SEARCH$
- I=INT(VARPTR(FILES$(TAG.MIN%)))
-
- CALL DIR(SEARCH$,I,COUNT,DIR.RETURN.CODE)
-
- IF (COUNT=-1) OR (COUNT = 0) THEN 'were any matching filenames found?
- NUMFILES%=0 'NO
- RETURN.CODE%=-2
- SELECTFILE$="No Files Found"
- GOTO TAGDIR.DONE
- END IF
-
- NUMFILES%=COUNT
-
- IF COUNT > 0 THEN 're-allocate filename array big
- REDIM FILES$(TAG.MIN% TO TAG.MIN%+COUNT) 'enough to hold all found
- REDIM TAGITEMS%(TAG.MIN% TO TAG.MIN%+COUNT) 'make them same BASE as callers array
- END IF
-
- HEADER$=SEARCH$ 'this was the search filename spec
-
- TEMPHDR$=SPACE$(16)
- PAD=8-(LEN(HEADER$)/2)-.5
- MID$(TEMPHDR$,PAD+1,LEN(HEADER$))=HEADER$
- HEADER$=TEMPHDR$
-
- '
- FOR I=TAG.MIN% TO TAG.MIN%+COUNT 'make each filename array element
- FILES$(I)=SPACE$(22) 'big enough to hold a filename
- NEXT
-
- COUNT=ATTR
- I=INT(VARPTR(FILES$(TAG.MIN%))) 'point address of first element of the array
-
- CALL DIR(SEARCH$,I,COUNT,DIR.RETURN.CODE%) 'load the filenames into the array
-
- FOR J=TAG.MIN% TO TAG.MIN%+COUNT 'allow for room in front of filename
- FILES$(J)=" "+FILES$(J) 'to 'tag' it
- NEXT
-
- MAXITEMS%=COUNT 'we have this many filenames to display
- SHOWFILES=SHOWITEMS% 'but only display this many at a time
-
- IF (NUMTAGGED%<1) OR (NUMTAGGED%>TAG.MAX) THEN
- NUMTAGGED%=TAG.MAX 'allow only this many to be tagged (all we have room for)
- END IF
-
- CALL TAGLIST(HEADER$,SHOWITEMS%,MAXITEMS%,NUMTAGGED%,FILES$(),TAGITEMS%(),FORE%,BACK%,HFORE%,HBACK%,QUADRANT$,SHADOW%,RETURN.CODE%)
-
- IF NUMTAGGED%<1 THEN 'did user 'tag' any filenames
- GOTO TAGDIR.DONE 'NO
- ENDIF
-
- IF RETURN.CODE<0 THEN 'did user 'tag' any filenames
- GOTO TAGDIR.DONE 'NO
- ENDIF
-
- '
- ' Return the filenames tagged.
- '
- I=TAG.MIN% 'base subscript for the array
-
- FOR J=TAG.MIN% TO TAG.MIN%+COUNT 'look at all the filenames
- IF TAGITEMS%(J)=1 THEN 'was this one tagged?
- TAG$(I)=MID$(FILES$(J),3)
- I=I+1 'keep count of the number we found tagged
- END IF
-
- NEXT
-
- TAGDIR.DONE:
- ERASE FILES$ 'free memory allocated to arrays
- ERASE TAGITEMS%
- HEADER$=""
- TEMPHDR$=""
- END SUB