Google
 

Trailing-Edge - PDP-10 Archives - BB-H506D-SM_1983 - cobol/source/cdd.mac
There are 9 other files named cdd.mac in the archive. Click here to see a list.
TITLE	CDD FOR LIBOL
SUBTTL	CONVERT FROM DISPLAY TO DISPLAY	/ACK



;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, 1981 BY DIGITAL EQUIPMENT CORPORATION

;REVISION HISTORY:

;V10 *****

;	15-DEC-74	/ACK	CREATION.

;	5/10/75		/DBT	ADD BIS
;*****

	SEARCH	LBLPRM		;DEFINE PARAMETERS.
	%%LBLP==:%%LBLP
	EBCMP.==:EBCMP.
	BIS==:BIS

	EXTERN	EASTB.		;FORCE EASTBL TO BE LOADED.

	HISEG

COMMENT	\

	THIS ROUTINE CONVERTS A STRING FROM ONE FLAVOR OF DISPLAY TO ANOTHER.

CALL:
	MOVE	16,PARAMETER ADDRESS
	PUSHJ	17,C.D6D7/C.D6D9/C.D7D6/C.D7D9/C.D9D6/C.D9D7

PARAMETERS:
	WORD 1:
		BYTE POINTER FOR THE INPUT STRING.
	WORD 2:
		BITS	0-5	BYTE POINTER RESIDUE FOR THE OUTPUT STRING.
		BIT	6	IGNORED (1 IF THE OUTPUT FIELD IS SIGNED.)
		BITS	7-17	THE SIZE OF BOTH FIELDS.
		BITS	18-35	ADDRESS OF THE FIRST BYTE OF THE OUTPUT FIELD.

RETURNS:
	CALL+1	ALWAYS.

REGISTERS USED:
	CPTR, JAC, CH, IPTR, OPTR, CNT

\
	ENTRY	C.D6D7		;TO CONVERT SIXBIT TO ASCII.
	ENTRY	C.D7D6		;TO CONVERT ASCII TO SIXBIT.
IFN EBCMP.,<
	ENTRY	C.D6D9		;TO CONVERT SIXBIT TO EBCIDC.
	ENTRY	C.D7D9		;TO CONVERT ASCII TO EBCDIC.
	ENTRY	C.D9D6		;TO CONVERT EBCDIC TO SIXBIT.
	ENTRY	C.D9D7		;TO CONVERT EBCDIC TO ASCII.
>

IFE	BIS,<

	EXTERN	SET2.		;ROUTINE TO PICK UP THE PARAMETERS.
	EXTERN	RET.1		;RETURNS TO CALL+1.

;THE FOLLOWING ARE BYTE POINTERS WHICH CONVERT THE CHARACTER IN CH
; FROM ONE FORM OF DISPLAY TO ANOTHER.

;		NAME			FROM		TO

	EXTERN	PTR67.		;	SIXBIT		ASCII
	EXTERN	PTR76.		;	ASCII		SIXBIT
IFN EBCMP.,<
	EXTERN	PTR69.		;	SIXBIT		EBCDIC
	EXTERN	PTR79.		;	ASCII		EBCDIC
	EXTERN	PTR96.		;	EBCDIC		SIXBIT
	EXTERN	PTR97.		;	EBCDIC		ASCII
>

C.D6D7:	SKIPA	CPTR,	PTR67.		;ENTER HERE TO CONVERT SIXBIT TO ASCII,
C.D7D6:	MOVE	CPTR,	PTR76.		; HERE TO CONVERT ASCII TO SIXBIT,
IFN	EBCMP.,<
	JRST		CDD
C.D6D9:	SKIPA	CPTR,	PTR69.		; HERE TO CONVERT SIXBIT TO EBCDIC,
C.D7D9:	MOVE	CPTR,	PTR79.		; HERE TO CONVERT ASCII TO EBCDIC,
	JRST		CDD
C.D9D6:	SKIPA	CPTR,	PTR96.		; HERE TO CONVERT EBCDIC TO SIXBIT AND
C.D9D7:	MOVE	CPTR,	PTR97.		; HERE TO CONVERT EBCDIC TO ASCII.
>
T2==7
T3==10

CDD:	JSP	JAC,	SET2.		;GO PICK UP THE PARAMETERS.
	EXP		RET.1		;RETURN TO CALL+1 THROUGH HERE IF
					; THE STRING LENGTH IS 0.
	HLRZ	CH,	CPTR		;PUT THE OUTPUT BYTE SIZE IN 
	ANDI	CH,	(POINT ^O77,0,35)	; THE OUTPUT POINTER.
	TLO	OPTR,	(CH)
	TLNE	16,	400000		;DEPENDING MOVE ?
	 JRST		DEPCDD		;YES-- DO SPECIAL WAY

;CONVERSION ROUTINE:

CDD1:	ILDB	CH,	IPTR		;GET A CHAR.
	LDB	CH,	CPTR		;CONVERT IT.
	IDPB	CH,	OPTR		;STASH IT.
	SOJG	CNT,	CDD1		;LOOP IF THER ARE MORE CHARS.
	POPJ	PP,			;OTHERWISE RETURN.

;HERE FOR DEPENDING MOVE
DEPCDD:	HLRZ	T2,16		;T2= # CHARS IN DEST.
	TRZ	T2,400000

;MOVE THE MINIMUM OF CNT AND T2 CHARS. IF DEST LEN IS GREATER, FILL WITH SPACES

	MOVEI	T3,(CNT)
	CAILE	CNT,(T2)
	MOVE	CNT,T2

	ILDB	CH,IPTR		;GET A CHAR
	LDB	CH,CPTR		;CONVERT IT
	IDPB	CH,OPTR		;STASH IT
	SOJG	CNT,.-3		;LOOP

;SPACE FILL IF NECESSARY

	CAIG	T2,(T3)		;MORE CHARS IN DEST.?
	 POPJ	PP,		;NO, DONE
	SUB	T2,T3		;T2:= # SPACES TO PUT IN
	LDB	T3,[POINT 6,OPTR,11] ;GET OUTPUT BYTE SIZE
	SUBI	T3,6
	MOVE	CH,[0
		40
		0
		100](T3)	;GET PROPER OUTPUT SPACE
	IDPB	CH,OPTR		;STORE IT
	SOJG	T2,.-1
	POPJ	PP,		;DONE SPACE FILL...RETURN

>		;END NON-BIS
IFN	BIS,<

	EXTERN	BSET2.		;ROUTINE TO PICK UP THE PARAMETERS.
	EXTERN	RET.1		;RETURNS TO CALL+1.

C.D7D6:	JSP	BISCH,	CDD		; HERE TO CONVERT ASCII TO SIXBIT,
C.D9D6:	JSP	BISCH,	CDD		; HERE TO CONVERT EBCDIC TO SIXBIT AND
C.D6D7:	JSP	BISCH,	CDD		;ENTER HERE TO CONVERT SIXBIT TO ASCII,
C.D9D7:	JSP	BISCH,	CDD		; HERE TO CONVERT EBCDIC TO ASCII.
	Z
	Z
C.D6D9:	JSP	BISCH,	CDD		; HERE TO CONVERT SIXBIT TO EBCDIC,
C.D7D9:	JSP	BISCH,	CDD		; HERE TO CONVERT ASCII TO EBCDIC,

CDD:
	SUBI	BISCH,C.D7D6-13	;COMPUTE INDEX
	JSP	JAC,	BSET2.		;GO PICK UP THE PARAMETERS.
	EXP		RET.1		;RETURN TO CALL+1 THROUGH HERE IF
					; THE STRING LENGTH IS 0.
	MOVE	BIST0,	C.DTBL-14(BISCH)	;GET INSTRUCTION
	LSH	BISCH,-1		;GET BYTE SIZE
	DPB	BISCH,BPTOBS##		;STORE IN OUTPUT POINTER
	TLO	B.FLAG,BFLG.S		;TURN SIGNIFICANCE ON
	EXTEND	B.FLAG,BIST0		;GO
	JRST	ERROR
	POPJ	PP,			;DONE

C.DTBL:
	MOVST	ALP.76##		;7 TO 6
	MOVST	ALP.96##		;9 TO 6
	MOVSO	+40			;6 TO 7
	MOVST	ALP.97##		;9 TO 7
	0
	0
	MOVST	ALP.69##		;6 TO 9
	MOVST	ALP.79##		;7 TO 9


ERROR:	OUTSTR	[ASCIZ	'?LIBOL CDD.N error
']
	POPJ	PP,


>		;END OF BIS

	END