! 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 c
hange ",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
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"
? 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