home *** CD-ROM | disk | FTP | other *** search
Wrap
10 ' This program was generated by BasiCoder(tm) Copyright 1986 F.Volking 20 ' The below program is copyright property of F.Volking, however 30 ' the author does hereby release all rights in the below program. 40 BCOLOR%=0 :REM change to BCOLOR%=1 if you want COLOR on the screen 50 BCLR1%=1 :REM command line border color /default= 1-blue 60 BCLR2%=7 :REM command line text color /default= 7-white 70 BCLR3%=4 :REM command line key color /default= 4-red 80 BCLR4%=2 :REM command line message color /default= 2-green 90 BCLR6%=8 :REM screen text color /default= 8-gray 95 BCLR7%=15 :REM screen data color /default=15-high white 100 KEY OFF 110 DIM ENTEST$(7),DATREC%(2),BCIREC%(2) 111 rem *********************************************************************** 140 DIM BCIDATE%(2),BCIMORE%(2),BCILESS%(2),BCIUP%(2),BCIDN%(2),BCIKEY$(2) 150 GOSUB 41000 :REM test string 160 GOSUB 20000 :REM show main 170 BCMSG$=" Working" : GOSUB 22000 :REM show message 180 rem *********************************************************************** 190 GOSUB 50000 :REM open isam file 200 BCI%=0 210 GOSUB 53000 :REM open data file 1000 :REM command line processing 1010 BCMSG$=" Command?" : GOSUB 22000 :REM show message 1020 ENSTAT$="25020160" : ENDFLT$="" : GOSUB 40000 : ENFUNC%=ENWAY% 1030 :REM jump in from function process 1040 ON ENFUNC% GOTO 1000,1000,1000,1000,1000,1000,65000,4000,4100,2000,5000,3000,7000,6000 1050 GOTO 1020 2000 :REM enter a new record 2010 BCMSG$=" F1: Add a new record" : GOSUB 22000 :REM show message 2020 BCFUNCMSG$=BCMSG$ 2030 GOSUB 23000 :REM blank fields 2040 BCA%=0 : GOSUB 24000 :REM null/0 all 2050 GOTO 30000 2100 :REM returning from input routines 2110 BCMSG$=" SAVE? Y or N" : GOSUB 22000 :REM show message 2120 ENSTAT$="25020170" : ENDFLT$="" : GOSUB 40000 2130 IF ENRETURN$="Y" OR ENRETURN$="y" THEN GOTO 2160 2140 IF ENRETURN$="N" OR ENRETURN$="n" THEN GOTO 1000 2150 SOUND 50,3 : GOTO 2100 2160 :REM put new data file record away 2170 BCMSG$=" YES SAVE! Working" : GOSUB 22000 :REM show message 2180 IF LEFT$(DATKEY$(0),1)>" " THEN GOTO 2220 2190 BCMSG$=" Bad Key! Do Again!" : GOSUB 22000 :REM show message 2200 SOUND 50,6 2210 ENSTAT$="25020160" : ENDFLT$="" : GOSUB 40000 : GOTO 2000 2220 :REM key test okay continue 2230 IF BCIDEL%>0 THEN BCRCRD%=BCIDEL% : GOSUB 2290 : GOTO 1000 :REM adding a deleted key 2240 BCKEY$=DATKEY$(0) 2250 GOSUB 51000 :REM save new key 2260 DATREC%(0)=BCIREC%(0) 2270 GOSUB 55000 :REM save new data 2280 GOTO 1000 :REM command line 2290 :REM saving a record which happens to exactly match a deleted one 2300 BCI%=0 2310 GOSUB 60600 :REM parse today 2320 GOSUB 60000 :REM convert julian 2330 BCIREC%(0)=BCRCRD% 2340 GOSUB 50200 :REM get key rec 2350 BCIDATE%(0)=BCJLNK% 2360 GOSUB 50300 :REM put key rec 2370 DATREC%(0)=BCIREC%(0) 2380 GOSUB 55000 :REM put data rec 2390 RETURN 3000 :REM find & show a record 3010 BCMSG$=" F3: Find a record" : GOSUB 22000 :REM show message 3020 BCFUNCMSG$=BCMSG$ 3030 GOSUB 23000 :REM blank fields 3040 BCA%=0 : GOSUB 24000 :REM null/0 all 3050 :REM collect DATKEY$ 3060 rem *********************************************************************** 3070 GOSUB 40000 3080 IF ENPASS%=0 THEN GOSUB 50400 : ENRETURN$=BCISMALL$:REM ##t smallest 3090 UNIKEY$=ENRETURN$ 3100 GOSUB 52000 :REM find isam key 3110 GOSUB 42000 :REM check del-key 3120 IF BCIERR%=3 THEN GOTO 3170 :REM file empty 3130 BCA%=0 : DATREC%(0)=BCRCRD% 3140 GOSUB 54000 :REM get data rec 3150 GOSUB 21000 :REM show data rec 3160 GOTO 1000 :REM command 3170 :REM file empty 3180 BCMSG$=" File Empty" : GOSUB 22000 :REM show message 3190 BCINKEY$=INKEY$: IF BCINKEY$="" THEN GOTO 3190 3200 GOTO 1000 :REM command 4000 :REM page up cycle & recycle 4010 IF BCIUP%(0)<1 THEN GOTO 4300 4020 BCIREC%(0)=BCIUP%(0) 4030 GOSUB 50200 :REM get key rec 4040 IF BCIDATE%(0)>0 THEN GOTO 4200 :REM show rec 4050 GOTO 4000 :REM recycle 4100 :REM page down cycle & recycle 4110 IF BCIDN%(0)<1 THEN GOTO 4300 4120 BCIREC%(0)=BCIDN%(0) 4130 GOSUB 50200 :REM get key rec 4140 IF BCIDATE%(0)>0 THEN GOTO 4200 :REM show rec 4150 GOTO 4100 :REM recycle 4200 :REM show PgUp or PgDn 4210 GOSUB 23000 :REM blank fields 4220 BCA%=0 4230 DATREC%(0)=BCIREC%(0) 4240 GOSUB 54000 :REM get data rec 4250 GOSUB 21000 :REM show data rec 4260 GOTO 1000 4300 :REM no records to PgUp or PgDn 4310 BCMSG$=" No Such Record" : GOSUB 22000 :REM show message 4320 ENSTAT$="25020160" : ENDFLT$="" : GOSUB 40000 : ENFUNC%=ENWAY% 4330 GOTO 1030 5000 :REM edit currently showed record 5010 BCMSG$=" F2:Edit this record" : GOSUB 22000 :REM show message 5020 BCA%=0 5030 GOSUB 23000 :REM blank fields 5040 IF DATREC%(0)>0 THEN GOTO 5080 5050 BCMSG$=" No Record" : GOSUB 22000 :REM show message 5060 BCINKEY$=INKEY$ : IF BCINKEY$="" THEN GOTO 5060 5070 GOTO 1000 5080 :REM good record - do edit 5090 GOSUB 54000 :REM get data rec 5100 BCKEYHOLD$=DATKEY$(0) : BCRECHOLD%=DATREC%(0) 5110 GOSUB 21000 :REM show data rec 5120 GOTO 29900 :REM data collection 5200 :REM returning from data entry 5210 BCMSG$=" SAVE? Y or N" : GOSUB 22000 :REM show message 5220 ENSTAT$="25020170" : ENDFLT$="" : GOSUB 40000 5230 IF ENRETURN$="Y" OR ENRETURN$="y" THEN GOTO 5260 5240 IF ENRETURN$="N" OR ENRETURN$="n" THEN GOTO 1000 5250 SOUND 50,3 : GOTO 5200 5260 :REM put new data file record away 5270 BCMSG$=" YES SAVE! Working" : GOSUB 22000 :REM show message 5280 IF LEFT$(DATKEY$(0),1)>" " THEN GOTO 5320 5290 BCMSG$=" Bad Key! Do Again!" : GOSUB 22000 :REM show message 5300 SOUND 50,6 5310 ENSTAT$="25020160" : ENDFLT$="" : GOSUB 40000 : DATREC%(0)=BCRECHOLD% : GOTO 5000 5320 :REM key test okay continue 5330 IF BCIDEL%>0 THEN BCRCRD%=BCIDEL% : GOSUB 2290 : GOTO 5380 :REM saving an edited key that just happens to exactly match a deleted one 5340 BCKEY$=DATKEY$(0) 5350 GOSUB 51000 :REM save new key 5360 DATREC%(0)=BCIREC%(0) 5370 GOSUB 55000 :REM save new data 5380 :REM branch in for save of edit key that exactly matches a deleted one 5390 IF BCKEYHOLD$=DATKEY$(0) THEN GOTO 1000 :REM verify unchange 5400 BCKEY$=BCKEYHOLD$ : GOSUB 52000 :REM find key 5410 GOSUB 23000 :REM blank fields 5420 BCA%=0 : GOSUB 24000 :REM null fields 5430 BCIREC%(0)=BCRCRD% : BCI%=0 5440 DATREC%(0)=BCRCRD% 5450 GOSUB 54000 :REM get data rec 5460 GOSUB 21000 :REM show rec 5470 :REM delete old key? 5480 BCMSG$="Delete old key? Y N" : GOSUB 22000 :REM show message 5490 ENSTAT$="25220170" : ENDFLT$="" : GOSUB 40000 5500 IF ENRETURN$="Y" OR ENRETURN$="y" THEN GOTO 5530 5510 IF ENRETURN$="N" OR ENRETURN$="n" THEN GOTO 1000 5520 SOUND 50,3 : GOTO 5470 5530 :REM yes delete the old key 5540 GOTO 6200 :REM delete record 6000 :REM delete currently showed record 6010 BCMSG$=" F5: DELETE? Y/N" : GOSUB 22000 :REM show message 6020 BCA%=0 6030 GOSUB 23000 :REM blank fields 6040 IF DATREC%(0)>0 THEN GOTO 6080 6050 BCMSG$=" No Record" : GOSUB 22000 :REM show message 6060 BCINKEY$=INKEY$ : IF BCINKEY$="" THEN GOTO 6060 6070 GOTO 1000 6080 :REM good record - do delete 6090 GOSUB 54000 :REM get data rec 6100 GOSUB 21000 :REM show data rec 6110 :REM collect delete verification 6120 ENSTAT$="25020170" : ENDFLT$="" : GOSUB 40000 6130 IF ENRETURN$="Y" OR ENRETURN$="y" THEN GOTO 6200 6140 IF ENRETURN$="N" OR ENRETURN$="n" THEN GOTO 1000 6150 SOUND 50,3 : GOTO 6110 6200 :REM delete current record 6210 BCMSG$=" Yes DELETE! Working" : GOSUB 22000 :REM show message 6220 BCIREC%(0)=DATREC%(0) 6230 GOSUB 50200 :REM get key rec 6240 GOSUB 60600 :REM convert DATE$ 6250 GOSUB 60000 :REM make Julian 6260 BCIDATE%(0)=BCJLNK%*(-1) 6270 GOSUB 50300 :REM put key rec 6280 GOSUB 23000 :REM blank fields 6290 GOTO 1000 :REM command 7000 :REM executive find & show a record 7010 BCMSG$=" F4: eXecutive Find" : GOSUB 22000 :REM show message 7020 BCFUNCMSG$=BCMSG$ 7030 GOSUB 23000 :REM blank fields 7040 BCA%=0 : GOSUB 24000 :REM null/0 all 7050 :REM collect DATKEY$ 7060 rem *********************************************************************** 7070 GOSUB 40000 7080 IF ENPASS%=0 THEN GOSUB 50400 : ENRETURN$=BCISMALL$:REM get smallest 7090 BCKEY$=ENRETURN$ 7100 GOSUB 52000 :REM find isam key 7110 IF BCIERR%=3 THEN GOTO 7310 :REM file empty 7120 BCA%=0 : DATREC%(0)=BCRCRD% 7130 GOSUB 54000 :REM get data rec 7140 GOSUB 21000 :REM show data rec 7150 BCI%=0 : BCIREC%(0)=BCRCRD% 7160 GOSUB 50200 :REM get key record 7170 IF BCIDATE%(0)>0 THEN GOTO 1000 :REM active 7180 BCMSG$="DELETED - F6:UnDelete" 7190 GOSUB 22000 :REM show message 7200 ENSTAT$="25110160" : ENDFLT$="" 7210 GOSUB 40000 : ENFUNC%=ENWAY% :REM collect 7220 IF ENWAY%=15 THEN GOTO 7250 :REM do undelete 7230 GOSUB 23000 :REM clear fields 7240 GOTO 1000 :REM command 7250 :REM do undelete 7260 GOSUB 60600 :REM parse today 7270 GOSUB 60000 :REM convert 7280 BCIDATE%(0)=BCJLNK% 7290 GOSUB 50300 :REM put key 7300 GOTO 1000 :REM command 7310 :REM file empty 7320 BCMSG$=" File Empty" : GOSUB 22000 :REM show message 7330 BCINKEY$=INKEY$: IF BCINKEY$="" THEN GOTO 7330 7340 GOTO 1000 :REM jump to command 20000 :REM show main data screen 20002 CLS 20004 LOCATE 24,1 20006 IF BCOLOR%=1 THEN COLOR BCLR1% 20008 PRINT "╔══════════════════════╦══════╤═══════╤═══════╤═════════╤═════════╤═══════════╗"; 20010 LOCATE 25,1 20012 PRINT "║ ║ │ │ │ │ │ ║"; 20014 IF BCOLOR%=1 THEN COLOR BCLR3% 20016 LOCATE 25,25 : PRINT "F1:"; 20018 LOCATE 25,32 : PRINT "F2:"; 20020 LOCATE 25,40 : PRINT "F3:"; 20022 LOCATE 25,48 : PRINT "F4:"; 20024 LOCATE 25,58 : PRINT "F5:"; 20026 LOCATE 25,68 : PRINT "F6:"; 20028 IF BCOLOR%=1 THEN COLOR BCLR7% 20030 LOCATE 25,28 : PRINT "New"; 20032 LOCATE 25,35 : PRINT "Edit"; 20034 LOCATE 25,43 : PRINT "Find"; 20036 LOCATE 25,51 : PRINT "X-Find"; 20038 LOCATE 25,61 : PRINT "Delete"; 20040 LOCATE 25,71 : PRINT "UnDelete"; 20042 IF BCOLOR%=1 THEN COLOR BCLR6% 20060 rem *********************************************************************** 22000 :REM show message 22005 IF BCOLOR%=1 THEN COLOR BCLR4% 22010 LOCATE 25,2 : PRINT " "; 22020 LOCATE 25,3 : PRINT BCMSG$; 22030 LOCATE 25,2,1,0,7 22040 RETURN 23000 rem *********************************************************************** 25000 :REM temp show of file record 25010 BCMSG$=" Key Exists" : GOSUB 22000 25020 BCA%=1 25030 GOSUB 23000 :REM blank fields 25040 DATREC%(1)=BCRCRD% 25050 GOSUB 54000 :REM get data rec 25060 GOSUB 21000 :REM show data rec 25070 ENSTAT$="25020130" : ENDFLT$="" : GOSUB 40000 25080 BCA%=0 25090 GOSUB 23000 :REM blank fields 25100 GOSUB 21000 :REM show data rec 25110 BCMSG$=BCFUNCMSG$ : GOSUB 22000 25120 RETURN 29000 :REM escape from input routines 29010 IF ENFUNC%=10 THEN GOTO 2100 :REM add return 29020 IF ENFUNC%=11 THEN GOTO 5200 :REM edit return 29900 :REM data collection 29910 BCIDEL%=0 30000 :REM collect DATKEY$ 30030 rem *********************************************************************** 30040 GOSUB 40000 : DATKEY$(0)=ENRETURN$ 30050 IF ENPASS%=0 THEN GOTO 30090 30060 BCKEY$=DATKEY$(0) : GOSUB 52000 30070 IF BCIERR%=0 AND BCIDATE%(1)>0 THEN GOSUB 25000 : DATKEY$(0)="" : GOTO 30000 30080 IF BCIERR%=0 THEN BCIDEL%=BCRCRD% ELSE BCIDEL%=0 30090 rem *********************************************************************** 40000 :REM enput routine begins 40010 ENROW% =VAL(MID$(ENSTAT$,1,2)) 40020 ENCOL% =VAL(MID$(ENSTAT$,3,2)) 40030 ENLEN% =VAL(MID$(ENSTAT$,5,2)) 40040 ENTEST%=VAL(MID$(ENSTAT$,7,1)) 40050 ENKIND%=VAL(MID$(ENSTAT$,8,1)) 40060 IF BCOLOR%=1 THEN COLOR BCLR7% 40100 :REM start & restart 40110 LOCATE ENROW%,ENCOL%,0,0,7 40120 IF ENKIND%=0 THEN PRINT (LEFT$(ENDFLT$+STRING$(ENLEN%,249),ENLEN%)); ELSE PRINT (RIGHT$(STRING$(ENLEN%,249)+STR$(VAL(ENDFLT$)),ENLEN%)); 40130 ENPASS%=0 40140 ENRETURN$="" 40200 :REM cycle & recycle character collection 40210 LOCATE ENROW%,(ENCOL%+ENPASS%),1,0,7 40220 ENCHAR$=INKEY$ 40230 IF ENCHAR$="" THEN GOTO 40220 :REM recycle 40235 IF ENTEST%=1 THEN IF ENCHAR$>CHR$(96) AND ENCHAR$<CHR$(123) THEN ENCHAR$=CHR$(ASC(ENCHAR$)-32) 40240 IF INSTR(ENTEST$(ENTEST%),ENCHAR$)>0 THEN GOTO 40300 :REM good char 40250 IF LEN(ENCHAR$)=1 THEN EN%=INT((INSTR(41,ENTEST$(0),ENCHAR$)+1)/2) : GOTO 40270 40260 EN%=INT((INSTR(ENTEST$(0),ENCHAR$)+1)/2) 40270 ON EN% GOTO 40510,40520,40530,40540,40550,40560,40570,40580,40590,40600,40610,40620,40630,40640,40650,40660,40670,40680,40690,40700,40710,40720,40800 40280 SOUND 50,3 : GOTO 40200 :REM recycle 40300 :REM valid character - process 40310 IF ENPASS%>0 THEN GOTO 40400 :REM no field erase 40320 PRINT STRING$(ENLEN%,249); 40330 LOCATE ENROW%,ENCOL%,1,0,7 40400 :REM skip field erase 40410 ENPASS%=ENPASS%+1 40420 PRINT ENCHAR$; 40430 ENRETURN$=ENRETURN$+ENCHAR$ 40440 IF ENPASS%=ENLEN% THEN ENWAY%=0 : GOTO 40900 :REM exit routine 40450 GOTO 40200 :REM recycle 40500 :REM branch control for special key pressed 40510 ENWAY%=10 : GOTO 40900 :REM F1 40520 ENWAY%=11 : GOTO 40900 :REM F2 40530 ENWAY%=12 : GOTO 40900 :REM F3 40540 ENWAY%=13 : GOTO 40900 :REM F4 40550 ENWAY%=14 : GOTO 40900 :REM F5 40560 ENWAY%=15 : GOTO 40900 :REM F6 40570 SOUND 50,3 : GOTO 40220 :REM F7 40580 SOUND 50,3 : GOTO 40220 :REM F8 40590 SOUND 50,3 : GOTO 40220 :REM F9 40600 SOUND 50,3 : GOTO 40200 :REM F10 40610 ENWAY%=1 : GOTO 40900 :REM up 40620 ENWAY%=2 : GOTO 40900 :REM down 40630 ENWAY%=3 : GOTO 40900 :REM left 40640 ENWAY%=4 : GOTO 40900 :REM rght 40650 ENWAY%=5 : GOTO 40900 :REM home 40660 ENWAY%=6 : GOTO 40900 :REM end 40670 SOUND 50,3 : GOTO 40220 :REM ins 40680 SOUND 50,3 : GOTO 40220 :REM del 40690 ENWAY%=8 : GOTO 40900 :REM PgUp 40700 ENWAY%=9 : GOTO 40900 :REM PgDn 40710 ENWAY%=0 : GOTO 40900 :REM CR 40720 ENWAY%=7 : GOTO 40900 :REM ESC 40800 :REM backspace character pressed :REM BkSp 40810 IF ENPASS%<2 THEN GOTO 40100 :REM start/restart 40820 ENPASS%=ENPASS%-1 40830 LOCATE ENROW%,ENCOL%+ENPASS%,0,0,7 40840 PRINT CHR$(249); 40850 ENRETURN$=LEFT$(ENRETURN$,ENPASS%) 40860 GOTO 40200 :REM recycle 40900 :REM field exit - finish subroutine 40910 IF ENPASS%<1 THEN ENRETURN$=ENDFLT$ 40920 IF ENKIND%=1 THEN ENRETURN$=RIGHT$(SPACE$(ENLEN%)+STR$(VAL(ENRETURN$)),ENLEN%) 40930 LOCATE ENROW%,ENCOL%,0,0,7 40940 PRINT LEFT$(ENRETURN$+SPACE$(ENLEN%),ENLEN%); 40950 RETURN 41000 :REM establish test strings required by enput routine 41020 FOR BCTEMP%=1 TO 10 41030 KEY BCTEMP%,"" :REM f1-f10 41040 ENTEST$(0)=ENTEST$(0)+CHR$(0)+CHR$(58+BCTEMP%) :REM 1 - 10 41050 NEXT 41060 ENTEST$(0)=ENTEST$(0)+CHR$(0)+CHR$(72)+CHR$(0)+CHR$(80)+CHR$(0)+CHR$(75) 41070 ENTEST$(0)=ENTEST$(0)+CHR$(0)+CHR$(77)+CHR$(0)+CHR$(71)+CHR$(0)+CHR$(79)+CHR$(0)+CHR$(82) 41080 ENTEST$(0)=ENTEST$(0)+CHR$(0)+CHR$(83)+CHR$(0)+CHR$(73)+CHR$(0)+CHR$(81) 41090 ENTEST$(0)=ENTEST$(0)+CHR$(13)+CHR$(0)+CHR$(27)+CHR$(0)+CHR$( 8) 41100 ENTEST$(1)="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 .,-" 41110 ENTEST$(2)=ENTEST$(1)+"abcdefghijklmnopqrstuvwxyz" 41120 ENTEST$(3)=ENTEST$(2)+"!@#$%^&*()_=+~[{]};:'<>/?\|"+CHR$(34) 41130 ENTEST$(4)="0123456789" 41140 ENTEST$(5)=ENTEST$(4)+".-" 41150 ENTEST$(6)=CHR$(0) 41160 ENTEST$(7)="yYnN" 41170 RETURN 42000 :REM check for deleted record - cycle down then up 42010 BCI%=0 : BCIREC%(0)=BCRCRD% 42020 :REM cycle & recycle down key read 42030 GOSUB 50200 :REM get key rec 42040 IF BCIDATE%(0)>0 THEN BCRCRD%=BCIREC%(0) : RETURN 42050 IF BCIDN%(0)<1 THEN GOTO 42100 42060 BCIREC%(0)=BCIDN%(0) 42070 GOTO 42020 42080 :REM start up key read 42090 BCIREC%(0)=BCRCRD% 42100 :REM cycle & recycle up key read 42110 GOSUB 50200 :REM get key rec 42120 IF BCIDATE%(0)>0 THEN BCRCRD%=BCIREC%(0) : RETURN 42130 IF BCIUP%(0)<1 THEN GOTO 42160 42140 BCIREC%(0)=BCIUP%(0) 42150 GOTO 42100 42160 :REM all records deleted 42170 BCIERR%=3 42180 RETURN 43000 :REM reset entire key file to original null format 43005 IF BCOLOR%=1 THEN COLOR BCLR7% 43010 PRINT : PRINT : PRINT 43020 PRINT "Yes .... First run." : PRINT 43030 PRINT "Initialize key file for this program? (Y/N) "; 43040 BCINKEY$=INKEY$ : IF BCINKEY$="" THEN GOTO 43040 43050 IF BCINKEY$="Y" OR BCINKEY$="y" THEN GOTO 43070 43060 PRINT "No .... end....." : END 43070 :REM initialize key file 43080 GOSUB 60600 :REM parse today 43090 GOSUB 60000 :REM convert 43100 LSET BCI0$=MKI$(BCJLNK%) 43110 LSET BCI1$=MKI$(0) 43120 LSET BCI2$=MKI$(BCIKEYLEN1%) 43130 LSET BCI3$=MKI$(0) 43140 LSET BCI4$=MKI$(0-BCIKEYLEN1%) 43150 LSET BCI5$=CHR$(255)+SPACE$(BCIKEYLEN1%-1) 43160 PUT #1,1 43170 CLOSE 43180 RUN 50000 :REM initial open & testing of ISAM key file 50010 OPEN "R", #1, FILENAME$+".key",(10+BCIKEYLEN1%) 50020 FIELD #1, 2 AS BCI0$, 2 AS BCI1$, 2 AS BCI2$, 2 AS BCI3$, 2 AS BCI4$, (BCIKEYLEN1%) AS BCI5$ 50030 GOSUB 50400 :REM get statrec 50040 IF (BCIQUANT%-BCIKEYLEN1%)=BCICHECK% THEN RETURN 50045 IF BCOLOR%=1 THEN COLOR BCLR7% 50050 CLS : PRINT "Verify! .... Absolute first time this program run?" 50060 PRINT : PRINT "Enter Y for YES or N for NO! (Y/N) "; 50070 BCINKEY$=INKEY$ : IF BCINKEY$="" THEN GOTO 50070 50080 IF BCINKEY$="Y" OR BCINKEY$="y" THEN GOTO 43000 50090 IF BCINKEY$="n" OR BCINKEY$="N" THEN GOTO 50100 ELSE GOTO 50050 50100 PRINT : PRINT : PRINT : PRINT 50110 PRINT "No .... not first time! " : PRINT 50120 PRINT "Contact programmer! .... FATAL KEY FILE ERROR!" 50130 PRINT " ISAM open routine!" 50140 END 50200 :REM get key file record 50210 GET #1, (BCIREC%(BCI%)+1) 50220 BCIDATE%(BCI%) =CVI(BCI0$) 50230 BCIMORE%(BCI%) =CVI(BCI1$) 50240 BCILESS%(BCI%) =CVI(BCI2$) 50250 BCIUP%(BCI%) =CVI(BCI3$) 50260 BCIDN%(BCI%) =CVI(BCI4$) 50270 BCIKEY$(BCI%) =BCI5$ 50280 RETURN 50300 :REM put key file record 50310 LSET BCI0$=MKI$(BCIDATE%(BCI%)) 50320 LSET BCI1$=MKI$(BCIMORE%(BCI%)) 50330 LSET BCI2$=MKI$(BCILESS%(BCI%)) 50340 LSET BCI3$=MKI$(BCIUP%(BCI%)) 50350 LSET BCI4$=MKI$(BCIDN%(BCI%)) 50360 LSET BCI5$=BCIKEY$(BCI%) 50370 PUT #1, (BCIREC%(BCI%)+1) 50380 RETURN 50400 :REM get statistics record from key file 50410 GET #1,1 50420 BCIREORG% =CVI(BCI0$) 50430 BCIQUANT% =CVI(BCI1$) 50440 BCIKEYLEN%=CVI(BCI2$) 50450 BCI1STSEQ%=CVI(BCI3$) 50460 BCICHECK% =CVI(BCI4$) 50470 BCISMALL$ =BCI5$ 50480 RETURN 50500 :REM put statistics record into key file 50510 LSET BCI0$=MKI$(BCIREORG%) 50520 LSET BCI1$=MKI$(BCIQUANT%) 50530 LSET BCI2$=MKI$(BCIKEYLEN%) 50540 LSET BCI3$=MKI$(BCI1STSEQ%) 50550 LSET BCI4$=MKI$(BCICHECK%) 50560 LSET BCI5$=BCISMALL$ 50570 PUT #1,1 50580 RETURN 51000 :REM save a new ISAM key record 51010 GOSUB 50400 :REM get stat rec 51020 GOSUB 60600 :REM parse today 51030 GOSUB 60000 :REM convert 51040 BCIDATE%(0)=BCJLNK% 51050 BCIMORE%(0)=0 51060 BCILESS%(0)=0 51070 BCIUP%(0)=0 51080 BCIDN%(0)=0 51090 BCIKEY$(0)=LEFT$(BCKEY$+SPACE$(BCIKEYLEN%),BCIKEYLEN%):REM BCODERVAR 51100 BCIREC%(0)=BCIQUANT%+1 51110 IF BCIREC%(0)=1 THEN GOTO 51700 51120 BCIREC%(1)=1 51200 :REM cycle & recycle ISAM key file read 51210 BCI%=1 : GOSUB 50200 :REM get key record 51220 BCIDIRECT%=ABS(((BCIKEY$(1)>BCIKEY$(0))*1)+((BCIKEY$(1)<BCIKEY$(0))*2)+((BCIKEY$(1)=BCIKEY$(0))*3)) 51230 ON BCIDIRECT% GOTO 51300,51500,51800 :REM 1-< 2-> 3-= 51300 :REM use less branch 51310 IF BCILESS%(1)>0 THEN BCIREC%(1)=BCILESS%(1) : GOTO 51200 51320 BCILESS%(1)=BCIREC%(0) 51330 BCIUP%(0)=BCIUP%(1) 51340 BCIUP%(1)=BCIREC%(0) 51350 BCI%=1 : GOSUB 50300 :REM put key file rec 51360 BCIDN%(0)=BCIREC%(1) 51370 IF BCIUP%(0)=0 THEN GOTO 51700 :REM goto put-new-key 51380 BCIREC%(1)=BCIUP%(0) 51390 BCI%=1 : GOSUB 50200 :REM get key rec 51400 BCIDN%(1)=BCIREC%(0) 51410 GOSUB 50300 :REM put key file rec 51420 GOTO 51700 :REM goto put-new-key 51500 :REM use more branch 51510 IF BCIMORE%(1)>0 THEN BCIREC%(1)=BCIMORE%(1) : GOTO 51200 51520 BCIMORE%(1)=BCIREC%(0) 51530 BCIDN%(0)=BCIDN%(1) 51540 BCIDN%(1)=BCIREC%(0) 51550 BCI%=1 : GOSUB 50300 :REM put key file rec 51560 BCIUP%(0)=BCIREC%(1) 51570 IF BCIDN%(0)=0 THEN GOTO 51700 :REM goto put-new-key 51580 BCIREC%(1)=BCIDN%(0) 51590 BCI%=1 : GOSUB 50200 :REM get key rec 51600 BCIUP%(1)=BCIREC%(0) 51610 GOSUB 50300 :REM put key rec 51620 GOTO 51700 :REM go put-new-key 51700 :REM put new key 51710 BCI%=0 51720 GOSUB 50300 :REM put new key rec 51730 BCIQUANT%=BCIQUANT%+1 51740 BCICHECK%=BCIQUANT%-BCIKEYLEN% 51750 IF BCIKEY$(0)<BCISMALL$ THEN BCISMALL$=BCIKEY$(0) : BCI1STSEQ%=BCIREC%(0) 51760 GOSUB 50500 :REM put stat rec 51800 :REM branch in for pre-existing ISAM key 51810 RETURN :REM ISAM save DONE! 52000 :REM look for a key in the ISAM file 52010 GOSUB 50400 : IF BCIQUANT%=0 THEN BCIERR%=3 : GOTO 52430:REM no keys-return 52020 BCI%=1 : BCIREC%(1)=1 : BCIERR%=0 52030 BCIKEY$(0)=LEFT$(BCKEY$+SPACE$(BCIKEYLEN%),BCIKEYLEN%):REM BCODERVAR 52100 :REM cycle & recycle ISAM key find 52110 GOSUB 50200 :REM get key rec 52120 BCIDIRECT%=ABS(((BCIKEY$(1)>BCIKEY$(0))*1)+((BCIKEY$(1)<BCIKEY$(0))*2)+((BCIKEY$(1)=BCIKEY$(0))*3)) 52130 ON BCIDIRECT% GOTO 52200,52300,52400 52200 :REM use less branch 52210 IF BCILESS%(1)>0 THEN BCIREC%(1)=BCILESS%(1) : GOTO 52100:REM recycle read 52220 BCIERR%=1 52230 GOTO 52400 :REM find done 52300 :REM use more branch 52310 IF BCIMORE%(1)>0 THEN BCIREC%(1)=BCIMORE%(1) : GOTO 52100:REM recycle read 52320 BCIERR%=2 52330 GOTO 52400 :REM find done 52400 :REM find complete 52410 BCRCRD%=BCIREC%(1) 52420 :REM branch from no keys at all error 52430 RETURN 53000 :REM open & field data file 53010 OPEN "r", #2, 60000 :REM - Julian Routine - convert calendar date into julian number 60010 BCJLNY%=BCJLNY%-20 60020 IF BCJLNM%>2 THEN BCJLNM%=BCJLNM%-3 : GOTO 60050 60030 BCJLNM%=BCJLNM%+9 60040 BCJLNY%=BCJLNY%-1 60050 BCJLNY1!=CSNG(BCJLNY%) 60060 BCJLNK%=(FIX((1461*BCJLNY1!)/4))+(FIX(((153*BCJLNM%)+2)/5))+BCJLND% 60070 RETURN 60100 :REM - Julian Routine - convert julian number into calendar date 60110 BCJLNK1!=CSNG(BCJLNK%) 60120 BCJLNY%=FIX(((4*BCJLNK1!)-1)/1461) 60130 BCJLNY1!=CSNG(BCJLNY%) 60140 BCJLND%=FIX(((4*BCJLNK1!)-1)-(1461*BCJLNY1!)) 60150 BCJLND%=FIX((BCJLND%+4)/4) 60160 BCJLNM%=FIX(((5*BCJLND%)-3)/153) 60170 BCJLND%=((5*BCJLND%)-3)-(153*BCJLNM%) 60180 BCJLND%=FIX((BCJLND%+5)/5) 60190 IF BCJLNM%<10 THEN BCJLNM%=BCJLNM%+3 : GOTO 60220 60200 BCJLNM%=BCJLNM%-9 60210 BCJLNY%=BCJLNY%+1 60220 BCJLNY%=BCJLNY%+20 60230 RETURN 60500 :REM parse jdate$ to month%, day%, year% 60510 BCJLNM%=FIX(VAL(LEFT$(BCJDATE$,2))) 60520 BCJLND%=FIX(VAL(MID$(BCJDATE$,3,2))) 60530 BCJLNY%=FIX(VAL(RIGHT$(BCJDATE$,2))) 60535 IF BCJLNY%>99 THEN BCJLNY%=BCJLNY%-1900 60540 IF BCJLNY%<8 THEN BCJLNY%=BCJLNY%+100 60545 IF BCJLNY%<20 THEN BCJLNY%=20 : BCJLND%=1 : BCJLNM%=3 60550 IF BCJLNY%>108 THEN BCJLNY%=108 : BCJLND%=31 : BCJLNM%=12 60555 RETURN 60600 :REM parse current DATE$ into jlnm%, jlnd%, jlny% 60610 BCJLNM%=FIX(VAL(LEFT$(DATE$,2))) 60620 BCJLND%=FIX(VAL(MID$(DATE$,4,2))) 60630 BCJLNY%=FIX(VAL(RIGHT$(DATE$,2))) 60635 IF BCJLNY%>99 THEN BCJLNY%=BCJLNY%-1900 60640 IF BCJLNY%<8 THEN BCJLNY%=BCJLNY%+100 60645 IF BCJLNY%<20 THEN BCJLNY%=20 : BCJLND%=1 : BCJLNM%=3 60650 IF BCJLNY%>108 THEN BCJLNY%=108 : BCJLND%=31 : BCJLNM%=12 60655 RETURN 65000 :REM exit? 65010 BCMSG$=" EXIT? Y or N" : GOSUB 22000 :REM show message 65020 ENSTAT$="25020170" : ENDFLT$="" : GOSUB 40000 :REM collect 65030 IF ENRETURN$="Y" OR ENRETURN$="y" THEN GOTO 65060 65040 IF ENRETURN$="N" OR ENRETURN$="n" THEN GOTO 1000 65050 SOUND 50,3 : GOTO 65020 :REM recycle 65060 CLOSE : CLS 65065 IF BCOLOR%=1 THEN COLOR BCLR7% 65070 PRINT "Attempting chain to program MENU." 65080 PRINT "Current default drive & directory." 65090 CHAIN "MENU" 65100 :REM last line