C C ************************************************************************ C * C THIS PROGRAM IS PROVIDED ON AN "AS IS" BASIS ONLY. DIGITAL EQUIPMENT * C COMPUTER USER'S SOCIETY, DIGITAL EQUIPMENT CORPORATION, MONSANTO, AND * C THE AUTHOR DISCLAIM ALL WARRANTIES ON THE PROGRAM, INCLUDING WITHOUT * C LIMITATION, ALL IMPLIED WARRANTIES OF MERCHANTABLITY AND FITNESS. * C * C FULL PERMISSION AND CONSENT IS HEREBY GIVEN TO DECUS AND TO THE DECUS * C SPECIAL INTEREST GROUPS TO REPRODUCE, DISTRIBUTE, AND PUBLISH AND * C PERMIT OTHERS TO REPRODUCE IN WHOLE OR IN PART, IN ANY FORM AND * C WITHOUT RESTRICTION, THIS PROGRAM AND ANY INFORMATION RELATING THERETO * C * C ************************************************************************ C C C C CONTENTS C -------- C C NAME DESCRIPTION C ____ ___________ C C C LIBIN READ IN AND BUILD USER SYMBOL TABLE C MAP $MAP DIRECTIVE PROCESSOR C PLANE $PLANE DIRECTIVE PROCESSOR C CNECTR $CONNECTO DIRECTIVE PROCESSOR SUBROUTINE LIBIN C C C ************************************************************************ C * C THIS PROGRAM IS PROVIDED ON AN "AS IS" BASIS ONLY. DIGITAL EQUIPMENT * C COMPUTER USER'S SOCIETY, DIGITAL EQUIPMENT CORPORATION, MONSANTO, AND * C THE AUTHOR DISCLAIM ALL WARRANTIES ON THE PROGRAM, INCLUDING WITHOUT * C LIMITATION, ALL IMPLIED WARRANTIES OF MERCHANTABLITY AND FITNESS. * C * C FULL PERMISSION AND CONSENT IS HEREBY GIVEN TO DECUS AND TO THE DECUS * C SPECIAL INTEREST GROUPS TO REPRODUCE, DISTRIBUTE, AND PUBLISH AND * C PERMIT OTHERS TO REPRODUCE IN WHOLE OR IN PART, IN ANY FORM AND * C WITHOUT RESTRICTION, THIS PROGRAM AND ANY INFORMATION RELATING THERETO * C * C ************************************************************************ C C C VERSION: V01.02 C C AUTHOR: RL AURBACH MAPS 1-SEP-78 C C THIS ROUTINE READS IN THE USER SYMBOL TABLE (FROM THE FILE UST.DAT) C AND USES THE INFORMATION IN IT TO CREATE SYMBOL TABLES IN USER COMMON. C C COMPILATION INSTRUCTIONS: C C LIBIN,LIBIN/-SP=LIBIN C [FILE WIRCOM.FTN INCLUDED] C [FILE LEXATT.COM INCLUDED] C [FILE IOPAR.COM INCLUDED] C [FILE PARSE.COM INCLUDED] C C MODIFICATION HISTORY: C C V01.00 EAS/RC 18-SEP-75 ORIGINAL CODE C V01.01 RLA 31-MAR-78 ADD NEW FIELDS IN TABLE C V01.02 RLA 1-SEP-78 REORGANIZE INCLUDED COMMON AREAS C C C PAGE 2 - LIBIN - DOCUMENTATION. C C THE ROUTINE OPENS THE USER SYMBOL TABLE FILE (UST.DAT) AND READS C THE DATA FROM IT INTO VARIOUS ARRAYS IN SYSTEM COMMON. C THE ROUTINE HANDLES TABLE ENTRY IN FORMAT-FREE FASHION. THAT IS, C BLANK LINES, COMMENTS, ETC. IN THE FILE ARE IGNORED. C C THE STRUCTURE OF THE UST.DAT FILE CONSISTS OF MANY ONE LINE (<= 132 CHARS) C DEVICE DESCRIPTIONS. THE FORMAT FOR THE LINE IS GIVEN BELOW. OPTIONAL C FIELDS ARE INDICATED BY ENCLOSING THEM IN SQUARE BRACKETS. C C NAME SPC [ELECT] PINS [DTYPE [CONN]] [;COMMENT] C C WHERE NAME IS THE NAME SYMBOL (UP TO 8 CHARS) C SPC IS THE SPACING SYMBOL (UP TO 8 CHARS) C ELECT IS THE ELECTRICAL SYMBOL (UP TO 8 CHARS) C PINS IS THE INTEGER NUMBER OF PINS FOR THE DEVICE C DTYPE IS THE INTEGER DEVICE TYPE C CONN IS THE CONNECTOR SYMBOL (UP TO 8 CHARS) (ONLY IF DEVICE IS C A CONNECTOR) C COMMENT IS A COMMENT DESCRIBING THE DEFINED DEVICE C C IN ALL CASES, SYMBOLS MUST BEGIN WITH A LETTER (A-Z UPPER CASE ONLY) AND C MUST CONSIST SOLELY OF UPPER CASE LETTERS AND NUMBERS (0-9). C C THE NAME SYMBOL IS USED TO IDENTIFY WHAT DEVICE IS BEING PLACED AT A GIVEN C LOCATION IN THE MAP PHASE. THIS SYMBOL APPEARS IN THE SOURCE FILE. C C THE SPACING SYMBOL IS USED TO FIND THE PROPER ENTRY IN THE SPACING FILE C SPSYM.DAT ASSOCIATED WITH THE DEVICE. THIS SYMBOL MUST AGREE EXACTLY C WITH THE APPROPRIATE SYMBOL MARKING AN ENTRY IN THAT FILE. C C THE ELECTRICAL SYMBOL IS USED TO FIND THE PROPER ENTRY IN THE ELECTRICAL C CHARACTERISTICS FILE ELSYM.DAT ASSOCIATED WITH THAT DEVICE. IF ABSENT, C THE ELECTRICAL CHARACTERISTICS OF ANY USED PINS MUST BE EXPLICITLY DEFINED C IN THE MAP PHASE. THE PROGRAM WILL DEFINE ALL PINS TO BE UNUSED UNLESS C OVERWITTEN IN THE MAP PHASE IF THE SYMBOL IS MISSING. AN EXCEPTION TO THIS C IS THE CASE OF AN IC WITH USER-DEFINABLE PINS. IN THIS CASE, THE DEFAULT C ASSIGNMENTS ARE "DONT CARE". C C THE DEVICE TYPE IS ONE OF THE FOLLOWING: C 0 REGULAR INTEGRATED CIRCUIT C 1 INTEGRATED CIRCUIT WITH USER DEFINABLE PINS C [2 SPECIAL DEVICE DEFINED BY #PINS IN MAP PHASE] C [3 GROUND PLANE] C [4 +5 V DC POWER PLANE] C 5 CONNECTOR C [12 POSITIVE ANALOG POWER PLANE] C [13 NEGATIVE ANALOG POWER PLANE] C [14 ANALOG GROUND PLANE] C [15 OTHER (UNDEFINED) PLANE] C THE TYPES IN BRACKETS ARE DEVICE TYPES USED IN CHAIN PROCESSING WHICH C LOGICALLY MAY NEVER APPEAR IN THE UST.DAT FILE. C C PAGE 2 A - LIBIN - DOCUMENTATION (CONTINUED) C C C THE CONNECTOR SYMBOL (WHICH ONLY APPEARS IF THE DEVICE TYPE IS EQUAL TO 5) C IS USED TO FIND THE PROPER TABLE ENTRY IN THE CONNECTOR PIN NAME FILE C PNSYM.DAT. THE PROGRAM SUPPORTS SYMBOLIC NAMES FOR CONNECTOR PINS AND C THIS SYMBOL IS USED TO HELP FIND THE APPROPRIATE NAMES FOR THE PINS. C C THE ARRAY STORAGE FOR THE FIELDS READ FROM THE UST.DAT FILE WILL BE C INDICATED BELOW. C C CALLING SEQUENCE: C C CALL BY: CALL LIBIN C C C C ON EXIT: APPROPRIATE AREAS OF THE COMMON AREA "WORK" HAVE C BEEN USED AS TEMPORARY STORAGE FOR THE INFORMATION C IN UST.DAT. C C ERROR CONDITIONS: C C THE FOLLOWING FATAL ERRORS ARE DETECTED AND RESULT IN PROGRAM ABORT: C OPEN FAILURE ON FILE UST.DAT C ERROR READING UST.DAT C SYNTAX ERROR FOUND IN UST.DAT C C SPECIAL NOTES: C C NONE C C SUBROUTINES CALLED: C C GETLEX POP SAVE RESTORE TRANS DSKMSG C C PAGE 3 - LIBIN - DATA STORAGE DESCRIPTIONS. C C CALLING PARAMETERS: C C C PARAMETER STATEMENTS C INCLUDE 'WIRCOM.FTN' INCLUDE 'LEXATT.COM' INCLUDE 'IOPAR.COM' INCLUDE 'PARSE.COM' C C LOCAL VARIABLE AND ARRAY DEFINITIONS: C INTEGER ITMP !GETLEX ASSOCIATED VARIABLE INTEGER LIBSZ1 !INDEX INTO ARRAYS BUILT FROM UST.DAT INTEGER I !DUMMY VARIABLE C C COMMON AREAS C INTEGER LIBSIZ !NUMBER OF ENTRIES IN UST.DAT BYTE UST1(8,IUSTLN) !STORAGE FOR NAME FIELD BYTE SPSYM(8,IUSTLN) !STORAGE FOR SPACING SYMBOL FIELD BYTE ELSYM(8,IUSTLN) !STORAGE FOR ELECTRICAL SYMBOL FIELD BYTE LPINS(IUSTLN) !STORAGE FOR NUMBER OF PINS FIELD BYTE DTYPE(IUSTLN) !STORAGE FOR DEVICE TYPE FIELD BYTE CONN(8,IUSTLN) !STORAGE FOR CONNECTOR FIELD BYTE IW(2+34*IUSTLN) !WORK SPACE ALLOCATION EQUIVALENCE (LIBSIZ,IW(1)) EQUIVALENCE (UST1(1,1),IW(3)) EQUIVALENCE (SPSYM(1,1),IW(3+8*IUSTLN)) EQUIVALENCE (ELSYM(1,1),IW(3+16*IUSTLN)) EQUIVALENCE (LPINS(1),IW(3+24*IUSTLN)) EQUIVALENCE (DTYPE(1),IW(3+25*IUSTLN)) EQUIVALENCE (CONN(1,1),IW(3+26*IUSTLN)) COMMON / WORK / IW C C C LOCAL VARIABLE AND ARRAY INITIALIZATION: C C C PAGE 4 - LIBIN C C C OPEN UST.DAT ON LUN ISYS2, SAVING THE STATE OF THE SYSTEM FOR FURTHER C INPUT C OPEN (UNIT=ISYS2,NAME='UST.DAT',READONLY,TYPE='OLD',ERR=1000) CALL SAVE ISYSIN=ISYS2 LIBSIZ=0 C C SCAN UST.DAT FOR NEXT NAME FIELD C 10 CALL GETLEX(ITMP) GOTO (210,10,10,20,11) ITMP 11 LEXSP=LEXMX+1 12 NEWLIN=.TRUE. GOTO 10 C C FOUND IT. STORE IT IN UST1 AND GO AFTER THE REST OF THE LINE C 20 LIBSZ1=LIBSIZ+1 !INDEX THE NEXT FREE ENTRY IN THE TABLES IF (LIBSZ1 .GT. IUSTLN) CALL DSKMSG(85,4) !TABLE OVERFLOW CALL TRANS(UST1(1,LIBSZ1)) !TRANSFER THE SYMBOL TO UST1 21 CALL GETLEX(ITMP) !LOOK FOR SPACING SYMBOL GOTO (2000,2000,21,30,2000) ITMP C C FOUND SPACING SYMBOL. STORE IT AWAY AND LOOK FOR EITHER THE OPTIONAL C ELECTRICAL SYMBOL OR (IF NOT FOUND) THE NUMBER OF PINS FIELD. C 30 CALL TRANS(SPSYM(1,LIBSZ1)) !STORE THE SPACING SYMBOL 31 CALL GETLEX(ITMP) !GET NEXT LEXICAL TOKEN GOTO (2000,2000,31,40,45) ITMP C C NO ELECTRICAL SYMBOL SPECIFIED. SET ELSYM ENTRY TO ZERO AND PROCESS C THE NUMBER OF PINS. C 45 DO 46 I=1,8 46 ELSYM(I,LIBSZ1)=0 GOTO 50 C C FOUND THE ELECTRICAL SYMBOL. STORE IT AND LOOK FOR NUMBER OF PINS C 40 CALL TRANS(ELSYM(1,LIBSZ1)) !STORE THE ELECTRICAL SYMBOL 41 CALL GETLEX(ITMP) !GET NEXT TOKEN GOTO (2000,2000,41,2000,50) ITMP C C PAGE 5 - LIBIN C C C FOUND THE NUMBER OF PINS. STORE IT AND SEARCH FOR THE OPTIONAL C DEVICE TYPE. C 50 CALL POP(ITMP) !PUT THE NUMBER OF PINS INO ITMP LPINS(LIBSZ1)=ITMP 51 CALL GETLEX(ITMP) !LOOK FOR THE DEVICE FIELD GOTO (210,55,51,2000,60) ITMP C C NO DEVICE TYPE SEEN. SET DEVICE TYPE TO ZERO AND CONNECTOR SYMBOL C TO ALL BLANKS. THEN GO GET THE NEXT LINE. C 55 DTYPE(LIBSZ1)=0 56 DO 57 I=1,8 57 CONN(I,LIBSZ1)=0 58 LIBSIZ=LIBSZ1 NEWLIN=.TRUE. GOTO 10 C C DEVICE TYPE SEEN. CHECK FOR LEGAL VALUES (0,1,OR 5). C STORE THE DEVICE TYPE. IF DTYPE = 5, CHECK FOR CONNECTOR SYMBOL C ELSE IGNORE THE REST OF THE LINE AND GO GET ANOTHER LINE C 60 CALL POP(ITMP) IF (.NOT.((ITMP .EQ. 0).OR.(ITMP .EQ. 1).OR.(ITMP .EQ. 5))) 1 CALL DSKMSG(86,5) DTYPE(LIBSZ1)=ITMP IF (ITMP .NE. 5) GOTO 58 61 CALL GETLEX(ITMP) GOTO (56,56,61,70,2000) ITMP C C CONNECTOR SYMBOL SEEN. STORE IT, SET NEWLIN = .TRUE., AND GO GET C THE NEXT LINE C 70 CALL TRANS(CONN(1,LIBSZ1)) GOTO 58 C C END OF TABLE HANDLER C STUFF A ZERO INTO UST1 (AS A TERMINATOR SYMBOL) C RESTORE THE PREVIOUS SYSTEM STATE, C CLOSE UST.DAT C 210 UST1(1,LIBSIZ+1)=0 CLOSE (UNIT=ISYS2) CALL RESTOR RETURN C C PAGE 6 - LIBIN C C C ERROR HANDLERS C C OPEN FAILURE HANDLER C 1000 CALL MSG(23,4) C C READ ERROR HANDLER C 2000 IF (ICODE .EQ. 2) CALL DSKMSG(24,4) C C SYNTAX ERROR HANDLER C CALL DSKMSG(25,5) C C END SUBROUTINE MAP C C C ************************************************************************ C * C THIS PROGRAM IS PROVIDED ON AN "AS IS" BASIS ONLY. DIGITAL EQUIPMENT * C COMPUTER USER'S SOCIETY, DIGITAL EQUIPMENT CORPORATION, MONSANTO, AND * C THE AUTHOR DISCLAIM ALL WARRANTIES ON THE PROGRAM, INCLUDING WITHOUT * C LIMITATION, ALL IMPLIED WARRANTIES OF MERCHANTABLITY AND FITNESS. * C * C FULL PERMISSION AND CONSENT IS HEREBY GIVEN TO DECUS AND TO THE DECUS * C SPECIAL INTEREST GROUPS TO REPRODUCE, DISTRIBUTE, AND PUBLISH AND * C PERMIT OTHERS TO REPRODUCE IN WHOLE OR IN PART, IN ANY FORM AND * C WITHOUT RESTRICTION, THIS PROGRAM AND ANY INFORMATION RELATING THERETO * C * C ************************************************************************ C C C VERSION: V02.01 C C AUTHOR: RL AURBACH MAPC 1-SEP-78 C C THIS ROUTINE HANDLES THE LAYOUT OF THE USER'S BOARD BY FILLING IN THE C NECESSARY BOARD-LAYOUT TABLES. THIS ROUTINE ONLY HANDLES INPUT FOR THE C $MAP COMMAND FORMAT. C C COMPILATION INSTRUCTIONS: C C MAP,MAP/-SP=MAP C [FILE WIRCOM.FTN INCLUDED] C [FILE LEXATT.COM INCLUDED] C [FILE ELECTR.COM INCLUDED] C [FILE SPCING.COM INCLUDED] C [FILE IOPAR.COM INCLUDED] C [FILE PARAM.COM INCLUDED] C [FILE PARSE.COM INCLUDED] C C MODIFICATION HISTORY: C C V01.00 EAS/RC 24-NOV-75 ORIGINAL CODE (SUBROUTINE LAYOUT) C V02.00 RLA 14-APR-78 MAJOR CHANGES IN THE DATA BASE C V02.01 RLA 1-SEP-78 REORGANIZE INCLUDED COMMON AREAS C C C PAGE 2 - MAP - DOCUMENTATION. C C MAP IS THE MODULE OF THE WIRE-WRAP PROGRAM RESPONSIBLE FOR BUILDING C THE USER'S BOARD LAYOUT TABLES FROM HIS INPUT. C THIS ROUTINE HANDLES INPUT FROM THE $MAP COMMAND ONLY. C THE ROUTINE SUPPORTS FORMAT-FREE INPUT IN THE SENSE THAT: C BLANK LINES ARE ALLOWED C COMMENTS ARE ALLOWED (COMMENTS BEGIN WITH A ; AND EXTEND TO THE END C OF THE LINE) C FIELDS MUST BE PRESENT IN THE SPECIFIED ORDER (WITH DEFAULTED FIELDS C SIMPLY ABSENT) BUT MAY BE SEPARATED BY ANY TERMINATOR CHARACTER. C TERMINATORS ARE ANY CHARACTER EXCEPT UPPER CASE A-Z AND 0-9. C (NOTE HOWEVER, THAT CERTAIN TERMINATORS SUCH AS $ HAVE SPECIAL MEANINGS) C (USUALLY SPACES, TABS, OR COMMAS ARE USED AS TERMINATORS) C C THE BASIC INPUT STRUCTURE CONSISTS OF A DEVICE SPECIFICATION LINE FOLLOWED C BY OPTIONAL PIN SPECIFICATION LINES. C C THERE ARE TWO TYPES OF DEVICE SPECIFICATION LINE-- NORMAL AND IMMEDIATE. C C THE NORMAL DEVICE SPECIFICATION LINE LOOKS LIKE: C NAME% LOC_SY X_BASE,Y_BASE C WHERE C NAME IS THE SYMBOLIC DEVICE NAME (WHICH MUST MATCH AN ENTRY IN C THE FIRST COLUMN OF THE UST.DAT FILE TABLE) C % IS AN OPTIONAL ROTATION SYMBOL. IF ABSENT, THE DEVICE IS C IN ITS NORMAL ORIENTATION. IF THE SYMBOL IS < THE DEVICE C IS ROTATED BY 90 DEGREES COUNTERCLOCKWISE. IF THE SYMBOL C IS ^ THE DEVICE IS ROTATED BY 180 DEGREES. IF THE SYMBOL C IS > THE DEVICE IS ROTATED BY 270 DEGREES. C LOC_SY IS A LOCATION SYMBOL WHICH INDICATES HOW THE USER WILL REFER C TO THAT CHIP IN THE CHAIN LIST. IF THE LOC_SY IS AN INTEGER, C THEN IN THE CHAIN LIST, THIS NUMBER MUST BE USED TO REFER TO C THIS DEVICE. THIS NUMBER WILL ALSO BE USED IN ALL OUTPUT OF C THE PROGRAM. THE LOC_SY MAY ALSO BE A SYMBOL (UP TO 4 CHARACTERS C WITH THE FIRST CHARACTER BEING ALPHABETIC), IN WHICH CASE THE C SYMBOL WILL BE USED FOR ALL REFERENCES BY THE USER OR THE PROGRAM C TO THAT DEVICE. C X_BASE IS THE X-AXIS OFFSET OF PIN 1 OF THE DEVICE. IT IS USED TO C CONVERT THE RELATIVE PIN OFFSETS (FROM THE SPACING TABLES) TO C REAL PIN POSITIONS. C Y_BASE IS THE Y-AXIS OFFSET OF PIN 1 OF THE DEVICE. C C A NORMAL DEVICE SPECIFICATION LINE IS LEGAL FOR DEVICES WHICH ARE CLASSIFIED C AS NORMAL IC'S (DEVICE TYPE 0) OR FOR DEVICES CLASSIFIED AS IC'S WITH USER- C DEFINABLE PINS (DEVICE TYPE 1). C ANY OTHER DEVICE TYPE PRODUCES AN ERROR. C C PAGE 2 A - DOCUMENTATION (CONTINUED) C C C PIN SPECIFICATION LINES MAY FOLLOW A NORMAL DEVICE DEFINITION. IF THEY DO, C THE LINES ARE INTERPRETED AS REFERRING TO THE JUST-DEFINED DEVICE. C THERE ARE TWO CASES: C 1. FOR NORMAL IC'S, PIN SPECIFICATIONS OVERRIDE THE EXISTING ELECTRICAL C TABLE INFORMATION (IF ANY) AND RESULT IN THE ALLOCATION OF AN AREA C IN THE ELECTRICAL TABLE. THIS AREA IS SET UP SO THAT ALL PINS NOT C SPECIFIED BY PIN SPECIFICATION LINES ARE DEFINED AS NOT USED. C 2. FOR USER-DEFINABLE IC'S, THE SAME PROCEDURE IS FOLLOWED EXCEPT THAT C UNSPECIFIED PINS ARE DEFINED AS "DON'T CARE" (5,0). C C THE PIN SPECIFICATION LINE FOR NORMAL DEVICE SPECIFICATION IS: C PIN_# ELEC,FAN C WHERE C PIN_# IS THE INTEGER NUMBER OF THE PIN (NO SYMBOLIC PIN DEFINITIONS C ALLOWED) C ELEC IS THE ELECTRICAL CODE FOR THE PIN (DISCUSSED ELSEWHERE, C PARTICULARLY IN THE DISCUSSION OF THE CHACHP ROUTINE) C FAN IS THE DEVICE LOADING COUNT. FOR AN OUTPUT PIN, IT IS THE C FANOUT. FOR AN INPUT PIN, IT IS THE NUMBER OF LOAD-UNITS C USED BY THE INPUT. C C C PAGE 2 B - MAP - DOCUMENTATION (CONTINUED) C C C THE OTHER TYPE OF DEVICE SPECIFICATION LINE IS THE IMMEDIATE SPECIFICATION. C THIS IS USED FOR SPECIAL PURPOSE DEFINITIONS WHERE THE DEFINED PINS ARE C SPECIALLY PLACED ON THE BOARD. FOR THESE SPECIAL ONE-TIME-ONLY CASES, IT IS C SILLY TO REQUIRE THAT THE SPACING INFORMATION BE PLACED IN THE SPACING TABLE. C A TYPICAL EXAMPLE WOULD BE SOME DISCRETE COMPONENT MOUNTED DIRECTLY ON THE C BOARD RATHER THAN ON A CARRIER. IN THIS CASE, THE IMMEDIATE-MODE DEVICE C SPECIFICATION ALLOWS THE USER TO CREATE A SPECIAL DEVICE WITH JUST THE C NUMBER OF PINS NEEDED, TO LOCATE THESE PINS WHEREEVER IS CONVENIENT, AND C TO DEFINE THE ELECTRICAL CHARACTERISTICS OF EACH PIN AT WILL. C C THE FORMAT FOR THE IMMEDIATE-MODE DEVICE SPECIFICATION IS: C #PIN LOC_SY X_BASE,Y_BASE C WHERE C # IS REQUIRED SYNTAX. THE SYMBOL IDENTIFIES THAT THE LINE IS C AN IMMEDIATE-MODE DEVICE SPECIFICATION LINE. C PIN IS THE INTEGER NUMBER OF PINS TO BE DEFINED FOR THIS DEVICE. C THESE SPECIAL DEVICES (WHICH ARE ASSIGNED DEVICE TYPE 2) C DO NOT HAVE SYMBOLIC NAMES. INSTEAD, THEY ARE GIVEN THE NAME C "#PIN". THAT IS, IF THE LINE WHERE #3 5 10,40 THEN THE DEVICE C WOULD HAVE THE NAME "#3" AND WOULD BE REFERED TO AS DEVICE 5. C LOC_SY IS USED AS ABOVE C X_BASE IS USED AS ABOVE C Y_BASE IS USED AS ABOVE C C AN IMMEDIATE-MODE DEVICE SPECIFICATION CAUSES THE ALLOCATION OF AREAS IN C BOTH THE SPACING AND ELECTRICAL TABLES. THE SPACING TABLE ENTRIES ARE ALL C SET TO ZERO AND THE ELECTRICAL ENTRIES ARE ALL SET TO "DON'T CARE" (5,0). C IF IT IS DESIRED TO CHANGE ANY OF THESE VALUES, A PIN SPECIFICATION LINE IS C REQUIRED. C C THE FORM OF AN IMMEDIATE MODE PIN SPECIFICATION LINE IS JUST THE SAME AS THE C FORM OF A NORMAL MODE PIN SPECIFICATION LINE EXCEPT THAT ADDITIONAL FIELDS C ARE NECESSARY TO CONVEY THE RELATIVE PIN SPACING INFORMATION REQUIRED. C THESE LINES LOOK LIKE: C PIN_# ELEC,FAN [X_REL,Y_REL] C WHERE C PIN_# IS THE NUMBER OF THE PIN (AS ABOVE) C ELEC IS THE ELECTRICAL CODE (AS ABOVE) C FAN IS THE LOADING FACTOR (AS ABOVE) C [ IS REQUIRED SYNTAX (INDICATES THE START OF THE RELATIVE OFFSET C FIELDS) C X_REL IS THE OFFSET OF THE X - COORDINATE OF THE PIN RELATIVE TO THE C X - COORDINATE BASE SPECIFIED IN THE DEVICE SPECIFICATION LINE C Y_REL IS THE OFFSET OF THE Y - COORDINATE OF THE PIN RELATIVE TO THE C Y - COORDINATE BASE SPECIFIED IN THE DEVICE SPECIFICATION LINE C ] IS OPTIONAL C C C PAGE 2 C - MAP - DOCUMENTATION (CONTINUED) C C C C NOTE: UNLIKE VERSION V01 OF THE ROUTINE (CALLED SUBROUTINE LAYOUT), C DEFAULTS ARE NOT SUPPORTED FOR DEVICE LOCATION SYMBOLS, OR BASE C BASE COORDINATES. C FAILURE TO INCLUDE THIS REQUIRED INFORMATION WILL CAUSE A FATAL C ERROR, SINCE THE PROGRAM CANNOT POSSIBLY WORK CORRECTLY UNDER SUCH C CIRCUMSTANCES. C C C THE BASIC OPERATION OF THE ROUTINE IS BASED ON THE CONCEPT OF THE PROCESSING C OF LEXICAL TOKENS AND INVOLVES THE INTIMATE USE OF THE ROUTINE GETLEX. C THE USER MUST UNDERSTAND THE USE OF GETLEX IN ORDER TO UNDERSTAND HOW THIS C ROUTINE FUNCTIONS. C C NOTE: SINCE NEGATIVE BASE AND RELATIVE OFFSETS ARE CONCEPTUALLY LEGAL, C THE - SIGN IS USED THROUGHOUT THIS ROUTINE AS AN ARITHMETIC OPERATOR C (INDICATING A NEGATIVE NUMBER) RATHER THAN AS A DASH OR HYPHEN. THIS C MEANS THAT THIS CHARACTER IS SPECIFICALLY EXCLUDED FROM BEING CONSIDERED C A TERMINATOR. DO NOT USE IT TO SEPARATE FIELDS! C C C C C CALLING SEQUENCE: C C CALL BY: CALL MAP C C C C ON EXIT: THE APPROPRIATE TABLE ENTRIES HAVE BEEN MADE C C ERROR CONDITIONS: C C ALL ERROR CONDITIONS ARE FATAL. HOWEVER, THE ROUTINE WILL TRY TO C SCAN ALL OF THE $MAP COMMAND INPUT BEFORE ABORTING THE PROGRAM. C THE LINES CAUSING ERRORS WILL BE LISTED, FOLLOWED BY AN ERROR MESSAGE. C C ERRORS INCLUDE: C UNDEFINED SYMBOL C MISSING FIELD IN SPECIFICATION LINE C ILLEGAL VALUE FOR A FIELD C C SPECIAL NOTES: C C NONE C C SUBROUTINES CALLED: C C GETLEX TRANS SEARCH POP TRANS4 HDRCHK C ALLOCE ALLOCS DSKMSG HDR C C PAGE 3 - MAP - DATA STORAGE DESCRIPTIONS. C C CALLING PARAMETERS: C C C PARAMETER STATEMENTS C INCLUDE 'WIRCOM.FTN' INCLUDE 'LEXATT.COM' INCLUDE 'ELECTR.COM' INCLUDE 'SPCING.COM' INCLUDE 'IOPAR.COM' INCLUDE 'PARAM.COM' INCLUDE 'PARSE.COM' C C LOCAL VARIABLE AND ARRAY DEFINITIONS: C INTEGER ITMP !GETLEX ASSOCIATED VARIABLE INTEGER NENT1 !CURRENT INTERNAL DEVICE NUMBER INTEGER IENTRY !INDEX INTO USER TABLES INTEGER IPINS !CURRENT NUMBER OF PINS LOGICAL NORMAL !.T. IF PROCESSING A NORMAL DEVICE LOGICAL COMPAR !LOGICAL FUNCTION NAME BYTE ISYM1 !'#' BYTE ISYM2 !'[' BYTE ISYM3 !'$' BYTE NSYM(3) !'<','^','>' REAL*8 SBTTL(3) !'COMPONENT LAYOUT' C C COMMON AREAS C INTEGER LIBSIZ !SIZE OF USER LIBRARY BYTE UST1(8,IUSTLN) !USER DEVICE NAME BYTE SPSYM(8,IUSTLN) !USER SPACING SYMBOL BYTE ELSYM(8,IUSTLN) !USER ELECTRICAL SYMBOL BYTE LPINS(IUSTLN) !USER NUMBER OF PINS BYTE DTYPE(IUSTLN) !USER DEVICE TYPE BYTE CONN(8,IUSTLN) !USER CONNECTOR SYMBOL INTEGER LIBENT(NMCHIP) !INTERNAL TO USER MAPPING BYTE IW(2+34*IUSTLN+2*NMCHIP) !WORK SPACE EQUIVALENCE (LIBSIZ,IW(1)) EQUIVALENCE (UST1(1,1),IW(3)) EQUIVALENCE (SPSYM(1,1),IW(3+8*IUSTLN)) EQUIVALENCE (ELSYM(1,1),IW(3+16*IUSTLN)) EQUIVALENCE (LPINS(1),IW(3+24*IUSTLN)) EQUIVALENCE (DTYPE(1),IW(3+25*IUSTLN)) EQUIVALENCE (CONN(1,1),IW(3+26*IUSTLN)) EQUIVALENCE (LIBENT(1),IW(3+34*IUSTLN)) COMMON / WORK / IW C C C LOCAL VARIABLE AND ARRAY INITIALIZATION: C DATA ISYM1,ISYM2,ISYM3 / '#', '[', '$' / DATA NSYM / '<', '^', '>' / DATA SBTTL / 'COMPONEN', 'T LAYOUT', ' ' / C C PAGE 4 - MAP C C C BEGIN LISTING ON A NEW PAGE. C CALL HDR(SBTTL) NEWLIN=.TRUE. C C *** READ A LINE. THIS LINE IS EITHER A DEVICE SPECIFICATION LINE, C A BLANK LINE (IGNORED), OR AN END-OF-COMMAND (INDICATED BY OBSERVING C A LINE BEGINNING WITH A $ OR BY AN EOF. C 10 CALL GETLEX(ITMP) GOTO (20,40,30,100,200) ITMP !DISPATCH C C STATEMENT 20 IS END-OF-LINE DISPATCHING CODE C STATEMENT 40 LISTS THE LINE AND GETS THE NEXT C STATEMENT 30 CHECKS FOR # OR $. C IF #, GO TO IMMEDIATE MODE CODE C IF $, RETURN (END-OF-COMMAND) C STATEMENT 100 IS THE NORMAL DEVICE SPECIFICATION LINE HANDLER C STATEMENT 200 IS THE PIN SPECIFICATION LINE HANDLER C C C *** END-OF-LINE CODE. IF EOF, RETURN. IF ERROR, DO ERROR HANDLING C AND ABORT. ELSE THIS IS THE END OF A LINE. RESET THE LEXICAL C STACK AND GET A NEW LINE. C 20 IF (ICODE .NE. 0) RETURN LEXSP=LEXMX+1 NEWLIN=.TRUE. GOTO 10 C C *** CHECK TO SEE IF THE TERMINATOR IS EITHER # OR $. IF #, BRANCH TO C IMMEDIATE-MODE HANDLER. IF $, RECOGNIZE END-OF-COMMAND AND RETURN. C ELSE IGNORE THE CHARACTER AND FETCH THE NEXT TOKEN. C 30 ITMP=LINBUF(NEXCHR-1) !ITMP IS THE TERMINATOR CHARACTER IF (ITMP .EQ. ISYM1) GOTO 300 !# FOUND IF (ITMP .EQ. ISYM3) RETURN !$ FOUND GOTO 10 !ELSE GET NEXT LEXICAL TOKEN C C *** EOL SEEN. PRINT THE LINE (TYPICALLY A BLANK LINE OR A COMMENT LINE) C THEN GO GET THE NEXT TOKEN (WHICH WILL BE THE FIRST TOKEN OF THE NEXT C LINE. C 40 CALL HDRCHK(SBTTL,1) WRITE (ISYSOU, 2020) (LINBUF(I),I=1,ICHAR) GOTO 20 C C PAGE 5 - MAP C C C *** NORMAL DEVICE SPECIFICATION LINE PROCESSOR. C C INDICATE A NEW ENTRY BY INCREMENTING THE INTERNAL CHIP NUMBER. C PUT THE NAME SYMBOL INTO ICNAME. C 100 NENT1=NENT+1 IF (NENT1 .GT. NMCHIP) CALL DSKMSG(87,5) CALL TRANS(ICNAME(1,NENT1)) C C CHECK TO SEE IF THE ICNAME IS IN THE USER TABLE (UST.DAT). IF IT IS, C FILL IN THE USER-TABLE-INDEX TABLE (LIBENT), AND THE NUMBER OF PINS C TABLE (INUM). ALSO SET THE FLAG THAT SAYS THAT WE ARE PROCESSING A C NORMAL DEVICE SPECIFICATION. WE ALSO WILL LOAD THE DEVICE TYPE INTO C ITYPE. C IF THE ICNAME IS NOT IN THE TABLE, DECLARE AN ERROR. C CALL SEARCH(UST1(1,1),LIBSIZ,ICNAME(1,NENT1),IENTRY) IF (IENTRY .EQ. 0) GOTO 1000 LIBENT(NENT1)=IENTRY IPINS=LPINS(IENTRY) INUM(NENT1)=IPINS NORMAL=.TRUE. ITYPE(NENT1)=DTYPE(IENTRY) C C IF THE DEVICE IS TYPE 1 (USER-DEFINABLE PINS), ALLOCATE SPACE C IN THE ELECTRICAL TABLE AND FILL IT WITH "DONT CARE'S" (5,0). C IF (ITYPE(NENT1) .NE. 1) GOTO 102 CALL ALLOCE(IELOC(NENT1),IPINS) DO 101 I=1,IPINS IPINEL(1,IELOC(NENT1)+I-1)=5 101 IPINEL(2,IELOC(NENT1)+I-1)=0 C C CHECK FOR A SPECIAL ROTATION TERMINATOR. IF A < IS SEEN, SET IROT=1, C IF ^ IS SEEN, SET IROT=2, IF > IS SEEN SET IROT=3. C 102 IROT(NENT1)=0 !ASSUME NO SPECIAL ROTATION TERMINATOR CALL GETLEX(ITMP) GOTO (1010,1010,103,120,110) ITMP 103 DO 104 I=1,3 IF (LINBUF(NEXCHR-1) .EQ. NSYM(I)) IROT(NENT1)=I 104 CONTINUE C C PAGE 6 - MAP C C C FETCH THE LOCATION SYMBOL C 105 CALL GETLEX(ITMP) GOTO (1010,1010,105,120,110) ITMP C C PROCESS THE LOCATION SYMBOL. IN THIS CASE THE LOCATION SYMBOL IS A C NUMBER. CHECK TO SEE WHETHER THIS NUMBER IS UNIQUE. INSERT IT INTO C ILOC AND MAKE THE APPROPRIATE IENT ENTRY. ENCODE THE INTEGER INTO A C 4-BYTE STRING IN SYMBOL. C 110 CALL POP(ITMP) IF (NENT .EQ. 0) GOTO 112 DO 111 I=1,NENT IF (ITMP .EQ. ILOC(I)) GOTO 1020 111 CONTINUE 112 ILOC(NENT1)=ITMP IENT(ITMP+1)=NENT1 ENCODE (4,2000,SYMBL(1,NENT1))ITMP GOTO 130 !GET BASE LOCATION C C PROCESS THE LOCATION SYMBOL. IN THIS CASE THE LOCATION SYMBOL IS AN C ALPHANUMERIC SYMBOL. CHECK TO SEE WHETHER THIS SYMBOL IS UNIQUE. C PUT -(INTERNAL CHIP NUMBER) INTO ILOC, LEAVE IENT ALONE, AND PLACE THE C SYMBOL INTO SYMBL. C 120 CALL TRANS4(SYMBL(1,NENT1)) IF (NENT .EQ. 0) GOTO 122 DO 121 I=1,NENT IF (COMPAR(SYMBL(1,NENT1),SYMBL(1,I),4)) GOTO 1020 121 CONTINUE 122 ILOC(NENT1)=-NENT1 C C NOW WE GET THE BASE VECTOR FOR THE DEVICE AND STORE IT IN ISBASE. C WE ALSO PRINT OUT THE LINE (WE ARE FINISHED PROCESSING IT), INCREMENT C THE NUMBER OF ENTRIES COUNTER (NENT), AND PREPARE FOR THE NEXT LINE. C 130 CALL GETLEX(ITMP) GOTO (1011,1011,130,1040,140) ITMP C 140 CALL GETLEX(ITMP) GOTO (1012,1012,140,1040,150) ITMP C 150 CALL POP(ITMP) ISBASE(2,NENT1)=ITMP CALL POP(ITMP) ISBASE(1,NENT1)=ITMP NENT=NENT1 GOTO 40 C C PAGE 7 - MAP C C C *** PIN SPECIFICATION LINE PROCESSING C C C CHECK TO SEE IF SPACE HAS BEEN ALLOCATED YET IN THE ELECTRICAL C TABLES. IF NOT, ALLOCATE SOME. C 200 IF (IELOC(NENT) .NE. 0) GOTO 220 CALL ALLOCE(IELOC(NENT),IPINS) C C GET THE ELECTRICAL CODE (ON THE STACK) C 220 CALL GETLEX(ITMP) GOTO (1013,1013,220,1040,230) ITMP C C GET THE LOADING FACTOR (ON THE STACK) C 230 CALL GETLEX(ITMP) GOTO (1014,1014,230,1040,240) ITMP C C IF NORMAL IC, GO TO PROCESS THIS DATA. IF NOT A NORMAL IC, THEN C SEARCH FOR SPACING DATA AND PUT IT ON THE STACK C 240 IF (NORMAL) GOTO 280 241 CALL GETLEX(ITMP) GOTO (1015,1015,245,1040,1040) ITMP 245 IF (LINBUF(NEXCHR-1) .NE. ISYM2) GOTO 241 C C THE [ HAS BEEN FOUND. GET THE X_REL VALUE ON THE STACK. C 250 CALL GETLEX(ITMP) GOTO (1016,1016,250,1040,260) ITMP C C NOW GET THE Y_REL VALUE ON THE STACK C 260 CALL GETLEX(ITMP) GOTO (1017,1017,260,1040,270) ITMP C C NOW WE CHECK TO SEE IF SPACE HAS BEEN ALLOCATED FOR THE DEVICE IN C THE SPACING TABLE. IF NOT, ALLOCATE SOME. C 270 IF (ISLOC(NENT) .NE. 0) GOTO 275 CALL ALLOCS(ISLOC(NENT),IPINS) C C PAGE 8 - MAP C C C CHECK TO SEE IF THE SPECIFIED PIN IS LEGAL (IT MUST BE POSITIVE AND C NOT LARGER THAN THE NUMBER OF PINS ALLOCATED FOR THE DEVICE) C IF IT IS, PUT THE PIN SPACING INFORMATION INTO THE SPACING TABLE. C 275 ITMP=LEXSTK(LEXSP+4) IF ((ITMP .GT. IPINS) .OR. (ITMP .LE. 0)) GOTO 1070 IPINSP(2,ITMP+ISLOC(NENT)-1)=LEXSTK(LEXSP) IPINSP(1,ITMP+ISLOC(NENT)-1)=LEXSTK(LEXSP+1) LEXSP=LEXSP+2 C C NOW WE PUT THE ELECTRICAL DATA INTO THE ELECTRICAL TABLES. C 280 ITMP=LEXSTK(LEXSP+2) IF ((ITMP .GT. IPINS) .OR. (ITMP .LE. 0)) GOTO 1070 IPINEL(2,ITMP+IELOC(NENT)-1)=LEXSTK(LEXSP) IPINEL(1,ITMP+IELOC(NENT)-1)=LEXSTK(LEXSP+1) ITMP=LEXSTK(LEXSP+1) IF ((ITMP .GT. MXELCD) .OR. (ITMP .LT. 0)) CALL DSKMSG(91,5) LEXSP=LEXSP+2 C C DONE WITH THIS LINE. WRITE IT OUT AND GO GET THE NEXT ONE C GOTO 40 C C PAGE 9 - MAP C C C *** IMMEDIATE MODE DEVICE SPECIFICATION C C C GET THE NUMBER OF PINS FOR THE DEVICE. C INDICATE A NEW ENTRY AND ENCODE A DEVICE NAME #PINS INTO ICNAME. C 300 CALL GETLEX(ITMP) GOTO (1018,1018,1040,1040,310) ITMP 310 CALL POP(IPINS) NENT1=NENT+1 ENCODE (8,2010,ICNAME(1,NENT1)) IPINS C C FILL IN THE INUM TABLE ENTRY. SINCE THE DEVICE IS NOT IN THE USER C TABLES, ZERO THIS LOCATION OF LIBENT. SET THE NORMAL FLAG .FALSE. C AND INSERT A DEVICE TYPE OF 2 INTO ITYPE. C INUM(NENT1)=IPINS LIBENT(NENT1)=0 NORMAL=.FALSE. ITYPE(NENT1)=2 C C FINALLY, SET IROT TO ZERO (IMMEDIATE DEVICES MAY NOT BE ROTATED) C ALLOCATE SPACE IN THE ELECTRICAL TABLE AND FILL IT WITH 5,0 CODES. C JOIN THE NORMAL DEVICE SPECIFICATION PROCESSING TO PICK UP THE C REST OF THE INFORMATION ON THE LINE. C IROT(NENT1)=0 CALL ALLOCE(IELOC(NENT1),IPINS) DO 320 I=1,IPINS IPINEL(1,IELOC(NENT1)+I-1)=5 320 IPINEL(2,IELOC(NENT1)+I-1)=0 GOTO 105 C C PAGE 10 - MAP C C C *** ERROR HANDLERS C 1000 CALL DSKMSG(26,3) GOTO 20 C 1010 CALL DSKMSG(27,3) GOTO 20 C 1011 CALL DSKMSG(94,3) GOTO 20 C 1012 CALL DSKMSG(95,3) GOTO 20 C 1013 CALL DSKMSG(96,3) GOTO 20 C 1014 CALL DSKMSG(97,3) GOTO 20 C 1015 CALL DSKMSG(98,3) GOTO 20 C 1016 CALL DSKMSG(99,3) GOTO 20 C 1017 CALL DSKMSG(100,3) GOTO 20 C 1018 CALL DSKMSG(101,3) GOTO 20 C 1020 CALL DSKMSG(28,3) GOTO 20 C 1040 CALL DSKMSG(29,3) GOTO 20 C 1070 CALL DSKMSG(30,3) GOTO 20 C C *** FORMAT STATEMENTS C 2000 FORMAT (I4) C 2010 FORMAT ('#',I3,' ') C 2020 FORMAT (' ',132A1) C C END SUBROUTINE PLANE C C C ************************************************************************ C * C THIS PROGRAM IS PROVIDED ON AN "AS IS" BASIS ONLY. DIGITAL EQUIPMENT * C COMPUTER USER'S SOCIETY, DIGITAL EQUIPMENT CORPORATION, MONSANTO, AND * C THE AUTHOR DISCLAIM ALL WARRANTIES ON THE PROGRAM, INCLUDING WITHOUT * C LIMITATION, ALL IMPLIED WARRANTIES OF MERCHANTABLITY AND FITNESS. * C * C FULL PERMISSION AND CONSENT IS HEREBY GIVEN TO DECUS AND TO THE DECUS * C SPECIAL INTEREST GROUPS TO REPRODUCE, DISTRIBUTE, AND PUBLISH AND * C PERMIT OTHERS TO REPRODUCE IN WHOLE OR IN PART, IN ANY FORM AND * C WITHOUT RESTRICTION, THIS PROGRAM AND ANY INFORMATION RELATING THERETO * C * C ************************************************************************ C C C VERSION: V01.02 C C AUTHOR: RL AURBACH MAPC 7-DEC-78 C C THIS ROUTINE HANDLES THE LAYOUT OF THE USER'S BOARD BY FILLING IN THE C NECESSARY BOARD-LAYOUT TABLES. THIS ROUTINE ONLY HANDLES INPUT FOR THE C $PLANE COMMAND FORMAT. C C COMPILATION INSTRUCTIONS: C C PLANE,PLANE/-SP=PLANE C [FILE WIRCOM.FTN INCLUDED] C [FILE ELECTR.COM INCLUDED] C [FILE SPCING.COM INCLUDED] C [FILE IOPAR.COM INCLUDED] C [FILE PARAM.COM INCLUDED] C [FILE PLAIN.COM INCLUDED] C [FILE PARSE.COM INCLUDED] C C MODIFICATION HISTORY: C C V01.00 RLA 17-APR-78 ORIGINAL CODE C V01.01 RLA 1-SEP-78 REORGANIZE INCLUDED COMMON AREAS C V01.02 RLA 7-DEC-78 ADD A NEW ERROR MESSAGE (# 102). C C C PAGE 2 - PLANE - DOCUMENTATION. C C PLANE IS THE MODULE OF THE WIRE-WRAP PROGRAM WHICH IS RESPONSIBLE FOR C BUILDING THE USER'S BOARD LAYOUT TABLES FOR PLANES FROM HIS INPUT. C THIS ROUTINE HANDLES INPUT FROM THE $PLANE COMMAND ONLY. C THE ROUTINE SUPPORTS FORMAT-FREE INPUT IN THE SENSE THAT: C BLANK LINES ARE ALLOWED. C COMMENTS ARE ALLOWED (COMMENTS BEGIN WITH A ; AND EXTEND TO THE C END OF THE LINE) C FIELDS MUST BE PRESENT IN THE SPECIFIED ORDER (WITH DEFAULTED FIELDS C SIMPLY ABSENT) BUT MAY BE SEPARATED BY ANY TERMINATOR C CHARACTER.) C TERMINATORS MAY BE ANY CHARACTER EXCEPT UPPER CASE A-Z AND 0-9. C (NOTE HOWEVER, THAT CERTAIN TERMINATORS SUCH AS $ HAVE SPECIAL C SIGNIFICANCE. WITHIN AN INPUT LINE, SPACES, TABS, AND COMMAS C ARE THE MOST COMMONLY USED TERMINATORS). C C THE BASIC INPUT FORM CONSISTS OF A PLANE DEFINITION LINE FOLLOWED BY ONE C OR MORE LINES INDICATING THE LOCATION OF THE PINS BELONGING TO THAT PLANE. C C C PAGE 2 A - PLANE - DOCUMENTATION (CONTINUED). C C C C THE PLANE DEFINITION LINE LOOKS LIKE: C $PLANE NAME TYPE# {OPTION} {OPTION} C WHERE C $PLANE INDICATES THE TYPE OF COMMAND C NAME IS A SYMBOLIC NAME USED FOR THE PLANE (4 CHARACTERS MAX). C TYPICAL NAMES MIGHT BE GND FOR A GROUND PLANE, PWR FOR A C +5 VDC POWER PLANE, ETC. C TYPE# IS THE ELECTRICAL CODE ASSOCIATED WITH THE PLANE. THE C TYPE CODE MUST BE ONE OF THE FOLLOWING SIX POSSIBILITIES: C 3 FOR DIGITAL GROUND PLANE C 4 FOR +5 VDC POWER PLANE C 12 FOR POSITIVE ANALOG POWER PLANE (USUALLY +15VDC) C 13 FOR NEGATIVE ANALOG POWER PLANE (USUALLY -15VDC) C 14 FOR ANALOG GROUND PLANE (IF SEPARATE FROM THE C DIGITAL GROUND PLANE) C 15 FOR SOME OTHER PLANE (UNDEFINED) C THE TYPE MUST CORRESPOND TO THE TYPE OF PINS WHICH WILL BE C CONNECTED TO IT. FOR EXAMPLE, IF THE TYPE IS 3, ALL DEVICE (IC) C PINS WITH ELECTRICAL CODE 3 WILL BE HOOKED UP TO THIS PLANE C AUTOMATICALLY. C {OPTION}IS EITHER OR BOTH OF TWO OPTIONS FOR THE PLANE. IF PRESENT, THE C OPTION MUST MATCH THE OPTION SYMBOL EXACTLY. THE OPTION SYMBOLS C ARE: C CONNECT WHICH MEANS THAT THE PINS OF THE PLANE ARE NOT C ASSUMED TO BE INTERNALLY CONNECTED. IF C 'CONNECT' IS SPECIFIED, A CHAIN WILL BE C GENERATED WHICH WILL CONNECT EVERY PIN OF THE C PLANE. C JUMPER WHICH MEANS THAT THE IC'S ARE ALREADY JUMPER- C WIRED TO THE PLANE. IF 'JUMPER' IS SPECIFIED, C NO CHAINS WILL BE GENERATED TO CONNECT NORMAL C DEVICES (TYPES 0 AND 1) TO THE PLANE. OTHER C DEVICE TYPES (TYPES 2 -- IMMEDIATE MODE DEVICE C AND 5 -- CONNECTOR) WILL STILL HAVE ANY PLANE C CONNECTIONS MADE EXPLICITLY. IF JUMPER IS C SPECIFIED, A LIST OF ALL PINS WHICH MUST BE C JUMPERED TO THE PLANE WILL BE GENERATED. C C PAGE 2 B - PLANE - DOCUMENTATION (CONTINUED) C C C **** NOTE **** C C IF PINS ARE PRESENT WITH AN ELECTRICAL CODE WHICH CORRESPONDS TO SOME PLANE C BUT THE APPROPRIATE PLANE IS NOT SPECIFIED IN SOME $PLANE COMMAND, THEN A C CHAIN WILL BE GENERATED CONNECTING ALL SUCH PINS TOGETHER. C C C FOLLOWING THE PLANE SPECIFICATION LINE IS ONE OR MORE LINES CONTAINING C THE ABSOLUTE LOCATIONS OF THE PINS BELONGING TO THAT PLANE IN THE FORMAT C X_POSITION{TERMINATOR}Y_POSITION. THE TERMINATOR WILL USUALLY BE A COMMA. C ALL PINS SPECIFIED IN THIS WAY WILL BECOME PART OF THE PLANE. WHEN C SPECIFYING THE PLANE IN THE CHAIN LIST, IT IS MERELY NECESSARY TO SPECIFY C THE PLANE NAME. THE NEAREST PLANE PIN OR DEVICE PIN WITH IDENTICAL ELECTRICAL C CHARACTERISTICS WILL BE AUTOMATICALLY CHOSEN. C C C CALLING SEQUENCE: C C CALL BY: CALL PLANE C C C C ON EXIT: THE APPROPRIATE TABLE ENTRIES HAVE BEEN MADE C C ERROR CONDITIONS: C C ALL ERROR CONDITIONS ARE FATAL. ERRORS INCLUDE: C ILLEGAL TYPE NUMBER. C NON-UNIQUE TYPE NUMBER (PLANE ALREADY SPECIFIED) C NAME NOT UNIQUE C ILLEGAL OR MISSING SYNTAX C C SPECIAL NOTES: C C NONE C C SUBROUTINES CALLED: C C GETLEX TRANSF TRANS POP TRANS4 HDR C ALLOCE ALLOCS MSG COMPAR HDRCHK C C PAGE 3 - PLANE - DATA STORAGE DESCRIPTIONS. C C CALLING PARAMETERS: C C C PARAMETER STATEMENTS C INCLUDE 'WIRCOM.FTN' INCLUDE 'ELECTR.COM' INCLUDE 'SPCING.COM' INCLUDE 'IOPAR.COM' INCLUDE 'PARAM.COM' INCLUDE 'PLAIN.COM' INCLUDE 'PARSE.COM' C C LOCAL VARIABLE AND ARRAY DEFINITIONS: C REAL*8 SBTTL(3) !'PLANE DEFINITION' INTEGER ITMP !GETLEX ASSOCIATED VARIABLE INTEGER NENT1 !INTERNAL NUMBER FOR THIS PLANE INTEGER I !DO INDEX INTEGER IPLANE !INDEX INTO "PLAIN" TABLES REAL*8 RTMP !TEMPORARY STORAGE FOR OPTION SYMBOLS REAL*8 RSYM1 !'CONNECT' REAL*8 RSYM2 !'JUMPER' INTEGER IPINS !NUMBER OF PLANE PINS SEEN BYTE IDOLAR !'$' LOGICAL COMPAR !EXTERNAL LOGICAL FUNCTION C C COMMON AREAS C INTEGER LIBSIZ !SIZE OF USER LIBRARY BYTE UST1(8,IUSTLN) !USER DEVICE NAME TABLE BYTE SPSYM(8,IUSTLN) !USER SPACING SYMBOL TABLE BYTE ELSYM(8,IUSTLN) !USER ELECTRICAL SYMBOL TABLE BYTE LPINS(IUSTLN) !USER NUMBER-OF-PINS TABLE BYTE DTYPE(IUSTLN) !USER DEVICE-TYPE TABLE BYTE CONN(8,IUSTLN) !USER CONNECTOR-SYMBOL TABLE INTEGER LIBENT(NMCHIP) !INTERNAL TO USER MAPPING BYTE IPTMP(2,144) !TEMPORARY STORAGE FOR SPACING DATA BYTE IW(2+34*IUSTLN+2*NMCHIP+2*144) !WORK SPACE EQUIVALENCE (LIBSIZ,IW(1)) EQUIVALENCE (UST1(1,1),IW(3)) EQUIVALENCE (SPSYM(1,1),IW(3+8*IUSTLN)) EQUIVALENCE (ELSYM(1,1),IW(3+16*IUSTLN)) EQUIVALENCE (LPINS(1),IW(3+24*IUSTLN)) EQUIVALENCE (DTYPE(1),IW(3+25*IUSTLN)) EQUIVALENCE (CONN(1,1),IW(3+26*IUSTLN)) EQUIVALENCE (LIBENT(1),IW(3+34*IUSTLN)) EQUIVALENCE (IPTMP(1,1),IW(3+34*IUSTLN+2*NMCHIP)) COMMON / WORK / IW C C C LOCAL VARIABLE AND ARRAY INITIALIZATION: C DATA SBTTL / 'PLANE DE', 'FINITION', ' ' / DATA RSYM1 / 'CONNECT' / DATA RSYM2 / 'JUMPER' / DATA IDOLAR / '$' / C C PAGE 4 - PLANE C C C *** GET THE NAME FIELD AND PUT IT INTO THE ICNAME AND SYMBL TABLES. C MAKE SURE THE NAME IS UNIQUE. PUT -128 INTO ILOC, LEAVE IENT ALONE. C CALL HDR(SBTTL) !START THE LISTING ON A NEW PAGE 10 CALL GETLEX(ITMP) GOTO (1010,1010,10,20,1010) ITMP C 20 NENT1=NENT+1 IF (NENT1 .GT. NMCHIP) CALL DSKMSG(88,5) CALL TRANS4(SYMBL(1,NENT1)) IF (NENT .EQ. 0) GOTO 22 DO 21 I=1,NENT IF (COMPAR(SYMBL(1,NENT1),SYMBL(1,I),4)) GOTO 1020 21 CONTINUE 22 ILOC(NENT1)=-128 CALL TRANSF(SYMBL(1,NENT1),4,ICNAME(1,NENT1),8) C C GET THE PLANE TYPE. CHECK IT AGAINST LEGAL TYPES AND FOR UNIQUENESS. C PUT THE TYPE INTO ITYPE. ZERO INUM PREPARATORY TO READING IN PIN C COORDINATES. FILL IN THE PLANE NAME IN THE APPROPRIATE SLOT. C 30 CALL GETLEX(ITMP) GOTO (1010,1010,30,1010,32) ITMP C 32 CALL POP(ITMP) IPLANE=0 DO 33 I=1,NMPLAN IF (IPTYP(I) .EQ. ITMP) IPLANE=I 33 CONTINUE IF (IPLANE .EQ. 0) GOTO 1080 IF (IPDEF(IPLANE) .NE. 0) GOTO 1090 IPDEF(IPLANE)=1 CALL TRANSF(SYMBL(1,NENT1),4,IPNAM(1,IPLANE),4) DO 34 I=1,NMPLAN IF (I .EQ. IPLANE) GOTO 34 IF (COMPAR(IPNAM(1,IPLANE),IPNAM(1,I),4)) GOTO 1020 34 CONTINUE ITYPE(NENT1)=ITMP INUM(NENT1)=0 IPENT(IPLANE)=NENT1 C C PAGE 4 A - PLANE C C C NOW WE READ IN THE OPTIONS. WE SEARCH FOR AN ALPHAMERIC SYMBOL. IF C THE SYMBOL IS "CONNECT" WE SET IPFLG(IPLANE) =2. IF THE SYMBOL IS C "JUMPER" WE ADD 1 TO IPFLG(IPLANE). IF THE SYMBOL IS ANYTHING ELSE, WE C DECLARE AN ERROR. WE CONTINUE TO LOOK FOR OPTION SYMBOLS UNTIL WE FIND C THE END-OF-THE-LINE C 40 CALL GETLEX(ITMP) GOTO (200,100,40,50,1040) ITMP C 50 CALL TRANS(RTMP) IF (COMPAR(RTMP,'CONNECT',7)) IPFLG(IPLANE)=2 IF (COMPAR(RTMP,'JUMPER',6)) IPFLG(IPLANE)=IPFLG(IPLANE)+1 IF (IPFLG(IPLANE) .EQ. 0) GOTO 1040 !ILLEGAL OPTION SYMBOL GOTO 40 C C PAGE 5 - PLANE C C C *** SEARCH FOR SPACING REFERENCES AND PUT THEM IN A TEMPORARY ARRAY. C C C FIND THE NEXT SPACING (LOCATION) REFERENCE. C 100 CALL HDRCHK(SBTTL,1) WRITE (ISYSOU, 2000) (LINBUF(I),I=1,ICHAR) 101 CALL GETLEX(ITMP) GOTO (200,100,105,1050,110) ITMP 105 IF (LINBUF(NEXCHR-1) .EQ. IDOLAR) GOTO 200 GOTO 101 C 110 CALL GETLEX(ITMP) GOTO (1010,1010,110,1050,120) ITMP C 120 IPNUM(IPLANE)=IPNUM(IPLANE)+1 CALL POP(ITMP) IPTMP(2,IPNUM(IPLANE))=ITMP CALL POP(ITMP) IPTMP(1,IPNUM(IPLANE))=ITMP GOTO 101 C C PAGE 6 - PLANE C C C *** END OF THIS PLANE COMMAND. INCORPORATE THE DATA INTO THE SPACING C AND ELECTRICAL TABLES. C C C FIRST WE ALLOCATE SPACE IN THE SPACING TABLE, COPY THE DATA FROM THE C TEMPORARY STORAGE AREA INTO THIS AREA AND FILL IN OTHER SPACING DATA C (ISBASE AND IROT). C 200 IPINS=IPNUM(IPLANE) CALL ALLOCS(ISLOC(NENT1),IPINS) IPLOC(IPLANE)=ISLOC(NENT1) INUM(NENT1)=IPINS IF (IPINS .EQ. 0) GOTO 220 DO 210 I=1,IPINS IPINSP(1,ISLOC(NENT1)+I-1)=IPTMP(1,I) IPINSP(2,ISLOC(NENT1)+I-1)=IPTMP(2,I) 210 CONTINUE 220 ISBASE(1,NENT1)=0 ISBASE(2,NENT1)=0 IROT(NENT1)=0 C C NOW WE ALLOCATE SPACE IN THE ELECTRICAL TABLE AND FILL IT IN WITH C THE ELECTRICAL CODE FOR THE PLANE. NOTICE THAT WE HAVE CLEVERLY CHOSEN C THE TYPE CODE TO BE IDENTICAL TO THE ELECTRICAL CODE. WE ASSUME THAT C THE LOADING FACTOR IS ZERO. C 230 CALL ALLOCE(IELOC(NENT1),IPINS) IF (IPINS .EQ. 0) GOTO 250 ITMP=IPTYP(IPLANE) DO 240 I=1,IPINS IPINEL(1,IELOC(NENT1)+I-1)=ITMP 240 IPINEL(2,IELOC(NENT1)+I-1)=0 C C NOW WE ARE FINISHED WITH THIS PLANE. UPDATE THE NENT COUNTER AND C RETURN. C 250 NENT=NENT1 RETURN C C PAGE 7 - PLANE C C C *** ERROR HANDLERS C 1010 CALL DSKMSG(31,3) GOTO 250 C 1020 CALL DSKMSG(32,3) GOTO 250 C 1040 CALL DSKMSG(33,3) GOTO 250 C 1050 CALL DSKMSG(102,3) GOTO 250 C 1080 CALL DSKMSG(34,3) GOTO 250 C 1090 CALL DSKMSG(35,3) GOTO 250 C 2000 FORMAT (' ', 132A1) C C END SUBROUTINE CNECTR C C C ************************************************************************ C * C THIS PROGRAM IS PROVIDED ON AN "AS IS" BASIS ONLY. DIGITAL EQUIPMENT * C COMPUTER USER'S SOCIETY, DIGITAL EQUIPMENT CORPORATION, MONSANTO, AND * C THE AUTHOR DISCLAIM ALL WARRANTIES ON THE PROGRAM, INCLUDING WITHOUT * C LIMITATION, ALL IMPLIED WARRANTIES OF MERCHANTABLITY AND FITNESS. * C * C FULL PERMISSION AND CONSENT IS HEREBY GIVEN TO DECUS AND TO THE DECUS * C SPECIAL INTEREST GROUPS TO REPRODUCE, DISTRIBUTE, AND PUBLISH AND * C PERMIT OTHERS TO REPRODUCE IN WHOLE OR IN PART, IN ANY FORM AND * C WITHOUT RESTRICTION, THIS PROGRAM AND ANY INFORMATION RELATING THERETO * C * C ************************************************************************ C C C VERSION: V01.01 C C AUTHOR: RL AURBACH MAPC 1-SEP-78 C C THIS ROUTINE HANDLES THE LAYOUT OF THE USER'S BOARD BY FILLING IN THE C NECESSARY BOARD-LAYOUT TABLES. THIS ROUTINE ONLY HANDLES INPUT FOR THE C $CONNECTRTOR COMMAND. THIS COMMAND IS USED TO DEFINE CONNECTOR PINS, C INCLUDING PINS WHICH WILL BE REFERRED TO SYMBOLICALLY. C C COMPILATION INSTRUCTIONS: C C CNECTR,CNECTR/-SP=CNECTR C [FILE WIRCOM.FTN INCLUDED] C [FILE LEXATT.COM INCLUDED] C [FILE ELECTR.COM INCLUDED] C [FILE PARAM.COM INCLUDED] C [FILE PARSE.COM INCLUDED] C [FILE SPCING.COM INCLUDED] C [FILE IOPAR.COM INCLUDED] C [FILE ALIAS.COM INCLUDED] C C MODIFICATION HISTORY: C C V01.00 RLA 17-APR-78 ORIGINAL CODE C V01.01 RLA 1-SEP-78 REORGANIZE INCLUDED COMMON AREAS C C C PAGE 2 - CNECTR - DOCUMENTATION. C C WERE IT NOT FOR THE ABILITY TO DEFINE CONNECTOR PIN NAMES SYMBOLICALLY C (FOR EXAMPLE, IF A CONNECTOR WERE AT SYMBOLIC LOCATION "A", THEN WE WILL C PERMIT AS A LEGAL PIN SPECIFICATION "A-V1"), SPECIFICATION OF CONNECTORS C WOULD BE IDENTICAL TO SPECIFICATION OF NORMAL CHIPS OR CHIPS WITH USER- C DEFINABLE PINS. C C HOWEVER, THE NEED TO DEFINE PIN SYMBOLS AND TO ASSOCIATE THEM WITH PIN C NUMBERS INTERNALLY ADD A SIGNIFICANT LEVEL OF COMPLEXITY TO THE CODE. C THE $CONNECTOR COMMAND WAS DEVELOPED TO ALLOW SOME OF THIS COMPLEXITY TO C BE LOCALIZED. C C C CNECTR IS THE MODULE OF THE WIRE-WRAP PROGRAM WHICH IS RESPONSIBLE FOR C BUILDING THE USER'S BOARD LAYOUT TABLES FOR CONNECTORS FROM HIS INPUT. C C THE ROUTINE SUPPORTS SEMI-FREE FORMAT INPUT IN THE SENSE THAT: C BLANK INPUT LINES ARE ALLOWED C COMMENTS ARE ALLOWED (COMMENTS BEGIN WITH A ; AND EXTEND TO THE C END OF THE CURRENT LINE) C FIELDS MUST ALL BE PRESENT AND IN THE SPECIFIED ORDER. EXCEPT WHERE C AN INPUT MODE IS SPECIFIED BY A SPECIAL TERMINATOR CHARACTER, C THE FIELDS MAY BE SEPARATED BY ANY TERMINATOR (BUT MAY NOT C EXTEND TO MORE THAN ONE LINE) C TERMINATORS ARE ANY CHARACTERS OTHER THAN UPPER CASE A-Z AND 0-9. C NOTE THAT CERTAIN TERMINATORS SUCH AS $, #, AND % HAVE SPECIAL C INTERPRETATIONS. THE MOST COMMON FIELD SEPARATORS ARE SPACE, C TAB, AND COMMA. C ABSOLUTE POSITION INFORMATION IS ACQUIRED IN THIS ROUTINE. SINCE C NEGATIVE NUMBERS ARE LEGAL IN THAT CONTEXT, THE - SIGN IS C USED IN THIS ROUTINE AS THE NEGATION UNARY OPERATOR RATHER C THAN AS A HYPHEN. IN THIS ROUTINE, - IS NOT A TERMINATOR. C C C INPUT TO THE ROUTINE CONSISTS OF A CONNECTOR SPECIFICATION LINE, OPTIONALLY C FOLLOWED BY ONE OR MORE PIN SPECIFICATION LINES. A PIN SPECIFICATION LINE C MAY OPTIONALLY DEFINE A PIN SYMBOL. C C C PAGE 2 A - CNECTR - DOCUMENTATION (CONTINUED) C C C THE CONNECTOR SPECIFICATION LINE IS: C $CONNECTOR& NAME LOC_SY X_COORD,Y_COORD C WHERE C $CONNECTOR (OR $CONNECTO) INDICATES THE TYPE OF COMMAND C & IS AN OPTIONAL ROTATION SYMBOL. IF ABSENT, THE DEVICE IS C IN ITS NORMAL ORIENTATION. IF THE SYMBOL IS < THE DEVICE C IS ROTATED BY 90 DEGREES COUNTERCLOCKWISE. IF THE SYMBOL C IS ^ THE DEVICE IS ROTATED BY 180 DEGREES. IF THE SYMBOL C IS > THE DEVICE IS ROTATED BY 270 DEGREES. C NAME IS A SYMBOLIC NAME FOR THE CONNECTOR. THIS NAME MUST MATCH C SOME DEVICE_NAME SYMBOL IN UST.DAT. C LOC_SY IS A LOCATION SYMBOL WHICH INDICATES HOW THE USER WILL REFER C TO THAT CONNECTOR IN THE CHAIN LIST. IF THE LOC_SY IS AN C INTEGER, THEN IN THE CHAIN LIST, THIS NUMBER MUST BE USED TO C REFER TO THIS DEVICE. THIS NUMBER WILL ALSO BE USED IN ALL C OUTPUT OF THE PROGRAM. THE LOC_SY MAY ALSO BE A SYMBOL (UP TO C 4 CHARACTERS WITH THE FIRST CHARACTER ALPHABETIC), IN WHICH CASE C THE SYMBOL WILL BE USED FOR ALL REFERENCES BY THE USER OR THE C PROGRAM FOR THAT CONNECTOR. C X_COORD IS THE X-AXIS BASE. THAT IS, THIS VALUE IS ADDED TO THE X-AXIS C OFFSET GIVEN IN SPSYM.DAT TO CALCULATE THE ABSOLUTE POSITION OF C ANY CONNECTOR PIN. C Y_COORD IS THE CORRESPONDING Y-AXIS BASE. C C THE DEVICE SPECIFIED IN THE $CONNECTOR COMMAND MUST BE OF TYPE 5. C C C PAGE 2 B - CNECTR - DOCUMENTATION (CONTINUED) C C C THE PIN SPECIFICATION LINE FORMAT IS: C %PIN# PIN_SY ELEC,FAN C WHERE C % INDICATES THAT THE FOLLOWING PIN NUMBER WILL BE USED TO DEFINE C A PIN SYMBOL (ALIAS). THE USE OF THIS SYMBOL IS OPTIONAL C (SEE DISCUSSION BELOW) BUT IF USED MUST BE IMMEDIATELY FOLLOWED C BY A PIN NUMBER. C PIN# IS A PIN NUMBER. USE OF THIS NUMBER IS RESTRICTED TO CASES IN C WHICH IT IS DESIRED TO DEFINE A PIN ALIAS. WHEN USED IT MUST BE C ASSOCIATED WITH A PREFIX %. THAT IS, THE ONLY LEGAL SYNTAX IS C %5 IF PIN FIVE WILL HAVE AN ALIAS DEFINED ON THIS LINE. C PIN_SY IS THE SYMBOL FOR THE PIN IN QUESTION. THERE ARE SEVERAL C CASES. IF THE LINE INVOLVES AN ALIAS DEFINITION (THAT IS, C IF THIS LINE CONTAINED A %PIN# FIELD) THEN PIN_SY IS THE C SYMBOL BY WHICH THE PIN IS KNOWN. IN THIS CASE, A NUMERIC C PIN SYMBOL IS NOT PERMISSIBLE, SINCE THIS LINE WOULD BE C DEFINING THE SYMBOL, AND NUMBERICS ARE NOT LEGAL SYMBOLS. C C ON THE OTHER HAND, IF THIS IS NOT AN ALIAS DEFINITION LINE, C THEN THE PIN_SY MAY BE EITHER A NUMBER OR A SYMBOL. IF IT C IS A SYMBOL, IT MUST MATCH ONE OF THE SYMBOLS ASSOCIATED WITH C THE CONNECTOR VIA THE PNSYM.DAT FILE. NOTE: EVEN IF THE PIN C HAS ASSOCIATED WITH IT A SYMBOL, IT IS NOT REQUIRED TO USE IT. C THE SYMBOLS ARE ONLY USED IF REFERED TO. C C ELEC THE ELECTRICAL SYMBOL IS JUST THE SAME AS THOSE USED FOR NORMAL C CHIPS. ONLY ONE CAUTION SHOULD BE NOTED. UNLIKE A CHIP, A C CONNECTOR IS ESSENTIALLY PASSIVE AND IN SOME SENSE STANDS FOR C THE CIRCUITS IT IS CONNECTED TO. HENCE, AN OUTPUT SIGNAL, C ATTACHED TO A CONNECTOR WHICH IS LABELED "OUTPUT" SHOULD HAVE C AN INPUT ELECTRICAL CODE, SINCE THE SIGNAL GOES INTO THE C CONNECTOR CONSIDERED AS A DEVICE. C FAN IS THE LOADING FACTOR. TO GET THE BEST PERFORMANCE OUT OF THE C ERROR CHECKING FEATURES OF THE WIRAP PROGRAM, THE LOADING C SPECIFIED FOR THE CONNECTOR SHOULD ACCURATELY REFLECT THE LOADING C OF THE EXTERNAL CIRCUITS CONNECTED TO THE BOARD VIA THE CONNECTOR. C C C THE FOLLOWING RESTRICTIONS APPLY TO PIN DEFINITION VIA THE ALIAS MECHANISM. C C IF THE CONNECTOR HAS A CONNECTOR-SYMBOL AND AN ENTRY APPROPRIATE TO IT IN C PNSYM.DAT, THEN ONLY THE DEFINED SYMBOLS (FROM PNSYM.DAT) WILL BE ALLOWED C IN THIS COMMAND. SPECIFICALLY, %PIN FIELDS IN THE PIN SPECIFICATION LINE C ARE FORBIDDEN. C C ON THE OTHER HAND, IF THE CONNECTOR HAS NO CONNECTOR-SYMBOL (AND HENCE NO C ENTRY IN PNSYM.DAT, THEN IT IS LEGAL TO DEFINE PIN SYMBOLS HERE. THAT IS C %PIN FIELDS WILL BE ALLOWED IN THIS CASE. C C PAGE 2 C - CNECTR - DOCUMENTATION (CONTINUED) C C C CALLING SEQUENCE: C C CALL BY: CALL CNECTR C C C C ON EXIT: THE APPROPRIATE TABLE ENTRIES ARE FILLED IN C C ERROR CONDITIONS: C C ALL ERRORS ARE FATAL. DETECTED ERRORS INCLUDE: C SYNTAX MISSING OR NOT CORRECT C INVALID VALUES OF VARIABLES C UNDEFINED SYMBOLS C C SPECIAL NOTES: C C NONE C C SUBROUTINES CALLED: C C GETLEX TRANS4 POP ALLOCE DSKMSG HDRCHK HDR C ALLOCC COMPAR SAVE RESTOR TRANS SEARCH C C PAGE 3 - CNECTR - DATA STORAGE DESCRIPTIONS. C C CALLING PARAMETERS: C C C PARAMETER STATEMENTS C INCLUDE 'WIRCOM.FTN' INCLUDE 'LEXATT.COM' INCLUDE 'ELECTR.COM' INCLUDE 'PARAM.COM' INCLUDE 'PARSE.COM' INCLUDE 'SPCING.COM' INCLUDE 'IOPAR.COM' INCLUDE 'ALIAS.COM' C C LOCAL VARIABLE AND ARRAY DEFINITIONS: C REAL*8 SBTTL(3) !'CONNECTOR SPECIFICATIONS' INTEGER NENT1 !CURRENT DEVICE INTERNAL NUMBER INTEGER ITMP !GETLEX ASSOCIATED VARIABLE INTEGER IENTRY !POINTER INTO USER TABLES (PAGE 4) !MISCELLANEOUS POINTERS (PAGES 5-7) INTEGER IPINS !NUMBER OF PINS LOGICAL COMPAR !TYPE SPECIFICATION FOR A LOGICAL FUNCTION LOGICAL ISYMB !.T. IF CONNECTOR SYMBOL EXISTS LOGICAL IDEF !.T. IF DEFINING A PIN-ALIAS BYTE ISYM1 !'$' BYTE ISYM2 !'%' INTEGER I !DO INDEX INTEGER J !DO INDEX BYTE NSYM(3) !'<','^','>' C C COMMON AREAS C INTEGER LIBSIZ !SIZE OF USER LIBRARY BYTE UST1(8,IUSTLN) !USER DEVICE NAMES BYTE SPSYM(8,IUSTLN) !USER SPACING SYMBOLS BYTE ELSYM(8,IUSTLN) !USER ELECTRICAL SYMBOLS BYTE LPINS(IUSTLN) !USER NUMBER OF PINS BYTE DTYPE(IUSTLN) !USER DEVICE TYPE BYTE CONN(8,IUSTLN) !USER CONNECTOR SYMBOL INTEGER LIBENT(NMCHIP) !INTERNAL TO USER MAPPING BYTE IW(2+34*IUSTLN+2*NMCHIP) !WORK SPACE EQUIVALENCE (LIBSIZ,IW(1)) EQUIVALENCE (UST1(1,1),IW(3)) EQUIVALENCE (SPSYM(1,1),IW(3+8*IUSTLN)) EQUIVALENCE (ELSYM(1,1),IW(3+16*IUSTLN)) EQUIVALENCE (LPINS(1),IW(3+24*IUSTLN)) EQUIVALENCE (DTYPE(1),IW(3+25*IUSTLN)) EQUIVALENCE (CONN(1,1),IW(3+26*IUSTLN)) EQUIVALENCE (LIBENT(1),IW(3+34*IUSTLN)) COMMON / WORK / IW C C C LOCAL VARIABLE AND ARRAY INITIALIZATION: C DATA ISYM1,ISYM2 / '$', '%' / DATA NSYM / '<', '^', '>' / DATA SBTTL / 'CONNECTO', 'R SPECIF', 'ICATIONS' / C C PAGE 4 - CNECTR C C C *** LIST CONNECTOR DATA ON A SEPARATE PAGE C CALL HDR(SBTTL) C C *** GET THE CONNECTOR NAME. STORE IT IN ICNAME AND LOOK UP THE NAME C IN THE USER TABLE. IF FOUND, FILL IN THE USER-TABLE-INDEX TABLE C (LIBENT), AND THE NUMBER OF PINS TABLE(INUM). C CHECK TO SEE WHETHER THE DEVICE IS REALLY C A CONNECTOR (TYPE 5). IF THE ENTRY IS FOUND, CHECK WHETHER A CONNECTOR C SYMBOL IS DEFINED. IF IT IS, SET A FLAG SO THAT PROCESSING WILL C TAKE PLACE AFTER THE REST OF THE LINE IS PROCESSED. C NENT1=NENT+1 IF (NENT1 .GT. NMCHIP) CALL DSKMSG(89,5) 10 CALL GETLEX(ITMP) GOTO (1010,1010,10,20,1040) ITMP 20 CALL TRANS(ICNAME(1,NENT1)) CALL SEARCH(UST1,LIBSIZ,ICNAME(1,NENT1),IENTRY) IF (IENTRY .EQ. 0) GOTO 1000 LIBENT(NENT1)=IENTRY IPINS=LPINS(IENTRY) INUM(NENT1)=IPINS ITYPE(NENT1)=DTYPE(IENTRY) IF (ITYPE(NENT1) .NE. 5) GOTO 1090 ISYMB=.FALSE. IF (CONN(1,IENTRY) .NE. 0) ISYMB=.TRUE. C C CHECK FOR A SPECIAL ROTATION TERMINATOR. IF A < IS SEEN, SET IROT=1, C IF ^ IS SEEN, SET IROT=2, IF > IS SEEN SET IROT=3. C IROT(NENT1)=0 CALL GETLEX(ITMP) GOTO (1010,1010,30,40,50) ITMP 30 DO 32 I=1,3 IF (LINBUF(NEXCHR-1) .EQ. NSYM(I)) IROT(NENT1)=I 32 CONTINUE C C FETCH THE LOCATION SYMBOL C 35 CALL GETLEX(ITMP) GOTO (1010,1010,35,40,50) ITMP C C PAGE 5 - CNECTR C C C PROCESS THE LOCATION SYMBOL. IN THIS CASE, THE LOCATION SYMBOL IS AN C ALPHANUMERIC SYMBOL. CHECK TO SEE WHETHER THIS SYMBOL IS UNIQUE. C PUT -(INTERNAL CHIP NUMBER) INTO ILOC, LEAVE IENT ALONE, AND PLACE C THE SYMBOL INTO SYMBL. C 40 CALL TRANS4(SYMBL(1,NENT1)) IF (NENT .EQ. 0) GOTO 42 DO 41 I=1,NENT IF (COMPAR(SYMBL(1,NENT1),SYMBL(1,I),4)) GOTO 1020 41 CONTINUE 42 ILOC(NENT1)=-NENT1 GOTO 60 C C PROCESS THE LOCATION SYMBOL. IN THIS CASE, THE LOCATION SYMBOL IS A C NUMBER. CHECK TO SEE WHETHER THIS NUMBER IS UNIQUE. INSERT IT INTO C ILOC AND MAKE THE APPROPRIATE IENT ENTRY. ENCODE THE INTEGER INTO A C 4-BYTE STRING IN SYMBL. 50 CALL POP(ITMP) IF (NENT .EQ. 0) GOTO 52 DO 51 I=1,NENT IF (ITMP .EQ. ILOC(I)) GOTO 1020 51 CONTINUE 52 ILOC(NENT1)=ITMP IENT(ITMP+1)=NENT1 ENCODE (4,2000,SYMBL(1,NENT1)) ITMP C C NOW WE GET THE BASE VECTOR FOR THE DEVICE AND STORE IT IN ISBASE. C WE ALSO PRINT OUT THE LINE (WE ARE FINISHED PROCESSING IT), INCREMENT C THE NUMBER OF ENTRIES COUNTER (NENT), AND DECIDE WHETHER SPECIAL C SYMBOL-PROCESSING PREPARATION IS NECESSARY. C 60 CALL GETLEX(ITMP) GOTO (1010,1010,60,1040,70) ITMP C C 70 CALL GETLEX(ITMP) GOTO (1010,1010,70,1040,80) ITMP C 80 CALL POP(ITMP) ISBASE(2,NENT1)=ITMP CALL POP(ITMP) ISBASE(1,NENT1)=ITMP CALL HDRCHK(SBTTL,1) WRITE (ISYSOU,2010) (LINBUF(I),I=1,ICHAR) NENT=NENT1 C C PAGE 5 A - CNECTR C C C IF THE CONNECTOR HAS NO ASSOCIATED CONNECTOR SYMBOL DEFINED FOR IT, C ONLY ALIAS-DEFINITION-TYPE PIN SPECIFICATION STATEMENTS ARE C PERMITTED. NO FURTHER PREPARATION IS NECESSARY, AND WE ARE READY C TO PROCESS THE NEXT LINE. C IF THERE IS A CONNECTOR SYMBOL, HOWEVER, THEN IT IS NECESSARY TO C READ IN THE ALIAS TABLE RESIDING IN THE PNSYM.DAT FILE SO THAT WE C MAY PROCESS THE PIN SPECIFICATION LINES. C NEWLIN=.TRUE. IF (.NOT. ISYMB) GOTO 200 C C PAGE 6 - CNECTR C C C *** PROCESSING FOR THE CASE IN WHICH PIN-ALIAS DATA EXISTS IN THE PNSYM.DAT C FILE. C C THE GENERAL PROCEDURE IS TO SET UP A TEMPORARY AREA IN IPINAS FOR C THE PIN-ALIAS TABLE. THE PNSYM.DAT FILE IS OPENED AND THE APPROPRIATE C DATA IS FOUND AND READ INTO IPINAS. THE IALOC ARRAY POINTER C WILL POINT TO THIS AREA. C **** NOTE **** C WHEN THE PROCESSING IS DONE FOR THIS CONNECTOR, THIS AREA OF IPINAS C MUST BE DEALLOCATED AND IALOC CLEARED. THIS IS NECESSARY IN ORDER FOR C THE BUILDC ROUTINE TO ALLOCATE AN APPROPRIATE AMOUNT OF SPACE. C C C *** ALLOCATE THE APPROPRIATE REGION OF WORK SPACE. C 100 CALL ALLOCC(IALOC(NENT),IPINS) C C *** OPEN THE SYMBOL-ALIAS FILE AND SEARCH THROUGH THE FILE UNTIL THE C SYMBOL WHICH MATCHES THE CONNECTOR SYMBOL IS FOUND. C OPEN (UNIT=ISYS2,NAME='PNSYM.DAT',READONLY,TYPE='OLD',ERR=1096) CALL SAVE ISYSIN=ISYS2 C C FIND THE NEXT CONNECTOR SYMBOL C 110 CALL GETLEX(ITMP) GOTO (1097,110,110,120,111) ITMP 111 LEXSP=LEXSP+1 112 NEWLIN=.TRUE. GOTO 110 C C COMPARE THE SYMBOL FOUND WITH THE SYMBOL ASSOCIATED WITH THIS DEVICE. C 120 CALL TRANS(LEXBUF) IF (.NOT. COMPAR(CONN(1,LIBENT(NENT)),LEXBUF,8)) GOTO 112 C C PAGE 7 - CNECTR C C C FOUND IT. NOW READ THE DATA FROM THE FILE INTO THE ALLOCATED REGION C OF IPINAS. C 130 CALL GETLEX(ITMP) GOTO (140,130,130,140,132) ITMP C 132 CALL POP (IENTRY) C 135 CALL GETLEX(ITMP) GOTO (1010,1010,135,136,1040) ITMP C 136 CALL TRANS4(IPINAS(1,IALOC(NENT)+IENTRY-1)) GOTO 130 C C WE HAVE FOUND WHAT WE ARE LOOKING FOR IN THIS FILE. WE MAY THEREFORE C CLOSE IT AND RESTORE THE PREVIOUS CONTEXT. C 140 CLOSE(UNIT=ISYS2) CALL RESTOR C C PAGE 8 - CNECTR C C C *** PIN SPECIFICATION LINE PROCESSING C C *** GET FIRST TOKEN ON THE LINE. CHECK FOR $ (SYMBOL MEANS NEW COMMAND -- C PERFORM POST-PROCESSING) OR % (SYMBOL MEANS PIN-ALIAS DEFINITION) C 200 IDEF=.FALSE. CALL GETLEX(ITMP) GOTO (300,200,205,220,230) ITMP 205 IF (LINBUF(NEXCHR-1) .EQ. ISYM1) GOTO 300 !('$') IF (LINBUF(NEXCHR-1) .NE. ISYM2) GOTO 200 !(.NOT. '%') C C % SEEN -- IS IT LEGAL? IF IT IS, GET THE PIN NUMBER AND SET THE IDEF C FLAG. C IF (ISYMB) CALL DSKMSG(90,5) 210 CALL GETLEX(ITMP) GOTO (1010,1010,1010,1010,211) ITMP C 211 CALL POP(IENTRY) IDEF=.TRUE. C C GET THE PIN SYMBOL. EITHER A NUMBER OR A SYMBOL IS LEGAL HERE EXCEPT C WHEN IDEF IS .TRUE. (IN WHICH CASE IT MUST BE A SYMBOL). C 212 CALL GETLEX(ITMP) GOTO (1010,1010,212,220,230) ITMP C C THE PIN IS SPECIFIED BY A SYMBOL. IF IDEF IS TRUE, PUT THE DEFINITION C INTO THE APPROPRIATE LOCATION IN IPINAS (REFERENCED BY IENTRY). C IF IDEF IS FALSE, SEARCH THE IPINAS REGION FOR THE DEFINED SYMBOL AND C PUT ITS INDEX INTO IENTRY. C 220 IF (IDEF) GOTO 225 IENTRY=0 CALL TRANS(LEXBUF) DO 222 I=1,IPINS IF (COMPAR(LEXBUF,IPINAS(1,IALOC(NENT)+I-1),4)) IENTRY=I 222 CONTINUE IF (IENTRY .EQ. 0) GOTO 1070 GOTO 231 C C PAGE 9 - CNECTR C C C IDEF=.TRUE. C 225 IF (IALOC(NENT) .NE. 0) GOTO 226 CALL ALLOCC(IALOC(NENT),IPINS) 226 CALL TRANS4(IPINAS(1,IALOC(NENT)+IENTRY-1)) GOTO 231 C C PIN SYMBOL IS A NUMBER. GET THE NUMBER IN IENTRY C IF IDEF IS .TRUE. THIS IS AN ERROR (ATTEMPT TO DEFINE AN ILLEGAL SYMBOL) C 230 CALL POP(IENTRY) IF (IDEF) GOTO 1098 C C NOW WE ARE READY TO GET THE ELECTRICAL CODE AND LOADING FACTOR. C IF NO ELECTRICAL TABLE ALLOCATION HAS YET BEEN MADE, ALLOCATE SPACE C IN THE ELECTRICAL TABLE. READ IN THE ELECTRICAL CODE AND THE LOADING C FACTOR AND PUT THEM IN THE APPROPRIATE SLOT IN THE ELECTRICAL TABLE. C 231 IF (IELOC(NENT) .NE. 0) GOTO 233 CALL ALLOCE(IELOC(NENT),IPINS) 233 CALL GETLEX(ITMP) GOTO (1010,1010,233,1040,235) ITMP 235 CALL GETLEX(ITMP) GOTO (1010,1010,235,1040,240) ITMP C 240 CALL POP(ITMP) J=IELOC(NENT)+IENTRY-1 IPINEL(2,J)=ITMP CALL POP(ITMP) IPINEL(1,J)=ITMP IF ((ITMP .GT. MXELCD) .OR. (ITMP .LT. 0)) CALL DSKMSG(92,5) C C DONE WITH THE LINE. PRINT IT OUT AND GO GET THE NEXT ONE. C 250 CALL HDRCHK(SBTTL,1) WRITE (ISYSOU, 2010) (LINBUF(I),I=1,ICHAR) GOTO 200 C C PAGE 10 - CNECTR C C C *** END - OF - COMMAND INPUT. IF ISYMB IS .TRUE. DEALLOCATE THE PINAS C REGION. WE WON'T NEED IT UNTIL THE REGION IS PROPERLY BUILD WITH C BUILDC. C C IF ISYMB IS .FALSE. WE NEED ONLY RETURN C 300 IF (.NOT. ISYMB) GOTO 320 NXAENT=IALOC(NENT) IALOC(NENT)=0 320 CLOSE (UNIT=ISYS2) !JUST IN CASE RETURN C C PAGE 11 - CNECTR C C C C *** ERROR HANDLERS C 1000 CALL DSKMSG(36,5) C 1010 CALL DSKMSG(37,5) C 1020 CALL DSKMSG(38,5) C 1040 CALL DSKMSG(39,5) C 1070 CALL DSKMSG(40,3) GOTO 250 C 1090 CALL DSKMSG(41,5) C 1096 CALL DSKMSG(42,4) C 1097 CALL DSKMSG(43,4) C 1098 CALL DSKMSG(44,3) GOTO 250 C C C *** FORMAT STATEMENTS C 2000 FORMAT (I4) C 2010 FORMAT (' ', 132A1) C C END