UNIVERSAL RPGPRM FOR RPGLIB VERSION 1. SUBTTL PARAMETERS FOR RPGLIB %1 10-JAN-76 /RBC/ACK ;USED TO BE ;COPYRIGHT 1974, 1975, DIGITAL EQUIPMENT CORP., MAYNARD MASS. ;WHEN IT WAS LBLPRM, BUT WAS MODIFIED TO RPGII VERSION BY ;BOB CURRIER. EDIT==0 VERSION==10B29 .DIRECTIVE .NOBIN %%LBLP==1 ;TO ASSURE THAT ALL MODULES ARE COMPILED WITH THE ; SAME SWITCHES. ;REVISION HISTORY: SEARCH INTERM ;DEFINE THE ASSEMBLY SWITCHES. DEBUG==:DEBUG SERCH==:SERCH RPW==:RPW ISAM==:ISAM DBMS==:DBMS MCS==:MCS STRING==:STRING EBCMP.==:EBCMP. MPWCEX==:MPWCEX TRAILB==:TRAILB MPWC.S==:MPWC.S BIS==:BIS ;DEFAULT ANY UNDEFINED ASSEMBLY SWITCHES. SWSET%==SWSET% ;DEFINE COMPILER'S ASSEMBLY SWITCH WORD. LIBSW%==LIBSW% ;DEFINE LIBOL'S ASSEMBLY SWITCH WORD. ;ACCUMULATIOR DEFINITIONS: ;NOTE: ; ACCUMULATORS 0, 1, 2, 3 AND 4 SHOULD ALWAYS BE PRESERVED ON ; ANY CALL TO RPGLIB. S1==1 ;SAVE THESE. S2==2 S3==3 CNT==12 ;FIELD WIDTH. CH==5 ;HOLDS A CHARACTER. T1==CH ;TEMPORARY. T2==T1+1 ; " T3==T2+1 ; " T4==T3+1 ; " T5==T4+1 ; " TAC1==5 ;TEMPORARIES - USE THESE NAMES WHEN RENAMEING TAC2==6 ; THE AC'S OTHERWISE THE ASSEMBLER WILL MESS TAC3==7 ; THINGS UP. TAC4==10 TAC5==11 CPTR==T2 ;CONVERSION POINTER. AC==T3 ;THREE AC'S USED IN NUMERIC CONVERSIONS. IPTR==13 ;THE INPUT BYTE POINTER. OPTR==14 ;THE OUTPUT BYTE POINTER. SW==OPTR ;SWITCHES. JAC==15 ;HOLDS THE RETURN ADDRESS FOR SUBROUTINES CALLED ; VIA JSP. PARM==16 ;POINTS TO THE PARAMETERS. PP==17 ;PUSH DOWN POINTER. ;FLAGS: LS==(1B1) ;LEADING SIGN FLAG. LM==(1B2) ;LEADING MINUS FLAG. IS==(1B3) ;IMBEDDED OR TRAILING SIGN FLAG: ; 0 ==> NONE OR POSITIVE ; 1 ==> NEGATIVE. OECNT==(1B4) ;ODD OR EVEN COUNT FLAG. ; 0 ==> CNT WAS ODD. ; 1 ==> CNT WAS EVEN. SUBTTL REGISTERS AND FLAGS FOR BIS IFE BIS, IFN BIS,< ; BASIC REGISTER DEFINITIONS ;INSTRUCTION REGS BIS0==4 BIS1==5 BIS2==6 BIS3==7 BIS4==10 ;TEMPS BIST0==11 BIST1==12 BIST2==13 IFN SW-14, IFN JAC-15, ; MORE MEANINGFUL NAMES FOR THE REGS BISCH==BIS2 ;TEMP REGISTER USED BY BSET1. AND BSET2. B.FLAG==BIS0 ;FLAGS SRCCNT==BIS0 ;SOURCE COUNT SRCPT==BIS1 ;SOURCE POINTER DSTCNT==BIS3 ;DESTINATION COUNT DSTPT==BIS4 ;DESTINATION POINTER PATRN==BIS0 ;PATTERN MARKAD==BIS3 ;ADDRESS OF MARK POINTER BD.FLG==BIS3 ;FLAGS ARE HERE FOR BINARY TO DECIMAL CONVERSION SRCHI==BIS0 ;HIGH ORDER BITS OF SOURCE BINARY SRCLO==BIS1 ;LOW ORDER BITS OF SOURCE BINARY NUMBER DSTHI==BIS3 ;HIGH ORDER BITS OF DESTINATION BINARY NUMBER DSTLO==BIS4 ;LOW ORDER BITS OF DESTINATION BINARY NUMBER ;FLAGS IN LEFT HALF OF B.FLAG BFLG.S==400000 ;SIGNIFICANCE FLAG BFLG.M==100000 ;NEGATIVE FLAG BFLG.N==200000 ;NON-ZERO FLAG BFLG.==700000 ;ALL OF THEM ;NEW KL INSTRUCTIONS OPDEF DADD [114000,,000000] ;DOUBLE ADD OPDEF DSUB [115000,,000000] ; OPDEF DMUL [116000,,000000] ; OPDEF DDIV [117000,,000000] ; OPDEF DMOVE [120000,,000000] OPDEF DMOVEM [124000,,000000] OPDEF DMOVN [121000,,000000] OPDEF DMOVNM [125000,,000000] ;EXTENDED INSTRUCTION SET OP CODES OPDEF EXTEND [123000,,000000] CMPSL==001000 ;COMPARE STRING LESS THAN CMPSE==002000 ;EQUAL CMPSLE==003000 ;LESS OR EQUAL CMPSGE==005000 ;GREATER OR EQUAL CMPSN==006000 ;NOT EQUAL CMPSG==007000 ;GREATER EDIT==004000 ;EDIT CVTDBO==010000 ;CONVERT DECIMAL TO BINARY OFFSET CVTDBT==011000 ;TRANSLATED CVTBDO==012000 ;BINARY TO DECIMAL OFFSET CVTBDT==013000 ;TRANSLATED MOVSO==014000 ;MOVE STRING OFFSET MOVST==015000 ;TRANSLATED MOVSLJ==016000 ;LEFT JUSTIFIED MOVSRJ==017000 ;RIGHT JUSTIFIED ; E0 BLOCK INDICES E0.INS==0 ;INSTRUCTION CODE E0.OFF==0 ;OFFSET E0.TBL==0 ;TRANSLATION TABLE ADDRESS E0.FIL==1 ;FILL CHARACTER E0.FLT==2 ;FLOAT CHARACTER E0.$==3 ;DOLLAR SIGN E0.COM==4 ;COMMA E0..==5 ;PERIOD E0.BL==6 ;BLANK E0.0==7 ;ZERO E0.PL==10 ;PLUS E0.MI==11 ;MINUS E0.C==12 ;"C" E0.R==13 ;"R" E0.D==14 ;"D" E0.B==15 ;"B" ;TRANSLATION TABLE CODES T.SBIT==400000 ;SET S AND N FLAGS T.ABRT==100000 ;ABORT T.MCLR==200000 ;CLEAR M FLAG T.MSET==300000 ;SET M FLAG T.ABIS==1000 ;ABORT IF SIGNIFICANCE IS ON (ONLY FOR CVDBO/T ) > ;END OF BIS LIST ;MACROS ;THIS MACRO IS USED BY THE OTHER MACROS TO GENERATE "LDB AC1,[POINT ?,?(AC2),?]" ; WHERE THE ?'S ARE DETERMINED BY THE STRUCTURE OF EASTBL, WHERE THE EXTERNALS ; ?'FLD'? ARE DEFINED. DEFINE PICKUP (FLD,N,AC1,AC2,%LH,%RH,%A,%B)< .XCREF ;;DO DEFAULTS THIS WAY SINCE MACRO DOESN'T WORK RIGHT. %A==N IFB ,<%A==6> %B==AC1 IFB ,<%B==CH> %C==AC2 IFB ,<%C==%B> %B==%B&17 %LH==S'FLD'L.## %RH==S'FLD'R.## IFE %A-7,<%LH==A'FLD'L.## %RH==A'FLD'R.##> IFE %A-^D9,<%LH==E'FLD'L.## %RH==E'FLD'R.##> LDB %C, [XWD %LH+%B,%RH] .CREF LIST > ;END OF DEFINE PICKUP. COMMENT \ MACRO TO DETERMINE IF A CHARACTER REPRESENTS A DIGIT WITH AN OVERPUNCHED "-". CALL: SIGN N,AC1,AC2; WHERE: N=6 ==> THE INPUT CHAR IS SIXBIT N=7 ==> THE INPUT CHAR IS ASCII N=9 ==> THE INPUT CHAR IS EBCDIC (AC1) = THE INPUT CHAR (AC2) = 1 IF THE CHAR HAS AN OVERPUNCHED "-", OTHERWISE 0. DEFAULTS: N: 6 (OMITTED OR NEITHER 7 NOR 9) AC1: CH (THIS IS NOT NECESSARILY THE CH DEFINED IN LBLPRM) AC2: AC1 \ DEFINE SIGN (N,AC1,AC2) COMMENT \ MACRO TO CONVERT A CHARACTER TO A DIGIT. CALL: CVTNM N,AC1,AC2; WHERE: N=6 ==> THE INPUT CHAR IS SIXBIT N=7 ==> THE INPUT CHAR IS ASCII N=9 ==> THE INPUT CHAR IS EBCDIC (AC1) = THE INPUT CHAR (AC2) = THE DIGIT DEFAULTS: N: 6 (OMITTED OR NEITHER 7 NOR 9) AC1: CH (THIS IS NOT NECESSARILY THE CH DEFINED IN LBLPRM) AC2: AC1 \ DEFINE CVTNM (N,AC1,AC2)< PICKUP DGT,N,AC1,AC2 TRNN %C,IBNCH.## TRZE %C,SPCCH.## CAIE %C,3 TRZA %C,777600 TRZ %C,-1 IFE N-6, IFE N-7, IFE N-^D9, PURGE %C > COMMENT \ MACRO TO CONVERT A CHARACTER TO A DIGIT AND SET BIT 0 TO 1 IF THE CHARACTER REPRESENTS A DIGIT WITH AN OVERPUNCHED "-". CALL: CVTSNM N,AC1,AC2; WHERE: N=6 ==> THE INPUT CHAR IS SIXBIT N=7 ==> THE INPUT CHAR IS ASCII N=9 ==> THE INPUT CHAR IS EBCDIC (AC1) = THE INPUT CHAR (AC2) = THE DIGIT DEFAULTS: N: 6 (OMITTED OR NEITHER 7 NOR 9) AC1: CH (THIS IS NOT NECESSARILY THE CH DEFINED IN LBLPRM) AC2: AC1 \ DEFINE CVTSNM (N,AC1,AC2)< PICKUP SDG,N,AC1,AC2; TRNE %C,IBNCH.## TLOA %C,(1B0) TRZE %C,SPCCH.## CAIE %C,3 TRZA %C,777600 TRZ %C,-1 IFE N-6, IFE N-7, IFE N-^D9, PURGE %C > END