Google
 

Trailing-Edge - PDP-10 Archives - tops10_tools_bb-fp64b-sb - 10,7/rsx20f/rsxtol/copy.lst
There are 2 other files named copy.lst in the archive. Click here to see a list.
.MAIN.	MACRO M1113  27-FEB-85 12:21
TABLE OF CONTENTS

    19-    1	TITLE PAGE
    20-   44	MACROS AND PARAMETERS
    21-   91	COPY TASK IMPURE DATA AREA
    22-  144	INITIALIZATION
    23-  203	PARSE COMMAND LINE
    24-  310	CHECK OUT OUR DEVICES
    25-  329	DISPATCH TO ACTION ROUTINES
    26-  358	COPY, VERIFY, COPY & VERIFY (/CP, /VF, /CP/VF)
    27-  448	SPECIFICATION ERRORS
    28-  462	READ, ZERO (/RD, /ZE)
    29-  504	^C CHECK AND DONE
    30-  529	I/O ROUTINES
    31-  644	COMMAND PARSER ROUTINES
    32-  728	TYPEOUT ROUTINES
    33-  913	END STATEMENT
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 17
DTE20 HARDWARE BITS

    701						.LIST	MEB
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 19
TITLE PAGE

      1						.SBTTL	TITLE PAGE
      2						.TITLE	COPY -- MCR FUNCTION 'COP' FOR RSX-20F
      3					.IDENT	"V003B"
      4					;
      5					;
      6					;
      7					;
      8					;                             COPYRIGHT (C) 1975, 1978, 1985 BY
      9					;                     DIGITAL EQUIPMENT CORPORATION, MAYNARD MASS.
     10					;			ALL RIGHTS RESERVED.
     11					;       THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE  USED  AND  COPIED
     12					;       ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSION
     13					;       OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR ANY OTHER COPIES THERE-
     14					;       OF  MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON.
     15					;       NO TITLE TO OR OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.
     16					;
     17					;       THE INFORMATION CONTAINED IN THIS SOFTWARE IS SUBJECT TO CHANGE  WITHOUT
     18					;       NOTICE  AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
     19					;       CORPORATION.
     20					;
     21					;       DIGITAL ASSUMES NO RESPONSIBILITY FOR THE  USE  OR  RELIABILITY  OF  ITS
     22					;       SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPILED BY DIGITAL.
     23					;
     24					;
     25					;
     26					;
     27					;
     28					;
     29					;		MODULE: MCR FUNCTION -- COP
     30					;
     31					;		VERSION: V003B
     32					;
     33					;		AUTHOR: TOM PORCHER
     34					;
     35					;		DATE: 29-APR-76
     36					;
     37					;
     38					;	THIS MODULE CONTAINS:
     39					;
     40					;	-- COMMAND PARSER FOR COP
     41					;
     42					; TCO 4.1.1105	20-MAY-80	S. LEAPLINE	CHANGE CONTROL-C RECOG.
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 20
MACROS AND PARAMETERS

     44						.SBTTL	MACROS AND PARAMETERS
     45					;
     46					; ASSEMBLY CONDITIONS
     47					;
     48						.LIST	MEB
     49						.ENABLE	AMA
     50					;
     51					; MISC. .MCALLS
     52					;
     53					.MCALL ALUN$S,CLEF$S,EXIT$S,GPRT$S,QIOW$S,QIO$S,WTSE$S,CALL,RETURN,PUSH,POP
     54					;
     55					; MACROS
     56					;
     57					.MACRO	TYPE	MSG,ARG
     58						.PSECT	TEXT
     59					$$$=.
     60						.ASCIZ	"MSG"
     61						.PSECT
     62						PUSH	#$$$
     63					.IF NB <ARG>
     64						CALL	TYP'ARG
     65					.IFF
     66						CALL	TYPMSG
     67					.ENDC
     68					.ENDM	TYPE
     69					;
     70					.MACRO	ERROR	MSG
     71						TYPE	<"<11>"MSG"<5>">
     72					.ENDM	ERROR
     73					;
     74					.MACRO	WARN	MSG
     75						TYPE	<"<12>"MSG"<1>">
     76					.ENDM	WARN
     77					;
     78					;
     79					; PARAMETERS
     80					;
     81					;
     82					; LOGICAL UNIT AND EVENT FLAG ASSIGNMENTS
     83					;
     84		000001 			CTYLUN=	1			;LUN FOR CTY
     85		000001 			E.FCTY=	CTYLUN			;ALSO EFN FOR CTY
     86		000002 			SRCLUN=	2			;LUN FOR INPUT
     87		000002 			E.FSRC=	SRCLUN			;ALSO EFN FOR INPUT
     88		000003 			DSTLUN=	3			;LUN FOR OUTPUT
     89		000003 			E.FDST=	DSTLUN			;ALSO EFN FOR OUTPUT
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 21
COPY TASK IMPURE DATA AREA

     91						.SBTTL	COPY TASK IMPURE DATA AREA
     92					;
     93					; VARIBLES
     94					;
     95	000000				SPSAVE:	.BLKW	1		;STACK POINTER SAVE
     96	000002				RADIX:	.BLKW	1		;OUTPUT NUMBER RADIX
     97		000004'			CMDCLR=.
     98	000004				QIOSTS:	.BLKW	2		;QIO STATUS BLOCK
     99					;
    100					; *** SRCXXX AND DSTXXX MUST REMAIN IN SAME ORDER
    101					;
    102	000010				SRCBLK:	.BLKW	2		;INPUT BLOCK #
    103	000014				SRCDEV:	.BLKW	1		;INPUT DEVICE IN ASCII
    104	000016				SRCUNT:	.BLKB	1		;INPUT UNIT #
    105	000017				SRCNBF:	.BLKB	1		;1-- DON'T BLOCK (DO QIO$)
    106									;0-- BLOCK (DO QIOW$)
    107									;-1-- WAIT FOR LAST NON-BLOCK REQUEST (DO WTSE$)
    108						.EVEN
    109	000020				DSTBLK:	.BLKW	2		;OUTPUT BLOCK #
    110	000024				DSTDEV:	.BLKW	1		;OUTPUT DEVICE
    111	000026				DSTUNT:	.BLKB	1		; . .
    112	000027				DSTNBF:	.BLKB	1		;OUTPUT NO-BLOCK FLAG
    113					;
    114	000030				EOVFLG:	.BLKB	1		;1-- END-OF-VOLUME REACHED ON A DEVICE
    115	000031				CTZFLG:	.BLKB	1		;^Z SEEN ON INPUT-- EXIT WHEN DONE
    116	000032				HEFLAG:	.BLKB	1		;1-- TYPE HELP MESSAGE
    117						.EVEN
    118	000034				CPVFLG:
    119	000034				CPFLAG:	.BLKB	1		;1-- COPY FILES
    120	000035				VFFLAG:	.BLKB	1		;1-- VERIFY
    121						.EVEN
    122	000036				RDZFLG:
    123	000036				RDFLAG:	.BLKB	1		;1-- JUST READ
    124	000037				ZEFLAG:	.BLKB	1		;1-- ZERO DESTINATION DEVICE
    125		000034 			CMDCLN=.-CMDCLR
    126					;
    127					; BUFFERS
    128					;
    129	000040				TYPBUF:	.BLKB	100.		;BUFFER FOR CTY OUTPUT
    130	000204				CTYBUF:	.BLKB	80.		;BUFFER FOR INPUT FROM CTY
    131		000120 			CTYBFL=	.-CTYBUF
    132	000324	   000 				.BYTE	0		;TO MAKE ASCIZ ALWAYS
    133						.EVEN
    134					;
    135					; BUFFER POINTERS TO THE END OF OUR TASK PARTITION
    136					;
    137	000326				BUFSIZ:	.BLKW	1		;BUFFER SIZE
    138	000330				BUFSZ2:	.BLKW	1		;BUFFER SIZE/2
    139	000332				BUFSZ4:	.BLKW	1		;BUFFER SIZE/4
    140	000334				BUFBL4:	.BLKW	1		;BUFFER SIZE IN BLOCKS/4
    141	000336	000000 	000000 		BUFEND:	.LIMIT			;END OF BUFFER
    142		000340'			BUFADR=.-2			;BUFFER ADDRESS (STORED BY TASK BUILDER)
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 22
INITIALIZATION

    144						.SBTTL	INITIALIZATION
    145					;
    146					; REQUEST FOR COPY BY MCR COP COMMAND CALLS COPY HERE
    147					;
    148	000342				COPY:
    149	000342	010637 	000000'			MOV	SP,SPSAVE	;SAVE CURRENT STACK POINTER
    150					;
    151					; SETUP COMMAND DEFAULTS
    152					;
    153	000346	012701 	000004'			MOV	#CMDCLR,R1	;GET START OF AREA TO CLEAR
    154	000352	012705 	000034 			MOV	#CMDCLN,R5	;AND LENGTH OF AREA, IN BYTES
    155	000356				10$:
    156	000356	105021 				CLRB	(R1)+		;CLEAR A BYTE
    157	000360	077502 				SOB	R5,10$		;CLEAR 'EM ALL
    158					;
    159					; GET BUFFER SIZE
    160					;
    161	000362	012700 	000326'			MOV	#BUFSIZ,R0	;GET ADDRESS OF BUFFER SIZE AREA
    162	000366					GPRT$S	,R0		;GET OUR PARTITION PARAMETERS
	000366	010046 				MOV	R0,-(SP)
	000370	005046 				CLR	-(SP)
	000372	005046 				CLR	-(SP)
	000374	012746 				MOV	(PC)+,-(SP)
	000376	   101 	   004 			.BYTE	65.,4
	000400	104375 				EMT	375
    163	000402	103466 				BCS	EXITC		;BLEAH!!
    164	000404	013720 	000000G			MOV	@#$DSW,(R0)+	;WE WANT VIRTUAL ADDRESS
    165		000006 			.REPT 6
    166						ASL	(R0)		;SHIFT TO BYTES FROM 1/64
    167					.ENDR
	000410	006310 				ASL	(R0)		;SHIFT TO BYTES FROM 1/64
	000412	006310 				ASL	(R0)		;SHIFT TO BYTES FROM 1/64
	000414	006310 				ASL	(R0)		;SHIFT TO BYTES FROM 1/64
	000416	006310 				ASL	(R0)		;SHIFT TO BYTES FROM 1/64
	000420	006310 				ASL	(R0)		;SHIFT TO BYTES FROM 1/64
	000422	006310 				ASL	(R0)		;SHIFT TO BYTES FROM 1/64
    168	000424	061040 				ADD	(R0),-(R0)	;GET LAST ADDRESS IN PARITION
    169	000426	163710 	000340'			SUB	BUFADR,(R0)	;COMPUTE BUFFER SIZE
    170	000432	042710 	003777 			BIC	#<4*1000>-1,(R0) ;(BUFSIZ) ROUND DOWN TO 4 BLOCK BOUNDARY
    171	000436	011001 				MOV	(R0),R1		;COPY THAT
    172	000440	012010 				MOV	(R0)+,(R0)	;(BUFSZ2) COPY SIZE
    173	000442	000241 				CLC			;CLEAR THE NEW BIT
    174	000444	006010 				ROR	(R0)		;(BUFSZ2) MAKE THAT SIZE/2
    175	000446	012010 				MOV	(R0)+,(R0)	;(BUFSZ4) COPY IT AGAIN
    176	000450	006010 				ROR	(R0)		;(BUFSZ4) SIZE/4
    177	000452	012010 				MOV	(R0)+,(R0)	;(BUFBL4)  AND AGAIN
    178	000454	000310 				SWAB	(R0)		;(BUFBL4) MAKE THAT # BLOCKS IN BUFFER/2
    179	000456	006020 				ROR	(R0)+		;(BUFBL4)  BLOCKS/4
    180	000460	010120 				MOV	R1,(R0)+	;(BUFEND) GET SIZE AGAIN
    181	000462	061040 				ADD	(R0),-(R0)	;(BUFEND) COMPUTE END OF BUFFER
    182					;
    183					; SETUP TO READ A LINE FROM THE CTY
    184					;
    185	000464					ALUN$S	#CTYLUN,#"TT,#0	;ASSIGN CTY TO LUN 1
	000464	005046 				CLR	-(SP)
	000466	012746 	052124 			MOV	#"TT,-(SP)
	000472	012746 	000001 			MOV	#CTYLUN,-(SP)
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 22-1
INITIALIZATION

	000476	012746 				MOV	(PC)+,-(SP)
	000500	   007 	   004 			.BYTE	7.,4
	000502	104375 				EMT	375
    186	000504	103425 				BCS	EXITC		;GIVE UP IF NO CTY!!!!
    187	000506					TYPE	^\COP>\		;TYPE PROMPT MESSAGE
	000000	   103 	   117 	   120 		.ASCIZ	"COP>"
	000003	   076 	   000
	000506	012746 	000000'			MOV	#$$$,-(SP)
	000512	004737 	002754'			JSR	PC,TYPMSG
    188	000516					QIOW$S	#IO.RLB,#CTYLUN,#E.FCTY,,#QIOSTS,,<#CTYBUF,#CTYBFL>
	000516	012746 	000120 			MOV	#CTYBFL,-(SP)
	000522	012746 	000204'			MOV	#CTYBUF,-(SP)
	000526	005046 				CLR	-(SP)
	000530	012746 	000004'			MOV	#QIOSTS,-(SP)
	000534	005046 				CLR	-(SP)
	000536	112716 	000001 			MOVB	#E.FCTY,(SP)
	000542	012746 	000001 			MOV	#CTYLUN,-(SP)
	000546	012746 	000000G			MOV	#IO.RLB,-(SP)
	000552	012746 				MOV	(PC)+,-(SP)
	000554	   003 	   010 			.BYTE	3,$$$T1
	000556	104375 				EMT	375
    189	000560				EXITC:
    190	000560	103571 				BCS	EXITA		;GIVE UP IF FAILURE
    191	000562	105737 	000004'			TSTB	QIOSTS+0	;ERROR STATUS
    192	000566	003006 				BGT	10$		;NO-- GO ON
    193	000570	123727 	000004'	000000G		CMPB	QIOSTS+0,#IE.EOF ;^Z??
    194	000576	001162 				BNE	EXITA		;NO-- GIVE UP NOW
    195	000600	105237 	000031'			INCB	CTZFLG		;YES-- SAY TO EXIT WHEN DONE
    196	000604				10$:
    197	000604					TYPE	<"<1>">		;INSURE A <CR><LF>
	000005	   001 	   000 			.ASCIZ	""<1>""
	000604	012746 	000005'			MOV	#$$$,-(SP)
	000610	004737 	002754'			JSR	PC,TYPMSG
    198	000614	013704 	000006'			MOV	QIOSTS+2,R4	;GET # CHARACTERS TYPED AT ME
    199	000620	105064 	000204'			CLRB	CTYBUF(R4)	;CLEAR LAST BYTE OF INPUT (MAKE ASCIZZZ)
    200	000624	012704 	000204'			MOV	#CTYBUF,R4	;POINT TO START OF INPUT TO PARSE
    201					;	BR	PARSE		;PARSE THE LINE
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 23
PARSE COMMAND LINE

    203						.SBTTL	PARSE COMMAND LINE
    204					;
    205					; NOW TO PARSE THE LINE, BUFFER ADDRESS IN R4
    206					;
    207	000630				PARSE:
    208	000630					CALL	GETNB		;GET NON-BLANK CHARACTER
	000630	004737 	002622'			JSR	PC,GETNB
    209	000634	001002 				BNE	10$		;GOT SOMETHING-- GO ON
    210	000636	000137 	002152'			JMP	DONE		;NULL COMMAND-- JUST DONE
    211	000642				10$:
    212	000642					CALL	GETNAM		;GET A DEVICE NAME
	000642	004737 	002644'			JSR	PC,GETNAM
    213	000646	103552 				BCS	SYNERR		;NO SUCH LUCK
    214	000650	010037 	000024'			MOV	R0,DSTDEV	;COPY THE TYPED NAME
    215	000654	001411 				BEQ	20$		;NOT SPEC-- SEE IF =
    216	000656					CALL	GETNUM		;GET UNIT NUMBER OF DEVICE (IF ANY)
	000656	004737 	002710'			JSR	PC,GETNUM
    217	000662	103544 				BCS	SYNERR		;TOO BIG-- COMPLAIN
    218	000664	110037 	000026'			MOVB	R0,DSTUNT	;COPY THE UNIT NUMBER
    219	000670	122724 	000072 			CMPB	#':,(R4)+	; : FOLLOWING DEVICE?
    220	000674	001401 				BEQ	20$		;YES-- IGNORE IT
    221	000676	105744 				TSTB	-(R4)		;NO-- GO BACK TO LOOK AT IT AGAIN
    222	000700				20$:
    223	000700					CALL	GETNB		;GET NON-BLANK CHARACTER
	000700	004737 	002622'			JSR	PC,GETNB
    224	000704	001540 				BEQ	CMDONE		;ALL DONE IF EOL
    225	000706	122700 	000075 			CMPB	#'=,R0		;THIS = SPEC?
    226	000712	001023 				BNE	25$		;NO-- TRY FOR SWITCHES
    227	000714	105724 				TSTB	(R4)+		;YES-- SKIP IT
    228	000716					CALL	GETNB		;GET NON-BLANK
	000716	004737 	002622'			JSR	PC,GETNB
    229	000722	001531 				BEQ	CMDONE		;EOL-- ALL DONE
    230	000724					CALL	GETNAM		;GET A DEVICE NAME
	000724	004737 	002644'			JSR	PC,GETNAM
    231	000730	103521 				BCS	SYNERR		;NO SUCH LUCK
    232	000732	010037 	000014'			MOV	R0,SRCDEV	;COPY THE TYPED NAME
    233	000736	001411 				BEQ	25$		;NONE-- TRY FOR SWITCHES
    234	000740					CALL	GETNUM		;GET UNIT NUMBER OF DEVICE (IF ANY)
	000740	004737 	002710'			JSR	PC,GETNUM
    235	000744	103513 				BCS	SYNERR		;TOO BIG-- COMPLAIN
    236	000746	110037 	000016'			MOVB	R0,SRCUNT	;COPY THE UNIT NUMBER
    237	000752	122724 	000072 			CMPB	#':,(R4)+	; : FOLLOWING DEVICE?
    238	000756	001401 				BEQ	25$		;YES-- IGNORE IT
    239	000760	105744 				TSTB	-(R4)		;NO-- GO BACK TO LOOK AT IT AGAIN
    240					;
    241					; LOOK FOR ALL SWITCHES
    242					;
    243	000762				25$:
    244	000762					CALL	GETNB		;SKIP BLANKS AFTER UNIT
	000762	004737 	002622'			JSR	PC,GETNB
    245	000766	001507 				BEQ	CMDONE		;END OF COMMAND-- ALL OK
    246	000770	122700 	000057 			CMPB	#'/,R0		;THIS A SWITCH?
    247	000774	001077 				BNE	SYNERR		;NO-- BAD CHARACTER
    248	000776	105724 				TSTB	(R4)+		;YES-- SKIP OVER IT
    249	001000	012702 	000001 			MOV	#1,R2		;ASSUME NOT /-(SW)
    250	001004	122714 	000055 			CMPB	#'-,(R4)	;THIS /-(SW)?
    251	001010	001002 				BNE	30$		;NO-- GO ON
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 23-1
PARSE COMMAND LINE

    252	001012	105724 				TSTB	(R4)+		;YES-- SKIP OVER -
    253	001014	005002 				CLR	R2		;AND SET TO CLEAR THE FLAG
    254	001016				30$:
    255	001016					CALL	GETNAM		;GET THE SWITCH
	001016	004737 	002644'			JSR	PC,GETNAM
    256	001022	103464 				BCS	SYNERR		;TOO LONG-- GIVE UP
    257	001024	022700 	046102 			CMP	#"BL,R0		;/BL:NNNN?
    258	001030	001027 				BNE	39$		;NO-- GO ON
    259	001032	122714 	000072 			CMPB	#':,(R4)	;THIS /BL:?
    260	001036	001056 				BNE	SYNERR		;NO DICE
    261	001040				32$:
    262	001040	105724 				TSTB	(R4)+		;YES-- OK
    263	001042					CALL	GETNB		;GET THE BLANKS
	001042	004737 	002622'			JSR	PC,GETNB
    264	001046	001452 				BEQ	SYNERR		;OOPS
    265	001050					CALL	GETNUM		;GET THE NUMBER
	001050	004737 	002710'			JSR	PC,GETNUM
    266	001054	103447 				BCS	SYNERR		;OOPS
    267	001056	122714 	000054 			CMPB	#',,(R4)	;THIS N,NNN?
    268	001062	001005 				BNE	35$		;NO-- GO ON
    269	001064	110037 	000010'			MOVB	R0,SRCBLK+0	;YES-- SET SRC BLOCK (HIGH PART)
    270	001070	110037 	000020'			MOVB	R0,DSTBLK+0	; AND DESTINATION
    271	001074	000761 				BR	32$		;LOOP FOR LOW PART
    272					;
    273	001076				35$:
    274	001076	010037 	000012'			MOV	R0,SRCBLK+2	;SAVE LOW PART
    275	001102	010037 	000022'			MOV	R0,DSTBLK+2	; . .
    276	001106	000725 				BR	25$		;LOOP FOR MORE SWITCHES
    277					;
    278	001110				39$:
    279	001110	012701 	001150'			MOV	#MODTBL,R1	;GET ADDRESS OF SWITCH TABLE
    280	001114	012705 	000005 			MOV	#MODTLN,R5	; AND LENGTH OF IT
    281	001120				40$:
    282	001120	020021 				CMP	R0,(R1)+	;THIS SWITCH MATCH?
    283	001122	001002 				BNE	50$		;NO-- LOOP FOR MORE
    284	001124	110231 				MOVB	R2,@(R1)+	;YES-- SET THE FLAG AS REQUESTED
    285	001126	000715 				BR	25$		;LOOP FOR ALL SWITCHES
    286					;
    287	001130				50$:
    288	001130	005721 				TST	(R1)+		;NO-- SKIP OVER FLAG ADDRESS
    289	001132	077506 				SOB	R5,40$		;NO-- LOOP FOR ALL SWITCHES
    290	001134					ERROR	<Illegal switch /"<2>">
	000007	   011 	   111 	   154 		.ASCIZ	""<11>"Illegal switch /"<2>""<5>""
	000012	   154 	   145 	   147
	000015	   141 	   154 	   040
	000020	   163 	   167 	   151
	000023	   164 	   143 	   150
	000026	   040 	   057 	   002
	000031	   005 	   000
	001134	012746 	000007'			MOV	#$$$,-(SP)
	001140	004737 	002754'			JSR	PC,TYPMSG
    291	001144				EXITA:
    292	001144	000137 	003406'			JMP	EXIT		;TOO FAR TO HOP
    293					;
    294					; SWITCH TABLE
    295					;
    296	001150				MODTBL:
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 23-2
PARSE COMMAND LINE

    297					.IRP	ARG,<CP,HE,RD,VF,ZE>
    298						.ASCII	/ARG/
    299						.EVEN
    300						.WORD	ARG'FLAG
    301					.ENDM
	001150	   103 	   120 			.ASCII	/CP/
	001152	000034'				.WORD	CPFLAG
	001154	   110 	   105 			.ASCII	/HE/
	001156	000032'				.WORD	HEFLAG
	001160	   122 	   104 			.ASCII	/RD/
	001162	000036'				.WORD	RDFLAG
	001164	   126 	   106 			.ASCII	/VF/
	001166	000035'				.WORD	VFFLAG
	001170	   132 	   105 			.ASCII	/ZE/
	001172	000037'				.WORD	ZEFLAG
    302		000005 			MODTLN=<.-MODTBL>/4
    303					;
    304					; COMMAND ERRORS
    305					;
    306	001174				SYNERR:
    307	001174	010400 				MOV	R4,R0		;POINT INPUT STRING TO OUTPUT STRING
    308	001176					ERROR	<Syntax error: "<4>">
	000033	   011 	   123 	   171 		.ASCIZ	""<11>"Syntax error: "<4>""<5>""
	000036	   156 	   164 	   141
	000041	   170 	   040 	   145
	000044	   162 	   162 	   157
	000047	   162 	   072 	   040
	000052	   004 	   005 	   000
	001176	012746 	000033'			MOV	#$$$,-(SP)
	001202	004737 	002754'			JSR	PC,TYPMSG
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 24
CHECK OUT OUR DEVICES

    310						.SBTTL	CHECK OUT OUR DEVICES
    311					;
    312					; THE COMMAND STRING IS NOW PARSED.  CHECK OUT THE DEVICE HE SPECIFIED.
    313					;
    314	001206				CMDONE:
    315	001206	012705 	000014'			MOV	#SRCDEV,R5	;ALSO INPUT
    316	001212	005725 				TST	(R5)+		;SPECIFIED?
    317	001214	001410 				BEQ	10$		;NO-- SKIP IT
    318	001216					ALUN$S	#SRCLUN,-(R5),(R5)
	001216	011546 				MOV	(R5),-(SP)
	001220	014546 				MOV	-(R5),-(SP)
	001222	012746 	000002 			MOV	#SRCLUN,-(SP)
	001226	012746 				MOV	(PC)+,-(SP)
	001230	   007 	   004 			.BYTE	7.,4
	001232	104375 				EMT	375
    319	001234	103414 				BCS	DNSERR		;OOPS
    320	001236				10$:
    321	001236	012705 	000024'			MOV	#DSTDEV,R5	;POINT TO OUTPUT DEVICE
    322	001242	005725 				TST	(R5)+		;SPEC?
    323	001244	001414 				BEQ	GOTDEV		;NO-- SKIP IT
    324	001246					ALUN$S	#DSTLUN,-(R5),(R5) ;ASSIGN IT
	001246	011546 				MOV	(R5),-(SP)
	001250	014546 				MOV	-(R5),-(SP)
	001252	012746 	000003 			MOV	#DSTLUN,-(SP)
	001256	012746 				MOV	(PC)+,-(SP)
	001260	   007 	   004 			.BYTE	7.,4
	001262	104375 				EMT	375
    325	001264	103004 				BCC	GOTDEV		;GOT IT-- OK
    326	001266				DNSERR:
    327	001266					ERROR	<Device "<3>" not in system>
	000055	   011 	   104 	   145 		.ASCIZ	""<11>"Device "<3>" not in system"<5>""
	000060	   166 	   151 	   143
	000063	   145 	   040 	   003
	000066	   040 	   156 	   157
	000071	   164 	   040 	   151
	000074	   156 	   040 	   163
	000077	   171 	   163 	   164
	000102	   145 	   155 	   005
	000105	   000
	001266	012746 	000055'			MOV	#$$$,-(SP)
	001272	004737 	002754'			JSR	PC,TYPMSG
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 25
DISPATCH TO ACTION ROUTINES

    329						.SBTTL	DISPATCH TO ACTION ROUTINES
    330					;
    331					; HERE WHEN DEVICES FOUND TO EXIST
    332					;
    333	001276				GOTDEV:
    334	001276					CLEF$S	#E.FCTC		;[4.1.1105]
	001276	012746 	000000G			MOV	#E.FCTC,-(SP)
	001302	012746 				MOV	(PC)+,-(SP)
	001304	   037 	   002 			.BYTE	31.,2
	001306	104375 				EMT	375
    335					;
    336	001310	013702 	000340'			MOV	BUFADR,R2
    337	001314	013703 	000326'			MOV	BUFSIZ,R3
    338					;
    339	001320	105737 	000032'			TSTB	HEFLAG		;/HE???
    340	001324	001405 				BEQ	GOTDV1		;NO-- GO ON
    341	001326					TYPE	^\COP> dest-dev: = src-dev: /sw -- Switches: /BL:N,N /CP /HE /RD /VF /ZE"<1>"\
	000106	   103 	   117 	   120 		.ASCIZ	"COP> dest-dev: = src-dev: /sw -- Switches: /BL:N,N /CP /HE /RD /VF /ZE"<1>""
	000111	   076 	   040 	   144
	000114	   145 	   163 	   164
	000117	   055 	   144 	   145
	000122	   166 	   072 	   040
	000125	   075 	   040 	   163
	000130	   162 	   143 	   055
	000133	   144 	   145 	   166
	000136	   072 	   040 	   057
	000141	   163 	   167 	   040
	000144	   055 	   055 	   040
	000147	   123 	   167 	   151
	000152	   164 	   143 	   150
	000155	   145 	   163 	   072
	000160	   040 	   057 	   102
	000163	   114 	   072 	   116
	000166	   054 	   116 	   040
	000171	   057 	   103 	   120
	000174	   040 	   057 	   110
	000177	   105 	   040 	   057
	000202	   122 	   104 	   040
	000205	   057 	   126 	   106
	000210	   040 	   057 	   132
	000213	   105 	   001 	   000
	001326	012746 	000106'			MOV	#$$$,-(SP)
	001332	004737 	002754'			JSR	PC,TYPMSG
    342	001336	000575 				BR	DONEA		;HELP IS ON THE WAY . . .
    343					;
    344	001340				GOTDV1:
    345	001340	005737 	000034'			TST	CPVFLG		;/CP OR /VF SPECIFIED?
    346	001344	001012 				BNE	COPVFY		;YES-- CHECK IT OUT
    347	001346	005737 	000036'			TST	RDZFLG		;/ZE OR /RD?
    348	001352	001003 				BNE	10$		;YES-- DO THEM
    349	001354	005737 	000024'			TST	DSTDEV		;NO SWITCHES-- DESTINATION SPEC?
    350	001360	001002 				BNE	20$		;YES-- MUST WANT COPY & VERIFY
    351	001362				10$:
    352	001362	000137 	002004'			JMP	RDZERO		;GO READ OR ZERO
    353					;
    354	001366				20$:
    355	001366	005137 	000034'			COM	CPVFLG		;OUTPUT SPEC-- ASSUME COPY & VERIFY
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 25-1
DISPATCH TO ACTION ROUTINES

    356					;	BR	COPVFY		;SO DO COPY
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 26
COPY, VERIFY, COPY & VERIFY (/CP, /VF, /CP/VF)

    358						.SBTTL	COPY, VERIFY, COPY & VERIFY (/CP, /VF, /CP/VF)
    359					;
    360					;
    361	001372				COPVFY:
    362	001372	005737 	000036'			TST	RDZFLG		;/RD OR /ZE?
    363	001376	001156 				BNE	CFMERR		;YES-- CONFLICTING SWITCHES
    364	001400	005737 	000014'			TST	SRCDEV		;INPUT NEEDED
    365	001404	001563 				BEQ	NISERR		; . .
    366	001406	005737 	000024'			TST	DSTDEV		;MAKE SURE OUTPUT
    367	001412	001554 				BEQ	NOSERR		;NO-- NEED OUTPUT
    368	001414	105737 	000034'			TSTB	CPFLAG		;/CP?
    369	001420	001430 				BEQ	VERIFY		;NO-- JUST DO VERIFY
    370					;
    371	001422				10$:	CALL	SRCRD
	001422	004737 	002174'			JSR	PC,SRCRD
    372	001426					CALL	DSTWT
	001426	004737 	002220'			JSR	PC,DSTWT
    373	001432	105737 	000030'			TSTB	EOVFLG
    374	001436	001771 				BEQ	10$
    375	001440	105737 	000035'			TSTB	VFFLAG		;/VF SPEC ALSO?
    376	001444	001532 				BEQ	DONEA
    377	001446					TYPE	<COP -- Starting verify"<1>">
	000216	   103 	   117 	   120 		.ASCIZ	"COP -- Starting verify"<1>""
	000221	   040 	   055 	   055
	000224	   040 	   123 	   164
	000227	   141 	   162 	   164
	000232	   151 	   156 	   147
	000235	   040 	   166 	   145
	000240	   162 	   151 	   146
	000243	   171 	   001 	   000
	001446	012746 	000216'			MOV	#$$$,-(SP)
	001452	004737 	002754'			JSR	PC,TYPMSG
    378	001456	005037 	000010'			CLR	SRCBLK
    379	001462	005037 	000012'			CLR	SRCBLK+2
    380	001466	005037 	000020'			CLR	DSTBLK
    381	001472	005037 	000022'			CLR	DSTBLK+2
    382	001476	105037 	000030'			CLRB	EOVFLG
    383					;	BR	VERIFY		;DO THE VERIFY
    384					;
    385					; VERIFY (/VF)
    386					;
    387	001502				VERIFY:
    388	001502	013703 	000332'			MOV	BUFSZ4,R3
    389					;
    390	001506				VFY1:	CALL	SRCRD
	001506	004737 	002174'			JSR	PC,SRCRD
    391	001512					PUSH	R2		;SAVE BUFFER ADDRESS
	001512	010246 				MOV	R2,-(SP)
    392	001514	060302 				ADD	R3,R2
    393	001516					CALL	DSTRD
	001516	004737 	002212'			JSR	PC,DSTRD
    394	001522	060302 				ADD	R3,R2		;BUMP TO NEXT BUFFER
    395	001524	105737 	000030'			TSTB	EOVFLG		;END-OF-VOLUME REACHED?
    396	001530	001017 				BNE	20$		;YES-- DON'T READ NEXT BUFFER AHEAD
    397	001532	020237 	000336'			CMP	R2,BUFEND	;AT END?
    398	001536	103402 				BLO	10$		;NO-- GO ON
    399	001540	013702 	000340'			MOV	BUFADR,R2	;YES-- RECYCLE
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 26-1
COPY, VERIFY, COPY & VERIFY (/CP, /VF, /CP/VF)

    400	001544				10$:
    401	001544	105237 	000017'			INCB	SRCNBF		;DON'T BLOCK
    402	001550					CALL	SRCRD		;START READ OF NEXT BLOCK
	001550	004737 	002174'			JSR	PC,SRCRD
    403	001554	060302 				ADD	R3,R2		;BUMP TO NEXT BUFFER (DEST)
    404	001556	105237 	000027'			INCB	DSTNBF		;DON'T BLOCK
    405	001562					CALL	DSTRD		;START READ OF NEXT BLOCK
	001562	004737 	002212'			JSR	PC,DSTRD
    406	001566	160302 				SUB	R3,R2		;BACK DO BUFFER START
    407	001570				20$:
    408	001570					POP	R1		;RESTORE CURRENT BUFFER ADDRESS
	001570	012601 				MOV	(SP)+,R1
    409	001572					PUSH	R2		;SAVE NEXT ONE
	001572	010246 				MOV	R2,-(SP)
    410	001574	010102 				MOV	R1,R2		;COPY ADDRESS
    411	001576	060302 				ADD	R3,R2		;MAKE THAT DEST BUFFER ADDRESS
    412	001600	010204 				MOV	R2,R4		;COPY THAT FOR TERMINATION
    413	001602	010100 				MOV	R1,R0		;COPY INIT ADDRESS IN CASE OF ERROR
    414	001604				VFY2:
    415	001604	022122 				CMP	(R1)+,(R2)+	;MATCH?
    416	001606	001443 				BEQ	VFY3		;YES-- OK
    417	001610	005741 				TST	-(R1)		;NO-- VERIFY ERROR-- GET US BACK INTO THE BLOCK WITH THE ERROR
    418	001612	160001 				SUB	R0,R1		;COMPUTE BYTES INTO BUFFER
    419	001614	010146 				MOV	R1,-(SP)	;COPY THAT COUNT
    420	001616	062701 	001000 			ADD	#1000,R1	;ROUND UP
    421	001622	042701 	000777 			BIC	#1000-1,R1	; TO NEXT BLOCK
    422	001626	060001 				ADD	R0,R1		;THEN TO BUFFER ADDRESS OF SAME
    423	001630	010102 				MOV	R1,R2		;COPY ADDRESS
    424	001632	063702 	000332'			ADD	BUFSZ4,R2	;MAKE THAT INTO DESTINATION BUFFER
    425	001636	105016 				CLRB	(SP)		;ZERO THE UNUSED BITS
    426	001640	000316 				SWAB	(SP)		;MAKE THAT BYTES/400
    427	001642	006216 				ASR	(SP)		; BYTES/1000 =BLOCKS
    428	001644	063716 	000012'			ADD	SRCBLK+2,(SP)	;COMPUTE BLOCK IN ERROR
    429	001650	013746 	000010'			MOV	SRCBLK+0,-(SP)	; . .
    430	001654	005516 				ADC	(SP)		; YOU TOO
    431	001656	163766 	000334'	000002 		SUB	BUFBL4,2(SP)	;DOWN BY A BUFFER-SIZE OF BLOCKS
    432	001664	005616 				SBC	(SP)		;YOU TOO
    433	001666	010605 				MOV	SP,R5		;THAT'S WHERE OUR BLOCK # IS
    434	001670	062705 	000004 			ADD	#SRCDEV-SRCBLK,R5 ;POINT TO RIGHT PLACE
    435	001674					WARN	<Verify error"<10>">
	000246	   012 	   126 	   145 		.ASCIZ	""<12>"Verify error"<10>""<1>""
	000251	   162 	   151 	   146
	000254	   171 	   040 	   145
	000257	   162 	   162 	   157
	000262	   162 	   010 	   001
	000265	   000
	001674	012746 	000246'			MOV	#$$$,-(SP)
	001700	004737 	002754'			JSR	PC,TYPMSG
    436	001704	162705 	000004 			SUB	#SRCDEV-SRCBLK,R5 ;BACK AGAIN FOR CTCCHK
    437	001710					CALL	CTCCHK		;CHECK FOR ^C JUST IN CASE NOW
	001710	004737 	002112'			JSR	PC,CTCCHK
    438	001714	022626 				CMP	(SP)+,(SP)+	;PHEW!
    439	001716				VFY3:
    440	001716	020104 				CMP	R1,R4		;DONE YET?
    441	001720	103731 				BLO	VFY2		;NO-- BACK FOR ANOTHER WORD
    442	001722					POP	R2		;RESTORE NEXT BUFFER ADDRESS
	001722	012602 				MOV	(SP)+,R2
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 26-2
COPY, VERIFY, COPY & VERIFY (/CP, /VF, /CP/VF)

    443	001724	105737 	000030'			TSTB	EOVFLG		;YES-- DONE WITH VOLUME YET?
    444	001730	001666 				BEQ	VFY1		;NO-- KEEP ON READING
    445	001732				DONEA:
    446	001732	000507 				BR	DONE		;YES-- ALL DONE WITH VERIFY
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 27
SPECIFICATION ERRORS

    448						.SBTTL	SPECIFICATION ERRORS
    449					;
    450					;
    451	001734				CFMERR:
    452	001734					ERROR	<Conflicting switches>
	000266	   011 	   103 	   157 		.ASCIZ	""<11>"Conflicting switches"<5>""
	000271	   156 	   146 	   154
	000274	   151 	   143 	   164
	000277	   151 	   156 	   147
	000302	   040 	   163 	   167
	000305	   151 	   164 	   143
	000310	   150 	   145 	   163
	000313	   005 	   000
	001734	012746 	000266'			MOV	#$$$,-(SP)
	001740	004737 	002754'			JSR	PC,TYPMSG
    453	001744				NOSERR:
    454	001744					ERROR	<No destination device specified for /CP or /VF or /ZE>
	000315	   011 	   116 	   157 		.ASCIZ	""<11>"No destination device specified for /CP or /VF or /ZE"<5>""
	000320	   040 	   144 	   145
	000323	   163 	   164 	   151
	000326	   156 	   141 	   164
	000331	   151 	   157 	   156
	000334	   040 	   144 	   145
	000337	   166 	   151 	   143
	000342	   145 	   040 	   163
	000345	   160 	   145 	   143
	000350	   151 	   146 	   151
	000353	   145 	   144 	   040
	000356	   146 	   157 	   162
	000361	   040 	   057 	   103
	000364	   120 	   040 	   157
	000367	   162 	   040 	   057
	000372	   126 	   106 	   040
	000375	   157 	   162 	   040
	000400	   057 	   132 	   105
	000403	   005 	   000
	001744	012746 	000315'			MOV	#$$$,-(SP)
	001750	004737 	002754'			JSR	PC,TYPMSG
    455	001754				NISERR:
    456	001754					ERROR	<No source device specified for /CP or /VF or /RD>
	000405	   011 	   116 	   157 		.ASCIZ	""<11>"No source device specified for /CP or /VF or /RD"<5>""
	000410	   040 	   163 	   157
	000413	   165 	   162 	   143
	000416	   145 	   040 	   144
	000421	   145 	   166 	   151
	000424	   143 	   145 	   040
	000427	   163 	   160 	   145
	000432	   143 	   151 	   146
	000435	   151 	   145 	   144
	000440	   040 	   146 	   157
	000443	   162 	   040 	   057
	000446	   103 	   120 	   040
	000451	   157 	   162 	   040
	000454	   057 	   126 	   106
	000457	   040 	   157 	   162
	000462	   040 	   057 	   122
	000465	   104 	   005 	   000
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 27-1
SPECIFICATION ERRORS

	001754	012746 	000405'			MOV	#$$$,-(SP)
	001760	004737 	002754'			JSR	PC,TYPMSG
    457	001764				TMSERR:
    458	001764					ERROR	<Source device specified for /ZE>
	000470	   011 	   123 	   157 		.ASCIZ	""<11>"Source device specified for /ZE"<5>""
	000473	   165 	   162 	   143
	000476	   145 	   040 	   144
	000501	   145 	   166 	   151
	000504	   143 	   145 	   040
	000507	   163 	   160 	   145
	000512	   143 	   151 	   146
	000515	   151 	   145 	   144
	000520	   040 	   146 	   157
	000523	   162 	   040 	   057
	000526	   132 	   105 	   005
	000531	   000
	001764	012746 	000470'			MOV	#$$$,-(SP)
	001770	004737 	002754'			JSR	PC,TYPMSG
    459	001774				TMDERR:
    460	001774					ERROR	<Destination device specified for /RD>
	000532	   011 	   104 	   145 		.ASCIZ	""<11>"Destination device specified for /RD"<5>""
	000535	   163 	   164 	   151
	000540	   156 	   141 	   164
	000543	   151 	   157 	   156
	000546	   040 	   144 	   145
	000551	   166 	   151 	   143
	000554	   145 	   040 	   163
	000557	   160 	   145 	   143
	000562	   151 	   146 	   151
	000565	   145 	   144 	   040
	000570	   146 	   157 	   162
	000573	   040 	   057 	   122
	000576	   104 	   005 	   000
	001774	012746 	000532'			MOV	#$$$,-(SP)
	002000	004737 	002754'			JSR	PC,TYPMSG
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 28
READ, ZERO (/RD, /ZE)

    462						.SBTTL	READ, ZERO (/RD, /ZE)
    463					;
    464					;
    465	002004				RDZERO:
    466	002004	105737 	000037'			TSTB	ZEFLAG		;ZERO?
    467	002010	001424 				BEQ	READ		;NO-- TRY FOR READ
    468					;	BR	ZERO		;YES-- ZERO
    469					;
    470					; ZERO (/ZE)
    471					;
    472	002012				ZERO:
    473	002012	105737 	000036'			TSTB	RDFLAG		;/RD????
    474	002016	001346 				BNE	CFMERR		;YES-- CONFLICT
    475	002020	005737 	000024'			TST	DSTDEV		;OUTPUT SPEC?
    476	002024	001747 				BEQ	NOSERR		;NO-- WE NEED IT
    477	002026	005737 	000014'			TST	SRCDEV		;HOW 'BOUT INPUT?
    478	002032	001354 				BNE	TMSERR		;THAT'S NOT NEEDED
    479					;
    480	002034	010200 				MOV	R2,R0		;COPY BUFFER ADDRESS
    481	002036	013701 	000330'			MOV	BUFSZ2,R1	;GET BUFFER SIZE IN WORDS
    482	002042				10$:
    483	002042	005020 				CLR	(R0)+		;ZERO A WORD
    484	002044	077102 				SOB	R1,10$		;LOOP FOR WHOLE BUFFER
    485	002046				20$:
    486	002046					CALL	DSTWT		;WRITE A BUFFER OF ZEROS
	002046	004737 	002220'			JSR	PC,DSTWT
    487	002052	105737 	000030'			TSTB	EOVFLG		;DONE?
    488	002056	001773 				BEQ	20$		;NO-- KEEP ON WRITING
    489	002060	000434 				BR	DONE		;YES-- ALLL DONE
    490					;
    491					; READ (/RD)
    492					;
    493	002062				READ:
    494	002062	005737 	000024'			TST	DSTDEV		;DSTDEV SPEC??
    495	002066	001342 				BNE	TMDERR		;YES-- WE CAN'T USE IT
    496	002070	005737 	000014'			TST	SRCDEV		;INPUT SPEC?
    497	002074	001727 				BEQ	NISERR		;NO-- REQUIRED FOR /RD
    498					;
    499	002076				10$:	CALL	SRCRD
	002076	004737 	002174'			JSR	PC,SRCRD
    500	002102	105737 	000030'			TSTB	EOVFLG
    501	002106	001773 				BEQ	10$
    502	002110	000420 				BR	DONE
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 29
^C CHECK AND DONE

    504						.SBTTL	^C CHECK AND DONE
    505					;
    506					; CTCCHK -- CHECK FOR ^C TYPED
    507					;
    508	002112				CTCCHK:
    509	002112					CLEF$S	#E.FCTC		;[4.1.1105]
	002112	012746 	000000G			MOV	#E.FCTC,-(SP)
	002116	012746 				MOV	(PC)+,-(SP)
	002120	   037 	   002 			.BYTE	31.,2
	002122	104375 				EMT	375
    510	002124	023727 	000000G	000000G		CMP	@#$DSW,#IS.SET
    511	002132	001401 				BEQ	10$		;SET-- ABORT NOW
    512	002134					RETURN			;NOT SET-- RETURN FROM CTCCHK
	002134	000207 				RTS	PC
    513					;
    514	002136				10$:
    515	002136	062705 	000004 			ADD	#SRCDEV-SRCBLK,R5
    516	002142					WARN	<Aborted by ^C"<10>">
	000601	   012 	   101 	   142 		.ASCIZ	""<12>"Aborted by ^C"<10>""<1>""
	000604	   157 	   162 	   164
	000607	   145 	   144 	   040
	000612	   142 	   171 	   040
	000615	   136 	   103 	   010
	000620	   001 	   000
	002142	012746 	000601'			MOV	#$$$,-(SP)
	002146	004737 	002754'			JSR	PC,TYPMSG
    517					;	BR	DONE
    518					;
    519					; DONE -- HERE WHEN ALL DONE WITH COMMAND
    520					;
    521	002152				DONE:
    522	002152	013706 	000000'			MOV	SPSAVE,SP
    523	002156	105737 	000031'			TSTB	CTZFLG		;^Z TYPED?
    524	002162	001002 				BNE	10$		;YES-- GO AWAY
    525	002164	000137 	000342'			JMP	COPY
    526	002170				10$:
    527	002170	000137 	003406'			JMP	EXIT
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 30
I/O ROUTINES

    529						.SBTTL	I/O ROUTINES
    530					;
    531					; SRCRD -- READ FROM SRCLUN
    532					;
    533	002174				SRCRD:
    534	002174	012704 	000000G			MOV	#IO.RLB,R4
    535	002200	012701 	000002 			MOV	#SRCLUN,R1
    536	002204	012705 	000010'			MOV	#SRCBLK,R5
    537	002210	000411 				BR	DEVOP
    538					;
    539					; DSTRD -- READ FROM DSTLUN
    540					;
    541	002212				DSTRD:
    542	002212	012704 	000000G			MOV	#IO.RLB,R4
    543	002216	000402 				BR	DSTOP
    544					;
    545					; DSTWT -- WRITE TO DSTLUN
    546					;
    547	002220				DSTWT:
    548	002220	012704 	000000G			MOV	#IO.WLB,R4
    549	002224				DSTOP:
    550	002224	012701 	000003 			MOV	#DSTLUN,R1
    551	002230	012705 	000020'			MOV	#DSTBLK,R5
    552					;	BR	DEVOP
    553					;
    554					; DEVOP -- PERFORM I/O ON A DEV
    555					;	R1 -- LUN (ALSO EFN)
    556					;	R2 -- ADDR OF BUFFER
    557					;	R3 -- SIZE OF BUFFER
    558					;	R4 -- I/O FUNCTION
    559					;	R5 -- ADDR OF CURRENT BLOCK #
    560					;
    561					; RETURNS:
    562					;	EOVFLG -- NON-ZERO IF EOV ENCOUNTERED (ON ANY OPERATION)
    563					;
    564	002234				DEVOP:
    565	002234					PUSH	<R2,R3>
	002234	010246 				MOV	R2,-(SP)
	002236	010346 				MOV	R3,-(SP)
    566	002240	010200 				MOV	R2,R0
    567	002242	060300 				ADD	R3,R0
    568					;
    569	002244	105765 	000007 			TSTB	SRCNBF-SRCBLK(R5) ;NO BLOCK MODE?
    570	002250	002007 				BGE	DEVOP1		;NO, OR NOT TIME TO BLOCK-- GO ON
    571	002252	105065 	000007 			CLRB	SRCNBF-SRCBLK(R5) ;YES-- CLEAR FLAG
    572	002256					WTSE$S	R1		; AND BLOCK NOW
	002256	010146 				MOV	R1,-(SP)
	002260	012746 				MOV	(PC)+,-(SP)
	002262	   051 	   002 			.BYTE	41.,2
	002264	104375 				EMT	375
    573	002266	000451 				BR	DEVOP2		;ONWARD!
    574					;
    575	002270				DEVOP1:
    576	002270					CALL	CTCCHK		;CHECK FOR ^C
	002270	004737 	002112'			JSR	PC,CTCCHK
    577					;
    578	002274	105765 	000007 			TSTB	SRCNBF-SRCBLK(R5) ;NO BLOCK?
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 30-1
I/O ROUTINES

    579	002300	003424 				BLE	10$		;NO-- GO ON AND DO QIOW$
    580	002302	105465 	000007 			NEGB	SRCNBF-SRCBLK(R5) ;YES-- SET FLAG TO BLOCK NEXT CALL
    581	002306					QIO$S	R4,R1,R1,,#QIOSTS,,<R2,R3,,(R5),2(R5)>
	002306	016546 	000002 			MOV	2(R5),-(SP)
	002312	011546 				MOV	(R5),-(SP)
	002314	005046 				CLR	-(SP)
	002316	010346 				MOV	R3,-(SP)
	002320	010246 				MOV	R2,-(SP)
	002322	005046 				CLR	-(SP)
	002324	012746 	000004'			MOV	#QIOSTS,-(SP)
	002330	005046 				CLR	-(SP)
	002332	110116 				MOVB	R1,(SP)
	002334	010146 				MOV	R1,-(SP)
	002336	010446 				MOV	R4,-(SP)
	002340	012746 				MOV	(PC)+,-(SP)
	002342	   001 	   013 			.BYTE	1,$$$T1
	002344	104375 				EMT	375
    582	002346	103500 				BCS	FTLERR		;OOPS!!!
    583	002350	000474 				BR	DEVOP9		;GO NOW, RETURN LATER TO COMPLETE WAIT
    584					;
    585	002352				10$:
    586	002352					QIOW$S	R4,R1,R1,,#QIOSTS,,<R2,R3,,(R5),2(R5)>
	002352	016546 	000002 			MOV	2(R5),-(SP)
	002356	011546 				MOV	(R5),-(SP)
	002360	005046 				CLR	-(SP)
	002362	010346 				MOV	R3,-(SP)
	002364	010246 				MOV	R2,-(SP)
	002366	005046 				CLR	-(SP)
	002370	012746 	000004'			MOV	#QIOSTS,-(SP)
	002374	005046 				CLR	-(SP)
	002376	110116 				MOVB	R1,(SP)
	002400	010146 				MOV	R1,-(SP)
	002402	010446 				MOV	R4,-(SP)
	002404	012746 				MOV	(PC)+,-(SP)
	002406	   003 	   013 			.BYTE	3,$$$T1
	002410	104375 				EMT	375
    587	002412				DEVOP2:
    588	002412	103456 				BCS	FTLERR
    589	002414	123727 	000004'	000000G		CMPB	QIOSTS+0,#IE.BLK
    590	002422	001411 				BEQ	20$
    591					;
    592	002424	020327 	001000 			CMP	R3,#1000
    593	002430	003416 				BLE	40$
    594					;
    595	002432	105737 	000004'			TSTB	QIOSTS+0
    596	002436	003005 				BGT	30$
    597	002440	012703 	001000 			MOV	#1000,R3
    598	002444	000711 				BR	DEVOP1
    599					;
    600	002446	105237 	000030'		20$:	INCB	EOVFLG
    601					;
    602	002452	000303 			30$:	SWAB	R3
    603	002454	006203 				ASR	R3
    604	002456	060365 	000002 			ADD	R3,2(R5)
    605	002462	105515 				ADCB	(R5)
    606	002464	000426 				BR	DEVOP9
    607					;
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 30-2
I/O ROUTINES

    608	002466	105737 	000004'		40$:	TSTB	QIOSTS+0
    609	002472	003014 				BGT	DEVOP8
    610					;
    611	002474	123727 	000004'	000000G	50$:	CMPB	QIOSTS+0,#IE.VER
    612	002502	001022 				BNE	FTLERR
    613	002504					PUSH	R5
	002504	010546 				MOV	R5,-(SP)
    614	002506	062705 	000004 			ADD	#SRCDEV-SRCBLK,R5
    615	002512					WARN	<I/O error on "<3><10>">
	000622	   012 	   111 	   057 		.ASCIZ	""<12>"I/O error on "<3><10>""<1>""
	000625	   117 	   040 	   145
	000630	   162 	   162 	   157
	000633	   162 	   040 	   157
	000636	   156 	   040 	   003
	000641	   010 	   001 	   000
	002512	012746 	000622'			MOV	#$$$,-(SP)
	002516	004737 	002754'			JSR	PC,TYPMSG
    616	002522					POP	R5
	002522	012605 				MOV	(SP)+,R5
    617					;
    618	002524	060302 			DEVOP8:	ADD	R3,R2
    619	002526	062765 	000001 	000002 		ADD	#1,2(R5)
    620	002534	105515 				ADCB	(R5)
    621	002536	020200 				CMP	R2,R0
    622	002540	103653 				BLO	DEVOP1
    623					;
    624	002542				DEVOP9:
    625	002542					POP	<R3,R2>
	002542	012603 				MOV	(SP)+,R3
	002544	012602 				MOV	(SP)+,R2
    626	002546					RETURN
	002546	000207 				RTS	PC
    627					;
    628	002550				FTLERR:
    629	002550	013706 	000000'			MOV	SPSAVE,SP
    630	002554	113700 	000004'			MOVB	QIOSTS+0,R0
    631	002560	001404 				BEQ	10$
    632	002562	120027 	000000G			CMPB	R0,#IE.WLK	;WRITE-LOCK?
    633	002566	001411 				BEQ	WLKERR		;YES-- SAY THAT
    634	002570	000402 				BR	20$		;NO-- GO ON
    635					;
    636	002572				10$:
    637	002572	013700 	000000G			MOV	@#$DSW,R0
    638	002576				20$:
    639	002576	062705 	000004 			ADD	#SRCDEV-SRCBLK,R5
    640	002602					ERROR	<Fatal I/O error "<7>" on "<3><10>">
	000644	   011 	   106 	   141 		.ASCIZ	""<11>"Fatal I/O error "<7>" on "<3><10>""<5>""
	000647	   164 	   141 	   154
	000652	   040 	   111 	   057
	000655	   117 	   040 	   145
	000660	   162 	   162 	   157
	000663	   162 	   040 	   007
	000666	   040 	   157 	   156
	000671	   040 	   003 	   010
	000674	   005 	   000
	002602	012746 	000644'			MOV	#$$$,-(SP)
	002606	004737 	002754'			JSR	PC,TYPMSG
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 30-3
I/O ROUTINES

    641	002612				WLKERR:
    642	002612					ERROR	<Device "<3>" is write-locked>
	000676	   011 	   104 	   145 		.ASCIZ	""<11>"Device "<3>" is write-locked"<5>""
	000701	   166 	   151 	   143
	000704	   145 	   040 	   003
	000707	   040 	   151 	   163
	000712	   040 	   167 	   162
	000715	   151 	   164 	   145
	000720	   055 	   154 	   157
	000723	   143 	   153 	   145
	000726	   144 	   005 	   000
	002612	012746 	000676'			MOV	#$$$,-(SP)
	002616	004737 	002754'			JSR	PC,TYPMSG
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 31
COMMAND PARSER ROUTINES

    644						.SBTTL	COMMAND PARSER ROUTINES
    645					;
    646					; GENERAL NOTES:
    647					;
    648					; R4 IS ALWAYS USED AS A POINTER TO THE COMMAND STRING.  ON CALL,
    649					; IT POINTS TO THE NEXT CHARACTER TO BE PROCESSED.  ON RETURN, R4
    650					; ALWAYS POINTS TO THE CHARACTER AFTER THE LAST ONE PROCESSED, I.E.
    651					; THE NEXT ONE TO BE PROCESSED.
    652					;
    653					; NOTE THAT END-OF-LINE IS A ZERO BYTE
    654					;
    655					;
    656					; GETNB -- GET NEXT NON-BLANK CHARACTER
    657					;
    658					; RETURNS WITH R4 POINTING TO THE NEXT NON-BLANK CHARACTER
    659					;	R0 --	NON-BLANK CHARACTER
    660					;	CC-Z SET IF END-OF-LINE
    661					;
    662	002622				GETNB:
    663	002622	112400 				MOVB	(R4)+,R0	;GET A CHARACTER
    664	002624	122700 	000040 			CMPB	#' ,R0		;THIS BLANK?
    665	002630	001774 				BEQ	GETNB		;YES-- LOOK SOME MORE
    666	002632	122700 	000011 			CMPB	#'	,R0	;OR A TAB?
    667	002636	001771 				BEQ	GETNB		;YES-- LOOK SOME MORE
    668	002640				10$:
    669	002640	105744 				TSTB	-(R4)		;NON-BLANK-- BACK OVER IT (MAY BE EOL)
    670	002642					RETURN			; FROM GETNB
	002642	000207 				RTS	PC
    671					;
    672					; GETNAM -- GET TWO-CHARACTER ALPHABETIC NAME
    673					;
    674					; RETURNS AFTER TWO CHARCTERS OR NON-ALPHABETIC
    675					;	R0 --	(LOW) FIRST CHARACTER (HIGH) SECOND CHARACTER
    676					;	CC-C SET IF MORE THAN TWO CHARACTERS
    677					;
    678	002644				GETNAM:
    679	002644	005000 				CLR	R0		;CLEAR ANSWER
    680	002646				10$:
    681	002646	122714 	000101 			CMPB	#'A,(R4)	;BELOW A?
    682	002652	101015 				BHI	50$		;YES-- RETURN CC-C CLEAR
    683	002654	121427 	000132 			CMPB	(R4),#'Z	;OR ABOVE Z?
    684	002660	101012 				BHI	50$		;YES-- RETURN CC-C CLEAR
    685	002662	005700 				TST	R0		;GOT A BYTE YET?
    686	002664	001002 				BNE	20$		;YES-- STORE SECOND BYTE
    687	002666	112400 				MOVB	(R4)+,R0	;NO-- GET LOW BYTE
    688	002670	000766 				BR	10$		;LOOP FOR NEXT CHARACTER
    689					;
    690	002672				20$:
    691	002672	000300 				SWAB	R0		;GET HIGH BYTE
    692	002674	001003 				BNE	40$		;ALREADY THERE-- ERROR
    693	002676	152400 				BISB	(R4)+,R0	;OK-- SET SECOND CHARACTER
    694	002700	000300 				SWAB	R0		;RESTORE R0 TO PROPER ORIENTATION
    695	002702	000761 				BR	10$		;LOOP FOR ANOTHER (?)
    696					;
    697	002704				40$:
    698	002704	000261 				SEC			;ERROR
    699	002706				50$:
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 31-1
COMMAND PARSER ROUTINES

    700	002706					RETURN			; FROM GETNAM
	002706	000207 				RTS	PC
    701					;
    702					; GETNUM -- GET OCTAL NUMBER
    703					;
    704					; RETURNS WITH NON-DIGIT OR IF MORE THAN A WORD'S WORTH
    705					;	R0 --	NUMBER
    706					;	CC-C SET IF LARGER THAN ONE WORD
    707					;
    708	002710				GETNUM:
    709	002710	005000 				CLR	R0		;CLEAR RESULT
    710	002712				10$:
    711	002712	112401 				MOVB	(R4)+,R1	;GET A DIGIT
    712	002714	162701 	000060 			SUB	#'0,R1		;TRIM DOWN TO DIGIT
    713	002720	103413 				BLO	40$		;NOT A DIGIT-- GIVE UP
    714	002722	022701 	000007 			CMP	#7,R1		;TOO HIGH?
    715	002726	103410 				BLO	40$		;YES-- GIVE UP WITH CC-C CLEAR
    716		000003 			.REPT 3
    717						ASL	R0		;SHIFT OLD NUMBER A BIT
    718						BCS	50$		;CARRY OUT-- NUMBER TOO BIG-- CC-C SET
    719					.ENDR
	002730	006300 				ASL	R0		;SHIFT OLD NUMBER A BIT
	002732	103407 				BCS	50$		;CARRY OUT-- NUMBER TOO BIG-- CC-C SET
	002734	006300 				ASL	R0		;SHIFT OLD NUMBER A BIT
	002736	103405 				BCS	50$		;CARRY OUT-- NUMBER TOO BIG-- CC-C SET
	002740	006300 				ASL	R0		;SHIFT OLD NUMBER A BIT
	002742	103403 				BCS	50$		;CARRY OUT-- NUMBER TOO BIG-- CC-C SET
    720	002744	060100 				ADD	R1,R0		;ACCUMULATE THIS DIGIT
    721	002746	000761 				BR	10$		;FETCH ANOTHER DIGIT
    722					;
    723	002750				40$:
    724	002750	105744 				TSTB	-(R4)		;BACK OVER BAD CHARACTER
    725	002752				50$:
    726	002752					RETURN			;FROM GETNUM
	002752	000207 				RTS	PC
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 32
TYPEOUT ROUTINES

    728						.SBTTL	TYPEOUT ROUTINES
    729					;
    730					; TYPMSG -- TYPE A RANDOM ASCIZ STRING
    731					;
    732					; CALL:
    733					;	PUSH	#<ADDRESS OF ASCIZ STRING>
    734					;	CALL	TYPMSG
    735					;
    736					; SPECIAL CHARACTER CODES IN TEXT:
    737					;	0 --	END OF TEXT
    738					;	1 --	TYPE <CR><LF>
    739					;	2 --	TYPE TWO CHARACTERS FROM R0 (SAVED ON STACK)
    740					;	3 --	TYPE DEVICE NAME AND UNIT FROM PUD ENTRY (R5)
    741					;	4 --	TYPE ASCIZ STRING BY R0
    742					;	5 --	TYPE <CR><LF> AND RETURN TO COPY
    743					;	6 --	OCTAL NUMBER IN R0 (SAVED ON STACK)
    744					;	7 --	DECIMAL NUMBER IN R0 (SAVED ON STACK)
    745					;	10 --	BLOCK # AT SRCBLK-SRCDEV(R5)
    746					;	11 --	FATAL ERROR PREFIX
    747					;	12 --	WARNING ERROR PREFIX
    748					;
    749	002754				TYPMSG:
    750	002754					PUSH	<R3,R2,R1,R0> ;COPY USED REGISTERS
	002754	010346 				MOV	R3,-(SP)
	002756	010246 				MOV	R2,-(SP)
	002760	010146 				MOV	R1,-(SP)
	002762	010046 				MOV	R0,-(SP)
    751	002764	016600 	000012 			MOV	12(SP),R0	;GET ADDRESS OF STRING
    752	002770	012702 	000040'			MOV	#TYPBUF,R2	;POINT TO OUTPUT BUFFER
    753					;
    754					; ENTER HERE AT TYPMS1:
    755					;	R0 --	POINTER TO STRING TO BE OUTPUT (AND FOLLOWING CODE)
    756					;	R2 --	CURRENT POINTER TO OUTPUT BUFFER FOR LOADING CHARACTERS
    757					;
    758	002774				TYPMS1:
    759	002774	112012 				MOVB	(R0)+,(R2)	;GET A CHARACTER FROM STRING
    760	002776	122227 	000013 			CMPB	(R2)+,#TYPMAX	;SPECIAL CODE?
    761	003002	103374 				BHIS	TYPMS1		;NO-- JUST GET NEXT CHARACTER
    762	003004	114203 				MOVB	-(R2),R3	;YES-- GET THE CODE
    763	003006	006303 				ASL	R3		;MAKE IT WORDS
    764	003010	011601 				MOV	(SP),R1		;GET R0 FROM STACK BACK TO R1
    765	003012					CALL	@TYPTAB(R3)	;CALL ROUTINE TO PROCESS
	003012	004773 	003020'			JSR	PC,@TYPTAB(R3)
    766	003016	000766 				BR	TYPMS1		;BACK FOR MORE
    767					;
    768					; DISPATCH TABLE FOR SPECIAL CODES
    769					;
    770	003020				TYPTAB:
    771	003020	003046'	003140'	003144'		.WORD	TYPDON,TYPCR,TYPTXT,TYPDEV,TYPSTR,TYPCOP,TYPOCT,TYPDEC,TYPBLK,TYPERR,TYPWRN
	003026	003156'	003214'	003132'
	003034	003322'	003224'	003244'
	003042	003202'	003210'
    772		000013 			TYPMAX=<.-TYPTAB>/2
    773					;
    774					; 0 -- END OF MESSAGE
    775					;
    776	003046				TYPDON:
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 32-1
TYPEOUT ROUTINES

    777	003046	005726 				TST	(SP)+		;POP THE RETURN ADDRESS OFF TO NOWHERE
    778	003050	162702 	000040'			SUB	#TYPBUF,R2	;END OF STRING-- FIND LENGTH
    779	003054					QIOW$S	#IO.WLB,#CTYLUN,#E.FCTY,,,,<#TYPBUF,R2,#0> ;TYPE STRING ON CTY
	003054	005046 				CLR	-(SP)
	003056	010246 				MOV	R2,-(SP)
	003060	012746 	000040'			MOV	#TYPBUF,-(SP)
	003064	005046 				CLR	-(SP)
	003066	005046 				CLR	-(SP)
	003070	005046 				CLR	-(SP)
	003072	112716 	000001 			MOVB	#E.FCTY,(SP)
	003076	012746 	000001 			MOV	#CTYLUN,-(SP)
	003102	012746 	000000G			MOV	#IO.WLB,-(SP)
	003106	012746 				MOV	(PC)+,-(SP)
	003110	   003 	   011 			.BYTE	3,$$$T1
	003112	104375 				EMT	375
    780	003114	103534 				BCS	EXIT		;GIVE UP IF FAILURE
    781	003116					POP	<R0,R1,R2,R3> ;RESTORE REGISTERS
	003116	012600 				MOV	(SP)+,R0
	003120	012601 				MOV	(SP)+,R1
	003122	012602 				MOV	(SP)+,R2
	003124	012603 				MOV	(SP)+,R3
    782	003126					POP	(SP)		;RESTORE PC OVER ADDRESS OF STRING
	003126	012616 				MOV	(SP)+,(SP)
    783	003130					RETURN			;FROM TYPMSG
	003130	000207 				RTS	PC
    784					;
    785					; 5 -- TYPE <CR><LF> AND RETURN TO COPY
    786					;
    787	003132				TYPCOP:
    788	003132	012766 	002152'	000012 		MOV	#DONE,12(SP)	;SET RETURN PC TO GO BACK TO COPY
    789					;	BR	TYPCR		;FINISH OFF WITH <CR><LF>
    790					;
    791					; 1 -- TYPE CRLF
    792					;
    793	003140				TYPCR:
    794	003140	012701 				MOV	(PC)+,R1	;GET <CR> AND <LF>
    795	003142	   015 	   012 			.BYTE	15,12		; . .
    796					;	BR	TYPTXT		;TYPE WHAT'S IN R1
    797					;
    798					; 2 -- TYPE TEXT IN R0 (SAVED ON STACK)
    799					;
    800	003144				TYPTXT:
    801	003144	110122 				MOVB	R1,(R2)+	;STORE LOW BYTE FIRST
    802	003146	000301 				SWAB	R1		;GET HIGH BYTE
    803	003150	001401 				BEQ	90$		;NULL-- IGNORE IT
    804	003152	110122 				MOVB	R1,(R2)+	;STORE SECOND CHARACTER
    805	003154				90$:
    806	003154					RETURN			; FROM TYPTXT
	003154	000207 				RTS	PC
    807					;
    808					; 3 -- DEVICE AND UNIT # FROM (R5)
    809					;
    810	003156				TYPDEV:
    811	003156	011501 				MOV	(R5),R1		;GET THE NAME
    812	003160					CALL	TYPTXT		;TYPE THE NAME
	003160	004737 	003144'			JSR	PC,TYPTXT
    813	003164	116501 	000002 			MOVB	2(R5),R1	;GET THE UNIT
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 32-2
TYPEOUT ROUTINES

    814	003170					CALL	TYPOCT		;TYPE THE NUMBER
	003170	004737 	003322'			JSR	PC,TYPOCT
    815	003174	112722 	000072 			MOVB	#':,(R2)+	;MAKE IT A DEVICE
    816	003200					RETURN			;BACK FOR MORE
	003200	000207 				RTS	PC
    817					;
    818					; 11 -- FATAL ERROR PREFIX
    819					;
    820	003202				TYPERR:
    821	003202	012701 	000731'			MOV	#ERRMSG,R1	;GET ERROR PREFIX
    822	003206	000402 				BR	TYPSTR		;TYPE IT
    823	000731					.PSECT	TEXT
    824	000731	   103 	   117 	   120 	ERRMSG:	.ASCIZ	\COP -- *Fatal* -- \
	000734	   040 	   055 	   055
	000737	   040 	   052 	   106
	000742	   141 	   164 	   141
	000745	   154 	   052 	   040
	000750	   055 	   055 	   040
	000753	   000
    825	003210					.PSECT
    826					;
    827					; 12 -- WARNING ERROR PREFIX
    828					;
    829	003210				TYPWRN:
    830	003210	012701 	000754'			MOV	#WRNMSG,R1	;GET WARNING PREFIX
    831					;	BR	TYPMSG		;TYPE IT
    832					;
    833	000754					.PSECT	TEXT
    834	000754	   103 	   117 	   120 	WRNMSG:	.ASCIZ	\COP -- *Diag* -- \
	000757	   040 	   055 	   055
	000762	   040 	   052 	   104
	000765	   151 	   141 	   147
	000770	   052 	   040 	   055
	000773	   055 	   040 	   000
    835	003214					.PSECT
    836					;
    837					; 4 -- STRING FROM R1
    838					;
    839	003214				TYPSTR:
    840	003214	112122 				MOVB	(R1)+,(R2)+	;MOVE A CHARACTER
    841	003216	001376 				BNE	TYPSTR		;LOOP TILL END OF COMMAND
    842	003220	105742 				TSTB	-(R2)		;BACK OVER NULL BYTE
    843	003222					RETURN			;BACK FOR MORE
	003222	000207 				RTS	PC
    844					;
    845					; 7 -- DECIMAL NUMBER IN R0 (SAVED ON STACK)
    846					;
    847	003224				TYPDEC:
    848	003224	012737 	000012 	000002'		MOV	#10.,RADIX	;SET RADIX TO 10
    849	003232					CALL	TYPNUM		;TYEP THE NUMBER
	003232	004737 	003330'			JSR	PC,TYPNUM
    850	003236	112722 	000056 			MOVB	#'.,(R2)+	;STORE A . TO INDICATE DECIMAL
    851	003242					RETURN			;BACK FOR ANOTHER CHAR OF STRING
	003242	000207 				RTS	PC
    852					;
    853					; 10 -- BLOCK # AT SRCBLK-SRCDEV(R5)
    854					;
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 32-3
TYPEOUT ROUTINES

    855	003244				TYPBLK:
    856	003244	012701 	003306'			MOV	#BLKMSG,R1	;GET START TEXT
    857	003250					CALL	TYPSTR		;PUT IT AWAY
	003250	004737 	003214'			JSR	PC,TYPSTR
    858	003254	116501 	177774 			MOVB	SRCBLK-SRCDEV(R5),R1 ;GET HIGH PART
    859	003260	001404 				BEQ	10$		;ZERO-- SKIP IT
    860	003262					CALL	TYPOCT		;TYPE HIGH PART
	003262	004737 	003322'			JSR	PC,TYPOCT
    861	003266	112722 	000054 			MOVB	#',,(R2)+	;SEPERATE IT
    862	003272				10$:
    863	003272	016501 	177776 			MOV	SRCBLK-SRCDEV+2(R5),R1 ;GET LOW PART
    864	003276	012737 	000010 	000002'		MOV	#8.,RADIX	;OCTAL
    865	003304	000416 				BR	TYPNM1		;TYPE UNSIGNED NUMBER AND RETURN
    866					;
    867	003306	   040 	   141 	   164 	BLKMSG:	.ASCIZ	/ at block /
	003311	   040 	   142 	   154
	003314	   157 	   143 	   153
	003317	   040 	   000
    868						.EVEN
    869					;
    870					; 6 -- OCTAL # IN R0
    871					;
    872	003322				TYPOCT:
    873	003322	012737 	000010 	000002'		MOV	#8.,RADIX	;OCTAL
    874					;	BR	TYPNUM		;AWAY
    875					;
    876					; TYPNUM -- TYPE A NUMBER
    877					;	R1 --	NUMBER TO BE TYPED
    878					;	RADIX -- OUTPUT RADIX
    879					;
    880					; USES R1,R2,R3
    881					;
    882	003330				TYPNUM:
    883	003330	005701 				TST	R1		;NEGATIVE #?
    884	003332	002003 				BGE	TYPNM1		;NO-- OK
    885	003334	005401 				NEG	R1		;YES-- MAKE IT POSITIVE
    886	003336	112722 	000055 			MOVB	#'-,(R2)+	; AND STORE -VE IN STRING
    887	003342				TYPNM1:
    888	003342	005003 				CLR	R3		;CLEAR REMAINDER
    889	003344				15$:
    890	003344	020137 	000002'			CMP	R1,RADIX	;CAN WE DIVIDE?
    891	003350	103404 				BLO	20$		;NO-- DIVIDE DONE
    892	003352	163701 	000002'			SUB	RADIX,R1	;YES-- FORM REMAINDER
    893	003356	005203 				INC	R3		; AND QUOTIENT
    894	003360	000771 				BR	15$		;LOOP TO DIVIDE R1 BY RADIX
    895					;
    896	003362				20$:
    897	003362					PUSH	R1		;COPY REMAINDER AS A DIGIT
	003362	010146 				MOV	R1,-(SP)
    898	003364	010301 				MOV	R3,R1		;GO BACK AND DIVIDE AGAIN
    899	003366	001402 				BEQ	30$		; UNLESS ALL DONE
    900	003370					CALL	TYPNM1		;EXTRACT ANOTHER DIGIT ONTO STACK
	003370	004737 	003342'			JSR	PC,TYPNM1
    901	003374				30$:
    902	003374					POP	R1		;DONE-- GET A DIGIT FROM STACK
	003374	012601 				MOV	(SP)+,R1
    903	003376	062701 	000060 			ADD	#'0,R1		;MAKE IT ASCII
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 32-4
TYPEOUT ROUTINES

    904	003402	110122 				MOVB	R1,(R2)+	;STORE IT IN OUTPUT STRING
    905	003404					RETURN			;FOR ANOTHER DIGIT OR THE END
	003404	000207 				RTS	PC
    906					;
    907					; EXIT HERE
    908					;
    909	003406				EXIT:
    910	003406					EXIT$S			;TASK EXIT
	003406	012746 				MOV	(PC)+,-(SP)
	003410	   063 	   001 			.BYTE	51.,1
	003412	104375 				EMT	375
    911	003414	000774 				BR	EXIT		;JUST IN CASE . . . .
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 33
END STATEMENT

    913						.SBTTL	END STATEMENT
    914		000342'				.END	COPY
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 33-1
SYMBOL TABLE

BLKMSG  003306R  	CLKVEC= 000100   	DH..MM= 001000   	DONE    002152R  	LP1DAT= 177522
BR0   = 000000   	CLKWRD= 177546   	DH..OP= 000040   	DONEA   001732R  	LP1STS= 177520
BR1   = 000040   	CMDCLN= 000034   	DH..PE= 010000   	DSTBLK  000020R  	L2.A16= 000020
BR2   = 000100   	CMDCLR= 000004R  	DH..RI= 000200   	DSTDEV  000024R  	L2.A17= 000040
BR3   = 000140   	CMDONE  001206R  	DH..SI= 040000   	DSTLUN= 000003   	L2.BCM= 007777
BR4   = 000200   	COPVFY  001372R  	DH..TI= 100000   	DSTNBF  000027R  	L2.DB = 000377
BR5   = 000240   	COPY    000342R  	DH.2SB= 000004   	DSTOP   002224R  	L2.DEL= 002000
BR6   = 000300   	CO.INE= 000100   	DLDADR= 175610   	DSTRD   002212R  	L2.DH = 002000
BR7   = 000340   	CO..MM= 000004   	DLDSIZ= 000010   	DSTUNT  000026R  	L2.DL = 000010
BUFADR= 000340R  	CPFLAG  000034R  	DLRBUF= 000002   	DSTWT   002220R  	L2.DNR= 000100
BUFBL4  000334R  	CPVFLG  000034R  	DLRSTS= 000000   	EOVFLG  000030R  	L2.DON= 000200
BUFEND  000336R  	CTCCHK  002112R  	DLXBUF= 000006   	ERRMSG  000731R     002	L2.DR = 010000
BUFSIZ  000326R  	CTICHR= 177562   	DLXSTS= 000004   	EXIT    003406R  	L2.DTE= 000002
BUFSZ2  000330R  	CTILVL= 000004   	DL.BRK= 000001   	EXITA   001144R  	L2.ENB= 000100
BUFSZ4  000332R  	CTISTS= 177560   	DL.CAR= 010000   	EXITC   000560R  	L2.ERE= 001000
B.DM11= 170500   	CTIVEC= 000060   	DL.CTS= 020000   	E.FCTC= ****** GX	L2.ERR= 100000
B0    = 000001   	CTOCHR= 177566   	DL.DIE= 000040   	E.FCTY= 000001   	L2.GER= 000001
B1    = 000002   	CTOLVL= 000004   	DL.DSC= 100000   	E.FDST= 000003   	L2.GO = 000001
B10   = 002000   	CTOSTS= 177564   	DL.DTR= 000002   	E.FSRC= 000002   	L2.INI= 000400
B11   = 004000   	CTOVEC= 000064   	DL.ERR= 100000   	FTASRT= 000001   	L2.INT= 004000
B12   = 010000   	CTYBFL= 000120   	DL.LVL= 000004   	FTECHO= 000000   	L2.LDP= 010000
B13   = 020000   	CTYBUF  000204R  	DL.OVR= 040000   	FTETR = 000000   	L2.LPE= 000040
B14   = 040000   	CTYLUN= 000001   	DL.RGO= 004000   	FTGLOM= 000000   	L2.LVL= 000004
B15   = 100000   	CTZFLG  000031R  	DL.RIE= 000100   	FTLERR  002550R  	L2.MPE= 000020
B2    = 000004   	DEVOP   002234R  	DL.RNG= 040000   	FT.CHK= 000001   	L2.MST= 000004
B3    = 000010   	DEVOP1  002270R  	DL.ROK= 000200   	FT.DDT= 000000   	L2.ONL= 004000
B4    = 000020   	DEVOP2  002412R  	DL.RTS= 000004   	FT.D75= 000000   	L2.OVF= 004000
B5    = 000040   	DEVOP8  002524R  	DL.XIE= 000100   	FT.HLP= 000001   	L2.PCM= 007777
B6    = 000100   	DEVOP9  002542R  	DL.XOK= 000200   	GETNAM  002644R  	L2.PEN= 000002
B7    = 000200   	DGUTS = 000000   	DL..FE= 020000   	GETNB   002622R  	L2.PI = 000400
B8    = 000400   	DHBASE= 160020   	DL..MM= 000004   	GETNUM  002710R  	L2.PNR= 020000
B9    = 001000   	DHRFER= 020000   	DL..PE= 010000   	GOTDEV  001276R  	L2.POL= 000200
CD.CHK= 040000   	DHROVR= 040000   	DL..RC= 000377   	GOTDV1  001340R  	L2.PZE= 040000
CD.DAT= 177162   	DH.AEE= 100000   	DL..RE= 000001   	G.PRFW= 000004   	L2.RDB= 007777
CD.DTE= 004000   	DH.BAR= 000012   	DL..XC= 000377   	G.PRPB= 000000   	L2.RPB= 010000
CD.DTL= 002000   	DH.BCR= 000010   	DL.2RC= 002000   	G.PRPS= 000002   	L2.RPE= 000010
CD.EOF= 020000   	DH.BRK= 000014   	DL.2XM= 000010   	HEFLAG  000032R  	L2.SPR= 040000
CD.ERR= 100000   	DH.CAR= 000006   	DMBASE= 170500   	IE.BLK= ****** GX	L2.TB0= 000400
CD.GO = 000001   	DH.CL5= 000000   	DM.ALI= 000017   	IE.EOF= ****** GX	L2.TB1= 001000
CD.HEM= 000004   	DH.CL6= 000001   	DM.BSY= 000020   	IE.VER= ****** GX	L2.TB2= 002000
CD.INE= 000100   	DH.CL7= 000002   	DM.CAR= 000100   	IE.WLK= ****** GX	L2.TM = 000004
CD.LVL= 000006   	DH.CL8= 000003   	DM.CTS= 000040   	IO.RLB= ****** GX	L2.TRN= 001000
CD.NXM= 001000   	DH.CNX= 000400   	DM.DNE= 000200   	IO.WLB= ****** GX	L2.UCD= 020000
CD.OFL= 010000   	DH.DOV= 040000   	DM.DTR= 000002   	IS.SET= ****** GX	L2.VD = 100000
CD.ONL= 000010   	DH.LPR= 000004   	DM.ENB= 000040   	KL.LVL= 000004   	L2.VEC= 000754
CD.PAK= 000002   	DH.LVL= 000005   	DM.IEN= 000100   	KPAR0 = 172340   	L20ADR= 000004
CD.PWR= 000400   	DH.NRC= 000002   	DM.INI= 002000   	KW.INE= 000100   	L20BCT= 000006
CD.RDY= 000200   	DH.NXM= 002000   	DM.LE = 000001   	KW.TIC= 000200   	L20BUF= 000014
CD.STS= 177160   	DH.PEN= 000020   	DM.LVL= 000004   	LP.DAT= 177516   	L20CHK= 000017
CD.VEC= 000230   	DH.RIE= 000100   	DM.RNG= 000200   	LP.DNE= 000200   	L20COL= 000015
CD.XAD= 000060   	DH.SIE= 010000   	DM.RTS= 000004   	LP.ERR= 100000   	L20CRA= 000000
CD0DAT= 177162   	DH.SSR= 000016   	DM.SCN= 004000   	LP.INE= 000100   	L20CRB= 000002
CD0STS= 177160   	DH.TIE= 020000   	DM.SR = 000020   	LP.LVL= 000004   	L20PCT= 000010
CFMERR  001734R  	DH.VDP= 100000   	DM.ST = 000010   	LP.STS= 177514   	L20PDA= 000016
CI.INE= 000100   	DH..FE= 020000   	DM.STP= 000400   	LP.VEC= 000200   	L20RAM= 000012
CLKENB= 000100   	DH..HD= 040000   	DM..MM= 001000   	LP0DAT= 177516   	L20STS= 175400
CLKLVL= 000006   	DH..MC= 004000   	DNSERR  001266R  	LP0STS= 177514   	L21STS= 175420
COPY -- MCR FUNCTION 'COP' FOR 	MACRO M1113  27-FEB-85 12:21  PAGE 33-2
SYMBOL TABLE

MM.SR0= 177572   	R$$20F= 000001   	TC.MTE= 020000   	TE.EDT= 000026   	TS.XER= 020000
MODTBL  001150R  	SPSAVE  000000R  	TC.NXM= 000400   	TE.LVL= 000006   	TS.XNT= 100000
MODTLN= 000005   	SRCBLK  000010R  	TC.PAR= 040000   	TE.NNN= 000004   	TS.XTS= 040000
MP.ENB= 000001   	SRCDEV  000014R  	TC.RDA= 000006   	TE.STW= 000034   	TS.ZST= 040000
MP.ERR= 100000   	SRCLUN= 000002   	TC.RDY= 000200   	TE.VEC= 000774   	TYPBLK  003244R
MP.LVL= 000007   	SRCNBF  000017R  	TC.REV= 004000   	TE.XAD= 000020   	TYPBUF  000040R
MP.REG= 172100   	SRCRD   002174R  	TC.RMT= 000002   	TE.XA1= 000010   	TYPCOP  003132R
MP.VEC= 000114   	SRCUNT  000016R  	TC.SAT= 000000   	TE.XA2= 000012   	TYPCR   003140R
MP.WWP= 000004   	STKLEN= 000200   	TC.SST= 000010   	TE.XBC= 000014   	TYPDEC  003224R
NISERR  001754R  	SYNERR  001174R  	TC.STS= 177340   	TE.XDT= 000024   	TYPDEV  003156R
NOSERR  001744R  	S..AMC= 000000   	TC.UPS= 000200   	TE.XW1= 000006   	TYPDON  003046R
NXMVEC= 000004   	S..BDT= 000011   	TC.US0= 000000   	TE.XW2= 000004   	TYPERR  003202R
OB0   = 000001   	S..CHK= 000012   	TC.US1= 000400   	TE.XW3= 000002   	TYPMAX= 000013
OB1   = 000002   	S..CNK= 000003   	TC.US2= 001000   	TMDERR  001774R  	TYPMSG  002754R
OB10  = 000400   	S..CTY= 000005   	TC.US3= 001400   	TMSERR  001764R  	TYPMS1  002774R
OB11  = 001000   	S..DCP= 000013   	TC.US4= 002000   	TRPVEC= 000034   	TYPNM1  003342R
OB12  = 002000   	S..DL1= 000002   	TC.US5= 002400   	TS.CET= 000001   	TYPNUM  003330R
OB13  = 004000   	S..DTE= 000002   	TC.US6= 003000   	TS.DEI= 000010   	TYPOCT  003322R
OB14  = 010000   	S..ILS= 000004   	TC.US7= 003400   	TS.DEP= 010000   	TYPSTR  003214R
OB15  = 020000   	S..KW1= 000007   	TC.VEC= 000214   	TS.EBM= 020000   	TYPTAB  003020R
OB16  = 040000   	S..MEM= 000006   	TC.WCR= 177344   	TS.EEE= 000040   	TYPTXT  003144R
OB17  = 100000   	S..NCN= 000010   	TC.WRA= 000016   	TS.EET= 000002   	TYPWRN  003210R
OB2   = 000004   	S..NXM= 000001   	TC.WTM= 000012   	TS.EEX= 000400   	VERIFY  001502R
OB3   = 000010   	TC.A16= 000020   	TC..BM= 002000   	TS.EIS= 002000   	VFFLAG  000035R
OB4   = 000020   	TC.A17= 000040   	TC..DI= 010000   	TS.ENT= 000100   	VFY1    001506R
OB5   = 000040   	TC.BAR= 177346   	TC..DM= 001000   	TS.EPE= 000020   	VFY2    001604R
OB6   = 000100   	TC.CLK= 000100   	TC..EZ= 100000   	TS.ETD= 000200   	VFY3    001716R
OB7   = 000200   	TC.CMD= 177342   	TC..MM= 020000   	TS.IEN= 000001   	VRS   = 000022
PARSE   000630R  	TC.DAT= 177350   	TC..RD= 000004   	TS.IFB= 100000   	WLKERR  002612R
PASS  = 000002   	TC.DT0= 000020   	TC..SE= 004000   	TS.MPE= 001000   	WRNMSG  000754R     002
PDP11 = 000040   	TC.DT1= 000010   	TC..WR= 000014   	TS.PEX= 100000   	ZEFLAG  000037R
QIOSTS  000004R  	TC.DT2= 000004   	TE.BAS= 174400   	TS.POF= 004000   	ZERO    002012R
RADIX   000002R  	TC.D16= 000001   	TE.BNX= 000040   	TS.RES= 004000   	$DSW  = ****** GX
RDFLAG  000036R  	TC.D17= 000002   	TE.DG1= 000030   	TS.RM = 000010   	$$    = 000037
RDZERO  002004R  	TC.ERR= 100000   	TE.DG2= 000032   	TS.RST= 000100   	$$$   = 000676R     002
RDZFLG  000036R  	TC.ILO= 010000   	TE.DG3= 000036   	TS.TBM= 000001   	$$$ARG= 000003
RD.LVL= 000004   	TC.INE= 000100   	TE.DYC= 000000   	TS.XDN= 000004   	$$$OST= 000006
READ    002062R  	TC.LVL= 000006   	TE.EAD= 000022   	TS.XEC= 010000   	$$$T1 = 000011
R$$11M= 000001   	TC.MMT= 000040   	TE.EBC= 000016   	TS.XEE= 004000

. ABS.	000000	   000
      	003416	   001
TEXT  	000776	   002
ERRORS DETECTED:  0

VIRTUAL MEMORY USED:  6189 WORDS  ( 25 PAGES)
DYNAMIC MEMORY:  7046 WORDS  ( 27 PAGES)
ELAPSED TIME:  00:00:41
[52,10]COPY,[52,20]COPY/-SP=[52,30]RSXDC,COPY