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