! VUERAN.BAS vue random files ! written by James A. Jarboe IV in October 1984 originally as RANVUE version 1.0 ! RANVUE.bas was developed around VUE.SBR written by David Pallman ! and donated to the AMUS system. ! It also used 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 ! ! VUERAN version 2.1 is a much better program written without the use of ! VUE.SBR so that this tool may be used on all AM100/whatever's. The only ! two XCALL's is ACCEPT.SBR and XPPN.sbr. ACCEPT.sbr is an XCALL subroutine ! that accepts any keyboard character as input, control characters included. ! XPPN.sbr is a subroutine that tells current DSK?: and PPN. VUERAN can run ! without XPPN but must have a subroutine that is similar to ACCEPT.SBR in ! that it accepts any key or control key as input from a terminal. ! Consists of: ! VUERAN.DO - DO file to invoke VUERAN ! VUERAN.BAS - BASIC listing of VUERAN ! VUERAN.RUN - RUN version of VUERAN ! VUERAN.DOC - Somewhat of a Documentation of VUERAN ! VUERAN.DAT - RANDOM data file to help learn VUERAN ! ! VUERAN.DAT is an instructional help random data file that can be VUERAN'd ! to learn how to use it. ! ! ACCEPT.SBR, and/or 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. ! 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 RANVUE Version 1.0 donated to AMUS could be some bugs ! 1a. was some bugs ! 2. 11-09-84 fixed floating point location in string PLACE for bytes 2-6 ! 3. 07-01-85 Rewritten as VUERAN to work much more like VUE ! added many more features ! 4. 09-05-85 added sort availability ! ! ! ! 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-printabler 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 ! ! If anyone does find a use for this program or has any comments ! Please write or call ! James A. Jarboe ! c/o Educational Filmstrips ! 1401 19th Street ! Huntsville TX, 77340 ! (409) 295-5767 ! ! ! ********************* VUERAN **************************** ! ! A program to vue random data files ! ! Invoked by typing VUERAN filename ! ! ************************************************************* ! ! MAP1 VERSION,S,30,"VUERAN Version 2.1" ! 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,"B" ! top left corner WAS B FOR FREEDOM100 MAP2 HRZ,S,1,"K" ! horizontal WAS K FOR FREEDOM MAP2 TRC,S,1,"C" ! top right corner WAS C FOR FREEDOM MAP2 VRT,S,1,"J" ! vertical WAS J FOR FREEDOM MAP2 BLC,S,1,"A" ! bottom left corner WAS A FOR FREEDOM MAP2 BRC,S,1,"D" ! bottom right corner WAS D FOR FREEDOM MAP1 KS,S,79 ! graphics hz line string MAP1 ALL$,S,20 ! 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 SHORT1,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 STOREM,S,80 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 ! weird array to figure MAP2 BI5,X,5 ! out binary number location MAP2 BI11,X,11 ! don't know how i did it MAP2 BI23,X,23 ! now but it works 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 ! used to locate binary number bytes 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 MAP1 MAIN$,X,64 MAP1 EDIT MAP2 ROW,F,6,1 MAP2 COL,F,6,1 MAP2 LONG,F,6,64 MAP2 SHORT,F MAP2 TYPE,S,1 MAP1 START,F,6,7 MAP1 KSIZ(3),F MAP1 KPOS(3),F MAP1 KORD(3),F MAP1 KTYP(3),F ! 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="1AFJMO123456182A3B1C526E1B842A1D36E21CG83B1A64CG125D8K162AFN1DH2381EIL2A1BFJP21I34CG1AXY3B12AJMQ1B245D1K32A 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$ ! accepts random filename for VUERAN.DO A=INSTR(1,FILE$,"/") ! looks for option mark 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 ! if your system does not have XPPN.SBR just remark out the next line 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: COL=1 CALL OPENAT CALL BORDER 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);"Vue " CALL CHECK CALL FILL A=0:IT=0 ACCEPT2: XCALL NOECHO MAIN$="" MAIN$=SIT(ROW) BYTLOC=((ROW-1)*64)+COL ? TAB(LEFTROW+10,20);BYTLOC;" " IF TABSIZE>1 THEN CALL LOCBYT ? TAB(LEFTROW+ROW,COL+START); XCALL ACCEPT,CHAR IF (COL=1 AND CHAR=8) THEN ROW=ROW-1:COL=64:GOTO ACCEPT3 IF CHAR=30 THEN FILE1=1:ROW=1:COL=1:GOTO TOP IF CHAR=5 THEN FILE1=RECS:GOTO TOP IF CHAR=13 THEN ROW=ROW+1:COL=1:GOTO ACCEPT3 IF CHAR=10 THEN ROW=ROW+1:GOTO ACCEPT3 IF CHAR=11 THEN ROW=ROW-1:GOTO ACCEPT3 IF CHAR=14 THEN CALL ENDL:GOTO ACCEPT3 IF CHAR=18 THEN FILE1=FILE1-1:GOTO TOP IF CHAR=20 THEN FILE1=FILE1+1:GOTO TOP IF CHAR=127 THEN COL=COL-1:CALL ERASE:GOTO ACCEPT4 IF CHAR=4 THEN CALL DELETE:GOTO ACCEPT4 IF CHAR=12 THEN COL=COL+1:GOTO ACCEPT3 IF CHAR=8 THEN COL=COL-1:GOTO ACCEPT3 IF CHAR=7 THEN CALL TABLOC:GOTO ACCEPT3 IF CHAR=23 THEN CALL WRD:GOTO ACCEPT3 IF CHAR=25 THEN CALL EOL:GOTO ACCEPT4 IF CHAR=26 THEN CALL ALL:GOTO ACCEPT4 IF CHAR=21 THEN COL=1:GOTO ACCEPT3 IF CHAR=9 THEN CALL TABLOC:GOTO ACCEPT3 IF CHAR=27 THEN GOTO PAS IF CHAR=29 THEN GOTO PAS IF CHAR=6 THEN GOTO NUMBCHOIC IF CHAR=2 THEN GOTO NUMBCHOIC IF CHAR<32 THEN GOTO ACCEPT2 MAIN$[COL,COL]=CHR$(CHAR) ACCEPT4: SIT(ROW)[1,64]=MAIN$[1,64] COL=COL+1 ACCEPT3: WRITE #1,ST IF COL>64 THEN ROW=ROW+1:COL=1 IF COL<1 THEN ROW=ROW-1:COL=64 IF COL>64 AND CHAR=12 THEN ROW=ROW+1:COL=1 IF ROW<1 THEN ROW=8:FILE1=FILE1-1:GOTO TOP IF ROW>8 THEN ROW=1:FILE1=FILE1+1:GOTO TOP GOTO ACCEPT2 ERASE: IF COL<2 THEN MAIN$[1,1]=" ":COL=1:GOTO ERASE2 MAIN$=MAIN$[1,COL-1]+" "+MAIN$[COL+1,LEN(MAIN$)] ERASE2: ? TAB(LEFTROW+ROW,START+COL);" "; COL=COL-1 IF COL=0 THEN ? TAB(LEFTROW+ROW,START+COL+1);:RETURN ?TAB(LEFTROW+ROW,START+COL); RETURN DELETE: IF COL=1 THEN MAIN$[1,1]=" ":RETURN MAIN$=MAIN$[1,COL-1]+" "+MAIN$[COL+1,LEN(MAIN$)] DELET1: ? TAB(LEFTROW+ROW,START+COL);" "; COL=COL-1 ? TAB(LEFTROW+ROW,START+COL); RETURN EOL: IF COL=1 THEN MAIN$=SPACE$(64):GOTO EOL1 MAIN$=MAIN$[1,COL-1]+SPACE$(64) EOL1: ? TAB(LEFTROW+ROW,START+COL);SPACE$(65-COL) COL=COL-1 ? TAB(LEFTROW+ROW,START+COL); RETURN ALL: MAIN$=SPACE$(64) COL=1 ? TAB(LEFTROW+ROW,START+COL);MAIN$; ? TAB(LEFTROW+ROW,START+COL); RETURN ENDL: COL=LEN(MAIN$) IF COL=0 THEN COL=1 ? TAB(LEFTROW+ROW,COL+START); RETURN WRD: COL=INSTR(COL+1,MAIN$,CHR$(32)) IF COL=0 THEN COL=65:RETURN IF MAIN$[COL+1,COL+1]=CHR$(32) THEN GOTO WRD COL=COL+1 ? TAB(LEFTROW+ROW,START+COL); RETURN PAS: XCALL ECHO CALL COMMAND'MENU CALL COMMAND ALL$="" INPUT "",ALL$ CALL CLEAR'COMMAND IF ALL$="" THEN CALL MENU:GOTO TOP IF UCS(ALL$[1,5])="PRINT" THEN GOTO PRIN IF UCS(ALL$[1,4])="SORT" THEN GOTO SORT IF UCS(ALL$[1,1])="T" THEN GOTO TAB IF UCS(ALL$[1,1])="Q" THEN GOTO OUTOFF IF UCS(ALL$[1,1])="F" THEN GOTO FILLIT IF UCS(ALL$[1,1])="R" THEN GOTO REPLACE IF UCS(ALL$[1,1])="P" THEN GOTO PAGE IF UCS(ALL$[1,1])="G" THEN GOTO REPLACE IF UCS(ALL$[1,1])="S" THEN GOTO REPLACE IF UCS(ALL$[1,1])="B" THEN GOTO BACKUP IF UCS(ALL$[1,1])="N" THEN GOTO NUMBCHOIC IF UCS(ALL$[1,1])="A" THEN GOTO NEWFILE IF UCS(ALL$[1,1])="M" THEN GOTO MAPS IF UCS(ALL$[1,1])="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 ? TAB(LEFTROW+(ROWS/2)+1,38);FILE1 WRITE #1,ST NEXT FILE1 FILE1=PG1 ENFIL: CALL MENU GOTO TOP REPLACE: IF UCS(ALL$[1,7])="REPLACE" THEN RP$=ALL$[9,LEN(ALL$)]:GOTO PASR1 IF UCS(ALL$[1,6])="GLOBAL" THEN RP$=ALL$[8,LEN(ALL$)]:GOTO PASR1 IF UCS(ALL$[1,6])="SEARCH" THEN RP$=ALL$[8,LEN(ALL$)]:GOTO REPAS: CALL BELOW'SCREEN ? TAB(1,LEW);TAB(-1,9); IF UCS(ALL$[1,1])="G" THEN MSG$="Global " ELSE MSG$="Replace " IF UCS(ALL$[1,1])="S" THEN MSG$="Search for " ? TAB(1,LEW);MSG$ CALL COMMAND ? MSG$; RP$="" INPUT "",RP$ IF RP$="" THEN GOTO REPEND IF UCS(ALL$[1,1])="S" THEN GOTO REPAS PASR1: ? 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 UCS(ALL$[1,1])="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 UCS(ALL$[1,1])="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 UCS(ALL$[1,1])="S" AND CNG#24 THEN WI=ROWS:NEXT WI:GOTO NOSE IF UCS(ALL$[1,1])="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 UCS(ALL$[1,1])="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 IF UCS(ALL$[1,4])="PAGE" THEN ANS$=ALL$[6,LEN(ALL$)]:GOTO CLRP ? TAB(1,LEW);"Page " CALL COMMAND ? "See Page"; INPUT ,ANS$ CLRP: 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 "VUERAN.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,"VUERAN.LST" FILE1=1 ENPRI: CALL MENU GOTO TOP SORT: ? TAB(1,LEW);"Sorting " CALL COMMAND IF TABSIZE<2 THEN INPUT "Tabsize must be set for record size",YN$ IF TABSIZE<2 THEN GOTO ENSORT FOR I=1 TO 3 KSIZ(I)=0:KPOS(I)=0:KORD(I)=0:KTYP(I)=0 NEXT I FOR I=1 TO 3 CALL BELOW'SCREEN CALL COMMAND ? "Enter size in bytes of key ";I;" "; INPUT "",KSIZ(I) IF KSIZ(1)<1 THEN GOTO ENSORT IF KSIZ(I)<1 THEN I=3:GOTO SRTNXI ? " Enter the first character position of key ";I;" "; INPUT "",KPOS(I) ? " Enter CR for ascending sequence (1) for descending sequence "; INPUT "",KORD(I) ? " Enter data type (0) string (1) floating point (2) binary "; INPUT "",KTYP(I) SRTNXI: NEXT I Z=INT(512/TABSIZE) RECNT=(Z*RECS) CALL BELOW'SCREEN CALL COMMAND ? ? " Sorting ";RECNT;" records at a record size of ";TABSIZE;"." FOR I= 1 TO 3 IF KSIZ(I)<1 THEN I=3:GOTO SRTNXI2 ? "Key "I" is ";KSIZ(I);" bytes long. ";KPOS(I);" is position 1, sorted "; IF KORD(I)<1 THEN ? "in ascending order" ELSE ? "in descending order" ? " as "; IF KTYP(I)=0 THEN ? "String data" IF KTYP(I)=1 THEN ? "Floating point data" IF KTYP(I)=2 THEN ? "Binary data" SRTNXI2: NEXT I ? : INPUT "Is data correct ? ",YN$ IF UCS(YN$[1,1])="N" THEN GOTO SORT CALL CLEAR ? TAB((LEFTROW+4),LEFTCOL+15);"Sorting Data......Please Wait" CLOSE #1 OPEN #1,FILE$,RANDOM,TABSIZE,FILE1 XCALL BASORT,1,RECNT,TABSIZE,KSIZ(1),KPOS(1),KORD(1),KSIZ(2),KPOS(2),KORD(2),KSIZ(3),KPOS(3),KORD(3),KTYP(1),KTYP(2),KTYP(3) CLOSE #1 CALL OPENAT ENSORT: CALL MENU GOTO TOP NUMBCHOIC: STOR=FILE1 ? tab(1,LEW);"Number type " CALL BELOW'SCREEN CALL COMMAND IF CHAR=6 THEN GOTO NUMSZ IF CHAR=2 THEN BIN=((ROW-1)*64)+COL :GOTO BISZ 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 BISZ: ? TAB(10);:INPUT "Enter Binary number size ",BINSIZ IF BINSIZ="" THEN GOTO ENDBIN CLOSE #1 IF BINSIZ<1 THEN GOTO ENDBIN 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 NUMSZ: ASL=0:FLPS=0:STORE1=0:GASL=0:CFLP=0:FAREC=0 IF CHAR=6 THEN FLP=((ROW-1)*64)+COL 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);">"; RETURN MENU: ! Print command menu RC=LEFTROW+13 CALL BELOW'SCREEN ? TAB(RC,1);" Screen Editing Commands:" ? TAB(RC+1,1);LOW;" home........";HIGH;"(^^)";LOW;" delete eol...";HIGH;"(^Y)";LOW;" page down...";HIGH;"(^T)";LOW;" end of line..";HIGH;"(^N)" ? TAB(RC+2,1);LOW;" page up.....";HIGH;"(^R)";LOW;" end of file..";HIGH;"(^E)";LOW;" next word...";HIGH;"(^W)";LOW;" floting pt...";HIGH;"(^F)" ? TAB(RC+3,1);LOW;" delete..";HIGH;"(rubout)";LOW;" binary #.....";HIGH;"(^B)";LOW;" delete char.";HIGH;"(^D)";LOW;" next match...";HIGH;"(^X)" ? TAB(RC+4,1);LOW;" delete line.";HIGH;"(^Z)";LOW;" command mode ";HIGH;"(ESC)";LOW;" next record.";HIGH;"(^G)" RETURN COMMAND'MENU: RC=LEFTROW+13 CALL BELOW'SCREEN ? TAB(RC,1);" Command mode:" ? TAB(RC+1,1);HIGH;"Q"LOW;")uit";HIGH;" F";LOW;")ill with ";HIGH;"S";LOW;")earch for";HIGH;" B";LOW;")ackup file "; ? TAB(RC+2,1);HIGH;"R";LOW;")eplace with";HIGH;" A";LOW;")nother file ";HIGH;"G";LOW;")lobal change ";HIGH;"T";LOW;")ab record set "; ? TAB(RC+3,1);HIGH;"P";LOW;")age to ";HIGH;"PRINT";LOW;" data ";HIGH;"M";LOW;")ap read "; ? TAB(RC+4,1);HIGH;"N";LOW;")umber type ";HIGH;"SORT";LOW;" data file ";HIGH RETURN BORDER: ! Print screen Borders ? TAB(LEFTROW-1,10);LOW;"Editing ";HIGH;FILE$ ? TAB(LEFTROW-1,43);LOW;"Page";HIGH ? TAB(LEFTROW+10,7);LOW;"Current byte ";HIGH; IF OPTION="B" THEN MSG$="Backup" ELSE MSG$="NoBackup" ? TAB(1,30);MSG$; ? TAB(LEFTROW-1,58);LOW;"Blocks ";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 > 0 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: FOR I = 1 TO 64 IF ASC(AR(1)[I,I])<32 OR ASC(AR(1)[I,I])>127 THEN AR(1)[I,I]="." IF ASC(AR(2)[I,I])<32 OR ASC(AR(2)[I,I])>127 THEN AR(2)[I,I]="." IF ASC(AR(3)[I,I])<32 OR ASC(AR(3)[I,I])>127 THEN AR(3)[I,I]="." IF ASC(AR(4)[I,I])<32 OR ASC(AR(4)[I,I])>127 THEN AR(4)[I,I]="." IF ASC(AR(5)[I,I])<32 OR ASC(AR(5)[I,I])>127 THEN AR(5)[I,I]="." IF ASC(AR(6)[I,I])<32 OR ASC(AR(6)[I,I])>127 THEN AR(6)[I,I]="." IF ASC(AR(7)[I,I])<32 OR ASC(AR(7)[I,I])>127 THEN AR(7)[I,I]="." IF ASC(AR(8)[I,I])<32 OR ASC(AR(8)[I,I])>127 THEN AR(8)[I,I]="." NEXT I ! 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 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 UCS(ALL$[1,1])#"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 ";FILE$" by how many blocks? ",INCRE ! IF INCRE="" THEN GOTO ENINC ! open FILE$.NEW the size of RECS+INCRE ! read FILE$.dat ! from record 1 to end ! write it to FILE$.NEW ! tell terminal where we are ! write "]" to end of FILE$.NEW ! close both files ! rename newfile to oldfile and oldfile to old 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 MAPS: ? tab(1,LEW);"MAP Read " CALL BELOW'SCREEN ? TAB(15,1);"Enter Selection" ? "1. Total per MAP1's" ! input 1 ? "2. Byte location for MAP1's" ! input 2 CALL COMMAND INPUT LINE "",SHORT1 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 OPEN #3,MAPFILE$,INPUT HOME: CALC = 0 : MROW = 15 ?TAB(15,1);TAB(-1,9);TAB(14,40);LOW;"Reading ";HIGH;MAPFILE$;!TAB(15,59);"Starts at Byte:";TAB(-1,10); IF SHORT1="2" THEN SELECT=1 ELSE SELECT=0 XCALL ECHO MAPTOP: CALL GETIT IF EOF(3)=1 THEN GOTO ENDMAPA IF MROW>21 THEN MROW=15:?;:INPUT "Cr to continue",i$ CALL CHECK'MAP IF WELL<1 THEN GOTO MAPTOP IF SHORT1=2 THEN CALL LONG1:GOTO MAPTOP IF L=2 THEN CALL FIX:L=0 CALL CHECK'MAP1 IF STOREM="" THEN CALL FIX IF WELL1>0 AND TOTAL>0 THEN CALL LASTONE CALL FIGUREMAP IF WELL1>0 AND TOTAL>0 THEN CALL THISONE GOTO MAPTOP ENDMAPA: ? TAB(23,1);:INPUT "Cr to continue",i$ ? TAB(14,40);TAB(-1,9); CLOSE #3 ENDMAP: CALL MENU GOTO TOP THISONE: CALL FIX L=2 LASTONE: MROW=MROW+1:? TAB(MROW,1); ? STOREM;" ";TOTAL;" " CALL FIX TOTAL=0 RETURN FIGUREMAP: TOT=0 S=INSTR(1,PLINE,",S,") IF S>0 THEN SW=S:CALL TOTS:W=S F=INSTR(1,PLINE,",F" ) IF F>0 THEN CALL TOTF:W=F B=INSTR(1,PLINE,",B,") IF B> 0 THEN SW=B:CALL TOTS:W=B X=INSTR(1,PLINE,",X,") IF X> 0 THEN SW=X:CALL TOTS:W=X PAR1=INSTR(1,PLINE,"(") PAR2=INSTR(1,PLINE,")") MULTI=1 IF (PAR1>0 AND PAR10 THEN PLINE[TB,TB]=" ":TB=TB+1:GOTO TB RETURN FIX: STOREM=PLINE[1,20] STOREM=STOREM+SPACE$(20-LEN(STOREM)) RETURN CHECK'MAP: WELL=INSTR(1,PLINE,"MAP") RETURN CHECK'MAP1: WELL1=INSTR(1,PLINE,"MAP1") RETURN LONG1: CALL CHECK'MAP1 CALL FIX IF WELL1>0 THEN TOTAL=0 CALL FIGUREMAP IF WELL1>0 AND TOTAL>0 THEN CALL DOONE:RETURN IF TOTAL < 1 THEN MROW=MROW+1:?TAB(MROW,1);STOREM;SPACE$(15);:RETURN DOONE: MROW=MROW+1:? TAB(MROW,1); ? STOREM;" ";(TOTAL-TOT)+1;" " IF WELL1>0 AND TOTAL>0 THEN TOTAL=0 RETURN TAB: CALL BELOW'SCREEN CALL COMMAND INPUT "Enter Record size ";TABSIZE IF TABSIZE> 512 THEN ? TAB(LEFTROW+11,7);"Come on ! That's not possible":GOTO TAB ? TAB(LEFTROW+10,29);LOW;"Record size";HIGH;TABSIZE;" ";LOW;"Location Record # "HIGH IF TABSIZE<2 THEN ? TAB(LEFTROW+10,29);TAB(-1,9); TABFIN: CALL MENU GOTO TOP LOCBYT: TABBPR=int(512/TABSIZE) WIR=int((BYTLOC/TABSIZE)+.99999) WHREC=BYTLOC-((WIR-1)* TABSIZE) if WHREC=0 then WHREC=TABS FILREC=((TABBPR*FILE1)-TABBPR)+WIR ! WIR=record number within the 512 byte page ! FILREC=record number within the file IF WIR>TABBPR THEN FILREC=0 ? TAB(LEFTROW+10,40);TABSIZE;TAB(LEFTROW+10,54);WHREC" ";TAB(LEFTROW+10,69);FILREC" " IF FILREC=0 THEN ? TAB(LEFTROW+10,69);"not valid" RETURN TABLOC: IF TABSIZE<2 THEN ROW=8:COL=64:RETURN nextrec=(BYTLOC-WHREC)+TABSIZE WHATLINE=INT(nextrec/64)+1 PLACECURS=nextrec-((WHATLINE-1)*64) ROW=WHATLINE COL=PLACECURS+1 IF ROW> 8 THEN COL=1 RETURN