mirror of
https://github.com/PDP-10/stacken.git
synced 2026-03-01 09:21:15 +00:00
400 lines
11 KiB
Plaintext
400 lines
11 KiB
Plaintext
TITLE .HELPR SUBROUTINE TO OUTPUT SYS:??????.HLP %7F(56)
|
|
SUBTTL A.W.LYONS/AWL/PFC/BPK/LCR/PY 27-Oct-87
|
|
|
|
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1971,1981,1984,1986,1988.
|
|
;ALL RIGHTS RESERVED.
|
|
|
|
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
|
|
;ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
|
|
;INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
|
|
;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
|
|
;OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY
|
|
;TRANSFERRED.
|
|
;
|
|
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
|
|
;AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
|
|
;CORPORATION.
|
|
;
|
|
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
|
|
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
|
|
|
|
VERSION==7 ; MAJOR VERSION NO
|
|
VMINOR==6 ; MINOR VERSION NO
|
|
EDITNO==56 ; EDIT NUMBER
|
|
VWHO==0 ; WHO LAST EDITED
|
|
|
|
%HELPR==:BYTE(3)VWHO(9)VERSION(6)VMINOR(18)EDITNO ; SET HELPER VERSION #
|
|
PAGE
|
|
|
|
COMMENT ~
|
|
|
|
REVISION HISTORY
|
|
|
|
|
|
%4(35) JAN 1972
|
|
|
|
36 (10-9713) Handle sequenced files and I/O errors
|
|
37 (10-11567) Handle HLP:
|
|
40 Add alternate entry 'HELPER' for FORTRAN/COBOL
|
|
41 Expand sorry message
|
|
|
|
%5(41) Dec, 73
|
|
42 BPK
|
|
JSYSize HELPER and other assorted sundries.
|
|
|
|
43 BPK
|
|
Create label HLPVER to store helper version instead
|
|
of using .JBVER
|
|
44 BPK
|
|
Search universal HLP20 for definition of TOPS20
|
|
|
|
45 BPK
|
|
Implement new JSYS convention (ie. jsys%)
|
|
|
|
46 BPK
|
|
Replace HLPVER with %HELPR and make it accessible
|
|
to LINK.
|
|
|
|
47 PY 18-Aug-81
|
|
Change the version number to match SCAN and WILD. Remove
|
|
the reference to HLPR20, use an IFNDEF to default TOPS-10
|
|
version. Change to more informative edit history style.
|
|
|
|
50 LCR
|
|
If HLP: does not exist, try SYS: before giving error
|
|
message. Note: This edit was originally installed as
|
|
edit 42 in 1974.
|
|
|
|
51 LCR
|
|
Use monitor supplied /MESSAGE setting. Note: This edit
|
|
was installed as edit 43 in 1974.
|
|
|
|
52 PY 6-Oct-81
|
|
Re-install the previous two edits, which were lost about
|
|
eight years ago. Also change edit history format retroactive
|
|
to start of this version, and indicate edit level and date
|
|
last version was shipped.
|
|
|
|
%7D(52) JAN, 1982
|
|
|
|
53 SPR 10-34975 DRB 29-Jan-85
|
|
Use non-privileged FILOP.s to lookup the help file (unless [1,2])
|
|
so that we don't accidentally read something we shouldn't should
|
|
we be running with JACCT.
|
|
|
|
54 None BAH 9-Aug-85
|
|
Do copyrights.
|
|
|
|
55 SPR 10-35295 DRB 26-Sep-85
|
|
.RBCNT is being setup one too large.
|
|
|
|
%7E(54) AUG, 1985
|
|
|
|
56 None. BAH 27-Oct-87
|
|
The ECOPY and BCOPY macros are for TOPS10 only. Put the IFE TOPS20
|
|
assembly parameter around them.
|
|
|
|
*** END REVISION HISTORY
|
|
~
|
|
PAGE
|
|
|
|
COMMENT ~
|
|
|
|
HELPER is a subroutine used to output help texts(HLP:/SYS:??????.HLP)
|
|
onto device TTY. It was designed as a tool for the various
|
|
modules of the MULTI-PROGRAMMING-BATCH project.
|
|
|
|
Entered with the sixbit module name in AC1 via:
|
|
|
|
PUSHJ P,.HELPR
|
|
return to here at end of HELPER
|
|
|
|
or MOVEI 16,[,,['module']]
|
|
PUSHJ 17,HELPER
|
|
|
|
HELPER requires eighteen locations (ten in -20 native mode) on
|
|
the push-down list on which to store and from which to
|
|
restore user AC'S and use as FILOP. argument blocks. In -20
|
|
mode these locations are also used for the text buffer during I/O.
|
|
~
|
|
|
|
PAGE
|
|
SUBTTL ASSIGNMENTS
|
|
;ACCUMULATORS
|
|
|
|
T1=1 ;AC1
|
|
T2=2 ;AC2
|
|
T3=3 ;AC3
|
|
T4=4 ;AC4
|
|
T5=5 ;AC5
|
|
AP=16 ;ARG LIST POINTER
|
|
P=17 ;STACK POINTER
|
|
|
|
;DEVICE CHANNELS
|
|
|
|
DSK=0
|
|
|
|
ENTRY .HELPR,HELPER
|
|
|
|
SALL
|
|
|
|
IFNDEF TOPS20,<TOPS20==0> ;[47] DEFAULT TO TOPS-10 STYLE
|
|
|
|
IFE TOPS20,<SEARCH MACTEN,UUOSYM> ; GET -10 MONITOR SYMBOLS
|
|
IFN TOPS20,<SEARCH MACSYM,MONSYM> ; GET -20 MONITOR SYMBOLS
|
|
|
|
|
|
IFE TOPS20,<
|
|
|
|
.BCOPY
|
|
COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1971,1988. ALL RIGHTS RESERVED.
|
|
\; END COPYRIGHT MACRO
|
|
.ECOPY
|
|
|
|
>; END IFE TOPS20
|
|
|
|
|
|
IFE TOPS20,<
|
|
TWOSEG
|
|
RELOC 400000>
|
|
|
|
PAGE
|
|
SUBTTL TOPS-10 HELPER CODE
|
|
IFE TOPS20,< ;START -10 NATIVE HELPER
|
|
STKALC==1+<<.BFCTR+1>+<.FOLEB+1>+<.RBEXT+1>> ;[53] NUMBER OF STACK WORDS TO ZERO
|
|
|
|
HELPER: MOVE T1,@(AP) ;FETCH FIRST ARG
|
|
|
|
.HELPR: PUSH P,T2 ;SAVE ACS THAT ARE USED
|
|
PUSH P,T3
|
|
PUSH P,T4
|
|
PUSH P,.JBFF ;SAVE .JBFF
|
|
MOVE T2,.JBREL ;GET ACTUAL CORE SIZE
|
|
HRLM T2,(P) ;SAVE FOR RESTORATION
|
|
SETZ T2, ;TO LOAD BUFFER HEADER INTO PDL
|
|
MOVEI T3,STKALC ;[53] GET THE NUMBER OF STACK LOCS WE WANT
|
|
PUSH P,T2 ;[53] GET A ZEROED LOCATION
|
|
SOJG T3,.-1 ;[53] LOOP FOR ALL WE NEED
|
|
MOVEI T4,-<STKALC-1>(P) ;[53] POINT AT OUR FILOP. BLOCK
|
|
MOVX T3,%LDFFA ;[53] THEN, ASK THE MONITOR
|
|
GETTAB T3, ;[53] WHO FULL FILE ACCESS IS
|
|
MOVE T3,[1,,2] ;[53] THIS SHOULDN'T HAPPEN
|
|
GETPPN T2, ;[53] GET OUR PPN
|
|
JFCL ;[53] THIS REALLY COULD HAPPEN
|
|
CAME T2,T3 ;[53] ARE WE ALLOWED LOTS OF ACCESS?
|
|
SKIPA T2,[DSK,,.FORED] ;[53] NO, DON'T TRY FOR PRIVED READ
|
|
MOVE T2,[FO.PRV!<DSK,,.FORED>] ;[53] YES, TURN ALL OUR PRIVS ON
|
|
MOVEM T2,.FOFNC(T4) ;[53] STORE THE FUNCTION WORD
|
|
MOVX T2,.IOASC ;[53] GET THE I/O MODE
|
|
MOVEM T2,.FOIOS(T4) ;[53] STORE IN THE FILOP. BLOCK
|
|
HRRZI T2,-2(P) ;[53] POINT AT THE INPUT BUFFER HEADER
|
|
MOVEM T2,.FOBRH(T4) ;[53] STORE IT
|
|
HRRZI T2,1 ;[53] GET ONE BUFFER FOR INPUT
|
|
MOVEM T2,.FONBF(T4) ;[53] STORE IN THE FILOP. BLOCK
|
|
MOVEI T3,.FOLEB+1(T4) ;[53] POINT AT THE LOOKUP BLOCK
|
|
MOVEM T3,.FOLEB(T4) ;[53] STORE IN THE FILOP. BLOCK
|
|
MOVX T2,.RBEXT ;[53,55] GET THE LENGTH OF THE LOOKUP BLOCK
|
|
MOVEM T2,.RBCNT(T3) ;[53] STORE THE LENGTH
|
|
SETZM .RBPPN(T3) ;[53] DEFAULT THE PPN
|
|
MOVEM T1,.RBNAM(T3) ;[53] STORE THE FILENAME
|
|
HRLZI T2,'HLP' ;[53] GET THE EXTENSION
|
|
MOVEM T2,.RBEXT(T3) ;[53] STORE IT
|
|
|
|
GETHLP: SKIPA T3,['HLP '] ;GET HLP:
|
|
GETSYS: MOVSI T3,'SYS' ;OR GET SYS:
|
|
MOVEM T3,.FODEV(T4) ;[53] STORE THE DEVICE NAME
|
|
MOVE T2,T4 ;[53] COPY THE FILOP. BLOCK POINTER
|
|
HRLI T2,.FOLEB+1 ;[53] GET THE LENGTH OF THE FILOP. BLOCK
|
|
FILOP. T2, ;[53] TRY FOR THE FILE
|
|
SKIPA ;[53] CAN'T GET IT - SEE WHY NOT
|
|
JRST MORE ;GOOD--GO READ FILE
|
|
CAIE T2,ERSNF% ;SFD NOT FOUND?
|
|
CAIN T2,ERSLE% ;SEARCH LIST EMPTY?
|
|
JRST AGAIN ;ONE OF THE ABOVE
|
|
CAIN T2,ERNSD% ;[53] NO SUCH DEVICE?
|
|
JRST AGAIN ;[53] YES, TRY ANOTHER
|
|
CAILE T2,ERIPP% ;INCORRECT PPN OR FILE NOT FOUND?
|
|
JRST SORRY ;HORRIBLE DISK ERROR
|
|
AGAIN: MOVX T2,.IOASC ;[53] CLEAR PHYSICAL BIT
|
|
AOS T3,-3(P) ;TRY NEXT CASE
|
|
TRNE T3,1 ;SEE IF ODD
|
|
TXO T2,UU.PHS ;YES--TRY PHYSICAL ONLY
|
|
MOVEM T2,.FOIOS(T4) ;[53] STORE THE NEW I/O MODE WORD
|
|
JRST @[GETHLP ;TRY HLP: AGAIN
|
|
GETSYS ;THEN LOGICAL SYS:
|
|
GETSYS ;THEN PHYSICAL SYS:
|
|
SORRY]-1(T3) ;THEN GIVE UP
|
|
|
|
MORE: IN DSK, ;GET A BUFFER
|
|
JRST GETCHR ;OUTPUT THE STUFF
|
|
STATZ DSK,IO.ERR ;SEE IF ERRORS
|
|
JRST IOERR ;YES--ISSUE MESSAGE
|
|
STATZ DSK,IO.EOF ; YET?
|
|
JRST DONE ;YES, ALL DONE!
|
|
|
|
GETCHR: SOSGE T2,(P) ;
|
|
JRST MORE
|
|
IBP -1(P) ;INCR CHAR POINTER
|
|
MOVE T1,@-1(P) ;GET THIS WORD
|
|
TRNE T1,1 ;SEE IF SEQUENCE NUMBER
|
|
JRST [AOS -1(P) ;YES--SKIP 5 MORE CHARS
|
|
MOVNI T1,5 ; ..
|
|
ADDM T1,(P) ; ..
|
|
JRST GETCHR]
|
|
LDB T1,-1(P)
|
|
OUTCHR T1
|
|
JRST GETCHR
|
|
|
|
IOERR: PJSP T1,HLRERR ;[51] ISSUE ERROR
|
|
ASCIZ /IOE/ ;[51]
|
|
ASCIZ \ I/O error reading help file\ ;[51]
|
|
|
|
SORRY: PJSP T1,HLRERR ;[51] ISSUE ERROR
|
|
ASCIZ /NHF/ ;[51]
|
|
ASCIZ / No .HLP file on SYS:/ ;[51]
|
|
|
|
HLRERR: OUTSTR [ASCIZ /%/] ;[51] ISSUE WARNING
|
|
GTMSG. T2 ;[51] GET /MESSAGE LEVEL
|
|
TXNE T2,JW.WPR ;[51] SEE IF PREFIX
|
|
OUTSTR [ASCIZ /HLR/] ;[51] YES--INDICATE FROM HELPER
|
|
TXNE T2,JW.WPR ;[51] SEE IF PREFIX
|
|
OUTSTR (T1) ;[51] YES--GIVE ACTUAL MESSAGE PREFIX
|
|
TXNN T2,JW.WFL ;[51] SEE IF FIRST
|
|
JRST DONE ;[51] NO--SKIP TEXT
|
|
OUTSTR 1(T1) ;[51] YES--ISSUE MESSAGE
|
|
OUTSTR [ASCIZ/; I'm sorry, I can't help you/]
|
|
|
|
DONE: OUTSTR [ASCIZ/
|
|
/]
|
|
RELEAS DSK,
|
|
SUB P,[STKALC,,STKALC] ;[53] RESTORE PDL
|
|
POP P,T1 ;RETRIEVE .JBFF IN "T1"
|
|
HRRZM T1,.JBFF ;RESTORE .JBFF
|
|
HLRZ T1,T1 ;RETRIEVE .JBCOR
|
|
CORE T1,
|
|
JFCL ;IGNORE ERROR
|
|
POP P,T4
|
|
POP P,T3
|
|
POP P,T2
|
|
POPJ P, ;RETURN TO CALLER
|
|
|
|
XLIST ;LITERALS
|
|
LIT
|
|
LIST
|
|
RELOC
|
|
> ;END OF -10 NATIVE HELPER
|
|
|
|
PAGE
|
|
SUBTTL TOPS-20 HELPER CODE
|
|
IFN TOPS20,< ; START -20 NATIVE HELPER
|
|
|
|
HELPER: MOVE T1,@(AP) ; FETCH FIRST ARG
|
|
|
|
.HELPR: PUSH P,T2 ; SAVE ACS
|
|
PUSH P,T3
|
|
PUSH P,T4
|
|
PUSH P,T5
|
|
MOVEI T5,6 ; MAX NUMBER OF CHARS IN FILE NAME
|
|
MOVE T2,[POINT 6,T1] ; POINTER TO SIXBIT FILE NAME
|
|
MOVE T3,[POINT 7,FILENM] ; POINTER TO ASCII DESTINATION
|
|
GETASC: ILDB T4,T2 ; GET A SIXBIT CHAR.
|
|
ADDI T4,40 ; MAKE IT ASCII
|
|
IDPB T4,T3 ; AND PUT IT IN THE ASCII BUFFER
|
|
SOJG T5,GETASC ; DO IT TILL ALL ARE DONE
|
|
SETZ T4,
|
|
IDPB T4,T3 ; PUT IN A ZERO BYTE
|
|
SETZB T2,T3 ; ZERO THESE ACS
|
|
PUSH P,T2 ; WE WILL USE THESE 6 WORDS ON THE
|
|
PUSH P,T2 ; STACK AS THE BUFFER TO CONSERVE
|
|
PUSH P,T2 ; SPACE (THIS DOES NOT CHANGE SPECS.)
|
|
PUSH P,T2
|
|
PUSH P,T2
|
|
PUSH P,T2
|
|
MOVX T4,GJ%OLD ; JUST AN EXISTING FILE
|
|
MOVEM T4,GTJBLK ; PUT IT IN THE GTJFN BLOCK
|
|
MOVEI T3,4 ; NUMBER OF ATTEMPTS AT FINDING FILE
|
|
GETHLP: MOVE T4,[POINT 7,[ASCIZ/HLP:/]] ; GET THE HLP: POINTER
|
|
MOVEM T4,GTJBLK+2 ; PUT IT IN THE GTJFN BLOCK
|
|
JRST GETIT
|
|
GETSYS: MOVE T4,[POINT 7,[ASCIZ/SYS:/]] ; GET THE SYS: POINTER
|
|
MOVEM T4,GTJBLK+2 ; PUT IT IN THE GTJFN BLOCK
|
|
GETIT: HRROI T2,FILENM ; GET POINTER TO MODULE NAME IN T2
|
|
MOVEI T1,GTJBLK ; LONG FORM GTJFN BLOCK
|
|
GTJFN% ;[45] GET THE FILE
|
|
JRST AGAIN ; LOSE TEMPORARILY
|
|
HRRM T1,JFN ; SAVE THE JFN
|
|
MOVE T2,[FLD(7,OF%BSZ)!OF%RD] ; BYTE SIZE OF 7 AND READ ONLY
|
|
OPENF% ;[45] OPEN THE FILE FOR READ ACCESS
|
|
JRST IOERR ; SOMETHING WEIRD HAPPENED
|
|
|
|
PRINT: MOVE T1,JFN ; GET JFN
|
|
HRROI T2,-5(P) ; POINTER FOR TEXT BUFFER
|
|
MOVEI T3,^D25 ; HELP TEXT BUFFER SIZE * 5
|
|
SIN% ;[45] GET 5 WORDS
|
|
ERJMP DONE ; DON'T CARE ABOUT THIS ERROR
|
|
SETZ T1, ; NEED A ZERO BYTE
|
|
IDPB T1,T2 ; MAKE SURE ZERO THE LAST BYTE
|
|
HRROI T1,-5(P)
|
|
PSOUT% ;[45] OUTPUT ASCIZ STRING
|
|
JRST PRINT ; IF THERE'S MORE, GO GET IT
|
|
|
|
AGAIN: MOVE T4,GTJBLK ; GET THE FLAGS
|
|
TXOE T4,GJ%PHY ; TURN ON PHYSICAL DEVICE BIT
|
|
TXZ T4,GJ%PHY ; CLEAR PHYSICAL BIT
|
|
MOVEM T4,GTJBLK ; PUT IT BACK IN GTJFN BLOCK
|
|
SOJLE T3,SORRY ; SEE IF ANY DEVICES LEFT
|
|
CAIG T3,2 ; TIME TO TRY SYS:?
|
|
JRST GETSYS ; YES, USE SYS:
|
|
JRST GETHLP ; NO, USE HLP:
|
|
|
|
DONE: SETZ T1, ; NEED A ZERO BYTE
|
|
IDPB T1,T2 ; MAKE SURE ZERO THE LAST BYTE
|
|
HRROI T1,-5(P)
|
|
PSOUT% ;[45] OUTPUT ASCIZ STRING
|
|
HRROI T1,CRLF ; OUTPUT CRLF
|
|
PSOUT% ;[45]
|
|
MOVE T1,JFN
|
|
CLOSF% ;[45] GET RID OF THE JFN
|
|
JFCL ; NOT LIKELY
|
|
LEAVE: SUB P,[6,,6] ; FIX UP STACK POINTER
|
|
POP P,T5 ; RESTORE ACS
|
|
POP P,T4
|
|
POP P,T3
|
|
POP P,T2
|
|
POPJ P, ; AND RETURN TO CALLER
|
|
|
|
IOERR: HRROI T1,[ASCIZ/%HLREOH Error opening help file/]
|
|
PSOUT% ;[45]
|
|
MOVE T1,JFN ; WE STILL HAVE TO RELEASE THE JFN
|
|
CLOSF% ;[45]
|
|
JFCL ; NOT LIKELY
|
|
JRST SORRYX ; FINISH WITH SORRY MESSAGE
|
|
SORRY: HRROI T1,[ASCIZ/%HLRNHF No .HLP file on SYS:/]
|
|
PSOUT% ;[45]
|
|
SORRYX: HRROI T1,[ASCIZ/; I'm sorry I can't help you/]
|
|
PSOUT% ;[45]
|
|
HRROI T1,CRLF
|
|
PSOUT% ;[45]
|
|
JRST LEAVE ; WE FAILED, BUT NOTHING ELSE TO DO
|
|
|
|
CRLF: ASCIZ /
|
|
/
|
|
FILENM: BLOCK 2
|
|
JFN: 0
|
|
GTJBLK: 0 ; FLAGS
|
|
.NULIO,,.NULIO
|
|
POINT 7,[ASCIZ/HLP:/] ; POINTER TO DEVICE
|
|
0
|
|
0
|
|
POINT 7,[ASCIZ/HLP/] ; POINTER TO EXTENSION
|
|
0
|
|
0
|
|
0
|
|
|
|
XLIST ;LITERALS
|
|
LIT
|
|
LIST
|
|
> ; END OF -20 NATIVE HELPER
|
|
|
|
END
|