File: CHARS.RA of Tape: Sources/Fortran/os8-f4-3
(Source file text) 

/CHARS: CPUT, CGET, CPUT3, CGET3(A,I,R)
/
/
/ VERSION 40A 24-MAY-80 WVDM
/
/
/CALL CGET (STRING,N,CHAR)
/CALL CPUT (STRING,N,CHAR)	STRING=	ADDRESS OF A6 STRING
/CALL CGET3(STRING,N,CHAR)
/CALL CPUT3(STRING,N,CHAR)	STRING=	ADDRESS OF A3 STRING
/				N=	POSITION IN STRING
/				CHAR=	I/O CHARACTER
/
	BSW=	7002

	SECT	CHARS
	ENTRY	CGET
	ENTRY	CPUT
	ENTRY	CGET3
	ENTRY	CPUT3
	EXTERN	#ARGER
CHERR,	TRAP4	#ARGER
	TEXT	+CHARS +
CHARXR,	SETX	XRCHAR
	SETB	BPCHAR
BPCHAR,	F 0.
XRCHAR,	F 0.
FROM,	F 0.
NCHAR,	F 0.
	ORG	10*3+BPCHAR
	FNOP
	JA	CHARXR
	0
CHARTN,	JA	.
	BASE	0
SETUP,	JA	.
	STARTD
	FLDA	10*3
	FSTA	CHARTN
	FLDA	0
	SETX	XRCHAR
	SETB	BPCHAR
	BASE	BPCHAR
	LDX	1,1
	FSTA	BPCHAR	/ARGS SAVED IN BPCHAR
	FLDA%	BPCHAR,1
	FSTA#	STR	/STR IN SECT8 PIECE
	FLDA%	BPCHAR,1+
	FSTA	NCHAR
	FLDA%	BPCHAR,1+
	FSTA	FROM	/ADDR OF CHAR
	SETX	XRN	/XR'S IN SECT8
	STARTF
	FLDA%	NCHAR
	JEQ	CHERR	/POSITION 0 BAD
	ATX	0	/POSITION IN XR 0
	FLDA%	FROM
	ATX	1	/CHAR IN XR 1
	FCLA
	JA	SETUP

CGET,	JSA	SETUP
	TRAP4	CGET86
	JA	GETO

CGET3,	JSA	SETUP
	TRAP4	CGET83
GETO,	XTA	1	/CHAR IN XR 1
	FSTA%	FROM	/TO 3 WORDS
	JA	CHARTN

CPUT,	JSA	SETUP
	TRAP4	CPUT86
	JA	CHARTN

CPUT3,	JSA	SETUP
	TRAP4	CPUT83
	JA	CHARTN
	SECT8	CHAR		/ALL IN 1 PAGE
CGET86,	0
	CLL CML		/TELL A6
	JMS	FLDRTN
	TAD%	STR+1
	ISZ	RIGHT	/RIGHT OR LEFT?
	BSW		/LEFT
	AND	P77
	DCA	XRFR	/PASS TO FPP
	CDF CIF 0
	JMP%	CGET86

CPUT86,	0
	CLL CML
	JMS	FLDRTN
	TAD	RIGHT	/RIGHT=7777, LEFT=0
	AND	P7700
	SNA
	TAD	P77	/MAKE CORRECT MASK FOR KEEP
	AND%	STR+1	/PICK-OUT KEEP
	DCA	PFLD	/SAVE
	TAD	XRFR	/GET CHAR
	AND	P77	/6 BITS
	ISZ	RIGHT	/POSITION
	BSW
	TAD	PFLD	/ADD KEEP
	DCA%	STR+1
	CIF CDF 0
	JMP%	CPUT86
CGET83,	0
	CLL		/SIGNAL A3
	JMS	FLDRTN
	TAD%	STR+1
	AND	P377
	DCA	XRFR	/PASS TO FPP
	TAD	XRFR	/TEST FOR 200 NULL
	TAD	M200
	SNA CLA
	DCA	XRFR	/GIVE BACK 0 IF NULL
	CDF CIF 0
	JMP%	CGET83

CPUT83,	0
	CLL
	JMS	FLDRTN
	TAD	XRFR	/GET CHAR
	AND	P377	/8 BITS
	SNA		/TEST FOR ZERO
	TAD	P200	/SET NULL IF ZERO
	DCA%	STR+1
	CIF CDF 0
	JMP%	CPUT83
FLDRTN,	0
	CLA CMA
	DCA	RIGHT	/INIT R/L SWITCH
	CLA CMA		/FORTRAN STARTS AT 1
	TAD	XRN	/POSITION 0-4095
	SNL		/L=1 NOW IS A3
	CLL RAR		/FORT EVEN IN LINK= RIGHT
	SNL
	ISZ	RIGHT	/CLEAR RIGHT IF LEFT
	CLL		/SKIP OK
	TAD	STR+1	/ADD START OF STR
	DCA	STR+1	/SAVE WORD POSITION
	RAL		/OVERFLOW= NEXT FIELD
	TAD	STR
	AND	P7
	CLL RAL
	RTL
	TAD	CDFINS
	DCA	PFLD	/STR FLD
PFLD,	HLT
	JMP%	FLDRTN

P7700,	7700
P377,	377
P200,	200
P77,	77
P7,	7
M200,	-200
RIGHT,	7777
CDFINS,	CDF 0
STR,	0
	0
XRN,	0
XRFR,	0
	END