. . ELEMENT SELECT ROUTINES . . . (C) Copyright 1972-1978 John Walker . . This software is in the public domain . AXR$ DEFUNCT$ FANG . PURE CODE . . ELEMENT SELECT SUBROUTINE . . LX,U X5,<ELEMENT CLASS PACKET> . LX,U X6,<ELEMENT FIND PACKET> . LMJ X11,SELECT . <DIDN'T CHOOSE IT> . <CHOSE IT> . SELECT* TZ ELALL,X5 ALL ELEMENTS SELECTED ? J 1,X11 YES. MARK THIS ONE SELECTED TNZ ELTBIT,X5 ANY TYPES SPECIFIED ? J SELNOT NO. DON'T APPLY TYPE SELECTION RULES LMJ A0,TBITS COMPUTE TYPE SELECTION BITS FROM TYPE AND A1,ELTBIT,X5 AND WITH TYPE SELECTION JZ A2,,X11 DESELECT IF NOT VALID TYPE . . CHOSEN ON BASIS OF TYPE. CHECK NAME AND VERSION . SELNOT DL A1,ELELTN,X5 LOAD ELEMENT NAME DL A4,EIEN,X6 LOAD ELEMENT NAME OF VICTIM LMJ A0,NAMCOMP COMPARE NAMES J 0,X11 DESELECT IF NO MATCH DL A1,ELTVERN,X5 LOAD VERSION OF ELEMENT DL A4,EIVER,X6 LOAD VERSION MASK LMJ A0,NAMCOMP COMPARE NAMES J 0,X11 RETURN IF NO MATCH J 1,X11 AHA!! WE FOUND IT . . NAME COMPARISON SUBROUTINE . NAMCOMP LR,U R1,11 LOAD LENGTH OF NAME NMCP2 AND,U A2,077 GET A CHARACTER OF MASK TNE,U A3,'*' IS IT THE SELECT ANYTHING FLAG ? J NMCP1 YES. DON'T EXAMINE NAME AND,U A5,077 EXTRACT CHARACTER FROM NAME TE A3,A6 MATCH ? J 0,A0 NO. NAMES DON'T MATCH NMCP1 DSC A1,6 MOVE NEXT CHARACTERS DSC A4,6 ...INTO POSITION JGD R1,NMCP2 DO FOR ALL CHARACTERS J 1,A0 RETURN TO SELECTED EXIT . . COMPUTE TYPE SELECTION BITS . TBITS LA,U A1 CLEAR BITS ACCUMULATOR LA A2,EITYP,X6 LOAD MAJOR ELEMENT TYPE TG,U A2,GTTYPE+1 ILLEGAL TYPE ON ELEMENT ? J 0,A0 NO. RETURN WITH NO TYPE LA,U A1,1 LOAD A BIT ANA,U A2,1 SUBTRACT ONE FROM THE TYPE LSSL A1,,A2 FORM BASE TYPE TE,U A2,TY$SYM-1 IS IS SYMBOLIC ? J 0,A0 NO. RETURN SIMPLY MAJOR TYPE LA A2,EIPCOD,X6 LOAD PROCESSOR CODE LA,U A3,1*/GTTYPE LOAD BIT FOR ZERO PROCESSOR CODE LSSL A3,,A2 SHIFT BY PROCESSOR CODE AA A1,A3 ADD PROCESSOR CODE TO TYPE J 0,A0 RETURN . . LOOK UP TYPE MNEMONIC . . LA A0,<TYPE NAME> . LMJ X11,SELTLU . <NO FIND> . <normal return> A1 = numeric type code . A2 = selection bits for type . seltlu* sa a0,a2 save original parameter AND A0,(0777777770000) GET FIRST 4 CHARACTERS TNE A1,('ASMP@@') ASM PROC MNEMONIC ? LA A0,('APR ') YES. CHANGE TO OURS TNE A1,('COBP@@') COBOL PROC ? LA A0,('CPR ') YES. FIX IT TNE A1,('FORP@@') FORTRAN PROC ? LA A0,('FPR ') YES. CHANGE TO OURS SSL A0,18 TAKE ONLY THE FIRST THREE LETTERS LR,U R1,SELTBL LOAD LENGTH OF SELECT TABLE LA A1,(2,SELTAB) GET TABLE POINTER SE,H2 A0,,*A1 SEARCH FOR NAME J seltst go try standard types of not one of ours ANA,U A1,2 BACK UP TO POINT TO ENTRY la a2,1,a1 load selection bits for type la,h1 a1,,a1 load numeric type code J 1,X11 RETURN TO NORMAL EXIT . . The type specification was not one of our special ones. Search the . table of standard system types (SSTYP$) for the subtype. . seltst lr,h2 r1,sstyp$ load length of type list jgd r1,$+1 decrement it for search la a1,(1,0) load pointer to search table se a2,sstyp$+1,*a1 look for type in table j 0,x11 not found. take error return la,u a2,1*/(gttype-1) load bit for selection lssl a2,,a1 shift bit to proper position ah a1,(-1,010000-1) form numeric type identifier in A1 j 1,x11 take normal return to caller . . PURE DATA . . SELECTION BIT DEFINITION . P PROC 1,2 SELBIT* NAME 0 * P(1,2)+010000*P(1,*2),P(1,1) NUMERIC TYPE, NAME A(0) EQU 0 CLEAR ACCUMULATOR OF BITS SELP* PROC 0 DO P(1,*I+1)=0 ,A*(0) EQU A(0)++1*/(P(1,I+1)-1) DO P(1,*I+1) ,A*(0) EQU A(0)++1*/(GTTYPE+P(1,I+1)) END I DO P(1)-1 , SELP * A(0) END . . SELTAB* . SELBIT 'SYM',1,2,3,4 ALL SYMBOLICS SELBIT 'PRO',2,3,4 ALL PROCS SELBIT 'APR',2 ASM PROCS SELBIT 'CPR',3 COBOL PROCS SELBIT 'FPR',4 FORTRAN PROCS SELBIT 'REL',5 RELOCATABLE SELBIT 'ABS',6 ABSOLUTE SELBIT 'OMN',7 OMNIBUS . SELBIT 'UNT',*0 UNTYPED SYMBOLIC SELBIT 'ASS',*2 SYMBOLIC ASSEMBLY SELTBL* EQU ($-SELTAB)/2 END