!STUVUE.bas- Student VUE
!Author James A. Jarboe IV
! Educational Filmstrips
! 1401 19th Street
! Huntsville, TX 77340
! 409-295-5767
! GR/AM
! Copyright 1986
! for use for AMUS members at no cost
! inspired by a Teacher in NM that has dumb students bright enough to
! yank the bright boy's program into his own program
!
! a program that allows the user to vue a sequential file without
! being able to yank another students programs in
!
! limitations
! 1. 120 lines of text only ( could be increased if you want to)
! 2. No TAB key to tab over (IE TAB key don't work)
! 3. No Centering of Text
! 4. Cursor down or Cursor up always puts cursor at first column
! 5. No Search
! 6. No Move
! 7. No Copy
! 8. Not much of anything but text editing
! 9. only 79 columns of text
!10. ^Z does delete a line but does not squash lines together this is
! done when the program finishes out (ie. it don't output blank lines)
! advantages
! 1. Will compil program on G
! 2. Will finish program on F
! 3. Will Quit program on Q
! 4. Will give nasty message on Y
! 5. most control chars work like VUE
! All proper respect and homage is now given to VUE, it's
! authors, publishers, dealers, and users
!
! The program starts here:
MAP1 LINES(120),S,79 ! 120 lines of text
MAP1 ST'LINES(120),S,79 ! storage for a ^B move
MAP1 CRT ! all the fancy stuff for STUVUE.SBR
MAP2 ROW,S,2 ! row we are on
MAP2 FIL1,S,1," " ! filler
MAP2 COL,S,2 ! column ( always 1)
MAP2 FIL2,S,1," " !
MAP2 TYPE,S,1,"*" ! string data as per STUVUE.SBR
MAP2 FIL3,S,1," " !
MAP2 MINS,S,2,"00" ! minimum length
MAP2 FIL4,S,1," " !
MAP2 MAXS,S,2,"79" ! Maximum length
MAP2 FIL5,S,1," "
MAP2 FLAG,S,2,"AT" ! Auto field and trap ^C
MAP2 FIL6,S,1," " !
MAP1 PLINE,S,79 ! DATA string
MAP1 KEY,B,2 ! key to what ^ char was hit
MAP1 EXT,S,4,".BAS" ! BASIC file extension
MAP1 MAXO,F,6,120 ! number of lines of text
VUE: !
INPUT "",FILE$ ! get infor from STUVUE.DO
DOT=INSTR(1,FILE$,".") ! look for dot on extension
IF DOT>0 THEN GOTO GOTEXT ! we got dot
FILE$=FILE$+EXT ! no dot then give ext
GOTEXT:
LOOKUP FILE$,ANSWER ! look see if file is there
IF ANSWER<0 THEN GOTO MISMAT ! random file is a nono
IF ANSWER=0 THEN CALL MAKEIT ! no sequential file ..make it
OPENIT:
R=1 ! row =1
OPEN #1,FILE$,INPUT ! open the file as input
FOR I=1 TO MAXO ! 1 to number of lines
PLINE="" ! nothing
INPUT LINE #1,PLINE ! get the line
IF EOF(1)=1 THEN LST'LINE=I :I = MAXO:GOTO NOMO ! end of file
IF INSTR(1,PLINE,CHR$(9)) THEN CALL CLEAN ! clear TABS
LINES(I)=PLINE ! data to memory storage
NOMO:
NEXT I ! do it again
CLOSE #1 ! close the file
BEGIN:
? TAB(-1,0); ! clear screen
ROW="01" ! row=1
COL="01" ! column = 1
SCR=0 ! first screen (1st 24 lines)
FOR I=1 TO 24
? TAB(I,1);LINES(I); ! print em
NEXT I
TOP:
IF R<1 THEN CALL OLD'SCR ! previous screen
IF R>24 THEN CALL NEW'SCR ! next screen
ROW=R USING "#Z" ! make right row a string
PLINE=LINES(R+SCR) ! give STUVUE.sbr the string
XCALL STUVUE,""+CRT+" ",PLINE,KEY
IF KEY=1 THEN GOTO ESCAPE ! escape key hit
LINES(R+SCR)=PLINE ! data back to memory
IF R+SCR>LST'LINE THEN LST'LINE=R+SCR ! number of last line
IF KEY=2 THEN R=R-1 ! up arrow
IF KEY=3 THEN R=R+1 ! down arrow
IF KEY=0 THEN R=R+1 ! carriage return
IF KEY=6 THEN R=1:CALL OLD'SCR ! previous page
IF KEY=5 THEN R=1:CALL NEW'SCR ! next page
IF KEY=7 THEN CALL NEWLIN ! control B
IF KEY=8 THEN CALL END'OF ! control E
IF KEY=9 THEN GOTO BEGIN ! control ^^ or home key
GOTO TOP ! lets do it again
ESCAPE: ! escape key module
? TAB(-1,0);
? TAB(1,1);"StudentVUE 1.0A Status: NoYank"
? TAB(3,1);"Editing "FILE$
? TAB(5,1);">"
ROW="05"
COL="02"
PLINE=""
XCALL STUVUE,""+CRT+" ",PLINE,KEY
IF UCS(PLINE)[1,1]="F" THEN GOTO FINISH
IF UCS(PLINE)[1,1]="Q" THEN GOTO QUIT
IF UCS(PLINE)[1,1]="G" THEN GOTO FINISH
IF KEY=1 THEN GOTO BEGIN
IF PLINE[1,1]="Y" THEN CALL NO'YANK
GOTO ESCAPE
FINISH:
KILL FILE$ ! erase the file
OPEN #1,FILE$,OUTPUT ! make a new one same name
FOR I=1 TO MAXO !
IF LINES(I)="" THEN GOTO NXI ! dont print nothing to the file
? "."; ! make user think we doing something
? #1,LINES(I) ! print data to file
NXI:
NEXT I ! do it again
CLOSE #1 ! close it
IF UCS(PLINE[1,1])="F" GOTO QUIT! is this a finish or a Go
OPEN #1,"STUVUE.CMD",OUTPUT ! Its a Go !!
? #1,":R" ! command file revive
? #1,":<" !
? #1,">" !
? #1,"COMPIL "FILE$ ! compil it
? #1,":S" ! Silence Shhhh!
? #1,"ERASE STUVUE.CMD" ! erase the command file
? #1,":R" ! back to AMOS
CLOSE #1 ! close the command file
CHAIN "STUVUE.CMD" ! do it
QUIT:
? ! print a line
END ! ththththat's all FOLKS !
NEW'SCR:
R=1:SCR=SCR+24 ! Screen gets add 24 lines
IF SCR>MAXO-24 THEN SCR=SCR-24 ! no more than Maximum lines
? TAB(-1,0); ! clear
FOR I=1 TO 24 !
? TAB(I,1);LINES(I+SCR); ! print new lines
NEXT I !
RETURN ! go back to where we wus
OLD'SCR:
? TAB(-1,0); ! clear
R=1:SCR=SCR-24 ! previous 24 lines
IF SCR<0 THEN SCR=0 ! make sure no less thatn 1st 24
FOR I=1 TO 24
? TAB(I,1);LINES(I+SCR); ! print em
NEXT I !
RETURN ! go back..go back
MAKEIT:
? FILE$;" does not exist. Do you wish to create it? ";
INPUT "",YN ! well !
IF UCS(YN)="N" THEN GOTO QUIT ! ok then quit
PLINE="***" ! make file look like MODEM
OPEN #1,FILE$,OUTPUT ! open it
! FOR I=1 TO MAXO ! 1 to maximum lines
? #1,PLINE ! print stars
! NEXT I !
CLOSE #1 ! close me
RETURN ! to whence we came
MISMAT:
? FILE$;" is a random file" ! dummy
END
CLEAN:
TB=INSTR(1,PLINE,CHR$(9)) ! oh boy a tab
IF TB=0 RETURN ! oh better .. no tab
IF TB=1 AND LEN(PLINE)<2 THEN PLINE=" ":RETURN
IF TB=1 THEN PLINE=" "+PLINE[TB+1,LEN(PLINE)]:GOTO CLEAN
PLINE=PLINE[1,TB-1]+" "+PLINE[TB+1,LEN(PLINE)]
GOTO CLEAN ! look for another
RETURN ! get back jack
NO'YANK:
ON ERROR GOTO BACK ! in case the little devil tries
? ! a control C
? " AMOS Rule #1"
? " Thou Shalt not Yank Another's Program"
? " And Claim it As Your Own Work "
FOR I=1 TO 1000
FOR A=1 TO 50
NEXT A
? CHR$(7); ! yell it baby
NEXT I
RETURN
BACK:
RESUME BA !
BA:
RETURN
NEWLIN:
FOR NL=R+SCR TO MAXO-1 ! fancy switch for ^B
ST'LINES(NL)=LINES(NL) ! storage gets current
NEXT NL
LINES(R+SCR)="" ! ^B line is blank
FOR NL=R+SCR TO MAXO-1
LINES(NL+1)=ST'LINES(NL) ! line ahead gets storage behind
NEXT NL
? TAB(R,1);SPACE$(79); ! print the newline
FOR NL=R TO 24
LONG=LEN(LINES(NL+SCR+1))-LEN(LINES(NL+SCR))
IF LONG<0 THEN LONG=1
? TAB(NL,1);LINES(NL+SCR);SPACE$(LONG);
NEXT NL
RETURN
END'OF:
SCR=0 ! screen = 1st one
FOR I=1 TO 5 ! add 24 to 24 until greater
IF LST'LINE>SCR+24 THEN SCR=SCR+24 ! than last line of file
NEXT I !
? TAB(-1,0); ! clear screen
FOR R=1 TO 24 ! print last screen
? TAB(R,1);LINES(R+SCR);
NEXT R
R=LST'LINE-SCR ! cursor at last line
RETURN