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 BUILDS BUILD SPACING SYMBOL TABLE C BUILDE BUILD ELECTRICAL TABLE C BUILDC BUILD PIN ALIAS TABLE C COMPLE COMPLETE TABLE BUILDING PROCESS C CONFIG CHECK THE LAYOUT FOR CORRECT POSITIONING C PLCHAN GENERATE WIRE CHAINS FOR POWER AND GROUND CHAINS C RDCHAN $CHAINS DIRECTIVE PROCESSOR C MSGSET $MESSAGE DIRECTIVE PROCESSOR SUBROUTINE BUILDS 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 1-SEP-78 C C THIS MODULE IS USED TO BUILD THE SPACING TABLES IN COMMON AREA C "SPCING" FROM THE DATA IN THE FILE SPSYM.DAT AND INFORMATION IN INTERNAL C TABLES CREATED BY LIBIN AND LAYOUT. C C COMPILATION INSTRUCTIONS: C C BUILDS,BUILDS/-SP=BUILDS C [FILE WIRCOM.FTN INCLUDED] C [FILE IOPAR.COM INCLUDED] C [FILE LEXATT.COM INCLUDED] C [FILE SPCING.COM INCLUDED] C [FILE PARSE.COM INCLUDED] C C MODIFICATION HISTORY: C C V01.00 EAS/RC 24-NOV-75 ORIGINAL CODE C V01.01 RLA 31-MAR-78 CHANGE LUN AND COMMON USAGE C V01.02 RLA 1-SEP-78 REORGANIZE INCLUDED COMMON AREAS C C C PAGE 2 - BUILDS - DOCUMENTATION. C C THIS ROUTINE OPENS THE FILE SPSYM.DAT AND USES THE INFORMATION CONTAINED C THEREIN TO CREATE THE NECESSARY TABLE ENTRIES. FOR EACH DEVICE (ASSIGNED C AN INTERNAL REFERENCE NUMBER) THE ROUTINE LOOKS TO SEE IF SPACING C INFORMATION ALREADY EXISTS FOR THE DEVICE. IF IT DOES NOT, THE NECESSARY C INFORMATION IS READ FROM THE SPSYM.DAT FILE. THE ORGANIZATION OF THE TABLE C IS SUCH THAT ALL 14-PIN DEVICES (WITH STANDARD PIN SPACING) ORIENTED IN C THE UPRIGHT POSITION WOULD SHARE A COMMON AREA OF THE SPACING TABLE. INVERTED C 14-PIN DEVICES WOULD SHARE A DIFFERENT AREA, 16-PIN DEVICES ANOTHER AREA, C ETC. THIS SHARPLY REDUCES THE AMOUNT OF INFORMATION REQUIRED TO STORE C ALL RELEVANT SPACING INFORMATION (IT IS NOT NECESSARY TO STORE THE ABSOLUTE C LOCATION OF EVERY PIN). C C THE FORMAT OF THE SPSYM.DAT FILE CONSISTS OF A SERIES OF ENTRIES. COMMENTS, C BLANK LINES, ETC. ARE ACCOMODATED IN A FORMAT-FREE FASHION. THE ENTRY C FORMAT IS: C C SPACING_SYMBOL C LOC1 LOC2 .... LOC N C LOC(N+1) ..... LOC M C C WHERE THE SPACING_SYMBOL MATCHES WITH THE APPROPRIATE ENTRY IN THE UST.DAT C FILE, AND WHERE LOC(N) IS THE LOCATION OF PIN N WITH RESPECT TO THE LOCAL C ORIGIN FOR THE CHIP (USUALLY THE LOCAL ORIGIN IS PIN 1). THE FORMAT OF THE C LOCATION DESIGNATION IS {Y_COORD}{TERMINATOR}{X_COORD} WITH Y_COORD AND C X_COORD AS INTEGERS AND THE TERMINATOR IS ANY NON-ALPHANUMERIC CHARACTER C (USUALLY A COMMA). IF A CHIP IS IN ITS NORMAL ORIENTATION, THEN THE C COORDINATE SYSTEM IS DESCRIBED BY SAYING THAT PIN 1 OF A 14-PIN DEVICE C IS AT 0,0 WHILE PIN 7 IS AT 0,6 AND PIN 14 IS AT 3,0. C C C IN ORDER TO UNDERSTAND HOW THE ROUTINE WORKS, IT IS NECESSARY TO UNDERSTAND C THE DATA BASES IT WORKS WITH. THESE CONSIST OF A COMMON AREA AND SOME C WORK SPACE COMMON. C C THE COMMON AREA "SPCING" CONSISTS OF FIVE AREAS. C ISBASE IS AN ARRAY INDEXED BY INTERNAL DEVICE NUMBER. IT CONTAINS C THE ABSOLUTE LOCATION ASSIGNED BY LAYOUT TO THE LOCAL ORIGIN C OF THE DEVICE. C ISLOC IS AN ARRAY INDEXED BY INTERNAL DEVICE NUMBER. IT CONTAINS C A POINTER INTO THE PIN_SPACING ARRAY "IPINSP" POINTING TO C THE PIN SPACING OF PIN 1 OF THE DEVICE. C IPINSP IS AN ARRAY CONTAINING THE LOCATION OF A PIN RELATIVE TO LOCAL C OFFSETS. C NXOENT POINTS TO THE FIRST UNUSED LOCATION IN THE "IPINSP" ARRAY. IT C IS USED WHILE BUILDING THE "IPINSP" TABLE. C IROT IS AN ARRAY INDEXED BY INTERNAL DEVICE NUMBER. IT CONTAINS A C CODE WHICH INDICATES HOW EACH DEVICE IS ORIENTED. C C PAGE 2 A - BUILDS - DOCUMENTATION C C C THE OTHER AREA USED BY THIS ROUTINE IS PART OF THE WORK SPACE WHICH HAS C BEEN PREVIOUSLY SET UP BY LIBIN AND LAYOUT. ALL BUT ONE OF THESE AREAS C CONTAIN INFORMATION ABOUT EACH DEVICE, AS SET UP BY LIBIN. THE IMPORTANT C AREAS ARE: C SPSYM WHICH CONTAINS THE SPACING SYMBOL APPROPRIATE TO EVERY C DEVICE RECOGNIZED BY THE PROGRAM. C LPINS WHICH CONTAINS THE NUMBER OF PINS THAT THE DEVICE HAS. C ALSO IMPORTANT IS THE ARRAY LIBENT. INDEXED BY INTERNAL DEVICE NUMBER, C THIS ARRAY CONTAINS THE POINTER INTO SPSYM AND LPINS APPROPRIATE TO THIS C DEVICE. IF THERE ARE SEVERAL DEVICES WITH THE NAME "DM7400", FOR EXAMPLE, C WITH INTERNAL DEVICE NUMBERS 3, 5, AND 14, THEN ENTRIES 3, 5, AND 14 OF C LIBENT WILL ALL CONTAIN THE SAME NUMBER WHICH IS THE INDEX OF SPSYM AND C LPINS WHICH CORRESPOND TO THE "DM7400" DEVICE. C C THE ROUTINE WORKS AS FOLLOWS: C THE FILE SPSYM.DAT IS OPENED AND THE FIRST SPACING SYMBOL IS FOUND. C A SEARCH IS MADE FOR THE FIRST INSTANCE OF A DEVICE WHICH USES THIS SPACING C SYMBOL. WHEN IT IS FOUND, THE SYMBOL DATA IS ENTERED INTO THE SPACING C TABLE IF IT IS NOT ALREADY THERE. THE POSSIBILITY OF ROTATIONS IS TAKEN C INTO ACCOUNT. ALL DEVICES WHICH USE THE SYMBOL (IN ALL ROTATIONS) ARE C MARKED IN ISLOC. THEN THE NEXT SYMBOL IN SPSYM.DAT IS FOUND AND THE C PROCESS IS REPEATED UNTIL ALL SYMBOLS IN THE FILE HAVE BEEN CHECKED. C C C CALLING SEQUENCE: C C CALL BY: CALL BUILDS C C C ON ENTRY: IT IS ASSUMED THAT THE COMMON AREAS "SPCING" C AND "WORK" CONTAIN THE APPROPRIATE INFORMATION. C C ON EXIT: "SPCING" IS COMPLETELY FILLED IN. C C ERROR CONDITIONS: C C THE FOLLOWING FATAL ERRORS ARE DETECTED AND RESULT IN PROGRAM ABORT: C OPEN FAILURE ON FILE SPSYM.DAT C ERROR READING SPSYM.DAT C SYNTAX ERROR FOUND IN SPSYM.DAT (THIS IS PROBABLY CAUSED C BY NOT ENOUGH SPACING ENTRIES FOR THE SYMBOL) C ATTEMPT TO ALLOCATE MORE THAN THE AVAILABLE AMOUNT OF ROOM C IN IPINSP. C C C PAGE 2 B - BUILDS - DOCUMENTATION (CONTINUED). C C C C SPECIAL NOTES: C C NONE C C SUBROUTINES CALLED: C C SAVE RESTOR TRANS GETLEX SRCHI GETNUM C ALLOCS ROTATE C C PAGE 3 - BUILDS - DATA STORAGE DESCRIPTIONS. C C CALLING PARAMETERS: C C C PARAMETER STATEMENTS C INCLUDE 'WIRCOM.FTN' INCLUDE 'IOPAR.COM' INCLUDE 'LEXATT.COM' INCLUDE 'SPCING.COM' INCLUDE 'PARSE.COM' C C LOCAL VARIABLE AND ARRAY DEFINITIONS: C INTEGER ITMP !GETLEX ASSOCIATED VARIABLE INTEGER IENTRY !ENTRY POINTER INTO USER TABLES INTEGER IPINS !TEMPORARY STORAGE - # PINS INTEGER LOCAL1(4) !FOUR FLAGS USED TO INDICATE ROTATION STATES INTEGER ITMP1 !# OF INTEGERS IN THE SPSYM.DAT FILE FOR THE !CURRENT SYMBOL. INTEGER ITMP0 !POINTER INTO IPINSP INDICATING WHERE ROOM !IS ALLOCATED. 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 INTEGER LIBENT(NMCHIP) !STORAGE FOR CHIP MAPPING ARRAY BYTE LOCAL2(2,MXPINS) !SPACING SYMBOLS ALLOWED FOR DEVICES OF UP TO !A MAXIMUM OF MXPINS PINS BYTE IW(2+34*IUSTLN+2*NMCHIP+2*MXPINS) !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)) EQUIVALENCE (LIBENT(1),IW(3+34*IUSTLN)) EQUIVALENCE (LOCAL2(1,1),IW(3+34*IUSTLN+2*NMCHIP)) COMMON / WORK / IW C C C LOCAL VARIABLE AND ARRAY INITIALIZATION: C C C PAGE 4 - BUILDS C C C OPEN SPSYM.DAT C OPEN (UNIT=ISYS2,NAME='SPSYM.DAT',READONLY,TYPE='OLD',ERR=1000) CALL SAVE ISYSIN=ISYS2 C C INPUT A PERMANENT SPACING SYMBOL. FIND THE FIRST USE OF THE C SYMBOL. STORE THE BASIC PIN SPACING INFORMATION FOR THE SYMBOL C IN LOCAL2. C 10 CALL GETLEX(ITMP) 15 GOTO (100,10,10,20,16) ITMP 16 LEXSP=LEXSP+1 GOTO 10 C C FOUND A SPACING SYMBOL. SEARCH FOR THE FIRST OCCURRENCE OF THE C SYMBOL IN THE SPSYM TABLE. C 20 CALL TRANS(LEXSTK) IENTRY=0 !START AT THE BEGINNING OF THE SPSYM TABLE CALL SRCHI(LEXSTK,SPSYM,IENTRY) IF (IENTRY .EQ. 0) GOTO 10 !IF .T., SYMBOL NOT USED C C INITIALIZE STORAGE -- FIRST OF THE LOCAL1 ARRAY WHICH KEEPS TRACK C OF WHICH ROTATION STATES HAVE BEEN SEEN FOR THIS CHIP, AND THEN C IPINS, WHICH IS THE NUMBER OF PINS FOR THIS DEVICE. C DO 25 I=1,4 25 LOCAL1(I)=0 IPINS=LPINS(LIBENT(IENTRY)) C C STORE THE RELATIVE PIN LOCATIONS IN LOCAL2 C ITMP1=2*IPINS CALL GETNUM(ITMP1,LOCAL2) C C PAGE 5 - BUILDS C C C NOW WE DO THE BUILDING OF THE TABLE. C IF THE SPACING TABLE HAS NOT BEEN SET UP YET FOR THE CURRENT ENTRY C (WHICH WE ARE READY TO DO), THEN WE MUST SET UP SPACING INFORMATION. C C IF THIS ROTATION STATE HAS BEEN SEEN BEFORE, THE TABLE ENTRY IS C ALREADY THERE, AND ALL THAT MUST BE DONE IS PUT A POINTER IN THE C APPROPRIATE ENTRY OF ISLOC. ELSE, WE MUST ALLOCATE SPACE IN THE C TABLE AND PUT IN IT SPACING DATA IN THE CORRECT ROTATION STATE. C 30 IF (ISLOC(IENTRY) .NE. 0) GOTO 35 !ENTRY ALREADY FILLED IN IF (LOCAL1(IROT(IENTRY)+1) .NE. 0) GOTO 34 !THIS ROTATION HAS !BEEN SEEN BEFORE CALL ALLOCS(ITMP0,IPINS) !NEW ENTRY -- ALLOCATED SPACE CALL ROTATE(LOCAL2,IPINSP(1,ITMP0),IPINS,IROT(IENTRY)) !STORE ROTATED DATA IN IPINSP LOCAL1(IROT(IENTRY)+1)=ITMP0 !INDICATE THAT ROTATION STATE SEEN 34 ISLOC(IENTRY)=LOCAL1(IROT(IENTRY)+1) !STORE THE SPACING POINTER C C THIS ENTRY IS DONE. LLOK FOR THE NEXT ENTRY WHICH USES THE SAME C SPACING SYMBOL. C IF NONE, GO AFTER THE NEXT SPACING SYMBOL. (THE PROCESS CONTINUES C UNTIL END-OF-FILE ON SPSYM.DAT) C 35 CALL SRCHI(LEXSTK,SPSYM,IENTRY) IF (IENTRY .EQ. 0) GOTO 10 GOTO 30 C C END-OF-FILE HANDLER C 100 IF (ICODE .EQ. 2) CALL DSKMSG(46,4) C CLOSE (UNIT=ISYS2) CALL RESTOR RETURN C C OPEN FAILURE HANDLER C 1000 CALL DSKMSG(47,4) C C C END SUBROUTINE BUILDE 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 1-SEP-78 C C THIS MODULE IS USED TO BUILD THE ELECTRICAL TABLES FROM THE USER'S SYMBOLIC C ENTRIES AND THE DATA FILE ELSYM.DAT. IT IS IDENTICAL IN FUNCTION TO BUILDS C C COMPILATION INSTRUCTIONS: C C BUILDE,BUILDE/-SP=BUILDE C [FILE WIRCOM.FTN INCLUDED] C [FILE LEXATT.COM INCLUDED] C [FILE ELECTR.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 11-APR-78 CHANGE LUN AND COMMON USAGE C V01.02 RLA 1-SEP-78 REORGANIZE INCLUDED COMMON AREAS C C C PAGE 2 - BUILDE - DOCUMENTATION. C C THIS ROUTINE OPENS FILE ELSYM.DAT AND USES THE INFORMATION THEREIN C TO CREATE THE NECESSARY ENTRIES IN THE COMMON AREA "ELECTR". C THESE ENTRIES CONSIST OF THE ELECTRICAL TYPE CODES AND LOADING FACTORS FOR C EVERY PIN OF EACH UNIQUE DEVICE USED. C C THE ORGANIZATION OF THE "ELECTR" AREA IS: C IELOC IS AN ARRAY INDEXED BY INTERNAL CHIP NUMBER. EACH ENTRY IS C A POINTER INTO THE ARRAY IPINEL FOR THE ELECTRICAL INFORMATION C FOR THAT PARTICULAR CHIP. C IPINEL IS AN ARRAY CONTAINING THE ELECTRICAL INFORMATION. C NXEENT IS A POINTER TO THE NEXT UNUSED ENTRY IN IPINEL. C C THE SOURCE OF THE DATA PLACED IN THESE ARRAYS IS THE INFORMATION CURRENTLY C IN THE AREA "WORK" PUT THERE FROM THE FILE UST.DAT BY THE SUBROUTINE LIBIN, C AND THE INFORMATION CONTAINED IN THE FILE ELSYM.DAT. C C THE FORMAT OF ELSYM.DAT IS: C ELEC_SYM C PIN1 PIN2 ... PIN_N C PIN_(N+1) ... PIN_M C WHERE ELEC_SYM IS AN ELECTRICAL SYMBOL IDENTICAL TO THE CORRESPONDING ENTRY C IN THE THIRD COLUMN OF UST.DAT, AND PIN_N IS THE ELECTRICAL INFORMATION FOR C THE N-TH PIN OF THAT DEVICE. THE ELECTRICAL INFORMATION IS IN THE FORM OF C TWO INTEGERS SEPARATED BY A TERMINATOR (USUALLY A COMMA). THE FIRST INTEGER C IS THE ELECTRICAL TYPE CODE (TABLE BELOW) WHICH INDICATES HOW THE PIN IS USED C (INPUT, OUTPUT, POWER, GROUND, ETC) WHILE THE SECOND INTEGER IS THE LOADING C ASSOCIATED WITH THAT PIN (THAT IS FAN-OUT FOR AN OUTPUT PIN, FAN-IN FOR AN C INPUT PIN, ETC). C C C PAGE 2 A - BUILDE - DOCUMENTATION (CONTINUED). C C C C THE RECOGNIZED ELECTRICAL CODES ARE: C TYPE CODE MEANING C 0 THIS PIN IS NOT USED C 1 THIS PIN IS A TTL INPUT C 2 THIS PIN IS A TTL TOTEM-POLE OUTPUT C 3 THIS PIN IS A +5 VDC POWER PIN C 4 THIS PIN IS A DIGITAL GROUND PIN C 5 WE DON'T CARE WHAT THIS PIN IS (I.E. NO ELECTRICAL CHECKS) C 6 THIS IS AN ANALOG PIN C 7 THIS IS AN OPEN-COLLECTOR OUTPUT PIN C 8 THIS IS A TRI-STATE OUTPUT PIN (SUPPORTS HI-Z) C 9 THIS IS A PULLUP RESISTOR (SPECIAL CHECKS FOR CHAINS WITH INPUTS C AND/OR OPEN-COLLECTOR OUTPUTS) C 10 THIS IS AN INPUT PIN WHICH IS NOT TTL COMPATABLE C 11 THIS IS AN OUTPUT PIN WHICH IS NOT TTL COMPATABLE C 12 THIS PIN IS USED FOR THE POSITIVE ANALOG SUPPLY (TYPICALLY +15V) C 13 THIS PIN IS USED FOR THE NEGATIVE ANALOG SUPPLY (TYPICALLY -15V) C 14 THIS PIN IS ANALOG GROUND C 15 THIS PIN IS SOME OTHER UNDEFINED POWER-PLANE PIN C 16 THIS PIN IS CONNECTED TO THE AC LINE (115 VAC) C 17 THIS PIN IS CONNECTED TO A SWITCH CLOSURE C 18 THIS PIN IS CONNECTED TO A DISCRETE ANALOG COMPONENT WHICH C IS BEING USED AS A DIGITAL CIRCUIT ELEMENT. C 19 THIS PIN REPRESENTS AN LED, LAMP, RELAY, MOTOR, OR SOME OTHER C POWER DEVICE DRIVEABLE FROM A LOGIC SIGNAL C THE OPERATION OF THE ROUTINE IS FUNCTIONALLY IDENTICAL TO BUILDS. C C C PAGE 2 B - BUILDE - DOCUMENTATION (CONTINUED) C C C CALLING SEQUENCE: C C CALL BY: CALL BUILDE C C C ON ENTRY: IT IS ASSUMED THAT THE COMMON AREAS "ELECTR" AND "WORK" C CONTAIN THE APPROPRIATE INFORMATION. C C ON EXIT: "ELECTR" IS FILLED IN C C ERROR CONDITIONS: C C THE FOLLOWING FATAL ERRORS ARE DETECTED AND RESULT IN PROGRAM ABORT: C OPEN FAILURE ON FILE ELSYM.DAT C ERROR READING ELSYM.DAT C SYNTAX ERROR FOUND IN ELSYM.DAT (THIS IS PROBABLY DUE TO AN C INCORRECT TABLE ENTRY. THE NUMBER OF PINS WHOSE C ELECTRICAL CHARACTERISTICS ARE GIVEN BY ELSYM.DAT FOR C A GIVEN DEVICE MUST AGREE WITH THE NUMBER OF PINS C SPECIFIED FOR THE DEVICE IN UST.DAT) C ATTEMPT TO ALLOCATE MORE THAN THE AVAILABLE SPACE IN IPINEL. C THIS PROBLEM CAN ONLY BE SOLVED BY ALLOCATING MORE C BUFFER SPACE. C ILLEGAL ELECTRICAL SYMBOL. C C SPECIAL NOTES: C C NONE C C SUBROUTINES CALLED: C C SAVE RESTOR GETLEX SRCHI GETNUM ALLOCE MSG C C PAGE 3 - BUILDE - DATA STORAGE DESCRIPTIONS. C C CALLING PARAMETERS: C C C PARAMETER STATEMENTS C INCLUDE 'WIRCOM.FTN' INCLUDE 'LEXATT.COM' INCLUDE 'ELECTR.COM' INCLUDE 'IOPAR.COM' INCLUDE 'PARSE.COM' C C LOCAL VARIABLE AND ARRAY DEFINITIONS: C INTEGER ITMP !GETLEX ASSOCIATED VARIABLE INTEGER IENTRY !ENTRY POINTER INTO USER TABLES INTEGER IPINS !TEMPORARY STORAGE - # PINS INTEGER ITMP0 !POINTER INTO IPINEL INDICATING WHERE ROOM ! IS ALLOCATED. INTEGER ITMP1 !# INTEGERS IN THE ELSYM.DAT FILE FOR THE ! CURRENT SYMBOL (# PINS X 2) 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 INTEGER LIBENT(NMCHIP) !STORAGE FOR CHIP MAPPING ARRAY BYTE IW(2+34*IUSTLN+2*NMCHIP) 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 C C PAGE 4 - BUILDE C C C OPEN ELSYM.DAT C OPEN (UNIT=ISYS2,NAME='ELSYM.DAT',READONLY,TYPE='OLD',ERR=1000) CALL SAVE ISYSIN=ISYS2 C C COMMENSE SYNTACTICAL LOOP -- FIND AN ELECTRICAL SYMBOL C 10 CALL GETLEX(ITMP) 15 GOTO (100,10,10,20,16) ITMP 16 LEXSP=LEXSP+1 GOTO 10 C C FOUND AN ELECTRICAL SYMBOL. SEARCH FOR THE FIRST OCCURENCE OF THE C SYMBOL IN THE ELSYM TABLE. C 20 CALL TRANS(LEXSTK) IENTRY=0 !START AT THE BEGINNING OF THE ELSYM TABLE CALL SRCHI(LEXSTK,ELSYM,IENTRY) IF (IENTRY .EQ. 0) GOTO 10 !IF .T., SYMBOL NOT USED C C ALLOCATE A REGION OF IPINEL FOR THIS SYMBOL C IPINS=LPINS(LIBENT(IENTRY)) CALL ALLOCE(ITMP0,IPINS) C C STORE THE ELECTRICAL INFORMATION IN IPINEL C ITMP1=2*IPINS CALL GETNUM(ITMP1,IPINEL(1,ITMP0)) DO 25 I=1,IPINS J=IPINEL(1,ITMP0+I-1) IF ((J .GT. MXELCD) .OR. (J .LT. 0)) CALL DSKMSG(93,5) 25 CONTINUE C C SET UP POINTERS FOR ALL LOCATIONS WHICH REFERENCE THIS SYMBOL C 30 IF (IELOC(IENTRY) .EQ. 0) IELOC(IENTRY)=ITMP0 CALL SRCHI(LEXSTK,ELSYM,IENTRY) IF (IENTRY .EQ. 0) GOTO 10 GOTO 30 C C END-OF-FILE HANDLER C 100 IF (ICODE .EQ. 2) CALL DSKMSG(48,4) C CLOSE (UNIT=ISYS2) CALL RESTOR RETURN C C PAGE 5 - BUILDE C C C OPEN FAILURE HANDLER C 1000 CALL DSKMSG(49,4) C C END SUBROUTINE BUILDC 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 AURTHOR: RL AURBACH MAPC 1-SEP-78 C C THIS MODULE IS USED TO BUILD THE CONNECTOR PIN ALIAS TABLES FROM THE C USER'S SYMBOLIC ENTRIES AND THE DATA FILE PNSYM.DAT. IT IS IDENTICAL C IN FUNCTION TO BUILDS AND BUILDE C C COMPILATION INSTRUCTIONS: C C BUILDC,BUILDC/-SP=BUILDC C [FILE WIRCOM.FTN INCLUDED] C [FILE LEXATT.COM INCLUDED] C [FILE ALIAS.COM INCLUDED] C [FILE IOPAR.COM INCLUDED] C [FILE PARSE.COM INCLUDED] C C MODIFICATION HISTORY: C C V01.00 RLA 11-APR-78 ORIGINAL CODE C V01.01 RLA 1-SEP-78 REORGANIZED INCLUDED COMMON AREAS C C C PAGE 2 - BUILDC - DOCUMENTATION. C C THIS ROUTINE OPENS FILE PNSYM.DAT AND USES THE INFORMATION THEREIN C TO CREATE THE NECESSARY ENTRIES IN THE COMMON AREA "ALIAS". C THESE ENTRIES CONSIST OF THE ALIAS SYMBOLS FOR EDGE-CONNECTOR PINS. C WHEN THESE TABLES ARE SET UP CORRECTLY, THEY WILL BE USED TO TRANSLATE C BETWEEN A 4-CHARACTER SYMBOL FOR AN EDGE-CONNECTOR PIN AND THE PIN NUMBER. C C THE ORGANIZATION OF THE "ALIAS" AREA IS: C IALOC IS AN ARRAY INDEXED BY INTERNAL CHIP NUMBER. EACH ENTRY IS C A POINTER INTO THE ARRAY IPINAS FOR THE ALIAS SYMBOLS FOR C THAT PARTICULAR DEVICE. ONLY EDGE CONNECTORS WITH SPECIFIED C ALIASES WILL HAVE NON-ZERO ENTRIES IN THIS TABLE. C IPINAS IS AN ARRAY OF PIN ALIASES. FOR EACH UNIQUE EDGE CONNECTOR C (THAT IS, FOR EACH ONE WITH A UNIQUE CONNECTOR SYMBOL) THERE IS C A REGION DEFINED IN THIS TABLE. THE ENTRIES IN THIS REGION ARE C EITHER THE PIN ALIAS (4-CHARACTERS MAX) OR 0 (IF NO ALIAS IS C DEFINED FOR THIS PIN). C NXAENT IS A POINTER TO THE NEXT UNUSED ENTRY IN IPINAS. C C THE SOURCE OF THE DATA PLACED IN THESE ARRAYS IS THE INFORMATION CURRENTLY C IN THE AREA "WORK" PUT THERE FROM THE FILE UST.DAT BY THE SUBROUTINE LIBIN, C AND THE INFORMATION CONTAINED IN THE FILE PNSYM.DAT. C C THE FORMAT OF PNSYM.DAT IS: C CONNECTOR_SYMBOL C DEF DEF DEF ... DEF C WHERE CONNECTOR_SYMBOL IS A SYMBOL WHICH MATCHES WITH A CONNECTOR SYMBOL IN C UST.DAT AND WHERE DEF DEFINES A PIN ALIAS. THE DEF ENTRY CONSISTS OF AN C INTEGER, FOLLOWED BY A TERMINATOR (USUALLY A COMMA), FOLLOWED BY AN C ALPHAMERIC SYMBOL NO MORE THAN 4 CHARACTERS LONG. C C THE OPERATION IS FUNCTIONALLY SIMILAR TO BUILDS. C C PAGE 2 A - BUILDC - DOCUMENTATION (CONTINUED) C C C CALLING SEQUENCE: C C CALL BY: CALL BUILDC C C C ON ENTRY: IT IS ASSUMED THAT THE COMMON AREAS "ALIAS" AND "WORK" C CONTAIN THE APPROPRIATE INFORMATION. C C ON EXIT: "ALIAS" IS FILLED IN C C ERROR CONDITIONS: C C THE FOLLOWING FATAL ERRORS ARE DETECTED AND RESULT IN PROGRAM ABORT: C OPEN FAILURE ON FILE PNSYM.DAT C ERROR READING PNSYM.DAT C SYNTAX ERROR IN PNSYM.DAT (FORMAT OF THE FILE IS NOT AS C SPECIFIED ABOVE) C ATTEMPT TO ALLOCATE MORE THAN THE AVAILABLE SPACE IN IPINAS. C THIS PROBLEM CAN ONLY BE SOLVED BY ALLOCATING MORE ROOM. C C SPECIAL NOTES: C C NONE C C SUBROUTINES CALLED: C C GETLEX SAVE RESTOR SRCHI TRANS ALLOCC MSG C C PAGE 3 - BUILDC - DATA STORAGE DESCRIPTIONS. C C CALLING PARAMETERS: C C C PARAMETER STATEMENTS C INCLUDE 'WIRCOM.FTN' INCLUDE 'LEXATT.COM' INCLUDE 'ALIAS.COM' INCLUDE 'IOPAR.COM' INCLUDE 'PARSE.COM' C C LOCAL VARIABLE AND ARRAY DEFINITIONS: C INTEGER ITMP !GETLEX ASSOCIATED VARIABLE INTEGER IENTRY !ENTRY POINTER INTO USER TABLES INTEGER IPINS !TEMPORARY STORAGE FOR THE NUMBER OF PINS INTEGER ITMP0 !POINTER INTO IPINAS INDICATING WHERE ROOM ! IS ALLOCATED 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 BYTE ELSYM(8,IUSTLN) !STORAGE FOR ELECTRICAL SYMBOL 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 INTEGER LIBENT(NMCHIP) !STORAGE FOR CHIP MAPPING ARRAY BYTE IW(2+34*IUSTLN+2*NMCHIP) 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 C C PAGE 4 - BUILDC C C C OPEN PNSYM.DAT C OPEN (UNIT=ISYS2,NAME='PNSYM.DAT',READONLY,TYPE='OLD',ERR=1000) CALL SAVE ISYSIN=ISYS2 C C COMMENCE SYNTACTICAL LOOP -- FIND A CONNECTOR SYMBOL C 10 CALL GETLEX(ITMP) 15 GOTO (100,10,10,20,16) ITMP 16 LEXSP=LEXSP+1 GOTO 10 C C FOUND A CONNECTOR SYMBOL C SEARCH FOR THE FIRST OCCURENCE OF THE SYMBOL IN THE CONN TABLE C 20 CALL TRANS(LEXSTK) IENTRY=0 !START AT THE BEGINNING OF THE CONN TABLE CALL SRCHI(LEXSTK,CONN,IENTRY) IF (IENTRY .EQ. 0) GOTO 10 !IF .T., SYMBOL IS NOT USED C C ALLOCATE A REGION OF IPINAS FOR THIS SYMBOL C IF (DTYPE(LIBENT(IENTRY)) .NE. 5) CALL DSKMSG(50,4) IPINS=LPINS(LIBENT(IENTRY)) CALL ALLOCC(ITMP0,IPINS) C C STORE THE PIN-ALIAS INFORMATION IN THE IPINAS ARRAY C 21 CALL GETLEX(ITMP) 22 GOTO (40,21,21,40,23) ITMP 23 CALL POP(ITMP1) 24 CALL GETLEX(ITMP) 25 GOTO (2000,24,24,26,2000) ITMP 26 CALL TRANS4(IPINAS(1,ITMP0+ITMP1-1)) GOTO 21 !FINISHED WITH THIS DEFINITION -- GET !THE NEXT C C SET UP THE POINTERS FOR ALL LOCATIONS WHICH REFERENCE THIS SYMBOL C 40 IF (IALOC(IENTRY) .EQ. 0) IALOC(IENTRY)=ITMP0 CALL SRCHI(LEXSTK,CONN,IENTRY) IF (IENTRY .EQ. 0) GOTO 10 GOTO 40 C C PAGE 5 - BUILDC C C C END-OF-FILE HANDLER C 100 IF (ICODE .EQ. 2) CALL MSG(51,4) C CLOSE (UNIT=ISYS2) CALL RESTOR RETURN C C OPEN FAILURE HANDLER C 1000 CALL DSKMSG(52,4) C C SYNTAX ERROR HANDLER C 2000 CALL DSKMSG(53,5) C C C END SUBROUTINE COMPLE 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 1-SEP-78 C C THE ROUTINE CHECKS TO BE SURE THAT EVERY DEVICE HAS SPACING AND ELECTRICAL C INFORMATION ASSOCIATED WITH IT. C C COMPILATION INSTRUCTIONS: C C COMPLE,COMPLE/-SP=COMPLE C [FILE WIRCOM.FTN INCLUDED] C [FILE ELECTR.COM INCLUDED] C [FILE SPCING.COM INCLUDED] C [FILE PARAM.COM INCLUDED] C C MODIFICATION HISTORY: C C V01.00 EAS/RC 22-SEP-75 ORIGINAL CODE C V01.01 RLA 12-APR-78 MAKE ERRORS FATAL C V01.02 RLA 1-SEP-78 REORGANIZE INCLUDED COMMON AREAS C C C PAGE 2 - COMPLE - DOCUMENTATION. C C FOR EVERY DEVICE ON THE CARD, THIS ROUTINE CHECKS TO MAKE SURE THAT THE C ISLOC AND IELOC ARRAY ENTRIES ARE NON-ZERO. THERE IS NO ATTEMPT TO C DETERMINE IF THE NON-ZERO VALUES ARE CORRECT. C IF MISSING TABLE ENTRIES ARE ENCOUNTERED, THE ROUTINE WILL LIST THEM ON THE C TERMINAL AND WILL THEN ABORT THE PROGRAM. C C CALLING SEQUENCE: C C CALL BY: CALL COMPLE C C C C ON EXIT: IF THE PROGRAM IS NOT ABORTED, THE SPACING AND C ELECTRICAL TABLES EXIST. C C ERROR CONDITIONS: C C THIS ROUTINE IS BASICALLY AN ERROR CHECKER. THE MOST COMMON REASONS C FOR THE ROUTINE TO DETECT AN ERROR IS THAT THERE IS SOME PROBLEM WITH C THE UST.DAT, ELSYM.DAT, OR SPSYM.DAT TABLES. FOR EXAMPLE, THE DEVICE C MAY NOT BE LISTED IN ANY OF THE TABLES, OR IN UST.DAT BUT NOT IN THE C OTHER TABLES. IT IS ALSO POSSIBLE THAT THERE IS A SPELLING C INCOMPATABILITY BETWEEN THE ENTRY IN UST.DAT AND THE ENTRIES IN THE C OTHER FILES. C C SPECIAL NOTES: C C NONE C C SUBROUTINES CALLED: C C MSG C C PAGE 3 - COMPLE - DATA STORAGE DESCRIPTIONS. C C CALLING PARAMETERS: C C C PARAMETER STATEMENTS C INCLUDE 'WIRCOM.FTN' INCLUDE 'ELECTR.COM' INCLUDE 'SPCING.COM' INCLUDE 'PARAM.COM' C C LOCAL VARIABLE AND ARRAY DEFINITIONS: C INTEGER I !DO INDEX INTEGER J !IMPLIED DO INDEX LOGICAL ERROR !ERROR FLAG - IF TRUE THE ROUTINE WILL ! CRASH THE PROGRAM BYTE MSGBUF(IBF) !BUFFER AREA FOR CREATION OF ERROR !MESSAGES C C COMMON AREAS C C C LOCAL VARIABLE AND ARRAY INITIALIZATION: C C C PAGE 4 - COMPLE C ERROR=.FALSE. DO 30 I=1,NENT IF (ISLOC(I) .NE. 0) GOTO 20 ENCODE (47,11,MSGBUF) (ICNAME(J,I),J=1,8) CALL MSG(47,MSGBUF,2) ERROR=.TRUE. 20 IF (IELOC(I) .NE. 0) GOTO 30 ENCODE (50,12,MSGBUF) (ICNAME(J,I),J=1,8) CALL MSG(50,MSGBUF,2) ERROR=.TRUE. 30 CONTINUE IF (ERROR) CALL DSKMSG(56,4) RETURN C C 11 FORMAT ('( 54) No spacing data for the ',8A1,' device.') 12 FORMAT ('( 55) No electrical data for the ',8A1,' device.') C C END SUBROUTINE CONFIG 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.02 C C AUTHOR: RL AURBACH MAPC 7-DEC-78 C C THIS ROUTINE CHECKS FOR MINIMALLY CORRECT PHYSICAL LAYOUT. C BY THIS IS MEANT THAT THE ROUTINE CHECKS TO MAKE SURE THAT THE SPECIFIED C BOARD LOCATIONS FOR DEVICES DO NOT RESULT IN ANY DEVICE LYING ON TOP C OF ANY OTHER DEVICE. C C COMPILATION INSTRUCTIONS: C C CONFIG,CONFIG/-SP=CONFIG C [FILE WIRCOM.FTN INCLUDED] C [FILE PARAM.COM INCLUDED] C [FILE SPCING.COM INCLUDED] C C MODIFICATION HISTORY: C C V01.00 EAS/RC 9-SEP-75 ORIGINAL CODE C V02.00 RLA 18-APR-78 MODIFIED TO SUPPORT DEVICE TYPES C V02.01 RLA 1-SEP-78 REORGANIZE INCLUDED COMMON AREAS C V02.02 RLA 7-DEC-78 HANDLE THE CASE WHERE THE PLANE HAS C NO PINS C C C PAGE 2 - CONFIG - DOCUMENTATION. C C THIS ROUTINE ASSUMES THAT DEVICES OF TYPES 0, 1, AND 5 (NORMAL IC'S, C IC'S WITH USER-DEFINABLE PINS, AND CONNECTORS) EITHER HAVE LINEAR OR C RECTANGULAR SHAPES. C C THE ROUTINE CHECKS TO MAKE SURE THAT DEVICES DO NOT LIE ON TOP OF EACH OTHER. C C THIS IS DONE BY CHECKING (FOR EVERY DEVICE OF TYPE 0,1,OR 5) WHETHER ANY C PIN OF ANY OTHER DEVICE LIES INSIDE THE RECTANGLE FORMED BY THE DEVICE. C C NOTE THAT THIS CHECKING PROCEDURE ASSUMES THAT ALL OTHER DEVICES MAY HAVE C RANDOMLY LOCATED PINS. SINCE THIS MAY NOT ALWAYS BE THE CASE, THE USER C HAS THE RESPONSIBILITY OF CHECKING FOR PHYSICAL CONFLICTS BETWEEN OTHER C TYPES OF DEVICES. C C ONE OTHER CHECK IS PROVIDED FOR OTHER TYPES OF DEVICES--NAMELY A CHECK TO C MAKE SURE THAT NO TWO PINS ARE ASSIGNED TO THE SAME PHYSICAL LOCATION. C C THERE IS NO WAY TO CHECK FOR CONFLICTS BETWEEN DEVICES AND COMPONENTS WHICH C ARE MOUNTED DIRECTLY ON THE BOARD. C C CALLING SEQUENCE: C C CALL BY: CALL CONFIG C C C C ON EXIT: THE ABOVE CHECKS HAVE BEEN MADE. ANY ERRORS ARE C HANDLED AS FATAL ERRORS. C C ERROR CONDITIONS: C C THE ROUTINE WILL DETECT TWO CLASSES OF ERROR: C A DEVICE HAS A PIN WHICH IS LOCATED WITHIN THE RECTANGLE C DEFINED BY THE PINS OF SOME DEVICE OF TYPE 0,1, OR 5. C A DEVICE OF SOME OTHER TYPE HAS A PIN DEFINED AT A LOCATION C USED BY SOME PIN OF ANOTHER DEVICE. C C SPECIAL NOTES: C C AS USED IN THIS ROUTINE, THE DEFINITION OF "INSIDE" IS INCLUSIVE. C THAT IS, PINS WHICH LIE ALONG THE BOUNDARY OF A RECTANGLE ARE C CONSIDERED TO BE INSIDE THE RECTANGLE. C C SUBROUTINES CALLED: C C THE LOCAL FUNCTION "TEST" IS DEFINED IN THE ROUTINE. C THE LOCAL FUNCTION "FUNC" IS DEFINED IN THE ROUTINE. C C PAGE 3 - CONFIG - DATA STORAGE DESCRIPTIONS. C C CALLING PARAMETERS: C C C PARAMETER STATEMENTS C INCLUDE 'WIRCOM.FTN' INCLUDE 'PARAM.COM' INCLUDE 'SPCING.COM' C C LOCAL VARIABLE AND ARRAY DEFINITIONS: C LOGICAL TEST !DEFINE TYPE FOR THE FUNCTION LOGICAL FUNC !DEFINE TYPE FOR THE FUNCTION INTEGER IXMN,IXMX,IYMN,IYMX !DEVICE LIMITS INTEGER IX,IY,JX,JY !PIN COORDINATES INTEGER IS,JS,IF,JF !DO LOOP LIMITS INTEGER I,I1,J,K,L,M !DO INDEXES BYTE MSG1(84) !ERROR MESSAGE BUFFER C C COMMON AREAS C C C LOCAL VARIABLE AND ARRAY INITIALIZATION: C C C PAGE 4 - CONFIG C C C *** THE FIRST TEST INVOLVES A LOOP OVER ALL DEVICES OF TYPES 0,1,OR 5. C C C DEFINE THE LOCAL FUNCTION WHICH IS USED TO DETERMINED WHETHER A PIN C WITH COORDINATES IX,IY IS INSIDE A RECTANGLE DEFINED BY IXMN,IXMX, C IYMN,IYMX. C TEST(IX,IY)=(IX .GE. IXMN) .AND. (IX .LE. IXMX) .AND. 1 (IY .GE. IYMN) .AND. (IY .LE. IYMX) C C DEFINE THE LOCAL FUNCTION WHICH IS TRUE IF DEVICE K IS OF TYPE 0, 1, C OR 5. C FUNC(K)=(K .EQ. 0) .OR. (K .EQ. 1) .OR. (K .EQ. 5) C C THE TEST CONSISTS OF A MAJOR LOOP OVER ALL DEVICES OF TYPES 0,1,AND 5. C FOR EACH SUCH DEVICE, DEFINE THE RECTANGLE. C DO 100 I=1,NENT N=ITYPE(I) IF (.NOT. FUNC(N)) GOTO 100 IXMN=10000 IXMX=-10000 IYMN=10000 IYMX=-10000 JS=ISLOC(I) JF=JS+INUM(I)-1 DO 10 J=JS,JF IX=IPINSP(1,J) IY=IPINSP(2,J) IXMN=MIN0(IXMN,IX) IXMX=MAX0(IXMX,IX) IYMN=MIN0(IYMN,IY) IYMX=MAX0(IYMX,IY) 10 CONTINUE C C MAKE THE RECTANGLE AN ABSOLUTE LOCATION AREA BY ADDING IN THE BASE C LOCATION OF THE DEVICE. C IX=ISBASE(1,I) IY=ISBASE(2,I) IXMX=IXMX+IX IXMN=IXMN+IX IYMX=IYMX+IY IYMN=IYMN+IY C C PAGE 5 - CONFIG C C C NOW WE LOOP OVER ALL DEVICES (SKIPPING DEVICES OF TYPES 0, 1, OR 5 C IF THEY HAVE ALREADY BEEN CHECKED) TO SEE IF ANY PIN IS INSIDE THE C RECTANGLE. C DO 100 J=1,NENT N=ITYPE(J) IF ((J .LE. I) .AND. FUNC(N)) GOTO 100 JS=ISLOC(J) JF=JS+INUM(J)-1 DO 100 K=JS,JF JX=IPINSP(1,K)+ISBASE(1,J) JY=IPINSP(2,K)+ISBASE(2,J) IF (.NOT. TEST(JX,JY)) GOTO 100 ENCODE (84,2000,MSG1(1)) (ICNAME(L,J),L=1,8), 1 (SYMBL(L,J),L=1,4),(ICNAME(L,I),L=1,8),(SYMBL(L,I),L=1,4) CALL MSG(84,MSG1,2) 100 CONTINUE C C PAGE 6 - CONFIG C C C *** THE SECOND TEST INVOLVES A LOOP OVER ALL DEVICES WHICH ARE NOT C OF TYPES 0,1,OR 5. C C FOR EACH DEVICE NOT OF TYPES 0,1,OR 5, LOOP OVER ALL DEVICES NOT C OF TYPES 0, 1, OR 5 WITH HIGHER INTERNAL CHIP NUMBERS. C FOR EACH PIN, SEE IF THE PINS OVERLAP. C DO 200 I=1,NENT N=ITYPE(I) IF (FUNC(N)) GOTO 200 IF (INUM(I) .EQ. 0) GOTO 200 IS=ISLOC(I) IF=IS+INUM(I)-1 DO 200 J=IS,IF IX=ISBASE(1,I)+IPINSP(1,J) IY=ISBASE(2,I)+IPINSP(2,J) I1=I+1 JN=J-IS+1 DO 200 K=I1,NENT IF (FUNC(K)) GOTO 200 JS=ISLOC(K) JF=JS+INUM(K)-1 DO 200 L=JS,JF JX=ISBASE(1,K)+IPINSP(1,L) JY=ISBASE(2,K)+IPINSP(2,L) LN=L-JS+1 IF ((JX .NE. IX) .OR. (JY .NE. IY)) GOTO 200 ENCODE (80,2010,MSG1(1)) LN,(ICNAME(M,K),M=1,8), 1 (SYMBL(M,K),M=1,4),JN,(ICNAME(M,I),M=1,8), 2 (SYMBL(M,I),M=1,4) CALL MSG(80,MSG1,2) 200 CONTINUE C C PAGE 7 - CONFIG C C C C *** ENCODE FORMAT STATEMENTS C 2000 FORMAT ('( 57) The ',8A1,' at location ',4A1, 1 ' has a pin within the ',8A1,' at location ',4A1,'.') C C 2010 FORMAT ('( 58) Pin ',I3,' of the ',8A1,' at ',4A1, 1 ' overlaps pin ',I3,' of the ',8A1,' at ',4A1,'.') C C END SUBROUTINE PLCHAN 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.04 C C AUTHOR: RL AURBACH MAPC 13-DEC-78 C C THIS ROUTINE BEGINS THE PROCESS OF ENTERING THE CHAINS INTO THE DATA BASE C BY WRITING INTO THE WORK-SPACE CHAIN LIST THE APPROPRIATE INFORMATION FOR C THE CHAINS INVOLVING THE PLANES. C C COMPILATION INSTRUCTIONS: C C PLCHAN,PLCHAN/-SP=PLCHAN C [FILE WIRCOM.FTN INCLUDED] C [FILE ELECTR.COM INCLUDED] C [FILE PLAIN.COM INCLUDED] C [FILE PARAM.COM INCLUDED] C C MODIFICATION HISTORY: C C V01.00 RLA 20-APR-78 ORIGINAL CODE C V01.01 RLA 5-MAY-78 IMPLEMENT MODIFIED DATA BASE ("PLAIN"). C V01.02 RLA 1-SEP-78 REORGANIZE INCLUDED COMMON AREAS C V01.03 RLA 12-DEC-78 BUG FIXES C V01.04 RLA 13-DEC-78 ERROR MESSAGE BUFFER FIXES C C C PAGE 2 - PLCHAN - DOCUMENTATION. C C THIS ROUTINE PERFORMS A LOOP OVER THE POSSIBLE PLANES (NMPLAN IN NUMBER). C THERE ARE SEVERAL POSSIBILITIES. C C IF THE PLANE HAS NOT BEEN DEFINED (IPDEF = 0), DEFINE THE PLANE C USING THE DEFAULT PLANE NAME, SEARCH C FOR ALL PINS WHICH HAVE THE SAME ELECTRICAL CODE AS THE PLANE, C AND GENERATE A CHAIN HOOKING THEM TOGETHER. C C IF THE PLANE HAS BEEN DEFINED (IPDEF=1), THERE ARE C FOUR OPTIONS DEPENDING ON THE VALUE OF IPFLG. C C IPFLG=0 (PLANE PINS ALREADY INTERCONNECTED.) C (NO HARDWARE JUMPERS TO BE USED.) C C IF THE NUMBER OF PLANE PINS IS ZERO, C TREAT AS IF THE PLANE WERE NOT DEFINED. C C IF THE NUMBER OF PLANE PINS IS NON-ZERO, THEN FOR EVERY DEVICE C CONTAINING A PIN OF THE APPROPRIATE TYPE, GENERATE A ONE-WIRE C CHAIN FROM THE PIN TO THE CLOSEST PLANE PIN. EACH OF THESE C CHAINS GETS A DIFFERENT CHAIN NUMBER BUT THE SAME CHAIN TYPE. C IF THE CHAIN USES A PREVIOUSLY USED PLANE PIN, GIVE THE CHAIN C THE SAME NUMBER AS THE EARLIER CHAIN USING THAT PIN. C C IPFLG=1 (PLANE PINS ALREADY INTERCONNECTED.) C (HARDWARE JUMPERS ARE SPECIFIED.) C C FOR DEVICES OF TYPES 0 AND 1, PRODUCE A LISTING OF ALL PINS C WHICH SHOULD BE JUMPERED TO THE APPROPRIATE PLANE. C C IF THE NUMBER OF PLANE PINS IS ZERO, GENERATE A CHAIN CONNECTING C TOGETHER ALL PINS OF THE APPROPRIATE ELECTRICAL CODE FROM C DEVICES OF TYPES OTHER THAN 0 AND 1. C C IF THE NUMBER OF PLANE PINS IS NONZERO, THEN FOR EACH DEVICE C OF TYPES OTHER THAN 0 AND 1, GENERATE A CHAIN CONNECTING ALL C PINS OF APPROPRIATE ELECTRICAL CODE TO THE NEAREST PLANE PIN. C EACH OF THESE CHAINS HAS A SEPARATE NUMBER UNLESS A PLANE PIN C IS USED MORE THAN ONCE. C C IPFLG=2 (PLANE PINS MUST BE EXPLICITLY CONNECTED TOGETHER.) C (HARDWARE JUMPERS WILL NOT BE USED.) C C GENERATE A CHAIN CONTAINING ALL PINS OF THE APPROPRIATE C ELECTRICAL TYPE (INCLUDING THE PLANE PINS). C C IPFLG=3 (PLANE PINS MUST BE EXPLICITLY CONNECTED TOGETHER.) C (HARDWARE JUMPERS ARE SPECIFIED.) C C THIS IS A LOGIC ERROR. ISSUE A WARNING MESSAGE AND TREAT AS IF C IPFLG=2. C C PAGE 2 A - PLCHAN - DOCUMENTATION (CONTINUED) C C C C NOTE THAT THESE CHAINS (AND ALL CHAINS GENERATED BEFORE THE CHAIN-EDIT STEP) C ARE PLACED IN PROGRAM WORK-SPACE RATHER THAN IN THE "CHAINS" COMMON AREA. C THE CONTENTS OF THE "CHAINS" COMMON AREA IS RESERVED FOR EDITED CHAINS FOR C WHICH IT IS APPROPRIATE TO APPLY ASSORTED LOGICAL AND ELECTRICAL CHECKS. C C CALLING SEQUENCE: C C CALL BY: CALL PLCHAN C C C C ON EXIT: THE CHAIN-PROCESSING AREA OF THE WORKSPACE "WORK" IS C SET UP TO REFLECT PLANE PROCESSING. C C ERROR CONDITIONS: C C THE ONLY ERROR CONDITION DETECTED IS THE WARNING-LEVEL ERROR C THAT THE INCORRECT OPTIONS WERE SPECIFIED IN A PLANE COMMAND. C THE WARNING MESSAGE IS GENERATED, BUT AN ASSUMPTION IS MADE AND THE C PROCESSING IS CONTINUED USING THAT ASSUMPTION. C C SPECIAL NOTES: C C NONE C C SUBROUTINES CALLED: C C MSG NEARPL JMPLST C C PAGE 3 - PLCHAN - DATA STORAGE DESCRIPTIONS. C C CALLING PARAMETERS: C C C PARAMETER STATEMENTS C INCLUDE 'WIRCOM.FTN' INCLUDE 'ELECTR.COM' INCLUDE 'PLAIN.COM' INCLUDE 'PARAM.COM' C C LOCAL VARIABLE AND ARRAY DEFINITIONS: C INTEGER IPLANE !DO INDEX - PLANE # INTEGER KTYPE !PLANE TYPE INTEGER ITMP !COMPUTED GOTO INDEX INTEGER I,J,K,L,LL !DO INDICES AND DUMMY VARIABLES INTEGER MM,IWN,KS,KF !DO LIMITS, ETC. INTEGER N !# PINS LOGICAL JUMP !.T. IF IPJMP=.T. LOGICAL FOUND !.T. IF A SEARCH WAS SUCCESSFUL BYTE MSG1(77) !ERROR MESSAGE BUFFER C C COMMON AREAS C INTEGER IWNCN !NUMBER OF CHAINS IN WORK SPACE INTEGER IWLOC(NMCHAN) !POINTER TO START OF WORKSPACE CHAINLIST BYTE IWCHAN(2,NMCHPN) !WORK SPACE CHAIN LIST INTEGER IWNXT !NEXT UNUSED LOCATION IN IWCHAN INTEGER IWNUM(NMCHAN) !INTERNAL CHAIN NUMBER INTEGER IWCUR !INTERNAL CHAIN NUMBER TO BE USED NEXT BYTE IWTYP(NMCHAN) !CHAIN TYPE BYTE IW(7+5*NMCHAN+2*NMCHPN) !WORK SPACE ALLOCATION EQUIVALENCE (IWNCN,IW(1)) EQUIVALENCE (IWLOC(1),IW(3)) EQUIVALENCE (IWCHAN(1,1),IW(3+2*NMCHAN)) EQUIVALENCE (IWNXT,IW(3+2*NMCHAN+2*NMCHPN)) EQUIVALENCE (IWNUM(1),IW(5+2*NMCHAN+2*NMCHPN)) EQUIVALENCE (IWCUR,IW(5+4*NMCHAN+2*NMCHPN)) EQUIVALENCE (IWTYP(1),IW(7+4*NMCHAN+2*NMCHPN)) COMMON / WORK / IW C C LOCAL VARIABLE AND ARRAY INITIALIZATION: C C C PAGE 4 - PLCHAN C C C *** PLANES ARE ALWAYS HANDLED FIRST. THEREFORE INITIALIZE THE WORK SPACE. C THIS INVOLVES ZEROING THE NUMBER OF CHAINS COUNTER IWNCN, THE CHAIN C INDEX POINTERS IWLOC, THE POINTER TO THE NEXT UNUSED CHAIN-LIST C LOCATION IWNXT, THE CHAIN-NUMBER ARRAY IWNUM, AND THE CHAIN-TYPE ARRAY C IWTYP. C IWNCN=0 IWNXT=1 IWCUR=1 DO 10 I=1,NMCHAN IWLOC(I)=0 IWNUM(I)=0 10 IWTYP(I)=0 C C *** NOW WE BEGIN A LOOP OVER ALL PLANES. THE LOOP WORKS BY SETTING UP C AN INDEX ITMP BASED ON WHAT IS TO BE DONE FOR THAT PLANE AND DISPATCHING C TO THE APPROPRIATE PROCESSING ROUTINE VIA A COMPUTED GOTO. C C IT IS THE RESPONSIBILITY OF EACH PROCESSING SECTION TO RETURN CONTROL C TO THIS MAJOR LOOP WHEN IT IS DONE. C DO 20 IPLANE=1,NMPLAN C C THERE ARE NINE CASES: C C 0 - PLANE NOT DEFINED C 1 - IPFLG=0, IPNUM=0 C 2 - IPFLG=0, IPNUM>0 C 3 - IPFLG=1, IPNUM=0 C 4 - IPFLG=1, IPNUM>0 C 5 - IPFLG=2, IPNUM=0 C 6 - IPFLG=2, IPNUM>0 C 7 - IPFLG=3, IPNUM=0 C 8 - IPFLG=3, IPNUM>0 C KTYPE=IPTYP(IPLANE) IF (IPDEF(IPLANE) .EQ. 0) GOTO 100 ITMP=1+2*IPFLG(IPLANE) IF (IPNUM(IPLANE) .NE. 0) ITMP=ITMP+1 C C 15 GOTO (100,200,300,400,100,100,500,500) ITMP C C 20 CONTINUE RETURN C C PAGE 5 - PLCHAN C C C *** UNDEFINED PLANE PROCESSOR. C C GENERATE A CHAIN CONNECTING TOGETHER ALL PINS WITH THE APPROPRIATE C ELECTRICAL CODE. C C C LOOP OVER ALL DEVICES. FOR EACH DEVICE LOOP OVER ALL PINS. IF THE C PIN IS OF THE SAME ELECTRICAL TYPE AS THE PLANE BEING PROCESSED, C INCLUDE IT IN THE CHAIN. C 100 JUMP=.FALSE. 101 FOUND=.FALSE. DO 150 J=1,NENT IF (JUMP .AND. (ITYPE(J) .LT. 2)) GOTO 150 K=INUM(J) !NUMBER OF PINS DO 150 L=1,K !LOOP OVER PINS IF (FOUND) GOTO 140 IF (IPINEL(1,(IELOC(J)+L-1)) .NE. KTYPE) GOTO 150 FOUND=.TRUE. CALL PLDFLT(KTYPE) IWNCN=IWNCN+1 IWLOC(IWNCN)=IWNXT IWNUM(IWNCN)=IWCUR IWTYP(IWNCN)=KTYPE 140 IF (IPINEL(1,(IELOC(J)+L-1)) .NE. IWTYP(IWNCN)) GOTO 150 IWCHAN(1,IWNXT)=J IWCHAN(2,IWNXT)=L IWNXT=IWNXT+1 150 CONTINUE C C *** DONE WITH CHAIN GENERATION. C IF (FOUND) IWCUR=IWCUR+1 GOTO 20 C C PAGE 6 - PLCHAN C C C *** PROCESSOR FOR THE CASE OF IPCON=.F., IPJMP=.F., AND # PINS > 0. C C FOR ALL DEVICES (EXCEPT PLANES) GENERATE A CHAIN CONTAINING ALL PINS C OF THAT DEVICE WITH THE APPROPRIATE ELECTRICAL CODE AND THE NEAREST C PLANE PIN (TO THE LAST DEVICE PIN SELECTED). EACH SUCH CHAIN WILL C HAVE TYPE EQUAL TO THE PLANE TYPE AND WILL HAVE A UNIQUE INDEX UNLESS C THE PLANE PIN HAS ALREADY BEEN USED (IN WHICH CASE THE CHAIN WILL BE C GIVEN THE INDEX OF THE PREVIOUS CHAIN WHICH USES THAT PIN). C 200 JUMP=.FALSE. 201 DO 280 J=1,NENT LL=ITYPE(J) IF (JUMP .AND. (LL .LT. 2)) GOTO 280 IF ((LL .EQ. 3) .OR. (LL .EQ. 4) .OR. (LL .GT. 5)) GOTO 280 FOUND=.FALSE. N=INUM(J) DO 250 K=1,N IF (IPINEL(1,(IELOC(J)+K-1)) .NE. KTYPE) GOTO 250 IF (FOUND) GOTO 220 FOUND=.TRUE. IWNCN=IWNCN+1 IWLOC(IWNCN)=IWNXT IWNUM(IWNCN)=IWCUR IWTYP(IWNCN)=KTYPE 220 IWCHAN(1,IWNXT)=J IWCHAN(2,IWNXT)=K IWNXT=IWNXT+1 250 CONTINUE IF (.NOT. FOUND) GOTO 280 CALL NEARPL(IWCHAN(1,IWNXT-1),IPLANE,IWCHAN(1,IWNXT)) IF (IWCHAN(1,IWNXT) .NE. 0) IWNXT=IWNXT+1 IF (IWNCN .EQ. 1) GOTO 275 IWN=IWNCN-1 FOUND=.FALSE. LL=IWCHAN(1,IWNXT-1) MM=IWCHAN(2,IWNXT-1) DO 270 K=1,IWN KS=IWLOC(K) KF=IWLOC(K+1)-1 DO 270 L=KS,KF IF ((IWCHAN(1,L) .NE. LL) .OR. (IWCHAN(2,L) .NE. MM)) GOTO 270 FOUND=.TRUE. IWNUM(IWNCN)=IWNUM(K) 270 CONTINUE IF (FOUND) IWNXT=IWNXT-1 IF (FOUND) GOTO 280 275 IWCUR=IWCUR+1 280 CONTINUE GOTO 20 C C PAGE 7 - PLCHAN C C C *** PROCESSOR FOR THE CASE OF IPCON=.F., IPJMP=.T., AND # PINS = 0 C C C GENERATE A JUMPER LIST FOR THE USER (USING ROUTINE JMPLST) C C THEN GENERATE A LIST CONNECTING TOGETHER ALL PINS OF THE APPROPRIATE C ELECTRICAL TYPE OF ALL DEVICES OF TYPES OTHER THAN 0 AND 1. C C IN OTHER WORDS, THIS PROCESSING INVOLVES CALLING JMPLST AND THEN C PERFORMING THE PROCESSING OF THE CODE BEGINNING WITH STATEMENT 100 FOR C ALL DEVICES OF TYPE OTHER THAN 0 AND 1. C C 300 CALL JMPLST(IPLANE) JUMP=.TRUE. GOTO 101 C C PAGE 8 - PLCHAN C C C *** PROCESSOR FOR THE CASE OF IPCON=.F., IPJMP=.T., AND # PINS > 0. C C C PRODUCE A LISTING OF ALL JUMPER CONNECTIONS USING SUBROUTINE JMPLST. C C FOR EACH DEVICE OF TYPE OTHER THAN 0 AND 1, GENERATE A CHAIN CONNECTING C TOGETHER ALL PINS OF THE APPROPRIATE ELECTRICAL CODE TO THE PLANE PIN C WHICH IS NEAREST TO THE LAST DEVICE PIN PUT IN THAT CHAIN. EACH CHAIN C WILL HAVE A UNIQUE NUMBER UNLESS THE PLANE PIN WAS ALREADY USED. C C IN OTHER WORDS, THIS CODE CALLS JMPLST AND THEN PERFORMS THE CODE C BEGINNING AT 200 FOR ALL DEVICES WHICH ARE NOT OF TYPES 0 AND 1. C C 400 JUMP=.TRUE. CALL JMPLST(IPLANE) GOTO 201 C C PAGE 9 - PLCHAN C C C *** PROCESSING FOR THE CASE OF IPCON=.T., IPJMP=.T. C C THIS IS LOGICALLY INCORRECT. PRINT AN ERROR MESSAGE AND PROCESS AS IF C THE OPTIONS WERE IPCON=.T. AND IPJMP=.F. C C 500 ENCODE (77,550,MSG1) (IPNAM(L,IPLANE),L=1,4) CALL MSG(77,MSG1,0) CALL DSKMSG(59,0) GOTO 100 C C 550 FORMAT ('( 60) It is incorrect to specify both "CONNECT" and' 1 ' "JUMPER" for plane ',4A1,'.') C C END SUBROUTINE RDCHAN 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 1-SEP-78 C C THIS MODULE IS RESPONSIBLE FOR READING IN THE CHAIN-LIST FROM THE USER'S C INPUT FILE AND BUILDING CORRECTLY THE UNEDITED CHAINS IN COMMON AREA "WORK". C C COMPILATION INSTRUCTIONS: C C RDCHAN,RDCHAN/-SP=RDCHAN C [FILE WIRCOM.FTN INCLUDED] C [FILE LEXATT.COM INCLUDED] C [FILE ELECTR.COM INCLUDED] C [FILE SPCING.COM INCLUDED] C [FILE ALIAS.COM INCLUDED] C [FILE PARSE.COM INCLUDED] C [FILE PARAM.COM INCLUDED] C [FILE PLAIN.COM INCLUDED] C C MODIFICATION HISTORY: C C V01.00 RLA 2-MAY-78 ORIGINAL CODE C V01.01 RLA 1-JUN-78 ADD ILLEGAL PIN CHECKING LOGIC C V01.02 RLA 1-SEP-78 REORGANIZE INCLUDED COMMON AREAS C C C PAGE 2 - RDCHAN - DOCUMENTATION. C C THIS ROUTINE READS IN A LIST OF CHAINS. EACH CHAIN CONSISTS OF SOME NUMBER C PINS SPECIFICATIONS, WITH THE FIRST PIN SPECIFICATION BEGINNING IN THE FIRST C COLUMN. THIS IS IMPORTANT BECAUSE A BLANK, TAB, OR OTHER NON-ALPHANUMERIC C LITERAL IN THE FIRST COLUMN INDICATES THAT THE LINE IS A CONTINUATION LINE. C C THE FORMAT FOR A PIN SPECIFICATION IS: LOCATION_SYMBOL{TERMINATOR}PIN_SYMBOL C C WHERE LOCATION_SYMBOL IS A USER CHIP NUMBER, AN ALPHAMERIC LOCATION SYMBOL C (WHICH MUST MATCH A SYMBOL IN THE LOCATION_SYMBOL TABLE), OR A PLANE SYMBOL. C C THE TERMINATOR IS ANY NON-ALPHANUMERIC SYMBOL. SINCE NEGATIVE NUMBERS HAVE NO C MEANING IN THIS CONTEXT, A - SIGN MAY BE USED AS A HYPHEN TERMINATOR. ANOTHER C COMMON TERMINATOR IS A COMMA. IT IS LEGAL BUT UNUSUAL TO FIND A SPACE OR TAB C USED AS A TERMINATOR IN THIS CONTEXT SINCE SUCH USE MAKES THINGS HARD TO READ C AND CONFUSING (THESE TERMINATORS ARE USUALLY USED TO SEPARATE PIN SPECS). C C THE PIN_SYMBOL WILL USUALLY BE A PIN NUMBER (INTEGER). THERE ARE TWO C EXCEPTIONS: C IF THE LOCATION_SYMBOL REFERENCES A CONNECTOR FOR WHICH PIN ALIASES C HAVE BEEN DEFINED, THE ALIAS MAY APPEAR AS A PIN_SYMBOL. C IF THE LOCATION_SYMBOL REFERENCES A PLANE, NO PIN SYMBOL IS ALLOWED. C MOREOVER, A PLANE MAY NOT BE THE FIRST PIN SPEC IN A CHAIN C (THIS CONVENTION IS MADE FOR SOFTWARE CONVENIENCE.) C C C PAGE 2 A - RDCHAN - DOCUMENTATION (CONTINUED) C C C THE ALGORITHM PROCEEDS ROUGHLY AS FOLLOWS: C C WE GET A NEW LINE. A READ ERROR, EOF, OR $ SIGN (INDICATING A NEW COMMAND) C WILL CAUSE RETURN TO THE CALLER. C C A TERMINATOR IN COLUMN ONE WILL BE INTERPRETED AS A CONTINUATION-LINE C INDICATOR AND WILL RESULT IN CONTINUED PROCESSING OF THE CURRENT CHAIN. C C A LETTER OR NUMBER IN COLUMN ONE WILL RESULT IN THE ALLOCATION OF A NEW CHAIN C NUMBER. C IF THE LOCATION_SYMBOL IS A NUMBER, IT IS POPPED OFF THE STACK AND C REPLACED WITH THE EQUIVALENT INTERNAL NUMBER. THE PIN_SYMBOL IS READ AND IF C IT IS A NUMBER ALSO, THE PIN SPEC ON THE STACK IS DUMPED INTO THE CHAIN. C IF THE PIN_SYMBOL IS AN ALPHAMERIC, THEN IF THE CHIP IS A CONNECTOR, THE C SYMBOL IS MATCHED AGAINST THE APPROPRIATE ALIAS TABLE AND HENCE CONVERTED TO C A PIN NUMBER ON THE STACK. THE PIN SPEC IS PROCESSED AS ABOVE. C C C IF THE LOCATION_SYMBOL IS AN ALPHAMERIC, THEN THE RESPONSE DEPENDS ON WHETHER C THE SYMBOL REPRESENTS A PLANE OR NOT. IF THE SYMBOL REPRESENTS A NON-PLANE, C THEN THE SYMBOL TABLE IS SEARCHED FOR A MATCH, EXTRACTING THE INTERNAL CHIP C NUMBER. THE INTERNAL CHIP NUMBER REPLACES THE LITERAL SPECIFICATION ON THE C STACK AND THE PROCESSING CONTINUES AS ABOVE. C C IF ON THE OTHER HAND THE SYMBOL REPRESENTS A PLANE, COMPLEX PROCESSING IS C PERFORMED. THIS PROCESSING WILL BE DESCRIBED IN DETAIL AS A SPECIAL HEADER C TO THAT SECTION OF THE CODE. C C C C PAGE 2 B - RDCHAN - DOCUMENTATION (CONTINUED) C C C CALLING SEQUENCE: C C CALL BY: CALL RDCHAN C C C C ON EXIT: THE CHAINS WILL HAVE BEEN FORMED IN THE WORK SPACE, C IN A FORM READY FOR CHAIN EDITING. C C ERROR CONDITIONS: C C ALL ERRORS DISCOVERED IN THIS SECTION (BASICALLY SYNTAX ERRORS, C UNDEFINED SYMBOLS, AND THE LIKE) ARE SERIOUS ERRORS AND ARE FLAGGED C AS SUCH. NOTE THAT NO ATTEMPT IS MADE IN THIS ROUTINE TO CATCH ERRORS C RELATED TO HAVING ONLY ONE PIN IN A CHAIN. THIS IS BECAUSE THE NUMBER C OF PINS IN THAT CHAIN COULD CHANGE AS A RESULT OF THE CHAIN-EDIT C PROCESS. IF SUCH A CONDITION PERSISTS AFTER CHAIN-EDIT, IT WILL BE C DEALT WITH AT THAT TIME. C C SPECIAL NOTES: C C NONE C C SUBROUTINES CALLED: C C GETLX0 TRANS4 MSG PUSH POP ICHECK COMPAR NEARPL C C C PAGE 3 - RDCHAN - 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 'ALIAS.COM' INCLUDE 'PARSE.COM' INCLUDE 'PARAM.COM' INCLUDE 'PLAIN.COM' C C LOCAL VARIABLE AND ARRAY DEFINITIONS: C INTEGER ITMP INTEGER I,J,K,L,M,N INTEGER IPLANE INTEGER KTYPE INTEGER LD,LP INTEGER JX,JY,NX,NY INTEGER IMIN,JMIN BYTE IDOLAR LOGICAL NONEW LOGICAL FOUND LOGICAL PLN LOGICAL PIN LOGICAL COMPAR REAL*4 LTMP REAL*4 D,DX,DY,DMIN C C COMMON AREAS C INTEGER IWNCN !NUMBER OF CHAINS IN WORK SPACE INTEGER IWLOC(NMCHAN) !POINTER TO START OF WORKSPACE CHAINLIST BYTE IWCHAN(2,NMCHPN) !WORK SPACE CHAIN LIST INTEGER IWNXT !NEXT UNUSED LOCATION IN IWCHAN INTEGER IWNUM(NMCHAN) !INTERNAL CHAIN NUMBER INTEGER IWCUR !INTERNAL CHAIN NUMBER TO BE USED NEXT BYTE IWTYP(NMCHAN) !CHAIN TYPE BYTE IW(7+5*NMCHAN+2*NMCHPN) !WORK SPACE ALLOCATION EQUIVALENCE (IWNCN,IW(1)) EQUIVALENCE (IWLOC(1),IW(3)) EQUIVALENCE (IWCHAN(1,1),IW(3+2*NMCHAN)) EQUIVALENCE (IWNXT,IW(3+2*NMCHAN+2*NMCHPN)) EQUIVALENCE (IWNUM(1),IW(5+2*NMCHAN+2*NMCHPN)) EQUIVALENCE (IWCUR,IW(5+4*NMCHAN+2*NMCHPN)) EQUIVALENCE (IWTYP(1),IW(7+4*NMCHAN+2*NMCHPN)) COMMON / WORK / IW C C LOCAL VARIABLE AND ARRAY INITIALIZATION: C DATA IDOLAR / '$' / C C PAGE 4 - RDCHAN C C C *** NEW LINE PROCESSOR C C GET A NEW LINE. C IF EOF, RETURN. IF READ ERROR, DO MSG, THEN RETURN. IF $ SEEN, RETURN. C IF EOL, GET ANOTHER LINE. C C IF ALPHAMERIC OR NUMERIC, ALLOCATE A NEW CHAIN AND BEGIN CHAIN- C PROCESSING. ELSE ASSUME CONTINUATION LINE SEEN AND SKIP ALLOCATION STEP C C 5 NEWLIN=.TRUE. LEXSP=LEXMX+1 6 CALL GETLX0(ITMP) GOTO (90,70,10,20,20) ITMP C C NON-ALPHANUMERIC PROCESSOR. C IF $, RETURN, ELSE SKIP ALLOCATION C 10 IF (LINBUF(NEXCHR-1) .EQ. IDOLAR) GOTO 90 GOTO 40 C C ALLOCATE A NEW CHAIN C 20 NONEW=.FALSE. IF (IWNCN .LT. 1) GOTO 21 IF (IWLOC(IWNCN) .EQ. IWNXT) GOTO 22 !REALLOCATE A NULL CHAIN 21 IWNCN=IWNCN+1 22 IWLOC(IWNCN)=IWNXT IWNUM(IWNCN)=IWCUR IWTYP(IWNCN)=0 IWCUR=IWCUR+1 C C DISPATCH ON ALPHAMERIC OR NUMERIC TYPES. C NOTE THAT TO GET HERE ITMP WILL BE EITHER 4 OR 5 C 30 GOTO (80,80,80,200,100) ITMP C C AT THIS POINT WE ASSUME THAT THE PIN HAS BEEN PROCESSED. WE NOW LOOK C FOR THE NEXT PIN IN THE CHAIN. C 40 CALL GETLX0(ITMP) GOTO (90,70,40,200,100) ITMP C C PAGE 4 A - RDCHAN C C C *** EOL HANDLER C 70 IF (ICODE .EQ. 0) GOTO 5 IF (ICODE .EQ. 1) GOTO 90 CALL DSKMSG(61,3) GOTO 90 C C *** IRRECOVERABLE LOGIC ERROR HANDLER C 80 CALL DSKMSG(62,4) C C *** EOF HANDLER C 90 IWLOC(IWNCN+1)=IWNXT RETURN C C PAGE 5 - RDCHAN C C C *** CHAIN BUILDER -- NUMERIC LOCATION_SYMBOLS C C C POP THE NUMBER OFF THE STACK AND USE IT TO FETCH THE INTERNAL NUMBER C FOR THE DEVICE USING THE IENT TABLE. C STORE THIS NUMBER ON THE STACK. C 100 CALL POP(ITMP) IF (ITMP .GT. NMCHIP) GOTO 1010 !ILLEGAL DEVICE CODE IE=IENT(ITMP+1) CALL PUSH(IE) IF (LEXSTK(LEXSP) .LE. 0) GOTO 1010 !ILLEGAL DEVICE CODE C C C SKIP OVER TERMINATOR AND FETCH THE PIN NUMBER FIELD. DISPATCH FOR C NUMERIC OR SYMBOLIC ENTRY. C 110 CALL GETLX0(ITMP) GOTO (1020,1020,110,130,120) ITMP !MISSING DATUM C C PAGE 5 A - RDCHAN C C C C *** NUMERIC PIN ENTRY. C C C *** WE FIRST MUST CHECK TO SEE IF THE PIN HAS AN ELECTRICAL CODE THE SAME C AS THE TYPE CODE OF ONE OF THE PLANES. IF IT DOES, THEN SPECIAL C PROCESSING IS NECESSARY. C C IF THE CURRENT CHAIN TYPE IS 0, THEN THIS PIN IS THE FIRST PLANE PIN C (OR EQUIVALENT) IN THE CHAIN. SET THE CHAIN TYPE TO THE PLANE TYPE. C IF THE CURRENT CHAIN TYPE IS NON-ZERO, THEN THE ONLY LEGAL VALUE IS C A TYPE THE SAME AS THE ELECTRICAL TYPE OF THIS PIN. ELSE YOU ARE TRYING C TO CONNECT TWO PLANES TOGETHER, WHICH IS ILLEGAL. C C ** NOTE ** C THIS HAS THE UNDESIRABLE CONSEQUENCE C OF NOT ALLOWING THE DIGITAL AND ANALOG C GROUNDS TO BE WIRED TOGETHER. GOOD C GROUNDING PRACTISE SUGGESTS THAT THIS C SEPARATION BE MAINTAINED, HOWEVER, SO C THIS FEATURE WILL BE ACCEPTED. C C IF THE PLANE ASSOCIATED WITH THE SPECIFIED PIN HAS A FLAG BYTE (IPFLG) C OF 1 (THAT IS, PLANE PINS INTERNALLY CONNECTED AND HARDWARE JUMPERS ARE C TO BE USED) AND IF THIS CHIP USES THE JUMPERS (I.E. IS OF TYPES 0 OR 1) C THEN THIS CHAIN SHOULD REALLY APPEAR AS WRITTEN IN THE C EDITTED CHAIN LIST. THEREFORE, THIS PIN IS INCLUDED IN THE CHAIN, C THE CHAIN IS ALLOWED TO HAVE ITS UNIQUE NUMBER, AND IN GENERAL WE C IGNORE THE FACT THAT THE PIN HAS ANY SPECIAL ELECTRICAL CHARACTERISTIC. C C IN ALL OTHER CASES THIS PIN WILL ALREADY APPEAR IN SOME PREVIOUS CHAIN. C THE CORRECT RESPONSE IS TO FIND THE CHAIN NUMBER OF THE PREVIOUS C REFERENCE TO THIS PIN AND GIVE THIS CHAIN THAT NUMBER. C 120 CALL ICHECK(L) IF (L .EQ. 0) GOTO 125 IF (IWTYP(IWNCN) .EQ. 0) IWTYP(IWNCN)=L IF (IWTYP(IWNCN) .NE. L) GOTO 1060 !TWO PLANES IN ONE CHAIN C C LOCATE THE PLANE WITH THE APPROPRIATE TYPE. C IPLANE=0 DO 121 K=1,NMPLAN IF (IPTYP(K) .EQ. L) IPLANE=K 121 CONTINUE C C PAGE 5 B - RDCHAN C C C SHOULD THIS PIN APPEAR HERE IN THE CHAIN LIST? C IF ((IPFLG(IPLANE) .EQ. 1) .AND. (ITYPE(LEXSTK(LEXSP+1)) .LT. 2)) 1 GOTO 125 C C NO. C SET THINGS UP SO THIS CHAIN MAY BE GIVEN THE NUMBER OF A C PREVIOUS CHAIN. C IF (NONEW) GOTO 124 IWCUR=IWCUR-1 NONEW=.TRUE. C C FIND THE CHAIN WHICH REFERENCES THIS PIN. C J=IWNCN-1 DO 122 K=1,J M=IWLOC(K) N=IWLOC(K+1)-1 DO 122 L=M,N IF ((IWCHAN(1,L) .EQ. LEXSTK(LEXSP+1)) .AND. 1 (IWCHAN(2,L) .EQ. LEXSTK(LEXSP))) IWNUM(IWNCN)=IWNUM(K) 122 CONTINUE C C THIS PIN WILL NOT APPEAR IN THE CHAIN SINCE IT HAS ALREADY BEEN SEEN. C THEREFORE POP IT OFF THE STACK AND CONTINUE PROCESSING. C 124 LEXSP=LEXSP+2 GOTO 40 C C C *** INSERT A PIN INTO THE CHAIN-LIST C 125 CALL POP(ITMP) IF ((ITMP .LE. 0) .OR. (ITMP .GT. INUM(LEXSTK(LEXSP)))) GOTO 1080 IWCHAN(2,IWNXT)=ITMP CALL POP(ITMP) IWCHAN(1,IWNXT)=ITMP IWNXT=IWNXT+1 GOTO 40 C C PAGE 5 C - RDCHAN C C C C ALPHAMERIC PIN ENTRY. C C THIS TYPE OF ENTRY IS ONLY LEGAL FOR CONNECTORS WHICH HAVE DEFINED C ALIASES. SEARCH THE ALIAS TABLE AND FIND THE PIN NUMBER CORRESPONDING C TO THE ALIAS. PUSH THE VALUE ON THE STACK AND PROCESS AS ABOVE. C 130 ITMP=LEXSTK(LEXSP+2) !INTERNAL CHIP NUMBER IF (ITYPE(ITMP) .NE. 5) GOTO 1030 !PIN ALIAS ILLEGAL HERE IF (IALOC(ITMP) .EQ. 0) GOTO 1040 !PIN ALIAS UNDEFINED CALL TRANS4(LTMP) L=INUM(ITMP) DO 140 K=1,L IF (COMPAR(LTMP,IPINAS(1,IALOC(ITMP)+K-1),4)) GOTO 150 140 CONTINUE GOTO 1040 150 CALL PUSH(K) GOTO 120 C C PAGE 6 - RDCHAN C C C *** CHAIN BUILDER -- ALPHAMERIC LOCATION_SYMBOLS C C C POP THE LITERAL SPECIFICATION INTO A TEMPORARY LOCATION AND SEARCH C THE SYMBL TABLE FOR A MATCH. PUSH THE INTERNAL DEVICE NUMBER FOUND IN C THE MATCHING PROCESS ONTO THE STACK. IF THE TYPE OF THE DEVICE C WITH THAT INTERNAL NUMBER IS THE SAME AS THE TYPE OF SOME PLANE, C (NAMELY 3, 4, OR > 5), THEN WE HAVE FOUND A PLANE DESIGNATION, WHICH C MUST BE SPECIALLY HANDLED (NOTE: WHEN PLANES ARE DEFINED, ILOC IS C GIVEN THE VALUE -128). ELSE WE HAVE A DEVICE. NOW THAT THE C LITERAL-TO-INTERNAL-NUMBER CONVERSION HAS BEEN COMPLETED, THIS DEVICE C MAY BE HANDLED JUST LIKE A DEVICE WITH A NUMERIC LOCATION_SYMBOL. C C 200 CALL TRANS4(LTMP) ITMP=0 DO 210 K=1,NENT IF (COMPAR(LTMP,SYMBL(1,K),4)) ITMP=K 210 CONTINUE IF (ITMP .EQ. 0) GOTO 1050 !LOCATION SYMBOL UNDEFINED IF (ILOC(ITMP) .EQ. -128) GOTO 300 CALL PUSH(ITMP) GOTO 110 C C PAGE 7 - RDCHAN C C C *** PLANE_SYMBOL PROCESSING C C LOCATE THE PLANE ASSOCIATED WITH THE SYMBOL. THE PLANE_SYMBOL MUST C NOT BE THE FIRST SYMBOL IN THE CHAIN BECAUSE SUBSEQUENT ACTION IS C BASED ON THE PHYSICAL LOCATION OF THE IMMEDIATELY PRECEEDING C PIN. C C IF THERE IS ANOTHER PIN OF THE SAME DEVICE WITH THE SAME ELECTRICAL C CHARACTERISTICS AS THE REFERENCED PLANE, THEN THE PLANE_SYMBOL WILL C BE INTERPRETED AS REFERRING TO THAT PIN. C C IF NOT, THE PLANE SYMBOL WILL BE INTERPRETED AS REFERRING TO THE C CLOSEST SPECIFIED PIN OF THAT PLANE OR TO THE CLOSEST PIN OF ANOTHER C DEVICE WITH THE RIGHT ELECTRICAL CHARACTERISTICS (WHICHEVER IS CLOSER C TO THE LAST-PROCESSED PIN OF THIS CHAIN. C C THE PROCESSING OF THE CHAIN DEPENDS ON WHICH OF THE ABOVE POSSIBILITIES C ACTUALLY OCCURS. IN GENERAL, HOWEVER, CARE WILL BE TAKEN TO INSURE C THAT MULTIPLE REFERENCES TO A PIN ARE AVOIDED AND THAT NO INTERCHAIN C CONNECTIONS ARE GENERATED. THEREFORE, THE MOST FREQUENT RESULT WILL C BE THAT THE REFERENCE TO THE PLANE WILL NOT RESULT IN AN ADDITION TO C THE CHAIN-LIST, BUT RATHER THAT THE NUMBER OF THIS CHAIN WILL BE C MODIFIED TO BE THAT OF SOME PREVIOUS CHAIN. (THAT MEANS THAT EDCHAN C WILL CONCATENATE IT WITH THE OTHER CHAINS OF THE SAME NUMBER LATER.) C C *** CHECK TO SEE IF THE PLANE REFERENCE IS THE FIRST SPEC IN THE CHAIN. C 300 IF (IWLOC(IWNCN) .EQ. IWNXT) GOTO 1070 !PLANE SYMBOL IS FIRST C C *** LOOK UP THE PLANE REFERENCE AND DETERMINE THE PLANE TYPE. C IPLANE=0 DO 310 K=1,NMPLAN IF (COMPAR(LTMP,IPNAM(1,K),4)) IPLANE=K 310 CONTINUE KTYPE=IPTYP(IPLANE) C C *** CHECK FOR CHAIN TYPE. IF THE TYPE IS ZERO OR THE SAME TYPE AS THIS C PLANE, ALL IS OKAY. ELSE WE HAVE CONNECTED A CHAIN TO TWO PLANES. C IF (IWTYP(IWNCN) .EQ. 0) IWTYP(IWNCN)=KTYPE IF (IWTYP(IWNCN) .NE. KTYPE) GOTO 1060 !TWO PLANES IN ONE CHAIN C C PAGE 7 A - RDCHAN C C C *** STORE THE DEVICE AND PIN NUMBERS OF THE LAST PIN SPEC. CHECK TO SEE C IF THERE IS ANY OTHER PIN OF THE SAME DEVICE WITH THE RIGHT ELECTRICAL C TYPE. IF THERE IS, GOTO 370 TO PROCESS JUST AS IF THE PLANE SPEC C HAD BEEN THAT PIN SPEC. C LD=IWCHAN(1,IWNXT-1) LP=IWCHAN(2,IWNXT-1) L=INUM(LD) M=IELOC(LD)-1 DO 320 K=1,L IF (K .EQ. LP) GOTO 320 IF (IPINEL(1,M+K) .NE. KTYPE) GOTO 320 CALL PUSH(LD) CALL PUSH(K) GOTO 370 320 CONTINUE C C *** SEARCH FOR THE NEAREST PLANE PIN OF THE RIGHT PLANE. IF THERE IS ONE, C PUSH ITS SPEC ON THE STACK AND SET PLN=.T. C PLN=.FALSE. CALL NEARPL(IWCHAN(1,IWNXT-1),IPLANE,IWCHAN(1,IWNXT)) L=IWCHAN(1,IWNXT) IF (L .EQ. 0) GOTO 330 PLN=.TRUE. CALL PUSH(L) L=IWCHAN(2,IWNXT) CALL PUSH(L) C C PAGE 7 B - RDCHAN C C C *** SEARCH FOR THE NEAREST PIN OF SOME OTHER DEVICE WHICH HAS THE C CORRECT ELECTRICAL CHARACTERISTICS. IF THERE IS SUCH A PIN, SET C PIN=.TRUE., AND PUSH ITS SPEC ON THE STACK. C 330 PIN=.FALSE. IMIN=0 JMIN=0 DMIN=10000. NX=ISBASE(1,LD)+IPINSP(1,ISLOC(LD)-1+LP) NY=ISBASE(2,LD)+IPINSP(2,ISLOC(LD)-1+LP) DO 340 I=1,NENT IF (I .EQ. LD) GOTO 340 IF (ITYPE(I) .EQ. KTYPE) GOTO 340 N=INUM(I) DO 340 J=1,N IF (IPINEL(1,IELOC(I)-1+J) .NE. KTYPE) GOTO 340 JX=ISBASE(1,I)+IPINSP(1,ISLOC(I)-1+J) JY=ISBASE(2,I)+IPINSP(2,ISLOC(I)-1+J) DX=FLOAT(NX-JX) DY=FLOAT(NY-JY) D=SQRT(DX*DX+DY*DY) IF (D .GE. DMIN) GOTO 340 DMIN=D IMIN=I JMIN=J 340 CONTINUE IF (IMIN .EQ. 0) GOTO 350 PIN=.TRUE. CALL PUSH(IMIN) CALL PUSH(JMIN) C C *** IF BOTH PLN=.T. AND PIN=.T., THERE ARE TWO PIN SPECS ON THE LEXICAL C STACK. SELECT THE ONE WHICH IS CLOSEST TO OUR TEST PIN AND DISCARD C THE OTHER. C 350 IF (.NOT.(PIN .AND. PLN)) GOTO 370 I=LEXSTK(LEXSP+3) J=LEXSTK(LEXSP+2) JX=ISBASE(1,I)+IPINSP(1,ISLOC(I)-1+J) JY=ISBASE(2,I)+IPINSP(2,ISLOC(I)-1+J) DX=FLOAT(NX-JX) DY=FLOAT(NY-JY) D=SQRT(DX*DX+DY*DY) IF (D .LE. DMIN) GOTO 360 LEXSTK(LEXSP+3)=LEXSTK(LEXSP+1) LEXSTK(LEXSP+2)=LEXSTK(LEXSP) 360 LEXSP=LEXSP+2 C C PAGE 7 C - RDCHAN C C C *** IF THERE EXISTS A PREVIOUS CHAIN WHICH REFERENCES THIS PLANE-LIKE C PIN, GIVE THIS CHAIN ITS NUMBER, RESET IWNCN AND IWCUR, AND POP C THE PIN SPEC OFF THE STACK. GO TO 40 TO PROCESS MORE PINS OF THIS C CHAIN. C C IF, ON THE OTHER HAND, THIS CHAIN REPRESENTS THE FIRST REFERENCE TO C THE PIN WE HAVE FOUND, THIS PIN SPEC MUST BE PLACED IN THE CHAIN. C DO THIS BY USING THE CODE AT 125. C 370 FOUND=.FALSE. J=IWNCN-1 DO 380 K=1,J M=IWLOC(K) N=IWLOC(K+1)-1 DO 380 L=M,N IF (.NOT.((IWCHAN(1,L) .EQ. LEXSTK(LEXSP+1)) .AND. 1 (IWCHAN(2,L) .EQ. LEXSTK(LEXSP)))) GOTO 380 FOUND=.TRUE. IF (NONEW .AND. (IWNUM(IWNCN) .NE. K)) GOTO 1090 !INTERCHAIN CONNECTION IF (NONEW) GOTO 380 NONEW=.TRUE. IWCUR=IWCUR-1 IWNUM(IWNCN)=IWNUM(K) 380 CONTINUE IF (.NOT. FOUND) GOTO 125 LEXSP=LEXSP+2 GOTO 40 C C PAGE 8 - RDCHAN C C C C *** ERROR HANDLERS C C 1010 CALL DSKMSG(63,3) GOTO 5 C 1020 CALL DSKMSG(64,3) GOTO 5 C 1030 CALL DSKMSG(65,3) GOTO 5 C 1040 CALL DSKMSG(66,3) GOTO 5 C 1050 CALL DSKMSG(67,3) GOTO 5 C 1060 CALL DSKMSG(68,3) GOTO 5 C 1070 CALL DSKMSG(69,3) GOTO 5 C 1080 CALL DSKMSG(70,3) GOTO 5 C 1090 CALL DSKMSG(71,3) GOTO 5 C C END SUBROUTINE MSGSET 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 MODULE PROCESSES THE $MESSAGE DIRECTIVE. C C COMPILATION INSTRUCTIONS: C C MSGSET,MSGSET/-SP=MSGSET C [FILE WIRCOM.FTN INCLUDED] C [FILE PARSE.COM INCLUDED] C C MODIFICATION HISTORY: C C V01.00 RLA 8-JUN-78 ORIGINAL CODE C V01.01 RLA 1-SEP-78 REORGANIZED INCLUDED COMMON AREAS C C C PAGE 2 - MSGSET - DOCUMENTATION. C C THIS ROUTINE HANDLES THE $MESSAGE DIRECTIVE. C C THE DIRECTIVE FORMAT IS: C C $MESSAGE C TEXT_LINE C TEXT_LINE C ... C C THE TEXT LINES ARE PRINTED ON THEIR OWN LISTING PAGE. C THE COMMAND IS TERMINATED BY ENCOUNTERING AN EOF OR A $ IN COLUMN ONE. C C CALLING SEQUENCE: C C CALL BY: CALL MSGSET C C C C ON EXIT: THIS ROUTINE PRODUCES OUTPUT C C ERROR CONDITIONS: C C NONE C C SPECIAL NOTES: C C TEXT ON THE SAME LINE AS THE $MESSAGE DIRECTIVE WILL NOT BE PRINTED. C C SUBROUTINES CALLED: C C HDR LISTER C C PAGE 3 - MSGSET - DATA STORAGE DESCRIPTIONS. C C CALLING PARAMETERS: C C C PARAMETER STATEMENTS C INCLUDE 'WIRCOM.FTN' INCLUDE 'PARSE.COM' C C LOCAL VARIABLE AND ARRAY DEFINITIONS: C REAL*8 SBTTL(3) !"WIRING INSTRUCTIONS" C C COMMON AREAS C C C LOCAL VARIABLE AND ARRAY INITIALIZATION: C DATA SBTTL / 'WIRING I', 'NSTRUCTI', 'ONS' / C C PAGE 4 - MSGSET C C C *** SET UP NEW PAGE C CALL HDR(SBTTL) NEWLIN=.TRUE. CALL LISTER(SBTTL) RETURN END