mirror of
https://github.com/PDP-10/stacken.git
synced 2026-02-19 22:05:10 +00:00
882 lines
16 KiB
Plaintext
882 lines
16 KiB
Plaintext
UNIVERSAL LIBUNV - UNIVERSAL FILE FOR LIBFOR
|
||
|
||
|
||
SUBTTL DEFINE ARGUMENT RETRIEVAL MACROS
|
||
;+
|
||
;.nofill
|
||
;.nojust
|
||
;.title ####################LIBFOR - FORTRAN-10 ROUTINE LIBRARY
|
||
;.SPACING 1
|
||
;.CENTER
|
||
;PROGRAM LOGIC MANUAL FOR LIBFOR
|
||
;.CENTER
|
||
;25-AUGUST-77
|
||
;.SKI 2
|
||
;.CENTER
|
||
;Reed Powell, DEC
|
||
;.skip 10
|
||
;LIBFOR.REL[464,105]
|
||
;.PAGE
|
||
;-
|
||
|
||
DEFINE ARG1,<0(16)>
|
||
DEFINE ARG2,<1(16)>
|
||
DEFINE ARG3,<2(16)>
|
||
DEFINE ARG4,<3(16)>
|
||
DEFINE ARG5,<4(16)>
|
||
DEFINE ARG6,<5(16)>
|
||
DEFINE ARG7,<6(16)>
|
||
DEFINE ARG8,<7(16)>
|
||
DEFINE ARG9,<10(16)>
|
||
DEFINE ARG10,<11(16)>
|
||
SUBTTL DEFINE ACCUMULATOR MNEMONICS
|
||
AC0=0
|
||
AC1=1
|
||
AC2=2
|
||
AC3=3
|
||
AC4=4
|
||
AC5=5
|
||
AC6=6
|
||
AC7=7
|
||
L=16
|
||
P=17
|
||
SUBTTL PROLOGUE AND EPILOGUE MACROS
|
||
|
||
;"HELLO" IS THE PROLOGUE MACRO, USED TO DEFINE
|
||
;THE START OF A SUBROUTINE OR FUNCTION.
|
||
|
||
;"GOODBY" IS THE EPILOGUE MACRO, USED TO DEFINE THE END
|
||
;OF A SUBROUTINE OR FUNCTION.
|
||
|
||
|
||
;HELLO:
|
||
;CALL IS
|
||
; HELLO NAME,SAVCOD,ACLIST
|
||
;WHERE
|
||
; "NAME" IS THE NAME OF THE SUBROUTINE OR FUNCTION.
|
||
; "SAVCOD" IS THE NAME OF THE ROUTINE TO SAVE ACCUMULATORS.
|
||
; "ACLIST" IS A LIST OF LOCATIONS TO BE PUSHED ONTO
|
||
; THE STACK. MUST BE WITHIN <> IF MORE THAN ONE
|
||
; LOCATION IN LIST.
|
||
|
||
DEFINE HELLO(NAME,SAVCOD,ACLIST)
|
||
<
|
||
IFDEF ..NEST,<
|
||
IFN ..NEST,<PRINTX NESTED CALLS TO HELLO: NAME
|
||
END
|
||
>>
|
||
|
||
..NEST==1
|
||
|
||
ENTRY NAME
|
||
SIXBIT/NAME/
|
||
NAME:
|
||
IFNB <SAVCOD>,<PUSHJ P,SAVCOD>
|
||
IFNB <ACLIST>,
|
||
<IRP ACLIST,<
|
||
PUSH P,ACLIST
|
||
>>
|
||
|
||
>;END OF HELLO
|
||
|
||
|
||
|
||
;GOODBY:
|
||
;CALL IS
|
||
; GOODBY NAME,RSTCOD,ACLIST
|
||
;WHERE
|
||
; "NAME" IS THE NAME OF THE SUBROUTINE OR FUNCTION
|
||
; "RSTCOD" IS THE NAME OF THE ROUTINE TO RESTORE ACCUMULATORS.
|
||
; "ACLIST" IS THE LIST OF LOCATIONS TO BE POP-ED FROM
|
||
; THE STACK.
|
||
|
||
|
||
|
||
DEFINE GOODBY(NAME,RSTCOD,ACLIST)
|
||
<
|
||
IFNDEF ..NEST,<PRINTX GOODBY WITHOUT HELLO: NAME
|
||
END>
|
||
IFN ..NEST-1,<PRINTX GOODBY WITHOUT HELLO: NAME
|
||
END>
|
||
|
||
..NEST==..NEST-1
|
||
IFNB <RSTCOD>,<PUSHJ P,RSTCOD>
|
||
IFNB <ACLIST>,<
|
||
IRP ACLIST,<
|
||
POP P,ACLIST
|
||
>>
|
||
POPJ P,
|
||
|
||
|
||
>;END OF GOODBY
|
||
|
||
PRGEND ;;END OF LIBUNV
|
||
TITLE IGETTB- FORTRAN-10 INTEGER FUNCTION TO DO GETTABS
|
||
|
||
SEARCH LIBUNV
|
||
SEARCH UUOSYM,MACTEN
|
||
|
||
;+
|
||
;.SUBTITLE IGETTB - GETTAB FUNCTION
|
||
;.INDEX IGETTAB
|
||
;.INDEX GETTAB
|
||
;CALL TO "IGETTB" IS:
|
||
; IGETTB(TABLE,ITEM)
|
||
;WHERE
|
||
; "TABLE" IS AN INTEGER WITH THE TABLE NUMBER IN IT.
|
||
; "ITEM" IS AN INTEGER WITH THE ITEM NUMBER IN IT.
|
||
;ON RETURN, THE VALUE IS =-1 IF THE GETTAB FAILED, ELSE
|
||
; IT IS THE RESULT RETURNED BY THE UUO.
|
||
;.PAGE
|
||
;-
|
||
|
||
HELLO IGETTB
|
||
HRR AC0,@ARG1 ;GET TABLE NUMBER
|
||
HRL AC0,@ARG2 ;AND THE ITEM NUMBER
|
||
GETTAB AC0,
|
||
SETO AC0,
|
||
GOODBY IGETTB
|
||
|
||
PRGEND ;;END OF IGETTB
|
||
TITLE IWHERE - WHERE UUO SUBROUTINE
|
||
SEARCH LIBUNV,MACTEN,UUOSYM
|
||
|
||
;+
|
||
;.SUBTITLE IWHERE - WHERE UUO SUBROUTINE
|
||
;.INDEX IWHERE
|
||
;.INDEX WHERE UUO
|
||
;WHERE:
|
||
;CALL IS
|
||
; IWHERE(DEV,STATUS,NODE)
|
||
;WHERE
|
||
; DEV IS THE DEVICE NAME
|
||
; "STATUS" IS WHERE THE STATUS BITS ARE RETURNED
|
||
; "NODE" IS THE NUMBER OF THE NODE
|
||
;IF WHERE UUO TAKES ERROR RETURN, THEN
|
||
; -1 IS RETURNED IN BOTH "STATUS" AND "NODE".
|
||
;.PAGE
|
||
;-
|
||
|
||
|
||
HELLO IWHERE
|
||
MOVE AC0,@ARG1 ;GET DEVICE NAME
|
||
WHERE AC0,
|
||
SETO AC0,
|
||
HLREM AC0,@ARG2 ;STORE STATUS
|
||
HRREM AC0,@ARG3 ;STORE NODE NUMBER
|
||
GOODBY IWHERE
|
||
|
||
PRGEND
|
||
TITLE MISC - MISC SUBROUTINES
|
||
SUBTTL EXITS: SUBROUTINE TO DO QUICK MONRET
|
||
SEARCH LIBUNV,MACTEN,UUOSYM
|
||
|
||
|
||
;+
|
||
;.SUBTITLE EXITS - " EXIT 1, " SUBROUTINE
|
||
;.INDEX EXITS
|
||
;.INDEX EXIT
|
||
;.INDEX MONRT
|
||
;EXITS - QUICK MONRET SUBROUTINE
|
||
;CALL IS
|
||
; CALL EXITS
|
||
;.PAGE
|
||
;-
|
||
|
||
HELLO EXITS
|
||
EXIT 1,
|
||
GOODBY EXITS
|
||
|
||
|
||
|
||
;SUBROUTINE TO TURN OFF TTY ECHOING
|
||
;+
|
||
;.SUBTITLE ECHO AND NOECHO
|
||
;.INDEX ECHO
|
||
;.INDEX NOECHO
|
||
;SUBROUTINE NO ECHO - TURNS OFF TERMINAL ECHOING
|
||
;SUBROUTINE ECHO - TURNS ON TERMINAL ECHOING
|
||
;
|
||
;CALL:
|
||
; CALL NOECHO
|
||
; CALL ECHO
|
||
;-
|
||
|
||
|
||
|
||
HELLO NOECHO
|
||
SETO 1,
|
||
GETLCH 1
|
||
TXO 1,GL.LCP ;LOCAL COPY
|
||
SETLCH 1
|
||
GOODBYE NOECHO
|
||
|
||
|
||
|
||
HELLO ECHO
|
||
SETO 1,
|
||
GETLCH 1
|
||
TXZ 1,GL.LCP ;TURN OFF LOCAL COPY
|
||
SETLCH 1
|
||
GOODBYE ECHO
|
||
|
||
|
||
PRGEND
|
||
TITLE HAFWRD - FUNCTIONS TO DO HALF-WORD INSTRUCTIONS
|
||
SEARCH LIBUNV,UUOSYM,MACTEN
|
||
|
||
;+
|
||
;.SUBTITLE HAFWRD - "ILEFT" AND "IRIGHT"
|
||
;.INDEX HAFWRD
|
||
;.INDEX ILEFT
|
||
;.INDEX IRIGHT
|
||
;.SKI 2
|
||
;THESE TWO FUNCTIONS ARE USED TO DO HALF WORD MOVES OF
|
||
;DATA IN FORTRAN.
|
||
;EACH HAS AS ITS VALUE THE APPROPRIATE HALF OF THE PDP-10
|
||
;WORD WHICH IS ITS ARGUMENT.
|
||
;.PAGE
|
||
;-
|
||
|
||
HELLO ILEFT
|
||
HLRZ AC0,@ARG1
|
||
GOODBY ILEFT
|
||
|
||
|
||
|
||
|
||
HELLO IRIGHT
|
||
HRRZ AC0,@ARG1
|
||
GOODBY IRIGHT
|
||
|
||
|
||
|
||
PRGEND
|
||
TITLE ILINUM SUBROUTINE TO DO THE "GTNTN." UUO
|
||
SEARCH LIBUNV,UUOSYM,MACTEN
|
||
|
||
;+
|
||
;.SUBTITLE ILINUM - "GTNTN." UUO, GETS LINE NUMBER
|
||
;.INDEX ILINUM
|
||
;.INDEX "GTNTN."
|
||
;ILINUM:
|
||
;CALL IS
|
||
; ILINUM(TTY,NODE,LINE)
|
||
;WHERE
|
||
; "TTY" IS THE SIXBIT TTY NAME
|
||
; "NODE" IS WHERE THE NONE # IS RETURNED
|
||
; "LINE" IS WHERE THE LINE NUMBER ON THAT
|
||
; NODE IS RETURNED.
|
||
;IF GTNTN. UUO FAILS, THEN -1 IS RETURNED IN "NODE",
|
||
; AND THE ERROR CODE IS RETURNED IN "LINE":
|
||
; ERROR 0: NO SUCH DEVICE
|
||
; ERROR 1: DEVICE IS NOT A TERMINAL
|
||
; ERROR 2: SPECIFIED TERMINAL IS NOT CONNECTED
|
||
;.PAGE
|
||
;-
|
||
|
||
|
||
HELLO ILINUM
|
||
MOVE AC0,@ARG1 ;GET TERMINAL NAME
|
||
GTNTN. AC0,
|
||
TLO AC0,-1 ;SET NODE NUMBER TO -1
|
||
HLREM AC0,@ARG2 ;STORE NODE NUMBER
|
||
HRRM AC0,@ARG3 ;STORE LINE NUMBER ON NODE
|
||
GOODBY ILINUM
|
||
|
||
PRGEND
|
||
TITLE IGETTY - FUNCTION TO DO THE GTXTN. UUO
|
||
SEARCH LIBUNV,MACTEN,UUOSYM
|
||
|
||
;+
|
||
;.SUBTITLE IGETTY - "GTXTN." UUO, GETS TTY NUMBER
|
||
;.INDEX IGETTY
|
||
;.INDEX "GTXTN."
|
||
;IGETTY:
|
||
;CALL
|
||
; IGETTY(INODE,ILINE)
|
||
;WHERE
|
||
; "INODE" IS THE NODE NUMBER
|
||
; "ILINE" IS THE LINE ON THAT NODE
|
||
;ON RETURN, THE VALUE OF THE FUNCTION IS THE SIXBIT
|
||
; NAME OF THE TERMINAL CONNECTED TO THE SPECIFIED
|
||
; NODE-LINE COMBINATION, OR
|
||
;ERROR THE VALUE OF THE FUNCTION IS THE
|
||
; ERROR CODE:
|
||
; ERROR 0: NOT A NETWORK TERMINAL
|
||
; ERROR 1: NOT A LOCAL TTY
|
||
;.PAGE
|
||
;-
|
||
|
||
|
||
HELLO IGETTY
|
||
HRL AC0,@ARG1 ;GET NODE NUMBER
|
||
HRR AC0,@ARG2 ;AND LINE NUMBER
|
||
GTXTN. AC0,
|
||
JFCL ;VALUE IS THE ERROR CODE
|
||
GOODBY IGETTY
|
||
|
||
|
||
PRGEND
|
||
TITLE INODE - SUBROUTINE TO DO NODE. UUOS
|
||
SEARCH LIBUNV,UUOSYM,MACTEN
|
||
|
||
;+
|
||
;.SUBTITLE INODE - "NODE." UUO SUBROUTINE
|
||
;.INDEX INODE
|
||
;.INDEX "NODE."
|
||
;INODE:
|
||
;CALL
|
||
; CALL INODE(IFUNCT,IARRY,IERR)
|
||
;WHERE:
|
||
; "IFUNCT" IS THE FUNCTION CODE FOR NODE.
|
||
; "IARRY" IS THE NAME OF THE ARGUMENT BLOCK ARRAY.
|
||
; "IERR" IS THE ERROR STATUS WORD:
|
||
; IF 0, THEN CALL WAS SUCCESSFUL,
|
||
; IF NON-0, THEN IT IS THE ERROR CODE RETURNED BY NODE.:
|
||
; ERROR 1: "IARRY" NOT SET UP PROPERLY
|
||
; ERROR 2: ILLEGAL NODE NAME OR NUMBER
|
||
; ERROR 3: NOT A PRIVILEGED JOB
|
||
; ERROR 4: NODE IS NOT AVAILABLE
|
||
; ERROR 5: JOB NOT LOCKED IN CORE AND MUST BE
|
||
; ERROR 6: TIME-OUT ERROR OCCURRED
|
||
; ERROR 7: IARRY(3) NON-0 FOR FUNCTION #5
|
||
;.PAGE
|
||
;-
|
||
|
||
|
||
HELLO INODE
|
||
HRL AC0,@ARG1 ;GET FUNCTION CODE
|
||
HRR AC0,@ARG2 ;GET ARG-BLOCK ADDRESS
|
||
SETZM @ARG3 ;ASSUME WILL BE OK
|
||
NODE. AC0,
|
||
MOVEM AC0,@ARG3 ;STORE ERROR CODE
|
||
GOODBY INODE
|
||
|
||
|
||
PRGEND
|
||
TITLE ISIXBT - FUNCTION TO CONVERT FROM ASCII TO SIXBIT
|
||
SEARCH LIBUNV,MACTEN,UUOSYM
|
||
|
||
;+
|
||
;.SUBTITLE ISIXBT _& IASCII - SIXBIT/ASCII CONVERSION FUNCTIONS
|
||
;.INDEX ISIXBT
|
||
;ISIXBT:
|
||
;CALL
|
||
; ISIXBT(IASCII,LIMIT)
|
||
;WHERE:
|
||
; "IASCII" IS THE ASCII WORD
|
||
; "LIMIT" IS THE MAX CHARS TO CONVERT
|
||
|
||
;.SKIP 10
|
||
;-
|
||
|
||
HELLO ISIXBT,,<AC2,AC3,AC4>
|
||
MOVE AC1,[POINT 7,@ARG1] ;ASCII PTR
|
||
MOVE AC2,[POINT 6,AC0] ;SIXBIT PTR
|
||
MOVN AC3,@ARG2 ;ITERATION CTR
|
||
SETZ AC0,
|
||
|
||
LOOP: ILDB AC4,AC1 ;GET ASCII CHAR
|
||
JUMPE AC4,DONE ;DONE IF A NUL
|
||
SUBI AC4,"0"-'0' ;ASCII TO SIXBIT
|
||
IDPB AC4,AC2 ;STORE SIXBIT
|
||
AOJL AC3,LOOP
|
||
|
||
DONE: GOODBY ISIXBT,,<AC4,AC3,AC2>
|
||
|
||
PRGEND
|
||
TITLE IASCII - FUNCTION TO CONVERT SIXBIT TO ASCII
|
||
SEARCH LIBUNV,MACTEN,UUOSYM
|
||
|
||
;+
|
||
;.INDEX IASCII
|
||
;IASCII:
|
||
;CALL
|
||
; IASCII(ISIXBT,LEN)
|
||
;WHERE
|
||
; ISIXBT IS THE SIXBIT WORD TO BE CONVERTED
|
||
; "LEN" IS THE MAX NUMBER OF CHARS TO CONVERT
|
||
;.PAGE
|
||
;-
|
||
|
||
HELLO IASCII,,<AC2,AC3,AC4>
|
||
MOVE AC1,[POINT 6,@ARG1] ;SIXBIT PTR
|
||
MOVE AC2,[POINT 7,AC0] ;ASCII PTR
|
||
MOVN AC3,@ARG2 ;INTERATION CTR
|
||
MOVE AC0,[ASCII/ /]
|
||
|
||
LOOP: ILDB AC4,AC1 ;GET SIXBIT
|
||
JUMPE AC4,DONE ;DONE IF SPACE
|
||
ADDI AC4,"0"-'0' ;SIXBIT TO ASCII
|
||
IDPB AC4,AC2 ;STORE ASCII
|
||
AOJL AC3,LOOP
|
||
|
||
DONE: GOODBY IASCII,,<AC4,AC3,AC2>
|
||
|
||
PRGEND
|
||
TITLE LOGIC - FUNCTIONS TO PERFORM DEC-10 LOGICAL FUNCTIONS
|
||
SUBTTL ROTATING, SHIFTING
|
||
SEARCH LIBUNV,UUOSYM,MACTEN
|
||
|
||
;+
|
||
;.SUBTITLE LOGIC - FUNCTIONS FOR DEC-10 LOGICAL INSTRUCTIONS
|
||
;.INDEX IROTAT
|
||
;.INDEX ROT
|
||
;IROTAT:
|
||
;CALL:
|
||
; IROTAT(IWORD,IBITS)
|
||
;WHERE
|
||
; "IWORD" IS WORD TO BE ROTATED
|
||
; "IBITS" IS NUMBER OF POSITIONS TO ROTATE (SIGNED INTEGER)
|
||
|
||
;.SKIP 10
|
||
;-
|
||
HELLO IROTAT
|
||
MOVE AC0,@ARG1 ;WORD TO ROTATE
|
||
MOVE AC1,@ARG2 ;POSITIONS TO ROTATE
|
||
ROT AC0,(AC1)
|
||
GOODBY IROTAT
|
||
|
||
|
||
|
||
|
||
;+
|
||
;.INDEX ILSHFT
|
||
;.INDEX LSH
|
||
;ILSHFT:
|
||
;CALL
|
||
; ILSHFT(IWORD,IBITS)
|
||
;WHERE
|
||
; "IWORD" IS WORD TO SHIFT BITS OF
|
||
; "IBITS" IS NUMBER OF POSITIONS TO SHIFT (SIGNED INTEGER)
|
||
|
||
;.SKIP 10
|
||
;-
|
||
HELLO ILSHFT
|
||
MOVE AC0,@ARG1 ;GET WORD
|
||
MOVE AC1,@ARG2 ;GET NUM BITS TO MOVE
|
||
LSH AC0,(AC1)
|
||
GOODBY ILSHFT
|
||
|
||
|
||
|
||
|
||
|
||
;.INDEX IASHFT
|
||
;.INDEX ASH
|
||
;IASHFT:
|
||
;CALL
|
||
; IASHFT(IWORD,IBITS)
|
||
;WHERE
|
||
; "IWORD" IS WORD TO SHIFT BITS OF
|
||
; "IBITS" IS NUMBER OF POSITIONS TO SHIFT (SIGNED INTEGER)
|
||
;.PAGE
|
||
;-
|
||
|
||
HELLO IASHFT
|
||
MOVE AC0,@ARG1 ;GET WORD
|
||
MOVE AC1,@ARG2 ;GET NUM BITS TO MOVE
|
||
ASH AC0,(AC1)
|
||
GOODBY IASHFT
|
||
SUBTTL AND, IOR, COMP, XOR, EQV, CLEAR-BIT FUNCTIONS
|
||
|
||
;+
|
||
;.INDEX AND
|
||
;.INDEX IOR
|
||
;.INDEX COMP
|
||
;.INDEX SETC
|
||
;.INDEX XOR
|
||
;.INDEX EQV
|
||
;.INDEX CLEAR-BIT
|
||
;.INDEX ANDC
|
||
;FUNCTION NAME DEC-10 INSTRUCTION PERFORMED
|
||
;IAND AND
|
||
;IOR IOR
|
||
;ICOMP SETCM
|
||
;IXOR XOR
|
||
;IEQV EQV
|
||
;ICLEAR ANDCM (BIT-CLEAR)
|
||
|
||
;CALLING SEQUENCE
|
||
; FUNCTION-NAME(WORD,MASK)
|
||
;WHERE
|
||
; "WORD" IS THE WORD WHOSE CONTENTS ARE TO
|
||
; BE USED AS INPUT (IT IS NOT ALTERED)
|
||
; "MASK" IS THE 36-BIT QUANTITY TO BE USED
|
||
; AS THE MASK FOR THE OPERATION
|
||
|
||
;NOTE THAT "ICOMP" HAS ONLY THE "WORD" ARGUMENT
|
||
;.PAGE
|
||
;-
|
||
HELLO IAND
|
||
MOVE AC0,@ARG1
|
||
AND AC0,@ARG2
|
||
GOODBY IAND
|
||
|
||
|
||
HELLO IOR
|
||
MOVE AC0,@ARG1
|
||
IOR AC0,@ARG2
|
||
GOODBY IOR
|
||
|
||
|
||
|
||
HELLO ICOMP
|
||
MOVE AC0,@ARG1
|
||
SETCM AC0
|
||
GOODBY ICOMP
|
||
|
||
|
||
|
||
|
||
HELLO XOR
|
||
MOVE AC0,@ARG1
|
||
XOR AC0,@ARG2
|
||
GOODBY XOR
|
||
|
||
|
||
|
||
|
||
HELLO ICLEAR
|
||
MOVE AC0,@ARG1
|
||
ANDCM AC0,@ARG2
|
||
GOODBY ICLEAR
|
||
|
||
|
||
|
||
|
||
|
||
|
||
HELLO IEQV
|
||
MOVE AC0,@ARG1
|
||
EQV AC0,@ARG2
|
||
GOODBY IEQV
|
||
|
||
|
||
|
||
|
||
PRGEND
|
||
TITLE BYTE - PERFORM DEC-10 BYTE OPERATIONS
|
||
SUBTTL MAKEBP - CONSTRUCT BYTE-POINTERS
|
||
|
||
SEARCH LIBUNV,MACTEN,UUOSYM
|
||
|
||
|
||
|
||
;+
|
||
;.SUBTITLE BYTE - FUNCTIONS FOR DEC-10 BYTE MANIPULATION
|
||
;.INDEX BYTE-MANIPULATION
|
||
;.INDEX MAKEBP
|
||
;MAKEBP:
|
||
;FUNCTION TO MAKE A DEC-10 STYLE BYTE-POINTER
|
||
;CALL
|
||
; MAKEBP(IWORD,IPOS,ISIZE)
|
||
;WHERE
|
||
; "IWORD" IS THE WORD CONTAINING THE BYTE(S)
|
||
; "IPOS" IS THE BYTE'S POSITION, A LA "POINT" PSEUDO-OP
|
||
; IN MACRO-10
|
||
; "ISIZE" IS THE SIZE OF THE BYTE
|
||
;THE VALUE RETURNED BY THE FUNCTION IS THE BYTE-POINTER
|
||
;CONSTRUCTED. NO VALIDITY CL`HECKING OF THE ARGUMENTS IS
|
||
;PERFORMED.
|
||
;.SKI 5
|
||
;-
|
||
|
||
|
||
HELLO MAKEBP
|
||
MOVE AC1,@ARG2 ;GET POS FIELD
|
||
MOVNS AC1
|
||
ADDI AC1,^D35 ;CONVERT TO HARDWARE POSITION
|
||
LSH AC1,^D6 ;AND POSITION IN PTR
|
||
MOVE AC0,@ARG3 ;GET SIZE FIELD
|
||
IOR AC0,AC1 ;COMBINE POS AND SIZE
|
||
LSH AC0,^D24 ;AND POSITION THEM
|
||
HRR AC0,ARG1 ;GET **ADDRESS** OF MEMORY WORD
|
||
GOODBY MAKEBP
|
||
SUBTTL GETBYT AND PUTBYT SUBROUTINES
|
||
|
||
;+
|
||
;.INDEX GETBYT
|
||
;.INDEX PUTBYT
|
||
;GETBYT:
|
||
;PUTBYT:
|
||
;.SKI 1
|
||
;GETBYT GETS A BYTE FROM A MEMORY WORD
|
||
;PUTBYT DEPOSITS A BYTE INTO A MEMORY WORD
|
||
|
||
;CALLING FORMAT (FOR BOTH)
|
||
; CALL XXXBYT(IPTR,IBYTE,INCFLG)
|
||
;WHERE
|
||
; "IPTR" IS A DEC-10 BYTE-POINTER WORD
|
||
; "IBYTE" IS THE BYTE INVOLVED IN THE OPERATION
|
||
; "INCFLG" IS 0 IF NOT TO ADVANCE TO THE NEXT
|
||
; BYTE BEFORE PERFORMING THE OPERATION, ELSE
|
||
; NON-0 TO INCREMENT THE POINTER BEFORE THE OPERATION.
|
||
;NOTE THAT IF IN INCREMENTAL MODE, THE POINTER ITSELF IS
|
||
;MODIFIED UPON RETURN FROM THE SUBROUTINE.
|
||
;.PAGE
|
||
;-
|
||
|
||
HELLO GETBYT
|
||
SKIPE @ARG3 ;INCREMENTAL MODE??
|
||
IBP @ARG1 ;YES
|
||
LDB AC0,@ARG1
|
||
MOVEM AC0,@ARG2
|
||
GOODBY GETBYT
|
||
|
||
|
||
|
||
|
||
|
||
|
||
HELLO PUTBYT
|
||
SKIPE @ARG3 ;INCREMENTAL MODE ??
|
||
IBP @ARG1 ;YES
|
||
MOVE AC0,@ARG2 ;GET BYTE TO STORE
|
||
DPB AC0,@ARG1
|
||
GOODBY PUTBYT
|
||
|
||
|
||
|
||
|
||
PRGEND
|
||
TITLE UV2BIN - UNIVERSAL DATE/TIME SUBROUTINE
|
||
SEARCH LIBUNV
|
||
|
||
.REQUEST SCAN
|
||
;+
|
||
;.INDEX DATE
|
||
;.INDEX TIME
|
||
;.INDEX UNIVERSAL DATE/TIME
|
||
;.INDEX UV2BIN
|
||
|
||
|
||
;CALL:
|
||
; CALL UV2BIN(DATE,TIME,YEAR,MONTH,DAY,HOUR,MIN,SEC)
|
||
;WHERE:
|
||
; DATE IS THE UNIVERSAL DATE
|
||
; TIME IS THE UNIVERSAL TIME
|
||
; YEAR GETS THE YEAR NUMBER
|
||
; MONTH GETS THE MONTH NUMBER (1-12)
|
||
; DAY GETS THE DAY OF MONTH
|
||
; HOUR GETS THE HOUR OF DAY
|
||
; MIN GETS THE MINUTE OF THE HOUR
|
||
; SEC GETS THE SECOND OF THE MINUTE
|
||
;
|
||
;ALL VARIABLES ARE INTEGER
|
||
;
|
||
;USE OF THIS SUBROUTINE REQUIRES THAT SCAN BE LOADED ALSO
|
||
;
|
||
;.PAGE
|
||
;-
|
||
|
||
HELLO UV2BIN,,<AC1,AC2,AC3,AC4>
|
||
HRLZ AC1,@ARG1 ;GET DATE
|
||
HRR AC1,@ARG2 ;AND TIME
|
||
PUSHJ P,.CNTDT## ;LET SCAN CONVERT TO DEC FORMAT
|
||
|
||
PUSH P,AC1 ;SAVE TIME FOR LATER
|
||
MOVE AC1,AC2 ;GET DATE
|
||
IDIVI AC1,^D31 ;GET DAYS
|
||
MOVE AC3,AC1
|
||
MOVEI AC1,1(AC2) ;COMPUTE DAY
|
||
MOVEM AC1,@ARG5 ;STORE DAY
|
||
|
||
IDIVI AC3,^D12
|
||
MOVEI AC1,1(AC4) ;GET MONTH INDEX
|
||
MOVEM AC1,@ARG4 ;STORE MONTH
|
||
|
||
MOVEI AC1,^D64(AC3)
|
||
IDIVI AC1,^D100
|
||
MOVEM AC2,@ARG3 ;STORE YEAR OF CENTURY
|
||
|
||
;TIME
|
||
POP P,AC1
|
||
IDIV AC1,[^D3600000]
|
||
MOVEM AC1,@ARG6 ;STORE HOURS
|
||
|
||
IDIVI AC2,^D60000
|
||
MOVEM AC2,@ARG7 ;STORE MINUTES
|
||
|
||
IDIVI AC2,^D100
|
||
MOVEM AC2,@ARG8 ;STORE SECONDS
|
||
|
||
|
||
GOODBY UV2BIN,,<AC4,AC3,AC2,AC1>
|
||
|
||
PRGEND
|
||
TITLE ISIX2B - CONVERT SIXBIT TO BINARY
|
||
SEARCH LIBUNV
|
||
|
||
;+
|
||
;.INDEX ISIX2B
|
||
;.INDEX SIXBIT
|
||
|
||
|
||
|
||
|
||
;CALL:
|
||
; I=ISIX2B(J)
|
||
;WHERE:
|
||
; J IS THE SIXBIT WORD
|
||
; I IS WHERE THE BINARY FORM GOES
|
||
;ALL VARIABLES ARE INTEGER
|
||
;.PAGE
|
||
;-
|
||
|
||
HELLO ISIX2B
|
||
MOVE AC2,@ARG1
|
||
SETZ AC1, ;AC1 GETS SIXBIT BINARY
|
||
|
||
LOOP: ROT AC2,3 ;LOSE THE FIRST BYTE
|
||
ROTC AC1,3 ;GET THE BINARY PORTION
|
||
JUMPN AC2,LOOP ;UNTIL NOTHING LEFT
|
||
MOVE AC0,AC1
|
||
|
||
GOODBY ISIX2B
|
||
|
||
PRGEND
|
||
TITLE IB2SIX - CONVERTS BINARY TO SIXBIT
|
||
SEARCH LIBUNV
|
||
|
||
;+
|
||
;.INDEX IB2SIX
|
||
;.INDEX SIXBIT
|
||
|
||
;CALL:
|
||
; I=IB2SIX(J)
|
||
;WHERE:
|
||
; J IS THE BINARY NUMBER
|
||
; I IS WHERE THE SIXBIT FORMAT GOES
|
||
;N.B.: ONLY THE LOW ORDER 6 OCTAL DIGITS
|
||
; IN J ARE CONVERTED
|
||
;.PAGE
|
||
;-
|
||
|
||
HELLO IB2SIX
|
||
MOVE AC1,@ARG1
|
||
SETZ AC2, ;AC2 GETS THE SIXBIT
|
||
MOVEI AC3,6 ;MAX CHARS TO MAKE
|
||
|
||
LOOP: ROTC AC1,-3 ;GET BINARY BYTE
|
||
ROT AC2,-3 ;MAKE ROOM FOR SIXBIT
|
||
TLO AC2,200000
|
||
SKIPE AC1 ;DONE YET?
|
||
SOJG AC3,LOOP
|
||
|
||
MOVE AC0,AC2
|
||
|
||
GOODBY IB2SIX
|
||
|
||
|
||
PRGEND
|
||
TITLE NODENM - GET THE NAME OF A NETWORK NODE
|
||
SEARCH LIBUNV,UUOSYM,MACTEN
|
||
|
||
;+
|
||
;.INDEX NODENM
|
||
;.INDEX NODE NAME
|
||
|
||
;CALL:
|
||
; I=NODENM(J)
|
||
;WHERE:
|
||
; J IS THE NODE NUMBER
|
||
; I IS WHERE THESIXBIT NODE NAME IS RETURNED,
|
||
; OR 0 IF THE NODE NUMBER IS INVALID.
|
||
;.PAGE
|
||
;-
|
||
|
||
HELLO NODENM
|
||
MOVE AC1,@ARG1
|
||
MOVEM AC1,ARGBLK+1 ;POSITION NODE NUMBER
|
||
MOVE AC1,[.NDRNN,,ARGBLK]
|
||
NODE. AC1,
|
||
SETZ AC1, ;BAD NODE NUMBER
|
||
MOVE AC0,AC1
|
||
|
||
GOODBY NODENM
|
||
|
||
ARGBLK: 2 ;NUMBER OF ARGS
|
||
BLOCK 1 ;NODE # GOES HERE
|
||
|
||
PRGEND
|
||
TITLE CCTRAP - SUBROUTINES TO TRAP ^C FROM FORTRAN PROGS
|
||
SUBTTL SUBROUTINES "CCINT" AND "CCLEAR"
|
||
SEARCH LIBUNV,UUOSYM,MACTEN
|
||
|
||
;+
|
||
;.INDEX CCTRAP
|
||
;.INDEX CCINT
|
||
;.INDEX CCLEAR
|
||
;.PAGE
|
||
;SUBROUTINE CCINT - TRAPS ^C TO FORTRAN PROGRAM
|
||
;.SKIP 1
|
||
;CALL IS:
|
||
; CALL CCINT($NNN)
|
||
;WHERE "NNN" IS THE STATEMENT NUMBER IN THE FORTRAN
|
||
; PROGRAM TO GOTO WHENEVER THE ^C IS TYPED
|
||
;.SKIP 4
|
||
;SUBROUTINE CCLEAR - CLEARS ^C TRAPPING
|
||
;.SKIP 1
|
||
;CALL IS:
|
||
; CALL CCLEAR
|
||
;-
|
||
|
||
|
||
HELLO CCINT
|
||
MOVE 1,ARG1
|
||
HRRM 1,INTBLK ;STORE INTERRCEPT ADDRESS
|
||
MOVEI 1,INTBLK
|
||
MOVEM 1,.JBINT##
|
||
GOODBYE CCINT
|
||
|
||
|
||
HELLO CCLEAR
|
||
SETZM .JBINT##
|
||
GOODBYE CCLEAR
|
||
|
||
INTBLK: XWD 4,0 ;LENGTH. ADDR IS FILLED IN BY CCINT
|
||
EXP ER.ICC ;TRAP ^C
|
||
Z
|
||
Z
|
||
PRGEND
|
||
TITLE ITRMOP - PERFORM TRMOP. UUO FUNCTIONS
|
||
SEARCH LIBUNV,UUOSYM,MACTEN
|
||
|
||
;+
|
||
;ITRMOP - FUNCTION TO DO TRMOP UUOS FOR FORTRAN PROGRAMS
|
||
;CALL IS:
|
||
; X=ITRMOP(IUDX,IFUNCT,ISKIP)
|
||
;WHERE:
|
||
; IUDX IS THE UDX OF THE LINE
|
||
; IFUNCT IS THE TRMOP FUNCTION CODE
|
||
; ISKIP WILL BE TRUE IF TRMOP SKIPED,
|
||
; FALSE IF IT DID NOT SKIP
|
||
|
||
;IF ERROR RET IS TAKEN FOR FUNCTIONS HAVING ONE, THEN
|
||
;"ISKIP" WILL BE FALSE, AND THE FUNCTION'S VALUE WILL
|
||
;BE THE ERROR CODE GIVEN BY THE MONITOR.
|
||
|
||
;.INDEX TRMOP
|
||
;.INDEX ITRMOP
|
||
;-
|
||
|
||
|
||
|
||
HELLO ITRMOP
|
||
MOVE AC0,[2,,AC2] ;POINTER FOR UUO
|
||
HRRZ AC3,@ARG1 ;GET UDX
|
||
MOVE AC2,@ARG2
|
||
SETO AC1, ;SET ISKIP TO .TRUE.
|
||
TRMOP. AC0,
|
||
SETZ AC1, ;SET FLAG TO FALSE (NO SKIP)
|
||
MOVEM AC1,@ARG3 ;AND STORE INTO ISKIP
|
||
|
||
GOODBYE ITRMOP
|
||
;+
|
||
;.PAGE
|
||
;.DO INDEX
|
||
;-
|
||
END
|