REM ACSL SENIOR PROGRAM 2

REM BY CHRISTIAN CHIMENKO

 

DIM search$(5),data$(10),checks(999)

 

DO

 

   INPUT PROMPT "Data: ":data$(1),data$(2),data$(3),data$(4),data$(5),data$(6),data$(7),data$(8),data$(9),data$(10)

 

   FOR i=1 to 5

       PRINT "Search #";str$(i);

       INPUT prompt ": ":search$(i)

   NEXT i

 

   PRINT

 

   FOR i=1 to 5

 

       LET pflag=0

       PRINT "Output #";str$(i);": ";

 

       FOR j=1 to 10

 

           MAT redim checks(999)

           FOR k=1 to len(search$(i))

               LET checks(k)=0

           NEXT k

           LET misflag=0

           LET a=0

           LET ba=0

           LET start=0

           LET last=0

 

           CALL check(search$(i),data$(j))

 

           IF misflag=0 then

              PRINT data$(j);" ";

              LET PFLAG=1

           END IF

 

       NEXT j

 

       IF PFLAG=0 THEN PRINT "No Match";

       PRINT

 

   NEXT i

 

   PRINT

   PRINT "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"

   PRINT

 

LOOP until search$(4)="QUIT"

 

SUB check(search$,data$)

    MAT redim checks(len(search$))

 

    FOR k=1 to len(search$)

 

        IF search$[k:k]="*" then

           CALL acheck(search$,data$)

           EXIT SUB

 

        ELSEIF search$[k:k]="[" then

           CALL ncheck(search$,data$)

           EXIT SUB

 

        ELSEIF search$[k:k]="?" then

           LET checks(k)=1

 

        END IF

 

    NEXT k

 

    CALL finalcheck(search$,data$)

 

END SUB

 

SUB ncheck(search$,data$)

 

    LET start=val(search$[k+1:k+1])

    LET last=val(search$[k+3:k+3])

 

    CALL check(search$[1:k-1]&search$[k+4:len(search$)],data$)

 

END SUB

 

SUB acheck(search$,data$)

 

    IF search$[1:1]="*" then

       LET a=1

       CALL check(search$[2:len(search$)],data$)

 

    ELSE

 

       IF a=1 then

          LET ba=1

       ELSE

          LET a=2

       END IF

 

       CALL check(search$[1:len(search$)-1],data$)

 

    END IF

 

END SUB

 

SUB finalcheck(search$,data$)

    IF ba=1 then

       CALL baend(search$,data$)

 

    ELSEIF a=1 then

       CALL end(search$,data$[len(data$)-len(search$)+1:len(data$)])

 

    ELSEIF a=2 then

       CALL end(search$,data$[1:len(search$)])

 

    ELSE

       IF len(data$)=len(search$) then CALL end(search$,data$)

 

    END IF

 

 

    FOR l=1 to len(search$)

        IF checks(l)=0 then LET misflag=1

    NEXT l

 

END SUB

 

SUB baend(search$,data$)

 

    FOR o=1 to len(data$)-len(search$)+1

 

        FOR n=1 to len(search$)

            LET checks(n)=0

            IF search$[n:n]="?" then LET checks(n)=1

        NEXT n

 

        LET rflag=0

 

        CALL end(search$,data$[o:o+len(search$)-1])

 

        FOR n=1 to len(search$)

            IF checks(n)=0 then LET rflag=1

        NEXT n

 

        IF rflag=0 then EXIT SUB

 

    NEXT o

 

END SUB

 

SUB end(search$,data$)

 

    FOR l=1 to len(search$)

 

        IF search$[l:l]=data$[l:l] AND search$<>"?" AND search$<>"]" then

           LET checks(L)=1

 

        ELSEIF search$[l:l]="]" then

           FOR m=start to last

               IF data$[l:l]=str$(m) then LET checks(l)=1

           NEXT m

 

        END IF

 

    NEXT l

 

END SUB

 

END