UNIVERSAL CHREQV FOR COBOL/LIBOL/RPGII V10. SUBTTL CHARACTER SET EQUIVALENCES 23-DEC-74 /ACK ;USED TO BE ;COPYRIGHT 1974, 1975, DIGITAL EQUIPMENT CORP., MAYNARD MASS. ;BUT MODIFIED TO RPGII VERSION BY BOB CURRIER ;REVISION HISTORY: ;V10 ***** ; 23-DEC-74 /ACK CREATION. ;***** .DIRECTIVE .NOBIN SEARCH RPGPRM ;DEFINE ASSEMBLY PARAMETERS. %%LBLP==:%%LBLP IFNDEF CKRDF., ;DEFAULT IS DON'T PRINT A ; MESSAGE IF WE TRY TO ; REDEFINE SOMETHING. SALL ;DON'T EXPAND THE MACROS. COMMENT \ THIS ROUTINE DEFINES THE EQUIVALENCES BETWEEN THE ASCII, SIXBIT AND EBCDIC CHARACTER SETS. IT DOES THIS BY DEFINING A SET OF SYMBOLS FOR EACH CHARACTER SET. THE FORM OF A SYMBOL IS: % WHERE: LETTER 1 INDICATES THE CHARACTER SET TO WHICH THIS SYMBOL BELONGS. LETTER 2 INDICATES THE CHARACTER SET TO WHICH THE VALUE OF THIS SYMBOL BELONGS. NUMBER INDICATES THE PARTICULAR CHARACTER TO WHICH THIS SYMBOL BELONGS. THE VALUE OF THE SYMBOL IS THE CHARACTER, IN THE CHARACTER SET INDICATED BY , TO WHICH THE CHARACTER REPRESENTED BY THE SYMBOL IS EQUIVALENT. THE CHARACTER SETS AND THE LETTERS USED TO REPRESENT THEM ARE: SIXBIT S ASCII A EBCDIC E EXAMPLES: SYMBOL VALUE EXPLANATION SA%20 60 SIXBIT 20 ("0") IS EQUIVALENT TO ASCII 60 ("0"). SE%20 360 SIXBIT 20 ("0") IS EQUIVALENT TO EBCDIC 360 ("0"). AS%60 20 ASCII 60 ("0") IS EQUIVALENT TO SIXBIT 20 ("0"). ES%360 20 EBCDIC 360 ("0") IS EQUIVALENT TO SIXBIT 20 ("0"). IF A SYMBOL IS ASSIGNED A DEFAULT VALUE BECAUSE IT HAS NO EQUIVALENT IN THE CHARACTER SET, THE VALUE WILL HAVE BIT 18 SET TO 1. \ SUBTTL MACROS USED TO DEFINE THE EQUIVALENCES. ;;NAME: SET ;;PURPOSE: DEFINE ALL MACROS USED FOR EQUATING SYMBOLS. ;;CALL: SET ,,, DEFINE SET (L1, L2, D1, D2)< ;;NAME: E ;;PURPOSE: EQUATE TWO SYMBOLS TO THEIR VALUES. ;;CALL: E , DEFINE E (V1, V2)< V1A==V1 V2A==V2 %E1 \V1A,\V2A >;; END OF DEFINITION OF E. DEFINE %E1 (V1, V2)< IFDEF L1''L2'%'V1,< IFN L1''L2'%'V1-V2,< %RDF L1''L2'%'V1',\L1''L2'%'V1',\V2>> IFNDEF L1''L2'%'V1, IFDEF L2''L1'%'V2,< IFN L2''L1'%'V2-V1,< %RDF L2''L1'%'V2',\L2''L1'%'V2',\V1>> IFNDEF L2''L1'%'V2, >;; END OF DEFINITION OF %E1. ;;NAME: D ;;PURPOSE: DEFAULT A RANGE OF SYMBOLS. ;;CALL: D , DEFINE D'L1''L2 (F, L)< %%T1==F REPEAT L-F+1,<%D'L1''L2 \%%T1,\D1 %%T1==%%T1+1> >;; END OF DEFINITION OF D'L1''L2'. DEFINE %D'L1''L2 (T1,T2)< IFNDEF L1''L2'%'T1, >;; END OF DEFINITION OF %D'L1''L2'. ;;NAME: D ;;PURPOSE: DEFAULT A RANGE OF SYMBOLS. ;;CALL: D , DEFINE D'L2''L1 (F, L)< %%T1==F REPEAT L-F+1,<%D'L2''L1 \%%T1,\D2 %%T1==%%T1+1> >;; END OF DEFINITION OF D'L2''L1. DEFINE %D'L2''L1 (T1,T2)< IFNDEF L2''L1'%'T1, >;; END OF DEFINITION OF %D'L2''L1. ;;NAME: DS ;;PURPOSE: DEFAULT A SINGLE SYMBOL TO A NON-STANDARD DEFAULT CHAR. ;;CALL: DS , DEFINE DS'L1''L2 (V, C)< %D'L1''L2 \V,\C >;;END OF DEFINITION OF DS'L1''L2 ;;NAME: DS ;;PURPOSE: DEFAULT A SINGLE SYMBOL TO A NON-STANDARD DEFAULT CHAR. ;;CALL: DS , DEFINE DS'L2''L1 (V, C)< %D'L2''L1 \V,\C >;;END OF DEFINITION OF DS'L2''L1'. ;;NAME: C ;;PURPOSE: CHECK THAT ALL SYMBOLS IN A CHARACTER SET ARE DEFINED. ;;CALL: C DEFINE C'L1''L2 < %CHK L1,L2 C'L1''L2 >;;END OF DEFINITION OF C'L1''L2'. ;;NAME: C ;;PURPOSE CHECK THAT ALL SYMBOLS IN A CHARACTER SET ARE DEFINED. ;;CALL: C DEFINE C'L2''L1 < %CHK L2,L1 C'L2''L1 >;;END OF DEFINITION OF C'L2''L1'. >;;END OF DEFINITION OF SET. ;MISCELLANIOUS MACROS USED BY SET: DEFINE %RDF (SYMBOL, V1, V2)< IFN CKRDF.,< PRINTX %ATTEMPT TO REDEFINE SYMBOL FROM V1 TO V2'. >>;END OF DEFINITION OF %RDF. DEFINE %CHK (L1, L2)< DEFINE C'L1''L2 < %%T1==0 IFIDN ,<%%T1==77> IFIDN ,<%%T1==177> IFIDN ,<%%T1==377> IFE %%T1,< PRINTX ?BAD CALL TO MACRO "SET". PASS2 END >;;END OF IFE %%T1. %%T2==0 REPEAT %%T1+1,<%C'L1''L2 \%%T2 %%T2==%%T2+1> >;;END OF DEFINITION OF C'L1''L2'. DEFINE %C'L1''L2 (VALUE)< IFNDEF L1''L2'%'VALUE,< PRINTX % L1''L2'%'VALUE IS NOT DEFINED. >>;;END OF DEFINITION OF %C'L1''L2'. >;;END OF DEFINITION OF %CHK. SUBTTL TABLE OF ASCII/EBCDIC EQUIVALENCES IF1,< ;ONLY DEFINE THE SYMBOLS ONCE. SET A,E,0,134 ;CONTROL CHARACTERS ; ASCII,EBCDIC ASCII EBCDIC E 000,000 ; E 001,001 ; E 002,002 ; E 003,003 ; E 004,067 ; E 005,055 ; E 006,056 ; E 007,057 ; E 010,026 ; E 011,005 ; E 012,045 ; E 013,013 ; E 014,014 ; E 015,025 ; E 016,006 ; E 017,066 ; E 020,044 ; E 021,024 ; E 022,064 ; E 023,065 ; E 024,004 ; E 025,075 ; E 026,027 ; E 027,046 ; E 030,052 ; E 031,031 ; E 032,032 ; E 033,047 ;
	E	034,023		;			
	E	035,041		;			
	E	036,040		;			
	E	037,042		;			
;GRAPHICS:
;	      ASCII,EBCDIC		GRAPHIC
	E	040,100		;	
	E	041,132		;	!
	E	042,177		;	"
	E	043,173		;	#
	E	044,133		;	$
	E	045,154		;	%
	E	046,120		;	&
	E	047,175		;	'
	E	050,115		;	(
	E	051,135		;	)
	E	052,134		;	*
	E	053,116		;	+
	E	054,153		;	,
	E	055,140		;	-
	E	056,113		;	.
	E	057,141		;	/
	E	060,360		;	0
	E	061,361		;	1
	E	062,362		;	2
	E	063,363		;	3
	E	064,364		;	4
	E	065,365		;	5
	E	066,366		;	6
	E	067,367		;	7
	E	070,370		;	8
	E	071,371		;	9
	E	072,172		;	:
	E	073,136		;	;
	E	074,114		;	<
	E	075,176		;	=
	E	076,156		;	>
	E	077,157		;	?
;	      ASCII,EBCDIC		GRAPHIC
	E	100,174		;	@
	E	101,301		;	A
	E	102,302		;	B
	E	103,303		;	C
	E	104,304		;	D
	E	105,305		;	E
	E	106,306		;	F
	E	107,307		;	G
	E	110,310		;	H
	E	111,311		;	I
	E	112,321		;	J
	E	113,322		;	K
	E	114,323		;	L
	E	115,324		;	M
	E	116,325		;	N
	E	117,326		;	O
	E	120,327		;	P
	E	121,330		;	Q
	E	122,331		;	R
	E	123,342		;	S
	E	124,343		;	T
	E	125,344		;	U
	E	126,345		;	V
	E	127,346		;	W
	E	130,347		;	X
	E	131,350		;	Y
	E	132,351		;	Z
	E	133,340		;	[	[THIS IS NOT REALLY
				;	  EQUIVALENT, IT IS EBCDIC'S
				;	  "+0".]
	;	134		;	\	[NO EBCDIC EQUIVALENT.]
	E	135,320		;	]	[THIS IS NOT REALLY
				;	  EQUIVALENT, IT IS EBCDIC'S
				;	  "-0".]
	;	136		;	^	[NO EBCDIC EQUIVALENT.]
	E	137,155		;	_
;	      ASCII,EBCDIC		GRAPHIC
	;	140		;	`	[NO EBCIDC EQUIVALENT.]
	E	141,201		;	a
	E	142,202		;	b
	E	143,203		;	c
	E	144,204		;	d
	E	145,205		;	e
	E	146,206		;	f
	E	147,207		;	g
	E	150,210		;	h
	E	151,211		;	i
	E	152,221		;	j
	E	153,222		;	k
	E	154,223		;	l
	E	155,224		;	m
	E	156,225		;	n
	E	157,226		;	o
	E	160,227		;	p
	E	161,230		;	q
	E	162,231		;	r
	E	163,242		;	s
	E	164,243		;	t
	E	165,244		;	u
	E	166,245		;	v
	E	167,246		;	w
	E	170,247		;	x
	E	171,250		;	y
	E	172,251		;	z
	E	173,300		;	{	[THIS IS NOT REALLY
				;	 EQUIVALENT, IT IS EBCIDC'S
				;	 "+0".]
	E	174,117		;	|
	E	175,260		;	}	[THIS IS NOT REALLY
				;	 EQUIVALENT, IT IS EBCIDC'S
				;	 "-0".]
	;	176		;	~	[NO EBCDIC EQUIVALENT.]
	E	177,007		;	
;DEFAULT THE ASCII CHARACTERS WHICH HAVE NO EBCDIC EQUIVALENTS.
;					ASCII		EBCDIC
	DSAE	134,155		;	\		_
	DSAE	136,117		;	^		|
	DSAE	140,174		;	`		@
	DSAE	176,155		;	~		_
;MAKE SURE ALL ASCII CHARS ARE DEFINED.
	CAE
;DEFAULT EBCDIC CHARS WHICH HAVE NO ASCII EQUIVALENT TO "\".
	DEA	0,377
;MAKE SURE ALL EBCDIC CHARS ARE DEFINED.
	CEA
>	;END OF IF1 CONDITIONAL.
	SUBTTL	ASCII/SIXBIT CHARACTER EQUIVALENCES.
IF1,<	;ONLY DEFINE THE SYMBOLS ONCE.
	SET	A,S,74,0
;DEFINE THE NORMAL ASCII TO SIXBIT EQUIVALENCES.
	I==40
	REPEAT 100,<
	E	I,I-40
	I==I+1
>
;EQUATE THE LOWER CASE ASCII LETTERS TO THE UPPER CASE SIXBIT LETTERS.
	I==141
	REPEAT 32,<
	E	I,I-100
	I==I+1
>
;MAKE SURE ALL THE SIXBIT CHARS ARE DEFINED.
	CSA
;DEFAULT ASCII CHARACTERS WHICH HAVE NO SIXBIT EQUIVALENT.
;						ASCII	SIXBIT
	DSAS	11,0			;		
	DSAS	173,73			;	{	[
	DSAS	175,75			;	}	]
	DAS	0,177			; EVERYTHING ELSE BECOMES "\".
;MAKE SURE ALL THE ASCII CHARS ARE DEFINED.
	CAS
>	;END OF IF1 CONDITIONAL.
	SUBTTL	EBCDIC/SIXBIT CHARACTER EQUIVALENCES.
IF1,<	;ONLY DEFINE THE SYMBOLS ONCE.
	SET	E,S,0,0
;DO THIS BY USING EBCDIC TO ASCII AND ASCII TO SIXBIT EQUIVALENCES SO
; THAT WE KEEP THINGS CONSISTANT.
;MACROS:
	DEFINE	A0 (A, B)<
	%A0A==A&777
	%A0B==B&777
	A1	\%A0A,\%A0B
>
	DEFINE	A1 (A, B)<
	%A1A==EA%'A'&777
	%A1B==B&777
	A2	\%A1A,\%A1B
>
	DEFINE	A2 (A, B)<
	%A2A==AS%'A'&777
	%A2B==B&777
	E	\%A2B,\%A2A
>
;GENERATE THE EQUIVALENCES:
;DEFAULT THE SIXBIT CHARS WHICH HAVE NO EBCDIC EQUIVALENT.
;					SIXBIT		EBCDIC
	DSSE	74,155		;	\		_
	DSSE	76,177		;	^		.
;DO THE UPPER CASE LETTERS FIRST OTHERWISE SIXBIT LETTERS WILL
; BE CONVERTED TO LOWER CASE EBCDIC LETTERS.
	I==301
	REPEAT 77,<
	A0	\I,I
	I==I+1
>
;THE SAME PROBLEM OCCURS WITH SIXBIT BLANKS AND EBCDIC TABS.

	A0	100,100

;NOW DO THE REST.
	I==0
	REPEAT 301,<
	A0	\I,I
	I==I+1
>
;MAKE SURE ALL THE SIXBIT CHARS ARE DEFINED.
	CSE
;MAKE SURE ALL THE EBCDIC CHARS ARE DEFINED.
	CES
>	;END OF IF1 CONDITIONAL.
; HERE IS A MACRO TO GIVE AN EBCDIC CHARACTER CODE BASED UPON ASCII 
; LITERAL
;		CALL:	EBC.CH("$")
;
;		GIVES THE EBCDIC CHARACTER CODE AS A VALUE

DEFINE	SYM79(CH)

DEFINE	EBC.CH(CH)


	END