Google
 

Trailing-Edge - PDP-10 Archives - red405a2 - uetp/lib/cmlbcd.mac
There is 1 other file named cmlbcd.mac in the archive. Click here to see a list.
	TITLE	CMLBCD	COMMANDS
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.


	;THIS LIBRARY CONTAINS ROUTINES FOR COMMAND PARSING ON THE
	;DECSYSTEM-20. ALL ROUTINES ARE BASED AROUND THE "COMND"
	;JSYS. IT WAS DECIDED THAT REPARSING SHOULD BE BY MEANS
	;OF A SMOOTH FLOW THROUGH THE USER'S PROGRAM INSTEAD OF THE
	;ALTERNATIVE MEANS OF ALLOWING THE COMMAND JSYS TO DISPATCH
	;TO A REPARSE ADDRESS. TO ACHIEVE THIS, A SERIES OF MULTIPLE
	;RETURNS FROM ROUTINES HAS BEEN IMPLEMENTED. GENERALLY, EACH
	;COMPONENT ROUTINE HAS AN IMMEDIATE RETURN WHEN REPARSING
	;IS NECESSARY, A SKIP RETURN FOR AN ERROR, AND A DOUBLE
	;SKIP RETURN FOR SUCCESS.

	;ROUTINES ARE GENERALLY OF THREE TYPES.

	;CCXXXX	ROUTINES ARE COMPLETE ROUTINES. THESE SHOULD BE
	;	ENTERED WITH "T1" POINTING TO A PROMPT AND OTHER
	;	ARGUMENTS SET UP AS DESCRIBED FOR EACH ROUTINE.
	;	THE ROUTINE WILL INITIALISE, DISPLAY THE PROMPT,
	;	AND CHECK THE INPUT. REPARSING AND ERRORS ARE
	;	DEALT WITH BY THE ROUTINE AND THE ONLY WAY OUT
	;	IS AN IMMEDIATE RETURN ON SUCCESS.

	;CDXXXX	ROUTINES ARE COMPONENT ROUTINES.THESE ARE CALLED
	;	BY CCXXXX ROUTINES OR BY THE USER PROGRAM AND
	;	PERFORM INDIVIDUAL FUNCTIONS. GENERALLY, THE RETURN
	;	IS NON-SKIP FOR REPARSE NECESSARY, SKIP IF ERROR
	;	OR DOUBLE SKIP ON SUCCESS.

	;CRXXXX	ROUTINES ARE BASED ON THE CDXXXX ROUTINES EXCEPT
	;	THAT THE REPARSE RETURN IS IMMEDIATE BUT UP ONE
	;	LEVEL. ERROR RETURN IS THEN IMMEDIATE RETURN AND
	;	SUCCESS IS SKIP RETURN. THESE ARE SPECIFICALLY FOR
	;	PROGRAMS AND ROUTINES WHICH ALLOW MORE THAN ONE
	;	ARGUMENT ON A LINE. THE FIRST ARGUMENT OR "COMMAND"
	;	CAN BE PARSED AND DISPATCH PERFORMED ACCORDINGLY
	;	BY MEANS OF A "PUSHJ".

	PRGEND
	TITLE	CCFLIN	GET FLOATING POINT NUMBER FROM TTY (COMPLETE)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CCFLIN

	;ROUTINE TO GET A FLOATING POINT NUMBER FROM THE TTY. ENTER
	;WITH T1 POINTING TO A PROMPT. RETURN +1 ALWAYS WITH FLOATING
	;NUMBER IN T2.

CCFLIN:	PUSHJ	P,CDSRGS##	;SAVE ARGUMENT
CCFLN1:	PUSHJ	P,CDSETP##	;SET UP AND INITIALISE
CCFLN2:	PUSHJ	P,CDIFLT##	;GET NUMBER
	 JRST	CCFLN2		;REPARSE
	 ERROR	CCFLN1,<BAD NUMBER>
	PUSHJ	P,CDGTCM##	;GET CONFIRMATION
	 JRST	CCFLN2		;REPARSE
	 JRST	CCFLN1		;BAD
	POPJ	P,		;OK

	PRGEND
	TITLE	CCGDNM	GET A DECIMAL NUMBER FROM TTY (COMPLETE)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CCGDNM

	;ROUTINE TO GET A DECIMAL NUMBER FROM THE TTY. ENTER WITH
	;T1 POINTING TO A PROMPT. RETURN +1 ALWAYS WITH DECIMAL
	;NUMBER IN T2.

CCGDNM:	PUSHJ	P,CDSRGS##	;SAVE ARGUMENT
CCGDN1:	PUSHJ	P,CDSETP##	;SET UP AND INITIALISE
CCGDN2:	PUSHJ	P,CDGDNM##	;GET NUMBER
	 JRST	CCGDN2		;REPARSE
	 ERROR	CCGDN1,<BAD NUMBER>
	PUSHJ	P,CDGTCM##	;GET CONFIRMATION
	 JRST	CCGDN2		;REPARSE
	 JRST	CCGDN1		;BAD
	POPJ	P,		;OK

	PRGEND
	TITLE	CCGONM	GET AN OCTAL NUMBER FROM TTY (COMPLETE)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CCGONM

	;ROUTINE TO GET AN OCTAL NUMBER FROM THE TTY. ENTER WITH
	;T1 POINTING TO A PROMPT. RETURN +1 ALWAYS WITH OCTAL
	;NUMBER IN T2.

CCGONM:	PUSHJ	P,CDSRGS##	;SAVE ARGUMENT
CCGON1:	PUSHJ	P,CDSETP##	;SET UP AND INITIALISE
CCGON2:	PUSHJ	P,CDGONM##	;GET NUMBER
	 JRST	CCGON2		;REPARSE
	 ERROR	CCGON1,<BAD NUMBER>
	PUSHJ	P,CDGTCM##	;GET CONFIRMATION
	 JRST	CCGON2		;REPARSE
	 JRST	CCGON1		;BAD
	POPJ	P,		;OK

	PRGEND
	TITLE	CCGTFL	GET A FILESPEC FROM THE TTY (COMPLETE)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CCGTFL,CCGTFS

	;ROUTINE TO ASK FOR A FILESPEC. ENTER WITH T1 POINTING TO
	;A PROMPT AND AC'S "A","B","C", AND "D" SET UP AS FOR THE
	;"GTJSET" ROUTINE. RETURN +1 ALWAYS WITH JFN IN T2.
	;ENTER AT "CCGTFL" TO SET UP GTJFN BLOCK, OR AT "CCGTFS"
	;IF BLOCK ALREADY SET UP.

CCGTFL:	PUSH	P,T1		;SAVE PROMPT
	PUSHJ	P,GTJCLS##	;SET UP GTJFN BLOCK
	POP	P,T1		;RETORE PROMPT
CCGTFS:	PUSHJ	P,CDSRGS##	;SAVE ARGUMENTS
CCGTF1:	PUSHJ	P,CDSETP##	;SET UP COMMAND JSYS
CCGTF2:	PUSHJ	P,CDFLSP##	;GET FILESPEC
	 JRST	CCGTF2		;REPARSE
	 ERROR	CCGTF1,<FILE NOT AVAILABLE>
	PUSHJ	P,CDGTCM##	;GET CONFIRMATION
	 JRST	CCGTF2		;REPARSE
	 JRST	CCGTF1		;BAD
	POPJ	P,		;OK

	PRGEND
	TITLE	CCGIFL	GET AN INPUT FILESPEC FROM THE TTY (COMPLETE)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CCGIFL,CCGIFS

	;ROUTINE TO ASK FOR AN INPUT FILESPEC. ENTER WITH T1 POINTING
	;TO A PROMPT AND AC'S "A","B","C", AND "D" SET UP AS FOR THE
	;"GTJSET" ROUTINE. RETURN +1 ALWAYS WITH JFN IN T2.
	;ENTER AT "CCGIFL" TO SET UP GTJFN BLOCK, OR AT "CCGIFS"
	;IF BLOCK ALREADY SET UP.

CCGIFL:	PUSH	P,T1		;SAVE PROMPT
	PUSHJ	P,GTJCLS##	;SET UP GTJFN BLOCK
	POP	P,T1		;RETORE PROMPT
CCGIFS:	PUSHJ	P,CDSRGS##	;SAVE ARGUMENTS
CCGTF1:	PUSHJ	P,CDSETP##	;SET UP COMMAND JSYS
CCGTF2:	PUSHJ	P,CDIFSP##	;GET FILESPEC
	 JRST	CCGTF2		;REPARSE
	 ERROR	CCGTF1,<FILE NOT AVAILABLE>
	PUSHJ	P,CDGTCM##	;GET CONFIRMATION
	 JRST	CCGTF2		;REPARSE
	 JRST	CCGTF1		;BAD
	POPJ	P,		;OK

	PRGEND
	TITLE	CCGOFL	GET AN OUTPUT FILESPEC FROM THE TTY (COMPLETE)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CCGOFL,CCGOFS

	;ROUTINE TO ASK FOR AN OUTPUT FILESPEC. ENTER WITH T1 POINTING
	;TO A PROMPT AND AC'S "A","B","C", AND "D" SET UP AS FOR THE
	;"GTJSET" ROUTINE. RETURN +1 ALWAYS WITH JFN IN T2.
	;ENTER AT "CCGOFL" TO SET UP GTJFN BLOCK, OR AT "CCGOFS"
	;IF BLOCK ALREADY SET UP.

CCGOFL:	PUSH	P,T1		;SAVE PROMPT
	PUSHJ	P,GTJCLS##	;SET UP GTJFN BLOCK
	POP	P,T1		;RETORE PROMPT
CCGOFS:	PUSHJ	P,CDSRGS##	;SAVE ARGUMENTS
CCGTF1:	PUSHJ	P,CDSETP##	;SET UP COMMAND JSYS
CCGTF2:	PUSHJ	P,CDOFSP##	;GET FILESPEC
	 JRST	CCGTF2		;REPARSE
	 ERROR	CCGTF1,<FILE NOT AVAILABLE>
	PUSHJ	P,CDGTCM##	;GET CONFIRMATION
	 JRST	CCGTF2		;REPARSE
	 JRST	CCGTF1		;BAD
	POPJ	P,		;OK

	PRGEND
	TITLE	CCGTDR	GET DIRECTORY NAME FROM THE TTY.(COMPLETE)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CCGTDR

	;ROUTINE TO GET DIRECTORY SPEC WITH CONFIRMATION. ENTER
	;WITH POINTER TO PROMPT IN T1. RETURN +1 ALWAYS WITH 36-BIT
	;DIRECTORY NUMBER IN T2.

CCGTDR:	PUSHJ	P,CDSRGS##	;SAVE ARGUMENTS
CCGTD1:	PUSHJ	P,CDSETP##	;SET UP AND INITIALISE
CCGTD2:	PUSHJ	P,CDDRSP##	;GET DIRECTORY NAME
	 JRST	CCGTD2		;REPARSE
	 ERROR	CCGTD1,<NO SUCH DIRECTORY>
	PUSHJ	P,CDGTCM##	;GET CONFIRMATION
	 JRST	CCGTD2		;REPARSE
	 JRST	CCGTD1		;BAD
	POPJ	P,		;OK

	PRGEND
	TITLE	YESNO	ROUTINE TO ASK YES OR NO ETC.
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CONFRM,ASKHIM,CCKYDS

	;ROUTINES TO ASK FOR YES OR NO ANSWER. ENTER AT "CONFRM"
	;TO ASK IF SURE, OR AT "ASKHIM" WITH T1 POINTING TO PROMPT.
	;RETURNS SKIP FOR "YES" AND NON-SKIP FOR "NO".
	;ENTER AT "CCKYDS" TO GET COMMAND WITH CONFIRMATION AND
	;DISPATCH.

CONFRM:	HRROI	T1,[ASCIZ /ARE YOU SURE? /]
ASKHIM:	MOVEI	T2,CONTAB	;ADDRESS OF ANSWER TABLE
CCKYDS:	PUSHJ	P,CCKYCM##	;GET COMMAND WITH CONFIRMATION
	HRRZ	T1,(T2)		;GET DISPATCH
	PJRST	(T1)		;DISPATCH

CONTAB:	CONSIZ,,CONMAX
	TB (.FUN,I-CANNOT-MAKE-UP-MY-MIND)
	TB (CPOPJ##,NO)
	TB (CPOPJ1##,YES)
CONSIZ==.-CONTAB-1
CONMAX==CONSIZ+1


.FUN:	HRROI	T1,[ASCIZ /
THERE MUST BE A JOB FOR YOU IN HIGHER MANAGEMENT!!!!!
/]
	PSOUT
	JRST	CONFRM		;ASK HIM AGAIN

	PRGEND
	TITLE	CCDKYC	GET DOUBLE COMMAND WITH CONFIRMATION (COMPLETE)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CCDKYC

	;ROUTINE TO GET DOUBLE COMMAND PLUS CONFIRMATION. ENTER WITH
	;PROMPT IN T1 AND WITH T2 POINTING TO COMMAND TABLE. RETURN
	;+1 ALWAYS WITH T2 POINTING TO TABLE ENTRY. 

CCDKYC:	PUSHJ	P,CDSRGS##	;SAVE ARGUMENTS
CMDLP1:	PUSHJ	P,CDSETP##	;SET UP
CMDLP2:	MOVE	T2,CMDT2##	;POINT TO FIRST TABLE
	MOVE	T3,CMDT3##	;AND SECOND TABLE
	PUSHJ	P,CDDKEY##	;GET COMMAND
	 JRST	CMDLP2		;REPARSE
	 ERROR	CMDLP1,<NOT A VALID INPUT>
	PUSHJ	P,CDGTCM##	;GET CONFIRMATION
	 JRST	CMDLP2		;REPARSE
	 JRST	CMDLP1		;BAD
	POPJ	P,		;OK

	PRGEND
	TITLE	CCKYCM	GET COMMAND WITH CONFIRMATION (COMPLETE)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CCKYCM

	;ROUTINE TO GET COMMAND PLUS CONFIRMATION. ENTER WITH POINTER
	;TO PROMPT IN T1 AND WITH T2 POINTING TO COMMAND TABLE. RETURN
	;+1 ALWAYS WITH T2 POINTING TO TABLE ENTRY. 

CCKYCM:	PUSHJ	P,CDSRGS##	;SAVE ARGUMENTS
CMDLP1:	PUSHJ	P,CDSETP##	;SET UP
CMDLP2:	MOVE	T2,CMDT2##	;POINT TO TABLE
	PUSHJ	P,CDGKEY##	;GET COMMAND
	 JRST	CMDLP2		;REPARSE
	 ERROR	CMDLP1,<NOT A VALID INPUT>
	PUSHJ	P,CDGTCM##	;GET CONFIRMATION
	 JRST	CMDLP2		;REPARSE
	 JRST	CMDLP1		;BAD
	POPJ	P,		;OK

	PRGEND
	TITLE	CCDTTM	GET DATE AND TIME FROM THE TTY (COMPLETE)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CCDTTM

	;ROUTINE TO GET DATE AND TIME FROM THE TTY. ENTER WITH
	;T1 POINTING TO PROMPT. RETURN WITH DATE AND TIME IN 
	;INTERNAL FORMAT IN T1.

CCDTTM:	PUSHJ	P,CDSRGS##	;SAVE ARGS
CCDTT1:	PUSHJ	P,CDSETP##	;SET UP
CCDTT2:	PUSHJ	P,CDDTTM##	;GET IT
	 JRST	CCDTT2		;REPARSE
	 ERROR	CCDTT1,<INCORRECT FORMAT>
	PUSHJ	P,CDGTCM##	;GET CONFIRMATION
	 JRST	CCDTT2		;REPARSE
	 JRST	CCDTT1		;BAD
	POPJ	P,

	PRGEND
	TITLE	CCDTON	GET DATE ONLY FROM TTY	(COMPLETE)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CCDTON

	;ROUTINE TO INPUT A DATE FROM THE TTY. ENTER WITH T1
	;POINTING TO PROMPT. RETURN WITH DATE IN
	;INTERNAL FORMAT IN T1.

CCDTON:	PUSHJ	P,CDSRGS##	;SAVE ARG
CCDTO1:	PUSHJ	P,CDSETP##	;SET UP AND INITIALISE
CCDTO2:	PUSHJ	P,CDDTON##	;GET DATE 
	 JRST	CCDTO2		;REPARSE
	 ERROR	CCDTO1,<INCORRECT FORMAT>
	PUSHJ	P,CDGTCM##	;GET CONFIRMATION
	 JRST	CCDTO2		;REPARSE
	 JRST	CCDTO1		;BAD
	POPJ	P,		;OK

	PRGEND
	TITLE	CCGSIX	GET A SIXBIT ATOM IN T2
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CCGSIX

	;ROUTINE TO GET A SIXBIT ATOM IN T2. ENTER WITH
	;T1 POINTING TO PROMPT. RETURN WITH ATOM IN T2.

CCGSIX:	PUSHJ	P,CDSRGS##	;SAVE ARGS
CCGSX1:	PUSHJ	P,CDSETP##	;SET UP
CCGSX2:	PUSHJ	P,CDGSIX##	;GET IT
	 JRST	CCGSX2		;REPARSE
	 ERROR	CCGSX1,<INCORRECT FORMAT>
	PUSHJ	P,CDGTCM##	;GET CONFIRMATION
	 JRST	CCGSX2		;REPARSE
	 JRST	CCGSX1		;BAD
	POPJ	P,		;OK

	PRGEND
	TITLE	CDDRSP	GET DIRECTORY SPECIFICATION. (COMPONENTS)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CDDRSP

	;ROUTINE TO GET A DIRECTORY. ENTER WITH POINTER TO PROMPT IN T1.
	;RETURN +1 IF REPARSE NECESSARY, SKIP IF ERROR, OR DOUBLE
	;SKIP IF OK WITH 36-BIT DIRECTORY NUMBER IN T2.

CDDRSP:	MOVEI	T2,[FLDDB. (.CMDIR)]
	PJRST	JCOMND##	;GO DO IT

	PRGEND
	TITLE	CDDTTM	GET DATE, TIME, OR BOTH (COMPONENTS)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CDDTTM,CDDTON,CDTMON,CDGTAD,CRGTAD

	;ROUTINE TO GET DATE AND TIME FROM TTY. ON RETURN DATE AND
	;TIME IN INTERNAL FORMAT ARE STORED IN T2. RETURN IS NON-
	;SKIP FOR REPARSE, SKIP FOR ERROR, AND DOUBLE SKIP FOR GOOD.

CDDTTM:	MOVX	T2,<CM%IDA+CM%ITM> ;GET DATE AND TIME
	PJRST	CDGTAD		;GET IT

	;ROUTINE TO INPUT DATE ONLY. ON RETURN DATE IS IN T2.
	;RETURN IS NON-SKIP FOR REPARSE NECESSARY, SKIP FOR
	;ERROR, AND DOUBLE SKIP FOR OK.

CDDTON:	MOVX	T2,<CM%IDA>	;JUST DATE
	PJRST	CDGTAD		;GET IT

	;ROUTINE TO GET JUST TIME FROM TTY. RETURN WITH TIME
	;IN T2. RETURN IS NON-SKIP FOR REPARSE, SKIP FOR 
	;ERROR, AND DOUBLE SKIP FOR GOOD.

CDTMON:	MOVX	T2,<CM%ITM>	;GET TIME
	PJRST	CDGTAD		;GET IT

	;ROUTINE TO GET TIME AND/OR DATE FROM TTY. ENTER WITH FLAGS
	;IN T2. RETURN WITH TIME AND/OR DATE IN T2. RETURN NON-SKIP
	;FOR ERROR, SKIP IF OK AND BUMP UP ONE LEVEL FOR REPARSE.

CRGTAD:	PUSHJ	P,CDGTAD	;GET IT
	 POP	P,(P)		;REPARSE
	 POPJ	P,		;ERROR
	PJRST	CPOPJ1##	;OK

PAGE
	;ROUTINE TO GET TIME AND/OR DATE FROM TTY. ENTER WITH
	;FLAGS IN T2. RETURN WITH TIME AND/OR DATE IN T2. RETURN
	;IS NON-SKIP FOR REPARSE, SKIP FOR ERROR, AND DOUBLE
	;SKIP FOR GOOD.

CDGTAD:	TXZ	T2,<CM%NCI>	;NO INTERNAL FORMAT
	MOVEM	T2,FLUB##+.CMDAT ;SAVE IT
	MOVX	T2,<FLD(.CMTAD,CM%FNC)>
	MOVEM	T2,FLUB##+.CMFNP ;SET FUNCTION
	SETZM	FLUB##+.CMHLP	;CLEAR UP
	SETZM	FLUB##+.CMDEF
	MOVEI	T2,FLUB##	;POINT TO BLOCK
	PJRST	JCOMND##	;DO JSYS

	PRGEND
	TITLE	CDGSIX	GET SIXBIT ATOM
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CRGSIX,CDGSIX

	;ROUTINE TO GET SIXBIT ATOM AND DEAL WITH REPARSE. RETURN
	;IS NON-SKIP IF ERROR, SKIP IF OK, OR BUMP UP ONE LEVEL IF
	;REPARSE NECCESSARY.

CRGSIX:	PUSHJ	P,CDGSIX	;GET IT
	 POP	P,(P)		;REPARSE
	 POPJ	P,		;ERROR
	PJRST	CPOPJ1##	;BAD

	;ROUTINE TO INPUT SIXBIT ATOM IN T2. RETURN NON-SKIP FOR
	;REPARSE, SKIP IF ERROR, OR DOUBLE SKIP FOR SUCCESS WITH
	;ATOM IN T2.

CDGSIX:	MOVEI	T2,[FLDDB. (.CMFLD)] ;GET A FIELD
	PUSHJ	P,JCOMND##	;GET IT
	 POPJ	P,		;REPARSE
	 PJRST	CPOPJ1##	;BAD
	SETZM	T2		;START WITH NOTHING
	MOVE	T1,[440700,,ATMBUF##] ;MAKE BYTE POINTER
	MOVE	T3,[440600,,T2]	;FOR OUTPUT
CDGSXL:	ILDB	T4,T1		;GET CHARACTER
	CAIL	T4,"a"		;LOWER CASE?
	CAILE	T4,"z"		;ANY OF THEM?
	SKIPA			;NO
	SUBI	T4,40		;MAKE UPPER CASE
	CAIL	T4,"A"		;ALPAHABETIC?
	CAILE	T4,"Z"		;ANY OF THEM?
	SKIPA			;NO
	JRST	CDGSXU		;OK
	CAIL	T4,"0"		;NUMERIC?
	CAIL	T4,"9"		;ANYTHING?
	SKIPA			;NO
	JRST	CDGSXU		;OK
	JUMPE	T4,CPOPJ2##	;FOUND END
	PJRST	CPOPJ1##	;ERROR
CDGSXU:	SUBI	T4,40		;SIXBITIT
	IDPB	T4,T3		;SAVE IT
	TLNE	T3,770000	;MORE ROOM?
	JRST	CDGSXL		;DO IT
	PJRST	CPOPJ2##	;ASSUME IT IS OK

	PRGEND
	TITLE	CDGONM	GET OCTAL NUMBER (COMPONENTS)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CRGONM,CDGONM

	;ROUTINE TO INPUT AN OCTAL NUMBER AND DEAL WITH REPARSE.
	;RETURN IS NON-SKIP FOR ERROR, SKIP IF OK, OR BUMP UP ONE
	;LEVEL IF REPARSE NECESSARY.

CRGONM:	PUSHJ	P,CDGONM	;GET IT
	 POP	P,(P)		;REPARSE
	 POPJ	P,		;ERROR
	PJRST	CPOPJ1##	;OK

	;ROUTINE TO INPUT AN OCTAL NUMBER. RETURN +1 FOR REPARSE
	;NECESSARY, SKIP IF ERROR OR DOUBLE SKIP FOR SUCCESS.

CDGONM:	MOVEI	T2,[FLDDB. (.CMNUM,,10)]
	PJRST	JCOMND##	;GO DO IT

	PRGEND
	TITLE	CDGDNM	GET DECIMAL NUMBER (COMPONENTS)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CRGDNM,CDGDNM

	;ROUTINE TO INPUT A DECIMAL NUMBER FROM THE TTY. RETURN
	;IS NON-SKIP FOR ERROR, SKIP IF OK, OR BUMP UP ONE LEVEL
	;IF REPARSE IS NECESSARY.

CRGDNM:	PUSHJ	P,CDGDNM	;GET IT
	 POP 	P,(P)		;REPARSE
	 POPJ	P,		;ERROR
	PJRST	CPOPJ1##	;OK

	;ROUTINE TO INPUT DECIMAL NUMBER FROM THE TTY.
	;RETURN IS +1 FOR REPARSE NECESSARY, SKIP IF ERROR
	;OR DOUBLE SKIP FOR SUCCESS.

CDGDNM:	MOVEI	T2,[FLDDB. (.CMNUM,,^D10)]
	PJRST	JCOMND##	;GET IT

	PRGEND
	TITLE	CDIFLT	GET FLOATING POINT NUMBER FROM TTY
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CRIFLT,CDIFLT

	;ROUTINE TO INPUT A FLOATING NUMBER FROM THE TTY. RETURN
	;IS NON-SKIP FOR ERROR, SKIP IF OK, OR BUMP UP ONE LEVEL
	;IF REPARSE IS NECESSARY.

CRIFLT:	PUSHJ	P,CDIFLT	;GET IT
	 POP 	P,(P)		;REPARSE
	 POPJ	P,		;ERROR
	PJRST	CPOPJ1##	;OK

	;ROUTINE TO INPUT FLOATING NUMBER FROM THE TTY.
	;RETURN IS +1 FOR REPARSE NECESSARY, SKIP IF ERROR
	;OR DOUBLE SKIP FOR SUCCESS.

CDIFLT:	MOVEI	T2,[FLDDB. (.CMFLT)]
	PJRST	JCOMND##	;GET IT

	PRGEND
	TITLE	CDFLSP	GET FILESPEC (COMPONENTS)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CRFLSP,CDFLSP

	;ROUTINE TO GET FILESPEC. ENTER WITH GTJFN BLOCK SET UP.
	;RETURN IS NON-SKIP FOR NO SUCH FILE, SKIP IF OK WITH JFN
	;IN T2. BUMP UP ONE LEVEL IF REPARSE NECESSARY.

CRFLSP:	PUSHJ	P,CDFLSP	;GET FILE
	 POP	P,(P)		;REPARSE
	 POPJ	P,		;NO SUCH FILE
	PJRST	CPOPJ1##	;OK

	;ROUTINE TO GET FILESPEC. ENTER WITH GTJFN BLOCK SET UP.
	;RETURN IS +1 FOR REPARSE, SKIP FOR NO SUCH FILE, AND
	;DOUBLE SKIP FOR OK WITH JFN IN T2.

CDFLSP:	MOVEI	T2,[FLDDB. (.CMFIL)]
	JRST	JCOMND##	;GO DO IT

	PRGEND
	TITLE	CDIFSP	GET INPUT FILESPEC (COMPONENTS)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CRIFSP,CDIFSP

	;ROUTINE TO GET INPUT FILESPEC. ENTER WITH GTJFN BLOCK SET UP.
	;RETURN IS NON-SKIP FOR NO SUCH FILE, SKIP IF OK WITH JFN
	;IN T2. BUMP UP ONE LEVEL IF REPARSE NECESSARY.

CRIFSP:	PUSHJ	P,CDIFSP	;GET FILE
	 POP	P,(P)		;REPARSE
	 POPJ	P,		;NO SUCH FILE
	PJRST	CPOPJ1##	;OK

	;ROUTINE TO GET INPUT FILESPEC. ENTER WITH GTJFN BLOCK SET UP.
	;RETURN IS +1 FOR REPARSE, SKIP FOR NO SUCH FILE, AND
	;DOUBLE SKIP FOR OK WITH JFN IN T2.

CDIFSP:	MOVEI	T2,[FLDDB. (.CMIFI)]
	JRST	JCOMND##	;GO DO IT

	PRGEND
	TITLE	CDOFSP	GET OUTPUT FILESPEC (COMPONENTS)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CROFSP,CDOFSP

	;ROUTINE TO GET OUTPUT FILESPEC. ENTER WITH GTJFN BLOCK SET UP.
	;RETURN IS NON-SKIP FOR NO SUCH FILE, SKIP IF OK WITH JFN
	;IN T2. BUMP UP ONE LEVEL IF REPARSE NECESSARY.

CROFSP:	PUSHJ	P,CDOFSP	;GET FILE
	 POP	P,(P)		;REPARSE
	 POPJ	P,		;NO SUCH FILE
	PJRST	CPOPJ1##	;OK

	;ROUTINE TO GET OUTPUT FILESPEC. ENTER WITH GTJFN BLOCK SET UP.
	;RETURN IS +1 FOR REPARSE, SKIP FOR NO SUCH FILE, AND
	;DOUBLE SKIP FOR OK WITH JFN IN T2.

CDOFSP:	MOVEI	T2,[FLDDB. (.CMOFI)]
	JRST	JCOMND##	;GO DO IT

	PRGEND
	TITLE	CDGDEV	GET DEVICE NAME (COMPONENTS)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CRGDEV,CDGDEV

	;ROUTINE TO GET DEVICE NAME. RETURN WITH DEVICE
	;NUMBER IN T2. EXIT NON-SKIP IF BAD, OR SKIP IF GOOD.
	;BUMP UP ONE LEVEL IF REPARSE NECESSARY.

CRGDEV:	PUSHJ	P,CDGDEV	;GET IT
	 POP	P,(P)		;REPARSE
	 POPJ	P,		;BAD
	PJRST	CPOPJ1##	;OK

	;ROUTINE TO GET DEVICE NAME FROM THE TTY. ENTER ALREADY
	;INITIALISED. RETURN IS +1 FOR REPARSE, SKIP FOR NO SUCH
	;DEVICE, OR DOUBLE SKIP IF OK WITH 36-BIT DEVICE
	;NUMBER IN T2.

CDGDEV:	MOVEI	T2,[FLDDB. (.CMDEV)]
	PJRST	JCOMND##	;GO GET IT

	PRGEND
	TITLE	CDGFLD	PARSE AN ARBITRARY FIELD. (COMPONENTS)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CRGFLD,CDGFLD

	;ROUTINE TO PARSE AN ARBITRARY FIELD. ENTER WITH
	;T1 CONTAINING THE MAXIMUM LENGTH OF THE FIELD IN THE
	;LEFT HALF AND THE ADDRESS OF WHERE TO PUT IT IN THE
	;RIGHT HALF. RETURN +1 IF BAD, OR SKIP IF OK. BUMP UP
	;ONE LEVEL IF REPARSE NECESSARY.

CRGFLD:	PUSHJ	P,CDGFLD	;DO IT
	 POP	P,(P)		;REPARSE
	 POPJ	P,		;ERROR
	PJRST	CPOPJ1##	;OK

	;ROUTINE TO PARSE AN ARBITRARY FIELD. ENTER WITH T1 CONTAINING
	;THE LENGTH OF THE FIELD IN THE LEFT HALF AND THE ADDRESS
	;OF WHERE TO PUT IT IN THE RIGHT HALF. RETURN +1 IF
	;REPARSE NECESSARY, SKIP IF BAD, OR DOUBLE SKIP IF GOOD.

CDGFLD:	PUSH	P,T1		;SAVE ADDRESS WHERE TO PUT IT
	MOVEI	T2,[FLDDB. (.CMFLD)] ;GET A FIELD
	PUSHJ	P,JCOMND##	;GET IT
	 PJRST	T1POPJ##	;REPARSE
	 PJRST	[POP P,T1
		 PJRST CPOPJ1##] ;ERROR
	POP	P,T2		;RESTORE ARGUMENT
	MOVEI	T1,ATMBUF##	;POINT TO ARGUMENT
	PUSHJ	P,COPSTG##	;COPY IT
	 PJRST	CPOPJ1##	;ERROR
	PJRST	CPOPJ2##	;OK

	PRGEND
	TITLE	CDGKNT	GET KEY WORD OR NOTHING (COMPONENTS)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CRGKNT,CDGKNT

	;ROUTINE TO LOOK FOR A KEYWORD OR NOTHING. ENTER WITH
	;ADDRESS OF TABLE IN T2. EXIT NON-SKIP IF BAD, SKIP IF
	;NOTHING, OR DOUBLE SKIP IF OK. BUMP UP ONE LEVEL IF
	;REPARSE NECESSARY.

CRGKNT:	PUSHJ	P,CDGKNT	;LOOK IT UP
	 POP	P,(P)		;BAD
	 POPJ	P,		;ERROR
	 PJRST	CPOPJ1##	;NOTHING
	PJRST	CPOPJ2##	;OK

	;ROUTINE TO LOOK UP KEY WORD OR NOTHING. ENTER WITH ADDRESS
	;OF TABLE IN T2. RETURN +1 IF REPARSE NECESSARY, SKIP IF
	;NOTHING, DOUBLE SKIP IF BAD, OR TREBLE SKIP IF OK.

CDGKNT:	PUSHJ	P,CDGKEY##	;LOOK IT UP
	 POPJ	P,		;REPARSE
	 JRST	KNTERR		;ERROR?
	PJRST	CPOPJ3##	;OK

KNTERR:	TXNN	T1,CM%EOC	;CARRIAGE RETURN TYPED?
	PJRST	CPOPJ1##	;ERROR
	LDB	T2,[350700,,ATMBUF##] ;LOOK AT ATOM
	JUMPE	T2,CPOPJ2##	;NOTHING TYPED
	PJRST	CPOPJ1##	;ERROR

	PRGEND
	TITLE	CDDKEY	COMMAND KEY DOUBLE LOOKUP.(COMPONENTS)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CRDKEY,CDDKEY

	;ROUTINE TO PERFORM DOUBLE TABLE LOOKUP. ENTER WITH ADDRESS OF
	;TABLES IN T2 AND T3. EXIT NON-SKIP IF BAD, OR SKIP IF GOOD.
	;BUMP UP ONE LEVEL IF REPARSE NECESSARY

CRDKEY:	PUSHJ	P,CDDKEY	;LOOK IT UP
	 POP	P,(P)		;REPARSE
	 POPJ	P,		;BAD
	PJRST	CPOPJ1##	;OK

	;ROUTINE TO PERFORM DOUBLE TABLE LOOKUP. ENTER WITH ADDRESS
	;OF TABLES IN T2 AND T3. EXIT NON-SKIP IF REPARSE NECESSARY,
	;OR SKIP IF BAD REPLY, OR DOUBLE SKIP IF OK

CDDKEY:	MOVEM	T2,FLUB##+.CMDAT ;SAVE ADDRESS OF FIRST TABLE
	MOVEM	T3,FLUB1##+.CMDAT ;AND SECOND TABLE
	MOVX	T2,<FLD(.CMKEY,CM%FNC)>
	MOVEM	T2,FLUB##+.CMFNP ;SET FUNCTION
	MOVEM	T2,FLUB1##+.CMFNP ;IN BOTH
	MOVEI	T2,FLUB1##	;GET ADDRESS OF SECOND BLOCK
	HRRM	T2,FLUB##+.CMFNP ;MAKE POINTER
	SETZM	FLUB##+.CMHLP
	SETZM	FLUB1##+.CMHLP
	SETZM	FLUB##+.CMDEF	;JUST IN CASE
	SETZM	FLUB1##+.CMDEF	;TWICE
	MOVEI	T2,FLUB##	;POINT TO BLOCK
	PJRST	JCOMND##	;DO JSYS

	PRGEND
	TITLE	CDGKEY	COMMAND KEY LOOKUP.(COMPONENTS)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CRGKEY,CDGKEY

	;ROUTINE TO PERFORM TABLE LOOKUP. ENTER WITH ADDRESS OF
	;TABLE IN T2. EXIT NON-SKIP IF BAD, OR SKIP IF GOOD.
	;BUMP UP ONE LEVEL IF REPARSE NECESSARY

CRGKEY:	PUSHJ	P,CDGKEY	;LOOK IT UP
	 POP	P,(P)		;REPARSE
	 POPJ	P,		;BAD
	PJRST	CPOPJ1##	;OK

	;ROUTINE TO PERFORM TABLE LOOKUP. ENTER WITH ADDRESS
	;OF TABLE IN T2. EXIT NON-SKIP IF REPARSE NECESSARY,
	;OR SKIP IF BAD REPLY, OR DOUBLE SKIP IF OK

CDGKEY:	MOVEM	T2,FLUB##+.CMDAT ;SAVE ADDRESS OF TABLE
	MOVX	T2,<FLD(.CMKEY,CM%FNC)>
	MOVEM	T2,FLUB##+.CMFNP ;SET FUNCTION
	SETZM	FLUB##+.CMHLP
	SETZM	FLUB##+.CMDEF	;JUST IN CASE
	MOVEI	T2,FLUB##	;POINT TO BLOCK
	PJRST	JCOMND##	;DO JSYS

	PRGEND
	TITLE	CDGTCM	GET CONFIRMATION (COMPONENTS)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CRGTCM,CDGTCM

	;ROUTINE TO GET CONFIRMATION AND PRESERVE T1-T4. RETURN
	;NON-SKIP FOR BAD, SKIP IF OK. BUMP UP A LEVEL IF REPARSE
	;NECESSARY.

CRGTCM:	PUSHJ	P,CDGTCM	;GET CONFIRMATION
	 POP	P,(P)		;REPARSE
	 POPJ	P,		;BAD
	PJRST	CPOPJ1##	;OK

	;ROUTINE TO GET CONFIRMATION AND PRESERVE T1-T4.
	;RETURN +1 FOR REPARSE, SKIP FOR ERROR,
	;OR DOUBLE SKIP FOR SUCCESS.

CDGTCM:	PUSHJ	P,SAVT##	;SAVE T1-T4
	MOVEI	T2,[FLDDB. (.CMCFM)]
	PUSHJ	P,JCOMND##	;GET CONFIRMATION
	 POPJ	P,		;REPARSE
	 ERROR	CPOPJ1##,<BAD CONFIRMATION>
	PJRST	CPOPJ2##	;DOUBLE SKIP

	PRGEND
	TITLE	CDMNOI	MAKE NOISE. (COMPONENTS)
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL

	ENTRY	CRMNOI,CDMNOI

	;ROUTINE TO MAKE NOISE. ENTER WITH POINTER TO NOISE
	;IN T2. EXIT IS +1 ALWAYS, EXCEPT WHEN REPARSE NECESSARY.
	;THEN WE BUMP UP ONE LEVEL.

CRMNOI:	PUSHJ	P,CDMNOI	;MAKE IT
	 POP	P,(P)		;REPARSE
	POPJ	P,		;OK

	;ROUTINE TO MAKE NOISE. ENTER WITH POINTER TO NOISE
	;IN T2. EXITS +1 FOR REPARSE, SKIP IF OK.

CDMNOI:	MOVEM	T2,FLUB##+.CMDAT ;SAVE POINTER
	SETZM	FLUB##+.CMHLP	;CLEAR SOME MEMORY
	SETZM	FLUB##+.CMDEF	;FOR COSMETIC REASONS
	MOVX	T2,<FLD(.CMNOI,CM%FNC)> ;MAKE NOISE
	MOVEM	T2,FLUB##+.CMFNP ;SAVE FUNCTION
	MOVEI	T2,FLUB##	;POINT TO BLOCK
	PUSHJ	P,JCOMND##	;DO IT
	 POPJ	P,		;NEED TO REPARSE
	 JFCL			;CANNOT GET HERE
	PJRST	CPOPJ1##	;SKIP

	PRGEND
	TITLE	CDSETP	SET UP AND INITIALISE COMMAND JSYS
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>
	SALL

	ENTRY	CDSETP

	;ROUTINE TO SET UP COMMAND JSYS AND INITIALISE IT.

CDSETP:	MOVE	T1,[.PRIIN,,.PRIOU] ;JFNS FOR USER INPUT AND OUTPUT
	MOVEM	T1,CMDBLK##+.CMIOJ
	HRROI	T1,BUFFER##	;POINTER TO START OF USER INPUT
	MOVEM	T1,CMDBLK##+.CMBFP
	MOVEM	T1,CMDBLK##+.CMPTR
	MOVEI	T1,BUFSIZ*NCHPW	;SIZE REMAINING IN THE BUFFER
	MOVEM	T1,CMDBLK##+.CMCNT
	SETZM	CMDBLK##+.CMINC	;NUMBER OF UNPARSED CHARACTERS
	HRROI	T1,ATMBUF##	;POINT TO ATOM BUFFER
	MOVEM	T1,CMDBLK##+.CMABP
	MOVEI	T1,ATMSIZ*NCHPW	;NUMBER OF CHARACTERS IN ATOM BUFFER
	MOVEM	T1,CMDBLK##+.CMABC
	MOVEI	T1,GTJBLK##	;ADDRESS OF GTJFN BLOCK
	MOVEM	T1,CMDBLK##+.CMGJB
	MOVE	T1,CMDT1##	;GET PROMPT
	MOVEM	T1,CMDBLK##+.CMRTY
	SETZM	CMDBLK##+.CMFLG	;CLEAR FLAGS
	MOVEI	T2,[FLDDB. (.CMINI)] ;INITIALISE
	PUSHJ	P,JCOMND##	;DO IT
	 JFCL			;CANNOT GET HERE
	 JFCL			;OR HERE
	POPJ	P,		;OK

	PRGEND
	TITLE	CDSRGS	SAVE COMMAND PARAMETERS
	SUBTTL	C.MITCHELL 1977. ROUTINES WRITTEN AT COLOGNE.

	SEARCH	MONSYM,MACSYM,CMLBSM

	IFNDEF	.PSECT,<
	.DIRECT	.XTABM>

	SALL
	ENTRY	CDSRGS

	;ROUTINE TO SAVE PARAMETERS SUPPLIED IN T1,T2, USED WHEN
	;CALLING "CMND" JSYS.

CDSRGS:	MOVEM	T1,CMDT1##	;SAVE T1
	MOVEM	T2,CMDT2##	;AND T2
	MOVEM	T3,CMDT3##	;AND T3
	POPJ	P,

	END