home *** CD-ROM | disk | FTP | other *** search
- PRINT "QUERY PROGRAM OF 3-23-78"
- FIELDS = 20 REM POSSIBLE NUMBER OF FIELDS.
- DIM DATA$(FIELDS), FIELD$(FIELDS), TYPE(FIELDS), FIELD.WIDTH(FIELDS)
- DIM SKIP(FIELDS),MIN(FIELDS),MAX(FIELDS)
- BUFSIZ = 200 REM MAIN STRING BUFFER SIZE.
- DIM BUFFER$(BUFSIZ), REC(BUFSIZ)
- REM CONSTANTS
- ZERO =0: ONE=1: TWO=2
- DATA$(ZERO) = "1"
- 3001 INPUT "DO YOU NEED INSTRUCTIONS";ANS$
- IF ANS$="NO" THEN 3000
- PRINT
- PRINT "THE PURPOSE OF THIS PROGRAM IS TO PROVIDE A WAY TO"
- PRINT "EXAMINE AND CHANGE THE DATABASE."
- PRINT "THE COMMANDS PROVIDED FOR THIS ARE:"
- PRINT
- PRINT "LIST - LISTS THE ITEMS REQUESTED. ALL ITEMS ARE"
- PRINT " LISTED THAT ARE INCLUDED IN THE SET NAMED."
- PRINT
- PRINT "SUM - SUMS THE FIELDS OF THE ITEMS REQUESTED."
- PRINT
- PRINT "BYE - EXITS BACK TO CP/M OPERATING SYSTEM."
- PRINT
- PRINT "CHANGE - CHANGES THE ITEMS REQUESTED FROM THE KEYBOARD."
- PRINT
- GOTO 3000
- PRINT "ADD - ADD NEW ITEMS TO A FILE."
- PRINT " EXAMPLE: ADD LAB SUPPLIES"
- PRINT
- PRINT "RUN - RUN A PREVIOUSLY SET UP SEQUENCE"
- PRINT " EXAMPLE: RUN PACKAGE"
- PRINT
- 3000 PRINT
- PRINT
- INPUT "COMMAND";CMD$
- CMD$ = LEFT$(CMD$,3)
- IF CMD$ = "LIS" THEN 3100
- IF CMD$ = "SUM" THEN 3200
- IF CMD$ = "CHA" THEN 3300
- IF CMD$ = "ADD" THEN 3400
- IF CMD$ = "RUN" THEN 3500
- IF CMD$ = "BYE" THEN STOP
- GOTO 3001
- 3100 REM LIST THE ITEMS REQUESTED
- GOSUB 4000 REM FIND FILE NAME(S).
- PHEAD = ONE
- GOSUB 4500 REM READ AND PRINT HEADINGS.
- 3110 GOSUB 4100 REM READ FIELD SPECIFICATIONS.
- PRINT
- 3120 GOSUB 4300 REM READ A RECORD INTO DATA ARRAY.
- IF ENDFILE = ONE THEN 3130 REM QUIT IF END OF FILE.
- GOSUB 4400 REM PRINT DATA ARRAY IN FORMAT.
- IF FIELD.WIDTH(ONE) = ZERO THEN PRINT
- RECNO = RECNO + ONE
- GOTO 3120 REM READ ANOTHER LINE.
- 3130 CLOSE ONE
- GOTO 3000
- 3200 REM SUM THE FIELDS OF THE ITEMS REQUESTED
- TOTAL = ZERO
- GOSUB 4000 REM FIND FILE NAME.
- PHEAD = ZERO
- GOSUB 4500 REM READ HEADINGS, NO PRINT.
- GOSUB 4100 REM READ FIELD SPECIFICATIONS.
- PRINT "THE FIELDS ARE:"
- FOR I = ONE TO NO.OF.FIELDS
- PRINT FIELD$(I)
- NEXT I
- 3210 INPUT "SUM ON WHAT FIELD";ANS$
- FOR I = ONE TO NO.OF.FIELDS
- IF ANS$ = FIELD$(I) THEN AFIELD = I: GOTO 3220
- NEXT I
- PRINT "NO SUCH FIELD"
- GOTO 3210
- 3220 INPUT "MULTIPLY BY WHAT FIELD (NAME OF FIELD OR NONE)";ANS$
- IF ANS$ = "NONE" THEN MFIELD = 0: GOTO 3230
- FOR I = ONE TO NO.OF.FIELDS
- IF ANS$ = FIELD$(I) THEN MFIELD = I: GOTO 3230
- NEXT I
- PRINT "NO SUCH FIELD"
- GOTO 3220
- 3230 GOSUB 4300 REM READ DATA FROM FILE.
- IF ENDFILE = ONE THEN 3240 REM QUIT IF END OF FILE.
- AF = VAL(DATA$(AFIELD))
- MF = VAL(DATA$(MFIELD))
- TOTAL = TOTAL + MF*AF
- RECNO = RECNO + ONE REM INCREMENT RECORD NUMBER.
- GOTO 3230
- 3240 CLOSE ONE
- PRINT "THE SUM IS ";TOTAL
- GOTO 3000
- 3300 REM CHANGE THE ITEMS REQUESTED
- GOSUB 4000 REM FIND FILE.
- PHEAD = ZERO
- GOSUB 4500 REM READ HEADINGS.
- GOSUB 4100 REM READ FIELD SPECS.
- GOSUB 4600 REM READ INDEX.
- IF NIND = ZERO THEN 3350 REM QUIT IF NO INDEX.
- 3310 PRINT "WHAT ";INDFLD$;" DO YOU WANT";
- INPUT ANS$
- FOR I = ONE TO INDSIZ
- IF ANS$ = BUFFER$(I) THEN 3320
- NEXT I
- PRINT ANS$;" NOT FOUND."
- PRINT "INDEX TABLE:"
- FOR I = ONE TO INDSIZ REM PRINT INDEX TABLE.
- PRINT BUFFER$(I)
- NEXT I
- GOTO 3310
- 3320 RECNO = REC(I) REM FOUND RECORD NUMBER.
- GOSUB 4300 REM READ DATA RECORD AND SEPERATE.
- PRINT HEADINGS$
- PRINT
- GOSUB 4400 REM PRINT DATA ARRAY IN FORMAT.
- 3330 INPUT "CHANGE WHICH FIELD ";ANS$
- IF ANS$ = INDFLD$ THEN \
- PRINT "YOU CAN'T CHANGE INDEX FIELD.": GOTO 3330
- FOR I = ONE TO NO.OF.FIELDS REM LOOK FOR FIELD TO CHANGE.
- IF ANS$ = FIELD$(I) THEN 3340
- NEXT I
- PRINT ANS$;" WAS NOT A VALID FIELD."
- GOTO 3330
- 3340 PRINT "NEW ";FIELD$(I);
- INPUT DATA$(I)
- GOSUB 4200 REM PRINT DATA OUT TO DISK.
- INPUT "DO YOU WANT TO CHANGE MORE ITEMS";ANS$
- IF ANS$ = "YES" THEN 3310
- 3350 CLOSE ONE REM CLOSE DATA FILE.
- GOTO 3000
- 3400 REM ADD ITEMS TO THE REQUESTED FILE
- 3500 REM RUN THE SEQUENCE REQUESTED
- PRINT "COMMAND NOT ACTIVATED"
- GOTO 3000
- 4000 REM FIND FILE NAME(S) REQUESTED BY COMMAND COMMAND$.
- INPUT "NAME OF FILE";FILE.NAME$
- FILE FILE.NAME$ REM OPEN THE FILE.
- RECNO = ONE REM READ RECORD #1.
- READ #ONE;RECLEN,NO.OF.FIELDS,NHEAD,NIND,FILETYPE,CODE,SPARE
- RECNO = RECNO + ONE REM INCREMENT RECORD NUMBER.
- IF RECLEN <> ZERO THEN \
- CLOSE ONE :\
- FILE FILE.NAME$(RECLEN) REM MAKE RANDOM INSTEAD OF SEQ.
- PRINT
- RETURN
- 4100 REM READ THE FIELD SPECIFICATIONS.
- FOR I = ONE TO NO.OF.FIELDS
- IF RECLEN = ZERO THEN \
- READ #ONE;FIELD$(I),TYPE(I),FIELD.WIDTH(I),SKIP(I), \
- MIN(I),MAX(I),SPARE
- IF RECLEN <> ZERO THEN \
- READ #ONE,RECNO;FIELD$(I),TYPE(I),FIELD.WIDTH(I),SKIP(I), \
- MIN(I),MAX(I),SPARE
- RECNO = RECNO + ONE
- NEXT I
- RETURN
- 4200 REM ASSEMBLE DATA INTO A RECORD AND WRITE TO DISK.
- RECORD$ = ""
- FOR I = ONE TO NO.OF.FIELDS
- RECORD$ = RECORD$ + DATA$(I) + "!"
- NEXT I
- PRINT #ONE,RECNO;RECORD$ REM WRITE TO DISK.
- RETURN
- 4300 REM READ A RECORD OF DATA AND SEPERATE INTO FIELDS.
- IF RECLEN = ZERO THEN \
- READ #ONE;RECORD$
- IF RECLEN <> ZERO THEN \
- READ #ONE,RECNO;RECORD$
- IF END #ONE THEN 4340
- START = ONE
- FOR I = ONE TO NO.OF.FIELDS
- LENGTH = ZERO
- FOR P = START TO LEN(RECORD$)
- IF MID$(RECORD$,P,ONE) = "!" THEN 4320
- LENGTH = LENGTH + ONE
- NEXT P
- 4320 DATA$(I) = MID$(RECORD$,START,LENGTH)
- START = START + LENGTH + ONE
- NEXT I
- ENDFILE = ZERO
- 4330 RETURN
- 4340 ENDFILE = ONE
- RETURN
- 4400 REM PRINT DATA IN CORRECT FORMAT.
- POSITION = ONE REM STARTING TAB POSITION.
- FOR I = ONE TO NO.OF.FIELDS
- IF FIELD.WIDTH(I) <> ZERO THEN PRINT TAB(POSITION);
- IF SKIP(I) = ONE THEN PRINT
- IF DATA$(I) <> "" THEN PRINT DATA$(I);" ";
- POSITION = POSITION + FIELD.WIDTH(I) + ONE
- NEXT I
- PRINT
- RETURN
- 4500 REM READ HEADINGS, ALSO PRINT IF PHEAD = 1
- IF NHEAD = ZERO THEN 4510
- FOR I = ONE TO NHEAD
- IF RECLEN = ZERO THEN READ #1;HEADINGS$
- IF RECLEN <> ZERO THEN READ #ONE,RECNO;HEADINGS$
- IF PHEAD = 1 THEN PRINT HEADINGS$
- RECNO = RECNO + ONE
- NEXT I
- 4510 RETURN
- 4600 REM READ INDEX INTO MEMORY IF THERE IS ONE.
- IF NIND = ZERO THEN PRINT "THERE'S NO INDEX.": RETURN
- INDEX.FILE$ = FILE.NAME$ + ".IND"
- FILE INDEX.FILE$ REM OPEN INDEX FILE.
- READ #TWO;INDFLD$ REM READ INDEX FIELD NAME.
- FOR I = ONE TO BUFSIZ
- READ #TWO;BUFFER$(I),REC(I)
- IF END #TWO THEN 4610
- NEXT I
- 4610 INDSIZ = I REM INDEX SIZE.
- CLOSE TWO
- RETURN
- END
-