home *** CD-ROM | disk | FTP | other *** search
Wrap
1 REM Filename: SF-PLACE 2 K$="Copyright Frederick G. Volking 1986" 3 K$="6891 gnikloV .G kcirederF thgirypoC" 100 KEY OFF : CLS : GOSUB 16000 110 DIM SCR$(23) 120 DIM ENTEST$(9) : GOSUB 41000 130 REPL$=CHR$(254) : REPL1$=CHR$(220) : REPL2$=CHR$(219) 160 DIM VARDIC$(99),VARTYP%(99),VARLEN%(99),VARMSK%(99) 170 DIM VARVAR$(99),VARROW%(99),VARCOL%(99) 180 MAXVARS%=99 190 DIM WIN%(1,23,80) : GOSUB 45000 1000 REM start 1010 GOSUB 42200 :REM get system info 1020 GOSUB 42330 :REM get data file information 1030 TCFILE$=BCFILE$ 1040 GOSUB 42250 :REM test PIC file for existance 1045 CLS : GOSUB 20000 :REM show screen 1050 IF TCFILE$<>BCFILE$ THEN GOSUB 22000 : GOTO 1075 1055 GOSUB 43000 1060 GOSUB 20000 :REM show screen 1070 GOSUB 20100 :REM show varbs 1075 REM jump for default acceptance 1080 IF CX%<1 THEN CX%=1 1090 IF CY%<1 THEN CY%=1 1100 GOSUB 20060 10000 REM cycle & recycle character collection 10050 LOCATE CX%,CY%,1,0,7 10100 K$=INKEY$ : IF K$="" THEN GOTO 10100 10150 IF INSTR(ENTEST$(3),K$)>0 THEN GOTO 10800 10200 IF LEN(K$)=1 THEN K%=INT((INSTR(37,ENTEST$(0),K$)+1)/2) : GOTO 10300 10250 K%=INT((INSTR(ENTEST$(0),K$)+1)/2) 10300 ON K% GOTO 10510,15000,15100,10310,15200,10310,17000,15300,10310,13000,11000,11100,11200,11300,11400,11500,11700,11600,11900,12000,12100,15400,11800 10310 SOUND 50,3 10320 GOTO 10000 10510 HELP%=361 : GOSUB 45100 : GOTO 10000 :REM F1 10800 REM character good process 10803 IF K$=CHR$(34) THEN SOUND 50,3 : GOTO 10000 10805 IF CLR%=1 THEN COLOR CLR0% 10810 PRINT K$; 10830 SCR$(CX%)=LEFT$(SCR$(CX%),(CY%-1))+K$+RIGHT$(SCR$(CX%),(80-CY%)) 10840 GOTO 11300 11000 REM up 11010 CX%=CX%-1 11020 IF CX%<1 THEN CX%=23 11030 GOTO 10000 11100 REM down 11110 CX%=CX%+1 11120 IF CX%>23 THEN CX%=1 11130 GOTO 10000 11200 REM left 11210 CY%=CY%-1 11220 IF CY%<1 THEN CY%=80 11230 GOTO 10000 11300 REM right 11310 CY%=CY%+1 11320 IF CY%>80 THEN CY%=1 11330 GOTO 10000 11400 REM home 11410 CY%=1 11420 GOTO 10000 11500 REM end 11505 CY%=1 11510 FOR T%=80 TO 1 STEP (-1) 11520 IF MID$(SCR$(CX%),T%,1)=" " THEN GOTO 11550 11530 CY%=T% 11540 T%=1 11550 NEXT 11560 GOTO 10000 11600 REM delete 11610 SCR$(CX%)=LEFT$(SCR$(CX%),(CY%-1))+RIGHT$(SCR$(CX%),(80-CY%))+" " 11620 LOCATE CX%,1 11625 IF CLR%=1 THEN COLOR CLR0% 11630 PRINT SCR$(CX%); 11640 GOTO 10000 11700 REM insert 11710 SCR$(CX%)=LEFT$(LEFT$(SCR$(CX%),(CY%-1))+" "+RIGHT$(SCR$(CX%),(81-CY%)),80) 11720 LOCATE CX%,1 11725 IF CLR%=1 THEN COLOR CLR0% 11730 PRINT SCR$(CX%); 11740 GOTO 10000 11800 REM backspace 11810 CY%=CY%-1 11820 IF CY%<1 THEN CY%=80 11830 SCR$(CX%)=LEFT$(SCR$(CX%),(CY%-1))+RIGHT$(SCR$(CX%),(80-CY%))+" " 11840 LOCATE CX%,1 11845 IF CLR%=1 THEN COLOR CLR0% 11850 PRINT SCR$(CX%); 11860 GOTO 10000 11900 REM tab 11910 CY%=INT((CY%+10)/10)*10 11920 IF CY%>80 THEN CY%=1 11930 GOTO 10000 12000 REM Shift-tab 12010 IF CY%=1 THEN CY%=80 12020 CY%=(INT((CY%-1)/10))*10 12030 IF CY%=0 THEN CY%=1 12040 GOTO 10000 12100 REM carriage return 12110 CX%=CX%+1 12120 IF CX%>23 THEN CX%=1 12130 CY%=1 12140 FOR T%=1 TO 80 12150 IF MID$(SCR$(CX%-1),T%,1)=" " THEN GOTO 12180 12160 CY%=T% 12170 T%=80 12180 NEXT 12190 GOTO 10000 13000 REM variable display 13010 GOSUB 20400 13020 REM branch in for new active variable 13030 GOSUB 13400 13050 VX%=VARROW%(CV%) : IF VX%<1 THEN VX%=23: VARROW%(CV%)=VX% 13060 VY%=VARCOL%(CV%) : IF VY%<1 THEN VY%=79-VARLEN%(CV%) : VARCOL%(CV%)=VY% 13070 VL%=VARLEN%(CV%) 13090 REM cycle & recycle key get 13095 K$="" 13097 IF VY%+VL%>81 THEN RP$=CHR$(175) ELSE RP$=REPL1$ 13100 FOR T%=0 TO (VL%-1) 13101 IF CLR%=1 THEN COLOR CLR7% 13102 LOCATE 24,78 : PRINT USING "##"; CV%; 13105 IF K$>"" OR VY%+T%>80 THEN T%=(VL%-1) : GOTO 13160 13110 LOCATE VX%,(VY%+T%) 13113 IF CLR%=1 THEN COLOR CLR0% 13115 PRINT RP$; 13120 K$=INKEY$ 13130 IF CLR%=1 THEN COLOR CLR7% 13160 LOCATE 24,78 : PRINT CHR$(219)+CHR$(219); 13170 NEXT 13200 LOCATE VX%,VY%,0,0,0 13210 IF CLR%=1 THEN COLOR CLR0% 13220 PRINT MID$(SCR$(VX%),VY%,VL%); 13230 IF K$="" THEN GOTO 13090 13235 REM branch in for new variable 13240 IF INSTR("0123456789",K$)>0 THEN GOTO 13600 13250 IF LEN(K$)=1 THEN K%=INT((INSTR(37,ENTEST$(0),K$)+1)/2) : GOTO 13290 13260 K%=INT((INSTR(ENTEST$(0),K$)+1)/2) 13270 REM branch in for test of code input direction 13290 ON K% GOTO 13301,13300,13800,13300,13300,13300,13300,13300,13309,13300,14000,14100,14200,14300,14400,14500,13300,13300,14600,14700,14800,14900 13300 SOUND 50,3 : GOTO 13090 13301 HELP%=382 : GOSUB 45100 : GOTO 13090 :REM F1 13309 GOSUB 20100 : GOTO 13090 :REM F9 13400 REM display a variable on the command line 13431 LOCATE 24,15 13432 IF CLR%=1 THEN COLOR CLR3% 13433 PRINT "Code:"; 13434 IF CLR%=1 THEN COLOR CLR7% 13435 PRINT RIGHT$(STR$(CV%),2); 13436 IF CLR%=1 THEN COLOR CLR3% 13437 PRINT " Row:"; 13438 IF CLR%=1 THEN COLOR CLR7% 13440 PRINT RIGHT$(STR$(VARROW%(CV%)),2); 13441 IF CLR%=1 THEN COLOR CLR3% 13442 PRINT " Col:"; 13443 IF CLR%=1 THEN COLOR CLR7% 13444 PRINT RIGHT$(STR$(VARCOL%(CV%)),2); 13445 IF CLR%=1 THEN COLOR CLR3% 13446 PRINT " Len:"; 13447 IF CLR%=1 THEN COLOR CLR7% 13448 PRINT RIGHT$(STR$(VARLEN%(CV%)),2); 13449 IF CLR%=1 THEN COLOR CLR3% 13450 PRINT " Name:"; 13451 IF CLR%=1 THEN COLOR CLR7% 13452 PRINT LEFT$(VARDIC$(CV%)+SPACE$(20),20); 13453 IF CLR%=1 THEN COLOR CLR3% 13454 PRINT " Code: "; 13520 RETURN 13600 REM process incomming new numerical character 13602 HELP%=488 13604 LOCATE VARROW%(CV%), VARCOL%(CV%),0 13606 IF CLR%=1 THEN COLOR CLR6% 13608 PRINT LEFT$(REPL$+RIGHT$(STR$(CV%),(LEN(STR$(CV%))-1))+(STRING$(VARLEN%(CV%),REPL$)),VARLEN%(CV%)); 13610 ENCHAR$=K$ 13620 ENROW%=24 13630 ENCOL%=78 13640 ENLEN%=2 13650 ENTEST%=4 13660 ENKIND%=0 13670 ENDFLT$=RIGHT$(STR$(CV%),2) 13682 LOCATE ENROW%,ENCOL%,0,0,7 13683 IF CLR%=1 THEN COLOR CLR0% 13684 IF ENKIND%=0 THEN PRINT (LEFT$(ENDFLT$+STRING$(ENLEN%,249),ENLEN%)); ELSE PRINT (RIGHT$(STRING$(ENLEN%,249)+STR$(VAL(ENDFLT$)),ENLEN%)); 13686 ENPASS%=0 13688 ENRETURN$="" 13689 LOCATE ENROW%,(ENCOL%+ENPASS%),1,0,7 13690 GOSUB 40180 :REM collect remainder of 13700 IF ENPASS%=0 AND ENWAY%>0 THEN K$=ENCHAR$ : GOTO 13235 13705 IF ENPASS%=0 THEN GOTO 13090 13710 CV%=VAL(ENRETURN$) 13720 IF CV%<0 THEN CV%=0 13730 IF CV%>TOPVAR% THEN CV%=TOPVAR% 13740 IF ENWAY%>0 THEN K$=ENCHAR$ : GOTO 13235 13750 GOTO 13020 13800 REM set current variable at current position 13805 IF VY%+VARLEN%(CV%)>81 THEN GOTO 13900 13810 VARROW%(CV%)=VX% 13820 VARCOL%(CV%)=VY% 13830 GOSUB 13400 13840 LOCATE VARROW%(CV%), VARCOL%(CV%),0 13845 IF CLR%=1 THEN COLOR CLR6% 13850 PRINT LEFT$(REPL$+RIGHT$(STR$(CV%),(LEN(STR$(CV%))-1))+(STRING$(VARLEN%(CV%),REPL$)),VARLEN%(CV%)); 13860 K$="" 13870 GOTO 13600 13900 REM error - attempt to set variable off screen 13910 MSG$="ERROR: Variable set off screen. <CR>:" : HELP%=402 13920 GOSUB 39000 13930 GOSUB 13400 13940 GOTO 13090 14000 REM up 14010 VX%=VX%-1 14020 IF VX%<1 THEN VX%=23 14030 GOTO 13090 14100 REM down 14110 VX%=VX%+1 14120 IF VX%>23 THEN VX%=1 14130 GOTO 13090 14200 REM left 14210 VY%=VY%-1 14220 IF VY%<1 THEN VY%=80 14230 GOTO 13090 14300 REM right 14310 VY%=VY%+1 14320 IF VY%>80 THEN VY%=1 14330 GOTO 13090 14400 REM home 14410 VY%=1 14420 GOTO 13090 14500 REM end 14505 VY%=1 14510 FOR T%=80 TO 1 STEP (-1) 14520 IF MID$(SCR$(VX%),T%,1)=" " THEN GOTO 14550 14530 VY%=T% 14540 T%=1 14550 NEXT 14560 GOTO 13090 14600 REM tab 14610 VY%=INT((VY%+10)/10)*10 14620 IF VY%>80 THEN VY%=1 14630 GOTO 13090 14700 REM Shift-tab 14710 IF VY%=1 THEN VY%=80 14720 VY%=(INT((VY%-1)/10))*10 14730 IF VY%=0 THEN VY%=1 14740 GOTO 13090 14800 REM carriage return 14810 VX%=VX%+1 14820 IF VX%>23 THEN VX%=1 14840 FOR T%=1 TO 80 14850 IF MID$(SCR$(VX%-1),T%,1)=" " THEN GOTO 14880 14860 VY%=T% 14870 T%=80 14880 NEXT 14890 GOTO 13090 14900 REM repair command line and return 14910 GOSUB 20000 14930 LOCATE VARROW%(CV%), VARCOL%(CV%),0 14935 IF CLR%=1 THEN COLOR CLR6% 14940 PRINT LEFT$(REPL$+RIGHT$(STR$(CV%),(LEN(STR$(CV%))-1))+(STRING$(VARLEN%(CV%),REPL$)),VARLEN%(CV%)); 14950 CX%=VX% : CY%=VY% 14960 GOTO 10000 15000 REM f2= generate 15010 MSG$="Generate Code? Y/N:" : HELP%=410 : GOSUB 39000 15015 GOSUB 20000 15020 IF ENWAY%>0 OR ENRETURN$="n" OR ENRETURN$="N" THEN GOTO 10000 15030 GOSUB 16000 15040 GOSUB 42470 :REM put away data 15050 GOSUB 44000 :REM put away screen 15060 CLOSE : CLEAR : CLS : GOSUB 16000 : CHAIN "SF-DRAFT" 15100 REM return to data item editing 15110 MSG$="Edit Data Items? Y/N:" : HELP%=423 : GOSUB 39000 15115 GOSUB 20000 15120 IF ENWAY%>0 OR ENRETURN$="n" OR ENRETURN$="N" THEN GOTO 10000 15130 GOSUB 16000 15140 GOSUB 42470 :REM put away data 15150 GOSUB 44000 :REM put away screen 15160 CLOSE : CLEAR : CLS : GOSUB 16000 : CHAIN "SF-FACTS" 15200 REM save? 15210 MSG$="Save Screen? Y/N:" : HELP%=429 : GOSUB 39000 15215 GOSUB 20000 15220 IF ENWAY%>0 OR ENRETURN$="n" OR ENRETURN$="N" THEN GOTO 10000 15240 GOSUB 42470 :REM put away data 15250 GOSUB 44000 :REM put away screen 15260 GOTO 10000 15300 REM clear? 15310 MSG$="Clear all Variable Placements? Y/N:" : HELP%=439 : GOSUB 39000 15320 IF ENWAY%>0 OR ENRETURN$="n" OR ENRETURN$="N" THEN GOTO 15340 15330 GOSUB 21100 : GOSUB 20100 15340 REM clear screen? 15350 MSG$="Clear Screen? Y/N:" : HELP%=456 : GOSUB 39000 15355 GOSUB 20000 15360 IF ENWAY%>0 OR ENRETURN$="n" OR ENRETURN$="N" THEN GOTO 10000 15370 GOSUB 21000 : GOSUB 20100 15380 GOSUB 20060 15390 GOTO 10000 15400 REM escape to operating system 15410 MSG$="Save Information before exit? Y/N:" : HELP%=471 : GOSUB 39000 15420 IF ENWAY%>0 OR ENRETURN$="n" OR ENRETURN$="N" THEN GOTO 15450 15430 GOSUB 42470 15440 GOSUB 44000 15450 REM exit? 15460 MSG$="Exit? Y/N:" : HELP%=478 : GOSUB 39000 15465 GOSUB 20060 15470 IF ENWAY%>0 OR ENRETURN$="n" OR ENRETURN$="N" THEN GOTO 10000 15480 GOTO 65000 16000 REM clear and print working 16020 IF CLR%=1 THEN COLOR CLR0% 16030 LOCATE 9,30 : PRINT "┌──────────────┐"; 16040 LOCATE 10,30 : PRINT "│ working .... │"; 16050 LOCATE 11,30 : PRINT "└──────────────┘"; 16060 RETURN 17000 REM graphic characters 17010 LOCATE 25,1 : PRINT SPACE$(79); : LOCATE 25,1 17015 IF CLR%=1 THEN COLOR CLR3% 17020 PRINT "Use <NumLock> to alternate between cursor control and graphic characters <ESC>"; 17030 LOCATE 24,1 : PRINT SPACE$(79); : LOCATE 24,1 17032 IF CLR%=1 THEN COLOR CLR3% 17034 PRINT " 1 "; 17036 IF CLR%=1 THEN COLOR CLR4% 17038 PRINT CHR$(192);" "; 17040 IF CLR%=1 THEN COLOR CLR3% 17042 PRINT " 2 "; 17044 IF CLR%=1 THEN COLOR CLR4% 17046 PRINT CHR$(193);" "; 17048 IF CLR%=1 THEN COLOR CLR3% 17050 PRINT " 3 "; 17052 IF CLR%=1 THEN COLOR CLR4% 17054 PRINT CHR$(217);" "; 17056 IF CLR%=1 THEN COLOR CLR3% 17058 PRINT " 4 "; 17060 IF CLR%=1 THEN COLOR CLR4% 17062 PRINT CHR$(195);" "; 17064 IF CLR%=1 THEN COLOR CLR3% 17066 PRINT " 5 "; 17068 IF CLR%=1 THEN COLOR CLR4% 17070 PRINT CHR$(197);" "; 17072 IF CLR%=1 THEN COLOR CLR3% 17074 PRINT " 6 "; 17076 IF CLR%=1 THEN COLOR CLR4% 17078 PRINT CHR$(180);" "; 17080 IF CLR%=1 THEN COLOR CLR3% 17082 PRINT " 7 "; 17084 IF CLR%=1 THEN COLOR CLR4% 17086 PRINT CHR$(218);" "; 17088 IF CLR%=1 THEN COLOR CLR3% 17090 PRINT " 8 "; 17092 IF CLR%=1 THEN COLOR CLR4% 17094 PRINT CHR$(194);" "; 17096 IF CLR%=1 THEN COLOR CLR3% 17098 PRINT " 9 "; 17100 IF CLR%=1 THEN COLOR CLR4% 17102 PRINT CHR$(191);" "; 17104 IF CLR%=1 THEN COLOR CLR3% 17106 PRINT " + "; 17108 IF CLR%=1 THEN COLOR CLR4% 17110 PRINT CHR$(179);" "; 17112 IF CLR%=1 THEN COLOR CLR3% 17114 PRINT " - "; 17116 IF CLR%=1 THEN COLOR CLR4% 17118 PRINT CHR$(196);" "; 17200 REM cycle and recycle character collection 17210 LOCATE CX%,CY%,1,0,7 17220 K$=INKEY$ : IF K$="" THEN GOTO 17220 17225 IF K$=" " THEN GOTO 17500 17230 IF INSTR("123456789+-",K$)>0 THEN GOTO 17300 17240 IF LEN(K$)=1 THEN K%=INT((INSTR(37,ENTEST$(0),K$)+1)/2) : GOTO 17260 17250 K%=INT((INSTR(ENTEST$(0),K$)+1)/2) 17260 REM branch on key 17270 ON K% GOTO 17292,17280,17280,17280,17280,17280,17280,17280,17280,17280,18000,18100,18200,18300,18400,18500,18700,18600,18900,19000,19100,19200,18800 17280 SOUND 50,3 17290 GOTO 17200 17292 HELP%=494 : GOSUB 45100 : GOTO 17200 :REM F1 17300 REM good character process 17310 K%=INSTR("123456789+-",K$) 17320 ON K% GOTO 17340,17350,17360,17370,17380,17390,17400,17410,17420,17430,17440 17340 K$=CHR$(192) : GOTO 17500 17350 K$=CHR$(193) : GOTO 17500 17360 K$=CHR$(217) : GOTO 17500 17370 K$=CHR$(195) : GOTO 17500 17380 K$=CHR$(197) : GOTO 17500 17390 K$=CHR$(180) : GOTO 17500 17400 K$=CHR$(218) : GOTO 17500 17410 K$=CHR$(194) : GOTO 17500 17420 K$=CHR$(191) : GOTO 17500 17430 K$=CHR$(179) : GOTO 17500 17440 K$=CHR$(196) : GOTO 17500 17500 REM recombine branches 17505 IF CLR%=1 THEN COLOR CLR0% 17510 PRINT K$; 17520 SCR$(CX%)=LEFT$(SCR$(CX%),(CY%-1))+K$+RIGHT$(SCR$(CX%),(80-CY%)) 17530 IF K$=CHR$(179) THEN GOTO 18100 ELSE GOTO 18300 18000 REM up 18010 CX%=CX%-1 18020 IF CX%<1 THEN CX%=23 18030 GOTO 17200 18100 REM down 18110 CX%=CX%+1 18120 IF CX%>23 THEN CX%=1 18130 GOTO 17200 18200 REM left 18210 CY%=CY%-1 18220 IF CY%<1 THEN CY%=80 18230 GOTO 17200 18300 REM right 18310 CY%=CY%+1 18320 IF CY%>80 THEN CY%=1 18330 GOTO 17200 18400 REM home 18410 CY%=1 18420 GOTO 17200 18500 REM end 18505 CY%=1 18510 FOR T%=80 TO 1 STEP (-1) 18520 IF MID$(SCR$(CX%),T%,1)=" " THEN GOTO 18550 18530 CY%=T% 18540 T%=1 18550 NEXT 18560 GOTO 17200 18600 REM delete 18610 SCR$(CX%)=LEFT$(SCR$(CX%),(CY%-1))+RIGHT$(SCR$(CX%),(80-CY%))+" " 18620 LOCATE CX%,1 18625 IF CLR%=1 THEN COLOR CLR0% 18630 PRINT SCR$(CX%); 18640 GOTO 17200 18700 REM insert 18710 SCR$(CX%)=LEFT$(LEFT$(SCR$(CX%),(CY%-1))+" "+RIGHT$(SCR$(CX%),(81-CY%)),80) 18720 LOCATE CX%,1 18725 IF CLR%=1 THEN COLOR CLR0% 18730 PRINT SCR$(CX%); 18740 GOTO 17200 18800 REM backspace 18810 CY%=CY%-1 18820 IF CY%<1 THEN CY%=80 18830 SCR$(CX%)=LEFT$(SCR$(CX%),(CY%-1))+RIGHT$(SCR$(CX%),(80-CY%))+" " 18840 LOCATE CX%,1 18845 IF CLR%=1 THEN COLOR CLR0% 18850 PRINT SCR$(CX%); 18860 GOTO 17200 18900 REM tab 18910 CY%=INT((CY%+10)/10)*10 18920 IF CY%>80 THEN CY%=1 18930 GOTO 17200 19000 REM Shift-tab 19010 IF CY%=1 THEN CY%=80 19020 CY%=(INT((CY%-1)/10))*10 19030 IF CY%=0 THEN CY%=1 19040 GOTO 17200 19100 REM carriage return 19110 CX%=CX%+1 19120 IF CX%>23 THEN CX%=1 19130 CY%=1 19140 FOR T%=1 TO 80 19150 IF MID$(SCR$(CX%-1),T%,1)=" " THEN GOTO 19180 19160 CY%=T% 19170 T%=80 19180 NEXT 19190 GOTO 17200 19200 REM escape 19210 GOSUB 20000 19220 GOTO 10000 20000 REM display main screen 20010 LOCATE 25,1 : PRINT SPACE$(79); : LOCATE 25,1 20011 IF CLR%=1 THEN COLOR CLR4% 20012 PRINT "<F1>"; 20013 IF CLR%=1 THEN COLOR CLR3% 20014 PRINT "Help "; 20015 IF CLR%=1 THEN COLOR CLR4% 20016 PRINT "<F2>"; 20017 IF CLR%=1 THEN COLOR CLR3% 20018 PRINT "Generate "; 20019 IF CLR%=1 THEN COLOR CLR4% 20020 PRINT "<F3>"; 20021 IF CLR%=1 THEN COLOR CLR3% 20022 PRINT "Data "; 20023 IF CLR%=1 THEN COLOR CLR4% 20024 PRINT "<F5>"; 20025 IF CLR%=1 THEN COLOR CLR3% 20026 PRINT "Save "; 20027 IF CLR%=1 THEN COLOR CLR4% 20028 PRINT "<F7>"; 20029 IF CLR%=1 THEN COLOR CLR3% 20030 PRINT "Graphic "; 20031 IF CLR%=1 THEN COLOR CLR4% 20032 PRINT "<F8>"; 20033 IF CLR%=1 THEN COLOR CLR3% 20034 PRINT "Clear "; 20035 IF CLR%=1 THEN COLOR CLR4% 20036 PRINT "<F10>"; 20037 IF CLR%=1 THEN COLOR CLR3% 20038 PRINT "Varbs "; 20039 IF CLR%=1 THEN COLOR CLR4% 20040 PRINT "<ESC>";; 20041 IF CLR%=1 THEN COLOR CLR4% 20042 LOCATE 24,1 : PRINT "File:"; 20043 IF CLR%=1 THEN COLOR CLR3% 20044 PRINT BCFILE$+SPACE$(8-LEN(BCFILE$)); 20045 IF CLR%=1 THEN COLOR CLR4% 20046 PRINT "│"; 20047 GOSUB 20060 20050 RETURN 20060 REM show temp command line 20070 LOCATE 24,15 20075 IF CLR%=1 THEN COLOR CLR4% 20080 PRINT " <";CHR$(24);"><";CHR$(25);"><";CHR$(26);"><";CHR$(27);"> <INS> <DEL> <BkSp> <tab/TAB> <Home> <End> <CR> "; 20090 RETURN 20100 REM display screen 20105 IF CLR%=1 THEN COLOR CLR0% 20110 FOR T%=1 TO 23 20120 LOCATE T%,1,0,0,0 20130 PRINT LEFT$(SCR$(T%),80); 20140 NEXT 20145 IF CLR%=1 THEN COLOR CLR6% 20250 FOR T%=0 TO TOPVAR% 20260 IF VARROW%(T%)<1 OR VARCOL%(T%)<1 THEN GOTO 20290 20270 LOCATE VARROW%(T%), VARCOL%(T%),0 20280 PRINT LEFT$(REPL$+RIGHT$(STR$(T%),(LEN(STR$(T%))-1))+(STRING$(VARLEN%(T%),REPL$)),VARLEN%(T%)); 20290 NEXT 20300 RETURN 20400 REM display variable command menu 20410 LOCATE 25,1 : PRINT SPACE$(79); : LOCATE 25,1 20411 IF CLR%=1 THEN COLOR CLR4% 20412 PRINT "<F1>"; 20413 IF CLR%=1 THEN COLOR CLR3% 20414 PRINT "Help "; 20415 IF CLR%=1 THEN COLOR CLR4% 20416 PRINT "<";CHR$(24);"><";CHR$(25);"><";CHR$(26);"><";CHR$(27);"> <tab/TAB> <Home> <End> <CR> <F3>"; 20417 IF CLR%=1 THEN COLOR CLR3% 20418 PRINT "Set "; 20419 IF CLR%=1 THEN COLOR CLR4% 20420 PRINT "<F9>"; 20421 IF CLR%=1 THEN COLOR CLR3% 20422 PRINT "Redisplay "; 20423 IF CLR%=1 THEN COLOR CLR4% 20424 PRINT "<ESC>"; 20430 RETURN 21000 REM erase all screen variables 21010 FOR T%=0 TO 23 21020 SCR$(T%)=SPACE$(80) 21030 NEXT 21040 RETURN 21100 REM erase all variable sets 21110 FOR T%=0 TO TOPVAR% 21120 VARROW%(T%)=0 21130 VARCOL%(T%)=0 21140 NEXT 21150 RETURN 22000 REM check if defaults wanted 22005 IF TOPVAR%>36 THEN GOTO 24000 22010 MSG$="New Screen ..... Check Default Settings? Y/N:" : HELP%=333 22020 GOSUB 39000 22030 IF ENWAY%=20 OR ENRETURN$="N" OR ENRETURN$="n" THEN GOTO 21000 22040 IF ENRETURN$<>"Y" AND ENRETURN$<>"y" THEN GOTO 22000 22050 MAXDICLEN%=0 22055 GOSUB 21000 22060 FOR T%=0 TO TOPVAR% 22070 IF LEN(VARDIC$(T%))>MAXDICLEN% THEN MAXDICLEN%=LEN(VARDIC$(T%)) 22080 NEXT 22090 FOR T%=0 TO TOPVAR% 22095 IF VARROW%(T%)>0 AND VARCOL%(T%)>0 THEN GOTO 22210 22100 X%=T%+1 22110 IF X%<24 THEN GOTO 22170 22120 X%=X%-23 22130 VARROW%(T%)=X% 22140 VARCOL%(T%)=41+MAXDICLEN% 22150 MID$(SCR$(X%),41,LEN(VARDIC$(T%)))=VARDIC$(T%) 22160 GOTO 22210 22170 REM default right column 22180 VARROW%(T%)=X% 22190 VARCOL%(T%)=(MAXDICLEN%+1) 22200 MID$(SCR$(X%),1,LEN(VARDIC$(T%)))=VARDIC$(T%) 22210 NEXT 22220 GOSUB 20100 22230 MSG$="Accept default setting? Y/N:" : HELP%=346 22240 GOSUB 39000 22250 IF ENRETURN$="y" OR ENRETURN$="Y" THEN RETURN 22260 GOSUB 42330 :REM re-retrieve old settings 22270 GOSUB 21000 :REM erase screen variables 22280 GOSUB 20100 :REM display variables 22290 RETURN 24000 REM too many varbs for default settings 24010 MSG$="New Screen: Too many data items for Default <ANY KEY>:" 24020 GOSUB 39100 24030 K$=INKEY$ : IF K$="" THEN GOTO 24030 24040 GOTO 21000 39000 REM display message & collect response 39020 GOSUB 39100 39030 ENSTAT$="24790170" : ENDFLT$="" 39040 GOSUB 40000 39050 MSG$="" 39100 REM display message in message area 39165 IF CLR%=1 THEN COLOR CLR7% 39170 LOCATE 24,15 : PRINT SPACE$(65); 39180 LOCATE 24,(79-(LEN(MSG$))) : PRINT MSG$; 39190 IF CLR%=1 THEN COLOR CLR0% 39200 RETURN 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)) 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$="" 40150 REM cycle & recycle character collection 40160 LOCATE ENROW%,(ENCOL%+ENPASS%),1,0,7 40170 ENCHAR$=INKEY$ 40180 REM branch in for automatic start 40185 IF ENCHAR$="" THEN GOTO 40170 :REM recycle 40190 IF INSTR(ENTEST$(ENTEST%),ENCHAR$)>0 THEN GOTO 40240 :REM good char 40200 IF LEN(ENCHAR$)=1 THEN EN%=INT((INSTR(41,ENTEST$(0),ENCHAR$)+1)/2) : GOTO 40220 40210 EN%=INT((INSTR(ENTEST$(0),ENCHAR$)+1)/2) 40220 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,40730 40230 SOUND 50,3 : GOTO 40150 :REM recycle 40240 REM valid character - process 40250 IF ENPASS%>0 THEN GOTO 40280 :REM no field erase 40260 PRINT STRING$(ENLEN%,249); 40270 LOCATE ENROW%,ENCOL%,1,0,7 40280 REM skip field erase 40285 IF ENPASS%=ENLEN% THEN ENWAY%=0 : GOTO 40150 :REM exit routine 40290 ENPASS%=ENPASS%+1 40300 PRINT ENCHAR$; 40310 ENRETURN$=ENRETURN$+ENCHAR$ 40330 GOTO 40150 :REM recycle 40500 REM branch control for special key pressed 40510 GOSUB 45100 : GOTO 40150:REM F1 40520 ENWAY%=11 : GOTO 40800 :REM F2 40530 ENWAY%=12 : GOTO 40800 :REM F3 40540 ENWAY%=13 : GOTO 40800 :REM F4 40550 ENWAY%=14 : GOTO 40800 :REM F5 40560 ENWAY%=15 : GOTO 40800 :REM F6 40570 ENWAY%=16 : GOTO 40800 :REM F7 40580 ENWAY%=17 : GOTO 40800 :REM F8 40590 ENWAY%=18 : GOTO 40800 :REM F9 40600 ENWAY%=19 : GOTO 40800 :REM F10 40610 ENWAY%=3 : GOTO 40800 :REM up 40620 ENWAY%=4 : GOTO 40800 :REM down 40630 ENWAY%=1 : GOTO 40800 :REM left 40640 ENWAY%=2 : GOTO 40800 :REM rght 40650 ENWAY%=5 : GOTO 40800 :REM home 40660 ENWAY%=6 : GOTO 40800 :REM end 40670 ENWAY%=7 : GOTO 40800 :REM ins 40680 ENWAY%=8 : GOTO 40800 :REM del 40690 ENWAY%=9 : GOTO 40800 :REM tab 40700 ENWAY%=10 : GOTO 40800 :REM TAB 40710 ENWAY%=0 : GOTO 40800 :REM CR 40720 ENWAY%=20 : GOTO 40800 :REM ESC 40730 REM backspace character pressed:REM BkSp 40740 IF ENPASS%<2 THEN GOTO 40100:REM start/restart 40750 ENPASS%=ENPASS%-1 40760 LOCATE ENROW%,ENCOL%+ENPASS%,0,0,7 40770 PRINT CHR$(249); 40780 ENRETURN$=LEFT$(ENRETURN$,ENPASS%) 40790 GOTO 40150:REM recycle 40800 REM field exit - finish subroutine 40810 IF ENPASS%<1 THEN ENRETURN$=ENDFLT$ 40820 IF ENKIND%=1 THEN ENRETURN$=RIGHT$(SPACE$(ENLEN%)+STR$(VAL(ENRETURN$)),ENLEN%) 40830 LOCATE ENROW%,ENCOL%,0,0,7 40840 IF ENRETURN$>"" THEN PRINT LEFT$(ENRETURN$+SPACE$(ENLEN%),ENLEN%); ELSE PRINT STRING$(ENLEN%,REPL$); 40850 RETURN 41000 REM establish test strings required by enput routine 41010 FOR C%=1 TO 10 41020 KEY C%,"" :REM f1-f10 41030 ENTEST$(0)=ENTEST$(0)+CHR$(0)+CHR$(58+C%) :REM 1 - 10 41040 NEXT 41050 ENTEST$(0)=ENTEST$(0)+CHR$(0)+CHR$(72)+CHR$(0)+CHR$(80)+CHR$(0)+CHR$(75) 41060 ENTEST$(0)=ENTEST$(0)+CHR$(0)+CHR$(77)+CHR$(0)+CHR$(71)+CHR$(0)+CHR$(79)+CHR$(0)+CHR$(82) 41070 ENTEST$(0)=ENTEST$(0)+CHR$(0)+CHR$(83)+CHR$(0)+CHR$( 9)+CHR$(0)+CHR$(15) 41080 ENTEST$(0)=ENTEST$(0)+CHR$(13)+CHR$(0)+CHR$(27)+CHR$(0)+CHR$( 8) 41090 ENTEST$(1)="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 " 41100 ENTEST$(2)=ENTEST$(1)+"abcdefghijklmnopqrstuvwxyz.,-" 41110 ENTEST$(3)=ENTEST$(2)+"!@#$%^&*()_=+~[{]};:'<>/?\|"+CHR$(34) 41120 ENTEST$(4)="0123456789" 41130 ENTEST$(5)=ENTEST$(4)+".-" 41140 ENTEST$(6)=CHR$(0) 41150 ENTEST$(7)="yYnN" 41160 ENTEST$(8)="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" 41170 ENTEST$(9)="12345" 41180 RETURN 42200 REM get system information 42202 OPEN "i", #2, "SF-CARRY.DAT" 42204 INPUT #2, BCFILE$,K$ 42206 INPUT #2, CLR% ,K$ 42208 INPUT #2, CLR0% ,K$ 42210 INPUT #2, CLR1% ,K$ 42212 INPUT #2, CLR2% ,K$ 42214 INPUT #2, CLR3% ,K$ 42216 INPUT #2, CLR4% ,K$ 42218 INPUT #2, CLR5% ,K$ 42220 INPUT #2, CLR6% ,K$ 42222 INPUT #2, CLR7% ,K$ 42224 INPUT #2, CLR8% ,K$ 42226 INPUT #2, CLR9% ,K$ 42228 CLOSE #2 42240 RETURN 42250 REM test data file for existance 42260 IF TCFILE$<=" " THEN GOTO 42310 42270 OPEN "r", #2, TCFILE$+".PIC",1 42280 L%=LOF(2) 42290 CLOSE #2 42300 IF L%>0 THEN RETURN 42305 KILL TCFILE$+".PIC" 42310 TCFILE$="" 42320 RETURN 42330 REM file exists - retrieve data 42340 OPEN "i", #2, BCFILE$+".DIC" 42350 INPUT #2, BCFILE$ 42360 FOR T%=0 TO MAXVARS% 42370 INPUT #2, VARDIC$(T%),VARTYP%(T%),VARLEN%(T%),VARMSK%(T%),VARVAR$(T%),VARROW%(T%),VARCOL%(T%) 42380 NEXT 42390 INPUT #2, CV%,VO%,TOPVAR% 42400 CLOSE #2 42410 RETURN 42470 REM put away data 42480 OPEN "o", #2, BCFILE$+".DIC" 42490 WRITE #2, BCFILE$ 42500 FOR T%=0 TO MAXVARS% 42510 WRITE #2, VARDIC$(T%),VARTYP%(T%),VARLEN%(T%),VARMSK%(T%),VARVAR$(T%),VARROW%(T%),VARCOL%(T%) 42520 NEXT 42530 WRITE #2, CV%,VO%,TOPVAR% 42540 CLOSE #2 42550 RETURN 43000 REM open and retrieve PICture info 43010 OPEN "i", #2, BCFILE$+".PIC" 43020 FOR T%=1 TO 23 43030 INPUT #2, SCR$(T%) 43035 SCR$(T%)=LEFT$(SCR$(T%)+SPACE$(80),80) 43040 NEXT 43050 IF EOF(2)=(-1) THEN GOTO 43070 43060 INPUT #2, CX%,CY% 43070 CLOSE #2 43080 RETURN 44000 REM save PICture info 44010 OPEN "o", #2, BCFILE$+".PIC" 44020 FOR T%=1 TO 23 44025 SCR$(T%)=LEFT$(SCR$(T%)+SPACE$(80),80) 44030 WRITE #2, SCR$(T%) 44040 NEXT 44050 WRITE #2, CX%,CY% 44060 CLOSE #2 44070 RETURN 45000 REM open help file 45010 OPEN "r",#1,"SF-TUTOR.DAT",72 45020 FIELD #1,70 AS HLP$,2 AS HLP1$ 45030 RETURN 45100 REM help requested 45105 LOCATE 1,1,1,0,0 : HELP1%=HELP% 45110 IF CLR%=1 THEN COLOR CLR8% 45120 GET #1,HELP1% 45130 HELP$=HLP$ 45140 WW%=INSTR(HELP$,"@")+3 45150 FOR W%=1 TO WW% 45160 WIN%(0,1,W%)=SCREEN(1,W%) 45170 IF CLR%=1 THEN WIN%(1,1,W%)=((SCREEN(1,W%,1)) MOD 16) 45180 NEXT 45190 LOCATE 1,1,1,0,0 : PRINT STRING$(WW%,220); 45200 WX%=1 45210 WHILE LEFT$(HELP$,1)<>"^" 45220 WX%=WX%+1 45230 FOR W%=1 TO WW% 45240 WIN%(0,WX%,W%)=SCREEN(WX%,W%) 45250 IF CLR%=1 THEN WIN%(1,WX%,W%)=((SCREEN(WX%,W%,1)) MOD 16) 45260 NEXT 45270 LOCATE WX%,1,1,0,0 45280 PRINT CHR$(221)+" "+LEFT$(HELP$,WW%-4)+" "+CHR$(222); 45290 HELP1%=HELP1%+1 45300 GET #1,HELP1% 45310 HELP$=HLP$ 45320 WEND 45330 WX%=WX%+1 45350 FOR W%=1 TO WW% 45360 WIN%(0,WX%,W%)=SCREEN(WX%,W%) 45370 IF CLR%=1 THEN WIN%(1,WX%,W%)=((SCREEN(WX%,W%,1)) MOD 16) 45380 NEXT 45390 LOCATE WX%,1 : PRINT RIGHT$(STRING$(WW%,223)+" <ESC>"+CHR$(223),WW%); 45400 LOCATE WX%,WW%-6,1,0,7 45410 K$=INKEY$ : IF K$<>CHR$(27) THEN GOTO 45410 45420 FOR W1%=1 TO WW% 45430 FOR W%=1 TO WX% 45440 LOCATE W%,W1%,1,0,0 45450 IF CLR%=1 THEN COLOR WIN%(1,W%,W1%) 45460 PRINT CHR$(WIN%(0,W%,W1%)); 45470 NEXT 45480 NEXT 45490 IF CLR%=1 THEN COLOR CLR0% 45500 LOCATE 1,1,1,0,7 45510 RETURN 65000 REM exit 65015 CLS 65040 CLOSE : END 65501 K$="Copyright Frederick G. Volking 1986" 65502 K$="6891 gnikloV .G kcirederF thgirypoC"