SUBTTL DATA STRUCTURES ;********** STRUCTURE DEFINTIONS ********** FSTLEN__2 ;THIS WILL ACCUMULATE LONGEST BLOCK COMMENT  Normally, items must have the same format for the first two words: This is depended on in many routines (like FNDCLS)  SBLOCK QOMMON HWDS (QLH,QNXT) ;... NEXT POINTER HWDS (QX,QY,E,E)  INDEX__INDEX-1 FWD (QXY)  INDEX__INDEX-1 HWDS (Q2LH,Q2RH) EBLOCK QOMMON NIL, ;ARGUMENT LIST FOR DIPRED, LIST OF BODIES, AND DIPTYPES TO GET ; FROM DIPS.DIP FILE SBLOCK GETDIP HWDS (GDIP,GNXT) ;PTR TO DIPNAME NEXT HWDS (GFLAG,GBDY) ;FLAG BODY OR TYPE INDEX__INDEX-1 FWD (GFBDY) EBLOCK GETDIP ;FLAG is -1 if diptype came from type ;TYPE - BODY DEFINITIONS MD,< ;***************************** ;*** TYPE DEFINITION BLOCK *** ;***************************** SBLOCK TYPE HWDS (TLIB,TNAM) ;LIBRARY POINTER NAME (LH 1ST WD IS DIP TYPE NAME PTR)?? HWDS (TYP1,TNXT) ;*+1, OR 0 NEXT TYPE HWDS (TYP2,TPIN) ;*+2 PINLOC LIST HWDS (TPROP,TLIN) ;PROPERTY LIST DISPLAY DEFINITION HWDS (TBIT,TYP3) ;TYPE BITS *+2 (0 IF USING DEFAULT CHAR OFFSET) HWDS (TX,TY,E,E) ;DEFAULT LOC OFFSET (X,Y) INDEX__INDEX-1 FWD (TXY) ; FOR SIMUL ACCESS HWDS (TPAK,TDEF) ;PACKAGE CODE DIP DEF LIST (0 IF NOT IN) HWDS (TOX,TOY,E,E) ;DEFAULT CHAR OFFSET (X,Y) INDEX__INDEX-1 FWD (TOXY) EBLOCK TYPE NIL, ;FOR @CREF LISTING ;IF TYP1 IS 0, THEN ONLY FIRST 2 WDS ARE PRESENT, TYPES ARE ABBREVIATED IF ;PRESENT IN LIBRARY BUT NOT USED IN DRAWING SBLOCK STYP HWDS (SLIB,SNAM) HWDS (SYP1,SNXT) EBLOCK STYP ;DISPLAY DEFINITION ; --,, next ; X,, Y ; low order bit ; 0 = invisible ; 1 = visible ;***************************** ;*** TPIN BLOCK (D) *** ;***************************** SBLOCK TYPIN HWDS (TP1,TPNX) ;*+2 NEXT HWDS (TPX,TPY,E,E) ; LOCATION OF PIN ON BODY INDEX__INDEX-1 FWD (TPXY) ;FOR FULL REFERENCE HWDS (TPBIT,TPID) ;PIN BITS PIN ID HWDS (TPPOS,TPNAM) ;PIN POS PIN NAME EBLOCK TYPIN NIL, ;TPNX MUST BE IN 1ST WORD ;PIN POS: ; BYTE (7)X(7)Y(4) 8 POSITION CODE ; X,Y ARE 2'S COMPL ;******************************************************** ;*** TYPE DIP DEF LIST - DIP DEFINITION FROM DIPS.DIP *** ;******************************************************** SBLOCK DDEF HWDS (DDNPN,DDNXT) ;# PINS DEFINED DIPDEF LIST HWDS (,DDMAX) ; MAX SEC # EBLOCK DDEF NIL, SBLOCK DIPDEF HWDS (DPNM,DPNXT) ;PIN NAME NEXT HWDS (DPSEC,DPPIN) ;SECTION BITS SECTION PIN # EBLOCK DIPDEF NIL, >;MD ;TYPE DEFINITIONS (PC) MPC,< ;******************************************************** ;*** TYPE DEFINITION (PC) *** ;******************************************************** SBLOCK TYPE HWDS (TNAM,TNXT) ;NAME (=# PINS USUALLY) NEXT POINTER HWDS (TDPY,TPIN) ;APPROX BOX TPIN LIST EBLOCK TYPE NIL, ;******************************************************** ;*************** TPIN BLOCK (PC) ****************** ;******************************************************** SBLOCK TYPIN HWDS (TPID,TPNX) ;PIN ID NEXT PTR HWDS (TPX,TPY,E,E) ;PIN OFFSET INDEX__INDEX-1 FWD (TPXY) ;FOR FULL REFERENCE EBLOCK TYPIN NIL, >;MPC ;POINTS ;BPBIT and PBIT are assumed to be in LH in many places ;******************************************************** ;*************** BODY POINT ********************* ;******************************************************** SBLOCK BPOINT HWDS (BP1,BPNXT) ;*+2 NEXT HWDS (BPX,BPY,E,E) ;POINT LOC X,Y INDEX__INDEX-1 FWD (BPXY) HWDS (BBODY,BPLNK) ;BODY PIN LINK HWDS (BPNEB,BP3) ;NEIGHBORS *+1 HWDS (BPTXT,BPLOC) ;POINT TEXT PINLOC BLOCK IN TYPE HWDS (BPBIT,BPPN) ;BITS PIN# OR PAD# MD,< ;NEIGHBOR BLOCK ONLY FOR D ;PC HAS LIST OF POSSIBLY MORE THAN 4 NEIGHBORS HWDS (BPND,BPNU) ;NEIGHBORS HWDS (BPNL,BPNR) >;MD EBLOCK BPOINT NIL, ;IF PC, PAD# IS 1 OR 3 ;IF PC, BPNEB IS LIST OF FORM: ; NEIGHBOR1,, NEXT ; NEIGHBOR3,, NEIGHBOR2 ;******************************************************** ;*** POINT OR CPIN *** - MUST BE CONGRUENT WITH BPOINT ;******************************************************** SBLOCK POINT HWDS (P1,PNXT) ;*+2 NEXT HWDS (PX,PY,E,E) ;POINT LOCN X,Y INDEX__INDEX-1 FWD (PXY) HWDS (PFEED,PID) ;0 OR FEEDTHRU POINT ID HWDS (PNEB,P3) ;NIGHBORS *+1 HWDS (PTXT,PLOC) ;TEXT LOCATION HWDS (PBIT,PIN) ;POINT BITS PIN # OR PAD # MD,< HWDS (PND,PNU) ;NEIGHBORS L,R HWDS (PNL,PNR) ;NEIGHBORS UP,DOWN ? >;MD EBLOCK POINT NIL, ;PLOC IS 0 UNLESS CPIN ON IN PBIT ;FORMAT OF LOCN BLOCK IN D ; B-R-S,, CPIN-LOC/PIN# (18 PIN FORMAT) ; CONSTANT OFFSET X,Y ;FORMAT OF LOCN BLOCK IN PC ; 0,, SOCKET# ??? ; CONSTANT OFFSET X,Y ;TEXT STRINGS AND PROPERTY BLOCKS ;******************************************************** ;*************** TYPE TEXT/PROPERTY BLOCK *************** ;******************************************************** SBLOCK TEXT HWDS (TXBIT,TXNXT) ;BITS NEXT HWDS (T.X,T.Y,E,E) ;TEXT LOC X TEXT LOC Y INDEX__INDEX-1 FWD (TXXY) INDEX__INDEX-1 HWDS (,TXIND) ; -- INDIRECT POINTER HWDS (TXNAM,TXVAL) ;PROPERTY NAME (0 IF NONE) PROPERTY VALUE HWDS (TXOX,TXOY,E,E) ;CONSTANT OFFSET X,Y INDEX__INDEX-1 FWD (TXOFF) EBLOCK TEXT NIL, ;If TXBIND is on in TXBIT, then is indirect. TXIND points to TEXT block in type. ;low bit of TXXY is used to mean auto-offset ;1,, bit of TXXY is sometimes used for flag ;"0" size text not displayed unless IDENTS is on. COMMENT  STANDARD TEXT FORMAT: ------------ ! ----!------ ! CHAR ----!--- NEXT 5 ! ! ! SIZE ! CHARS !-------!-------! !-------!-------! !CONSTANT OFFSET! ! ! ! X Y ! ! 5 CHARS ! !-------!-------! !---------------! OFFSET IS SCALED WITH TEXT SIZE, NOT DRAWING SCALE.  SBLOCK TEXCOF HWDS (,TCSTR) ;... BARE TEXT STRING HWDS (TCX,TCY,E,E) ;CONSTANT OFF. X Y INDEX__INDEX-1 FWD (TCXY) EBLOCK TEXCOF SBLOCK TEXSTR HWDS (TSSIZ,TSNXT) ;CHAR-SIZE NEXT FWD (TSASC) ; ASCII CHARS EBLOCK TEXSTR ;BODY INSTANCE ;************************************************** ;*************** BODY INSTANCE ************ ;************************************************** SBLOCK BODY HWDS (BOD1,BNXT) ;*+2 NEXT HWDS (BX,BY,E,E) ;BODY LOCN X,Y INDEX__INDEX-1 FWD (BXY) ; FOR REFERENCE TOGETHER HWDS (BORI,BLNK) ;ORIENTATION PIN LINK - THRU ALL PINS ON BODY HWDS (BOD2,BTYP) ;*+1 TYPE MPC,< HWDS (BID,BLN) ;BODY ID BYTE (6)L(12)N HWDS (BBIT,BNAM) ;BODY BITS DIP TYPE NAME STRING >;MPC MD,< HWDS (BID,BLOC) ;BODY ID *+2 (0 IF NO LOC SET) HWDS (BBIT,BTXT) ;BODY BITS BODY TEXT/PROPERTY LIST (MUST BE RH) HWDS (BOD3,) ;*+2 UNUSED HWDS (BLX,BLY,E,E) ;BODY LOCN CONSTANT OFFSET X,Y INDEX__INDEX-1 FWD (BLXY) HWDS (BBRS,BSOC) ;LOC BAY-RACK-SLOT SOCKET # INDEX__INDEX-1 FWD (BRSLOC) ;B-R-S,,BODY-LOC HWDS (BLOX,BLOY,E,E) ;BODY LOCN CHAR OFFSET X,Y INDEX__INDEX-1 FWD (BLO) HWDS (BPAK,BDEF) ;PACKAGE CODE DIP DEF LIST (IF BODY HAS DIPTYPE) >;MD EBLOCK BODY NIL, ;If TXBIND is set in TXBIT, then this is indirect pointer to text/prop block ;in type. TXIND is pointer. ;If a BODY has any props at all, then it contains also indirect pointers ;to all props that were in its type. All or none. DEFINE FETPAK (A,B) < FETCH(A,B,BPAK) JUMPN A,.+3 FETCH(A,B,BTYP) FETCH(A,A,TPAK) > IFIDN < PUSH P,A FETCH(A,A,BPAK) JUMPE A,[POP P,A FETCH(A,A,BTYP) FETCH(A,A,TPAK) JRST .+2] SUB P,[1,,1] > >