10 DIM PERSON$(200,10):POKE 16,64:POKE 53774,64 20 DEFINT A-Z 30 'THIS IS A PROGRAM DESIGNED TO 40 'CREATE A DATA BASE AND SORT,LIST 50 'AND CHANGE IT 60 GRAPHICS 17 70 FOR I=1 TO 5:PRINT #6," ":NEXT 80 PRINT #6,"WELCOME TO MULTISORT" 90 PRINT #6," ":PRINT #6," by":PRINT #6," " 100 PRINT #6," michael l. hooper" 110 FOR I=1 TO 5000:NEXT 120 GRAPHICS 0:POKE 752,1 130 ON ERROR 2730 140 PRINT "WHAT TIME IS IT?":PRINT 150 PRINT "PLEASE ENTER IN THIS FORMAT HOUR:MINUTES:SECONDS EXAMPLE = 12:38:59 160 INPUT T$:IF T$<>"" THEN TIME$=T$ ELSE TIME$="00:00:00" 170 GRAPHICS 17:POKE 16,64:POKE 53774,64 180 PRINT #6,"please choose one:" :PRINT #6," " 190 PRINT #6,"i-INITIATE NEW FILE 200 PRINT #6," " 210 PRINT #6,"r-READ FROM DISK 220 PRINT #6," " 230 PRINT #6,"t-TERMINATE PROGRAM" 240 PRINT #6," " 250 PRINT #6,"s-SORT THE LIST" 260 PRINT #6," " 270 PRINT #6,"l-LIST ALL ITEMS" 280 PRINT #6," " 290 PRINT #6,"f-FIND AN ITEM" 300 PRINT #6," " 310 PRINT #6,"a-ADD AN ITEM" 320 PRINT #6," " 330 PRINT #6,"e-ERASE AN ITEM" 340 PRINT #6," " 350 PRINT #6,"c-CHANGE AN ITEM" 360 PRINT #6," ":PRINT #6,"d-DISK DIRECTORY 370 PRINT #6,AT(10,23);TIME$ 380 IF TIME$="24:00:00" THEN TIME$="00:00:00" 390 CHOICE$=INKEY$:IF CHOICE$="" THEN 370 400 GRAPHICS 0:POKE 752,1 410 IF CHOICE$="I" THEN 520 420 IF CHOICE$="R" THEN 730 430 IF CHOICE$="F" THEN 930 440 IF CHOICE$="S" THEN 1180 450 IF CHOICE$="L" THEN 1410 460 IF CHOICE$="T" THEN 1590 470 IF CHOICE$="C" THEN 1770 480 IF CHOICE$="E" THEN 2030 490 IF CHOICE$="A" THEN 2290 500 IF CHOICE$="D" THEN 2430 510 GOTO 170 520 SETCOLOR 6,13,10:SETCOLOR 5,0,0:SETCOLOR 8,13,10: ! INITIATE A NEW FILE 530 INPUT "HOW MANY FIELDS? ";N$:NUMBEROFIELDS=VAL(N$):IF NUMBEROFIELDS>10 OR NUMBEROFIELDS<1 THEN 530 540 FOR I=1 TO NUMBEROFIELDS 550 PRINT "NAME OF FIELD #";I; 560 INPUT FIELDNAME$(I) 570 IF FIELDNAME$(I)="" THEN 550 580 NEXT 590 I=1 600 PRINT :PRINT "INPUT 'DONE' TO QUIT.":PRINT 610 FOR J=1 TO NUMBEROFIELDS 620 PRINT FIELDNAME$(J);" OF ITEM #";I; 630 INPUT PERSON$(I,J) 640 IF PERSON$(I,J)="DONE" THEN 680 650 NEXT 660 I=I+1 670 GOTO 600 680 NUMBEROFPERSONNEL=I-1 690 PRINT "YOU HAVE INPUT ";NUMBEROFIELDS;" FIELDS ON ";NUMBEROFPERSONNEL;" ITEMS" 700 PRINT:PRINT "PUSH ANY KEY TO RETURN TO MENU" 710 IF INKEY$="" THEN 710 720 GOTO 170 730 SETCOLOR 6,3,10:SETCOLOR 5,0,0:SETCOLOR 8,3,10:ON ERROR GOTO 2740:! READ FROM DISK 740 PRINT "WHAT IS THE NAME OF THE FILE";:INPUT CHOICE$:CHOICE$="D:"+CHOICE$ 750 OPEN #4,CHOICE$ INPUT 760 INPUT #4,NUMBEROFIELDS 770 FOR I=1 TO NUMBEROFIELDS 780 INPUT #4,FIELDNAME$(I) 790 NEXT 800 I=1 810 FOR J=1 TO NUMBEROFIELDS 820 INPUT #4,PERSON$(I,J) 830 IF PERSON$(I,J)="DONE" THEN 870 840 NEXT 850 I=I+1 860 GOTO 810 870 NUMBEROFPERSONNEL=I-1 880 PRINT :PRINT "YOU HAVE";NUMBEROFPERSONNEL;"ITEMS IN MEMORY,":PRINT "WITH";NUMBEROFIELDS;"FIELDS OF INFO EACH" 890 PRINT :PRINT "PRESS ANY KEY TO RETURN TO MENU" 900 IF INKEY$="" THEN 900 910 CLOSE #4 920 GOTO 170 930 SETCOLOR 6,4,8:SETCOLOR 5,0,0:SETCOLOR 8,4,8:! FIND AN ITEM 940 FOR I=1 TO NUMBEROFIELDS 950 PRINT I;"- ";FIELDNAME$(I) 960 NEXT 970 PRINT:INPUT "SEARCH WHICH FIELD? ";F$:FIELDKEY=VAL(F$):IF FIELDKEY<1 OR FIELDKEY>NUMBEROFIELDS THEN 970 980 INPUT "WHAT IS THE SEARCH KEY? ";KEY$ 990 PRINT "OUTPUT TO SCREEN OR PRINTER (S/P)?"; 1000 A$=INKEY$ 1010 IF A$="S" THEN OPEN #7,"E:" OUTPUT:A=1:SETCOLOR 6,4,08:SETCOLOR 5,0,0:SETCOLOR 8,4,08:POKE 752,1:GOTO 1040 1020 IF A$="P" THEN OPEN #7,"P:" OUTPUT:A=0:GOTO 1040 1030 GOTO 1000 1040 FOR I=1 TO NUMBEROFPERSONNEL 1050 IF LEFT$(PERSON$(I,FIELDKEY),LEN(KEY$))=KEY$ THEN 1100 1060 NEXT 1070 PRINT :PRINT "WE HAVE GONE THROUGH THE ENTIRE LIST":PRINT:PRINT 1080 PRINT "DO YOU WANT TO GO THROUGH AGAIN?(Y/N) ";:CLOSE #7 1090 A$=INKEY$:IF A$="Y" THEN 940 ELSE IF A$="N" THEN 170 ELSE 1090 1100 FOR J=1 TO NUMBEROFIELDS 1110 PRINT #7,FIELDNAME$(J);"-";PERSON$(I,J) 1120 NEXT 1130 PRINT #7,STRING$(38,"="):IF A=0 THEN 1060 1140 IF A=1 THEN PRINT "PUSH ANY KEY TO CONTINUE" 1150 PRINT STRING$(38,"=") 1160 IF INKEY$="" THEN 1160 1170 GOTO 1060 1180 SETCOLOR 6,7,8:SETCOLOR 5,0,0:SETCOLOR 8,7,8:! SORT THE LIST 1190 J=NUMBEROFPERSONNEL:PRINT 1200 FOR I=1 TO NUMBEROFIELDS 1210 PRINT I,FIELDNAME$(I) 1220 NEXT 1230 PRINT 1240 PRINT "SORT BY WHICH FIELD"; 1250 INPUT C$:CHOICE=VAL(C$):IF CHOICE<1 OR CHOICE>NUMBEROFIELDS THEN 1250 1260 PRINT :PRINT "SORTING" 1270 FOR I=1 TO NUMBEROFPERSONNEL-1 1280 IF PERSON$(I,CHOICE)>PERSON$(I+1,CHOICE) THEN GOSUB 1350 1290 NEXT I 1300 J=J-1:IF J>0 THEN 1260 1310 PRINT :PRINT "ALL DONE" 1320 PRINT :PRINT "PRESS ANY KEY TO RETURN TO MENU" 1330 IF INKEY$="" THEN 1330 1340 GOTO 170 1350 FOR K=1 TO NUMBEROFIELDS 1360 QAVE$=PERSON$(I,K) 1370 PERSON$(I,K)=PERSON$(I+1,K) 1380 PERSON$(I+1,K)=QAVE$ 1390 NEXT K 1400 RETURN 1410 SETCOLOR 6,11,6:SETCOLOR 5,0,0:SETCOLOR 6,11,6:! LIST ALL ITEMS 1420 PRINT "OUTPUT TO SCREEN OR PRINTER (S/P)?"; 1430 A$=INKEY$ 1440 IF A$="S" THEN OPEN #7,"E:" OUTPUT:A=1:SETCOLOR 6,11,6:SETCOLOR 5,0,0:SETCOLOR 8,11,6:GOTO 1470 1450 IF A$="P" THEN OPEN #7,"P:" OUTPUT:A=0:GOTO 1470 1460 GOTO 1430 1470 FOR I=1 TO NUMBEROFPERSONNEL 1480 FOR J=1 TO NUMBEROFIELDS:POKE 752,1 1490 PRINT #7, FIELDNAME$(J);"-";PERSON$(I,J) 1500 NEXT J 1510 PRINT #7, STRING$(38,"="):IF A=0 THEN 1550 1520 PRINT "PRESS ANY KEY TO CONTINUE LISTING" 1530 IF INKEY$="" THEN 1530 1540 PRINT #7, STRING$(38,"=") 1550 NEXT I 1560 CLOSE #7:PRINT :PRINT "YOU HAVE GONE THROUGH THE WHOLE LIST" 1570 PRINT "DO YOU WANT TO DO IT AGAIN (Y/N)? "; 1580 A$=INKEY$:IF A$="Y" THEN 1410 ELSE IF A$="N" THEN 170 ELSE 1580 1590 SETCOLOR 8,11,6:SETCOLOR 6,11,6:SETCOLOR 5,0,0:! WRITE TO DISK 1600 PRINT "WHAT DO YOU WANT TO NAME THE FILE?":INPUT CHOICE$ 1610 CHOICE$="D:"+CHOICE$ 1620 OPEN #4,CHOICE$ OUTPUT 1630 PRINT #4,NUMBEROFIELDS 1640 FOR I=1 TO NUMBEROFIELDS 1650 PRINT #4,FIELDNAME$(I) 1660 NEXT I 1670 FOR I=1 TO NUMBEROFPERSONNEL+1 1680 FOR J=1 TO NUMBEROFIELDS 1690 PRINT #4,PERSON$(I,J) 1700 NEXT J 1710 NEXT I 1720 PRINT :PRINT "ALL DONE":CLOSE #4 1730 PRINT 1740 PRINT "DO YOU WANT TO GO BACK TO THE MENU?"; 1750 A$=INKEY$:IF A$="Y" THEN 170 ELSE IF A$="N" THEN 1760 ELSE GOTO 1750 1760 GRAPHICS 0:PRINT "OK-Goodbye....":NEW:END 1770 SETCOLOR 6,9,8:SETCOLOR 5,0,0:SETCOLOR 8,9,8:! CHANGE AN ITEM 1780 FOR I=1 TO NUMBEROFIELDS 1790 PRINT I,FIELDNAME$(I) 1800 NEXT 1810 PRINT:PRINT "WHICH FIELD TO SEARCH";:INPUT CHOICE:IF CHOICE<0 OR CHOICE>NUMBEROFIELDS THEN 1810 1820 INPUT "WHAT IS THE SEARCH KEY? ";KEY$ 1830 FOR I=1 TO NUMBEROFPERSONNEL 1840 IF LEFT$(PERSON$(I,CHOICE),LEN(KEY$))=KEY$ THEN 1870 1850 NEXT 1860 PRINT "WE HAVE GONE THROUGH THE ENTIRE LIST":PRINT:GOTO 2000 1870 PRINT STRING$(38,"=") 1880 FOR K=1 TO NUMBEROFIELDS 1890 PRINT FIELDNAME$(K);"-";PERSON$(I,K) 1900 NEXT 1910 PRINT :PRINT "IS THIS THE CORRECT ITEM? " 1920 A$=INKEY$:IF A$="N" THEN 1850 ELSE IF A$<>"Y" THEN 1920 1930 PRINT :FOR K=1 TO NUMBEROFIELDS 1940 PRINT K,FIELDNAME$(K) 1950 NEXT 1960 PRINT :PRINT "CHANGE WHICH FIELD";:INPUT C$:CHOICE=VAL(C$):IF CHOICE<0 OR CHOICE>NUMBEROFIELDS THEN 1960 1970 INPUT "WHAT IS IT TO BE CHANGED TO? ";CHOICE$ 1980 PERSON$(I,CHOICE)=CHOICE$ 1990 PRINT :PRINT "OK-IT IS NOW CHANGED" 2000 PRINT :PRINT "PRESS ANY KEY TO RETURN TO MENU" 2010 IF INKEY$="" THEN 2010 2020 GOTO 170 2030 SETCOLOR 5,8,10:SETCOLOR 6,0,0:! ERASE AN ITEM 2040 FOR I=1 TO NUMBEROFIELDS 2050 PRINT I,FIELDNAME$(I) 2060 NEXT 2070 PRINT 2080 PRINT "CHOOSE FROM WHICH FIELD";:INPUT C$:CHOICE=VAL(C$):IF CHOICE<0 OR CHOICE>NUMBEROFIELDS THEN 2080 2090 PRINT:PRINT "WHAT IS THE SEARCH KEY";:INPUT CHOICE$:PRINT 2100 FOR I=1 TO NUMBEROFPERSONNEL 2110 IF LEFT$(PERSON$(I,CHOICE),LEN(CHOICE$))=CHOICE$ THEN GOTO 2140 2120 NEXT 2130 PRINT:PRINT "WE HAVE GONE THROUGH THE ENTIRE LIST":GOTO 2260 2140 PRINT :FOR J=1 TO NUMBEROFIELDS 2150 PRINT FIELDNAME$(J);"-";PERSON$(I,J) 2160 NEXT 2170 PRINT STRING$(38,"=") 2180 PRINT :PRINT "DELETE THIS ITEM (Y/N)?" 2190 A$=INKEY$:IF A$="N" THEN 2120 ELSE IF A$<>"Y" THEN 2190 2200 FOR K=I TO NUMBEROFPERSONNEL 2210 FOR J=1 TO NUMBEROFIELDS 2220 PERSON$(I,J)=PERSON$(I+1,J) 2230 NEXT 2240 NEXT 2250 PRINT "OK-ITEM DELETED":NUMBEROFPERSONNEL=NUMBEROFPERSONNEL-1 2260 PRINT :PRINT "PRESS ANY KEY TO RETURN TO MENU" 2270 IF INKEY$="" THEN 2270 2280 GRAPHICS 17:GOTO 180 2290 SETCOLOR 6,8,12:SETCOLOR 5,0,0:SETCOLOR 8,8,12: ! ADD AN ITEM 2300 J=NUMBEROFPERSONNEL+1 2310 FOR I=1 TO NUMBEROFIELDS 2320 PRINT "WHAT IS THE ITEM'S ";FIELDNAME$(I);:INPUT CHOICE$ 2330 PERSON$(J,I)=CHOICE$ 2340 IF CHOICE$="DONE" THEN 2370 2350 NEXT 2360 J=J+1:PRINT :GOTO 2310 2370 NUMBEROFPERSONNEL=J-1 2380 PRINT :PRINT "OK-NEW ITEM(S) ADDED" 2390 PRINT :PRINT "PRESS ANY KEY TO RETURN TO MENU" 2400 IF INKEY$="" THEN 2400 2410 GRAPHICS 17:GOTO 180 2420 END 2430 ON ERROR 2680:SETCOLOR 8,3,12:! DISK DIRECTORY 2440 PRINT "DISK DIRECTORY":PRINT :OPTION RESERVE(200) 2450 OPEN #1,"D:CIOUSR" INPUT 2460 ADDR=VARPTR(RESERVE) 2470 FOR I=0 TO 159 2480 GET #1,D:POKE ADDR+I,D 2490 NEXT I 2500 CLOSE #1 2510 PUTIOCB=ADDR 2520 CALLCIO=ADDR+61 2530 GETIOCB=ADDR+81 2540 DIM IOCB%(10) 2550 IOCB%(0)=1 2560 IOCB%(1)=3 2570 IOCB%(5)=6 2580 FSPEC$="D:*.*" 2590 Z=VARPTR(FSPEC$) 2600 Y=VARPTR(IOCB%(3)) 2610 POKE Y,PEEK(Z+2) 2620 POKE Y+1,PEEK(Z+1) 2630 Z=USR(PUTIOCB,VARPTR(IOCB%(0))) 2640 Z=USR(CALLCIO,VARPTR(IOCB%(0))) 2650 INPUT #1,S$ 2660 PRINT S$ 2670 GOTO 2650 2680 CLOSE #1:RESUME 2690 2690 PRINT :PRINT "PRESS ANY KEY TO RETURN TO MENU" 2700 IF INKEY$="" THEN 2700 2710 GOTO 170 2720 !ERROR MESSAGES 2730 PRINT "I AM AFRAID YOU HAVE MADE AN ERROR. LETS START IT OVER AGAIN.":FOR I=1 TO 2000:NEXT I:RESUME 130 2740 PRINT "I AM AFRAID YOU HAVE MADE AN ERROR. LETS START IT OVER AGAIN.":FOR I=1 TO 1000:NEXT I:RESUME 730