RECORDFORMAT RF(INTEGER ADR, TYPE, START, END) ! ! ! DYNAMICROUTINESPEC C CALL(STRING (31)COMMAND, STRING (255)PARAMS) SYSTEMROUTINESPEC C CASTOUT(STRINGNAME S) SYSTEMROUTINESPEC C CONNECT(STRING (31)FILE, INTEGER MODE, HOLE, PROTECT, RECORD (RF)NAME R, INTEGERNAME FLAG) SYSTEMROUTINESPEC C DISCONNECT(STRING (31)FILE, INTEGERNAME FLAG) SYSTEMSTRINGFNSPEC C FAILUREMESSAGE(INTEGER FLAG) SYSTEMSTRINGFNSPEC C ITOS(INTEGER N) SYSTEMROUTINESPEC C LOAD(STRING (31)COMMAND, INTEGER I, INTEGERNAME FLAG) EXTERNALROUTINESPEC C PROMPT(STRING (255)S) SYSTEMINTEGERFNSPEC C PSTOI(STRING (63)S) EXTERNALINTEGERFNSPEC C UINFI(INTEGER ENTRY) EXTERNALSTRINGFNSPEC C VDUS(INTEGER N) SYSTEMROUTINESPEC C ZCOPY2(STRING (255)PARAMS, INTEGER SILENT, INTEGERNAME FLAG) SYSTEMROUTINESPEC C ZVIEW(STRING (255)PARMS) SYSTEMROUTINESPEC C UCTRANSLATE(INTEGER AD, LEN) ! ! ! ! INTEGERFN LOCATE(INTEGER START, END, STRING (80)TEXT) INTEGER L, A, LIM, FIRST CH LONGINTEGER SD L = LENGTH(TEXT) A = ADDR(TEXT) + 1 LIM = END - START -L RESULT = 0 IF LIM <= 0 ! FIRST CH = CHARNO(TEXT, 1) ! (32 << 8) *LB_FIRST CH ! *LDTB_X'18000000' *LDB_L *LDA_A *STD_SD ! *LDTB_X'58000000' *LDB_LIM *LDA_START SCAN: *SWNE_L =DR *JCC_8,<NOT FOUND> *STD_TOS *LDTB_SD *LSD_SD *CPS_L =DR ,32,0 *JCC_8,<FOUND> *LD_TOS *MODD_1 *J_<SCAN> NOT FOUND: RESULT = 0 FOUND: *LSS_TOS *EXIT_-64 END ; ! LOCATE ! ! ! ROUTINE PRINTCHS(STRING (255)S) INTEGER J CYCLE J = 1, 1, LENGTH(S) PRINTCH(CHARNO(S, J)) REPEAT END ; ! PRINTCHS ! ! ! ROUTINE RSTRG(STRINGNAME S) INTEGER J S = "" CYCLE READ SYMBOL(J) RETURN IF J = NL S = S . TOSTRING(J) REPEAT END ! ! ! ROUTINE W(STRING (255)S) PRINTSTRING(S) NEWLINE END ; ! W ! ! ! ROUTINE SYMBOLS(INTEGER N, SYMBOL) WHILE N > 0 CYCLE PRINTSYMBOL(SYMBOL) N = N - 1 REPEAT END ; ! SYMBOLS ! ! ! EXTERNALROUTINE VLOOK(STRING (255)FILE) INTEGER I, I0, J, CH, STOP, SET CONSTINTEGER TOP PAGE = 250 INTEGERARRAY K(1:TOPPAGE) INTEGER PAGE, MAXPAGE, LINES STRING (63)VDUS1 STRING (255)LINE, Z, PREVIOUS RECORD (RF)R ! ! ! ROUTINE ANOTHER INTEGER LINES, I, I0 IF MAXPAGE + 1 = TOP PAGE START W("File > " . ITOS(MAXPAGE) . " pages") SET = 1 RETURN FINISH ! LINES = 0 MAXPAGE = MAXPAGE + 1 I0 = K(MAXPAGE) CYCLE I = I0, 1, R_ADR+R_END-1 K(MAXPAGE+1) = I AND RETURN IF LINES = 20 CH = BYTEINTEGER(I) CH = NL IF CH = 12 ! IF CH = NL START LINES = LINES + 1 I0 = I + 1 FINISH ELSE START IF I = I0 + 79 START LINES = LINES + 1 IF LINES = 20 START K(MAXPAGE+1) = I0 RETURN FINISH FINISH FINISH REPEAT ! K(MAXPAGE+1) = R_ADR + R_END SET = 1 W("SET set") END ; ! ANOTHER ! ! ! CONNECT(FILE, 1, 0, 0, R, J) RETURN UNLESS J = 0 RETURN UNLESS R_TYPE = 3 ! I0 = R_ADR+R_START K(1) = I0 K(2) = 0 SET = 0; ! true maxpage not yet known MAXPAGE = 1 LINES = 0 CYCLE I = I0, 1, R_ADR+R_END-1 IF LINES = 20 START K(2) = I EXIT FINISH ! CH = BYTEINTEGER(I) CH = NL IF CH = 12; ! a newpage character ! IF CH = NL START LINES = LINES + 1 I0 = I + 1 FINISH ELSE START IF I = I0 + 79 START LINES = LINES + 1 IF LINES = 20 START K(2) = I0 EXIT FINISH FINISH FINISH REPEAT ! IF K(2) = 0 {tiny file} C THEN K(2) = R_ADR+R_END AND SET = 1 ! PAGE = 1 VDUS1 = VDUS(1) . TOSTRING(13) PREVIOUS = "T" STOP = 0 ! D: PRINTCHS(VDUS1) PRINTSTRING(FILE) IF PAGE > 1 START LINE = "/" . ITOS(PAGE) SPACES(80-LENGTH(FILE)-LENGTH(LINE)) PRINTSTRING(LINE) FINISH NEWLINE SYMBOLS(80, '-') NEWLINE ! CYCLE J = K(PAGE), 1, K(PAGE+1)-1 CH = BYTEINTEGER(J) CH = NL IF CH = 12 PRINTSYMBOL(CH) IF STOP > 0 START STOP = STOP - 1 IF CH = NL EXIT IF STOP = 0 FINISH REPEAT ! IF PAGE < MAXPAGE OR SET = 0 C THEN W("...more") C ELSE W("End of file") PROMPT("Vlook: ") R: RSTRG(LINE) ! IF LINE = "1" OR LINE = "!" C THEN LINE = PREVIOUS C ELSE PREVIOUS = LINE ! IF LINE = "" START IF PAGE = MAX PAGE START -> R IF SET = 1 ANOTHER FINISH PAGE = PAGE + 1 -> D FINISH ! UCTRANSLATE(ADDR(LINE)+1, LENGTH(LINE)) ! -> D IF LINE = "=" ! IF LINE = "-" START -> R IF PAGE = 1 PAGE = PAGE - 1 -> D FINISH ! IF LINE = "/" START ANOTHER WHILE SET = 0 -> R IF PAGE = MAXPAGE PAGE = MAXPAGE -> D FINISH ! IF LINE = "T" START -> R IF PAGE = 1 STOP = 3 PAGE = 1 -> D FINISH ! RETURN IF LINE = "E" OR LINE = "Q" OR LINE = "R" ! IF LINE = "V" START ZVIEW("SUBSYS.VIEWBASE") -> D FINISH ! IF LINE = "?" OR LINE = "HELP" START PRINTCHS(VDUS1); ! CLEAR SCREEN ! W("= display all current page, eg after reading this page") W(" just press the 'return' key to get the next page") W("- previous page") W("/n continuation page n / alone goes to end") W("!com obey com, any command") W("F< > output to file or device") W("Q, R or E to exit") W("T top of file") W("V file same as VIEW file V alone for VIEW spec") W(" ") W("*** VIEW thinks your terminal is a " . VDUS(0)) W("*** use command TERMINALTYPE, outside VIEW, to change it") -> R FINISH ! -> R IF LENGTH(LINE) = 1 ! IF CHARNO(LINE, 1) = '/' START LINE -> ("/") . LINE J = PSTOI(LINE) -> R IF J < 1; ! not a number -> R IF J = PAGE; ! already on display ANOTHER WHILE SET = 0 AND J > MAXPAGE -> R IF J > MAXPAGE PAGE = J -> D FINISH ! IF LINE -> ("F<") . LINE . (">") START ZCOPY2("T#OUT," . LINE, 0, J) J = 219 IF J = -7 OR J = -10 W(FAILUREMESSAGE(J)) UNLESS J = 0 -> R FINISH ! IF CHARNO(LINE, 1) = '!' START LINE -> ("!") . LINE Z = "" IF UINFI(16) = 1 START ; ! brackets ON IF LINE -> LINE . ("(") . Z START J = LENGTH(Z) LENGTH(Z) = J - 1 IF J > 0 AND CHARNO(Z, J) = ')' FINISH FINISH ELSE START Z = "" UNLESS LINE -> LINE . (" ") . Z FINISH ! CASTOUT(LINE); ! command -> R IF LINE = "" CASTOUT(Z) UNLESS Z = ""; ! parameters ! IF UINFI(26) = 0 START ; ! old loader LOAD(LINE, 0, J) -> R UNLESS J = 0 FINISH CALL(LINE, Z) -> R FINISH ! IF LINE -> Z . ("V ") . LINE AND Z = "" START ZVIEW(LINE) -> D FINISH ! J = LOCATE(K(PAGE+1), R_ADR+R_END, LINE) W("not found") AND -> R IF J = 0 ANOTHER WHILE K(MAXPAGE+1) < J CYCLE I = 1, 1, MAXPAGE IF K(I+1) > J >= K(I) START PAGE = I -> D FINISH REPEAT -> R END ; ! PLUHELP ENDOFFILE ENDOFFILE