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

/CD.TK 12-MAY-80

/NAME:	CD
/LENGTH:1 PAGE
/FUNCTION:THIS TASK ENABLES THE OPERATOR TO PUT EACH
/	OTHER TASK TO ACTION FROM THE KEYBOARD.
/CONCEPT:AS THE FOREGROUND MONITOR FUNCTIONS ARE ALL PRO-
/	GRAMMABLE, AND NO SUCH THING AS A KEYBOARD MONITOR
/	HAS BEEN IMPLEMENTED, THIS TASK ACTS AS A SORT
/	OF KEYBOARD MONITOR IN ORDER TO HAVE SOME GRIP
/	ON ALL THE TASKS FROM THE KEYBOARD.
/	THIS TASK NORMALLY RESIDES ON
/	THE DISK AND SWAPS INTO CORE ONLY WHEN NECESSARY.
/	A SPECIAL BREAK-CHARACTER (CONTROL/F)
/	ACTIVATES THIS TASK.
/	GENERAL FORMAT: <FIELD1><SPACE><FIELD2>
/	AS FOR EXAMPLE:>R LOAD
/	FIELD1= RUN, CONTINUE, BREAK OR STOP.
/	FIELD2= THE NAME OF THE TASK; EXCESSIVE CHARACTERS
/	       ARE ALLOWED.
/	377(RUB):DELETES THE WHOLE COMMAND
/	LOWER CASE IS ACCEPTED
/	^Q AND ^S ARE ECHOED BUT IGNORED
/	ERRORS FROM THE CALLED TASKS CAUSE TYPE-OUT OF "?".
/	STOP THIS TASK BY TYPING A CARRIAGE RETURN
/BASIC COMMAND DECODER FOR FOREGROUND
/PROCESSES STRINGS LIKE 'R NAME'; 'C NAME';

CD4096,	"C^100+"D&3777
	200+100		/ONE PAGE; NO CONNECTS; AUTO-START
CDAC,	0		/
CD,	JMS MONITOR	/WAIT FOR BREAK-CHARACTER
	   WAIT SWPOUT
	   0		/BREAK IS ALWAYS SLOT #0
	DCA CDAC	/NAME OF KB-TASK TO PASS TO TASKS
	TAD CDAC
	DCA CDI
	TAD CDI
	TAD ("T-"K^100
	DCA CDO
CD1,	DCA CD4096
	DCA CDMU	/CLEAR MICROCODE
	JMS CDTYPE	/TYPE  ^F WHEN CALLED
	   "^
	   "F
	   215
	   212
	   "F
	   ">		/CD IDENTIFIES WITH ">"
	   4000
CD2,	JMS CDREAD	/READ ONE CHAR
	JMS CDCHK
	   -"B
	JMP CDBRK
	   -"R
	JMP CDRUN
	   -"C
	JMP CDRESTRT
	   -"S
	JMP CDSTOP
	   0
CDERR,	JMS CDTYPE
	   "?+4000
	   4000
	JMP CD
CDSTOP,	TAD (STOP-RESTRT
CDREST,	TAD (RESTRT-RUN	/SET UP MICROCODE
CDRUN,	TAD (RUN-BREAK
CDBRK,	TAD (BREAK
	DCA CDMU
CDWAIT,	JMS CDREAD	/IGNORE THE REST UNTIL SPACE
	JMP CDWAIT
/ENTER HERE AFTER SPACE
CD4,	JMS CDREAD	/READ CHAR
	TAD CDTMP
	AND C77
	BSW
	DCA CDMU+1	/PACK IN 'NA'
	JMS CDREAD
	TAD CDTMP
	TAD CDMU+1
	DCA CDMU+1
	JMP CDWAIT	/WAIT FOR CR

/ENTER HERE AFTER CR, DETECTED BY CDREAD
CD5,	JMS CDTYPE
	   212+4000	/TYPE A LF FOR CLARITY, RELEASE TTY
	   4000
	TAD CDMU	/GET FUNCTION
	SZA CLA		/MUST BE SET
	TAD CDMU+1	/GET NAME
	SNA SPA CLA	/MUST BE REASONABLE
	 JMP CDERR	/NO NAME GIVEN
	TAD CDAC
	CLL		/RUN WITH LINK=0
	JMS MONITOR
CDMU,	   0		/FUNCTION
	   0		/'NAME'
	 JMP CDERR	/ERROR RET
	JMP CD
/CDREAD  READS A CHAR FROM TTY:,ECHOES IT
/AND TESTS WHETHER IT IS A CR.  IF CR THEN JUMPS TO CD5.

CDREAD,	0
CDIGN,	TAD (-5^DGNTICK	/TIMEOUT TO FREE CD
	JMS MONITOR
	   CALL
CDI,	   0		/GETS NAME OF KEYBOARD TASK
	 JMP .-3
	SPA
	 JMP CDERR	/TIMEOUT ERROR
	DCA CDTMP
	JMS CDTYPE	/ECHO
CDTMP,	   0
	   4000
	JMS CDCHK
	   -221
	 JMP CDIGN	/^Q
	   -223
	 JMP CDIGN	/^S
	   -377
	 JMP CD1	/RUB
	   -215
	 JMP CD5	/CR
	   -240
	 JMP CD4	/SPACE
	   0
	TAD CDTMP
	AND (337
	DCA CDTMP
	JMP I CDREAD

CDCHK,	0
	TAD I CDCHK
	ISZ CDCHK
	SZA
	TAD CDTMP
	SNA CLA
	JMP I CDCHK
	ISZ CDCHK
	JMP CDCHK+1
/CDTYPE TYPES A CHARACTER STRING
CDTYPE,	0
CDMOR,	CDTOIF
	AC4000
	TAD I CDTYPE
	ISZ CDTYPE
	SNA
	 JMP I CDTYPE
CDTRY,	ISZ CD4096
	 SKP		/DON'T HANG TOO LONG
	JMP CD		/IGNORE THIS REQUEST
	JMS MONITOR
	   CALL
CDO,	   0
	 JMP CDTRY
	JMP CDMOR

	PAGE
	$$$