SOSREC - RECORD I/O	MACRO M1110  22-AUG-78 05:34  PAGE 2





    100						.TITLE	SOSREC - RECORD I/O

    200						.IDENT	/020600/

    300					;

    400					; COPYRIGHT 1978, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. 01754

    500					;

    600					; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS

    700					; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.

    800					;

    900					; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE

   1000					; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION

   1100					; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT

   1200					; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.

   1300					;

   1400					; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT

   1500					; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL

   1600					; EQUIPMENT CORPORATION.

   1700					;

   1800					; PETER H. LIPMAN	23-FEB-76

   1810					;

   1820					;	06	3-AUG-78	PETER H. LIPMAN

   1830					;

   1840					;	<CR><LF><LF> SEQUENCE IN STREAM MODE INPUT CAUSED A LOOP

   1850					;

   1900					;

   2000						.MCALL	FDOF$L,FCSBT$,IOERR$

   2100	000000					FDOF$L

   2200	000000					FCSBT$

   2300	000000					IOERR$

   2400

   2500						.MCALL	GET$S,PUT$S

SOSREC - RECORD I/O	MACRO M1110  22-AUG-78 05:34  PAGE 3

GET - READ NEXT LINE TO SOS BUFFER



    100						.SBTTL	GET - READ NEXT LINE TO SOS BUFFER

    200

    300	000000					CODE$	REC

    400

    500	000000				ENTRY	GET

    520	000000	016600 	000012 			MOV	12(SP),R0		;ADDRESS OF FDB

    530	000004	105767 	000000G			TSTB	STRMIN			;STREAM INPUT?

    540

    560						.IF	DF,R$$STS

    600						BEQ	2$			;BRANCH IF NOT

    620						JMP	GSTRM			;YES, PROCESS STREAM INPUT

    640

    660						.IFF	;RSX ONLY

    700	000010	001173 				BNE	GSTRM			;BRANCH IF YES

    705

    710						.IFTF	;RSX AND RSTS

    720	000012	010146 			2$:	MOV	R1,-(SP)		;SAVE SOME REGISTERS

    730	000014	010246 				MOV	R2,-(SP)

    740

    760						.IFT	;RSTS ONLY

    780						TSTB	FFLAST			;LAST RECORD END IN FF

    800						BEQ	5$			;BRANCH IF NOT

    820						CLRB	FFLAST			;YES, RESET THE FLAG

    840					4$:	INC	@14(SP)			;CHANGE THE PAGE NUMBER

    860						MOV	10(SP),@12(SP)		;NEW STARTING LINE NUMBER

    880

    900						.IFTF	;RSX AND RSTS

   1000	000016				5$:	GET$S	,20(SP),#512.		;GET NEXT RECORD

   1100	000036	103016 				BCC	10$			;GOT IT OK

   1200	000040	012702 	177777 		7$:	MOV	#-1,R2			;SET EOF IND

   1300	000044	122760 	177766 	000052 		CMPB	#IE.EOF,F.ERR(R0)	;WAS IT EOF?

   1400	000052	001002 				BNE	8$			;NO

   1500	000054	000167 	000304 			JMP	70$			;YES.  EXIT NOW

   1600	000060	122760 	177730 	000052 	8$:	CMPB	#IE.RBG,F.ERR(R0)	;LINE TOO LONG?

   1700	000066	001402 				BEQ	9$			;YES. CAN RECOVER

   1800	000070	000167 	000300 			JMP	80$			;NO  BAD ONE

   1820	000074				9$:

   1840						.IFT	;RSTS ONLY

   1900						MOV	20(SP),R1		;BUFFER AREA FOR LINE

   2000						MOVB	#15,511.(R1)		;SET TERM CHAR

   2100						MOV	#511.,F.NRBD(R0)	;SET LINE LENGTH

   2200						MOV	20(SP),F.NRBD+2(R0)	;AND LINE POINTER

   2220

   2240						.IFTF	;RSX AND RSTS

   2300	000074				10$:

   2400						.IFT	;RSTS ONLY

   2500						CMPB	F.RTYP(R0),#R.STRM	;STREAM INPUT FILE?

   2600						BNE	30$			;NO..READ RMS FILE

   2700						MOV	F.NRBD(R0),R2		;RECORD LENGTH

   2800						BEQ	25$			; ZERO LENGTH RECORD

   2900						MOV	F.NRBD+2(R0),R1		;BUFFER ADDRESS

   3000						CMP	R2,#1			;IS IT A FORM FEED?

   3100						BNE	15$

   3200						CMPB	(R1),#14

   3600						BEQ	4$			;SET NEW PAGE, GET NEXT RECORD

   3700					15$:	ADD	R1,R2			;POINT TO END OF RCD

   3800						CMPB	-(R2),#14		;TERM ON FORM FED?

SOSREC - RECORD I/O	MACRO M1110  22-AUG-78 05:34  PAGE 3-1

GET - READ NEXT LINE TO SOS BUFFER



   3900						BNE	18$			;NO.

   4000						INCB	FFLAST			;SET FLAG FOR NEXT GET

   4100						DEC	F.NRBD(R0)		;DROP FF CHAR

   4200						BR	25$

   4300					18$:	CMPB	(R2)+,#12		;SPECIAL CASE OF LF

   4400						BNE	25$			;IN BASIC FILES

   4500						BIT	SOSFLG,#BASIC		;

   4600						BEQ	23$

   4700						MOVB	#15,(R2)+		;INTO THE RECORD

   4800					23$:	MOV	#512.,R1		;COMPUTE NEW MAX LEN

   4900						SUB	F.NRBD(R0),R1		;.

   5000						DEC	R1

   5100						GET$S	,R2,R1			;READ CONTINUATION LINE

   5200						BCS	7$			;ERROR...HOW??

   5300						BR	10$			;GO PROCESS LINE SEGMENT

   5400

   5500					25$:	MOV	F.NRBD(R0),R2		;RECORD LENGTH

   5600						MOV	F.NRBD+2(R0),R1		;ADDRESS

   5700						SUB	20(SP),R1		;LEN BEFORE SEGMENT READ

   5800						ADD	R1,R2			;ACTUAL LINE LENGTH

   5900										;(DIFF ONLY FOR BASIC)

   6000

   6100						BIT	#1,@6(SP)		;SHOULD WE SEARCH?

   6200						BNE	65$			;NO..ASSUME NO LINE NUMBER

   6300						BR	50$

   6400						.ENDC

   6500	000074				30$:

   6600	000074	016001 	000026 			MOV	F.NRBD+2(R0),R1		;R1=RECORD ADDRESS

   6700	000100	016002 	000024 			MOV	F.NRBD(R0),R2		;R2=RECORD SIZE

   6800	000104	001414 				BEQ	45$			;BRANCH IF NULL RECORD

   6900					;

   7000					; IS THIS RECORD A PAGE MARK, 1 BYTE RECORD  WITH A FF?

   7100					;

   7200	000106	121127 	000014 			CMPB	(R1),#14		;FORM FEED?

   7300	000112	001011 				BNE	45$			;BRANCH IF NOT

   7400	000114	020227 	000001 			CMP	R2,#1			;ONE BYTE RECORD?

   7600

   7700						.IF	DF,R$$STS

   7800						BEQ	4$			;SET NEW PAGE, GET NEXT RECORD

   7900

   8000						.IFF	;RSX ONLY

   8050	000120	001006 				BNE	45$			;BRANCH IF NOT

   8100	000122	005276 	000014 			INC	@14(SP)			;NEXT PAGE NUMBER

   8200	000126	016676 	000010 	000012 		MOV	10(SP),@12(SP)		;NEW STARTING LINE NUMBER

   8300	000134	000730 				BR	5$			;GET NEXT RECORD

   8400						.ENDC

   8500

  10100	000136	032776 	000001 	000006 	45$:	BIT	#1,@6(SP)		;SHOULD WE SCAN FOR LINE?

  10200	000144	001076 				BNE	65$			;NO--NOT IF SET

  10300	000146	122760 	000003 	000000 		CMPB	#R.SEQ,F.RTYP(R0)	;IF SEQUENCED RECORDS

  10400	000154	001010 				BNE	50$

  10410

  10420						.IF	NDF,R$$STS

  10430	000156	132760 	000004 	000001 		BITB	#FD.PRN,F.RATT(R0)	;IF PRINT FILE FORMAT

  10440	000164	001004 				BNE	50$			;THEN F.SEQN IS CARRIAGE CONTROL INFO

  10450						.ENDC

  10460

SOSREC - RECORD I/O	MACRO M1110  22-AUG-78 05:34  PAGE 3-2

GET - READ NEXT LINE TO SOS BUFFER



  10500	000166	016076 	000100 	000012 		MOV	F.SEQN(R0),@12(SP)	;STORE THE RECORD'S SEQUENCE NO.

  10600	000174	000462 				BR	65$

  10700	000176				50$:

  10800						.IF	NDF,R$$STS

  10900	000176	032767 	000000G	000000G		BIT	#BASIC,SOSFLG		;IF BASIC MODE, SEE IF BASIC LINE #'S

  11000	000204	001410 				BEQ	52$			;BRANCH IF NOT, SAY UNSEQUENCED

  11100						.ENDC

  11200

  11300	000206	016601 	000020 			MOV	20(SP),R1		;POINT TO START OF TEXT

  11400	000212	121127 	000060 			CMPB	(R1),#'0		;IS FIRST CHAR A DIGIT?

  11500	000216	103403 				BLO	52$			;NO

  11600	000220	121127 	000071 			CMPB	(R1),#'9		;...

  11700	000224	003404 				BLE	54$			;GOOD LINE NUMBER

  11800	000226	052776 	000002 	000006 	52$:	BIS	#2,@6(SP)		;WELL--WE TRIED

  11900	000234	000442 				BR	65$			;SET TEXT LEN AND RETURN

  12000	000236	010346 			54$:	MOV	R3,-(SP)		;SAVE MORE REGS

  12100	000240	010446 				MOV	R4,-(SP)

  12200	000242	005003 				CLR	R3

  12300	000244	112104 			55$:	MOVB	(R1)+,R4		;COPY DIGIT

  12400	000246	005302 				DEC	R2			;DEC LENGTH OF RECORD

  12500	000250	162704 	000060 			SUB	#'0,R4			;MAKE BINARY

  12600	000254	006303 				ASL	R3			;MULT PREV BY 10

  12700	000256	010346 				MOV	R3,-(SP)

  12800

  12900						.IF	DF,R$$EIS

  13000	000260	072327 	000002 			ASH	#2,R3

  13100

  13200						.IFF

  13300						ASL	R3

  13400						ASL	R3

  13500						.ENDC

  13600

  13700	000264	062603 				ADD	(SP)+,R3

  13800	000266	060403 				ADD	R4,R3			;ACCUM THIS DIGIT

  13900	000270	121127 	000060 			CMPB	(R1),#'0		;NEXT CHAR ALSO DIGIT?

  14000	000274	103403 				BLO	57$

  14100	000276	121127 	000071 			CMPB	(R1),#'9

  14200	000302	003760 				BLE	55$			;PROCESS DIGIT

  14300	000304	121127 	000011 		57$:	CMPB	(R1),#11		;FOLLOWING TAB?

  14400	000310	001002 				BNE	58$			;NO.. DATA STARTS HERE

  14500	000312	005201 				INC	R1			;UP POINTER PST IT

  14600	000314	005302 				DEC	R2			;CHOP OFF OF LENGTH

  14700	000316	010376 	000016 		58$:	MOV	R3,@16(SP)		;SAVE THE LINE NUMBER

  14800	000322	016603 	000024 			MOV	24(SP),R3		;START OF TEXT AREA

  14900	000326	010204 				MOV	R2,R4			;LENGTH AGAIN

  15000	000330	001402 				BEQ	60$

  15100	000332	112123 			59$:	MOVB	(R1)+,(R3)+		;COPY BYTE OF DATA

  15200	000334	077402 				SOB	R4,59$			;SHIFT LINE DOWN

  15300	000336	012604 			60$:	MOV	(SP)+,R4

  15400	000340	012603 				MOV	(SP)+,R3

  15500

  15600	000342	016601 	000020 		65$:	MOV	20(SP),R1		;TEXT START ADR

  15700	000346	060201 				ADD	R2,R1			;END OF LINE

  15800	000350	105021 				CLRB	(R1)+			;NULL PAD IT

  15900	000352	105021 				CLRB	(R1)+			;GUARANTEE ONE

  16000	000354	062702 	000002 			ADD	#2,R2			;COMPUTE AN EVEN

  16100	000360	042702 	000001 			BIC	#1,R2			;LENGTH OF RECORD

SOSREC - RECORD I/O	MACRO M1110  22-AUG-78 05:34  PAGE 3-3

GET - READ NEXT LINE TO SOS BUFFER



  16200	000364	010200 			70$:	MOV	R2,R0			;RETURN LENGTH OF LINE

  16300	000366	012602 				MOV	(SP)+,R2

  16400	000370	012601 				MOV	(SP)+,R1

  16500	000372	000207 				RTS	PC			;RETURN

  16600

  16700	000374				80$:

  16800	000374	005302 				DEC	R2			;-2 FOR GET ERROR

  16900	000376	000772 				BR	70$			;RETURN

SOSREC - RECORD I/O	MACRO M1110  22-AUG-78 05:34  PAGE 4

GSTRM - STREAM ORIENTED GET



    100						.SBTTL	GSTRM - STREAM ORIENTED GET

    200

    300	000400	004167 	000000G		GSTRM:	JSR	R1,$SAV5

    400	000404	016604 	000030 			MOV	30(SP),R4		;ADDRESS TO PUT RECORD

    500	000410	010403 				MOV	R4,R3			;INIT NEXT ADR TO STORE IN

    550	000412	005005 				CLR	R5			;SAY NO <CR> SEEN YET

    600	000414	000441 				BR	90$			;GO GET THE NEXT RECORD

    700					;

    800					; THE FOLLOWING REGISTER CONVENTIONS ARE USED

    900					; R0 - FDB ADDRESS

   1000					; R1 - ADDRESS OF NEXT INPUT BYTE

   1100					; R2 - NUMBER OF BYTES OF INPUT RECORD LEFT TO PROCESS

   1200					; R3 - ADDRESS TO STORE NEXT OUTPUT BYTE

   1300					; R4 - ADDRESS OF BEGINNING OF OUTPUT BUFFER

   1400					; R5 - CARRIAGE RETURN FLAG

   1500					;      0 IF PREVIOUS CHARACTER WAS NOT A CR

   1600					;      1 IF PREVIOUS CHARACTER WAS A CR

   1700					;

   1800	000416	112113 			50$:	MOVB	(R1)+,(R3)		;STORE NEXT BYTE OF RECORD

   1900	000420	121327 	000015 			CMPB	(R3),#15		;IS IT A CR OR TERMINATOR?

   2000	000424	003032 				BGT	70$			;BRANCH IF NOT A SPECIAL CHARACTER

   2100	000426	001426 				BEQ	65$			;BRANCH IF CR

   2200	000430	121327 	000012 			CMPB	(R3),#12		;LINE FEED?

   2300	000434	002426 				BLT	70$			;BRANCH IF NOT A TERMINATOR

   2400	000436	003004 				BGT	55$			;BRANCH IF NOT A LF, CHECK FOR FF

   2500					;

   2600					; LINE FEED CHARACTER

   2700					;

   2800	000440	005705 				TST	R5			;PRECEEDED BY CR?

   2900	000442	001423 				BEQ	70$			;BRANCH IF NOT, TREAT AS DATA

   3000	000444	005303 				DEC	R3			;TAKE CR OUT OF OUTPUT BUFFER

   3100										;INC FOR LF HADN'T BEEN DONE YET

   3200	000446	000446 				BR	120$			;GO PROCESS A COMPLETED RECORD

   3300					;

   3400					; CHECK FOR FF

   3500					;

   3600	000450	121327 	000014 		55$:	CMPB	(R3),#14		;FORM FEED?

   3700	000454	001016 				BNE	70$			;BRANCH IF NOT A TERMINATOR

   3800	000456	020304 				CMP	R3,R4			;ANY DATA PRECEEDING THE FF

   3900	000460	001006 				BNE	60$			;BRANCH IF YES

   4000					;

   4100					; FORM FEED IS FIRST CHARACTER

   4200					;

   4300	000462	005276 	000024 			INC	@24(SP)			;CHANGE PAGE NUMBER

   4400	000466	016676 	000020 	000022 		MOV	20(SP),@22(SP)		;SET NEW STARTING LINE NUMBER

   4500	000474	000410 				BR	85$			;CONTINUE GETTING A RECORD

   4600					;

   4700					; DATA RECORD FOLLOWED BY FF

   4800					;

   4900	000476	005301 			60$:	DEC	R1			;LEAVE FF IN THE INPUT STREAM

   5000										;FOR NEXT RECORD TO FIND

   5100	000500	160503 				SUB	R5,R3			;IF CR PRECEEDING, REMOVE IT

   5400	000502	000430 				BR	120$			;AND PROCESS THE POSSIBLY NULL RECORD

   5500					;

   5600					; CARRIAGE RETURN SEEN

   5700					;

   5800	000504	012705 	000001 		65$:	MOV	#1,R5			;INDICATE CR SEEN

SOSREC - RECORD I/O	MACRO M1110  22-AUG-78 05:34  PAGE 4-1

GSTRM - STREAM ORIENTED GET



   5900	000510	000401 				BR	80$

   6000					;

   6100					; CHARACTER IS NOT A CR, LF, OR FF

   6200					;

   6300	000512	005005 			70$:	CLR	R5			;NO CR SEEN

   6400	000514	005203 			80$:	INC	R3			;COUNT OUTPUT CHARACTER

   6500	000516	077241 			85$:	SOB	R2,50$			;PROCESS NEXT INPUT CHARACTER IF ANY

   6600					;

   6700					; INPUT SIDE EXHAUSTED, BUT DONOT HAVE A COMPLETE RECORD ON THE OUTPUT SIDE

   6800					;

   6900	000520	010402 			90$:	MOV	R4,R2			;BEGINNING ADDRESS OF OUTPUT BUFFER

   7000	000522	062702 	001000 			ADD	#512.,R2		;ADR OF LAST+1 BYTE OF BUFFER

   7100	000526	160302 				SUB	R3,R2			;NUMBER OF BYTES REMAINING IN BUF

   7200	000530	020227 	000002 			CMP	R2,#2			;ENOUGH ROOM FOR ANOTHER GET?

   7300	000534	003422 				BLE	130$			;NO, CALL THIS RECORD COMPLETE

   7500					;

   7600					; R3 = RECORD BUFFER ADDRESS, R2 = RECORD BUFFER SIZE

   7700					; GET THE NEXT RECORD

   7800					;

   7900	000536	004767 	000064 		100$:	JSR	PC,DOGET		;GET THE NEXT RECORD

   8000					;

   8100					; R1 = ADDRESS OF NEXT BYTE IN THE INPUT STREAM

   8200					; R2 = NUMBER OF BYTES IN THIS RECORD

   8300					; R3 = ADDRESS OF NEXT OUTPUT BYTE TO BE STORED

   8400					;

   8500	000542	005702 				TST	R2			;CHECK FOR END OF FILE OR NULL RECORD

   8600	000544	003324 				BGT	50$			;BRANCH IF MORE DATA IN INPUT STREAM

   8700	000546	001764 				BEQ	90$			;BRANCH IF NULL RECORD, GET ANOTHER

   8800					;

   8900					; END OF FILE, MUST COMPLETE LAST RECORD IF ANY

   9000					;

   9100	000550	020304 				CMP	R3,R4			;ANY DATA IN OUTPUT RECORD BUFFER

   9200	000552	003002 				BGT	110$			;BRANCH IF YES

   9300	000554	010200 				MOV	R2,R0			;RETURN -1 FOR EOF

   9400	000556	000422 				BR	140$

   9500					;

   9600					; EOF FORCING OUT THE LAST PARTIAL RECORD

   9700					;

   9800	000560	160503 			110$:	SUB	R5,R3			;IF PRECEEDING CHAR WAS CR, STRIP IT

  10100	000562	000407 				BR	130$			;AND PROCESS THE FINAL RECORD

  10200					;

  10300					; OUTPUT RECORD IS COMPLETE, NOTE WHETHER ANY INPUT LEFT FOR NEXT TIME

  10400					;

  10500	000564	166001 	000026 		120$:	SUB	F.NRBD+2(R0),R1		;NUMBER OF BYTES PROCESSED IN RECORD

  10600	000570	026001 	000024 			CMP	F.NRBD(R0),R1		;ANY LEFT FOR LATER?

  10700	000574	003402 				BLE	130$			;BRANCH IF NOT

  10800	000576	010167 	000000G			MOV	R1,SVSTRM		;NOTE HOW MANY BYTES ALREADY USED

  10900					;

  11000					; STORE TWO TRAILING NULLS AND RETURN SIZE AS EVEN NUMBER

  11100					;

  11200	000602	052776 	000002 	000016 	130$:	BIS	#2,@16(SP)		;INDICATE NO LINE NUMBERS

  11250	000610	105023 				CLRB	(R3)+			;END RECORD WITH NULLS

  11300	000612	105023 				CLRB	(R3)+

  11400	000614	160403 				SUB	R4,R3			;SIZE OF RECORD

  11500	000616	042703 	000001 			BIC	#1,R3			;MAKE IT EVEN

  11600	000622	010300 				MOV	R3,R0			;RETURN VALUE IS THE RECORD SIZE

  11700	000624	000207 			140$:	RTS	PC			;RETURN TO CALLER

SOSREC - RECORD I/O	MACRO M1110  22-AUG-78 05:34  PAGE 5

GSTRM - STREAM ORIENTED GET



    100					;

    200					; THIS ROUTINE GETS THE NEXT BYTES IN THE INPUT STREAM TO BE PROCESSED.

    300					; IF ANY BYTES WERE LEFT IN THE LAST RECORD, THEY WILL BE READ FROM THE

    400					; STREAM BUFFER BEFORE THE NEXT GET IS ISSUED.

    500					;

    600					; INPUTS:

    700					;	R0 = FDB ADDRESS

    800					;	R2 = SIZE OF REMAINING SPACE IN OUTPUT BUFFER

    900					;

   1000					; OUTPUTS:

   1100					;

   1200					;	R0,R3,R4,R5 PRESERVED

   1300					;	R1 = ADDRESS OF NEXT BYTE IN INPUT STREAM TO PROCESS

   1400					;	R2 = NUMBER OF BYTES IN THE STREAM, OR -1 IF EOF

   1500					;

   1600					;

   1700					; THE SAVED CONTEXT FOR THE ROUTINE IS

   1800					;	SVSTRM - NUMBER OF BYTES ALREADY PROCESSED IN THE RECORD.

   1900					;		= 0 IF NO MORE BYTES IN STREAM BUFFER, DO ANOTHER GET

   2000					;		> 0 MEANS SKIP THAT MANY BYTES IN STREAM BUFFER

   2100					;		< 0 MEANS GET THE RECORD AGAIN AND SKIP THAT MANY BYTES

   2200					;			THIS IS FOR A REOPENED INPUT FILE WHEN COPYFS

   2300					;			CLOSES AND REOPENS THE INPUT FILE.

   2400					;		 THIS IS FOLLOWED BY 3 WORDS OF .POINT INFORMATION

   2500					;

   2600

   2700	000626	010446 			DOGET:	MOV	R4,-(SP)		;SAVE SOME REGISTERS

   2800	000630	010346 				MOV	R3,-(SP)

   2900	000632	010246 				MOV	R2,-(SP)

   3000	000634	012704 	000000G			MOV	#SVSTRM,R4		;ADDRESS OF CONTEXT AREA

   3100	000640	012403 				MOV	(R4)+,R3		;ANYTHING LEFT IN PREVIOUS RECORD?

   3200	000642	003017 				BGT	40$			;BRANCH IF YES, IT'S IN THE STREAM BUF

   3300	000644	012704 	000006G			MOV	#SVSTRM+6,R4		;ADR OF LAST .MARK PARAMETER

   3400	000650	016014 	000030 			MOV	F.NREC(R0),(R4)		;ADR OF NEXT RECORD

   3500	000654	066014 	000060 			ADD	F.VBSZ(R0),(R4)		;  FORM BYTE OFFSET

   3600	000660	166014 	000032 			SUB	F.EOBB(R0),(R4)		;    IN BLOCK

   3700	000664	016044 	000066 			MOV	F.VBN+2(R0),-(R4)	;LOW VBN BITS

   3800	000670	016044 	000064 			MOV	F.VBN(R0),-(R4)		;HIGH VBN BITS

   3900	000674					GET$S	R0			;GET THE RECORD

   4000	000700	103440 				BCS	80$			;BRANCH IF ERROR, CHECK EOF

   4100	000702	016002 	000024 		40$:	MOV	F.NRBD(R0),R2		;SIZE OF RECORD

   4200	000706	016001 	000026 			MOV	F.NRBD+2(R0),R1		;ADDRESS OF RECORD

   4210	000712	132760 	000002 	000001 		BITB	#FD.CR,F.RATT(R0)	;IF IMPLICIT CR, LF, MUST ADD THEM

   4220	000720	001412 				BEQ	45$

   4222	000722	005703 				TST	R3			;IF RECORD PREVIOUSLY READ

   4224	000724	003010 				BGT	45$			; THEN ALREADY ADDED CR, LF

   4230	000726	060102 				ADD	R1,R2			;OTHERWISE, TACK THEM ON

   4240	000730	112722 	000015 			MOVB	#15,(R2)+		;  TO THE END

   4250	000734	112722 	000012 			MOVB	#12,(R2)+		;    OF THE RECORD

   4260	000740	160102 				SUB	R1,R2			;GET THE ADJUSTED SIZE

   4270	000742	010260 	000024 			MOV	R2,F.NRBD(R0)		;AND RECORD IT IN THE FDB

   4300	000746	012603 			45$:	MOV	(SP)+,R3		;ROOM LEFT IN OUTPUT BUFFER

   4400	000750	014446 				MOV	-(R4),-(SP)		;COUNT OF BYTES ALREADY PROCESSED

   4500	000752	002001 				BGE	50$			;IF NEGATIVE

   4600	000754	005416 				NEG	(SP)			;MAKE IT POSITIVE NOW

   4700	000756	005014 			50$:	CLR	(R4)			;ASSUME ALL BYTES WILL BE PROCESSED

   4720	000760	061601 				ADD	(SP),R1			;SKIP BYTES ALREADY PROCESSED IF ANY

SOSREC - RECORD I/O	MACRO M1110  22-AUG-78 05:34  PAGE 5-1

GSTRM - STREAM ORIENTED GET



   4740	000762	162602 				SUB	(SP)+,R2		;ADJUST BYTE COUNT AS WELL

   4800	000764	020203 				CMP	R2,R3			;IF LARGER RECORD THAN CAN FIT

   4900	000766	003402 				BLE	60$

   5000	000770	010302 				MOV	R3,R2			;PROCESS ONLY WHAT WILL FIT (OR LESS)

   5100	000772	010314 				MOV	R3,(R4)			;AND SAY THAT SOME WILL BE LEFT

   5400	000774	012603 			60$:	MOV	(SP)+,R3		;RESTORE SAVED REGISTER

   5500	000776	012604 				MOV	(SP)+,R4

   5600	001000	000207 				RTS	PC			;AND RETURN

   5700					;

   5800					; ERROR FROM GET

   5900					;

   6000	001002	122760 	177730 	000052 	80$:	CMPB	#IE.RBG,F.ERR(R0)	;IF RECORD TOO BIG, TRUNCATE IT

   6100	001010	001734 				BEQ	40$

   6200	001012	005726 			90$:	TST	(SP)+			;CLEAN THE STACK

   6225	001014	012702 	177777 			MOV	#-1,R2			;EOF RETURN INDICATOR

   6250	001020	122760 	177766 	000052 		CMPB	#IE.EOF,F.ERR(R0)	;END OF FILE?

   6300	001026	001762 				BEQ	60$			;BRANCH IF EOF

   6400	001030	005302 				DEC	R2			;GET ERROR CODE

   6600	001032	000760 				BR	60$			;AND RETURN

   6900

   7000						.DSABL	LSB

SOSREC - RECORD I/O	MACRO M1110  22-AUG-78 05:34  PAGE 6

PUT - WRITE A RECORD TO OUTPUT FILE



    100						.SBTTL	PUT - WRITE A RECORD TO OUTPUT FILE

    200

    300	001034				ENTRY	PUT

    400	001034	004167 	000000G			JSR	R1,$SAV3		;SAVE 3 REGS

    500	001040	016601 	000016 			MOV	16(SP),R1		;FDB POINTER

    600	001044	016602 	000014 			MOV	14(SP),R2		;LINE ADDRESS

    700	001050	016603 	000012 			MOV	12(SP),R3		;PAGE # ADDRESS

    800					;

    900					; THE SEQBAS FLAG IS USED TO DISTINGUISH BETWEEN THE TWO TYPES

   1000					; OF RSX SEQUENCED FILES, THE STANDARD FCS SEQUENCED

   1100					; RECORD FILE WITH BINARY SEQUENCE #'S STORED AS

   1200					; A WORD, AND THE BASIC FORMAT WITH ASCII SEQUENCE #'S.

   1300					; THE /BASIC SWITCH CHOOSES THE BASIC FORMAT, BUT IF SET

   1400					; AFTER THE FIRST PUT IS DONE, THEN A RECOPY HAS TO BE

   1500					; REQUESTED TO GUARANTEE THAT THE EVENTUAL OUTPUT WILL BE

   1600					; IN THE RIGHT FORMAT.  THAT'S THE FUNCTION OF THE REQCPY

   1700					; BIT.  IT'S SET WHEN A /BASIC OR /NOBASIC SWITCH IS GIVEN

   1800					; AND RESET WHEN THE FIRST PUT IS DONE.  IT FORCES

   1900					; CERTAIN COMMANDS LIKE "E" TO PERFORM ANOTHER COPY.

   2000					;

   2100	001054	116700 	000000G			MOVB	SEQBAS,R0		;GET FLAGS WORD

   2200	001060	001011 				BNE	5$			;BRANCH IF FLAGS INITED

   2300	001062	042767 	000000G	000000G		BIC	#REQCPY,SOSFLG		;NO NEED TO FORCE COPY

   2400					;

   2500					; FIRST PUT TO FILE, INIT THE FLAGS

   2600					;

   2700	001070	116200 	000002 			MOVB	2(R2),R0		;GET THE UNSEQUENCE FLAG

   2800	001074	004767 	000264 			JSR	PC,SETPUT		;RETURN FLAGS, SET RECORD TYPE

   2900	001100	110067 	000000G			MOVB	R0,SEQBAS		;STORE FLAGS FOR SUBSEQUENT PUT'S

   3000	001104				5$:

   3100					;

   3200					; R0 = FLAGS FOR PUT, R1 = FDB ADDRESS, R2 = LINE ADDRESS, R3 = PAGE # ADDRESS

   3300					;

   3400	001104				PUTLS1::

   3500	001104	105712 				TSTB	(R2)			;EOF LINE?

   3600	001106	001473 				BEQ	40$			;YES.  DO NOT PUT IT

   3700

   3800	001110	021362 	000004 		10$:	CMP	(R3),4(R2)		;PAGE NUMBER CHANGE?

   3900	001114	103017 				BHIS	15$			;NO.  NO FF

   4000

   4100					;	PT OUT A PAGE MARK IN FILE

   4200

   4300	001116	012761 	177777 	000100 		MOV	#-1,F.SEQN(R1)		;STORE FF SEQUENCE NO.

   4400	001124	012761 	000000G	000026 		MOV	#FFREC,F.NRBD+2(R1)	;ADDRESS OF FORM FEED RECORD

   4500	001132	012761 	000001 	000024 		MOV	#1,F.NRBD(R1)		;SIZE OF FORM FEED RECORD

   4600	001140	010046 				MOV	R0,-(SP)		;SAVE FLAGS AROUND THE PUT

   4700	001142	004767 	000174 			JSR	PC,DOPUT1		;PUT THE FORM FEED RECORD

   4800	001146	012600 				MOV	(SP)+,R0		;RESTORE FLAGS

   4900	001150	005213 			12$:	INC	(R3)			;INC PAGE NUM FOR OUTPUT

   5000	001152	000756 				BR	10$			;SEE IF MORE NEEDED

   5100	001154	032700 	000000G		15$:	BIT	#NOSEQF,R0		;UNSEQ THIS LINE?

   5200	001160	001041 				BNE	30$			;YES IF BIT IS ON

   5300

   5400					;	WRITE A SEQUENCED RECORD TO OUTPUT FILE

   5500

   5600

   5700						.IF	NDF,R$$STS

SOSREC - RECORD I/O	MACRO M1110  22-AUG-78 05:34  PAGE 6-1

PUT - WRITE A RECORD TO OUTPUT FILE



   5800	001162	032700 	000000G			BIT	#BASICF,R0		;PUT IN BASIC MODE?

   5900	001166	001433 				BEQ	28$			;BRANCH IF NOT

   6000						.IFF

   6100						BIT	#RMSF,R0		;IS RSX STYLE FILE,

   6200						BNE	28$			;DO RSX STYLE PUT

   6300						.ENDC

   6400

   6500	001170	005722 			21$:	TST	(R2)+			;POINT AT FLAGS WORD

   6600	001172	011246 				MOV	(R2),-(SP)		;SAVE 3 WORD

   6700	001174	016246 	000002 			MOV	2(R2),-(SP)		;AS LINE NUMBER

   6800	001200	016246 	000004 			MOV	4(R2),-(SP)		;BUILD AREA

   6900					;			NOTE LAST WAS THE LINE NUMBER!!

   7000	001204	012746 	000005 			MOV	#5,-(SP)		;LEN OF ASCII STRING

   7100	001210	004767 	000000G			JSR	PC,CNVDEC		;MAKE IT ASCII

   7200	001214	012603 				MOV	(SP)+,R3		;BYTE COUNT

   7300	001216	112022 			22$:	MOVB	(R0)+,(R2)+		;COPY LINE NUMBER INTO

   7400	001220	077302 				SOB	R3,22$			;LINE FLAG AREA

   7500	001222	112722 	000011 			MOVB	#11,(R2)+		;TAB AFTER LINE NUMBER

   7600	001226	162702 	000006 			SUB	#6,R2			;POINT TO START OF RECORD

   7700	001232	010200 				MOV	R2,R0			;FORM LINE ADDRESS

   7800	001234	005740 				TST	-(R0)			;IN R0

   7900	001236	004767 	000040 			JSR	PC,DOPUT0		;FIND END OF RECORD AND DO PUT

   8000	001242	012662 	000004 			MOV	(SP)+,4(R2)		;RESTORE LINE FLAG

   8100	001246	012662 	000002 			MOV	(SP)+,2(R2)		;AREAS

   8200	001252	012612 				MOV	(SP)+,(R2)

   8300	001254	000410 				BR	40$			;SET AND EXIT

   8400					;

   8500					; WRITE AN RSX SEQUENCED RECORD

   8600					;

   8700	001256	016261 	000006 	000100 	28$:	MOV	6(R2),F.SEQN(R1)	;STORE SEQUENCE NO. IN FDB

   8800

   8900					;	WRITE AN UNSEQUENCED RECORD TO OUTPUT FILE

   9000

   9100	001264	010200 			30$:	MOV	R2,R0			;LINE ADDRESS

   9200					;

   9300					;		FOLLOWING CONDITIONAL CODE IS ADDED DUE TO

   9400					;		PROBLEM PUTTING UNSEQUENCED ZERO LENGTH

   9500					;		RECORDS TO AN ASCII STREAM FILE IN RSTS.

   9600					;		IF BINARY LINE NUMBER LOOKS LIKE A CR OR FF CHARACTER,

   9700					;		RSTS/E FCS WILL NOT PUT IN A LINE TERMINATOR

   9800					;

   9900						.IF	DF,R$$STS

  10000						ADD	#6,R2			;POINT AT LINE NUMBER WORD

  10100						MOV	(R2),-(SP)		;SAVE LINE NUMBER

  10200						CLR	(R2)+			;CLEAR WORD BEFORE TEXT

  10300

  10400						.IFF				;RSX

  10500	001266	062702 	000010 			ADD	#10,R2			;ADDRESS OF RECORD

  10600						.ENDC

  10700

  10800	001272	004767 	000004 			JSR	PC,DOPUT0		;FIND END OF RECORD, DO PUT

  10900

  11000						.IF	DF,R$$STS

  11100						MOV	(SP)+,-(R2)		;RESTORE SAVED LINE NUMBER

  11200						.ENDC

  11300

  11400	001276	005000 			40$:	CLR	R0			;SET GOOD RETURN CODE

SOSREC - RECORD I/O	MACRO M1110  22-AUG-78 05:34  PAGE 6-2

PUT - WRITE A RECORD TO OUTPUT FILE



  11500	001300	000207 				RTS	PC			;AND RETURN

  11600					;

  11700					; R0 = ADR OF LINE HEADER, R1 = FDB ADR, R2 = ADR OF BEGINNING OF RECORD

  11800					; PRESERVES R2

  11900					;

  12000	001302	111003 			DOPUT0:	MOVB	(R0),R3			;SIZE IN WORDS OF THIS LINE

  12100	001304	042703 	177400 			BIC	#177400,R3		;NO SIGN EXTENSION

  12200	001310	006303 				ASL	R3			;BYTE COUNT

  12300	001312	060003 				ADD	R0,R3			;ADDRESS OF LAST+1 BYTE

  12400					;

  12500					; THE TEXT IS GUARANTEED TO HAVE ONE TRAILING NULL BYTE, BUT NOT

  12600					; NECESSARILY 2 BYTES IF ENDED ON WORD BOUNDARY.  THEREFORE SKIP

  12700					; THE LAST BYTE ENTIRELY SINCE IT IS EITHER A NULL OR A POSSIBLY

  12800					; GARBAGED CHARACTER AFTER THE NULL.

  12900					;

  13000	001314	005303 				DEC	R3

  13100	001316	105743 			10$:	TSTB	-(R3)			;PEEL OFF THE TRAILING NULL(S)

  13200	001320	001776 				BEQ	10$			;BRANCH IF MORE TO DO

  13300	001322	160203 				SUB	R2,R3			;SIZE - 1 OF RECORD

  13400	001324	005203 				INC	R3			;SIZE

  13500	001326	002001 				BGE	20$			;IN CASE EMPTY RECORD WENT NEGATIVE

  13600	001330	005003 				CLR	R3			;WRITE EMPTY RECORD

  13700	001332				20$:

  13800

  13900					; R1 = FDB, R2 = ADDRESS OF RECORD, R3 = SIZE OF RECORD

  14000

  14100	001332	010261 	000026 		DOPUT:	MOV	R2,F.NRBD+2(R1)		;SET RECORD ADDRESS TO PUT

  14200	001336	010361 	000024 			MOV	R3,F.NRBD(R1)		;AND NUMBER OF BYTES

  14300

  14400					; R1 = FDB ADDRESS, RECORD ADDRESS AND SIZE ALREADY SET IN FDB

  14500

  14600	001342				DOPUT1:	PUT$S	R1			;PUT THE RECORD TO THE FILE

  14700	001350	103401 				BCS	10$			;BRANCH IF ERROR

  14800	001352	000207 				RTS	PC			;RETURN SUCCESSFULLY

  14900	001354	012746 	000000G		10$:	MOV	#ERMSGB,-(SP)		;ERROR MESSAGE

  15000	001360	000167 	000000G			JMP	FCFATL			;FCS FATAL ERROR

  15100					;

  15200					; FIRST PUT TO OUTPUT FILE, SET UP RECORD TYPE AND RETURN

  15300					; PUT FLAGS IN R0

  15400					;

  15500					; INPUT:

  15600					;	R0 = UNSEQUENCE FLAG

  15700					;	R1 = FDB ADDRESS

  15800					; OUTPUT:

  15900					;	R0 = FLAGS

  16000					;		NOSEQF - NO SEQUENCE NUMBERS IF SET

  16100					;		BASICF - BASIC STYLE SEQUENCE #'S IF SET AND SEQUENCING

  16200					;		RMSF   - RSX STYLE FILE IN RSTS

  16300					;

  16400	001364	010046 			SETPUT::MOV	R0,-(SP)		;SAVE UNSEQUENCE FLAG

  16500	001366	012700 	000000C			MOV	#BASICF!1,R0		;SEE IF BASIC MODE SHOULD BE SET

  16600	001372	032767 	000000G	000000G		BIT	#BASIC,SOSFLG		;/BASIC SET?

  16700						.IF	NDF,R$$STS

  16800	001400	001013 				BNE	40$			;BRANCH IF YES

  16900						.IFF

  17000						BEQ	10$			;NOT SET

  17100						MOVB	#R.STRM,F.RTYP(R1)	;/BASIC MODE IS STREAM

SOSREC - RECORD I/O	MACRO M1110  22-AUG-78 05:34  PAGE 6-3

PUT - WRITE A RECORD TO OUTPUT FILE



  17200						BR	40$			;NOW EXIT

  17300					10$:

  17400						.ENDC

  17500

  17600	001402	012700 	000001 			MOV	#1,R0			;NON-ZERO, NO FLAGS SET

  17700						.IF	DF,R$$STS

  17800						BIT	#RMSFIL,SOSFLG		;RSX STYLE FILE OUTPUT?

  17900						BNE	15$			;YES..COMMON CODE WITH RSX

  18000						MOVB	#R.STRM,F.RTYP(R1)	;RSTS STREAM FILE

  18100						BIS	(SP),R0			;COPY UNSEQ FLAG

  18200						BR	40$			;NOW EXIT

  18300					15$:	BIS	#RMSF,R0		;NOTE RSX STYLE FILE

  18400						.ENDC

  18500	001406	032716 	000000G			BIT	#NOSEQF,(SP)		;STRIP SEQUENCE NUMBERS?

  18600	001412	001004 				BNE	20$			;BRANCH IF YES

  18700	001414	112761 	000003 	000000 		MOVB	#R.SEQ,F.RTYP(R1)	;NO. SEQUENCED RECORD TYPE

  18800	001422	000402 				BR	40$

  18900	001424	052700 	000000G		20$:	BIS	#NOSEQF,R0		;STRIP SEQUENCE NUMBERS

  19000	001430	005726 			40$:	TST	(SP)+			;CLEAN OFF THE STACK

  19100	001432	000207 				RTS	PC			;AND RETURN

  19200

  19300

  19400		000001 				.END

SOSREC - RECORD I/O	MACRO M1110  22-AUG-78 05:34  PAGE 6-4

SYMBOL TABLE



BASIC = ****** GX	FF.RWF= 000006   	F.UNIT= 000136   	IE.NBF= 177731   	IS.TMO= 000002

BASICF= ****** GX	FF.SPC= 000004   	F.URBD= 000020   	IE.NBK= 177727   	NB.DEV= 000200

CH.AND= 000001   	FO.APD= 000106   	F.VBN = 000064   	IE.NDR= 177670   	NB.DIR= 000100

CNVDEC= ****** GX	FO.MFY= 000002   	F.VBSZ= 000060   	IE.NFI= 177704   	NB.NAM= 000004

DOGET   000626R     002	FO.RD = 000001   	GET     000000RG    002	IE.NFW= 177673   	NB.SD1= 000400

DOPUT   001332R     002	FO.UPD= 000006   	GSTRM   000400R     002	IE.NLK= 177661   	NB.SD2= 001000

DOPUT0  001302R     002	FO.WRT= 000016   	IE.ABO= 177761   	IE.NLN= 177733   	NB.SNM= 000040

DOPUT1  001342R     002	F.ACTL= 000076   	IE.ALC= 177654   	IE.NNC= 177663   	NB.STP= 000020

ERMSGB= ****** GX	F.ALOC= 000040   	IE.ALN= 177736   	IE.NNL= 177662   	NB.SVR= 000010

FA.APD= 000100   	F.BBFS= 000062   	IE.AST= 177660   	IE.NNN= 177674   	NB.TYP= 000002

FA.CRE= 000010   	F.BDB = 000070   	IE.BAD= 177777   	IE.NOD= 177751   	NB.VER= 000001

FA.DLK= 001000   	F.BGBC= 000057   	IE.BBE= 177710   	IE.NSF= 177746   	NOSEQF= ****** GX

FA.ENB= 100000   	F.BKDN= 000026   	IE.BCC= 177676   	IE.NST= 177660   	N.DID = 000024

FA.EXC= 002000   	F.BKDS= 000020   	IE.BDI= 177714   	IE.OFL= 177677   	N.DVNM= 000032

FA.EXT= 000004   	F.BKEF= 000050   	IE.BDR= 177716   	IE.ONP= 177773   	N.FID = 000000

FA.NSP= 000100   	F.BKP1= 000051   	IE.BDV= 177711   	IE.OVR= 177756   	N.FNAM= 000006

FA.POS= 010000   	F.BKST= 000024   	IE.BHD= 177700   	IE.PES= 177655   	N.FTYP= 000014

FA.RD = 000001   	F.BKVB= 000064   	IE.BLB= 177672   	IE.PRI= 177760   	N.FVER= 000016

FA.RWD= 004000   	F.CHR = 000075   	IE.BLK= 177754   	IE.RAC= 177724   	N.NEXT= 000022

FA.SEQ= 040000   	F.CNTG= 000034   	IE.BNM= 177712   	IE.RAT= 177723   	N.STAT= 000020

FA.SHR= 000040   	F.DFNB= 000046   	IE.BTF= 177664   	IE.RBG= 177730   	N.UNIT= 000034

FA.TMP= 000020   	F.DSPT= 000044   	IE.BTP= 177725   	IE.RCN= 177722   	PAR$$$= 000001

FA.WCK= 020000   	F.DVNM= 000134   	IE.BVR= 177701   	IE.RER= 177740   	PUT     001034RG    002

FA.WRT= 000002   	F.EFBK= 000010   	IE.BYT= 177755   	IE.RNM= 177715   	PUTLS1  001104RG    002

FCFATL= ****** GX	F.EFN = 000050   	IE.CKS= 177742   	IE.RSU= 177757   	REQCPY= ****** GX

FD.BLK= 000010   	F.EOBB= 000032   	IE.CLO= 177732   	IE.SNC= 177735   	RONLY$= 000001

FD.CCL= 000002   	F.ERR = 000052   	IE.CNR= 177667   	IE.SPC= 177772   	R$$EIS= 000001

FD.COM= 020000   	F.FACC= 000043   	IE.CON= 177752   	IE.SQC= 177734   	R$$SHR= 000001

FD.CR = 000002   	F.FFBY= 000014   	IE.DAA= 177770   	IE.SRE= 177762   	R.FIX = 000001

FD.DIR= 000010   	F.FNAM= 000110   	IE.DAO= 177763   	IE.STK= 177706   	R.SEQ = 000003

FD.FTN= 000001   	F.FNB = 000102   	IE.DFU= 177750   	IE.TMM= 177671   	R.VAR = 000002

FD.F11= 040000   	F.FTYP= 000116   	IE.DNA= 177771   	IE.TMO= 177666   	SEQBAS= ****** GX

FD.INS= 000010   	F.FVER= 000120   	IE.DNR= 177775   	IE.ULK= 177653   	SETPUT  001364RG    002

FD.ISP= 002000   	F.HIBK= 000004   	IE.DUN= 177767   	IE.VER= 177774   	SOSFLG= ****** GX

FD.MNT= 100000   	F.LUN = 000042   	IE.DUP= 177707   	IE.WAC= 177743   	STRMIN= ****** GX

FD.OSP= 004000   	F.MBCT= 000054   	IE.EOF= 177766   	IE.WAT= 177741   	SVSTRM= ****** GX

FD.PLC= 000004   	F.MBC1= 000055   	IE.EOT= 177702   	IE.WCK= 177652   	S.FATT= 000016

FD.PRN= 000004   	F.MBFG= 000056   	IE.EOV= 177765   	IE.WER= 177737   	S.FDB = 000140

FD.PSE= 010000   	F.NRBD= 000024   	IE.EXP= 177665   	IE.WLK= 177764   	S.FNAM= 000006

FD.RAH= 000001   	F.NREC= 000030   	IE.FEX= 177717   	IE.2DV= 177720   	S.FNB = 000036

FD.RAN= 000002   	F.OVBS= 000030   	IE.FHE= 177705   	IS.BV = 000005   	S.FNBW= 000017

FD.REC= 000001   	F.RACC= 000016   	IE.FLN= 177657   	IS.CC = 001401   	S.FNTY= 000004

FD.RWM= 000001   	F.RATT= 000001   	IE.FOP= 177713   	IS.CR = 006401   	S.FTYP= 000002

FD.SDI= 000020   	F.RCNM= 000034   	IE.HFU= 177744   	IS.EOT= 002001   	S.NFEN= 000020

FD.SQD= 000040   	F.RCTL= 000017   	IE.IES= 177656   	IS.ESC= 015401   	$SAV3 = ****** GX

FD.TTY= 000004   	F.RSIZ= 000002   	IE.IFC= 177776   	IS.ESQ= 115401   	$SAV5 = ****** GX

FD.WBH= 000002   	F.RTYP= 000000   	IE.IFU= 177747   	IS.PES= 100001   	$$MSG = 000000

FFREC = ****** GX	F.SEQN= 000100   	IE.ILL= 177726   	IS.PND= 000000   	.GETSQ= ****** G

FF.CHR= 000005   	F.SPDV= 000072   	IE.ISQ= 177703   	IS.RDD= 000002   	.PUTSQ= ****** G

FF.NV = 000003   	F.SPUN= 000074   	IE.LCK= 177745   	IS.SUC= 000001   	...GBL= 000000

FF.POE= 000002   	F.STBK= 000036   	IE.MOD= 177753   	IS.TAB= 004401   	...TPC= 000140

FF.RWD= 000001



. ABS.	000000	   000

      	000000	   001

CODE  	001434	   002

ERRORS DETECTED:  0

SOSREC - RECORD I/O	MACRO M1110  22-AUG-78 05:34  PAGE 6-5

SYMBOL TABLE





VIRTUAL MEMORY USED:  5044 WORDS  ( 20 PAGES)

DYNAMIC MEMORY:  5940 WORDS  ( 22 PAGES)

ELAPSED TIME:  00:00:16

OBJ$:SOSREC,LIS$:SOSREC/-SP/NL:TOC=SRC$:PREFIX,SOSREC

