File PALIB.RO

Directory of image this file is from
This file as a plain text file

.NF;.UC
.CW; ^&NETWORK SUBROUTINE LIBRARY\&
.TITLE NETWORK SUBROUTINE LIBRARY
.AP;.AC;.FLAG CAPITAlIZE ";.NUMBER 1
.TP 8;.B 2;.CW; ^&^^RDBUF (READ A BUFFER)\&
.FILL;.P

SUBROUTINE TO READ A LINE FROM THE TERMINAL AND BUFFER IT.
RESPONDS TO "CTRL/U" AND RUBOUT.
THE DELETED CHARACTERS ARE ECHOED, FOR CONVENIENCE OF USER.
TYPING A CARRIAGE RETURN ENDS ROUTINE AND SENDS CONTROL BACK
TO THE CALLING MODULE (SEE CALLING SEQUENCE BELOW).
THERE ARE TWO SUPPLEMENTARY ROUTINES WHICH CAN BE USED IN
PROCESSING YOUR BUFFER: FNDNB (FIND THE NEXT NON-BLANK CHAR)
AND KNUM (CREATE OCTAL EQUIVALENT OF DECIMAL NUMBER).

THE USER NEEDS TO INITIALIZE TWO VARIABLES:

"IKBUF"---ADDRESS TO START OF BUFFER AREA
FAILURE TO INITIALIZE THIS VARIABLE WILL WIPE OUT PAGE ZERO.

"KBUFL"---BUFFER LENGTH, A POSITIVE OCTAL VALUE
FAILURE TO INITIALIZE WILL DEFAULT BUFFER LENGTH TO 10000 (OCTAL).
THIS, TOO, WOULD PROBABLY BE CATASTROPHIC FOR THE USER.

.B 2;.NF;^^CALLING SEQUENCE:
	RDBUF	/RDBUF= JMS I XRDBUF
	JMP AGN	/LINE DELETE "OR" BUFFER OVERFLOW - RETYPE INTRO
	JMP NUL	/ONLY <CR> TYPED
	...	/NORMAL EXIT, XR1 POINTS TO BEGINNING OF BUFFER,
		/i.e. XR1 POINTS TO FIRST NON-BLANK CHAR IN BUFFER.
		/COUNT= # OF CHARACTERS READ.

EXAMPLE: READ,	RDBUF		/READ STRING FROM TTY
		JMP READ	/USER KILLED LINE, OR HAS OVERFLOWN
				/BUFFER, ALLOW RE-ENTRY
		JMP READ	/USER ENTERED ONLY <CR>, ALLOW
				/ENTRY OF ANOTHER LINE.
		...		/PROCESS THE ENTERED LINE

NORMALLY, BEFORE RETURNING TO ALLOW THE USER TO
ENTER ANOTHER LINE, YOU MIGHT WANT TO DEFAULT SOME MESSAGES
TO LET USER KNOW WHAT HAS HAPPENED, SO THAT MAYBE IT WILL
NOT BE REPEATED.

GLOBAL VARIABLES: CHAR COUNT IKBUF KBUFL XPONT
LOCATIONS USED: 90

ROUTINES USED: MSG CRLF TYPE FNDNB

.TP 8;.B 2;.CW; ^&^^CONMSG (PRINT A CONDITIONAL MESSAGE)\&
.FILL;.P

THIS ROUTINE WILL MATCH A VALUE IN THE "AC"
AGAINST A TABLE GIVING POSSIBLE VALUES AND
THEIR CORRESPONDING MESSAGE POINTERS.
IF THE VALUE IS NOT FOUND IN THE LIST,
THE MESSAGE POINTED TO BY "WHAT" IS PRINTED.
IT IS UP TO THE USER TO SUPPLY THIS MESSAGE.
IF NOT SUPPLIED, IT IS DEFAULTED TO BE "ERROR".
THIS ROUTINE IS VERY USEFUL FOR ERROR MESSAGE
PRINTOUT, OR OTHER HELPFUL MESSAGES.

NOTE:  NO CARRIAGE RETURN - LINE FEED IS PRINTED.


.B 2;.NF;^^CALLING SEQUENCE:	TAD VALUE TO BE SEARCHED
			JMS TEST
	 		TABLE	/ADDRESS OF TABLE
			... 	/RETURNS HERE

TABLE,   -V1;	MSG1	/IF AC=V1, PRINT MSG1
	  -V2;	MSG2	/IF AC=V2, PRINT MSG2
	  ...		/ ETC.
	  0;	MSGN	/END OF LIST
			/USE ".-1" FOR MSGN FOR NO ZERO MESSAGE

LOCATIONS USED: 50
ROUTINES USED: MSG
.TP 8;.B 2;.CW; ^&^^KNUM (GET A NUMBER)\&
.FILL;.P
GETS A DECIMAL NUMBER FROM THE INPUT BUFFER.
ASSUMES THAT "RDBUF" OR SOME SIMILAR ROUTINE
WAS CALLED BEFORE COMING HERE.  ALL BUFFER
POINTERS AND COUNTERS MUST BE SETUP IN "RDBUF" FASHION.  "XR1"
SHOULD BE A PAGE ZERO POINTER TO THE BEGINNING OF THE
BUFFER, I.E. IT SHOULD POINT TO THE FIRST NUMBER IN THE SEQUENCE.
THE VARIABLE "NUM" IS SET TO THE NUMBER,
AND "CHAR" IS SET TO THE FINAL CHARACTER CHECKED.
IF "CHAR=0" THEN THERE WERE NO ILLEGAL CHARACTERS, I.E. THE
END OF THE BUFFER WAS FOUND FOLLOWING THE NUMBER.

.B 2;.NF;^^CALLING SEQUENCE:	JMS KNUM	/KNUM CALLED
			...		/NUMBER IN AC
					/NO ERROR RETURN
			/STOPS ON FIRST NON-NUMERIC CHAR

GLOBAL VARIABLES: NUM CHAR XPONT
LOCATIONS USED: 32
.TP 8;.B 2;.CW; ^&^^KTST  (TEST THE KEYBOARD)\&
.FILL;.P

THIS ROUTINE WILL CHECK FOR A POSSIBLE 
RESPONSE FROM KEYBOARD.
THE COMMON APPLICATION OF THIS ROUTINE IS
TO PERIODICALLY CHECK FOR INTERRUPT CHARACTERS,
LIKE CONTROL "C".
IF NO CHARACTER HAS BEEN TYPED, THE ROUTINE
EXITS NORMALLY.
IF ANYTHING HAS BEEN TYPED, HOWEVER, THE CHARACTER IS
READ, WHICH CLEARS THE FLAG, AND CHECKED AGAINST THE TABLE.
TABLE FORMAT IS OUTLINED IN DOCUMENTATION OF "TEST"

.B 2;.NF;^^CALLING SEQUENCE:	KTST
	 		  TABLE		/POINTER TO TABLE
	 		...		/RETURNS HERE ON NO RESPONSE

ROUTINES USED: TEST
LOCATIONS USED: 10
.TP 8;.B 2;.CW; ^&^^MSGC (PRINT A MESSAGE FOLLOWED BY CR-LF)\&
.FILL;.P

TYPE THE STRING OF SIX BIT 
PACKED CHARACTERS POINTED TO BY THE PARAMETER
AND FOLLOW IT WITH A CARRIAGE RETURN/LINE FEED.
USES THE SAME FORMAT FOR MESSAGES AS "MSG"
(THE "PAL8" "TEXT" PSEUDO-OP).

.B 2;.NF;^^CALLING SEQUENCE:	MSGC
		  	 POINTER TO STRING
			RETURNS HERE WITH THE AC CLEARED

ROUTINES USED: MSG CRLF
LOCATIONS USED: 9
.TP 8;.B 2;.CW; ^&^^MSG (PRINT A STRING)\&
.FILL;.P

PRINT A PACKED "ASCII" STRING.
MESSAGES CAN BE PRODUCED USING THE
TEXT PSEUDO-OP OF "PAL8".
MESSAGES CAN BE ANYWHERE IN THE SAME FIELD,
AND MAY EVEN CROSS PAGE BOUNDRIES.
SEE THE DOCUMENTATION OF "CRACK" FOR MORE INFORMATION
ON THE CODING METHOD.

.B 2;.NF;^^CALLING SEQUENCE:	MSG
		  	  POINTER TO STRING
			...		/Return here with AC cleared


POINTER,  SIX BIT PACKED ASCII CHARACTERS 
	   . . .
	   0000 OR XX00 AS END OF LIST

	(Usually produced by doing the following:)
POINTER,	TEXT "'THIS IS PRINTED'"

ROUTINES USED: CRACK TYPE
LOCATIONS USED: 11
.TP 8;.B 2;.CW; ^&^^CLEAR (CLEAR THE SCREEN OF A CRT)\&
.FILL;.P

THIS SUBROUTINE OUTPUTS THE COMMON CHARACTERS
NEEDED TO CLEAR THE SCREENS OF MOST CRT TERMINALS.
CONTROL "L" AND CONTROL "Z" ARE TYPED
WITH A DELAY AFTER THEM TO ALLOW THE SCREEN TO CLEAR
ON SOME TERMINALS.

.B 2;.NF;^^CALLING SEQUENCE:	CLEAR	/=JMS CLEAR
			... 	/RETURN HERE,AC CLEARED
				/AFTER CLEARING SCREEN.

ROUTINES CALLED: TYPE
LOCATIONS USED: 20
.TP 8;.B 2;.CW; ^&^^CRACK (PRINT TWO CHARS)\&
.FILL;.P

CRACK AND  PRINT THE TWO SIX BIT CHARACTERS IN THE "AC".
THIS ROUTINE IS USEFUL TO PRINT
PACKED SIX-BIT "ASCII", AS WELL AS PRINTING
SOME TYPES OF FILE NAMES.

THE METHOD OF CONVERSION IS:
.B 2;.NF;^^	      0 = DONE (I.E. 0000 OR XX00)
	 1 - 37 = ADD 300
	40 - 77 = ADD 200

CALLING SEQUENCE:
		TAD WORD TO CRACK
   		CRACK
   		... /RETURN HERE IF A ZERO WAS FOUND (XX00 OR 0000)
   		... /NORMAL RETURN, TWO CHARACTERS PRINTED.


IF USER DOES NOT WANT TO DISCRIMINATE BETWEEN FINDING A ZERO
(IE END OF STRING TO BE PRINTED) THE CALL COULD BE SET UP AS
THE FOLLOWING:
			TAD WORD TO CRACK
			CRACK
			NOP	/DO NOTHING IF A ZERO IS FOUND
			...	/CONTINUE ON YOUR WAY
ROUTINES CALLED: TYPE
LOCATIONS USED: 31
.TP 8;.B 2;.CW; ^&^^CRLF (TYPE CARRIGE RETURN/LINE FEED AT TERMINAL)\&
.FILL;.P

ROUTINE TO TYPE 
A CARRIAGE RETURN CHARACTER (OCTAL 215),
AND A LINE-FEED CHARACTER (OCTAL 212).

.B 2;.NF;^^CALLING SEQUENCE:	CRLF	/=JMS CRLF
			...	/RETURN HERE, AC CLEARED

ROUTINES CALLED: TYPE
LOCATIONS USED: 9
.TP 8;.B 2;.CW; ^&^^O2D (OCTAL TO DECIMAL CONVERSION)\&
.FILL;.P

THIS ROUTINE WILL PRINT THE DECIMAL EQUIVALENT OF 
THE "AC".  THE ROUTINE ALLOWS THE USER TO PASS A FLAG
INDICATING IF HE WANTS THE CONTENTS OF THE "AC" PRINTED 
AS A SIGNED OR UNSIGNED NUMBER.
IF THE FLAG IS GREATER THAN OR EQUAL TO ZERO (CONVENTIONALLY ZERO)
THEN THE VALUE IS PRINTED AS A 12 BIT POSITIVE NUMBER.
IF THE FLAG IS LESS THAN ZERO (CONVENTIONALLY -1) THEN THE VALUE
IS PRINTED AS A 12 BIT SIGNED NUMBER.

.B 2;.NF;^^"EXAMPLE":	TAD NUM
		O2D
		0		/FLAG FOR UNSIGNED NUM
				/IF NUM FOR EXAMPLE =7777 THEN 4095
				/WOULD BE PRINTED.

 "EXAMPLE":	TAD NUM
		O2D
		-1		/FLAG FOR SIGNED NUM
				/IF NUM FOR EXAMPLE =7777 THEN -0001
				/WOULD BE PRINTED.

CALLING SEQUENCE:
		TAD NUM		/WHERE NUM IS VALUE TO BE CONVERTED
		O2D		/CONVERT OCTAL TO DECIMAL.
		SIGNNUM		/THIS IS A FLAG TO TELL IF YOU
				/WANT THE NUMBER TO BE PRINTED
				/AS A SIGNED OR UNSIGNED NUMBER.
		. . .		/RETURNS HERE WITH "AC" CLEARED.

ROUTINES CALLED: TYPE
LOCATIONS USED: 50
.TP 8;.B 2;.CW; ^&^^QOP (QUICK OCTAL PRINT)\&
.FILL;.P

SUBROUTINE TO TYPE A 4-DIGIT OCTAL NUMBER.
PRINTS THE 4 OCTAL DIGITS HELD IN THE "AC" AT TIME OF CALL
RETURNS WITH CLEARED "AC".

.B 2;.NF;^^CALLING SEQUENCE:
	TAD	WORD TO PRINT
	QOP
	...	/RETURN AC = 0

ROUTINES USED: TYPE
LOCATIONS USED: 25
.TP 8;.B 2;.CW; ^&^^SPACE (PRINT THE NUMBER OF SPACES CARRIED IN THE AC)\&
.FILL;.P

THIS IS A SIMPLE SUBROUTINE TO
PRINT THE NUMBER OF SPACES CARRIED IN THE "AC".
USED FOR FORMATTING OUTPUT, PUTTING TEXT
IN COLUMNS, ETC.

.B 2;.NF;^^CALLING SEQUENCE:
	TAD NUMBER SPACES
	SPACE
	...		/RETURNS WITH AC=0

ROUTINES CALLED: TYPE
LOCATIONS USED: 10
.TP 8;.B 2;.CW; ^&^^TREAD (READ A NON-LEADER/TRAILER CHARACTER FROM THE TELETYPE)\&
.FILL;.P

READ A NONZERO, NONLEADER/TRAILER CHARACTER FROM THE TELETYPE
CALLED BY "JMS TREAD".
UPON RETURN, THE "AC" CONTAINS THE CHARACTER READ.
LOWER CASE IS CONVERTED TO UPPER CASE.

.B 2;.NF;^^CALLING SEQUENCE:	TREAD
		 	...	/RETURN HERE AC=CHAR

ROUTINES CALLED: TYPE
GLOBAL VARIABLES: CHAR
LOCATIONS USED: 48
.TP 8;.B 2;.CW; ^&^^FIND (13 BIT COMPARISON OF TEST VALUE AND CONTENTS OF AC)\&
.FILL;.P


A ROUTINE TO COMPARE TWO 12 BIT NUMBERS, AND TO BRANCH ON SUCCESS.
THERE ARE FOUR POSSIBLE COMPARISONS, "EQ", "LE", "NE" ,AND "GT".

.B 2;.NF;^^CALLING SEQUENCE:	TAD VALUE TO COMPARE
	 		FIND
	 TEST INSTRUCTION (I.E. GT...);TEST NUMBER;SUCCESS ADDRESS;
	 0	(A ZERO DENOTES END OF TEST "TABLE")

THIS CALL PERFORMS:
	IF VALUE TO COMPARE MEETS REQUIREMENTS OF TEST INSTRUCTION
	WHEN MATCHED AGAINST THE TEST NUMBER THEN BRANCH TO 
	THE SUCCESS ADDRESS, ELSE MOVE TO NEXT COMPARISON.


ANY NUMBER OF SUCH ENTRIES IN THE TABLE MAY FOLLOW CALL.
IF VALUE FAILS ALL COMPARISONS, RETURN TO LOCATION FOLLOWING TEST
TABLE.   UPON EXIT, CONTENTS OF AC=0

AN EXAMPLE TABLE AND USE OF THIS ROUTINE:

		FIND
		    EQ;"A;FOUNDA
		    EQ;203;7600		/FOUND "^C", RETURN TO MONITOR
		    0			/END OF TABLE

LOCATIONS USED: 19
.TP 8;.B 2;.CW; ^&^^FNDNB (NEXT NON-BLANK CHARACTER)\&
.FILL;.P

ROUTINE TO SEARCH A BUFFER POINTED TO BY "XR1" FOR THE NEXT NON-BLANK
CHARACTER. "XR1" IS SET UP AS A PAGE ZERO POINTER AND MUST
BE ASSIGNED A VALUE.
THIS IS CALLED ONLY AFTER THE BUFFER IS FILLED UP,
USUALLY BY "RDBUF".

.B 2;.NF;^^CALLING SEQUENCE:
	FNDNB
	JMP EOI		/END-OF-IMAGE RETURN, AC IS CLEARED
	...		/NORMAL - AC = CHAR

GLOBAL VARIABLES: CHAR COUNT XPONT
LOCATIONS USED: 17
.TP 8;.B 2;.CW; ^&^^OCTP (GENERAL OCTAL PRINT)\&
.FILL;.P

THIS ROUTINE IS VERY "FORMAT" ORIENTED, AND IF USER
JUST WANTS TO TYPE OUT AN OCTAL VALUE, USER MIGHT WANT 
TO CHECK OUT THE QUICK OCTAL ROUTINE.

.B 2;.NF;^^CALLING SEQUENCE:
	TAD VALUE	/GET THE NUMBER USER WISHES TO OUTPUT
	OCTP		/=JMS OCTP
	  N		/N=NUMBER OF SPACES TO BE OUTPUT BY ROUTINE
	...		/RETURN HERE AFTER PERFORMING REQUESTED FORMAT.
			/IF N>0 THEN ROUTINE PRINTS NUMBER AS IS
			/IF N<0 THEN ROUTINE PRINTS NUMBER AS A SIGNED
			/VALUE


 "EXAMPLE":	IF N<0 THEN 7777 IS PRINTED AS -1
		IF N>4 THEN 7777 IS PRINTED AS 7777


NOTE: IF USER SPECIFIES THAT ONLY ONE SPACE IS TO BE USED
AND ALSO SPECIFIES THAT THE MINUS SIGN MODE IS ON
(REMEMBER, THIS IS DONE BY N<0 ), THEN IF THE NUMBER TO
PRINTED IS LESS THAN ZERO, WE HAVE AN INDEFINITE FORM
(IE SHOULD THE MINUS SIGN BE PRINTED, OR JUST ONE DIGIT).
THE SITUATION IS RECTIFIED BY PRINTING AN I FOR INDEFINITE.

NOTE: IF ABS(N) IS GREATER THAN 4, THEN ABS(N)-4 BLANKS
       ARE PRINTED BEFORE THE NUMBER ITSELF IS PRINTED.
       ALSO, ALL LEADING ZEROS ARE CHANGED TO BLANKS.

LOCATIONS USED: 95
ROUTINES CALLED: TYPE
.TP 8;.B 2;.CW; ^&^^RCHAR (READ A CHAR FROM THE KEYBOARD)\&
.FILL;.P

WAITS FOR USER TO STRIKE A  KEY ON THE KEYBOARD,
THEN RETURNS THE "ASCII" CODE IN THE ACCUMULATOR.

.B 2;.NF;^^CALLING SEQUENCE:	JMS	RCHAR
			...	   /RETURN HERE, AC=CHAR READ

LOCATIONS USED: 6
.TP 8;.B 2;.CW; ^&^^TEST (TRANSFER TO ADDRESS BY CHARACTER)\&
.FILL;.P

GIVEN AN ADDRESS OF A TABLE, 
CHECKS IF THE CONTENTS OF "AC" IS 
IN THE TABLE, AND IF SO, TRANSFERS
TO THE CORRECT ADDRESS.
THIS ROUTINE IS MOST USEFUL TO SIMULATE
A TYPE OF THE "CASE" STATEMENT.

.B 2;.NF;^^CALLING SEQUENCE:
	TAD CHAR	/GET TEST CHARACTER IN AC
	TEST		/TEST IT !
	 TBLAD		/ADDRESS OF TABLE
	...		/CHARACTER NOT IN TABLE
			/AC CLEARED UPON ANY RETURN

TBLAD, -CHAR1;	ADDR1
	-CHAR2;	ADDR2
	...;	...
	0		/END OF LIST (ZERO)

LOCATIONS USED: 19
.TP 8;.B 2;.CW; ^&^^TYPE (TYPE ONE CHARACTER ON THE TTY)\&
.FILL;.P

PRINT THE CONTENTS OF "AC" ON THE TELETYPE.
CLEAR THE ACCUMULATOR BUT LEAVE THE LINK ALONE.
THE LINK MAY BE USED BY PROGRAMS LIKE THE SIMPLE
OCTAL PRINTING ROUTINE.
THIS ROUTINE DOES THE "TLS" FIRST, AND WAITS ON
THE FLAG, WHICH MAY BE SLIGHTLY SLOWER THAN THE METHOD
OF USING ONE "TLS" AT THE BEGINING OF THE PROGRAM,
AND THEN WAITING FOR THE PREVIOUS CHARACTER TO PRINT.
TO BE SURE THAT THE FIRST CHARACTER IS NOT LOST,
THE SEQUENCE "CMA;TYPE" COULD BE INSERTED AT THE BEGINING
OF A PROGRAM TO INITIALIZE THINGS.

.B 2;.NF;^^CALLING SEQUENCE:	TAD	CHAR	/LOAD AC WITH CHAR TO PRINT
			JMS	TYPE	/PRINT IT.
			. . . .		/RETURN HERE WITH AC CLEAR

LOCATIONS USED: 6



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search