File: OD.TK of Disk: Disks/MyPDP/m8-blue-rka1-rkb1
(Source file text) 

/OD.TK 14-MAY-80
/
/FOREGROUND ODT TASK
/
/RUN WHITH HELP OF "CD". MUST BE ENTERRED WHITH AC=NAME OF TELETYPE
/
/WHEN THE PASSWORD IS OK, IT WILL GIVE A CR-LF AND AWAIT YOUR
/COMMANDS.
/
/E=END OR EXIT
/
/2F=OPEN FIELD 2
/
/1234/=OPEN LOCATION 1234 IN THE CURRENT FIELD.
/THE INITIAL FIELD IS 0
/
/WHEN A LOCATION IS OPENEND, ODT TYPES:
/1234/7402 
/
/NOW YOU MAY CLOSE THE LOCATION WITH CR, OR CLOSE IT AND OPEN THE
/NEXT LOCATION WITH LF, OR DO EITHER AFTER ENTERING A NEW VALUE
/TO BE STORED IN THE OPEN LOCATION, E.G.
/
/1234/7402 7000 (LF)
/1235 7300 (CR)
/E
/
/*THIS IS A PRIVILIGED TASK, AS IT IS QUITE CAPABLE OF DESTROYING*
/*THE SYSTEM*
	*200

ODSWITCH,"O^100+"D&3777	/NAME IS "OD"
	200		/ONE PAGE, NO CONNECTED INTERRUPTS
ODTMP,	0

ODDELIM,
OD,	JMS MONITOR	/AC IS TELETYPE HANDLER NAME
ODPNTR,	   CALL RELEASE
ODCNT,	   "P^100+"A&3777 /PASSWORD CHECKING TASK
	 JMP .-3	/BUSY ? LOOP
	SZL		/LINK IS ZERO IF OK
	 JMP ODEXIT+2	/UNAUTHORISED PERSON
	DCA ODIDEV	/SET UP INPUT REQUEST
	TAD ODIDEV
	TAD ODODEV	/("T-"K^100
	DCA ODODEV	/SET UP OUTPUT REQUEST
ODCRLF,	TAD C215
	JMS ODTYPE
ODLF,	TAD C212
	JMS ODTYPE
ODCMND,	JMS ODREAD	/GET COMMAND
	TAD ODDELIM	/GET DELIMITER
	TAD (-"E	/"E" IS "END" OR "EXIT"
	SNA
	 JMP ODEXIT
	TAD M1		/("E-"F
	SZA CLA		/"F" MEANS SET FIELD
	 JMP ODOPEN	/EVERY THING ELSE IS OPEN
	TAD ODNUMB
	RTL
	RAL
	AND C70
	TAD C6201	/MAKE A CDF
	DCA ODCDF1	/
	TAD ODCDF1
	DCA ODCDF2
	JMP ODCRLF	/GET NEXT COMMAND

ODOPEN,	ISZ ODSWITCH	/NEW LOCATION ?
	 JMP ODCDF1	/NO
	TAD ODNUMB
	DCA ODPNTR	/SET INPUT IN POINTER
	JMP ODCDF1
ODOPE1,	TAD ODPNTR	/GET POINTER TO OPEN LOCATION
	JMS ODOCT	/AND PRINT ITS ADDRESS
ODCDF1,	CDF		//CHANGE FIELD TO DATAFIELD
	TAD I ODPNTR	//FETCH CONTENTS OF OPEN LOCATION
	JMS ODOCT	//TYPE CONTENTS IN OCTAL, DOES CDTOIF
	JMS ODREAD	/GET POSSIBLE NEW CONTENTS
	TAD ODDELIM	/WHAT WAS THE DELIMITER ?
	TAD M215
	SZA		/CR ?
	 TAD C3
	SZA CLA		/LF ?
	 JMP ODERR
	ISZ ODSWITCH	/WAS THERE NUMBER INPUT ?
	 JMP ODOPE2	/NO NEW INPUT GIVEN
	TAD ODNUMB
ODCDF2,	CDF		//CHANGE FIELD TO DATA'S FIELD
	DCA I ODPNTR	//STORE NEW CONTENTS IN OPEN LOCATION
ODOPE2,	TAD ODDELIM	//
	RAR		//
	SZL CLA		//WAS IT LINEFEED ?
	 JMP ODLF	//NO, GET NEXT COMMAND
	ISZ ODPNTR	//YES, BUMP POINTER TO NEXT LOCATION
ODQ,	"?		//NOP, PROTECTS ISZ
	TAD C215	//GIVE HIM A CR TOO
	JMS ODTYPE	//
	JMS ODTYPE	/AND ONE BLANK AS FILLER
	JMP ODOPE1	//OPEN NEXT LOCATION

ODEXIT,	AC4000
	JMS ODTYPE	/RELEASE TELETYPE
	JMS MONITOR
	   EXIT SWPOUT

ODERR,	TAD ODQ
	JMS ODTYPE	/OUTPUT "?"
	JMP ODCRLF	/GIVE CR-LF AND GET NEXT COMMAND

ODTYPE,	0		/SINGLE CHARACTER OUTPUT ROUTINE
	TAD (4000	/SET TELETYPE HOLD-BIT
	JMS MONITOR
	   CALL
ODODEV,	   "T-"K^100	/NAME OF OUTPUT HANDLER TASK
	 JMP .-3	/BUSY ? LOOP
	JMP I ODTYPE	/RETURN

ODOCT,	0		/OCTAL OUTPUT ROUTINE
	DCA ODTMP
	TAD M4
	DCA ODCNT	/SET COUNTER FOR FOUR DIGITS
ODOCT1,	TAD ODTMP
	RAL
	RTL
	DCA ODTMP
	TAD ODTMP
	RAL
	AND C7
	TAD C260
	JMS ODTYPE
	ISZ ODCNT	/COUNT FOUR DIGITS
	 JMP ODOCT1	/STILL MORE TO PRINT
	TAD C240
	JMS ODTYPE	/ADD A SPACE
	JMP I ODOCT
ODREAD,	0		/OCTAL INPUT ROUTINE
	DCA ODNUMB	/CLEAR INPUT ACCUMULATOR
ODR1,	DCA ODSWITCH	/RESET VALID INPUT SWITCH
	JMS MONITOR
	   CALL
ODIDEV,	   0		/NAME OF INPUT HANDLER TASK
	 JMP .-3	/BUSY ? LOOP
	DCA ODDELIM
	TAD ODDELIM
	JMS ODTYPE	/GIVE ECHO
	TAD ODDELIM
	AND C7770
	TAD (-260
	SZA CLA		/IS IT OCTAL ?
	 JMP I ODREAD	/NO, THIS IS THE DELIMETER
	TAD ODDELIM	/GET CHAR
	AND C7
	DCA ZTEM1
	TAD ODNUMB
	CLL RAL
	CLL RAL
	CLL RAL
	TAD ZTEM1	/ADD THE NEW DIGIT
	DCA ODNUMB
	CLA CMA		/SET VALID INPUT FLAG
	JMP ODR1	/GET MORE INPUT
ODNUMB,	0

$