Google
 

Trailing-Edge - PDP-10 Archives - BB-4148F-BM_1984 - sources/dmlio.mac
There are 22 other files named dmlio.mac in the archive. Click here to see a list.
	TITLE DMLIO

	SEARCH COPYRT
	SALL

;     This software is furnished under a license and may only be used
;       or copied in accordance with the terms of such license.

COPYRIGHT (C) 1974, 1984 BY DIGITAL EQUIPMENT COPRORATION

; *******************************************************************
; NOTE!!! This module is shared by the COBOL and DBMS products. Any
; modification by either group should be immediately reflected in the
; copy of the other group.
; *******************************************************************

; ****
;Append TOPS20==0 to beginning of module for COBOL68/74-12B
; ****


	SEARCH GENDCL,DMLSYM,STRING
	SEGMEN

	IFNDEF $COB,<$COB==0>

	IFE $COB,<PRINTX <ASSEMBLING FOR FORTRAN>>
	IFN $COB,<PRINTX <ASSEMBLING FOR COBOL>>

	IFN $COB,<SEARCH P>		;GET TOPS-10/20 DEFINITION

	IFNDEF TOPS10,<TOPS10==1>
	IFNDEF TOPS20,<TOPS20==0>

	.COPYRIGHT		;Put standard copyright statement in REL file


	ENTRY OBJOUT,OWRITE,VOKOUT,VWRITE,BUFINI,OBJFLU,CWRITE


	REG(CHANPT,4)

	IFN $COB,<			;BECAUSE OF IMPURE.MAC
	  DEFINE DATA(NAM,LEN)<EXTERN NAM>
	>

	DATA(OBJAREA,^D14)		;STORAGE FOR .FOR LINES
	DATA(VOKAREA,^D14)
	DATA(TEMPBP,2)			;USED IN WRITE
	DATA(BUF.CP,2)			;ARG TO CHKSTR IN WRITE
	DATA(LINCHK,2)			;DITTO FOR OBJOUT
	DATA(NLEFT)			;FOR CHKSTR, IN OBJOUT
	DATA(NN)
	DATA(BUF.CN)			;DITTO FOR WRITE
	DATA(B.OR.L)			;BUF OR LINE
	DATA(ARG.T1)			;ONLY HISEG ARG-LISTS

	IFE $COB,<
OBJPTR::	POINT 7,OBJAREA
	XWD	LOUTMAX,0
VOKPTR::	POINT	7,VOKAREA
	XWD	LOUTMAX,0


	0
ARGWRI:
	0				;FILLED IN AT RUNTIME
	[APPEND]
	LINCHK
	NLEFT
	NN
WRIFILL:				;8 ARGS
	0
	0
	0
	0
	0
	0
	0
	0
	>
	SUBTTL CONSTANT DATA

$FUNCT	(DMLIO)				;FORCE HIGH SEG

	IFE $COB,<
ENDCOM:
	STRIPT	(<)>)			;[1115] EOS, NOT EOS+EOL
CONTIN:
	STRIPT	(<
	1>)
NEWLIN:
	STRIPT	(<
	>)
	>
	IFN $COB,<
ENDCOM:
	STRIPT	(<.>)			;[1115] EOS, NOT EOS+EOL

CONTIN:
	STRIPT	(<
-	>)
NEWLIN:
	STRIPT	(<
	>)
	>
ENDLIN:					;[1115] SEPERATE END-OF-LINE
	STRIPT	(<
>)					;[1115]
	SUBTTL VARIOUS I/O ROUTINES

$FUNCT	(OBJOUT)			;VARIABLE NUMBER
	MOVEI	R1,RELCHAN
	SETOM	B.OR.L			;SET LINE
	COPI	ARGWRI,OBJPTR
	JRST	LINOUT
$FUNCT	(OWRITE)
	MOVEI	R1,RELCHAN
	SETZM	B.OR.L
	COPI	ARGWRI,BUFPTR(R1)
	JRST	LINOUT
$FUNCT	(VOKOUT)
	MOVEI	R1,VOKCHAN
	SETOM	B.OR.L			;SET LINE
	COPI	ARGWRI,VOKPTR
	JRST	LINOUT
$FUNCT	(VWRITE)
	MOVEI	R1,VOKCHAN
	SETZM	B.OR.L
	COPI	ARGWRI,BUFPTR(R1)
;	JRST	LINOUT

LINOUT:
	SAVE	<CHANPT>
	MOVE	CHANPT,R1
	MOVEI	R1,WRIFILL
	SETZM	NLEFT			;INIT FOR CHKSTR
	SETZM	NN			;FOR ARGCOPY
	YOYO	ARGCOPY,<WRIFILL,NN,AP>
WRI.LP:
	MOVEI	AP,ARGWRIT
	PUSHJ	P,CHKSTR##
	JUMPL	R0,IOEND
	SKIPE	B.OR.L			;SKIP SAYS BUFFER
	JRST	[
	MOVE	R1,ARGWRI
	YOYO	STRINGOUT,<CHANPT,ARGWRI>
	MOVEI	R1,CONTIN
	YOYO	STRINGOUT,<CHANPT,R1>
	MOVE	R1,ARGWRI
	HLLZS	1(R1)			;RESET LENGTH TO ZERO
	JRST	WRI.LP]
	YOYO	BUFOUT			;BUFOUT RESETS STRING PTR
	JRST	WRI.LP

$FUNCT	BUFINI,<CHAN>
	SAVE	<CHANPT>
	MOVEI	CHANPT,@CHAN(AP)
	YOYO	BUFOUT			;FRIST SETS UP BUFHDR
	JRST	IOEND

$FUNCT	OBJFLUSH

	FUNCT	OBJOUT,<ENDCOM>		;[1115] BUFFER END OF COMMAND
	FUNCT	CWRITE,<RELCHAN,OBJPTR>	;PUT AT PARTIAL  LINE
	FUNCT	CWRITE,<RELCHAN,ENDLIN>	;[1115] AND TERMINATE LINE

	HLLZS	OBJPTR+1		;PRESERVE MAX, SET LEN DOWN
	RETURN

$FUNCT	OBJCNTN				;FIX COBOL CONTINUATION LINES

	FUNCT	CWRITE,<RELCHAN,OBJPTR>	;PUT AT PARTIAL  LINE
	FUNCT	CWRITE,<RELCHAN,NEWLIN>	;ENDCOM IS <END OF CALL><CRLF>
					; SO OBJOUT CAN'T BE
					;USED FOR DUMPING ARBITRARY STATS

	HLLZS	OBJPTR+1		;PRESERVE MAX, SET LEN DOWN
	RETURN

$FUNCT	(CWRITE,<CHAN,OUTBP>)		;AT SOME POINT MUST BE GENERALIZED
	
	SAVE	<CHANPT>
	MOVEI	CHANPT,@CHAN(AP)
	MOVEI	R1,@OUTBP(AP)
	YOYO	STRINGOUT,<CHANPT,OUTBP>
	JRST	IOEND

	;;;;;;;;;;;;;;;;

IOEND:	RESTOR	<CHANPT>
	RETURN

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

$YOYO	(STRINGOUT,<CHANPT,OUTBP>)

	DCOPY	TEMPBP,0(R1)		;TO PASS ON
	SETZM	BUF.CN
	COPI	ARG.T1,BUFPTR(CHANPT)
BUF.LP:
	FUNCT	CHKSTR,<@ARG.T1,[APPEND],BUF.CP,BUF.CN,ONE,TEMPBP>
	JUMPL	R0,LEAVE
	YOYO	BUFOUT
	JRST	BUF.LP

$YOYO	BUFOUT

IFE $COB,<				;FORDML CASE
  IFN TOPS10,<
	HRRZ	R0,BUFPTR+1(CHANPT)	;SETUP WORD CNT
	IDIVI	R0,5
	SKIPE	R1			;REMAINDER?
	ADDI	R0,1
	MOVE	R1,HDR(CHANPT)
	HRRM	R0,1(R1)
	XCT	OUTINST(CHANPT)
	SKIPA
	HALT				;SHOULD'T HAPPEN
	COPY	BUFPTR(CHANPT),HDR+1(CHANPT)
	HRLZ	R0,HDR+2(CHANPT)	;SET UP MAXIMUM
	MOVEM	R0,BUFPTR+1(CHANPT)
  >;END TOPS10
>;END $COB

IFN $COB,<				;COBOL CASE
	HRRZ	R0,BUFPTR+1(CHANPT)	;SETUP WORD CNT
  IFE TOPS20,<				;12B SAME AS FORDML
	IDIVI	R0,5
	SKIPE	R1			;REMAINDER?
	ADDI	R0,1
	MOVE	R1,HDR(CHANPT)
	HRRM	R0,1(R1)
  >;END TOPS20
	XCT	OUTINST(CHANPT)
  IFE TOPS20,<				;12B SAME AS FORDML
	SKIPA
	HALT				;SHOULD'T HAPPEN
  >;END TOPS20
	COPY	BUFPTR(CHANPT),HDR+1(CHANPT)
	HRLZ	R0,HDR+2(CHANPT)	;SET UP MAXIMUM
	MOVEM	R0,BUFPTR+1(CHANPT)
>;END $COB
	RETURN

$YOYO	ARGCOPY,<R1,NN,AP>

	HRL	R1,AP			;FOR BLT
	HLRE	AP,-1(AP)
	MOVMS	AP
	ADDM	AP,NN
	ADDI	AP,0(R1)
	BLT	R1,-1(AP)
	RETURN

	END