ACTIF	CONDITIONAL ASSEMBLY DI	MACRO M1110  21-AUG-78 22:19

TABLE OF CONTENTS



    32-    8	CONDITIONAL ASSEMBLY DIRECTIVES

    33-   66	IF DIRECTIVE ROUTINES

    34-  122	EQ, NE, GT, LE, GE, LT	"IF" CONDITION ROUTINES

    35-  169	B, NB, DF, NDF, IDN, DIF  "IF" CONDITION ROUTINES

    37-  256	IFF, IFT, IFTF, ENDC DIRECTIVE ROUTINES

    39-  325	IIF DIRECTIVE ROUTINES

    40-  362	IF STATEMENT CONDITION NAMES

ACTIF	CONDITIONAL ASSEMBLY DI	MACRO M1110  21-AUG-78 22:19  PAGE 26





      1						.IDENT	\X03.11\

      2					;

      3					; COPYRIGHT (C) 1977, 1978

      4					; DIGITAL EQUIPMENT CORPORATION, MAYNARD MASSACHUSETTS 01754

      5					;

      6					; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ON A SINGLE

      7					; COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLUSION OF THE

      8					; ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE, OR ANY OTHER COPIES THEREOF,

      9					; MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON

     10					; EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE

     11					; TERMS.  TITLE TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES

     12					; REMAIN IN DEC.

     13					;

     14					; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE

     15					; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT

     16					; CORPORATION.

     17					;

     18					; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS

     19					; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.

     20					;

     21

     22					;++

     23					; FACILITY:	VAX-11 MACRO OBJECT MODULE LIBRARY "MAR.OLB"

     24					;

     25					; ABSTRACT:	THIS MODULE IS PART OF THE VAX-11 MACRO ASSEMBLER, ITS DESCRIPTION

     26					;		IS ON THE FOLLOWING PAGE.

     27					;

     28					;

     29					; ENVIRNOMENT:	VAX-11 MACRO RUNS ON ANY VAX-11 WITH COMPATIBILITY MODE, UNDER

     30					;		THE CME (COMPATIBILITY MODE EMULATOR) OF VAX/VMS OR ON A PDP-11

     31					;		WITH EXTENDED INSTRUCTIONS UNDER RSX-11/M.

     32					;

     33					; AUTHOR:	STEVE POULSEN, CREATION DATE:  22-JUL-76

     34					;		DALE A. ROEDGER, 10-JAN-77 - 19-DEC-77

     35					;		DAVE N. CUTLER

     36					;		BENN L. SCHREIBER

     37					;

     38					; MODIFIED BY:

     39					;

     40					;--

     41					.IF NDF $DATA$

ACTIF	CONDITIONAL ASSEMBLY DI	MACRO M1110  21-AUG-78 22:19  PAGE 32





      1						.TITLE	ACTIF	CONDITIONAL ASSEMBLY DIRECTIVE PROCESSOR

      2	000000					.PSECT	ACTIF

      3					.GLOBL	IFHD1,	IFSYNT,	IF,	IFSPL,	IFT,	IFF,	IFTF

      4					.GLOBL	ENDC,	IIF,	IIF1,	IIF2

      5

      6					.GLOBL	IF.EQ,	IF.GT,	IF.LT,	IF.B,	IF.DF,	IF.IDN,	IF$ER

      7					.GLOBL	CNDNIF,	NAMIFS

      8					.SBTTL	CONDITIONAL ASSEMBLY DIRECTIVES

      9					;

     10					; THESE ROUTINES HANDLE CONDITIONAL ASSEMBLY DIRECTIVES.  THE 'IFHD1'

     11					; ROUTINE IS CALLED WHEN AN IF STATEMENT IS DETECTED.  IT SCANS THE

     12					; CONDITION ITSELF, AND IN MOST CASES ALLOWS THE PARSER TO EVALUATE

     13					; THE ASSOCIATED EXPRESSION.

     14					;

     15

     16	000000				IFHD1:					; IF_HEAD = KIF

     17	000000					LET IFCNDP	:= #ITRUE		; SET FOR ERROR

     18	000006					PUSH R4					; SAVE R4

     19	000010					CALL SYMSCN				; SCAN CONDITION CODE

     20	000014					IF R3 IS EQ THEN			; FIND ONE?

     21	000020					    POP R4				; RESTORE R4

     22	000022					    GOTO IFHDX				; ERROR EXIT

     23	000024					END

     24	000024					LET IFCNDN	:= #CNDNIF		; POINT TO CONDITION NAMES

     25	000032					LET R2		:= #IFCNDN		; POINT TO CONDITION NAMES

     26	000036					LET INSERT	:= FALSE		; DON'T ADD NEW NAMES

     27	000042					CALL FINDSYM				; LOOK UP THE NAME

     28	000046					POP R4					; RESTORE R4

     29	000050					IF R2 IS EQ THEN			; NOT FOUND?

     30	000054					    GOTO IFHDX				; ERROR EXIT

     31	000056					END

     32	000056					SPNOR

     33	000062					IF CHAR EQ #COMMA THEN			; COMMA?

     34	000072					    CALL GETCHR				; SCAN PAST COMMA

     35	000076					END

     36	000076					LET R0		:= SYMVL1(R2)		; GET ROUTINE POINTER

     37	000102					LET DATRPT	:= FALSE		; NOT IRP

     38	000106					IF #1 SET.IN R0 THEN			; SPECIAL SCAN FLAG?

     39	000114					    LET R0	:= R0 -1		; CLEAR FLAG

     40	000116					    CALL (R0)				; PERFORM SPECIAL SCAN

     41	000120					    IF (SP) NE #IIFCHK THEN		; NOT CALLED FROM "IIF"

     42	000126						LET ERRPT := LINEPT		; SAVE POSITION IN LINE

     43	000134						SPNOR				; SKIP SPACES

     44	000140						IF CHAR NE #CR THEN		; IF SYNTAX ERROR

     45	000150						    CALL ERORLN,#IFSYNX		; SYNTAX ERROR

     46	000160						    LET CHAR := #CR		; FORCE NEW LINE

     47	000166						END;IF

     48	000166					    END;IF

     49	000166					ELSE

     50	000170					    LET IFCNDP	:= R0			; SAVE CONDITION ROUTINE POINTER

     51	000174					END

     52	000174					LET IFSTAT	:= FALSE		; NO LONGER IF

     53	000200					LET COMPEXPR	:= TRUE			; ASSUME COMPILE-TIME EXPR

     54	000206					LET EVALEXPR	:= FALSE		; DON'T OUTPUT CODE

     55	000212					GOTO IFHD1X				; EXIT

     56	000214				IFHDX:	CALL ERORLN,#ILCOND			; ILLEGAL CONDITION

     57	000224					LET CHAR	:= #CR			; FORCE NEW LINE

ACTIF	CONDITIONAL ASSEMBLY DI	MACRO M1110  21-AUG-78 22:19  PAGE 32-1

CONDITIONAL ASSEMBLY DIRECTIVES



     58	000232				IFHD1X:	RETURN

     59

     60

     61	000234				IFSYNT:					; IF_STATE = IF_HEAD ERR02

     62	000234					CALL ERORLN,#IFSYNX			; IF SYNTAX ERROR

     63	000244					LET CHAR	:= #CR			; FORCE NEW LINE

     64											; FALL THROUGH TO "IF:"

ACTIF	CONDITIONAL ASSEMBLY DI	MACRO M1110  21-AUG-78 22:19  PAGE 33

IF DIRECTIVE ROUTINES



     66					.SBTTL	IF DIRECTIVE ROUTINES

     67					;

     68					; HERE IS THE HEART OF THE 'IF' PROCESSOR.  THIS ROUTINE CHECKS THE

     69					; RESULT OF THE IF EXPRESSION AND THEN FALLS INTO THE 'IFIT'

     70					; ROUTINE WHICH SCANS OVER FALSE CODE LOOKING FOR A CHANCE TO

     71					; RESUME ASSEMBLING.

     72					;

     73	000252				IF:					; IF_STATE = IF_HEAD EXPR DEOL

     74	000252					LET R0		:= V1STACK-2(R4)	; EXPR LSB

     75	000256					LET R1		:= V2STACK-2(R4)	; EXPR MSB

     76	000262					OUT #I.PRIL,<R0,R1>			; PRINT VALUE OF EXPR

     77	000276					IF COMPEXPR IS FALSE THEN

     78	000304					    CALL ERORLN,#ILASEX			; COMPLEX EXPRESSION NOT ALLOWED

     79	000314					END

     80

     81	000314				IFSPL:					; IF_STATE = IF_HEAD DEOL

     82

     83	000314					CALL	@IFCNDP				; CALL CONDITION CHECKER

     84	000320					CALL	LSTCND				; LISTING CONDITIONALS ?

     85	000324					LET IFCNT	:= 0			; RESET FALSE NESTING LEVEL

     86	000330					IF #1 OFF.IN IFVAL THEN			; RESULT TRUE?

     87	000340					    GOTO IFEXIT				; YES, RETURN

     88	000342					END					; ELSE FALL THROUGH

     89					;

     90					; SCAN THROUGH FALSE CODE

     91					;

     92	000342				IFIT:

     93	000342					REPEAT					; WAIT FOR TRUTH

     94	000342					    CALL LSTCND				; LISTING CONDITIONALS ?

     95	000346					    PUSH R4				; SAVE R4

     96	000350					    REPEAT				; ONCE PER LABEL

     97	000350						IF CHAR EQ #': THEN		; SCAN PAST COLONS

     98	000360						    CALL GETCHR			; IN LABELS

     99	000364						END

    100	000364						CALL SYMSCN

    101	000370						SPNOR				; IGNORE BLANKS

    102	000374					    UNTIL CHAR NE #':			; IGNORE LABELS

    103	000404					    IF R3 IS NE THEN			; FIND SYMBOL?

    104	000410						LET IFSNAM	:= #NAMIFS	; POINT TO NAMES

    105	000416						LET R2		:= #IFSNAM	; SPECIAL IF KEYWORDS

    106	000422						LET INSERT	:= FALSE	; DON'T ADD NEW NAMES

    107	000426						CALL FINDSYM			; CHECK FOR SPECIAL KEYWORD

    108	000432						POP R4				; RESTORE R4

    109	000434						IF R2 IS NE THEN		; FIND IT?

    110	000440						    OUT #I.CHKL			; PRINT SRC LINES NOT ASSEMBLED

    111	000450						    JUMPTO @SYMVL1(R2)		; CALL SPECIAL ROUTINE

    112	000454						END

    113	000454					    ELSE

    114	000456						POP R4				; CLEAN UP STACK

    115	000460					    END

    116	000460					    PUSH INPUTP				; SAVE ADDRESS OF INPUT BLOCK

    117	000464					    LET CHAR	:= #CR			; FORCE NEW LINE

    118	000472					    CALL GETCHR				; READ IT

    119	000476					UNTIL INPUTP NE (SP)+			; STOP SKIPPING IF CONTEXT CHANGE

    120	000504				IFEXIT:	RETURN

ACTIF	CONDITIONAL ASSEMBLY DI	MACRO M1110  21-AUG-78 22:19  PAGE 34

EQ, NE, GT, LE, GE, LT	"IF" CONDITION ROUTINES



    122					.SBTTL	EQ, NE, GT, LE, GE, LT	"IF" CONDITION ROUTINES

    123					;

    124					; BELOW ARE THE IF CONDITIONS

    125					;

    126

    127	000506	073027 	000000 		IF.EQ:	ASHC	#0,R0				; SET CONDITION CODES

    128	000512	001425 				BEQ	ITRUE

    129	000514	000426 				BR	IFALSE

    130

    131	000516	073027 	000000 		IF.NE:	ASHC	#0,R0				; SET CONDITION CODES

    132	000522	001021 				BNE	ITRUE

    133	000524	000422 				BR	IFALSE

    134

    135	000526	073027 	000000 		IF.GT:	ASHC	#0,R0				; SET CONDITION CODES

    136	000532	003015 				BGT	ITRUE

    137	000534	000416 				BR	IFALSE

    138

    139	000536	073027 	000000 		IF.LE:	ASHC	#0,R0				; SET CONDITION CODES

    140	000542	003411 				BLE	ITRUE

    141	000544	000412 				BR	IFALSE

    142

    143	000546	073027 	000000 		IF.LT:	ASHC	#0,R0				; SET CONDITION CODES

    144	000552	002405 				BLT	ITRUE

    145	000554	000406 				BR	IFALSE

    146

    147	000556	073027 	000000 		IF.GE:	ASHC	#0,R0				; SET CONDITION CODES

    148	000562	002001 				BGE	ITRUE

    149	000564	000402 				BR	IFALSE

    150

    151					;

    152					; THIS CODE PUSHES THE CONDITION ON THE CONDITION STACK. (16 BITS DEEP)

    153					;

    154

    155	000566	000241 			ITRUE:	CLC					; MARK AS TRUE

    156	000570	000401 				BR	ITF

    157

    158	000572	000261 			IFALSE:	SEC					; MARK AS FALSE

    159

    160	000574	006167 	000000G		ITF:	ROL		IFVAL			; ADD NEW CONDITION

    161	000600					LET IFLVL	:= IFLVL +1		; INCREMENT NESTING COUNT

    162	000604					IF IFLVL GT #16. THEN			; NESTING EXCEEDED

    163	000614					    CALL ERORLN,#IFLVEX			; IF LEVEL EXCEEDED

    164	000624					END;IF

    165

    166	000624					RETURN

    167

ACTIF	CONDITIONAL ASSEMBLY DI	MACRO M1110  21-AUG-78 22:19  PAGE 35

B, NB, DF, NDF, IDN, DIF  "IF" CONDITION ROUTINES



    169					.SBTTL	B, NB, DF, NDF, IDN, DIF  "IF" CONDITION ROUTINES

    170					;

    171					; SPECIAL IF CONDITIONS.  THESE CONDITIONS SCAN THEIR OWN ARGUMENTS

    172					; RATHER THAN LETTING THE PARSER EVALUATE THE EXPRESSION.

    173					;

    174	000626				IF.B:						; IF BLANK

    175	000626					LET IFPT1	:= #ITRUE

    176	000634					LET IFPT2	:= #IFALSE

    177	000642					GOTO IF$B

    178

    179	000644				IF.NB:						; IF NOT BLANK

    180	000644					LET IFPT1	:= #IFALSE

    181	000652					LET IFPT2	:= #ITRUE

    182	000660				IF$B:	LET OFREE	:= FREEPT		; SAVE FREE CORE POINTER

    183	000666					LET IFSTAT	:= TRUE			; DON'T SWALLOW LAST COMMA

    184	000674					CALL ARGSCN				; SCAN THE ARGUMENT

    185	000700					LET IFSTAT	:= FALSE		; CLEAR FLAG

    186	000704					LET FREEPT	:= OFREE		; DEALLOCATE ARG

    187	000712					IF @MCTXTL IS EQ THEN

    188	000720					    LET IFCNDP	:= IFPT1		; ARG IS BLANK

    189	000726					ELSE

    190	000730					    LET IFCNDP	:= IFPT2		; ARG IS NOT BLANK

    191	000736					END

    192	000736					RETURN

    193

    194

    195	000740				IF.DF:						; IF DEFINED

    196	000740					LET IFPT1	:= #ITRUE

    197	000746					LET IFPT2	:= #IFALSE

    198	000754					GOTO IF$DF

    199

    200	000756				IF.NDF:						; IF NOT DEFINED

    201	000756					LET IFPT1	:= #IFALSE

    202	000764					LET IFPT2	:= #ITRUE

    203	000772				IF$DF:	PUSH R4					; SAVE R4

    204	000774					CALL SYMSCN				; GET SYMBOL NAME

    205	001000					IF R3 IS EQ THEN			; NO SYMBOL?

    206	001004					    CALL ERORLN,#ILCOND			; ILLEGAL "IF" CONDITION

    207	001014					    LET IFCNDP	:= #ITRUE		; CALL IT TRUE

    208	001022					    POP R4				; RESTORE R4

    209	001024					    GOTO IFDFX				; EXIT

    210	001026					END

    211	001026					CALL SRCUST				; SEARCH USER SYMBOL TABLE

    212	001032					POP R4					; RESTORE R4

    213	001034					IF R2 IS EQ OR #S.DF OFF.IN SYMFLAGS(R2) THEN ; NO NAME OR NOT DEFINED

    214	001050					    LET IFCNDP	:= IFPT2		; NOT DEFINED

    215	001056					ELSE

    216	001060					    LET IFCNDP	:= IFPT1		; DEFINED

    217	001066					END

    218	001066				IFDFX:	RETURN

ACTIF	CONDITIONAL ASSEMBLY DI	MACRO M1110  21-AUG-78 22:19  PAGE 36

B, NB, DF, NDF, IDN, DIF  "IF" CONDITION ROUTINES



    220

    221

    222	001070				IF.IDN:						; IF IDENTICAL

    223	001070					LET IFPT1	:= #ITRUE

    224	001076					LET IFPT2	:= #IFALSE

    225	001104					GOTO IF$IDN

    226

    227	001106				IF.DIF:						; IF DIFFERENT

    228	001106					LET IFPT1	:= #IFALSE

    229	001114					LET IFPT2	:= #ITRUE

    230	001122				IF$IDN:	LET OFREE	:= FREEPT		; SAVE CORE POINTER

    231	001130					CALL ARGSCN				; SCAN FIRST ARG

    232	001134					PUSH		MCTXTL			; PUSH PTR TO ARG

    233	001140					LET IFSTAT	:= TRUE			; DON'T SKIP OVER COMMA

    234	001146					CALL ARGSCN				; SCAN SECOND ARG

    235	001152					LET IFSTAT	:= FALSE		; CLEAR FLAGS

    236	001156					LET FREEPT	:= OFREE		; DEALLOCATE ARGS

    237	001164					POP R1					; POINT TO FIRST ARG

    238	001166					LET R2		:= MCTXTL		; POINT TO SECOND ARG

    239	001172					IF (R1)+ NE (R2)+ THEN			; LENGTHS EQUAL?

    240	001176					    LET IFCNDP	:= IFPT2		; NO

    241	001204					    GOTO IFIDNX				; EXIT

    242	001206					END

    243	001206					LET R0		:= -2(R1)		; GET LENGTH

    244	001212					IF RESULT IS NE THEN			; NON-ZERO LENGTH

    245	001214					    REPEAT THRU R0			;

    246	001214						IFB (R1)+ NE (R2)+ THEN		; NAMES DON'T MATCH?

    247	001220						    LET IFCNDP	:= IFPT2	; DIFFERENT

    248	001226						    GOTO IFIDNX			; EXIT

    249	001230						END;IF

    250	001230					    END;R

    251	001232					END;IF

    252	001232					LET IFCNDP	:= IFPT1		; SAME

    253	001240				IFIDNX:	RETURN

    254

ACTIF	CONDITIONAL ASSEMBLY DI	MACRO M1110  21-AUG-78 22:19  PAGE 37

IFF, IFT, IFTF, ENDC DIRECTIVE ROUTINES



    256					.SBTTL	IFF, IFT, IFTF, ENDC DIRECTIVE ROUTINES

    257					;

    258					; HERE ARE THE REST OF THE IF CONDITION DIRECTIVES.

    259					;

    260

    261	001242				IFF:					; DIRECTIVE = KIFF

    262	001242					CALL	CHKIF				; CHECK IF STATUS

    263	001246					IF #1 OFF.IN IFVAL THEN JUMPTO IFIT	; DON'T ASSEMBLE CODE

    264	001262					CALL	LSTCND				; LISTING CONDITIONALS?

    265	001266					RETURN					; ASSEMBLE CODE

    266

    267

    268	001270				IFT:					; DIRECTIVE = KIFT

    269	001270					CALL	CHKIF				; CHECK IF STATUS

    270	001274					IF #1 SET.IN IFVAL THEN JUMPTO IFIT	; DON'T ASSEMBLE CODE

    271	001310					CALL	LSTCND				; LISTING CONDITIONALS?

    272	001314					RETURN					; ASSEMBLE CODE

    273

    274

    275	001316				IFTF:					; DIRECTIVE = KIFTF

    276	001316					CALL	CHKIF				; CHECK IF STATUS

    277	001322					CALL	LSTCND				; LISTING CONDITIONALS?

    278	001326					RETURN					; ASSEMBLE CODE

    279

    280

    281	001330				ENDC:					; DIRECTIVE = KENDC

    282	001330					IF IFLVL IS LE THEN

    283	001336					    CALL ERORLN,#NTINIF			; NOT IN IF BODY

    284	001346					    RETURN

    285	001350					END

    286	001350					IF IFCNT IS GT THEN			; INSIDE FALSE NESTED CONDITION?

    287	001356					    LET IFCNT	:= IFCNT -1		; YES, SO DECREMENT NESTING LEVEL

    288	001362					    JUMPTO IFIT				; CONTINUE SKIPPING CODE

    289	001366					END

    290	001366					CALL	LSTCND				; LISTING CONDITIONALS?

    291	001372	000241 				CLC					; BRING "TRUE" INTO BIT15

    292	001374	006067 	000000G			ROR	IFVAL				; POP CONDITION STACK

    293	001400					LET IFLVL	:= IFLVL -1		; DECREMENT LEVEL COUNT

    294	001404					RETURN					; EXECUTE CODE

ACTIF	CONDITIONAL ASSEMBLY DI	MACRO M1110  21-AUG-78 22:19  PAGE 38

IFF, IFT, IFTF, ENDC DIRECTIVE ROUTINES



    296	001406				IF$ER:						; ERROR

    297	001406					LET IFVAL	:= 0			; EVERYTHING IS TRUE

    298	001412					CALL ERORLN,#UNTCND			; REPORT UN TERMINATED COND.

    299	001422					RETURN					; CONTINUE ASSEMBLY

    300

    301

    302	001424				IF$IF:

    303	001424					LET IFCNT	:= IFCNT +1		; BUMP FALSE NEST COUNT

    304	001430					JUMPTO		IFIT			; DON'T ASSEMBLE CODE

    305

    306

    307	001434				CHKIF:

    308	001434					IF IFLVL IS LE THEN			; NOT IF STATEMENT

    309	001442					    CALL ERORLN,#NTINIF			; NOT IN IF BODY

    310	001452					ELSE

    311	001454					    IF IFCNT IS GT THEN			; ARE WE SKIPPING CODE?

    312	001462	005726 					TST	(SP)+			; REMOVE RETURN FROM STACK

    313	001464						JUMPTO IFIT			; DON'T ASSEMBLE CODE

    314	001470					    END

    315	001470					END

    316	001470					RETURN					; ASSEMBLE CODE

    317

    318

    319	001472				LSTCND:

    320	001472					IF LS.CND+SYMVL2 IS EQ THEN		; LISTING CONDITIONS?

    321	001500					    OUT #I.FLAG,<#0,#LISTIT>		; NO!

    322	001520					END

    323	001520					RETURN					;

ACTIF	CONDITIONAL ASSEMBLY DI	MACRO M1110  21-AUG-78 22:19  PAGE 39

IIF DIRECTIVE ROUTINES



    325					.SBTTL	IIF DIRECTIVE ROUTINES

    326					;

    327					; IMMEDIATE IF'S

    328					;

    329

    330

    331	001522				IIF:					; IIF_HEAD = KIIF

    332	001522					CALL IFHD1				; SCAN THE CONDITION

    333	001526				IIFCHK:	CALL	LSTCND				; LISTING CONDITIONALS?

    334	001532					RETURN

    335

    336	001534				IIF1:					; IIF_STAT = IIF_HEAD EXPR DCOMMA

    337	001534					LET R0	:= V1STACK-2(R4)		; GET EXPR VALUE

    338	001540					LET R1	:= V2STACK-2(R4)

    339	001544					IF COMPEXPR IS FALSE THEN

    340	001552					    CALL ERORLN,#ILASEX			; COMPLEX EXPRESSION NOT ALLOWED

    341	001562					END

    342	001562					CALL	@IFCNDP				; EVALUATE CONDITION

    343	001566					LET R0	:= IFVAL			; SAVE VALUE

    344	001572	000241 				CLC					; CLEAR CARRY

    345	001574	006067 	000000G			ROR	IFVAL				; DROP DOWN A LEVEL

    346	001600					LET IFLVL	:= IFLVL -1		; FOR IIF

    347	001604					IF #1 SET.IN R0 THEN			; FALSE?

    348	001612					    LET CHAR	:= #CR			; YES!  SKIP TO NEW LINE

    349	001620					END

    350	001620					LET BOL		:= TRUE			; PRETEND AT BEGINNING OF LINE

    351	001626					LET OPRND	:= FALSE		; NOT IN OPERAND FIELD

    352	001632					RETURN

    353

    354	001634				IIF2:					; IIF_STAT = IIF_HEAD DCOMMA

    355	001634					IF IFCNDP EQ #IFALSE THEN		; CONDITION WAS FALSE

    356	001644					    LET CHAR	:= #CR			; SKIP TO NEW LINE

    357	001652					END

    358	001652					LET BOL		:= TRUE			; PRETEND AT BEGINNING OF LINE

    359	001660					LET OPRND	:= FALSE		; NOT IN OPERAND FIELD

    360	001664					RETURN

ACTIF	CONDITIONAL ASSEMBLY DI	MACRO M1110  21-AUG-78 22:19  PAGE 40

IF STATEMENT CONDITION NAMES



    362					.SBTTL	IF STATEMENT CONDITION NAMES

    363	000000					.PSECT	IFDAT,D,GBL

    364

    365					;

    366					; THE NAMES IN THE TABLE BELOW ARE THE POSSIBLE CONDITIONS

    367					; WHICH CAN FOLLOW AN IF STATEMENT.  THE VALUE IS A POINTER TO THE

    368					; ROUTINE TO DETECT THE CONDITION.  IF ONE IS ADDED TO THE VALUE,

    369					; THE CONDITION MUST DO ITS OWN SCANNING INSTEAD OF LETTING THE PARSER

    370					; PERFORM THE CALCULATIONS.

    371					;

    372		000000 				INSYMP	= 0				; START NEW LIST

    373

    374	000000					INSYM	EQ,	IF.EQ			; EQUAL TO ZERO

    375	000014					INSYM	NE,	IF.NE			; NOT EQUAL TO ZERO

    376	000030					INSYM	GT,	IF.GT			; GREATER THAN

    377	000044					INSYM	LE,	IF.LE			; LESS THAN OR EQUAL

    378	000060					INSYM	GE,	IF.GE			; GREATER THAN OR EQUAL

    379	000074					INSYM	LT,	IF.LT			; LESS THAN

    380	000110					INSYM	DF,	IF.DF+1			; DEFINED

    381	000124					INSYM	NDF,	IF.NDF+1		; NOT DEFINED

    382	000142					INSYM	B,	IF.B+1			; BLANK

    383	000156					INSYM	NB,	IF.NB+1			; NOT BLANK

    384	000172					INSYM	IDN,	IF.IDN+1		; IDENTICAL

    385	000210				CNDNIF:	INSYM	DIF,	IF.DIF+1		; DIFFERENT

    386

    387					;

    388					; BELOW ARE SPECIAL KEYWORDS WHICH ARE SCANNED WHILE PROCESSING

    389					; THE FALSE PART OF A CONDITIONAL ASSEMBLY.  THE VALUE IS A POINTER

    390					; TO A ROUTINE TO CALL WHEN THE KEYWORD IS DETECTED.

    391					;

    392

    393		000000 				INSYMP	=	0			; START NEW LIST

    394

    395	000226					INSYM	.END,	IF$ER			; ERROR

    396	000244					INSYM	.IF,	IF$IF			; .IF$IF

    397	000262					INSYM	.IFF,	IFF			; .IFF

    398	000300					INSYM	.IFT,	IFT			; .IFT

    399	000316					INSYM	.IFTF,	IFTF			; .IFTF

    400	000336				NAMIFS:	INSYM	.ENDC,	ENDC			; .ENDC

    401

    402		000001 			.END

ACTIF	CONDITIONAL ASSEMBLY DI	MACRO M1110  21-AUG-78 22:19  PAGE 40-1

SYMBOL TABLE



ARGSCN= ****** GX	IFPT1 = ****** GX	I.CHKL= ****** GX	L4      000166R     002	SYMSEG= 000010

A3    = 000000   	IFPT2 = ****** GX	I.FLAG= ****** GX	L40     001520R     002	SYMVL1= 000004

BLNK  = 000040   	IFSNAM= ****** GX	I.PRIL= ****** GX	L41     001562R     002	SYMVL2= 000006

BOL   = ****** GX	IFSPL   000314RG    002	LBLS0 = 000043   	L42     001620R     002	S.ABS = 004000

B0      000342R     002	IFSTAT= ****** GX	LBLS1 = 000037   	L43     001652R     002	S.ASN = 000200

B1      000350R     002	IFSYNT  000234RG    002	LBLS2 = 000030   	L5      000166R     002	S.DBG = 002000

B2      001214R     002	IFSYNX= ****** GX	LF    = 000012   	L6      000174R     002	S.DF  = 100000

CHAR  = ****** GX	IFT     001270RG    002	LFTANG= 000074   	L7      000314R     002	S.EPT = 000100

CHKIF   001434R     002	IFTF    001316RG    002	LINEPT= ****** GX	MCTXTL= ****** GX	S.EXTN= 010000

CNDNIF  000210RG    003	IFVAL = ****** GX	LISTIT= ****** GX	M.ARGC= 000014   	S.GLOB= 020000

CNT   = 000006   	IF$B    000660R     002	LOWCAS= 000140   	M.ARGS= 000016   	S.LOCL= 001000

COMMA = 000054   	IF$DF   000772R     002	LPTLEN= 000074   	M.END = 000012   	S.ODBG= 000040

COMPEX= ****** GX	IF$ER   001406RG    002	LSTCND  001472R     002	M.GETL= 000004   	S.REF = 000400

CR    = 000015   	IF$IDN  001122R     002	LS.CND= ****** GX	M.IFLV= 000006   	S.TKMS= 000377

DATRPT= ****** GX	IF$IF   001424R     002	L0      000024R     002	M.IFVL= 000010   	S.WEAK= 040000

ENDC    001330RG    002	IF.B    000626RG    002	L1      000056R     002	M.LINK= 000000   	TAB   = 000011

ERORLN= ****** GX	IF.DF   000740RG    002	L10     000342R     002	M.NXTL= 000002   	TYPS0 = 000000

ERRPT = ****** GX	IF.DIF  001106R     002	L11     000364R     002	NAMIFS  000336RG    003	TYPS1 = 000000

EVALEX= ****** GX	IF.EQ   000506RG    002	L13     000456R     002	NTINIF= ****** GX	TYPS2 = 000000

E0      000504R     002	IF.GE   000556R     002	L14     000454R     002	OFREE = ****** GX	UNTCND= ****** GX

E1      000404R     002	IF.GT   000526RG    002	L15     000460R     002	OPRND = ****** GX	V1STAC= ****** GX

E2      001232R     002	IF.IDN  001070RG    002	L17     000624R     002	OUTFRA= ****** GX	V2STAC= ****** GX

FF    = 000014   	IF.LE   000536R     002	L2      000076R     002	PSECCH= 000020   	$DIDDO= 000000

FINDSY= ****** GX	IF.LT   000546RG    002	L20     000730R     002	PSECOP= 000016   	$E$   = 000001

FREEPT= ****** GX	IF.NB   000644R     002	L21     000736R     002	PSECV1= 000012   	$F$   = 000000

GETCHR= ****** GX	IF.NDF  000756R     002	L22     001026R     002	PSECV2= 000014   	$I$   = 000001

IF      000252RG    002	IF.NE   000516R     002	L23     001050R     002	RGTANG= 000076   	$L    = 000003

IFALSE  000572R     002	IIF     001522RG    002	L24     001060R     002	RTNVAL=%000000   	$LL   = 000001

IFCNDN= ****** GX	IIFCHK  001526R     002	L25     001066R     002	R6    =%000006   	$L$   = 000000

IFCNDP= ****** GX	IIF1    001534RG    002	L26     001206R     002	R7    =%000007   	$O$   = 000000

IFCNT = ****** GX	IIF2    001634RG    002	L27     001232R     002	SEMI  = 000073   	$R    = 177777

IFDFX   001066R     002	IIII  = 177777   	L3      000170R     002	SKIPSP= ****** GX	$SV$  = 000000

IFEXIT  000504R     002	ILASEX= ****** GX	L30     001230R     002	SPACE = 000040   	$T    = 000044

IFF     001242RG    002	ILCOND= ****** GX	L31     001262R     002	SRCUST= ****** GX	$T1   = 000000

IFHDX   000214R     002	INPUTP= ****** GX	L32     001310R     002	SYMCHR= 000012   	$T2   = 000043

IFHD1   000000RG    002	INSERT= ****** GX	L33     001350R     002	SYMFLA= 000002   	$Y$   = 000007

IFHD1X  000232R     002	INSYMC= 000005   	L34     001366R     002	SYMLEN= 000011   	$Z$   = 000000

IFIDNX  001240R     002	INSYMP= 000336R     003	L35     001454R     002	SYMLIN= 000000   	$$T   = 000032

IFIT    000342R     002	INSYTM= 000336R     003	L36     001470R     002	SYMMAX= 000017   	$$TT  = 000024

IFLVEX= ****** GX	ITF     000574R     002	L37     001470R     002	SYMSCN= ****** GX	.$T   = 000001

IFLVL = ****** GX	ITRUE   000566R     002



. ABS.	000000	   000

      	000000	   001

ACTIF 	001666	   002

IFDAT 	000356	   003

ERRORS DETECTED:  0



VIRTUAL MEMORY USED:  12157 WORDS  ( 48 PAGES)

DYNAMIC MEMORY:  13332 WORDS  ( 51 PAGES)

ELAPSED TIME:  00:03:32

OBJ$:ACTIF,LIS$:ACTIF/-SP=SRC$:MD,COMMON,ACTIF

