NOTES: REM------------------------------------------------ REM VIEWFILE.BAS 1.03 REM File viewing utility REM by REM Charles Stross REM ¤ 1987 REM PUBLIC DOMAIN REM------------------------------------------------ REM Modification history: REM REM 1.00 -- basic file viewer -- 05/10/87 REM 1.01 -- with jump to EOF -- 12/10/87 REM 1.02 -- with temp file on M: REM and fast random access -- 12/10/87 REM 1.03 -- parse COMMAND$ for REM optional tabify -- 13/10/87 INITIALIZE: REM-----INITIALIZE ALL VALUES---------------------- REM-----NEEDED LATER IN PROG----------------------- TAB.SPC% = 0 T.LINE$ = " " VIEWFILE$ = "" NUM.STREAMS% = 2 ROUNDS% = 0 OFFSET% = 1 ESC$ = CHR$(27) CR$ = CHR$(13) ERA.LINE$ = ESC$+"M" UP$ = ESC$+"A" SCREEN.WIDTH% = 90 FUNCTIONS: REM-----INITIALIZE FUNCTIONS------------------------------- DEF PROCESS.LINE$(RAWTEXT$,TAB.SPC%) REM-----Expand embedded tabs----------------------- REM-----and return a processed line---------------- COUNT% = 1 TEMP$ = "" CH$ = " " WHILE (COUNT% <= LEN(RAWTEXT$) ) CH$ = MID$(RAWTEXT$,COUNT%,1) COUNT% = COUNT% + 1 IF ASC(CH$)<>9 THEN TEMP$ = TEMP$ + CH$ \ ELSE TEMP$ = TEMP$ + STRING$(TAB.SPC%," ") WEND TEMP2$ = TEMP$ IF (LEN(TEMP2$) > (SCREEN.WIDTH%-2)) THEN \ TEMP2$ = LEFT$(TEMP2$,(SCREEN.WIDTH%-2)) PROCESS.LINE$ = TEMP2$ RETURN FEND START: REM-----PRINT COPYRIGHT ETCETERA------------------- PRINT PRINT "VIEWFILE V 1.02 (¤ Charles Stross, 1987)" PRINT GET.FILE: INTERIM$ = COMMAND$ IF (INTERIM$ = "") THEN\ PRINT:\ INPUT "Please enter file to view ";INTERIM$: \ INTERIM$ = UCASE$(INTERIM$): \ VIEWFILE$ = INTERIM$ \ ELSE VIEWFILE$ = INTERIM$ PARSE.INTERIM: REM-----READ COMMAND TAIL AND CHECK FOR [/] ------- REM-----IF PRESENT, PARSE CONTENTS FOR COMMANDS --- REM-----IF CORRUPT, CET A NEW INTERIM$------------- TAIL.START%=MATCH("[",INTERIM$,1) IF TAIL.START%>0 THEN \ TAIL.END% = MATCH("]",INTERIM$,1): \ VIEWFILE$ = LEFT$(INTERIM$, (TAIL.START%-1)): \ ELSE GOTO FIRST.CHECK: \ IF ((TAIL.END%=0) AND (TAIL.START%>1)) THEN \ PRINT "Error -- ']' missing": \ GOTO GET.FILE: IF TAIL.START%=(TAIL.END%-1) THEN \ PRINT "No parameters specified": \ GOTO FIRST.CHECK: REM-----TAIL.START% = start of command string ([) - REM-----TAIL.END% = end of command string (]) ----- TAIL$ = MID$(INTERIM$,(TAIL.START%+1),(TAIL.END%-(TAIL.START%+1))) ARG1$ = UCASE$(LEFT$(TAIL$,1)) IF (ARG1$ = "T" AND ((TAIL.END%-TAIL.START%)>2) ) THEN \ ARG1.VAL$ = MID$(TAIL$,2,1): \ ARG1.VAL% = ASC(ARG1.VAL$): \ ELSE PRINT "Recoverable Error; command tail parameter is unknown" : \ GOTO FIRST.CHECK: IF (ARG1.VAL%<48) OR (ARG1.VAL%>57) THEN \ PRINT "Recoverable Error; no tab size specified ": \ GOTO FIRST.CHECK: \ ELSE TAB.SPC% = VAL(ARG1.VAL$) FIRST.CHECK: REM-----MAKE SURE FILE IS PRESENT------------------ IF END #1 THEN ABORT1: OPEN VIEWFILE$ AS 1 CLOSE 1 SECOND.CHECK: REM-----LOCATE END OF FILE------------------------- REM-----( RETURN IT FOR E-END OPTION -------------- REM-----( CALLED ONCE ONLY IN EACH RUN.) ---------- REM-----AND CREATE TEMP FILE ON M: ---------------- IF END # 1 THEN ABORT1: OPEN VIEWFILE$ AS 1 CREATE "M:VIEWTEMP.$$$" RECL 90 AS 2 END.LINE% = 0 DUMMY.FLAG$ = "Continue" PRINT "Thinking "; IF END #1 THEN SHUT: REM------Two options -- hinging on parsed command line WHILE (TAB.SPC%>0) READ #1 ; LINE JUNK$ JUNK$ = PROCESS.LINE$(JUNK$,TAB.SPC%) JUNK$ = LEFT$(JUNK$,SCREEN.WIDTH%) PRINT USING "&"; #2 ; JUNK$ END.LINE% = END.LINE% + 1 PRINT "."; WEND REM-----Default -- TAB.SPC% = 0 if not specified WHILE (TAB.SPC%=0) READ #1 ; LINE JUNK$ JUNK$ = LEFT$(JUNK$,SCREEN.WIDTH%) PRINT USING "&"; #2 ; JUNK$ END.LINE% = END.LINE% + 1 PRINT "."; WEND SHUT: CLOSE 1, 2 PRINT "Temp. file created" VIEWFILE$ = "M:VIEWTEMP.$$$" PRINT.PAGE: REM-----PRINT A PAGE ; ANY PAGE-------------------- REM DEFAULT TO PAGE #1------------------------- REM IF END # 1 THEN ABORT2: OPEN VIEWFILE$ RECL 90 AS 1 PRINT: FOR LINE.NUM% = OFFSET% TO (OFFSET%+27) STEP 1 READ #1, LINE.NUM% ; LINE T.LINE$ PRINT T.LINE$ NEXT LINE.NUM% CLOSE 1 ROUNDS% = ROUNDS% + 1 GET.CHOICE: REM-----GET FILE DIRECTIONS------------------------ REM IF (ROUNDS% < 2) \ THEN PRINT : \ PRINT "Enter command [F-orward | B-ack | S-tart | E-nd | Q-uit]";:\ INP.CHAR% = CONCHAR%: \ ELSE PRINT: \ PRINT "Enter [F-orward | B-ack | S-tart | E-nd | Q-uit]";:\ INP.CHAR% = CONCHAR% PRINT ERA.LINE$;UP$;UP$;CR$; CHAR$ = UCASE$(CHR$(INP.CHAR%)) IF (CHAR$ = "Q") THEN GOTO SHUT.DOWN: IF (CHAR$ = "S") THEN OFFSET% = 1 IF (CHAR$ = "F") THEN OFFSET% = OFFSET%+28 IF (CHAR$ = "E") THEN OFFSET% = END.LINE%-28 IF (CHAR$ = "B") AND (OFFSET% < 28) THEN OFFSET% = OFFSET% IF (CHAR$ = "B") AND (OFFSET% >= 28) THEN OFFSET% = OFFSET% - 28 EXCEPT% = MATCH(CHAR$,"Q F B E S",1): \ IF (EXCEPT%=0) THEN GOTO GET.CHOICE:\ Exception checking GET.IT: REM-----NOW GET IT--------------------------------- REM GOTO PRINT.PAGE: ABORT1: PRINT CHR$(27); PRINT "Unable to open file "; VIEWFILE$ PRINT "Please make sure that the file is present on the same" PRINT "disc drive ,or the AFN includes a drive letter: " PRINT "otherwise VIEWFILE will be unable to find it." GOTO TERMINUS: ABORT2: PRINT "*** End of file ";VIEWFILE$ CLOSE 1 GOTO GET.CHOICE: SHUT.DOWN: OPEN VIEWFILE$ AS 1 DELETE 1 TERMINUS: PRINT: END  GOTO GET.CHOICE: SHUT.DOWN: OPEN VIEWFILE$ AS 1 D