MACRO 01000000 &NAME GOIF &SW, . SWITCH TO BE TESTED X02000000 &SW2, . COMPARAND FOR CLC OR CLI X03000000 >=, . BRANCH GREATER X04000000 &GE=, . BRANCH GREATER OR EQUAL X05000000 &EQ=, . BRANCH EQUAL X06000000 &LE=, . BRANCH LESS OR EQUAL X07000000 <=, . BRANCH LESS X08000000 &NE=, . BRANCH NOT EQUAL X09000000 &ZERO=, . STATUS CONDITION X10000000 &NOTZERO=, . STATUS CONDITION X11000000 &POS=, . STATUS CONDITION X12000000 &NOTPOS=, . STATUS CONDITION X13000000 &NEG=, . STATUS CONDITION X14000000 &NOTNEG=, . STATUS CONDITION X15000000 &MODE=L, . STATUS CONDITION X16000000 &NO=, . SWITCH OFF X17000000 &YES=, . SWITCH ON X18000000 &EQUAL=, . ALTERNATE FOR EQ X19000000 &NOTEQ=, . ALTERNATE FOR NE X20000000 &ALL=, . BRANCH IF ALL ON X21000000 &NONE=, . BRANCH IF NONE ON X22000000 &MIX=, . BRANCH IF SOME ON (BUT NOT ALL)X23000000 &NOTALL=, . BRANCH IF NONE OR SOME X24000000 &ANY=, . H NOT ALL OFF (ANY OR ALL ON) X25000000 &NOTMIX=, . BRANCH IF ALL ON OR ALL OFF X26000000 &ELSE=, . UNCONDITIONAL FINAL BRANCH X27000000 &ON=, . BRANCH IF SINGLE SWITCH ON X28000000 &OFF=, . BRANCH IF SINGLE SWITCH OFF X29000000 &HIGH=,&HI=,&NOTLO=,&NOTLOW=,&LOW=,&LO=,&NOTHI=, X30000000 &NOTHIGH= 31000000 GBLA &INDEX 32000000 GBLC &BYTE,&CRNT 33000000 GBLC &DEFNAME(255),&SWNAME(255) 34000000 LCLA &COUNT1,&COUNT2 35000000 LCLB &FIRST,&COND(3),&USED(6),&TM,&MASK(3) 36000000 LCLB &NULL 37000000 LCLC &PLUS(7) 38000000 .* 38050000 .* CHANGES TO RELEASE 3 38100000 .* CHANGES TO RELEASE 2 38150000 .* CHANGES TO RELEASE 1 38200000 .* 38250000 .* GENERATES INSTRUCTIONS TO TEST A GIVEN CONDITION 38300000 .* AND BRANCH IF THE BRANCH CONDITION IS SATISFIED 38350000 .* 38400000 AIF (N'&SW GT 8).ERR1 . TOO MANY SWITCHES 39000000 &COUNT1 SETA 0 . INITIALIZE FOR VALIDITY CHECK 40000000 .LOOP1 ANOP 41000000 &COUNT1 SETA &COUNT1+1 . NEXT OPERAND 42000000 AIF (&COUNT1 GT N'&SW).NXT1 . DONE 43000000 &COUNT2 SETA 0 . INITIALIZE SWNAME LOOKUP 44000000 .LOOP2 ANOP 45000000 &COUNT2 SETA &COUNT2+1 . NEXT IN SWNAME LIST 46000000 AIF (&COUNT2 GT &INDEX).ERR2 . DIDN'T FIND NAME 47000000 AIF ('&SW(&COUNT1)' EQ '&SWNAME(&COUNT2)').LOOP3 FOUND NAME 48000000 AGO .LOOP2 49000000 .ERR2 ANOP , . LOG NO NAME FOUND 50000000 AIF (N'&SW GT 1).ERR2A 51000000 &NAME GOIF1 &SW,&SW2,GT=>&HI&HIGH,GE=&GE&NOTLOW&NOTLO, X52000000 EQ=&EQ&EQUAL,LE=&LE&NOTHIGH&NOTHI,LT=<&LOW&LO, X53000000 ZERO=&ZERO, STATUS CONDITION X54000000 NOTZERO=&NOTZERO, STATUS CONDITION X55000000 POS=&POS, STATUS CONDITION X56000000 NOTPOS=&NOTPOS, STATUS CONDITION X57000000 NEG=&NEG, STATUS CONDITION X58000000 NOTNEG=&NOTNEG, STATUS CONDITION X59000000 MODE=&MODE, STATUS CONDITION X60000000 NE=&NE&NOTEQ,ELSE=&ELSE 61000000 MEXIT 62000000 .ERR2A MNOTE 8,'UNDECLARED BIT SWITCH OR MORE THAN ONE CLI SWITCH' 63000000 MEXIT 64000000 .ERR1 ANOP 65000000 MNOTE 8,'TOO MANY SWITCHES, ONLY 8 ALLOWED PER CALL' 66000000 MEXIT 67000000 .LOOP3 ANOP 68000000 AIF (&FIRST).SECOND . FIRST TIME THROUGH 69000000 &FIRST SETB 1 . YES 70000000 &BYTE SETC '&DEFNAME(&COUNT2)' . SAVE THE NAME 71000000 AGO .LOOP1 . BACK FOR MORE 72000000 .SECOND ANOP 73000000 AIF ('&DEFNAME(&COUNT2)' EQ '&BYTE').LOOP1 74000000 MNOTE 8,'SWITCHES NOT ALL IN THE SAME BYTE' 75000000 MEXIT 76000000 .NXT1 ANOP 77000000 &NAME GOIF3 &SW, X78000000 ALL=&ALL&YES&ON, X79000000 NONE=&NONE&NO&OFF, X80000000 MIX=&MIX, X81000000 NOTALL=&NOTALL, X82000000 ANY=&ANY, X83000000 NOTMIX=&NOTMIX, X84000000 ELSE=&ELSE, X85000000 ON=&ALL&YES&ON, X86000000 OFF=&NONE&NO&OFF 87000000 MEND 88000000