! RANVUE.BAS vue random files ! written by James A. Jarboe IV in October 1984 1-409-295-5767 ! Program developed around VUE.SBR written by David Pallman ! and donated to the AMUS system. ! VUE.SBR/H 023-456-376-360 ! Also uses XPPN.SBR written by Mike Sigona for the AM100 ! and modified for the AM100/L by John Keys also donated to the AMUS system. ! XPPN.SBR/H 215-410-733-765 ! ! ! Consists of: ! RANVUE.DO - DO file to invoke RANVUE ! RANVUE.BAS - BASIC listing of RANVUE ! RANVUE.RUN - RUN version of RANVUE ! RANVUE.DOC - Somewhat of a Documentation of RANVUE ! RANVUE.DAT - RANDOM data file to help learn RANVUE ! RANVUE.LST - PRINTOUT of the RANVUE.DAT file ! RANVUE.RON - Letter of explaination ! TEST.DAT - RANDOM data file to play with ! TEST.BAS - BASIC listing to play with in using MAP read ! ! Three files acompany this program RANVUE.DAT and TEST.DAT and TEST.BAS ! RANVUE.DAT is an instructional help random data file that can be RANVUE'd ! to learn how to use it. ! TEST.DAT is a random file to play around with the exersizes learned ! in RANVUE.DAT. ! TEST.BAS is a basic file with map statements that can be read while in ! RANVUE to find out byte locations of the TEST.DAT file. ! ! ACCEPT.SBR, VUE.SBR and XPPN.SBR must also be on your system. ! ! To get the graphic borders to work correctly on your terminal and also the ! lower and upper intensity displays some things may have to be changed ! in this program. ! NOTICE: ! IT IS SETUP FOR SOROC TERMINALS ON THE AMUS SYSTEM ! EXCEPT FOR THE LOW AND HIGH INTENSITY DISPLAY ! Look at the GRAPHON and GRAPHOFF map statements and change them to match ! the graphics on mode and graphics off mode for your particular terminal. ! Also the statement LOW and HIGH need to be changed to match low and high ! intensity display characters for your terminal. ! The characters under the MAP BORDERS also need to be changed to correspond ! with the graphic characters that represent left corners, right corners, ! horizontal and vertical lines. ! If your terminal does not have graphics then these characters can be changed ! to -'s for horizontal lines, |'s for vertical lines, and +'s for corners. ! ! ! History: ! 1. 11-01-84 Version 1.0 donated to AMUS could be some bugs ! 2. ! ! ! ! ! ! ! SUGGESTIONS: ! 1. Make binary number location work on larger than 2 bytes NUMBERS ! 2. Would be nice if someone would write an M68 subroutine ! to handle the replacement of non-ascii characters that ! I filter out in CHECK: so that the display screen doesn't ! take so much time to appear and appears right. ! 3. Make option to increase Random file size ! 4. Option to sort the file ! 5. ! ! If anyone does find a use for this program or has any comments ! or suggestions for version 2.0, Please write or call ! James A. Jarboe ! c/o Educational Filmstrips ! 1401 19th Street ! Huntsville TX, 77340 ! (409) 295-5767 ! ! ! ********************* RANVUE **************************** ! ! A program to vue random data files ! ! Invoked by typing RANVUE filename ! ! ************************************************************* ! ! MAP1 VERSION,S,30,"RANVUE Version 1.0" ! version of program MAP1 ARRY ! main array of info in xcall MAP2 AR(8),X,64 ! easy to get to display MAP1 ROWS,F,6,8 ! # of rows in display MAP1 COLUMNS,F,6,64 ! # of columns in display MAP1 ST ! string to fill array with MAP2 SIT(8),X,64 MAP1 LEFTCOL,F,6,7 ! left column position MAP1 LEFTROW,F,6,4 ! left row position MAP1 BORDERS ! Graphic characters MAP2 TLC,S,1,"+" ! top left corner WAS B FOR FREEDOM100 MAP2 HRZ,S,1,"-" ! horizontal WAS K FOR FREEDOM MAP2 TRC,S,1,"+" ! top right corner WAS C FOR FREEDOM MAP2 VRT,S,1,"|" ! vertical WAS J FOR FREEDOM MAP2 BLC,S,1,"+" ! bottom left corner WAS A FOR FREEDOM MAP2 BRC,S,1,"+" ! bottom right corner WAS D FOR FREEDOM MAP1 KS,S,79 ! graphics hz line string MAP1 ALL$,S,6 ! Response character MAP1 FILE$,S,30 ! filename to be edited MAP1 EXT$,S,4,".DAT" ! Default file extension MAP1 BAKFIL$,S,30 ! Bakup filename MAP1 BXT$,S,4,".DAK" ! bakup file extension MAP1 FILE1,F,6 ! record # of opened file MAP1 FILE2,F,6 ! bakup file record # MAP1 CH,S,1 MAP1 RP$,S,65 ! replace what string MAP1 WITH,S,65 ! with this string MAP1 GRAPHON,S,2,CHR$(27)+"$" ! terminal graphics on mode MAP1 GRAPHOFF,S,2,CHR$(27)+"%" ! terminal graphics off mode MAP1 LOW,S,2,CHR$(27)+")" ! terminal low intensity WAS CHR$(27)+")" MAP1 HIGH,S,2,CHR$(27)+"(" ! terminal high intensity WAS CHR$(27)+"(" MAP1 PLINE,S,512 ! printing string MAP1 BRAKS,S,512 ! write brakets MAP1 DEFA,S,1,"]" ! default braket char MAP1 BACKUP,X,512 ! temporary backup record MAP1 FLP,F ! floating point number byte location MAP1 FPN,F ! MAP1 ANS,F MAP1 RECS,F MAP1 ANSWER,F MAP1 LEW,F,6,66 MAP1 CACL,F,6 MAP1 MAPFILE$,S,30 MAP1 NUM,S,6 MAP1 I,F MAP1 LP,F MAP1 PASS,S,10 MAP1 SHOW,S,1 MAP1 CFLP,F MAP1 NEWN,F MAP1 MSG$,S,50 MAP1 RECSIZ,F MAP1 FLAG,F MAP1 PRIFI,F MAP1 RECSIZ(9),F,6 ! Recordsizes to figure RECSIZ(1)=6 ! out floating point number RECSIZ(2)=7 ! locations RECSIZ(3)=8 ! weird way to do it RECSIZ(4)=9 ! but it works. RECSIZ(5)=10 ! may take about two days RECSIZ(6)=11 ! to explain how. RECSIZ(7)=12 ! maybe there is an easier RECSIZ(8)=13 ! way. RECSIZ(9)=14 MAP1 FIL1,X,1 MAP1 FIL2,X,2 MAP1 FIL3,X,3 MAP1 FIL4,X,4 MAP1 FIL5,X,5 MAP1 FIL43,X,43 MAP1 FIL51,X,51 MAP1 FIL29,X,29 MAP1 FIL27,X,27 MAP1 FIL11,X,11 MAP1 FIL55,X,55 MAP1 FIL58,X,58 MAP1 FLO$,S,20 MAP1 FLOAT,F,6 MAP1 BPLACE,S,1 MAP1 BINSIZ,F MAP1 BIN$,S,20 MAP1 BINA,B,1 MAP1 BINB,B,2 MAP1 BINX,X,1 MAP1 BFILE,F MAP1 BINARY'FILL MAP2 BI5,X,5 MAP2 BI11,X,11 MAP2 BI23,X,23 MAP2 BI47,X,47 MAP2 BI95,X,95 MAP2 BI383,X,383 MAP2 BI479,X,479 MAP1 PLACE,S,512 ! used to locate floating point bytes MAP1 BLACE,S,512 MAP1 GASL,F MAP1 ASL,F MAP1 OPTION,S,1 MAP1 PPN MAP2 PROJECT,B,2 MAP2 PROGRAMMER,B,2 MAP1 DEVICE,S,6 MAP1 JOBNAM,S,6 MAP1 TRMNAM,S,6 ! for goodness sakes don't change any of these numbers, letters or spaces ! they help to find the floating point location with a 512 byte area. ! If it looks confusing it's because it is! ! PLACE="1AFJMO23456123456182A3B1C526E1B842A1D36E21CG83B1A64CG125D8K162AFN1DH2381EIL2A1BFJP21I34CG1AXY3B12AJMQ1B245D1K32A 1C5D2A1O 4C216EILN1A3B5D12A43B1Q2AH61BF2AZ1D342A1LNO321CG6EI1854CG123BFL1C2A3B16E25D1BF82A1C3BF21RX4361AHKM 12AJ581K24CG1R523B1CGJ2A1B64C2183B5D16EI3B" PLACE=PLACE+"1254CG1B2ANO1C32A61IL42A1KM 621B5DHK1A34C812AK3B1C2A5D1BF2AG163B2A18GJ321DH4CG1A8Y56123BF 1R243B1LN2AQ1BF62A1N34521K6E381A5DHK12A4CG1D2AF 1CG23B18M4261B5DH21C3B6E1AH43B12A65D1B2APZ1 328G1OXY2A16EIL21BF45D1A3BFO125D361I24CG18F26E1C3B2A1K84321N5DHK1A" ! BLACE=" A B C A B D A B C A B F A B C A B D A B C A B G A B C A B D A B C A B F A B C A B D A B C A B H A B C A B D A B C A B F A B C A B D A B C A B G A B C A B D A B C A B F A B C A B D A B C A B A B C A B D A B C A B F A B C A B D A B C A B G A B C A B D A B C" BLACE=BLACE+" A B F A B C A B D A B C A B H A B C A B D A B C A B F A B C A B D A B C A B G A B C A B D A B C A B F A B C A B D A B C A B A B C A B D A B C A B F A B C A B D A B C A B G A B C A B D A B C A B F A B C A B D A B C A B A B C A B D A B C A B F A B C A B D A B " ! BRAKS="]]]]]]]]" FOR I=1 TO 6 BRAKS=BRAKS+BRAKS NEXT I VERY: FILEBASE 1 FILE1=1 INPUT LINE "",FILE$ A=INSTR(1,FILE$,"/") IF A=0 THEN GOTO LOOK1 OPTION=FILE$[A+1,A+1] FILE$=FILE$[1,A-1] LOOK1: B=INSTR(1,FILE$,".") IF B=0 THEN FILE$=FILE$+EXT$ BEGIN: ! delete the comments on the last two commented lines and change the ! password to suit you if you wish protection on your random files ! since they can be destroyed or messed up if your not careful. ! INPUT "Password :",PASS ! IF PASS#"SECRET" GOTO OUTOFF2 XCALL XPPN,PPN,DEVICE,JOBNAM,TRMNAM PRINT TAB(-1,0);VERSION;LOW" Status: Log:"HIGH;DEVICE"["STR(PROJECT)","STR(PROGRAMMER)"]" PRINT TAB(1,60);LOW;"Mode:"HIGH BEGIN2: CALL OPENAT CALL BORDER CALL CALC CALL MENU TOP: IF FILE1> RECS THEN FILE1=FILE1-1:? CHR$(7) IF FILE1<1 THEN FILE1=1 ? TAB(LEFTROW-1,48);FILE1 READ #1,ST ARRY=ST IF SAME#FILE1 THEN BACKUP=ST:SAME=FILE1 CALL CLEAR ? TAB(1,LEW);"Ranvue " CALL CHECK CALL FILL A=0:IT=0 XCALL VUE,ST,ROWS,COLUMNS,LEFTROW,LEFTCOL WRITE #1,ST ST=SPACE$(512) ARRY=ST CALL COMMAND ! comment out this xcall accept if you do not use a FREEDOM 100 terminal ! the driver has a bug that does not filter out the character after the ! ESC or F1 is hit ! If you do use the FRE100 driver version 4.06 then the extra XCALL ACCEPT ! must be used. ! XCALL ACCEPT,ALL PAS: XCALL ACCEPT,ALL ALL$=CHR(ALL) CALL CLEAR'COMMAND IF ALL$="T" THEN FILE1=FILE1+1:GOTO TOP IF ALL$="R" THEN FILE1=FILE1-1:GOTO TOP IF ALL$="H" THEN FILE1=1:GOTO TOP IF ALL$="E" THEN FILE1=RECS:GOTO TOP IF ALL$="Q" THEN GOTO OUTOFF IF ALL$="C" THEN GOTO FILLIT IF ALL$="W" THEN GOTO REPLACE IF ALL$="P" THEN GOTO PAGE IF ALL$="G" THEN GOTO REPLACE IF ALL$="S" THEN GOTO REPLACE IF ALL$="B" THEN GOTO BACKUP IF ALL$="O" THEN GOTO PRIN IF ALL$="N" THEN GOTO NUMBCHOIC IF ALL$="A" THEN GOTO NEWFILE IF ALL$="M" THEN GOTO MAPS IF ALL$="I" THEN GOTO INCREASE ? TAB(LEFTROW+12,6);"What ?" CALL COMMAND GOTO PAS OUTOFF: CLOSE #1 OUTOFF2: ? TAB(-1,0); END FILLIT: ? TAB(1,LEW);"Char Fill " CALL BELOW'SCREEN ? TAB(LEFTROW+11,5);:INPUT "Fill from Page ",PG1 IF PG1=0 THEN GOTO ENFIL ? TAB(LEFTROW+12,5);:INPUT "To Page ",PG2 ? TAB(LEFTROW+13,5);:INPUT "With what character ?",CH IF PG1<1 THEN PG1=1 IF PG2> RECS THEN PG2=RECS IF CH="" THEN CH=DEFA CALL CLEAR ? TAB(LEFTROW+(ROWS/2),LEFTCOL+(COLUMNS/2)-15);"CLEARING PAGE ";PG1;" TO ";PG2;" WITH ";CH FOR I=1 TO 512 ST[I,I]=CH NEXT I FOR FILE1=PG1 TO PG2 WRITE #1,ST NEXT FILE1 FILE1=PG1 ENFIL: CALL MENU GOTO TOP REPLACE: CALL BELOW'SCREEN ? TAB(1,LEW);TAB(-1,9); IF ALL$="G" THEN MSG$="Global " ELSE MSG$="Replace " IF ALL$="S" THEN MSG$="Search for " ? TAB(1,LEW);MSG$ CALL COMMAND ? MSG$; RP$="" INPUT "",RP$ IF RP$="" THEN GOTO REPEND IF ALL$="S" THEN GOTO REPAS ? TAB(LEFTROW+12,6);:INPUT "With ? ",WITH$ REPAS: CALL CLEAR'COMMAND FOR FILE1=FILE1 TO RECS ? TAB(LEFTROW-1,48);FILE1 READ #1,ST WI=INSTR(1,ST,RP$) IF WI=0 THEN GOTO NF ARRY=ST IF ALL$="G" THEN GOTO PA1 CALL CLEAR CALL CHECK CALL FILL PA1: FOR WI=1 TO ROWS POD=1 WITHIN: ! Search within the line for data to replace WHERE=INSTR(POD,AR(WI),RP$[1,LEN(RP$)]) IF WHERE=0 THEN GOTO NI IF ALL$="G" THEN GOTO PA3 ? TAB(LEFTROW+WI,WHERE+LEFTCOL);LOW;AR(WI)[WHERE,LEN(RP$)+WHERE-1]; ? HIGH ? TAB(WI+LEFTROW,LEFTCOL+WHERE); XCALL NOECHO XCALL ACCEPT,CNG CNG$=CHR(CNG) IF ALL$="S" AND CNG$#"X" THEN WI=ROWS:NEXT WI:GOTO NOSE IF ALL$="S" THEN GOTO PA4 IF CNG$="N" THEN ? TAB(WI+LEFTROW,LEFTCOL+WHERE);AR(WI)[WHERE,LEN(RP$)+WHERE-1]:GOTO BNI IF CNG$#"Y" THEN WI=ROWS:NEXT WI:GOTO NOSE PA3: AR(WI)[WHERE,LEN(RP$)+WHERE-1]=WITH$[1,LEN(RP$)] SIT(WI)[WHERE,LEN(RP$)+WHERE-1]=WITH$[1,LEN(RP$)] IF ALL$="G" THEN GOTO BNI PA4: ? TAB(LEFTROW+WI,LEFTCOL+1);AR(WI) BNI: POD=WHERE+1:GOTO WITHIN NI: NEXT WI WRITE #1,ST NF: NEXT FILE1 FILE1=1 REPEND: CALL MENU GOTO TOP PAGE: ! See a particular page ? TAB(1,LEW);"Page " CALL COMMAND ? "See Page"; INPUT ,ANS$ CALL CLEAR'COMMAND IF VAL(ANS$)>RECS THEN GOTO PAGE IF VAL(ANS$)<0 THEN GOTO ENP FILE1=VAL(ANS$) ENP: CALL MENU GOTO TOP NOSE: ! ? TAB(WI+LEFTROW,LEFTCOL+WHERE);AR(WI)[WHERE,WHERE] STOR=FILE1 WRITE #1,ST FILE1=RECS NEXT FILE1 FILE1=STOR CALL MENU GOTO TOP PRIN: ? tab(1,LEW);"Print " CALL BELOW'SCREEN CALL COMMAND ? TAB(LEFTROW+ROWS+3,LEFTCOL+1);:INPUT"1. How characters per line ?",BYT IF BYT<1 THEN GOTO ENPRI ? TAB(LEFTROW+ROWS+4,LEFTCOL+1);:INPUT"2. Starting at record ?",SPG1 IF SPG1=0 THEN ? TAB(LEFTROW+ROWS+4,LEFTCOL+25);"1":SPG2=RECS IF SPG1=0 THEN ? TAB(LEFTROW+ROWS+4,LEFTCOL+25);"3. Ending at record ?";RECS:goto PASPG2 ? TAB(LEFTROW+ROWS+5,LEFTCOL+1);:INPUT"3. Ending at record ?",SPG2 PASPG2: ? TAB(LEFTROW+ROWS+6,LEFTCOL+1);:INPUT"4. How many lines per page ?",LPP BY=BYT CALL CLEAR CALL BELOW'SCREEN OPEN #14 "RANVUE.LST",OUTPUT LP=0 FOR FILE1=SPG1 TO SPG2 AS=1:BYT=BY ? TAB(LEFTROW+5,LEFTCOL+15);"Printing record ";FILE1 READ #1,ST PRIFI=PRIFI+1 PO=512/BYT FOR A=1 TO PO IF ST[AS,BYT]=BRAKS[AS,BYT] THEN GOTO PXA PLINE=ST[AS,BYT] PRINT #14,PLINE[1,BY] LP=LP+1 IF LP=LPP THEN ? #14,CHR$(12);:LP=0 PXA: AS=AS+BY:BYT=BYT+BY NEXT A NEXT FILE1 PLINE=SPACE$(512) ? #14,"THERE ARE "+RECS+" RECORDS IN "+FILE$ PLINE[1,5]=PRIFI USING "#,###" PLINE[7,25]=" WHICH WERE PRINTED" PRINT #14,PLINE CLOSE #14 XCALL SPOOL,"RANVUE.LST" FILE1=1 ENPRI: CALL MENU GOTO TOP NUMBCHOIC: STOR=FILE1 ? tab(1,LEW);"Number type " CALL BELOW'SCREEN CALL COMMAND PRINT "Enter 'F' for Floating Point # or 'B' for Binary # "; XCALL ACCEPT,ALL ANS$=CHR(ALL) IF ANS$="F" THEN GOTO NUMB IF ANS$="B" THEN GOTO BIN CALL MENU GOTO TOP BIN: ? tab(1,LEW);"Binary Numbers " CALL BELOW'SCREEN CALL COMMAND INPUT "Enter Binary number location ",BIN ? TAB(10);:INPUT "Enter Binary number size ",BINSIZ CLOSE #1 IF BINSIZ=1 THEN GOTO BIN1 IF BINSIZ>2 THEN GOTO ENDBIN IF BIN/BINSIZ = INT(BIN/BINSIZ) THEN GOTO OKBIN CALL OPENB READ #1,BINB CALL SHOWB WRITE #1,BINB GOTO ENDBIN OKBIN: BPLACE=BLACE[BIN,BIN] IF BPLACE="A" THEN BINSIZ=3:CALL OPENB:READ #1,BINX,BINB:CALL SHOWB:WRITE #1,BINX,BINB:GOTO ENDBIN IF BPLACE="B" THEN BINSIZ=3:CALL OPENB:READ #1,BINB :CALL SHOWB:WRITE #1,BINB:GOTO ENDBIN IF BPLACE="C" THEN BINSIZ=12:CALL OPENB:READ #1,BI5,BINB:CALL SHOWB:WRITE #1,BI5,BINB:GOTO ENDBIN IF BPLACE="D" THEN BINSIZ=24:CALL OPENB:READ #1,BI11,BINB:CALL SHOWB:WRITE #1,BI11,BINB:GOTO ENDBIN IF BPLACE="F" THEN BINSIZ=48:CALL OPENB:READ #1,BI23,BINB:CALL SHOWB:WRITE #1,BI23,BINB:GOTO ENDBIN IF BPLACE="G" THEN BINSIZ=96:CALL OPENB:READ #1,BI47,BINB:CALL SHOWB:WRITE #1,BI47,BINB:GOTO ENDBIN IF BPLACE="H" THEN BINSIZ=192:CALL OPENB:READ #1,BI95,BINB:CALL SHOWB:WRITE #1,BI95,BINB:GOTO ENDBIN IF BIN=192 THEN BINSIZ=191:CALL OPENB:BFILE=2:READ #1,BINB:CALL SHOWB:WRITE #1,BINB:GOTO ENDBIN IF BIN=384 THEN BINSIZ=386:CALL OPENB:READ #1,BI383,BINB:CALL SHOWB:WRITE #1,BI383,BINB:GOTO ENDBIN IF BIN=480 THEN BINSIZ=482:CALL OPENB:READ #1,BI479,BINB:CALL SHOWB:WRITE #1,BI479,BINB:GOTO ENDBIN GOTO ENDBIN OPENB: BREC=(INT(512/BINSIZ)*FILE1)-(INT(512/BINSIZ)) BFILE=INT((BIN/BINSIZ)+.99) BFILE=BFILE+BREC OPEN #1,FILE$,RANDOM,BINSIZ,BFILE RETURN SHOWB: ? TAB(17,1);"Binary Number is ";BINB USING "######" CHANGEB: BIN$=" " ? TAB(18,1);:INPUT "Enter number change ",BIN$ IF BIN$=" " THEN RETURN BINB=VAL(BIN$) RETURN BIN1: CALL OPENB READ #1,BINA ? TAB(17,1);"Binary Number is ";BINA BIN$=" " ? TAB(18,1);:INPUT "Enter number change ",BIN$ IF BIN$=" " THEN GOTO ENDBIN BINA=VAL(BIN$) WRITE #1,BINA ENDBIN: CLOSE #1 CALL OPENAT FILE1=STOR CALL MENU GOTO TOP NUMB: ? tab(1,LEW);"Floating Point " ASL=0:FLP=0:FLPS=0:STORE1=0:GASL=0:CFLP=0:FAREC=0 CALL BELOW'SCREEN CALL COMMAND INPUT "Enter Floating Point byte location ?",FLP IF FLP>507 THEN GOTO FIN2 IF FLP<1 THEN GOTO FIN2 CLOSE #1 FPLACE=PLACE[FLP,FLP] IF VAL(PLACE[FLP,FLP])<1 OR VAL(PLACE[FLP,FLP])>8 THEN GOTO NTIP IF VAL(PLACE[FLP,FLP])=0 THEN GOTO NTIP BPR=RECSIZ(FPLACE) STORE1=INT((FLP/BPR)+.99) FAREC=(INT(512/BPR)*STOR)-(INT(512/BPR)) STORE1=STORE1+FAREC CALL OPENIT WRITE #1,FLOAT GOTO FINISHED NTIP: BPR=64 FAREC=(INT(512/BPR)*STOR)-(INT(512/BPR)) IF FLP=108 THEN CALL OPE64:STORE1=2+FAREC:READ #1,FIL43,FLOAT:CALL BOTH:WRITE #1,FIL43,FLOAT:GOTO FINISHED IF FLP=117 THEN CALL OPE64:STORE1=2+FAREC:READ #1,FIL51,FLOAT:CALL BOTH:WRITE #1,FIL51,FLOAT:GOTO FINISHED IF FLP=216 THEN CALL OPE64:STORE1=4+FAREC:READ #1,FIL23,FLOAT:CALL BOTH:WRITE #1,FIL23,FLOAT:GOTO FINISHED IF FLP=286 THEN CALL OPE64:STORE1=5+FAREC:READ #1,FIL29,FLOAT:CALL BOTH:WRITE #1,FIL29,FLOAT:GOTO FINISHED IF FLP=348 THEN CALL OPE64:STORE1=6+FAREC:READ #1,FIL27,FLOAT:CALL BOTH:WRITE #1,FIL27,FLOAT:GOTO FINISHED IF FLP=396 THEN CALL OPE64:STORE1=7+FAREC:READ #1,FIL11,FLOAT:CALL BOTH:WRITE #1,FIL11,FLOAT:GOTO FINISHED IF FLP=440 THEN CALL OPE64:STORE1=8+FAREC:READ #1,FIL55,FLOAT:CALL BOTH:WRITE #1,FIL55,FLOAT:GOTO FINISHED IF FLP=507 THEN CALL OPE64:STORE1=8+FAREC:READ #1,FIL58,FLOAT:CALL BOTH:WRITE #1,FIL58,FLOAT:GOTO FINISHED PASIT: SHOW=PLACE[FLP,FLP] IF SHOW="A" THEN BPR=7 :CALL FIGUR:CALL RED1:GOTO FINISHED IF SHOW="B" THEN BPR=8 :CALL FIGUR:CALL RED1:GOTO FINISHED IF SHOW="C" THEN BPR=9 :CALL FIGUR:CALL RED1:GOTO FINISHED IF SHOW="D" THEN BPR=10:CALL FIGUR:CALL RED1:GOTO FINISHED IF SHOW="E" THEN BPR=11:CALL FIGUR:CALL RED1:GOTO FINISHED IF SHOW="F" THEN BPR=8 :CALL FIGUR:CALL RED2:GOTO FINISHED IF SHOW="G" THEN BPR=9 :CALL FIGUR:CALL RED2:GOTO FINISHED IF SHOW="H" THEN BPR=10:CALL FIGUR:CALL RED2:GOTO FINISHED IF SHOW="I" THEN BPR=11:CALL FIGUR:CALL RED2:GOTO FINISHED IF SHOW="J" THEN BPR=9 :CALL FIGUR:CALL RED3:GOTO FINISHED !9 W/3 IF SHOW="K" THEN BPR=10:CALL FIGUR:CALL RED3:GOTO FINISHED !10 W/3 IF SHOW="L" THEN BPR=11:CALL FIGUR:CALL RED3:GOTO FINISHED !11 W/3 IF SHOW="M" THEN BPR=10:CALL FIGUR:CALL RED4:GOTO FINISHED !10 W/4 IF SHOW="N" THEN BPR=11:CALL FIGUR:CALL RED4:GOTO FINISHED !11 W/4 IF SHOW="O" THEN BPR=11:CALL FIGUR:CALL RED5:GOTO FINISHED ! W/5 IF SHOW="P" THEN BPR=12:CALL FIGUR:CALL RED4:GOTO FINISHED !12 W/4 IF SHOW="Q" THEN BPR=22:CALL FIGUR:CALL RED7:GOTO FINISHED !22 W/7 IF SHOW="R" THEN BPR=12:CALL FIGUR:CALL RED1:GOTO FINISHED !12 W/1 IF SHOW="X" THEN BPR=12:CALL FIGUR:CALL RED2:GOTO FINISHED !12 W/2 IF SHOW="Y" THEN BPR=12:CALL FIGUR:CALL RED3:GOTO FINISHED !12 W/3 IF SHOW="Z" THEN BPR=16:CALL FIGUR:CALL RED5:GOTO FINISHED !16 W/5 GOTO FINISHED FINISHED: CLOSE #1 CALL OPENAT FIN2: FILE1=STOR CALL CLEAR'COMMAND CALL BELOW'SCREEN CALL MENU GOTO TOP OPENIT: OPEN #1,FILE$,RANDOM,BPR,STORE1 READ #1,FLOAT CALL SHOWIT CHANGEIT: FLO$=" " ? TAB(18,1);:INPUT "Enter number change ",FLO$ IF FLO$=" " THEN RETURN FLOAT=VAL(FLO$) RETURN SHOWIT: ? TAB(17,1);"Floating Point # is ";FLOAT RETURN FIGUR: OPEN #1,FILE$,RANDOM,BPR,STORE1 FAREC=(INT(512/BPR)*FILE1)-(INT(512/BPR)) STORE1=INT((FLP/BPR)+.99) STORE1=STORE1+FAREC RETURN RED1: READ #1,FIL1,FLOAT CALL SHOWIT:CALL CHANGEIT WRITE #1,FIL1,FLOAT RETURN RED2: READ #1,FIL2,FLOAT CALL SHOWIT:CALL CHANGEIT WRITE #1,FIL2,FLOAT RETURN RED3: READ #1,FIL3,FLOAT CALL SHOWIT:CALL CHANGEIT WRITE #1,FIL3,FLOAT RETURN RED4: READ #1,FIL4,FLOAT CALL SHOWIT:CALL CHANGEIT WRITE #1,FIL4,FLOAT RETURN RED5: READ #1,FIL5,FLOAT CALL SHOWIT:CALL CHANGEIT WRITE #1,FIL5,FLOAT RETURN RED7: READ #1,FIL7,FLOAT CALL SHOWIT:CALL CHANGEIT WRITE #1,FIL7,FLOAT RETURN RED43: READ #1,FIL43,FLOAT CALL SHOWIT:CALL CHANGEIT WRITE #1,FIL43,FLOAT RETURN RED51: READ #1,FIL51,FLOAT CALL SHOWIT:CALL CHANGEIT WRITE #1,FIL51,FLOAT RETURN RED23: READ #1,FIL23,FLOAT CALL SHOWIT:CALL CHANGEIT WRITE #1,FIL23,FLOAT RETURN RED29: READ #1,FIL29,FLOAT CALL CHANGEIT WRITE #1,FIL29,FLOAT RETURN RED27: READ #1,FIL27,FLOAT CALL SHOWIT:CALL CHANGEIT WRITE #1,FIL27,FLOAT RETURN RED11: READ #1,FIL11,FLOAT CALL SHOWIT:CALL CHANGEIT WRITE #1,FIL11,FLOAT RETURN RED55: READ #1,FIL55,FLOAT CALL SHOWIT:CALL CHANGEIT WRITE #1,FIL55,FLOAT RETURN RED58: READ #1,FIL58,FLOAT CALL SHOWIT:CALL CHANGEIT WRITE #1,FIL58,FLOAT RETURN OPE64: BPR=64 OPEN #1,FILE$,RANDOM,BPR,STORE1 RETURN BOTH: CALL SHOWIT CALL CHANGEIT RETURN CLEAR: ! Clear data screen FOR I=1 TO ROWS ? TAB(LEFTROW+I,LEFTCOL+1);SPACE$(COLUMNS); NEXT I RETURN CLEAR'COMMAND: ! clear Command line ? TAB(LEFTROW+11,5);SPACE$(40); ? TAB(LEFTROW+12,5);SPACE$(20); RETURN BELOW'SCREEN: ? TAB(LEFTROW+11,1);TAB(-1,10); RETURN FILL: ! Fill screen with data from file FOR I=1 TO ROWS ? TAB(LEFTROW+I,LEFTCOL+1);AR(I) NEXT I RETURN COMMAND: ! Print command line ? TAB(LEFTROW+11,7);SPACE$(40); ? TAB(LEFTROW+11,7);">"; XCALL NOECHO RETURN MENU: ! Print command menu RC=LEFTROW+12 CALL BELOW'SCREEN ? TAB(RC,10); ? TAB(RC+1,10);"T ";LOW;"TURN PAGE ";HIGH;"R ";LOW;"RETURN 1 PAGE ";HIGH;"H ";LOW;"HOME" ? TAB(RC+2,10);HIGH;"E ";LOW;"END OF FILE ";HIGH;"Q ";LOW;"QUIT ";HIGH;"M ";LOW;"READ MAPS OF FILE" ? TAB(RC+3,10);HIGH;"P ";LOW;"DISPLAY PAGE ";HIGH;"W ";LOW;"WORD REPLACE ";HIGH;"G ";LOW;"GLOBAL" ? TAB(RC+4,10);HIGH;"S ";LOW;"SEARCH FOR ";HIGH;"C ";LOW;"CHARACTER FILL ";HIGH;"O ";LOW;"PRINT" ? TAB(RC+5,10);HIGH;"N ";LOW;"FLOAT OR BINARY # ";HIGH;"A ";LOW;"ANOTHER FILE ";HIGH;"B ";LOW;"RECALL RECORD BACKUP";HIGH RETURN CALC: PRINT TAB(LEFTROW+2+ROWS,LEFTCOL-4)"+10"; PLINE[1,10]=" |" FOR I=1 TO ROWS ?TAB(I+LEFTROW,LEFTCOL-5);1+(I*COLUMNS)-COLUMNS NEXT I FOR I=1 TO 5 ? TAB(LEFTROW+ROWS+2,LEFTCOL+(I*10)+2);PLINE[1,10]; NEXT I ? TAB(LEFTROW+ROWS+2,LEFTCOL+2);PLINE[1,10]; RETURN BORDER: ! Print screen Borders ? TAB(LEFTROW-1,10);LOW;"Editing ";HIGH;FILE$ ? TAB(LEFTROW-1,43);LOW;"Page";HIGH IF OPTION="B" THEN MSG$="Backup" ELSE MSG$="NoBackup" ? TAB(1,30);MSG$; ? TAB(LEFTROW-1,58);LOW;"Records ";HIGH;RECS ? GRAPHON ? tab(LEFTROW,LEFTCOL); TLC; FOR W=1 TO COLUMNS KS[W,W]=HRZ NEXT W ? tab(LEFTROW,LEFTCOL+1);KS; ? TRC; ET=LEFTROW+1+ROWS for n = LEFTROW+1 to ET ? TAB(n,LEFTCOL);VRT ? tab(n,COLUMNS+LEFTCOL+1); VRT; next n ? tab(ET,LEFTCOL); BLC; ? tab(ET,LEFTCOL+1); KS; ? tab(ET,COLUMNS+LEFTCOL+1); BRC; ? TAB(LEFTROW,10); ? GRAPHOFF RETURN OPENAT: LOOKUP FILE$,ANSWER IF ANSWER > -1 THEN ? FILE$;" is not a Random file":END IF ANSWER = 0 THEN ? FILE$;" is not found":END RECS=ABS(ANSWER) OPEN #1,FILE$,RANDOM,512,FILE1 IF OPTION="B" THEN CALL ALLBACK FILE1=1 READ #1,ST ARRY=ST ! make ARRY the same RETURN CHECK: A=1 AGCHK: APA: FOR A=1 TO 8 FOR I = 1 TO 64 IF ASC(AR(A)[I,I])<32 OR ASC(AR(A)[I,I])>127 THEN AR(A)[I,I]="." NEXT I NEXT A RETURN NEWFILE: CALL CLEAR CALL BELOW'SCREEN CALL COMMAND CLOSE #1 FILE1=1:RECS=0 ? "Enter new filename to edit "; GOTO VERY MAPS: ? tab(1,LEW);"MAP Read " XCALL NOECHO CALL BELOW'SCREEN CALL COMMAND INPUT LINE "Enter Filename to Process MAP'S: ",MAPFILE$ IF MAPFILE$="" GOTO ENDMAP IF LEN(MAPFILE$)<7 MAPFILE$=MAPFILE$+".BAS" LOOKUP MAPFILE$,ANSWER IF ANSWER=0 ?TAB(17,1);MAPFILE$+" NOT FOUND";CHR(7);:INPUT "CR TO CONTINUE",CR$ : GOTO MAPS HOME: CALC = 0 : ROW = 16 ?TAB(15,1);TAB(-1,9);"Reading "+MAPFILE$;TAB(15,59);"Starts at Byte:";TAB(-1,10); ? TAB(16,20);"E"LOW"nd; "HIGH"H"LOW"ome; "HIGH"A"LOW"dd; "HIGH"N"LOW"o; "HIGH"C"LOW"lear Total;"HIGH OPEN #3, MAPFILE$, INPUT LROW=16 READ: PLINE = SPACE(70) : L=0 : NUM="0" INPUT LINE #3, PLINE XCALL STRIP,PLINE IF EOF(3) GOTO ENDMAPA IF INSTR(1,PLINE,"MAP")=0 GOTO READ PLINE = PLINE+SPACE(70-LEN(PLINE)) LROW = LROW + 1 IF LROW > 23 ?TAB(17,1);TAB(-1,10); : LROW = 17 ACCEPT: L=INSTR(1,PLINE,"(") IF L#0 ?TAB(LROW,1);TAB(-1,11);PLINE[1;70];TAB(-1,12);TAB(LROW,75);"<";:GOTO ACCX ?TAB(LROW,1);PLINE[1;70];TAB(LROW,75);"<"; ACCX: XCALL ACCEPT, CHAR ?TAB(LROW-1,74);TAB(-1,9);TAB(LROW,74);TAB(-1,9) IF CHR(CHAR) = "A" THEN GOTO CALCU IF CHAR = 13 OR CHAR = 10 GOTO READ IF CHR(CHAR) = "N" THEN GOTO READ IF CHR(CHAR) = "H" THEN CLOSE #3:GOTO HOME IF CHR(CHAR) = "E" THEN GOTO ENDMAPA IF CHR(CHAR) = "C" THEN CALC=0:? TAB(15,75);TAB(-1,9); IF CHAR = 30 THEN CLOSE #3 : GOTO HOME GOTO ACCEPT CALCU: C=INSTR(1,PLINE,"(") X=INSTR(1,PLINE,",") IF PLINE[X,X+2] = ",F," THEN NUM = "6" : GOTO TOTAL IF PLINE[X,X+1] = ",F" THEN NUM = "6" : GOTO TOTAL IF PLINE[X,X+2] = ",S," THEN START = X+3 : GOTO VALU IF PLINE[X,X+2] = ",B," THEN START = X+3 : GOTO VALU IF PLINE[X,X+2] = ",X," THEN START = X+3 : GOTO VALU NEXT X GOTO READ VALU: FOR X = START TO 70 IF PLINE[X,X] = "," OR PLINE[X,X] = " " THEN GOTO TOTAL NUM = NUM + PLINE[X,X] NEXT X GOTO READ TOTAL: XCALL STRIP,NUM CALC = CALC + VAL(NUM) IF CALC#0 ?TAB(15,75);TAB(-1,9);1+CALC-VAL(NUM) : NUM=" ":GOTO TOTX NUM=" " TOTX: IF L<1 GOTO READ GOTO ACCEPT ENDMAPA: CLOSE #3 ENDMAP: CALL MENU GOTO TOP BACKUP: CALL BELOW'SCREEN CALL CLEAR IF OPTION="B" THEN CALL TAKEBAK ARRY=BACKUP CALL CLEAR CALL CHECK CALL FILL CALL COMMAND PRINT "Do you wish to use this backup "; XCALL NOECHO XCALL ACCEPT,ANS ALL$=CHR(ANS) IF ALL$#"Y" THEN GOTO ENBAC ST=BACKUP WRITE #1,ST ? TAB(1,LEW);CHR(7);"Restored" ENBAC: CALL MENU GOTO TOP INCREASE: ! CALL BELOW'SCREEN ! CALL CLEAR ! CALL COMMAND ! ? FILE$" is "RECS" blocks long" ! INPUT "Increase how many records? "INCRE ! IF INCRE="" THEN GOTO ENINC ! ! ENINC: ! CALL MENU ! GOTO TOP ALLBACK: IF B=0 THEN BAKFIL$=FILE$+BXT$ ELSE BAKFIL$=FILE$[1,B-1]+BXT$ LOOKUP BAKFIL$,ANSWER1 IF ANSWER1>0 THEN ? CHR$(7);"Already exists as a sequential file":END IF ANSWER1<0 THEN KILL BAKFIL$ ALLOCATE BAKFIL$,RECS OPEN #2,BAKFIL$,RANDOM,512,FILE2 FILE1=0 BACK1: FILE1=FILE1+1 IF FILE1>RECS THEN GOTO ENBAK READ #1,ST FILE2=FILE1 WRITE #2,ST GOTO BACK1 ENBAK: CLOSE #2 RETURN TAKEBAK: OPEN #2,BAKFIL$,RANDOM,512,FILE1 READ #2,BACKUP CLOSE #2 RETURN