MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME - V2R1I1 00000010 00002 C 00000020 00003 C * * * * * N D T R A N * * * * * 00000030 00004 C 00000040 00005 C NDTRAN IS A SYSTEM DYNAMICS CONTINUOUS SIMULATION LANGUAGE 00000050 00006 C DEVELOPED AT THE UNIVERSITY OF NOTRE DAME, FINANCED BY A 00000060 00007 C GRANT FROM THE MAX D. FLEISCHMANN FOUNDATION, UNDER THE 00000070 00008 C DIRECTION OF DR. WILLIAM I. DAVISSON AND DR. JOHN J. UHRAN, JR. 00000080 00009 C THIS INTERPRETER WHICH COMPUTERIZES THE NDTRAN LANGUAGE WAS 00000090 00010 C WRITTEN BY DANIEL A. POYDENCE, THOMAS L. EVERMAN, JR., 00000100 00011 C GARY L. PELKEY, AND TIMOTHY J. MALLOY AS UNDERGRADUATES 00000110 00012 C OF THE UNIVERSITY. 00000120 00013 C 00000130 00014 C 00000140 00015 REAL*8 RMIN,RMAX,LITBL(8192) 00000150 00016 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00000160 00017 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00000170 00018 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00000180 00019 3SYMTB(5,4096) 00000190 00020 INTEGER INIT0(21644),INIT1(48),INIT2(48),I,READR,PRNTR, 00000200 00021 1DISK,LINPP,EXPMX,INTYP,PSSWT,SYMND,LITND,VALCT,STPGM, 00000210 00022 2DSKND,VARND,OBJND,PGMCT,CBIT,EOF,ASC1,RRBST,RRBPT,OPTNS 00000220 00023 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00000230 00024 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00000240 00025 2SYMTB,LITBL 00000250 00026 EQUIVALENCE (INIT0(1),PTRS(1)),(INIT1(1),CRSET(1)), 00000260 00027 1(READR,PTRS(1)),(PRNTR,PTRS(2)),(DISK,PTRS(3)),(LINPP,PTRS(6)), 00000270 00028 2(EXPMX,PTRS(9)),(INTYP,PTRS(8)),(PSSWT,PTRS(10)),(SYMND,PTRS(17)),00000280 00029 3(LITND,PTRS(19)),(VALCT,PTRS(20)),(STPGM,PTRS(21)),(DSKND,PTRS(25)00000290 00030 4),(VARND,PTRS(26)),(OBJND,PTRS(27)),(PGMCT,PTRS(22)), 00000300 00031 5(CBIT,TOKEN(2)),(RRBST,PTRS(36)),(RRBPT,PTRS(37)),(OPTNS,PTRS(7)) 00000310 00032 DATA INIT2 /' ','$','#','A','B','C','D','E','F','G','H','I', 00000320 00033 1'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X', 00000330 00034 2'Y','Z','0','1','2','3','4','5','6','7','8','9','.','+','-', 00000340 00035 3'*','/','=','(',')',','/ 00000350 00036 C 00000360 00037 C 00000370 00038 C DEFINE THE CHARACTERISTICS FOR THE DIRECT ACCESS FILE. 00000380 00039 C 38,000 RECORDS OF 80 INTEGER WORDS ARE REQUIRED. THE 00000390 00040 C RECORDS ARE UNFORMATTED AND 'ASC1' IS THE ASSOCIATED 00000400 00041 C VARIABLE. NDTRAN DOES NOT USE THE ASSOCIATED VARIABLE. 00000410 00042 C ANY UNIT NUMBER MAY BE ASSIGNED FOR THE FILE. 00000420 00043 C 00000430 00044 C 00000440 00045 C DEC / FORDHAM UNIVERSITY / 00046 C DEFINE FILE 1(38000,80,U,ASC1) 00000450 00047 OPEN(UNIT=20,DEVICE='DSK',ACCESS='RANDOM', 00048 1MODE='ASCII',DISPOSE='DELETE',RECORD SIZE=80,FILE='NDTF1') 00049 C DEC / END / 00050 C 00000460 00051 C 00000470 00052 C ALL COMMON STORAGE LOCATIONS MUST BE INITIALIZED FOR 00000480 00053 C THOSE SYSTEMS WHICH PREVENT A REFERENCE TO A STORAGE 00000490 00054 C LOCATION WHICH HAS NOT BEEN ASSIGNED A VALUE. 00000500 00055 C 00000510 00056 C 00000520 MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 DO 10 I=1,21644 00000530 00058 10 INIT0(I)=0 00000540 00059 C 00000550 00060 C 00000560 00061 C THE FOLLOWING ASSIGNMENTS ESTABLISH INSTALLATION DEPENDENT 00000570 00062 C PARAMETERS. READR IS THE INPUT DEVICE NUMBER (THE CARD READER 00000580 00063 C OR ANY SEQUENTIAL INPUT FILE), PRNTR IS THE OUTPUT DEVICE 00000590 00064 C NUMBER (LINE PRINTER OR ANY SEQUENTIAL OUTPUT FILE), AND 00000600 00065 C DISK IS THE DIRECT ACCESS FILE NUMBER. LINPP IS THE NUMBER 00000610 00066 C OF LINES PER PAGE OF PRINTED OUTPUT. EXPMX IS THE MAXIMUM 00000620 00067 C EXPONENT PERMITTED DURING EXECUTION AND SHOULD BE SET TO 00000630 00068 C ONE LESS THAN THE SMALLEST OF THE THE ABSOLUTE VALUE OF THE 00000640 00069 C CHARACTERISTICS OF THE FLOATING POINT MINIMUM AND THE MAXIMUM. 00000650 00070 C 00000660 00071 C AS AN EXAMPLE, THE IBM 370 FLOATING POINT MINIMUM AND MAXIMUM 00000670 00072 C VALUES ARE APPROXIMATELY 1E-78 AND 1E75 SO EXPMX IS 74 ON 00000680 00073 C THAT SYSTEM. NDTRAN WILL PERMIT NUMBERS BETWEEN AND INCLUDING 00000690 00074 C 1E-74 AND 1E74 DURING EXECUTION. 00000700 00075 C 00000710 00076 C 00000720 00077 C DEC / FORDHAM UNIVERSITY / 00078 READR=1 00000730 00079 PRNTR=6 00000740 00080 DISK=20 00000750 00081 LINPP=60 00000760 00082 EXPMX=37 00000770 00083 C DEC / END / 00084 C 00000780 00085 C 00000790 00086 C INTYP IS INITIALIZED TO THE DESIRED DEFAULT INTEGRATION 00000800 00087 C TECHNIQUE TO BE USED DURING EXECUTION. INTYP MAY HAVE 00000810 00088 C THE FOLLOWING VALUES: 00000820 00089 C 00000830 00090 C 1 - EULER LOWER SUM 00000840 00091 C 2 - FOURTH ORDER RUNGE-KUTTA 00000850 00092 C 3 - ADAMS-BASHFORTH PREDICTOR 00000860 00093 C 00000870 00094 C 00000880 00095 INTYP=3 00000890 00096 C 00000900 00097 C 00000910 00098 C THE FOLLOWING ASSIGNMENTS ESTABLISH THE LIMITS ON SIZE AND 00000920 00099 C REQUIREMENTS FOR NDTRAN PROGRAMS. SYMND LIMITS THE SYMBOL 00000930 00100 C TABLE SIZE, LITND LIMITS THE NUMBER OF NUMERIC LITERALS, 00000940 00101 C AND DSKND LIMITS THE NUMBER OF RECORDS THAT MAY BE WRITTEN 00000950 00102 C TO AND READ FROM THE DISK FILE. VARND AND OBJND LIMIT THE 00000960 00103 C REAL AND INTEGER STORAGE AVAILABLE DURING EXECUTION. 00000970 00104 C 00000980 00105 C 00000990 00106 SYMND=4096 00001000 00107 LITND=8192 00001010 00108 DSKND=38000 00001020 00109 VARND=18705 00001030 00110 OBJND=37410 00001040 00111 C 00001050 00112 C 00001060 MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 C THE FLOATING POINT MINIMUM AND MAXIMUM VALUES ARE COMPUTED 00001070 00114 C AND THE NDTRAN CHARACTER SET IS INITIALIZED. 00001080 00115 C 00001090 00116 C 00001100 00117 RMAX=10.**EXPMX 00001110 00118 RMIN=10.**(-EXPMX) 00001120 00119 DO 20 I=1,48 00001130 00120 20 INIT1(I)=INIT2(I) 00001140 00121 C 00001150 00122 C 00001160 00123 C NDT03 INITIALIZES THE SYMBOL AND FUNCTION TABLES AND PUTS 00001170 00124 C BUILTIN MACRO RECORDS ON DISK. 00001180 00125 C 00001190 00126 C 00001200 00127 CALL NDT03 00001210 00128 C 00001220 00129 C 00001230 00130 C THE REQUIRED INITIALIZATIONS ARE COMPLETED. STPGM IS 00001240 00131 C THE FIRST RECORD AVAILABLE FOR SOURCE PROGRAM INFORMATION 00001250 00132 C STORAGE. PGMCT POINTS TO THE LAST RECORD USED FOR THAT 00001260 00133 C PURPOSE. ASC1 IS SET TO 1 FOR SYSTEMS THAT REQUIRE THE 00001270 00134 C ASSOCIATED VARIABLE TO BE VALID WHETHER IT IS USED OR NOT. 00001280 00135 C PSSWT, THE PROGRAM STATUS SWITCH IS SET TO BEGIN LOOKING 00001290 00136 C FOR A TITLE CARD DURING INPUT. VALCT, THE VARIABLE 00001300 00137 C ALLOCATION COUNTER, IS SET TO THE LAST STORAGE LOCATION 00001310 00138 C ALLOCATED FOR USE DURING EXECUTION. EOF IS AN END OF FILE 00001320 00139 C FLAG (1 = END OF FILE HAS OCCURRED). CBIT, THE CONTINUATION 00001330 00140 C BIT, INDICATES THAT THE PREVIOUS CARD WAS CONTINUED WITH 00001340 00141 C A VALUE OF 1. IT IS SET TO 1 TO CAUSE 2 CARDS TO BE INPUT 00001350 00142 C INITIALLY. RRBST IS THE FIRST RECORD AVAILABLE FOR RERUN 00001360 00143 C BUFFERS. RRBPT POINTS TO THE LAST RECORD USED FOR THAT PURPOSE. 00001370 00144 C RRBPT IS INITIALIZED TO ALLOW THE RERUN CARD PROCESSOR TO 00001380 00145 C DISTINGUISH THE FIRST RERUN CARD FROM THE OTHERS. 00001390 00146 C 00001400 00147 C 00001410 00148 STPGM=150 00001420 00149 PGMCT=STPGM-1 00001430 00150 C DEC / FORDHAM UNIVERSITY / 00151 C ASC1=1 00001440 00152 C DEC / END / 00153 PSSWT=1 00001450 00154 VALCT=21 00001460 00155 EOF=0 00001470 00156 CBIT=1 00001480 00157 RRBST=53 00001490 00158 RRBPT=-1 00001500 00159 C 00001510 00160 C 00001520 00161 C IF CBIT IS 1 THEN THE PREVIOUS CARD WAS CONTINUED AND 00001530 00162 C BOTH CARDS HAVE BEEN PROCESSED. IN THIS CASE TWO MORE 00001540 00163 C CARDS ARE READ. IF CBIT IS 0 THEN CARD1 WAS PROCESSED. 00001550 00164 C CARD2 MUST BE MOVED TO CARD1 AND ONE CARD MUST BE READ. 00001560 00165 C THIS SCHEME ALLOWS INPUT TO BE PROCESSED FROM CARD1 WITH 00001570 00166 C AN OPTIONAL CONTINUATION IN CARD2. 00001580 00167 C 00001590 00168 C 00001600 MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 00169 400 IF(CBIT.EQ.1) GO TO 600 00001610 00170 DO 500 I=1,80 00001620 00171 500 CARD1(I)=CARD2(I) 00001630 00172 READ(READR,700,END=800) CARD2 00001640 00173 GO TO 900 00001650 00174 600 READ(READR,700,END=1400) CARD1 00001660 00175 READ(READR,700,END=800) CARD2 00001670 00176 GO TO 900 00001680 00177 700 FORMAT(80A1) 00001690 00178 C 00001700 00179 C 00001710 00180 C END OF FILE HAS OCCURRED BUT THE LAST CARD NEEDS TO BE 00001720 00181 C PROCESSED SO EOF IS SET. THE CARD CANNOT BE CONTINUED 00001730 00182 C SO THE KEY FIELD OF CARD2 MUST NOT INDICATE A CONTINUATION. 00001740 00183 C 00001750 00184 C 00001760 00185 800 EOF=1 00001770 00186 CARD2(1)=0 00001780 00187 C 00001790 00188 C 00001800 00189 C NDT01 PROCESSES THE INPUT SOURCE CARDS AND UPDATES PSSWT 00001810 00190 C TO INDICATE THE MODE OF INPUT. IF PSSWT IS 6 THEN THE 00001820 00191 C SOURCE CARD REQUESTED A MACRO EXPANSION WHICH IS HANDLED 00001830 00192 C BY NDT02. 00001840 00193 C 00001850 00194 C 00001860 00195 900 CALL NDT01 00001870 00196 IF(PSSWT.EQ.6) CALL NDT02 00001880 00197 IF(EOF.EQ.0) GO TO 400 00001890 00198 C 00001900 00199 C 00001910 00200 C ALL SOURCE STATEMENTS HAVE BEEN INPUT AND PROCESSED. 00001920 00201 C THE CONTEXT ANALYSIS BEGINS AT THIS POINT. 00001930 00202 C 00001940 00203 C 00001950 00204 1400 CALL NDT04 00001960 00205 C 00001970 00206 C 00001980 00207 C THE TABLES REQUESTED BY CONTROL CARDS ARE PRODUCED NEXT. 00001990 00208 C 00002000 00209 C 00002010 00210 CALL NDT61 00002020 00211 C 00002030 00212 C 00002040 00213 C THE EQUATION ORDERING ROUTINE IS CALLED TO RECONSTRUCT THE 00002050 00214 C EQUATION CHAIN TO BE USED BY THE LOADER. 00002060 00215 C 00002070 00216 C 00002080 00217 CALL NDT62 00002090 00218 C 00002100 00219 C 00002110 00220 C THE LOADER IS NOW CALLED TO READ THE OBJECT CODE INTO MEMORY 00002120 00221 C AND INITIALIZE THE DATA BUFFERS REQUIRED FOR EXECUTION. 00002130 00222 C 00002140 00223 C 00002150 00224 CALL NDT75 00002160 MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-4 00225 C 00002170 00226 C 00002180 00227 C THE EXECUTION PHASE IS READY TO BEGIN. CALL THE APPROPRIATE 00002190 00228 C EXECUTION ROUTINE ACCORDING TO THE 'CHECK' OPTION. 00002200 00229 C 00002210 00230 C 00002220 00231 IF(MOD(OPTNS,2).EQ.1) CALL NDT64 00002230 00232 IF(MOD(OPTNS,2).EQ.0) CALL NDT65 00002240 00233 C 00002250 00234 C 00002260 00235 C EXECUTION IS COMPLETE. CALL THE OUTPUT ROUTINE. 00002270 00236 C 00002280 00237 C 00002290 00238 CALL NDT70 00002300 00239 STOP 00002310 00240 END 00002330 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 INIT0 +4 INIT1 +251 READR +4 PRNTR +5 DISK +6 LINPP +11 EXPMX +14 INTYP +13 PSSWT +15 SYMND +24 LITND +26 VALCT +27 STPGM +30 DSKND +34 VARND +35 OBJND +36 PGMCT +31 CBIT +523 RRBST +47 RRBPT +50 OPTNS +12 SUBPROGRAMS CALLED NDT04 MOD. NDT64 NDT03 NDT02 NDT62 NDT01 NDT61 NDT70 NDT75 NDT65 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] EOF 1 .S0002 2 .S0001 3 .S0000 4 %ASC1 INIT2 5 I 65 TEMPORARIES .Q0000 70 ASC1 20# CARD1 16# 23# 171# 174# CARD2 16# 23# 171 172# 175# 186# CBIT 20# 26# 156# 169 CRSET 16# 23# 26# DEF 16# 23# DISK 20# 26# 80# DSKND 20# 26# 108# EOF 20# 155# 185# 197 EQCHN 16# 23# ERROR 16# 23# EXPMX 20# 26# 82# 117 118 FCTN 16# 23# I 20# 57# 58 119# 120 170# 171 INIT0 20# 26# 58# INIT1 20# 26# 120# INIT2 20# 32# 120 INTYP 20# 26# 95# LINPP 20# 26# 81# LITBL 15# 23# LITND 20# 26# 107# MOD. 231 232 NDT01 195 NDT02 196 NDT03 127 NDT04 204 NDT61 210 NDT62 217 NDT64 231 NDT65 232 NDT70 238 NDT75 224 OBJCD 16# 23# OBJND 20# 26# 110# OPER 16# 23# OPTNS 20# 26# 231 232 PGMCT 20# 26# 149# PRNTR 20# 26# 79# PSSWT 20# 26# 153# 196 PTRS 16# 23# 26# READR 20# 26# 78# 172 174 175 RMAX 15# 23# 117# RMIN 15# 23# 118# RRBPT 20# 26# 158# RRBST 20# 26# 157# STPGM 20# 26# 148# 149 SUBSC 16# 23# SYM 16# 23# SYMND 20# 26# 106# SYMTB 16# 23# TITLE 16# 23# TMAP 16# 23# TOKEN 16# 23# 26# TYPCT 16# 23# VALCT 20# 26# 154# VARND 20# 26# 109# XREF 16# 23# 10P 57 58# 1400P 174 204# 20P 119 120# 400P 169# 197 500P 170 171# 600P 169 174# 700P 172 174 175 177# 800P 172 175 185# 900P 173 176 195# MAIN. [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00002340 00002 C PROGRAM AUTHOR - DANIEL A. POYDENCE 00002350 00003 C 00002360 00004 C 00002370 00005 SUBROUTINE NDT01 00002380 00006 C 00002390 00007 C 00002400 00008 C NDT01 IS THE INPUT PROCESSING COORDINATOR. PSSWT IS 00002410 00009 C UPDATED AND MAINTAINED HERE INDICATING THE CURRENT MODE 00002420 00010 C OF SOURCE INPUT. PSSWT MAY HAVE THE FOLLOWING VALUES: 00002430 00011 C 00002440 00012 C 1 - TITLE CARD INPUT 00002450 00013 C 2 - CONTROL CARD INPUT 00002460 00014 C 3 - NORMAL SOURCE INPUT 00002470 00015 C 4 - MARCO GROUP INPUT 00002480 00016 C 5 - RERUN GROUP INPUT 00002490 00017 C 6 - EXPANSION REQUEST 00002500 00018 C 00002510 00019 C INPUT IS PROCESSED ACCORDING TO THE MODE OF INPUT AND 00002520 00020 C THE TYPE OF STATEMENT ENCOUNTERED. 00002530 00021 C 00002540 00022 C 00002550 00023 REAL*8 RMIN,RMAX,LITBL(8192) 00002560 00024 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00002570 00025 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00002580 00026 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00002590 00027 3SYMTB(5,4096) 00002600 00028 INTEGER PSSWT,STYPE,EQNCD,PGMCD,DISK,PGMCT,OBJ1(80),OBJ2(80), 00002610 00029 1OPTNS,STPGM,OUT1(80),OUT2(80),OUT3(80),LSTGP,CBIT,SYMND,OBJPT, 00002620 00030 2CRSMT 00002630 00031 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00002640 00032 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00002650 00033 2SYMTB,LITBL 00002660 00034 EQUIVALENCE (PSSWT,PTRS(10)),(STYPE,TOKEN(1)),(EQNCD,ERROR(1)), 00002670 00035 1(PGMCD,PTRS(15)),(DISK,PTRS(3)),(PGMCT,PTRS(22)),(OBJ1(1),OBJPT, 00002680 00036 2OBJCD(1)),(OBJ2(1),OBJCD(81)),(OPTNS,PTRS(7)),(STPGM,PTRS 00002690 00037 3(21)),(OUT1(1),DEF(1)),(OUT2(1),XREF(1)),(OUT3(1),TMAP(1)), 00002700 00038 4(LSTGP,PTRS(35)),(CBIT,TOKEN(2)),(SYMND,PTRS(17)),(CRSMT,TMAP(1)) 00002710 00039 C 00002720 00040 C 00002730 00041 C IF THE PROGRAM IS TOO LARGE TO PROCESS, SIGNAL A SYSTEM ERROR. 00002740 00042 C 00002750 00043 C 00002760 00044 IF((PGMCT-STPGM+1)/9.EQ.SYMND) CALL NDT12 (1) 00002770 00045 1 CONTINUE 00002780 00046 C 00002790 00047 C 00002800 00048 C INITIALIZE ALL STATEMENT DATA AREAS FOR PROCESSING. 00002810 00049 C 00002820 00050 C 00002830 00051 CALL NDT05 00002840 00052 GO TO (100,200,300,400,500),PSSWT 00002850 00053 C 00002860 00054 C 00002870 00055 C TITLE MODE PROCESSING IS REQUESTED. IF A TITLE CARD IS 00002880 00056 C SUPPLIED IT MUST BE THE FIRST CARD IN THE SOURCE DECK. 00002890 NDT01 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C WHETHER ONE IS SUPPLIED OR NOT THE TITLE PROCESSOR MUST 00002900 00058 C BE CALLED TO INITIALIZE THE TITLE BUFFER. 00002910 00059 C 00002920 00060 C 00002930 00061 100 CALL NDT06 00002940 00062 C 00002950 00063 C 00002960 00064 C SET PSSWT TO PROCESS CONTROL CARDS. IF THE USER DID ENTER 00002970 00065 C A TITLE CARD THEN PROCESSING FOR THIS STATEMENT IS FINISHED. 00002980 00066 C IF IT WAS NOT A TITLE CARD NOR A CONTROL CARD THEN SET PSSWT 00002990 00067 C TO PROCESS NORMAL CARD INPUT. OTHERWISE, PROCESS THE CONTROL 00003000 00068 C CARD AND LEAVE PSSWT IN CONTROL CARD MODE. 00003010 00069 C 00003020 00070 C 00003030 00071 PSSWT=2 00003040 00072 IF(STYPE.EQ.19) GO TO 9000 00003050 00073 200 IF(STYPE.NE.10) GO TO 600 00003060 00074 C 00003070 00075 C 00003080 00076 C CONTROL CARD PROCESSING IS REQUESTED. IF THE CONTROL CARD 00003090 00077 C WAS BLANK EQNCD WILL HAVE A VALUE OF 3. NO MODE CHANGE OR 00003100 00078 C CARD PROCESSING WILL BE PERFORMED. 00003110 00079 C 00003120 00080 C 00003130 00081 IF(EQNCD.EQ.3) GO TO 9000 00003140 00082 CALL NDT07 00003150 00083 GO TO 9000 00003160 00084 C 00003170 00085 C 00003180 00086 C AS PSSWT CHANGES TO NORMAL MODE, NDT59 IS CALLED TO COMPLETE 00003190 00087 C THE TITLE BUFFER AND TITLE RELATED INFORMATION. 00003200 00088 C 00003210 00089 C 00003220 00090 600 PSSWT=3 00003230 00091 CALL NDT59 00003240 00092 C 00003250 00093 C 00003260 00094 C NORMAL SOURCE INPUT PROCESSING IS REQUESTED. THIS CONSISTS OF 00003270 00095 C THE EQUATIONS FOR THE MODEL, OUTPUT CARDS, AND PARAMETER 00003280 00096 C SPECIFICATIONS. 00003290 00097 C 00003300 00098 C 00003310 00099 300 IF(EQNCD.EQ.3) GO TO 9000 00003320 00100 GO TO (700,800,800,800,800,800,800,800,9000,1000, 00003330 00101 1 9000,1100,1100,1200,1300,1400,1500,1600,1700,9000),STYPE 00003340 00102 C 00003350 00103 C 00003360 00104 C INVOKE THE TABLE CARD PROCESSOR. 00003370 00105 C 00003380 00106 C 00003390 00107 700 CALL NDT15 00003400 00108 GO TO 900 00003410 00109 C 00003420 00110 C 00003430 00111 C INVOKE THE EQUATION LEXICAL ANALYZER, THE EQUATION COMPILER, 00003440 00112 C AND THE DEFAULT DEFINITION BUILDER. 00003450 NDT01 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 C 00003460 00114 C 00003470 00115 800 CALL NDT08 00003480 00116 CALL NDT16 00003490 00117 900 CALL NDT17 00003500 00118 C 00003510 00119 C 00003520 00120 C IF ANY CRITICAL ERRORS HAVE OCCURRED IN THE PROGRAM, EXECUTION 00003530 00121 C WILL BE INHIBITED SO ONLY TABLE AND CONSTANT EQUATION OBJECT 00003540 00122 C CODE NEED BE SAVED FOR RERUN CONTEXT PROCESSING. WRITE ALL 00003550 00123 C EQUATION RELATED DATA AREAS TO DISK. 00003560 00124 C 00003570 00125 C 00003580 00126 IF(PGMCD.EQ.3.AND.STYPE.GT.2) GO TO 910 00003590 00127 WRITE(DISK'PGMCT+5) OBJ1 00003600 00128 IF(OBJPT.GT.80) WRITE(DISK'PGMCT+6) OBJ2 00003610 00129 910 WRITE(DISK'PGMCT+7) DEF 00003620 00130 WRITE(DISK'PGMCT+9) TMAP 00003630 00131 C 00003640 00132 C 00003650 00133 C ADD AN ELEMENT TO THE EQUATION CHAIN. THE FORMAT FOR EACH 00003660 00134 C ELEMENT IS AS FOLLOWS: 00003670 00135 C 00003680 00136 C BIT 0 - RESERVED 00003690 00137 C BITS 1 - 3 - EQUATION TYPE 00003700 00138 C BITS 4 - 15 - DISK EQUATION NUMBER 00003710 00139 C 00003720 00140 C 00003730 00141 CALL NDT21 ((STYPE-1)*4096+CRSMT) 00003740 00142 GO TO 9000 00003750 00143 C 00003760 00144 C 00003770 00145 C A CONTROL CARD WAS ENTERED BUT CONTROL CARD MODE WAS NOT 00003780 00146 C IN EFFECT. PROCESS AS AN ERROR. 00003790 00147 C 00003800 00148 C 00003810 00149 1000 CALL NDT14 (0,107,2) 00003820 00150 GO TO 9000 00003830 00151 C 00003840 00152 C 00003850 00153 C INVOKE THE OUTPUT CARD PROCESSOR AND STORE THE OUTPUT 00003860 00154 C BUFFERS TO DISK. 00003870 00155 C 00003880 00156 C 00003890 00157 1100 CALL NDT09 00003900 00158 WRITE(DISK'PGMCT+7) OUT1 00003910 00159 WRITE(DISK'PGMCT+8) OUT2 00003920 00160 WRITE(DISK'PGMCT+9) OUT3 00003930 00161 GO TO 9000 00003940 00162 C 00003950 00163 C 00003960 00164 C THE FIRST RERUN CARD HAS BEEN ENCOUNTERED. SET PSSWT TO 00003970 00165 C INDICATE RERUN MODE. 00003980 00166 C 00003990 00167 C 00004000 00168 1200 PSSWT=5 00004010 NDT01 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 00169 GO TO 2500 00004020 00170 C 00004030 00171 C 00004040 00172 C CHANGE PSSWT TO MACRO MODE AND INVOKE THE MACRO STATEMENT 00004050 00173 C PROCESSOR. SAVE THE DISK ADDRESS OF THIS STATEMENT FOR 00004060 00174 C ANY GROUP ERROR PROCESSING. 00004070 00175 C 00004080 00176 C 00004090 00177 1300 PSSWT=4 00004100 00178 CALL NDT10 00004110 00179 LSTGP=PGMCT+1 00004120 00180 GO TO 9000 00004130 00181 C 00004140 00182 C 00004150 00183 C AN MEND STATEMENT WAS ENCOUNTERED BUT A MACRO WAS NOT BEING 00004160 00184 C PROCESSED. 00004170 00185 C 00004180 00186 C 00004190 00187 1400 CALL NDT14 (0,103,2) 00004200 00188 GO TO 9000 00004210 00189 C 00004220 00190 C 00004230 00191 C AN EXPANSION OF A MACRO HAS BEEN REQUESTED. SET PSSWT 00004240 00192 C TO INDICATE THIS REQUEST AND RETURN SO THAT THE APPROPRIATE 00004250 00193 C PROCESSOR MAY BE GIVEN CONTROL. 00004260 00194 C 00004270 00195 C 00004280 00196 1500 PSSWT=6 00004290 00197 GO TO 9000 00004300 00198 C 00004310 00199 C 00004320 00200 C INVOKE THE DEF CARD PROCESSOR. 00004330 00201 C 00004340 00202 C 00004350 00203 1600 CALL NDT11 00004360 00204 GO TO 9000 00004370 00205 C 00004380 00206 C 00004390 00207 C A TITLE CARD WAS ENCOUNTERED AS OTHER THAN THE FIRST CARD. 00004400 00208 C 00004410 00209 C 00004420 00210 1700 CALL NDT14 (0,108,2) 00004430 00211 GO TO 9000 00004440 00212 C 00004450 00213 C 00004460 00214 C MACRO MODE IS IN PROGRESS. CARDS FOR THE GROUP ARE NOT 00004470 00215 C PROCESSED, BUT ARE WRITTEN TO DISK. 00004480 00216 C 00004490 00217 C 00004500 00218 400 GO TO (9000,9000,9000,9000,9000,9000,9000,9000,9000,9000, 00004510 00219 1 9000,9000,9000,1800,1900,2000,2100,1600,1700,9000),STYPE 00004520 00220 C 00004530 00221 C 00004540 00222 C RERUN MODE HAS BEEN REQUESTED, BUT A MACRO WAS BEING INPUT. 00004550 00223 C 00004560 00224 C 00004570 NDT01 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-4 00225 1800 CALL NDT14 (0,104,3) 00004580 00226 GO TO 9000 00004590 00227 C 00004600 00228 C 00004610 00229 C A MACRO STATEMENT WAS ENCOUNTERED BEFORE AN MEND FOR THE 00004620 00230 C PREVIOUS MACRO GROUP. 00004630 00231 C 00004640 00232 C 00004650 00233 1900 CALL NDT14 (0,109,3) 00004660 00234 GO TO 9000 00004670 00235 C 00004680 00236 C 00004690 00237 C AN MEND STATEMENT TERMINATES MACRO MODE. 00004700 00238 C 00004710 00239 C 00004720 00240 2000 PSSWT=3 00004730 00241 GO TO 9000 00004740 00242 C 00004750 00243 C 00004760 00244 C A EXPND STATEMENT WAS ENCOUNTERED BEFORE AN MEND FOR THE 00004770 00245 C MACRO THAT WAS BEING INPUT. 00004780 00246 C 00004790 00247 C 00004800 00248 2100 CALL NDT14 (0,111,3) 00004810 00249 GO TO 9000 00004820 00250 C 00004830 00251 C 00004840 00252 C RERUN MODE IS IN PROGRESS. A BLANK CARD REQUIRES NO PROCESSING. 00004850 00253 C 00004860 00254 C 00004870 00255 500 IF(EQNCD.EQ.3) GO TO 9000 00004880 00256 GO TO (2300,2300,2300,2400,2400,2400,2400,2400,9000,2300, 00004890 00257 1 9000,2400,2400,2500,2400,2400,2400,2400,1700,9000),STYPE 00004900 00258 C 00004910 00259 C 00004920 00260 C A T, C, PARM, OR * CARD REQUIRES RERUN PROCESSING. 00004930 00261 C 00004940 00262 C 00004950 00263 2300 CALL NDT19 00004960 00264 GO TO 9000 00004970 00265 C 00004980 00266 C 00004990 00267 C A CARD TYPE OTHER THAN T, C, PARM, OR * HAS APPEARED IN 00005000 00268 C RERUN MODE AND CANNOT BE PROCESSED. 00005010 00269 C 00005020 00270 C 00005030 00271 2400 CALL NDT14 (0,105,2) 00005040 00272 GO TO 9000 00005050 00273 C 00005060 00274 C 00005070 00275 C ANOTHER RERUN GROUP FOLLOWS. FINISH PROCESSING FOR THE PREVIOUS 00005080 00276 C RERUN AND INITIALIZE BUFFERS FOR THIS RERUN. SET THE GROUP 00005090 00277 C DISK ADDRESS. 00005100 00278 C 00005110 00279 C 00005120 00280 2500 CALL NDT18 00005130 NDT01 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-5 00281 LSTGP=PGMCT+1 00005140 00282 C 00005150 00283 C 00005160 00284 C WRITE THE REQUIRED DATA AREAS TO DISK AND INCREMENT THE 00005170 00285 C PROGRAM COUNTER TO POINT TO THE LAST RECORD USED. 00005180 00286 C 00005190 00287 C 00005200 00288 9000 WRITE(DISK'PGMCT+1) TOKEN 00005210 00289 WRITE(DISK'PGMCT+2) CARD1 00005220 00290 IF(CBIT.EQ.1) WRITE(DISK'PGMCT+3) CARD2 00005230 00291 WRITE(DISK'PGMCT+4) ERROR 00005240 00292 PGMCT=PGMCT+9 00005250 00293 RETURN 00005260 00294 END 00005310 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 PSSWT +15 STYPE +522 EQNCD +1102 PGMCD +22 DISK +6 PGMCT +31 OBJ1 +1222 OBJPT +1222 OBJ2 +1342 OPTNS +12 STPGM +30 OUT1 +1462 OUT2 +1602 OUT3 +1722 LSTGP +46 CBIT +523 SYMND +24 CRSMT +1722 SUBPROGRAMS CALLED NDT09 NDT18 NDT12 NDT08 NDT21 NDT17 NDT59 NDT11 NDT07 NDT16 NDT10 NDT06 NDT15 NDT05 NDT14 NDT19 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] TEMPORARIES .A0016 1 .Q0000 2 CARD1 24# 31# 289 CARD2 24# 31# 290 CBIT 28# 34# 290 CRSET 24# 31# CRSMT 28# 34# 141 DEF 24# 31# 34# 129 DISK 28# 34# 127 128 129 130 158 159 160 288 289 290 291 EQCHN 24# 31# EQNCD 28# 34# 81 99 255 ERROR 24# 31# 34# 291 FCTN 24# 31# LITBL 23# 31# LSTGP 28# 34# 179# 281# NDT01 5# NDT05 51 NDT06 61 NDT07 82 NDT08 115 NDT09 157 NDT10 178 NDT11 203 NDT12 44 NDT14 149 187 210 225 233 248 271 NDT15 107 NDT16 116 NDT17 117 NDT18 280 NDT19 263 NDT21 141 NDT59 91 OBJ1 28# 34# 127 OBJ2 28# 34# 128 OBJCD 24# 31# 34# OBJPT 28# 34# 128 OPER 24# 31# OPTNS 28# 34# OUT1 28# 34# 158 OUT2 28# 34# 159 OUT3 28# 34# 160 PGMCD 28# 34# 126 PGMCT 28# 34# 44 127 128 129 130 158 159 160 179 281 288 289 290 291 292 292# PSSWT 28# 34# 52 71# 90# 168# 177# 196# 240# PTRS 24# 31# 34# RMAX 23# 31# RMIN 23# 31# STPGM 28# 34# 44 STYPE 28# 34# 72 73 100 126 141 218 256 SUBSC 24# 31# SYM 24# 31# SYMND 28# 34# 44 SYMTB 24# 31# TITLE 24# 31# TMAP 24# 31# 34# 130 TOKEN 24# 31# 34# 288 TYPCT 24# 31# XREF 24# 31# 34# 1000P 100 149# 100P 52 61# 1100P 100 157# 1200P 100 168# 1300P 100 177# 1400P 100 187# 1500P 100 196# 1600P 100 203# 218 1700P 100 210# 218 256 1800P 218 225# 1900P 218 233# 1P 45# 2000P 218 240# 200P 52 73# 2100P 218 248# 2300P 256 263# 2400P 256 271# 2500P 169 256 280# 300P 52 99# 400P 52 218# 500P 52 255# 600P 73 90# 700P 100 107# 800P 100 115# 9000P 72 81 83 99 100 142 150 161 180 188 197 204 211 218 226 234 241 249 255 256 264 272 288# 900P 108 117# 910P 126 129# NDT01 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00005320 00002 C * 00005330 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00005340 00004 C PROGRAM AUTHOR - THOMAS L EVERMAN JR * 00005350 00005 C * 00005360 00006 C THIS SUBROUTINE EXPANDS MACROS * 00005370 00007 C * 00005380 00008 C***************************************************************** 00005390 00009 SUBROUTINE NDT02 00005400 00010 REAL*8 RMIN,RMAX,LITBL(8192) 00005410 00011 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00005420 00012 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00005430 00013 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00005440 00014 3SYMTB(5,4096) 00005450 00015 INTEGER MACBF(160),MAC1(80),MAC2(80),SUBCD(80),CARD(80,2), 00005460 00016 1SUBFD(78),EXPBF(160),EXP1(80),EXP2(80),TEXP(160),SCD2(80), 00005470 00017 2PSSWT,MCEXP,DISP,DUPFG,REC,ARGIG,ARGPS,I,J,MCARG(144), 00005480 00018 3EXARG(144),FIELD(4),NXTCD,BLANK,CBIT,ARGEG,STYPE,MEND(5), 00005490 00019 4TYPE,INDEX,CDNUM,BLFND,POS,ARGT,LENTH,CHAR,SSPOS,SCBIT, 00005500 00020 5SUBS,DISK,CDPOS,START,PGMCT 00005510 00021 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00005520 00022 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00005530 00023 2SYMTB,LITBL 00005540 00024 EQUIVALENCE (MACBF(1),MAC1(1)),(MACBF(81),MAC2(1)), 00005550 00025 1(EXPBF(1),EXP1(1)),(EXPBF(81),EXP2(1)),(TEXP(1),DEF(1)), 00005560 00026 2(MCARG(1),MACBF(14)),(EXARG(1),EXPBF(14)),(SUBFD(1),TOKEN(3)), 00005570 00027 3(FIELD(1),SUBFD(1)),(PSSWT,PTRS(10)),(MCEXP,PTRS(39)), 00005580 00028 4(CARD(1,1),CARD1(1)),(ARGIG,MACBF(13)),(ARGEG,MACBF(10)), 00005590 00029 5(STYPE,TOKEN(1)),(CBIT,TOKEN(2)),(BLANK,CRSET(1)),(DISK,PTRS(3)) 00005600 00030 EQUIVALENCE (PGMCT,PTRS(22)) 00005610 00031 DATA MEND /'M','E','N','D',' '/ 00005620 00032 C***************************************************************** 00005630 00033 C * 00005640 00034 C SET THE PSSWT TO 3 FOR USE BY NDT01. ASSUME U-D MACRO AND * 00005650 00035 C SET DISP TO 8. INCREMENT THE EXPANSION COUNTER. DUPFG IS * 00005660 00036 C ZERO SO THAT NDT39 DOES NOT CHECK FOR DUPLICATE ARGUMENTS. * 00005670 00037 C THE CONTENTS OF CARD2 ARE SAVED AND RESTORED AT END OF EXPA* 00005680 00038 C NDT39 IS CALLED TO FORM THE EXPANSION DEFINITION BUFFER. * 00005690 00039 C * 00005700 00040 C***************************************************************** 00005710 00041 PSSWT = 3 00005720 00042 DISP = 8 00005730 00043 MCEXP = MCEXP + 1 00005740 00044 DUPFG = 0 00005750 00045 DO 100 I = 1, 80 00005760 00046 100 SCD2(I) = CARD2(I) 00005770 00047 SCBIT = CBIT 00005780 00048 CALL NDT39 (REC, DUPFG) 00005790 00049 C***************************************************************** 00005800 00050 C * 00005810 00051 C IF REC IS ZERO, THE MACRO NAME WAS NEVER DEFINED. * 00005820 00052 C OTHERWISE, REC GIVES THE RECORD NUMBER OF THE MACRO * 00005830 00053 C DEFINITION RECORD. BOTH THE MACRO AND EXPAND DEFINITIONS * 00005840 00054 C ARE CHECKED FOR CRITICAL ERRORS. A CHECK IS ALSO MADE TO * 00005850 00055 C SEE THAT BOTH THE EXPAND AND MACRO DEFINITIONS REFER TO * 00005860 00056 C THE SAME NUMBER OF ARGUMENTS. * 00005870 NDT02 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C * 00005880 00058 C***************************************************************** 00005890 00059 IF (REC .EQ. 0) GO TO 3200 00005900 00060 DO 150 I = 1, 160 00005910 00061 150 EXPBF(I) = TEXP(I) 00005920 00062 READ (DISK'REC) MAC1 00005930 00063 REC = REC + 1 00005940 00064 READ (DISK'REC) MAC2 00005950 00065 NXTCD = MACBF(11) 00005960 00066 IF (MACBF(12) .NE. 0 .OR. EXPBF(12) .NE. 0) GO TO 3400 00005970 00067 IF (ARGEG .NE. EXPBF(10)) GO TO 3300 00005980 00068 WRITE(DISK'PGMCT-5) ERROR 00005990 00069 IF (ARGIG .EQ. 0) GO TO 500 00006000 00070 C***************************************************************** 00006010 00071 C * 00006020 00072 C INSERT THE INTERNALLY GENERATED ARGUMENT NAMES INTO THE * 00006030 00073 C EXPBF. COPY THE DUMMY NAMES FROM MACBF, ADDING THE CHARACT* 00006040 00074 C REPRESENTATION OF THE EXPAND COUNTER TO KEEP THE NAME UNIQU* 00006050 00075 C * 00006060 00076 C***************************************************************** 00006070 00077 DISP = 1 00006080 00078 ARGPS = ARGEG * 8 00006090 00079 DO 400 I = 1, ARGIG 00006100 00080 DO 200 J = 1, 3 00006110 00081 ARGPS = ARGPS + 1 00006120 00082 200 EXARG(ARGPS) = MCARG(ARGPS) 00006130 00083 CALL NDT45 (MCEXP, FIELD, 0) 00006140 00084 DO 300 J = 1,4 00006150 00085 ARGPS = ARGPS + 1 00006160 00086 300 EXARG(ARGPS) = FIELD(J) 00006170 00087 ARGPS = ARGPS + 1 00006180 00088 400 CONTINUE 00006190 00089 C***************************************************************** 00006200 00090 C * 00006210 00091 C ARGT IS THE TOTAL NUMBER OF ARGUMENTS. IT IS NOW NECESSARY* 00006220 00092 C TO READ IN THE CARDS TO BE EXPANDED. THE NEXT CARD (FROM DI* 00006230 00093 C TO BE READ IS POINTED TO BY NXTCD. IF A U-D MACRO IS * 00006240 00094 C BEING EXPANDED, IT IS NECESSARY TO READ A CARD, ITS * 00006250 00095 C TOKEN STRING TO DETERMINE WHETHER THAT CARD IS CONTINUED, * 00006260 00096 C AND ITS CONTINUATION IF IT EXISTS. FOR B-I MACROS, THERE * 00006270 00097 C ARE NO CONTINUATIONS AND NO TOKEN STRING. HENCE, A SEPARAT* 00006280 00098 C CHECK MUST BE MADE FOR THE MEND STATEMENT * 00006290 00099 C * 00006300 00100 C***************************************************************** 00006310 00101 500 ARGT = ARGEG + ARGIG 00006320 00102 510 READ (DISK'NXTCD) CARD1 00006330 00103 IF (DISP .EQ. 1) GO TO 600 00006340 00104 REC = NXTCD - 1 00006350 00105 READ (DISK'REC) TOKEN 00006360 00106 NXTCD = NXTCD + 1 00006370 00107 CARD2(1) = 0 00006380 00108 IF (CBIT .EQ. 0) GO TO 800 00006390 00109 READ (DISK'NXTCD) CARD2 00006400 00110 GO TO 800 00006410 00111 600 CARD2(1) = 0 00006420 00112 CBIT = 0 00006430 NDT02 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 STYPE = 1 00006440 00114 DO 700 I = 1, 5 00006450 00115 IF (CARD1(I) .NE. MEND(I)) GO TO 800 00006460 00116 700 CONTINUE 00006470 00117 STYPE = 16 00006480 00118 C***************************************************************** 00006490 00119 C * 00006500 00120 C INCREMENT NXTCD TO POINT TO THE NEXT MACRO STATEMENT. * 00006510 00121 C CHECK FOR END OF EXPANSION, WHICH MAY BE INDICATED BY * 00006520 00122 C A MEND CARD, OR IGNORE RERUN, MACRO, EXPND. * 00006530 00123 C * 00006540 00124 C***************************************************************** 00006550 00125 800 NXTCD = NXTCD + DISP 00006560 00126 DO 900 TYPE = 14, 17 00006570 00127 INDEX = TYPE - 13 00006580 00128 IF (STYPE .EQ. TYPE) GO TO (510,510,3100,510), INDEX 00006590 00129 900 CONTINUE 00006600 00130 C***************************************************************** 00006610 00131 C * 00006620 00132 C INITIALIZE FOR SYMBOLIC SUBSTITION (SS). CDNUM INDICATES * 00006630 00133 C EITHER CARD1 OR CARD2. SSPOS IS A POINTER FOR ENTERING * 00006640 00134 C A SS INTO SUBCD. BLFND WILL GIVE THE LAST POSITION IN * 00006650 00135 C THE COMMENT FIELD. START IS A POINTER FOR THE OPERATOR * 00006660 00136 C SEARCH SUBROUTINE (NDT29). * 00006670 00137 C * 00006680 00138 C***************************************************************** 00006690 00139 CDNUM = 1 00006700 00140 950 START = 1 00006710 00141 DO 975 I = 1, 80 00006720 00142 975 SUBCD(I) = BLANK 00006730 00143 SSPOS = 0 00006740 00144 BLFND = 0 00006750 00145 C***************************************************************** 00006760 00146 C * 00006770 00147 C COPY THE EQUATION TYPES AND INITIAL BLANKS INTO SUBCD. * 00006780 00148 C * 00006790 00149 C***************************************************************** 00006800 00150 DO 1000 START = 1, 72 00006810 00151 IF (CARD(START,CDNUM) .EQ. BLANK) BLFND = 1 00006820 00152 IF (CARD(START,CDNUM) .NE. BLANK .AND. BLFND .NE. 0) GO TO 1100 00006830 00153 SSPOS = SSPOS + 1 00006840 00154 SUBCD(SSPOS) = CARD(START,CDNUM) 00006850 00155 1000 CONTINUE 00006860 00156 GO TO 2700 00006870 00157 C***************************************************************** 00006880 00158 C * 00006890 00159 C SEARCH FOR AN OPERATOR. WHEN ONE IS FOUND, CHECK THE PRECE* 00006900 00160 C SUBSTRING TO SEE WHETHER IT COMPARES TO ANY OF THE MACRO * 00006910 00161 C ARGUMENTS. IF IT DOES, PLACE THE EXPND ARGUMENT INTO SUBFD* 00006920 00162 C OTHERWISE, LEAVE THE CARD IMAGE DATA IN SUBFD. ALSO PLACE * 00006930 00163 C THE TRAILING OPERATOR IN SUBFD TO INSURE ITS ADDITION TO SU* 00006940 00164 C * 00006950 00165 C***************************************************************** 00006960 00166 1100 SUBS = 0 00006970 00167 BLFND = 0 00006980 00168 1150 CALL NDT29 (TYPE, START, POS, CDNUM) 00006990 NDT02 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 00169 IF (POS .LT. START) GO TO 1700 00007000 00170 IF (SUBS .EQ. 1) GO TO 1800 00007010 00171 IF (TYPE .EQ. 1) SUBS = 1 00007020 00172 LENTH = POS - START + 1 00007030 00173 DO 1300 I = 1, ARGT 00007040 00174 ARGPS = I * 8 - 8 00007050 00175 DO 1200 J = 1, LENTH 00007060 00176 ARGPS = ARGPS + 1 00007070 00177 CDPOS = START + J - 1 00007080 00178 CHAR = CARD(CDPOS,CDNUM) 00007090 00179 IF (CHAR .NE. MCARG(ARGPS)) GO TO 1300 00007100 00180 1200 CONTINUE 00007110 00181 ARGPS = ARGPS + 1 00007120 00182 IF (MCARG(ARGPS) .NE. BLANK) GO TO 1300 00007130 00183 GO TO 1400 00007140 00184 1300 CONTINUE 00007150 00185 LENTH = LENTH + 1 00007160 00186 DO 1350 J = START, POS 00007170 00187 I = J - START + 1 00007180 00188 1350 SUBFD(I) = CARD(J,CDNUM) 00007190 00189 GO TO 1600 00007200 00190 1400 ARGPS = (I - 1) * 8 00007210 00191 DO 1500 LENTH = 1, 7 00007220 00192 ARGPS = ARGPS + 1 00007230 00193 IF (EXARG(ARGPS) .EQ. BLANK) GO TO 1600 00007240 00194 1500 SUBFD(LENTH) = EXARG(ARGPS) 00007250 00195 1600 SUBFD(LENTH) = CARD(POS + 1,CDNUM) 00007260 00196 GO TO 2000 00007270 00197 C***************************************************************** 00007280 00198 C * 00007290 00199 C CONSECUTIVE OPERATORS WERE FOUND. INSERT SECOND INTO * 00007300 00200 C SUBFD AND MAKE SS. * 00007310 00201 C * 00007320 00202 C***************************************************************** 00007330 00203 1700 LENTH = 1 00007340 00204 SUBFD(1) = CARD(START,CDNUM) 00007350 00205 GO TO 2000 00007360 00206 C***************************************************************** 00007370 00207 C * 00007380 00208 C THE CODING BELOW AVOIDS CHECKING FOR A SYMBOLIC SUBSTITUTIO* 00007390 00209 C IN A SUBSCRIPT. * 00007400 00210 C * 00007410 00211 C***************************************************************** 00007420 00212 1800 LENTH = POS - START + 2 00007430 00213 DO 1900 I = 1, LENTH 00007440 00214 CDPOS = START + I - 1 00007450 00215 1900 SUBFD(I) = CARD(CDPOS,CDNUM) 00007460 00216 IF (TYPE .NE. 1) SUBS = 0 00007470 00217 C***************************************************************** 00007480 00218 C * 00007490 00219 C MOVE SUBFD TO SUBCD. CHECK FOR EXCESS LENGTH OF EXPANSION.* 00007500 00220 C * 00007510 00221 C***************************************************************** 00007520 00222 2000 DO 2100 I = 1, LENTH 00007530 00223 SSPOS = SSPOS + 1 00007540 00224 IF (SSPOS .GT. 72) GO TO 2600 00007550 NDT02 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-4 00225 2100 SUBCD(SSPOS) = SUBFD(I) 00007560 00226 IF (BLFND .NE. 0) GO TO 2400 00007570 00227 IF (TYPE .NE. 0) GO TO 2500 00007580 00228 C***************************************************************** 00007590 00229 C * 00007600 00230 C BLANK DELIMITING END OF STATEMENT HAS BEEN FOUND. LOCATE * 00007610 00231 C THE END OF THE COMMENT FIELD AND SET BLFND. * 00007620 00232 C * 00007630 00233 C***************************************************************** 00007640 00234 DO 2200 I = 1, 72 00007650 00235 J = 73 - I 00007660 00236 IF (CARD(J,CDNUM) .NE. BLANK) GO TO 2300 00007670 00237 2200 CONTINUE 00007680 00238 2300 BLFND = J 00007690 00239 C***************************************************************** 00007700 00240 C * 00007710 00241 C CHECK TO SEE IF ENTIRE COMMENT HAS BEEN COPIED. IF NOT, * 00007720 00242 C CHECK FOR MORE SS'S. * 00007730 00243 C * 00007740 00244 C***************************************************************** 00007750 00245 2400 IF (START .GE. BLFND) GO TO 2700 00007760 00246 2500 START = POS + 2 00007770 00247 GO TO 1150 00007780 00248 C***************************************************************** 00007790 00249 C * 00007800 00250 C GIVE EXCESS LENGTH ERRORS. * 00007810 00251 C 312 - EQUATION TO LONG * 00007820 00252 C 315 - COMMENT TOO LONG * 00007830 00253 C COPY SUBCD INTO THE APPROPRIATE CARD BUFFER, * 00007840 00254 C THEN CHECK TO SEE IF THERE IS A CONINUATION TO EXPAND. * 00007850 00255 C * 00007860 00256 C***************************************************************** 00007870 00257 2600 IF (BLFND .EQ. 0) CALL NDT13 (72, 312, 3) 00007880 00258 IF (BLFND .NE. 0) CALL NDT13 (72, 315, 1) 00007890 00259 2700 DO 2750 I = 1, 80 00007900 00260 2750 CARD(I,CDNUM) = SUBCD(I) 00007910 00261 IF (CDNUM .EQ. 2 .OR. CBIT .EQ. 0) GO TO 2800 00007920 00262 CDNUM = 2 00007930 00263 GO TO 950 00007940 00264 C***************************************************************** 00007950 00265 C * 00007960 00266 C EXPANSION OF A CARD IS COMPLETE. CALL NDT01 FOR FURTHER * 00007970 00267 C ANALYSIS. THEN PROCESS ANOTHER CARD. * 00007980 00268 C * 00007990 00269 C***************************************************************** 00008000 00270 2800 CALL NDT01 00008010 00271 GO TO 510 00008020 00272 C***************************************************************** 00008030 00273 C * 00008040 00274 C MEND STATEMENT HAS BEEN ENCOUNTERED. * 00008050 00275 C UPDATE PSSWT AND CALL NDT01. * 00008060 00276 C BRANCH TO FINAL PROCESSING. * 00008070 00277 C * 00008080 00278 C***************************************************************** 00008090 00279 3100 PSSWT = 4 00008100 00280 CALL NDT01 00008110 NDT02 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-5 00281 GO TO 3500 00008120 00282 C***************************************************************** 00008130 00283 C * 00008140 00284 C ERROR MESSAGES: * 00008150 00285 C 310 - NO MACRO DEFINITION * 00008160 00286 C 311 - UNEQUAL NUMBER OF ARGUMENTS * 00008170 00287 C 316 - UNABLE TO EXPAND DUE TO MACRO OR EXPAND CRITICALS * 00008180 00288 C * 00008190 00289 C***************************************************************** 00008200 00290 3200 CALL NDT13 (1, 310, 3) 00008210 00291 GO TO 3400 00008220 00292 3300 CALL NDT13 (1, 311, 3) 00008230 00293 3400 CALL NDT13 (0, 316, 3) 00008240 00294 DO 3450 I = 1, 5 00008250 00295 3450 CARD1(I) = MEND(I) 00008260 00296 CARD2(1) = 0 00008270 00297 GO TO 3100 00008280 00298 C***************************************************************** 00008290 00299 C * 00008300 00300 C RECOPY CARD2 FROM SCD2, RESTORE CBIT, AND RETURN * 00008310 00301 C * 00008320 00302 C***************************************************************** 00008330 00303 3500 DO 3600 I = 1, 80 00008340 00304 3600 CARD2(I) = SCD2(I) 00008350 00305 CBIT = SCBIT 00008360 00306 RETURN 00008370 00307 END 00008390 EQUIVALENCED VARIABLES ( MACBF 1 MAC1 1 MAC2 121 MCARG 16 ARGIG 15 ARGEG 12 ) ( EXPBF 241 EXP1 241 EXP2 361 EXARG 256 ) COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 TEXP +1462 SUBFD +524 PSSWT +15 MCEXP +52 CARD +642 STYPE +522 CBIT +523 BLANK +251 DISK +6 PGMCT +31 FIELD +524 SUBPROGRAMS CALLED NDT13 NDT45 NDT01 NDT39 NDT29 NDT02 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-6 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] .S0020 501 MACBF 1 CDPOS 502 EXP1 241 BLFND 503 DISP 504 MEND 505 EXPBF 241 POS 512 DUPFG 513 SUBCD 514 CHAR 634 INDEX 635 MCARG 16 EXARG 256 J 636 SCD2 637 .S0007 757 .S0006 760 NXTCD 761 .S0005 762 ARGEG 12 .S0004 763 .S0003 764 LENTH 765 .S0002 766 SCBIT 767 .S0001 770 ARGPS 771 .S0000 772 MAC2 121 ARGT 773 .S0017 774 .S0016 775 CDNUM 776 TYPE 777 .S0015 1000 .S0014 1001 SUBS 1002 .S0013 1003 .S0012 1004 .S0011 1005 MAC1 1 .S0010 1006 .O0007 1007 .O0006 1010 .O0005 1011 I 1012 .O0004 1013 .O0003 1014 .O0002 1015 .O0001 1016 .O0000 1017 EXP2 361 START 1020 SSPOS 1021 ARGIG 15 REC 1022 .S0022 1023 .S0021 1024 TEMPORARIES .A0016 1025 .Q0001 1026 ARGEG 15# 24# 67 78 101 ARGIG 15# 24# 69 79 101 ARGPS 15# 78# 81 81# 82 85 85# 86 87 87# 174# 176 176# 179 181 181# 182 190# 192 192# 193 194 ARGT 15# 101# 173 BLANK 15# 24# 142 151 152 182 193 236 BLFND 15# 144# 151# 152 167# 226 238# 245 257 258 CARD 15# 24# 151 152 154 178 188 195 204 215 236 260# CARD1 11# 21# 24# 102# 115 295# CARD2 11# 21# 46 107# 109# 111# 296# 304# CBIT 15# 24# 47 108 112# 261 305# CDNUM 15# 139# 151 152 154 168 168# 178 188 195 204 215 236 260 261 262# CDPOS 15# 177# 178 214# 215 CHAR 15# 178# 179 CRSET 11# 21# 24# DEF 11# 21# 24# DISK 15# 24# 62 64 68 102 105 109 DISP 15# 42# 77# 103 125 DUPFG 15# 44# 48 48# EQCHN 11# 21# ERROR 11# 21# 68 EXARG 15# 24# 82# 86# 193 194 EXP1 15# 24# EXP2 15# 24# EXPBF 15# 24# 61# 66 67 FCTN 11# 21# FIELD 15# 24# 83 83# 86 I 15# 45# 46 60# 61 79# 114# 115 141# 142 173# 174 187# 188 190 213# 214 215 222# 225 234# 235 259# 260 294# 295 303# 304 INDEX 15# 127# 128 J 15# 80# 84# 86 175# 177 186# 187 188 235# 236 238 LENTH 15# 172# 175 185 185# 191# 194 195 203# 212# 213 222 LITBL 10# 21# MAC1 15# 24# 62# MAC2 15# 24# 64# MACBF 15# 24# 65 66 MCARG 15# 24# 82 179 182 MCEXP 15# 24# 43 43# 83 83# MEND 15# 31# 115 295 NDT01 270 280 NDT02 9# NDT13 257 258 290 292 293 NDT29 168 NDT39 48 NDT45 83 NXTCD 15# 65# 102 104 106 106# 109 125 125# OBJCD 11# 21# OPER 11# 21# PGMCT 15# 30# 68 POS 15# 168 168# 169 172 186 195 212 246 PSSWT 15# 24# 41# 279# PTRS 11# 21# 24# 30# REC 15# 48 48# 59 62 63 63# 64 104# 105 RMAX 10# 21# RMIN 10# 21# SCBIT 15# 47# 305 SCD2 15# 46# 304 SSPOS 15# 143# 153 153# 154 223 223# 224 225 START 15# 140# 150# 151 152 154 168 168# 169 172 177 186 187 204 212 214 245 246# STYPE 15# 24# 113# 117# 128 SUBCD 15# 142# 154# 225# 260 SUBFD 15# 24# 188# 194# 195# 204# 215# 225 SUBS 15# 166# 170 171# 216# SUBSC 11# 21# SYM 11# 21# SYMTB 11# 21# TEXP 15# 24# 61 TITLE 11# 21# TMAP 11# 21# TOKEN 11# 21# 24# 105# TYPCT 11# 21# TYPE 15# 126# 127 128 168 168# 171 216 227 XREF 11# 21# 1000P 150 155# 100P 45 46# 1100P 152 166# 1150P 168# 247 1200P 175 180# 1300P 173 179 182 184# 1350P 186 188# 1400P 183 190# 1500P 191 194# 150P 60 61# 1600P 189 193 195# 1700P 169 203# 1800P 170 212# 1900P 213 215# 2000P 196 205 222# 200P 80 82# 2100P 222 225# 2200P 234 237# 2300P 236 238# 2400P 226 245# 2500P 227 246# 2600P 224 257# 2700P 156 245 259# 2750P 259 260# 2800P 261 270# 300P 84 86# 3100P 128 279# 297 3200P 59 290# 3300P 67 292# 3400P 66 291 293# 3450P 294 295# 3500P 281 303# 3600P 303 304# 400P 79 88# 500P 69 101# 510P 102# 128 271 600P 103 111# 700P 114 116# 800P 108 110 115 125# 900P 126 129# 950P 140# 263 975P 141 142# NDT02 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00008400 00002 C * 00008410 00003 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME * 00008420 00004 C WRITTEN BY THOMAS L EVERMAN JR * 00008430 00005 C * 00008440 00006 C***************************************************************** 00008450 00007 SUBROUTINE NDT03 00008460 00008 C***************************************************************** 00008470 00009 C * 00008480 00010 C THIS PROGRAM LOADS THE BUILT-IN MACRO STATEMENTS,DEFINITION* 00008490 00011 C AND THE MACRO DEFINITION TABLE (MDT). IT ALSO LOADS THE FU* 00008500 00012 C TABLE AS WELL AS PARAMETERS INTO THE SYMBOL TABLE. * 00008510 00013 C * 00008520 00014 C***************************************************************** 00008530 00015 REAL*8 RMIN,RMAX,LITBL(8192) 00008540 00016 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00008550 00017 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00008560 00018 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00008570 00019 3SYMTB(5,4096) 00008580 00020 INTEGER SM1(30),SM2(10),SM3(14),SM4(13),SM5(5) 00008590 00021 INTEGER D11(23),D12(25),D13(8),D14(12),D15(5) 00008600 00022 INTEGER D31(27),D32(25),D33(8),D34(29),D35(25) 00008610 00023 INTEGER D36(8),D37(29),D38(25),D39(8),D40(12),D41(5) 00008620 00024 INTEGER DY1(30),DY2(12),DY3(21),DY4(32),DY5(12) 00008630 00025 INTEGER DY6(21),DY7(30),DY8(12),DY9(19),DY0(5) 00008640 00026 INTEGER Y11(28),Y12(10),Y13(17),Y14(5) 00008650 00027 INTEGER BIM1(31),C11(18),C12 00008660 00028 INTEGER BIM2(31),C21(18),C22 00008670 00029 INTEGER BIM3(31),C31(20),C32(26),C33(5) 00008680 00030 INTEGER BIM4(31),C41(20),C42(23) 00008690 00031 INTEGER BIM5(31),C51(11) 00008700 00032 INTEGER MCREC(80) 00008710 00033 INTEGER B(898) 00008720 00034 INTEGER I,J,SYMPT,REC,BLANK,DISK,POS 00008730 00035 INTEGER FUN01(5),FUN02(5),FUN03(5),FUN04(5),FUN05(5) 00008740 00036 INTEGER FUN06(5),FUN07(5),FUN08(5),FUN09(5),FUN10(5) 00008750 00037 INTEGER FUN11(5),FUN12(5),FUN13(5),FUN14(5),FUN15(5) 00008760 00038 INTEGER FUN16(5),FUN17(5),FUN18(5),FUN19(5),FUN20(5) 00008770 00039 INTEGER FUN21(5),FUN22(5),FUNS(110) 00008780 00040 INTEGER PARM1(2),PARM2(2),PARM3(2),PARM4(2),PARM5(2) 00008790 00041 INTEGER PARM6(2),PARMS(2,6) 00008800 00042 INTEGER MDT(3,53),MDTL,MDT1(3),MDT2(3),MDT3(3),MDT4(3),MDT5(3) 00008810 00043 INTEGER MDTT(160),MDTT1(80),MDTT2(80) 00008820 00044 INTEGER FUNEQ(110),VTYPE,INTBT,DEFBT,VNUM,VALCT,SYMND 00008830 00045 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00008840 00046 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00008850 00047 2SYMTB,LITBL 00008860 00048 C***************************************************************** 00008870 00049 C * 00008880 00050 C THE EQUIVALENCE STATEMENTS BELOW ENTER DATA FOR THE BUILT-I* 00008890 00051 C MACROS INTO A LARGE ARRAY FROM WHICH DATA IS TAKEN TO FORM * 00008900 00052 C THE DISK RECORDS. * 00008910 00053 C * 00008920 00054 C***************************************************************** 00008930 00055 EQUIVALENCE (SM1(1),B(1)),(SM2(1),B(31)),(SM3(1),B(41)) 00008940 00056 EQUIVALENCE (SM4(1),B(55)),(SM5(1),B(68)) 00008950 NDT03 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 EQUIVALENCE (D11(1),B(73)),(D12(1),B(96)),(D13(1),B(121)) 00008960 00058 EQUIVALENCE (D14(1),B(129)),(D15(1),B(141)) 00008970 00059 EQUIVALENCE (D31(1),B(146)),(D32(1),B(173)),(D33(1),B(198)) 00008980 00060 EQUIVALENCE (D34(1),B(206)),(D35(1),B(235)),(D36(1),B(260)) 00008990 00061 EQUIVALENCE (D37(1),B(268)),(D38(1),B(297)),(D39(1),B(322)) 00009000 00062 EQUIVALENCE (D40(1),B(330)),(D41(1),B(342)) 00009010 00063 EQUIVALENCE (DY1(1),B(347)),(DY2(1),B(377)),(DY3(1),B(389)) 00009020 00064 EQUIVALENCE (DY4(1),B(410)),(DY5(1),B(442)),(DY6(1),B(454)) 00009030 00065 EQUIVALENCE (DY7(1),B(475)),(DY8(1),B(505)),(DY9(1),B(517)) 00009040 00066 EQUIVALENCE (DY0(1),B(536)) 00009050 00067 EQUIVALENCE (Y11(1),B(541)),(Y12(1),B(569)) 00009060 00068 EQUIVALENCE (Y13(1),B(579)),(Y14(1),B(596)) 00009070 00069 EQUIVALENCE (BIM1(1),B(601)),(C11(1),B(632)),(C12,B(650)) 00009080 00070 EQUIVALENCE (BIM2(1),B(651)),(C21(1),B(682)),(C22,B(700)) 00009090 00071 EQUIVALENCE (BIM3(1),B(701)),(C31(1),B(732)),(C32(1),B(752)) 00009100 00072 EQUIVALENCE (C33(1),B(778)) 00009110 00073 EQUIVALENCE (BIM4(1),B(783)),(C41(1),B(814)),(C42(1),B(834)) 00009120 00074 EQUIVALENCE (BIM5(1),B(857)),(C51(1),B(888)) 00009130 00075 EQUIVALENCE (MCREC(1),TOKEN(1)),(BLANK,CRSET(1)),(VTYPE,SYM(7)) 00009140 00076 EQUIVALENCE (INTBT,SYM(13)),(DEFBT,SYM(11)),(VNUM,SYM(14)) 00009150 00077 EQUIVALENCE (DISK,PTRS(3)),(STPGM,PTRS(21)),(VALCT,PTRS(20)) 00009160 00078 EQUIVALENCE (SYMND,PTRS(17)) 00009170 00079 C***************************************************************** 00009180 00080 C * 00009190 00081 C THE STATEMENTS BELOW PLACE INDIVIDUAL FUNCTION TABLE ENTRIE* 00009200 00082 C AND SYMBOL TABLE ENTRIES FOR PARAMETERS INTO LARGER ARRAYS.* 00009210 00083 C THE SAME OPERATION IS PERFORMED FOR THE MDT. * 00009220 00084 C * 00009230 00085 C***************************************************************** 00009240 00086 EQUIVALENCE (FUN01(1),FUNS(1)),(FUN02(1),FUNS(6)) 00009250 00087 EQUIVALENCE (FUN03(1),FUNS(11)),(FUN04(1),FUNS(16)), 00009260 00088 1(FUN05(1),FUNS(21)),(FUN06(1),FUNS(26)),(FUN07(1),FUNS(31)), 00009270 00089 2(FUN08(1),FUNS(36)),(FUN09(1),FUNS(41)),(FUN10(1),FUNS(46)), 00009280 00090 3(FUN11(1),FUNS(51)),(FUN12(1),FUNS(56)),(FUN13(1),FUNS(61)), 00009290 00091 4(FUN14(1),FUNS(66)),(FUN15(1),FUNS(71)),(FUN16(1),FUNS(76)), 00009300 00092 5(FUN17(1),FUNS(81)),(FUN18(1),FUNS(86)),(FUN19(1),FUNS(91)) 00009310 00093 EQUIVALENCE (FUN20(1),FUNS(96)),(FUN21(1),FUNS(101)), 00009320 00094 1(FUN22(1),FUNS(106)) 00009330 00095 EQUIVALENCE (PARM1(1),PARMS(1,1)),(PARM2(1),PARMS(1,2)), 00009340 00096 1(PARM3(1),PARMS(1,3)),(PARM4(1),PARMS(1,4)), 00009350 00097 2(PARM5(1),PARMS(1,5)),(PARM6(1),PARMS(1,6)) 00009360 00098 EQUIVALENCE (MDTL,MDTT(1)),(MDT(1,1),MDTT(2)), 00009370 00099 1(MDTT(1),MDTT1(1)),(MDTT(81),MDTT2(1)) 00009380 00100 EQUIVALENCE (MDT1(1),MDT(1,1)),(MDT2(1),MDT(1,2)), 00009390 00101 1(MDT3(1),MDT(1,3)),(MDT4(1),MDT(1,4)),(MDT5(1),MDT(1,5)) 00009400 00102 EQUIVALENCE (FCTN(1,1),FUNEQ(1)) 00009410 00103 C***************************************************************** 00009420 00104 C * 00009430 00105 C THE DATA STATEMENTS BELOW ARE FOR THE FUNCTION TABLE ENTRIE* 00009440 00106 C THE FORMAT IS AS FOLLOWS: * 00009450 00107 C 1 & 2 - PACKED REPRESENTATION OF FUNCTION NAME. * 00009460 00108 C 3 - OP CODE FOR THE FUNCTION. * 00009470 00109 C 4 - NUMBER OF ARGUMENTS TO THE FUNCTION. * 00009480 00110 C 5 - NUMBER OF SAVE AREAS REQUIRED BY THE FUNCTION. * 00009490 00111 C THE FUNCTIONS ARE REPRESENTED IN THE FOLLOWING ORDER: * 00009500 00112 C 1 - ABS 9 - MIN 16 - SQRT * 00009510 NDT03 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 C 2 - CLIP 10 - NOISE 17 - STEP * 00009520 00114 C 3 - COS 11 - NORMRN 18 - SWITCH * 00009530 00115 C 4 - DELAY 12 - PULSE 19 - TABFL * 00009540 00116 C 5 - EXP 13 - RAMP 20 - TABHL * 00009550 00117 C 6 - INTGRL 14 - SAMPLE 21 - TABLE * 00009560 00118 C 7 - LOG 15 - SIN 22 - TABND * 00009570 00119 C 8 - MAX * 00009580 00120 C * 00009590 00121 C***************************************************************** 00009600 00122 DATA FUN01 /-24159,-28899,17,1,0/ 00009610 00123 DATA FUN02 /-20737,-1521,18,4,0/ 00009620 00124 DATA FUN03 /-20610,-28899,19,1,0/ 00009630 00125 DATA FUN04 /-19486,-23283,20,2,1/ 00009640 00126 DATA FUN05 /-17220,-28899,21,1,0/ 00009650 00127 DATA FUN06 /-11522,-14416,16,1,7/ 00009660 00128 DATA FUN07 /-6933,-28899,22,1,0/ 00009670 00129 DATA FUN08 /-5941,-28899,23,2,0/ 00009680 00130 DATA FUN09 /-5639,-28899,24,2,0/ 00009690 00131 DATA FUN10 /-3889,3315,25,1,1/ 00009700 00132 DATA FUN11 /-3880,-5288,26,3,1/ 00009710 00133 DATA FUN12 /-610,3315,27,4,2/ 00009720 00134 DATA FUN13 /1653,-1521,28,2,8/ 00009730 00135 DATA FUN14 /3174,-968,29,2,2/ 00009740 00136 DATA FUN15 /3487,-28899,30,1,0/ 00009750 00137 DATA FUN16 /3803,4563,31,1,0/ 00009760 00138 DATA FUN17 /3907,-1521,32,2,0/ 00009770 00139 DATA FUN18 /4028,4768,33,3,0/ 00009780 00140 DATA FUN19 /4684,-16185,34,4,0/ 00009790 00141 DATA FUN20 /4684,-13143,35,5,0/ 00009800 00142 DATA FUN21 /4684,-7332,36,4,0/ 00009810 00143 DATA FUN22 /4684,-4329,37,4,0/ 00009820 00144 C***************************************************************** 00009830 00145 C * 00009840 00146 C THE FOLLOWING DATA IS FOR THE MDT ENTRIES FOR THE BUILT-IN * 00009850 00147 C MACROS. THE FORMAT IS AS FOLLOWS: * 00009860 00148 C 1 & 2 - PACKED REPRESENTATION OF MACRO NAMES. * 00009870 00149 C 3 - POINTER TO FILE RECORD CONTAINING MACRO DEFINITIO* 00009880 00150 C THE SEQUENCE IS AS FOLLOWS: * 00009890 00151 C 1 - SMOOTH 3 - DLINF3 5 - DELAY1 * 00009900 00152 C 2 - DLINF1 4 - DELAY3 * 00009910 00153 C * 00009920 00154 C***************************************************************** 00009930 00155 DATA MDT1 /3644,-2174,88/ 00009940 00156 DATA MDT2 /-19216,-4221,90/ 00009950 00157 DATA MDT3 /-19216,-4219,92/ 00009960 00158 DATA MDT4 /-19486,-23251,94/ 00009970 00159 DATA MDT5 /-19486,-23253,96/ 00009980 00160 DATA MDTL /5/ 00009990 00161 C***************************************************************** 00010000 00162 C * 00010010 00163 C THE FOLLOWING DATA DEFINES THE STATEMENTS WHICH ARE EXPANDE* 00010020 00164 C TO FORM THE SMOOTH MACRO. * 00010030 00165 C * 00010040 00166 C***************************************************************** 00010050 00167 DATA SM1/'L',' ','$','L','1','.','K','=','I','N','T','G','R','L', 00010060 00168 1'(','B','.','J','K','-','$','R','1','.','J','K',')',' ',' ',100/ 00010070 NDT03 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 00169 DATA SM2/'N',' ','$','L','1','=','B','*','C',100/ 00010080 00170 DATA SM3/'A',' ','A','.','K','=','$','L','1','.','K','/','C',100/ 00010090 00171 DATA SM4/'R',' ','$','R','1','.','K','L','=','A','.','K',100/ 00010100 00172 DATA SM5/'M','E','N','D',100/ 00010110 00173 C***************************************************************** 00010120 00174 C * 00010130 00175 C THE FOLLOWING DATA DEFINES THE STATEMENTS * 00010140 00176 C WHICH ARE EXPANDED TO FORM THE DLINF1 MACRO. * 00010150 00177 C * 00010160 00178 C***************************************************************** 00010170 00179 DATA D11/'R',' ','$','R','1','.','K','L','=','(','B','.','K','-', 00010180 00180 1'$','L','1','.','K',')','/','C',100/ 00010190 00181 DATA D12/'L',' ','$','L','1','.','K','=','I','N','T','G','R', 00010200 00182 1'L','(','$','R','1','.','J','K',')',' ',' ',100/ 00010210 00183 DATA D13/'N',' ','$','L','1','=','B',100/ 00010220 00184 DATA D14/'A',' ','A','.','K','=','$','L','1','.','K',100/ 00010230 00185 DATA D15/'M','E','N','D',100/ 00010240 00186 C***************************************************************** 00010250 00187 C * 00010260 00188 C THE FOLLOWING DATA DEFINES THE STATEMENTS * 00010270 00189 C WHICH ARE EXPANDED TO FORM THE DLINF3 MACRO * 00010280 00190 C * 00010290 00191 C***************************************************************** 00010300 00192 DATA D31/'R',' ','$','R','1','.','K','L','=','(','B','.','K','-', 00010310 00193 1'$','L','1','.','K',')','/','(','C','/','3',')',100/ 00010320 00194 DATA D32/'L',' ','$','L','1','.','K','=','I','N','T','G','R', 00010330 00195 1'L','(','$','R','1','.','J','K',')',' ',' ',100/ 00010340 00196 DATA D33/'N',' ','$','L','1','=','B',100/ 00010350 00197 DATA D34/'R',' ','$','R','2','.','K','L','=','(','$','L','1','.', 00010360 00198 1'K','-','$','L','2','.','K',')','/','(','C','/','3',')',100/ 00010370 00199 DATA D35/'L',' ','$','L','2','.','K','=','I','N','T','G','R', 00010380 00200 1'L','(','$','R','2','.','J','K',')',' ',' ',100/ 00010390 00201 DATA D36/'N',' ','$','L','2','=','B',100/ 00010400 00202 DATA D37/'R',' ','$','R','3','.','K','L','=','(','$','L','2','.', 00010410 00203 1'K','-','$','L','3','.','K',')','/','(','C','/','3',')',100/ 00010420 00204 DATA D38/'L',' ','$','L','3','.','K','=','I','N','T','G','R', 00010430 00205 1'L','(','$','R','3','.','J','K',')',' ',' ',100/ 00010440 00206 DATA D39/'N',' ','$','L','3','=','B',100/ 00010450 00207 DATA D40/'A',' ','A','.','K','=','$','L','3','.','K',100/ 00010460 00208 DATA D41/'M','E','N','D',100/ 00010470 00209 C***************************************************************** 00010480 00210 C * 00010490 00211 C THE FOLLOWING DATA DEFINES THE STATEMENTS * 00010500 00212 C WHICH ARE EXPANDED TO FORM THE DELAY3 MACRO * 00010510 00213 C * 00010520 00214 C***************************************************************** 00010530 00215 DATA DY1/'L',' ','$','L','1','.','K','=','I','N','T','G','R','L', 00010540 00216 1'(','B','.','J','K','-','$','R','1','.','J','K',')',' ',' ',100/ 00010550 00217 DATA DY2/'N',' ','$','L','1','=','B','*','C','/','3',100/ 00010560 00218 DATA DY3/'R',' ','$','R','1','.','K','L','=','$','L','1','.','K', 00010570 00219 1'/','(','C','/','3',')',100/ 00010580 00220 DATA DY4/'L',' ','$','L','2','.','K','=','I','N','T','G','R', 00010590 00221 1'L','(','$','R','1','.','J','K','-','$','R','2','.','J','K', 00010600 00222 2')',' ',' ',100/ 00010610 00223 DATA DY5/'N',' ','$','L','2','=','B','*','C','/','3',100/ 00010620 00224 DATA DY6/'R',' ','$','R','2','.','K','L','=','$','L','2','.','K', 00010630 NDT03 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-4 00225 1'/','(','C','/','3',')',100/ 00010640 00226 DATA DY7/'L',' ','$','L','3','.','K','=','I','N','T','G','R','L', 00010650 00227 1'(','$','R','2','.','J','K','-','A','.','J','K',')',' ',' ',100/ 00010660 00228 DATA DY8/'N',' ','$','L','3','=','B','*','C','/','3',100/ 00010670 00229 DATA DY9/'R',' ','A','.','K','L','=','$','L','3','.','K','/','(', 00010680 00230 1'C','/','3',')',100/ 00010690 00231 DATA DY0/'M','E','N','D',100/ 00010700 00232 C***************************************************************** 00010710 00233 C * 00010720 00234 C THE FOLLOWING DATA DEFINES THE STATEMENTS * 00010730 00235 C WHICH ARE EXPANDED TO FORM THE DELAY1 MACRO. * 00010740 00236 C * 00010750 00237 C***************************************************************** 00010760 00238 DATA Y11/'L',' ','$','L','1','.','K','=','I','N','T','G','R', 00010770 00239 1'L','(','B','.','J','K','-','A','.','J','K',')',' ',' ',100/ 00010780 00240 DATA Y12/'N',' ','$','L','1','=','B','*','C',100/ 00010790 00241 DATA Y13/'R',' ','A','.','K','L','=','$','L','1','.','K','/','C', 00010800 00242 1' ',' ',100/ 00010810 00243 DATA Y14/'M','E','N','D',100/ 00010820 00244 C***************************************************************** 00010830 00245 C * 00010840 00246 C MACRO DEFINITION FOR SMOOTH. * 00010850 00247 C * 00010860 00248 C***************************************************************** 00010870 00249 DATA BIM1 /'S','M','O','O','T','H',' ',' ',0,3,53,0,2,'A',' ',' ',00010880 00250 1' ',' ',' ',' ',' ','B',' ',' ',' ',' ',' ',' ',' ','C',' '/ 00010890 00251 DATA C11 /' ',' ',' ',' ',' ', 00010900 00252 1' ','$','L','1',' ',' ',' ',' ',' ','$','R','1',100/ 00010910 00253 DATA C12 /100/ 00010920 00254 C***************************************************************** 00010930 00255 C * 00010940 00256 C MACRO DEFINITION FOR DLINF1. * 00010950 00257 C * 00010960 00258 C***************************************************************** 00010970 00259 DATA BIM2 /'D','L','I','N','F','1',' ',' ',0,3,58,0,2,'A',' ',' ',00010980 00260 1' ',' ',' ',' ',' ','B',' ',' ',' ',' ',' ',' ',' ','C',' '/ 00010990 00261 DATA C21 /' ',' ',' ',' ',' ', 00011000 00262 1' ','$','L','1',' ',' ',' ',' ',' ','$','R','1',100/ 00011010 00263 DATA C22 /100/ 00011020 00264 C***************************************************************** 00011030 00265 C * 00011040 00266 C MACRO DEFINITION FOR DLINF3. * 00011050 00267 C * 00011060 00268 C***************************************************************** 00011070 00269 DATA BIM3 /'D','L','I','N','F','3',' ',' ',0,3,63,0,6,'A',' ',' ',00011080 00270 1' ',' ',' ',' ',' ','B',' ',' ',' ',' ',' ',' ',' ','C',' '/ 00011090 00271 DATA C31 /' ',' ',' ',' ',' ', 00011100 00272 1' ','$','L','1',' ',' ',' ',' ',' ','$','R','1',' ',' ',' '/ 00011110 00273 DATA C32 /' ',' ','$','L','2',' ',' ',' ',' ',' ','$','R','2',' ',00011120 00274 1' ',' ',' ',' ','$','L','3',' ',' ',' ',' ',' '/ 00011130 00275 DATA C33 /'$','R','3',100,100/ 00011140 00276 C***************************************************************** 00011150 00277 C * 00011160 00278 C MACRO DEFINITION FOR DELAY3. * 00011170 00279 C * 00011180 00280 C***************************************************************** 00011190 NDT03 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-5 00281 DATA BIM4 /'D','E','L','A','Y','3',' ',' ',0,3,74,0,5,'A',' ',' ',00011200 00282 1' ',' ',' ',' ',' ','B',' ',' ',' ',' ',' ',' ',' ','C',' '/ 00011210 00283 DATA C41 /' ',' ',' ',' ',' ', 00011220 00284 1' ','$','L','1',' ',' ',' ',' ',' ','$','R','1',' ',' ',' '/ 00011230 00285 DATA C42 /' ',' ','$','L','2',' ',' ',' ',' ',' ','$','R','2',' ',00011240 00286 1' ',' ',' ',' ','$','L','3',100,100/ 00011250 00287 C***************************************************************** 00011260 00288 C * 00011270 00289 C MACRO DEFINTION FOR DELAY1. * 00011280 00290 C * 00011290 00291 C***************************************************************** 00011300 00292 DATA BIM5 /'D','E','L','A','Y','1',' ',' ',0,3,84,0,1,'A',' ',' ',00011310 00293 1' ',' ',' ',' ',' ','B',' ',' ',' ',' ',' ',' ',' ','C',' '/ 00011320 00294 DATA C51 /' ',' ',' ',' ',' ', 00011330 00295 1' ','$','L','1',100,100/ 00011340 00296 C***************************************************************** 00011350 00297 C * 00011360 00298 C THE FOLLOWING DATA IS FOR ENTERING THE PARAMETERS * 00011370 00299 C INTO THE SYMBOL TABLE. PARAMETERS ARE ENTERED IN * 00011380 00300 C THE FOLLOWING ORDER: * 00011390 00301 C 1 - DT 3 - STOP 5 - PRTPER * 00011400 00302 C 2 - TIME 4 - START 6 - PLTPER * 00011410 00303 C * 00011420 00304 C***************************************************************** 00011430 00305 DATA PARM1 /-18915,-28899/ 00011440 00306 DATA PARM2 /5007,-18252/ 00011450 00307 DATA PARM3 /3917,-1521/ 00011460 00308 DATA PARM4 /3903,2379/ 00011470 00309 DATA PARM5 /-719,-1228/ 00011480 00310 DATA PARM6 /-953,-1228/ 00011490 00311 C***************************************************************** 00011500 00312 C * 00011510 00313 C LOAD THE BUILT-IN MACRO STATEMENTS AND DEFINITIONS. * 00011520 00314 C * 00011530 00315 C***************************************************************** 00011540 00316 DO 50 I = 1, 80 00011550 00317 50 MCREC(I) = BLANK 00011560 00318 SYMPT = 0 00011570 00319 REC = 52 00011580 00320 DO 100 I = 1, 898 00011590 00321 IF (B(I) .NE. 100) GO TO 75 00011600 00322 REC = REC + 1 00011610 00323 WRITE (DISK'REC) MCREC 00011620 00324 IF (SYMPT .EQ. 0) GO TO 100 00011630 00325 DO 60 J = 1, SYMPT 00011640 00326 60 MCREC(J) = BLANK 00011650 00327 SYMPT = 0 00011660 00328 GO TO 100 00011670 00329 75 SYMPT = SYMPT + 1 00011680 00330 MCREC(SYMPT) = B(I) 00011690 00331 100 CONTINUE 00011700 00332 C***************************************************************** 00011710 00333 C * 00011720 00334 C LOAD THE FUNCTION TABLE. * 00011730 00335 C * 00011740 00336 C***************************************************************** 00011750 NDT03 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-6 00337 DO 300 I = 1, 110 00011760 00338 300 FUNEQ(I) = FUNS(I) 00011770 00339 C***************************************************************** 00011780 00340 C * 00011790 00341 C LOAD THE MDT. * 00011800 00342 C * 00011810 00343 C***************************************************************** 00011820 00344 WRITE (DISK'98) MDTT1 00011830 00345 WRITE (DISK'99) MDTT2 00011840 00346 C***************************************************************** 00011850 00347 C * 00011860 00348 C LOAD THE PARAMETERS INTO THE SYMBOL TABLE. * 00011870 00349 C * 00011880 00350 C***************************************************************** 00011890 00351 DO 400 J=1, SYMND 00011900 00352 400 SYMTB(1,J)=32767 00011910 00353 VALCT = 10 00011920 00354 DO 600 I = 1, 6 00011930 00355 CALL NDT37 (PARMS(1,I),POS) 00011940 00356 IF (VNUM .NE. 12) GO TO 500 00011950 00357 VTYPE = 5 00011960 00358 INTBT = 1 00011970 00359 DEFBT = 1 00011980 00360 GO TO 600 00011990 00361 500 VTYPE = 3 00012000 00362 600 CALL NDT40 (SYMTB(1,POS)) 00012010 00363 RETURN 00012020 00364 END 00012040 EQUIVALENCED VARIABLES ( SM1 1 B 1 SM2 37 SM3 51 SM4 67 SM5 104 D11 111 D12 140 D13 171 D14 201 D15 215 D31 222 D32 255 D33 306 D34 316 D35 353 D36 404 D37 414 D38 451 D39 502 D40 512 D41 526 DY1 533 DY2 571 DY3 605 DY4 632 DY5 672 DY6 706 DY7 733 DY8 771 DY9 1005 DY0 1030 Y11 1035 Y12 1071 Y13 1103 Y14 1124 BIM1 1131 C11 1170 C12 1212 BIM2 1213 C21 1252 C22 1274 BIM3 1275 C31 1334 C32 1360 C33 1412 BIM4 1417 C41 1456 C42 1502 BIM5 1531 C51 1570 ) ( FUN01 1603 FUNS 1603 FUN02 1610 FUN03 1615 FUN04 1622 FUN05 1627 FUN06 1634 FUN07 1641 FUN08 1646 FUN09 1653 FUN10 1660 FUN11 1665 FUN12 1672 FUN13 1677 FUN14 1704 FUN15 1711 FUN16 1716 FUN17 1723 FUN18 1730 FUN19 1735 FUN20 1742 FUN21 1747 FUN22 1754 ) ( PARM1 1761 PARMS 1761 PARM2 1763 PARM3 1765 PARM4 1767 PARM5 1771 PARM6 1773 ) ( MDTL 1775 MDTT 1775 MDT 1776 MDTT1 1775 MDTT2 2115 MDT1 1776 MDT2 2001 MDT3 2004 MDT4 2007 MDT5 2012 ) NDT03 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-7 COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 MCREC +522 BLANK +251 VTYPE +337 INTBT +345 DEFBT +343 VNUM +346 DISK +6 STPGM +30 VALCT +27 SYMND +24 FUNEQ +2042 SUBPROGRAMS CALLED NDT40 NDT37 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] MDT1 1776 PARMS 1761 DY4 632 SM4 67 D35 353 FUN04 1622 PARM3 1765 C41 1456 FUN13 1677 Y11 1035 FUN09 1653 D14 201 FUN22 1754 DY8 771 FUN18 1730 D39 502 DY1 533 SM1 1 D32 255 B 1 FUN03 1615 MDTT2 2115 C31 1334 PARM2 1763 D11 111 FUN12 1672 FUN08 1646 DY5 672 SM5 104 BIM5 1531 D36 404 FUN21 1747 POS 2235 FUN17 1723 C42 1502 Y12 1071 MDT5 2012 D15 215 DY9 1005 .R0001 2236 .R0000 2237 FUN02 1610 C21 1252 MDTT1 1775 PARM1 1761 BIM4 1417 DY2 571 D40 512 SM2 37 FUN11 1665 D33 306 FUN07 1641 J 2240 PARM6 1773 FUN20 1742 FUN16 1716 MDT4 2007 FUNS 1603 C32 1360 .S0005 2241 D12 140 .S0004 2242 .S0003 2243 MDT 1776 DY6 706 .S0002 2244 D37 414 .S0001 2245 .S0000 2246 BIM3 1275 C11 1170 FUN01 1603 Y13 1103 FUN10 1660 MDTT 1775 FUN06 1634 MDT3 2004 SYMPT 2247 PARM5 1771 FUN15 1711 C22 1274 DY3 605 D41 526 SM3 51 D34 316 BIM2 1213 C33 1412 D13 171 MDT2 2001 I 2250 DY7 733 FUN05 1627 D38 451 MDTL 1775 PARM4 1767 C12 1212 FUN14 1704 C51 1570 DY0 1030 BIM1 1131 D31 222 Y14 1124 FUN19 1735 REC 2251 TEMPORARIES .A0016 2252 .Q0002 2253 B 33# 55# 56# 57# 58# 59# 60# 61# 62# 63# 64# 65# 66# 67# 68# 69# 70# 71# 72# 73# 74# 321 330 BIM1 27# 69# 249# BIM2 28# 70# 259# BIM3 29# 71# 269# BIM4 30# 73# 281# BIM5 31# 74# 292# BLANK 34# 75# 317 326 C11 27# 69# 251# C12 27# 69# 253# C21 28# 70# 261# C22 28# 70# 263# C31 29# 71# 271# C32 29# 71# 273# C33 29# 72# 275# C41 30# 73# 283# C42 30# 73# 285# C51 31# 74# 294# CARD1 16# 45# CARD2 16# 45# CRSET 16# 45# 75# D11 21# 57# 179# D12 21# 57# 181# D13 21# 57# 183# D14 21# 58# 184# D15 21# 58# 185# D31 22# 59# 192# D32 22# 59# 194# D33 22# 59# 196# D34 22# 60# 197# D35 22# 60# 199# D36 23# 60# 201# D37 23# 61# 202# D38 23# 61# 204# D39 23# 61# 206# D40 23# 62# 207# D41 23# 62# 208# DEF 16# 45# DEFBT 44# 76# 359# DISK 34# 77# 323 344 345 DY0 25# 66# 231# DY1 24# 63# 215# DY2 24# 63# 217# DY3 24# 63# 218# DY4 24# 64# 220# DY5 24# 64# 223# DY6 25# 64# 224# DY7 25# 65# 226# DY8 25# 65# 228# DY9 25# 65# 229# EQCHN 16# 45# ERROR 16# 45# FCTN 16# 45# 102# FUN01 35# 86# 122# FUN02 35# 86# 123# FUN03 35# 87# 124# FUN04 35# 87# 125# FUN05 35# 87# 126# FUN06 36# 87# 127# FUN07 36# 87# 128# FUN08 36# 87# 129# FUN09 36# 87# 130# FUN10 36# 87# 131# FUN11 37# 87# 132# FUN12 37# 87# 133# FUN13 37# 87# 134# FUN14 37# 87# 135# FUN15 37# 87# 136# FUN16 38# 87# 137# FUN17 38# 87# 138# FUN18 38# 87# 139# FUN19 38# 87# 140# FUN20 38# 93# 141# FUN21 39# 93# 142# FUN22 39# 93# 143# FUNEQ 44# 102# 338# FUNS 39# 86# 87# 93# 338 I 34# 316# 317 320# 321 330 337# 338 354# 355 INTBT 44# 76# 358# J 34# 325# 326 351# 352 LITBL 15# 45# MCREC 32# 75# 317# 323 326# 330# MDT 42# 98# 100# MDT1 42# 100# 155# MDT2 42# 100# 156# MDT3 42# 100# 157# MDT4 42# 100# 158# MDT5 42# 100# 159# MDTL 42# 98# 160# MDTT 43# 98# MDTT1 43# 98# 344 MDTT2 43# 98# 345 NDT03 7# NDT37 355 NDT40 362 OBJCD 16# 45# OPER 16# 45# PARM1 40# 95# 305# PARM2 40# 95# 306# PARM3 40# 95# 307# PARM4 40# 95# 308# PARM5 40# 95# 309# PARM6 41# 95# 310# PARMS 41# 95# 355 355# POS 34# 355 355# 362 PTRS 16# 45# 77# 78# REC 34# 319# 322 322# 323 RMAX 15# 45# RMIN 15# 45# SM1 20# 55# 167# SM2 20# 55# 169# SM3 20# 55# 170# SM4 20# 56# 171# SM5 20# 56# 172# STPGM 77# SUBSC 16# 45# SYM 16# 45# 75# 76# SYMND 44# 78# 351 SYMPT 34# 318# 324 325 327# 329 329# 330 SYMTB 16# 45# 352# 362 362# TITLE 16# 45# TMAP 16# 45# TOKEN 16# 45# 75# TYPCT 16# 45# VALCT 44# 77# 353# VNUM 44# 76# 356 VTYPE 44# 75# 357# 361# XREF 16# 45# Y11 26# 67# 238# Y12 26# 67# 240# Y13 26# 68# 241# Y14 26# 68# 243# 100P 320 324 328 331# 300P 337 338# 400P 351 352# 500P 356 361# 50P 316 317# 600P 354 360 362# 60P 325 326# 75P 321 329# NDT03 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00012050 00002 C PROGRAM AUTHOR - DANIEL A. POYDENCE 00012060 00003 C 00012070 00004 C 00012080 00005 SUBROUTINE NDT04 00012090 00006 C 00012100 00007 C 00012110 00008 C NDT04 IS THE CONTEXT ANALYSIS PHASE COORDINATOR. LEXICAL AND 00012120 00009 C COMPILE PHASE INFORMATION IS READ IN FOR EACH SOURCE STATEMENT 00012130 00010 C AND CONTEXT DEPENDENT FEATURES ARE CHECKED FOR VALIDITY. 00012140 00011 C 00012150 00012 C 00012160 00013 REAL*8 RMIN,RMAX,LITBL(8192) 00012170 00014 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00012180 00015 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00012190 00016 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00012200 00017 3SYMTB(5,4096) 00012210 00018 INTEGER PSSWT,PGMND,PGMCT,RRBND,RRBPT,RUNCT,RRBST,DOC,OCBST, 00012220 00019 1LINCT,OPTNS,PRNTR,STPGM,DISK,CBIT,STYPE,NOTBT,EQPOS,OCBPT, 00012230 00020 2SYMPT,VNUM,CRITS,PGMCD,XRFND,DGMSG,CRSMT,EXCHR,BLANK,OCBND, 00012240 00021 3OBJ2(80),RELOC 00012250 00022 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00012260 00023 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00012270 00024 2SYMTB,LITBL 00012280 00025 EQUIVALENCE (PSSWT,PTRS(10)),(PGMND,PTRS(23)),(PGMCT,PTRS(22)), 00012290 00026 1(RRBND,PTRS(38)),(RRBPT,PTRS(37)),(RUNCT,PTRS(14)),(RRBST, 00012300 00027 2PTRS(36)),(LINCT,PTRS(5)),(OPTNS,PTRS(7)),(PRNTR,PTRS(2)), 00012310 00028 3(STPGM,PTRS(21)),(DISK,PTRS(3)),(CBIT,TOKEN(2)),(STYPE, 00012320 00029 4TOKEN(1)),(NOTBT,OBJCD(1)),(EQPOS,TMAP(3)),(VNUM,SYM(14)) 00012330 00030 EQUIVALENCE (CRITS,PTRS(13)),(PGMCD,PTRS(15)),(XRFND,PTRS(16)), 00012340 00031 1(DGMSG,PTRS(41)),(CRSMT,TMAP(1)),(EXCHR,PTRS(39)), 00012350 00032 2(BLANK,CRSET(1)),(OCBST,PTRS(42)),(OCBPT,PTRS(43)) 00012360 00033 EQUIVALENCE (OCBND,PTRS(44)),(OBJ2(1),OBJCD(81)),(RELOC,PTRS(40)) 00012370 00034 C 00012380 00035 C 00012390 00036 C EXAMINE THE PROGRAM STATUS SWITCH FOR SPECIAL CONDITIONS AT 00012400 00037 C THE END OF THE PROGRAM. IF MACRO MODE IS IN EFFECT THEN 00012410 00038 C AN MEND CARD WAS MISSING AND THE MACRO COULD NOT BE EXPANDED. 00012420 00039 C IF RERUN MODE WAS IN EFFECT THEN THE LAST RERUN BUFFER NEEDS 00012430 00040 C TO BE VALIDITY CHECKED AND WRITTEN TO DISK. THE RERUN 00012440 00041 C PROCESSOR WILL ALSO STOP EQUATION CHAINING AND COMPUTE THE 00012450 00042 C RELOCATING CONSTANT FOR NUMERIC LITERALS IF THIS HAD NOT 00012460 00043 C BEEN DONE PREVIOUSLY. 00012470 00044 C 00012480 00045 C 00012490 00046 IF(PSSWT.EQ.4) CALL NDT20 (112,3) 00012500 00047 CALL NDT18 00012510 00048 C 00012520 00049 C 00012530 00050 C ESTABLISH PROGRAM AND RERUN END OF DATA POINTERS, COMPUTE 00012540 00051 C THE NUMBER OF VALID RUNS, AND INITIALIZE DGMSG TO BEGIN 00012550 00052 C THE SOURCE LISTING. DGMSG HAS 2 VALUES AT THIS POINT: 00012560 00053 C 00012570 00054 C 0 - THE NOSOURCE OPTION IS IN EFFECT AND THE DIAGNOSTIC 00012580 00055 C HEADER HAS NOT PRINTED 00012590 00056 C 1 - THE SOURCE OPTION IS IN EFFECT OR NOSOURCE IS IN 00012600 NDT04 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C EFFECT AND THE DIAGNOSTIC HEADER HAS ALREADY PRINTED 00012610 00058 C 00012620 00059 C 00012630 00060 PGMND=PGMCT 00012640 00061 RRBND=RRBPT 00012650 00062 XRFND=PGMND 00012660 00063 RUNCT=RRBND-RRBST+2 00012670 00064 DGMSG=0 00012680 00065 IF(MOD(OPTNS/1024,2).EQ.0) DGMSG=1 00012690 00066 C 00012700 00067 C 00012710 00068 C INITIALIZE THE POINTERS FOR OUTPUT CONTROL BLOCKS TO BE 00012720 00069 C WRITTEN TO DISK AFTER CONTEXT PROCESSING. 00012730 00070 C 00012740 00071 C 00012750 00072 OCBST=RRBND+1 00012760 00073 OCBPT=RRBND 00012770 00074 C 00012780 00075 C 00012790 00076 C INITIALIZE EXCHR TO A BLANK TO BEGIN THE SOURCE LISTING. 00012800 00077 C 00012810 00078 C 00012820 00079 EXCHR=BLANK 00012830 00080 C 00012840 00081 C 00012850 00082 C INITIALIZE PSSWT FOR THE CONTEXT PHASE. ALL CARDS IN RERUN 00012860 00083 C GROUPS HAVE ALREADY BEEN CONTEXT PROCESSED SO ONCE THE FIRST 00012870 00084 C RERUN CARD IS ENCOUNTERED, PSSWT IS SET AND FURTHER CONTEXT 00012880 00085 C PROCESSING IS SKIPPED. PSSWT HAS 3 VALUES IN THIS PHASE: 00012890 00086 C 00012900 00087 C 3 - NORMAL MAINLINE PROGRAM 00012910 00088 C 4 - MACRO MODE 00012920 00089 C 5 - RERUN MODE 00012930 00090 C 00012940 00091 C 00012950 00092 PSSWT=3 00012960 00093 C 00012970 00094 C 00012980 00095 C SET A FLAG FOR THE DOCUMENTOR OPTION AND SET LINCT TO FORCE 00012990 00096 C PAGING FOR THE FIRST PAGE OF OUTPUT. IF THE SOURCE OPTION 00013000 00097 C IS IN EFFECT THEN PRINT THE SOURCE LISTING HEADER. 00013010 00098 C 00013020 00099 C 00013030 00100 DOC=MOD(OPTNS/4,2) 00013040 00101 LINCT=-1 00013050 00102 IF(MOD(OPTNS/1024,2).EQ.1) GO TO 1200 00013060 00103 CALL NDT57 (2) 00013070 00104 WRITE(PRNTR,1100) 00013080 00105 1100 FORMAT(5X,'* * * * * S O U R C E L I S T I N G * *', 00013090 00106 1' * * *'/) 00013100 00107 C 00013110 00108 C 00013120 00109 C BEGIN THE CONTEXT PHASE. TOKEN, ERROR, CARD IMAGE AND TMAP 00013130 00110 C INFORMATION IS READ FROM DISK. 00013140 00111 C 00013150 00112 C 00013160 NDT04 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 1200 DO 100 PGMCT=STPGM,PGMND,9 00013170 00114 READ(DISK'PGMCT) TOKEN 00013180 00115 READ(DISK'PGMCT+1) CARD1 00013190 00116 IF(CBIT.EQ.1) READ(DISK'PGMCT+2) CARD2 00013200 00117 READ(DISK'PGMCT+3) ERROR 00013210 00118 IF(STYPE.LE.8.AND.PSSWT.EQ.3) READ(DISK'PGMCT+8) TMAP 00013220 00119 C 00013230 00120 C 00013240 00121 C COMPUTE THE CURRENT STATEMENT NUMBER. 00013250 00122 C 00013260 00123 C 00013270 00124 CRSMT=(PGMCT-STPGM)/9+1 00013280 00125 C 00013290 00126 C 00013300 00127 C CONTEXT PROCESSING IS SKIPPED IF PSSWT INDICATES RERUN OR 00013310 00128 C MACRO MODES. SET PSSWT APPROPRIATELY: ONCE A RERUN CARD IS 00013320 00129 C ENCOUNTERED RERUN MODE REMAINS IN EFFECT, MACRO AND MEND CARDS 00013330 00130 C CAUSE MODE CHANGES BETWEEN MACRO AND NORMAL MODES. 00013340 00131 C 00013350 00132 C 00013360 00133 IF(PSSWT.EQ.5) GO TO 800 00013370 00134 IF(STYPE.EQ.14) PSSWT=5 00013380 00135 IF(STYPE.EQ.15) PSSWT=4 00013390 00136 IF(STYPE.EQ.16) PSSWT=3 00013400 00137 IF(PSSWT.EQ.4) GO TO 800 00013410 00138 C 00013420 00139 C 00013430 00140 C IF THE CARD IS NOT A NOTE OR AN OUTPUT CARD THEN INDICATE 00013440 00141 C NO INFORMATION IN THE NOTE ARRAY. 00013450 00142 C 00013460 00143 C 00013470 00144 IF(STYPE.LT.11 .OR. STYPE.GT.13) NOTBT=0 00013480 00145 C 00013490 00146 C 00013500 00147 C CALL THE APPROPRIATE CONTEXT PROCESSORS TO PERFORM THE 00013510 00148 C ANALYSES FOR DIFFERENT CARD TYPES. 00013520 00149 C 00013530 00150 C 00013540 00151 GO TO (210,300,400,300,600,300,300,300,800,800, 00013550 00152 1 900,1000,1000,800,800,800,800,500,800,800),STYPE 00013560 00153 C 00013570 00154 C 00013580 00155 C CONTEXT PROCESSING FOR TABLE CARDS. FIRST THE ADDRESS OF 00013590 00156 C THE TABLE ARRAY WHICH IS IN THE LITERAL TABLE MUST BE 00013600 00157 C RELOCATED. LEFT OF EQUAL SIGN PROCESSING FOLLOWS. 00013610 00158 C 00013620 00159 C 00013630 00160 210 READ(DISK'PGMCT+4) OBJ2 00013640 00161 SYMPT=-OBJ2(6) 00013650 00162 LITBL(SYMPT)=SYMPT+RELOC+1 00013660 00163 GO TO 200 00013670 00164 C 00013680 00165 C 00013690 00166 C CONTEXT PROCESSING FOR PARM CARDS. IF THE EQUATION IS FOR 00013700 00167 C 'DT' THEN NORMAL LEFT AND RIGHT PROCESSING IS REQUIRED. 00013710 00168 C IF THE EQUATION IS NOT FOR 'DT' THEN NUMERIC ONLY AND LEFT 00013720 NDT04 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 00169 C PROCESSING ARE REQUIRED. 00013730 00170 C 00013740 00171 C 00013750 00172 400 IF(EQPOS.NE.5) GO TO 800 00013760 00173 IF(TOKEN(4).LT.0.OR.TOKEN(4).GT.20479) GO TO 800 00013770 00174 SYMPT=MOD(TOKEN(4),4096)+1 00013780 00175 CALL NDT41 (SYMTB(1,SYMPT)) 00013790 00176 IF(VNUM.EQ.11) GO TO 300 00013800 00177 CALL NDT49 00013810 00178 GO TO 200 00013820 00179 C 00013830 00180 C 00013840 00181 C TMAP INFORMATION IS NOT SAVED FOR DEF CARDS SO IT MUST BE 00013850 00182 C SET TO ALLOW PROPER LEFT OF EQUAL SIGN PROCESSING. 00013860 00183 C 00013870 00184 C 00013880 00185 500 EQPOS=5 00013890 00186 TMAP(4)=0 00013900 00187 GO TO 200 00013910 00188 C 00013920 00189 C 00013930 00190 C CONTEXT PROCESS THE LEVEL EQUATIONS. 00013940 00191 C 00013950 00192 C 00013960 00193 600 CALL NDT51 00013970 00194 GO TO 300 00013980 00195 C 00013990 00196 C 00014000 00197 C SAVE NOTE CARD INFORMATION FOR PRINT AND PLOT TITLES. 00014010 00198 C 00014020 00199 C 00014030 00200 900 CALL NDT55 00014040 00201 GO TO 800 00014050 00202 C 00014060 00203 C 00014070 00204 C CONTEXT PROCESS THE OUTPUT CARDS. 00014080 00205 C 00014090 00206 C 00014100 00207 1000 CALL NDT52 00014110 00208 EQPOS=3 00014120 00209 C 00014130 00210 C 00014140 00211 C RIGHT AND LEFT OF EQUAL SIGN VARIABLE USAGE ANALYSIS IS 00014150 00212 C PERFORMED HERE. 00014160 00213 C 00014170 00214 C 00014180 00215 300 CALL NDT48 00014190 00216 200 CALL NDT47 00014200 00217 C 00014210 00218 C 00014220 00219 C AFTER THE CONTEXT PROCESSING, THE SOURCE IS LISTED IF THE 00014230 00220 C OPTION IS IN EFFECT AND ANY DIAGNOSTIC MESSAGES ARE PRINTED. 00014240 00221 C 00014250 00222 C 00014260 00223 800 CALL NDT56 00014270 00224 C 00014280 NDT04 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-4 00225 C 00014290 00226 C IF THE DOCUMENT OPTION IS IN EFFECT AND THE STATEMENT IS AN 00014300 00227 C EQUATION OR OUTPUT CARD, BUT NOT IN AN EXPND GROUP, CALL 00014310 00228 C THE DOCUMENTOR. 00014320 00229 C 00014330 00230 C 00014340 00231 IF(DOC.EQ.1.AND.EXCHR.EQ.BLANK.AND.PSSWT.NE.4.AND.STYPE.NE.3 00014350 00232 1 .AND.(STYPE.LE.8.OR.STYPE.EQ.12.OR.STYPE.EQ.13)) CALL NDT50 00014360 00233 100 CONTINUE 00014370 00234 C 00014380 00235 C 00014390 00236 C SET THE OUTPUT CONTROL BLOCK GROUP END POINTER. 00014400 00237 C 00014410 00238 C 00014420 00239 OCBND=OCBPT 00014430 00240 C 00014440 00241 C 00014450 00242 C A VALID MODEL MUST HAVE A LEVEL EQUATION AND A PROGRAM 00014460 00243 C MUST CONTAIN A REQUEST FOR OUTPUT. 00014470 00244 C 00014480 00245 C 00014490 00246 IF(TYPCT(5).NE.0) GO TO 1300 00014500 00247 CRITS=CRITS+1 00014510 00248 PGMCD=3 00014520 00249 CALL NDT57 (4) 00014530 00250 WRITE(PRNTR,1400) 00014540 00251 1400 FORMAT(/' A VALID MODEL MUST HAVE AT LEAST ONE LEVEL EQUATION.'/, 00014550 00252 1' THIS PROGRAM HAS NONE SO EXECUTION WILL BE INHIBITED.'/) 00014560 00253 1300 IF(TYPCT(12)+TYPCT(13).NE.0) GO TO 1500 00014570 00254 CRITS=CRITS+1 00014580 00255 PGMCD=3 00014590 00256 CALL NDT57 (4) 00014600 00257 WRITE(PRNTR,1600) 00014610 00258 1600 FORMAT(/' THIS PROGRAM HAS NO PRINT OR PLOT STATEMENTS.'/, 00014620 00259 1' SINCE NO OUTPUT IS REQUESTED, THE MODEL WILL NOT BE RUN.'/) 00014630 00260 C 00014640 00261 C 00014650 00262 C IF CRITICAL ERRORS OCCURRED THEN THE 'GO' AND 'OBJECT' OPTIONS 00014660 00263 C CANNOT BE SUPPORTED. IF THEY ARE IN EFFECT THEN CANCEL THEM. 00014670 00264 C 00014680 00265 C 00014690 00266 1500 IF(MOD(OPTNS/32,2).EQ.0.AND.PGMCD.EQ.3) OPTNS=OPTNS+32 00014700 00267 IF(MOD(OPTNS/512,2).EQ.1.AND.PGMCD.EQ.3) OPTNS=OPTNS-512 00014710 00268 RETURN 00014720 00269 END 00014740 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 NDT04 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-5 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 PSSWT +15 PGMND +32 PGMCT +31 RRBND +51 RRBPT +50 RUNCT +21 RRBST +47 LINCT +10 OPTNS +12 PRNTR +5 STPGM +30 DISK +6 CBIT +523 STYPE +522 NOTBT +1222 EQPOS +1724 VNUM +346 CRITS +20 PGMCD +22 XRFND +23 DGMSG +54 CRSMT +1722 EXCHR +52 BLANK +251 OCBST +55 OCBPT +56 OCBND +57 OBJ2 +1342 RELOC +53 SUBPROGRAMS CALLED NDT50 MOD. NDT55 NDT18 NDT49 NDT20 NDT52 NDT48 NDT57 NDT51 NDT47 NDT56 NDT41 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] .S0000 1 SYMPT 2 .O0000 3 DOC 4 TEMPORARIES .A0016 101 .Q0000 102 BLANK 18# 30# 79 231 CARD1 14# 22# 115# CARD2 14# 22# 116# CBIT 18# 25# 116 CRITS 18# 30# 247 247# 254 254# CRSET 14# 22# 30# CRSMT 18# 30# 124# DEF 14# 22# DGMSG 18# 30# 64# 65# DISK 18# 25# 114 115 116 117 118 160 DOC 18# 100# 231 EQCHN 14# 22# EQPOS 18# 25# 172 185# 208# ERROR 14# 22# 117# EXCHR 18# 30# 79# 231 FCTN 14# 22# LINCT 18# 25# 101# LITBL 13# 22# 162# MOD. 65 100 102 174 266 267 NDT04 5# NDT18 47 NDT20 46 NDT41 175 NDT47 216 NDT48 215 NDT49 177 NDT50 231 NDT51 193 NDT52 207 NDT55 200 NDT56 223 NDT57 103 249 256 NOTBT 18# 25# 144# OBJ2 18# 33# 160# 161 OBJCD 14# 22# 25# 33# OCBND 18# 33# 239# OCBPT 18# 30# 73# 239 OCBST 18# 30# 72# OPER 14# 22# OPTNS 18# 25# 65 100 102 266 266# 267 267# PGMCD 18# 30# 248# 255# 266 267 PGMCT 18# 25# 60 113# 114 115 116 117 118 124 160 PGMND 18# 25# 60# 62 113 PRNTR 18# 25# 104 250 257 PSSWT 18# 25# 46 92# 118 133 134# 135# 136# 137 231 PTRS 14# 22# 25# 30# 33# RELOC 18# 33# 162 RMAX 13# 22# RMIN 13# 22# RRBND 18# 25# 61# 63 72 73 RRBPT 18# 25# 61 RRBST 18# 25# 63 RUNCT 18# 25# 63# STPGM 18# 25# 113 124 STYPE 18# 25# 118 134 135 136 144 151 231 SUBSC 14# 22# SYM 14# 22# 25# SYMPT 18# 161# 162 174# 175 SYMTB 14# 22# 175 175# TITLE 14# 22# TMAP 14# 22# 25# 30# 118# 186# TOKEN 14# 22# 25# 114# 173 174 TYPCT 14# 22# 246 253 VNUM 18# 25# 176 XREF 14# 22# XRFND 18# 30# 62# 1000P 151 207# 100P 113 233# 1100P 104 105# 1200P 102 113# 1300P 246 253# 1400P 250 251# 1500P 253 266# 1600P 257 258# 200P 163 178 187 216# 210P 151 160# 300P 151 176 194 215# 400P 151 172# 500P 151 185# 600P 151 193# 800P 133 137 151 172 173 201 223# 900P 151 200# NDT04 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00014750 00002 C PROGRAM AUTHOR - DANIEL A. POYDENCE 00014760 00003 C 00014770 00004 C 00014780 00005 SUBROUTINE NDT05 00014790 00006 C 00014800 00007 C 00014810 00008 C NDT05 INITIALIZES THE DATA AREAS REQUIRED BY THE LEXICAL 00014820 00009 C AND SYNTAX PHASES DURING SOURCE CARD INPUT. 00014830 00010 C 00014840 00011 REAL*8 RMIN,RMAX,LITBL(8192) 00014850 00012 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00014860 00013 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00014870 00014 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00014880 00015 3SYMTB(5,4096) 00014890 00016 INTEGER EQNCD,ERRPT,CRSMT,PGMCT,STPGM,REFPT,RFCPT, 00014900 00017 1RFDEF,PNT,START,OUTER,STOP,COL,LOOP,CARD(80,2),BLANK, 00014910 00018 2TYPE(2),STYPE,CBIT,PSSWT,CDSTC,FIND,CDATA(144),LENM1(19), 00014920 00019 3PARSE(19),CHAR(53),TOKPT,EQPOS,DISK,OPTNS 00014930 00020 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00014940 00021 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00014950 00022 2SYMTB,LITBL 00014960 00023 EQUIVALENCE (EQNCD,ERROR(1)),(ERRPT,ERROR(2)),(CRSMT,TMAP(1)), 00014970 00024 1(PGMCT,PTRS(22)),(STPGM,PTRS(21)),(REFPT, 00014980 00025 2XREF(1)),(RFCPT,XREF(2)),(RFDEF,XREF(3)),(CARD(1,1),CARD1(1)), 00014990 00026 3(BLANK,CRSET(1)),(TYPE(1),STYPE,TOKEN(1)),(CBIT,TOKEN(2)), 00015000 00027 4(PSSWT,PTRS(10)),(CDSTC,CDATA(143)),(CDATA(1),OBJCD(1)), 00015010 00028 5(TOKPT,TOKEN(3)),(EQPOS,TMAP(3)),(DISK,PTRS(3)),(OPTNS,PTRS(7)) 00015020 00029 DATA LENM1 /0,0,3,0,0,0,0,0,0,0,3,4,3,4,4,3,4,2,4/ 00015030 00030 DATA PARSE /0,0,0,0,0,0,0,0,2,1,2,0,0,2,0,2,0,1,1/ 00015040 00031 DATA CHAR /'T','C','P','A','R','M','N','L','A','R','S','X', 00015050 00032 1'*','N','O','T','E','P','R','I','N','T','P','L','O','T','R', 00015060 00033 2'E','R','U','N','M','A','C','R','O','M','E','N','D','E','X', 00015070 00034 3'P','N','D','D','E','F','T','I','T','L','E'/ 00015080 00035 C 00015090 00036 C 00015100 00037 C INITIALIZE THE ERROR INFORMATION ARRAY. 00015110 00038 C 00015120 00039 C 00015130 00040 EQNCD=0 00015140 00041 ERRPT=2 00015150 00042 C 00015160 00043 C 00015170 00044 C INITIALIZE THE TMAP AND TOKEN INFORMATION ARRAYS. 00015180 00045 C 00015190 00046 C 00015200 00047 CRSMT=(PGMCT-STPGM+1)/9+1 00015210 00048 TOKPT=3 00015220 00049 EQPOS=0 00015230 00050 C 00015240 00051 C 00015250 00052 C INITIALIZE THE XREF INFORMATION ARRAY. 00015260 00053 C 00015270 00054 C 00015280 00055 REFPT=3 00015290 00056 RFCPT=0 00015300 NDT05 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 RFDEF=CRSMT 00015310 00058 IF(MOD(OPTNS/128,2).EQ.1) WRITE(DISK'PGMCT+8) XREF 00015320 00059 C 00015330 00060 C 00015340 00061 C ENTER THE NUMERICAL VALUE ASSOCIATED WITH EACH CARD INTO 00015350 00062 C THE STYPE AND CBIT FIELDS OF THE TOKEN ARRAY. 'TYPE' IS 00015360 00063 C EQUIVALENCED ACROSS THESE LOCATIONS. 00015370 00064 C 00015380 00065 C THE FOLLOWING VALUES ARE ASSIGNED BASED ON CARD TYPE: 00015390 00066 C 00015400 00067 C CARD TYPE VALUE 00015410 00068 C 00015420 00069 C T 1 00015430 00070 C C 2 00015440 00071 C PARM 3 00015450 00072 C N 4 00015460 00073 C L 5 00015470 00074 C A 6 00015480 00075 C R 7 00015490 00076 C S 8 00015500 00077 C X 9 00015510 00078 C * 10 00015520 00079 C NOTE 11 00015530 00080 C PRINT 12 00015540 00081 C PLOT 13 00015550 00082 C RERUN 14 00015560 00083 C MACRO 15 00015570 00084 C MEND 16 00015580 00085 C EXPND 17 00015590 00086 C DEF 18 00015600 00087 C TITLE 19 00015610 00088 C 00015620 00089 C UNRECOGNIZED 20 00015630 00090 C 00015640 00091 C 00015650 00092 DO 400 PNT=1,2 00015660 00093 C 00015670 00094 C 00015680 00095 C THE OUTER LOOP CONTROLLED BY THE INDEX VARIABLE 'OUTER' 00015690 00096 C CAUSES A COMPARISON CHARACTER BY CHARACTER AGAINST THE 00015700 00097 C ARRAY 'CHAR' WITH THE CARD REFERENCED BY 'PNT'. EACH 00015710 00098 C CHARACTER SEQUENCE IS CHECKED UNTIL ONE COMPARES. 00015720 00099 C 00015730 00100 C 00015740 00101 100 START=1 00015750 00102 DO 300 OUTER=1,19 00015760 00103 C 00015770 00104 C 00015780 00105 C COMPUTE 'STOP' FROM THE START OF THE STRING AND THE ARRAY 00015790 00106 C 'LENM1' WHICH CONTAINS THE LENGTH OF THE STRING MINUS ONE. 00015800 00107 C 00015810 00108 C 00015820 00109 STOP=START+LENM1(OUTER) 00015830 00110 C 00015840 00111 C THIS LOOP PERFORMS THE CHARACTER COMPARISON. 00015850 00112 C IF ANY CHARACTER IN THE COMPARITOR SEQUENCE DOES 00015860 NDT05 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 C NOT COMPARE, TRY THE NEXT CHARACTER SEQUENCE. 00015870 00114 C 00015880 00115 C 00015890 00116 COL=1 00015900 00117 DO 200 LOOP=START,STOP 00015910 00118 IF(CARD(COL,PNT).NE.CHAR(LOOP)) GO TO 300 00015920 00119 200 COL=COL+1 00015930 00120 C 00015940 00121 C 00015950 00122 C ALL CHARACTERS IN THE SEQUENCE WERE EQUAL TO THE 00015960 00123 C CHARACTERS ON THE INDICATED CARD. CHECK THE NEXT 00015970 00124 C POSITION FOR A BLANK SPACE. 00015980 00125 C 00015990 00126 C 00016000 00127 IF(CARD(COL,PNT).NE.BLANK) GO TO 300 00016010 00128 C 00016020 00129 C 00016030 00130 C THE CARD TYPE KEY IS VALID. SET THE APPROPRIATE TYPE VALUE. 00016040 00131 C 00016050 00132 C 00016060 00133 TYPE(PNT)=OUTER 00016070 00134 GO TO 400 00016080 00135 C 00016090 00136 C 00016100 00137 C BUMP 'START' TO POINT TO THE NEXT CHARACTER STRING. 00016110 00138 C 00016120 00139 C 00016130 00140 300 START=STOP+1 00016140 00141 C 00016150 00142 C 00016160 00143 C THE CARD TYPE KEY FOR THE INDICATED CARD IS UNRECOGNIZED. 00016170 00144 C 00016180 00145 C 00016190 00146 TYPE(PNT)=20 00016200 00147 400 CONTINUE 00016210 00148 C 00016220 00149 C 00016230 00150 C UPDATE THE TYPCT ARRAY WHICH COUNTS THE OCCURRENCE OF EACH 00016240 00151 C CARD TYPE. IF CARD2 IS A CONTINUATION OF CARD1 SET CBIT 00016250 00152 C TO 1. OTHERWISE, SET CBIT TO 0. 00016260 00153 C 00016270 00154 C 00016280 00155 TYPCT(STYPE)=TYPCT(STYPE)+1 00016290 00156 IF(CBIT.NE.9) CBIT=0 00016300 00157 IF(CBIT.EQ.0) GO TO 500 00016310 00158 CBIT=1 00016320 00159 TYPCT(9)=TYPCT(9)+1 00016330 00160 C 00016340 00161 C 00016350 00162 C IF MACRO MODE IS IN EFFECT OR THE CARD REQUIRES NO PARSING 00016360 00163 C IN ANY MODE THEN SKIP THE PARSE STEP. THE ARRAY 'PARSE' 00016370 00164 C INDICATES THE APPROPRIATE ACTION WITH THE FOLLOWING VALUES: 00016380 00165 C 00016390 00166 C 0 - PARSE THE CARD AND THE OPTIONAL CONTINUATION 00016400 00167 C 1 - PARSE THE CARD AND DISALLOW A CONTINUATION 00016410 00168 C 2 - DO NOT PARSE THE CARD AND DISALLOW A CONTINUATION 00016420 NDT05 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 00169 C 00016430 00170 C 00016440 00171 500 IF(PSSWT.EQ.4) GO TO 9000 00016450 00172 C 00016460 00173 C 00016470 00174 C CHECK FOR AN UNRECOGNIZED CARD TYPE OR A CONTINUATION AS 00016480 00175 C THE FIRST CARD. 00016490 00176 C 00016500 00177 C 00016510 00178 IF(STYPE.EQ.20) GO TO 600 00016520 00179 IF(STYPE.EQ.9) GO TO 700 00016530 00180 IF(PARSE(STYPE).EQ.2) GO TO 1400 00016540 00181 C 00016550 00182 C 00016560 00183 C CARD PARSING IS REQUIRED. INITIALIZE THE CONTINUATION 00016570 00184 C START OF DATA POINTER TO POINT TO THE END OF THE BUFFER. 00016580 00185 C 'PNT' WILL POINT TO THE CARD BEING PARSED, AND 'COL' IS 00016590 00186 C THE NEXT AVAILABLE POSITION IN CDATA FOR CARD CHARACTERS. 00016600 00187 C 00016610 00188 C 00016620 00189 CDSTC=142 00016630 00190 PNT=0 00016640 00191 COL=1 00016650 00192 C 00016660 00193 C 00016670 00194 C FIND THE STARTING LOCATION OF THE CARD DATA FIELD. 00016680 00195 C 00016690 00196 C 00016700 00197 800 PNT=PNT+1 00016710 00198 DO 900 FIND=1,72 00016720 00199 IF(CARD(FIND,PNT).EQ.BLANK) GO TO 850 00016730 00200 900 CONTINUE 00016740 00201 C 00016750 00202 C 00016760 00203 C THE END OF THE KEY FIELD HAS BEEN FOUND. THE NEXT NON-BLANK 00016770 00204 C CHARACTER IS THE START OF THE DATA FIELD. 00016780 00205 C 00016790 00206 C 00016800 00207 850 START=FIND+1 00016810 00208 DO 950 FIND=START,72 00016820 00209 IF(CARD(FIND,PNT).NE.BLANK) GO TO 1000 00016830 00210 950 CONTINUE 00016840 00211 C 00016850 00212 C 00016860 00213 C THE CARD DATA FIELD WAS NOT FOUND. THE CARD IS BLANK AND 00016870 00214 C CANNOT BE PROCESSED FURTHER. 00016880 00215 C 00016890 00216 C 00016900 00217 CALL NDT14 (PNT-1,110,3) 00016910 00218 GO TO 1300 00016920 00219 C 00016930 00220 C 00016940 00221 C IF THE CURRENT CARD IS THE CONTINUATION THEN SET THE 00016950 00222 C CONTINUATION STARTING ADDRESS POINTER. THE STARTING LOCATION 00016960 00223 C FOUND PREVIOUSLY IS SAVED FOR THE APPROPRIATE CARD. 00016970 00224 C 00016980 NDT05 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-4 00225 C 00016990 00226 1000 IF(PNT.EQ.2) CDSTC=COL 00017000 00227 CDATA(2*PNT+140)=FIND 00017010 00228 C 00017020 00229 C 00017030 00230 C COPY THE CARD DATA INTO CDATA. STOP AFTER COPYING THE 00017040 00231 C THE BLANK DELIMITER. 00017050 00232 C 00017060 00233 C 00017070 00234 DO 1100 LOOP=FIND,72 00017080 00235 CDATA(COL)=CARD(LOOP,PNT) 00017090 00236 IF(CDATA(COL).EQ.BLANK) GO TO 1300 00017100 00237 1100 COL=COL+1 00017110 00238 CDATA(COL)=BLANK 00017120 00239 C 00017130 00240 C 00017140 00241 C IF THIS CARD WAS THE CONTINUATION THEN THE JOB IS FINISHED. 00017150 00242 C CHECK PARSE TO VERIFY THE VALIDITY OF A CONTINUATION. 00017160 00243 C IF A CONTINUATION IS ALLOWED AND ONE EXISTS THEN PARSE IT. 00017170 00244 C 00017180 00245 C 00017190 00246 1300 IF(PNT.EQ.2) GO TO 9000 00017200 00247 IF(PARSE(STYPE).NE.0) GO TO 1400 00017210 00248 IF(CBIT.EQ.1) GO TO 800 00017220 00249 GO TO 9000 00017230 00250 C 00017240 00251 C 00017250 00252 C AN UNRECOGNIZED CARD TYPE WAS ENCOUNTERED. 00017260 00253 C 00017270 00254 C 00017280 00255 600 CALL NDT14 (0,100,3) 00017290 00256 GO TO 1400 00017300 00257 C 00017310 00258 C 00017320 00259 C THE FIRST CARD WAS A CONTINUATION. THIS CAN HAPPEN TWO 00017330 00260 C DIFFERENT WAYS: THE FIRST CARD OF THE USER'S SOURCE DECK 00017340 00261 C WAS A CONTINUATION, OR TOO MANY CONTINUATIONS FOLLOWED A CARD. 00017350 00262 C 00017360 00263 C 00017370 00264 700 IF(PGMCT.LT.STPGM) GO TO 1500 00017380 00265 CALL NDT14 (0,102,3) 00017390 00266 IF(CBIT.EQ.1) CALL NDT14 (1,102,3) 00017400 00267 GO TO 9000 00017410 00268 1500 CALL NDT14 (0,106,2) 00017420 00269 C 00017430 00270 C 00017440 00271 C THE FIRST CARD MAY NOT BE CONTINUED. 00017450 00272 C 00017460 00273 C 00017470 00274 1400 IF(CBIT.EQ.1) CALL NDT14 (1,101,2) 00017480 00275 9000 RETURN 00017490 00276 END 00017510 NDT05 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-5 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 EQNCD +1102 ERRPT +1103 CRSMT +1722 PGMCT +31 STPGM +30 REFPT +1602 RFCPT +1603 RFDEF +1604 CARD +642 BLANK +251 TYPE +522 STYPE +522 CBIT +523 PSSWT +15 CDATA +1222 TOKPT +524 EQPOS +1724 DISK +6 OPTNS +12 CDSTC +1440 SUBPROGRAMS CALLED MOD. NDT14 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] LENM1 1 STOP 24 LOOP 25 CHAR 26 .S0005 113 .S0004 114 .S0003 115 .S0002 116 .S0001 117 .S0000 120 PARSE 121 OUTER 144 PNT 145 COL 146 .O0003 147 .O0000 150 START 151 FIND 152 TEMPORARIES .A0016 153 .Q0000 154 BLANK 16# 23# 127 199 209 236 238 CARD 16# 23# 118 127 199 209 235 CARD1 12# 20# 23# CARD2 12# 20# CBIT 16# 23# 156 156# 157 158# 248 266 274 CDATA 16# 23# 227# 235# 236 238# CDSTC 16# 23# 189# 226# CHAR 16# 31# 118 COL 16# 116# 118 119 119# 127 191# 226 235 236 237 237# 238 CRSET 12# 20# 23# CRSMT 16# 23# 47# 57 DEF 12# 20# DISK 16# 23# 58 EQCHN 12# 20# EQNCD 16# 23# 40# EQPOS 16# 23# 49# ERROR 12# 20# 23# ERRPT 16# 23# 41# FCTN 12# 20# FIND 16# 198# 199 207 208# 209 227 234 LENM1 16# 29# 109 LITBL 11# 20# LOOP 16# 117# 118 234# 235 MOD. 58 NDT05 5# NDT14 217 255 265 266 268 274 OBJCD 12# 20# 23# OPER 12# 20# OPTNS 16# 23# 58 OUTER 16# 102# 109 133 PARSE 16# 30# 180 247 PGMCT 16# 23# 47 58 264 PNT 16# 92# 118 127 133 146 190# 197 197# 199 209 217 226 227 235 246 PSSWT 16# 23# 171 PTRS 12# 20# 23# REFPT 16# 23# 55# RFCPT 16# 23# 56# RFDEF 16# 23# 57# RMAX 11# 20# RMIN 11# 20# START 16# 101# 109 117 140# 207# 208 STOP 16# 109# 117 140 STPGM 16# 23# 47 264 STYPE 16# 23# 155 178 179 180 247 SUBSC 12# 20# SYM 12# 20# SYMTB 12# 20# TITLE 12# 20# TMAP 12# 20# 23# TOKEN 12# 20# 23# TOKPT 16# 23# 48# TYPCT 12# 20# 155# 155 159# 159 TYPE 16# 23# 133# 146# XREF 12# 20# 23# 58 1000P 209 226# 100P 101# 1100P 234 237# 1300P 218 236 246# 1400P 180 247 256 274# 1500P 264 268# 200P 117 119# 300P 102 118 127 140# 400P 92 134 147# 500P 157 171# 600P 178 255# 700P 179 264# 800P 197# 248 850P 199 207# 9000P 171 246 249 267 275# 900P 198 200# 950P 208 210# NDT05 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00017520 00002 C * 00017530 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00017540 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY * 00017550 00005 C * 00017560 00006 C***************************************************************** 00017570 00007 SUBROUTINE NDT06 00017580 00008 C***************************************************************** 00017590 00009 C * 00017600 00010 C TITLE CARD PROCESSOR * 00017610 00011 C * 00017620 00012 C * 00017630 00013 C THIS PROGRAM SETS UP THE TITLE ARRAY WITH ANY INFORMATION * 00017640 00014 C THAT APPEARS ON A TITLE CARD. * 00017650 00015 C * 00017660 00016 C***************************************************************** 00017670 00017 REAL*8 RMIN,RMAX,LITBL(8192) 00017680 00018 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00017690 00019 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00017700 00020 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00017710 00021 3SYMTB(5,4096) 00017720 00022 INTEGER PAGE(4),BLANK,TPNT,STYPE,EQNCD,XCHAR,LSPOS 00017730 00023 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00017740 00024 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00017750 00025 2SYMTB,LITBL 00017760 00026 EQUIVALENCE (BLANK,CRSET(1)),(TPNT,PTRS(30)), 00017770 00027 1(STYPE,TOKEN(1)),(EQNCD,ERROR(1)) 00017780 00028 DATA PAGE /'P','A','G','E'/ 00017790 00029 C***************************************************************** 00017800 00030 C * 00017810 00031 C INITIALLY, SET UP THE TITLE ARRAY WITH ALL BLANKS, AND * 00017820 00032 C "PAGE" AT THE FAR LEFT. SET TPNT TO 10. * 00017830 00033 C * 00017840 00034 C TPNT POINTS TO THE LAST POSITION USED IN TITLE. THE PAGE * 00017850 00035 C DATA TAKES UP THE FIRST 9, SO THE LAST POSITION USED IS * 00017860 00036 C THE BLANK IN POSITION 10. * 00017870 00037 C * 00017880 00038 C***************************************************************** 00017890 00039 DO 100 XCHAR = 1, 4 00017900 00040 100 TITLE(XCHAR) = PAGE(XCHAR) 00017910 00041 DO 200 XCHAR = 5, 120 00017920 00042 200 TITLE(XCHAR) = BLANK 00017930 00043 TPNT = 10 00017940 00044 C***************************************************************** 00017950 00045 C * 00017960 00046 C IF THIS CARD IS NOT A TITLE CARD, OR THE TITLE CARD WAS * 00017970 00047 C BLANK, THE TITLE WILL REMAIN BLANK, SO RETURN. * 00017980 00048 C * 00017990 00049 C***************************************************************** 00018000 00050 IF (STYPE .NE. 19 .OR. EQNCD .EQ. 3) GO TO 600 00018010 00051 C***************************************************************** 00018020 00052 C * 00018030 00053 C FIND THE END OF THE TITLE. BECAUSE THE TITLE CARD IS NOT * 00018040 00054 C BLANK, THIS SEARCH WILL BE SUCCESSFUL. * 00018050 00055 C * 00018060 00056 C***************************************************************** 00018070 NDT06 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 LSPOS = 73 00018080 00058 300 LSPOS = LSPOS - 1 00018090 00059 IF (CARD1(LSPOS) .NE. BLANK) GO TO 400 00018100 00060 GO TO 300 00018110 00061 C***************************************************************** 00018120 00062 C * 00018130 00063 C PUT THE TITLE INTO THE TITLE ARRAY, AND UPDATE TPNT. * 00018140 00064 C * 00018150 00065 C***************************************************************** 00018160 00066 400 DO 500 XCHAR = 7, LSPOS 00018170 00067 500 TITLE(XCHAR+4) = CARD1(XCHAR) 00018180 00068 TPNT = LSPOS + 4 00018190 00069 C***************************************************************** 00018200 00070 C * 00018210 00071 C RETURN SECTION * 00018220 00072 C * 00018230 00073 C***************************************************************** 00018240 00074 600 RETURN 00018250 00075 END 00018270 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 BLANK +251 TPNT +41 STYPE +522 EQNCD +1102 SUBPROGRAMS CALLED SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] XCHAR 1 LSPOS 2 .S0002 3 .S0001 4 .S0000 5 PAGE 6 TEMPORARIES .A0016 12 BLANK 22# 26# 42 59 CARD1 18# 23# 59 67 CARD2 18# 23# CRSET 18# 23# 26# DEF 18# 23# EQCHN 18# 23# EQNCD 22# 26# 50 ERROR 18# 23# 26# FCTN 18# 23# LITBL 17# 23# LSPOS 22# 57# 58 58# 59 66 68 NDT06 7# OBJCD 18# 23# OPER 18# 23# PAGE 22# 28# 40 PTRS 18# 23# 26# RMAX 17# 23# RMIN 17# 23# STYPE 22# 26# 50 SUBSC 18# 23# SYM 18# 23# SYMTB 18# 23# TITLE 18# 23# 40# 42# 67# TMAP 18# 23# TOKEN 18# 23# 26# TPNT 22# 26# 43# 68# TYPCT 18# 23# XCHAR 22# 39# 40 41# 42 66# 67 XREF 18# 23# 100P 39 40# 200P 41 42# 300P 58# 60 400P 59 66# 500P 66 67# 600P 50 74# NDT06 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00018280 00002 C * 00018290 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00018300 00004 C PROGRAM AUTHOR - THOMAS L EVERMAN JR * 00018310 00005 C * 00018320 00006 C THIS PROGRAM PROCESSES CONTROL CARDS. * 00018330 00007 C * 00018340 00008 C***************************************************************** 00018350 00009 SUBROUTINE NDT07 00018360 00010 REAL*8 RMIN,RMAX,LITBL(8192) 00018370 00011 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00018380 00012 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00018390 00013 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00018400 00014 3SYMTB(5,4096) 00018410 00015 INTEGER OPTNS,OPTSP,INTYP,CDATA(144),DFLT(12),OPCHR(81),START 00018420 00016 INTEGER STOP,CNT,NO,LOOK,OPT,N,O,LOOP,LOOP2,CDPOS,CHCNT 00018430 00017 INTEGER BLANK,USE,MDVAL 00018440 00018 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00018450 00019 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00018460 00020 2SYMTB,LITBL 00018470 00021 EQUIVALENCE (OPTNS,PTRS(7)),(OPTSP,PTRS(34)),(INTYP,PTRS(8)), 00018480 00022 1(CDATA(1),OBJCD(1)),(N,CRSET(17)),(O,CRSET(18)), 00018490 00023 2(BLANK,CRSET(1)) 00018500 00024 C***************************************************************** 00018510 00025 C * 00018520 00026 C DFLT INDICATES THE DEFAULT ACTION FOR A CONTROL OPTION. * 00018530 00027 C 0 = INVOKE THE OPTION IS THE DEFAULT. * 00018540 00028 C 1 = DO NOT INVOKE THE OPTION IS THE DEFAULT. * 00018550 00029 C THE FOLLOWING IS A LIST OF THE OPTIONS AVAILABLE IN NDTRAN.* 00018560 00030 C THE LIST IS ORDERED BY LEAST SIGNIFICANT BIT IN OPTNS AND * 00018570 00031 C BY LOWEST SUBSCRIPT IN DFLT. THE LIST ALSO INDICATES * 00018580 00032 C THE DEFAULT FOR EACH OPTION. * 00018590 00033 C 1) NOCHECK / CHECK * 00018600 00034 C 2) NOSYSTEM / SYSTEM * 00018610 00035 C 3) NODOCUMENT / DOCUMENT * 00018620 00036 C 4) WIDE / NARROW * 00018630 00037 C 5) STATS / NOSTATS * 00018640 00038 C 6) GO / NOGO * 00018650 00039 C 7) NOSYMBOL / SYMBOL * 00018660 00040 C 8) NOXREF / XREF * 00018670 00041 C 9) WARN / NOWARN * 00018680 00042 C 10) NOOBJECT / OBJECT * 00018690 00043 C 11) SOURCE / NOSOURCE * 00018700 00044 C 12) NOTIME / TIME * 00018710 00045 C OPTNS IS USED TO SET BITS FOR EACH OPTION SPECIFIED WHICH * 00018720 00046 C IS NOT A DEFAULT AND IS REFERENCED BY THE ACTION ROUTINES * 00018730 00047 C FOR EACH OPTION. OPTSP SIMPLY INDICATES WHICH OPTIONS * 00018740 00048 C HAVE ALREADY BEEN SPECIFIED IN ORDER TO CHECK FOR * 00018750 00049 C DUPLICATION. INTYP SPECIFIES THE INTEGRATION METHOD. * 00018760 00050 C THE OPCHR ARRAY CONTAINS A SEQUENTIAL LIST OF THE CHARACTER* 00018770 00051 C WHICH MAKE UP EACH OPTION. * 00018780 00052 C * 00018790 00053 C***************************************************************** 00018800 00054 DATA DFLT /1,1,1,0,0,0,1,1,0,1,0,1/ 00018810 00055 DATA OPCHR /'C','H','E','C','K','S','Y','S','T','E','M', 00018820 00056 1'D','O','C','U','M','E','N','T','W','I','D','E', 00018830 NDT07 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 2'S','T','A','T','S','G','O','S','Y','M','B','O','L', 00018840 00058 3'X','R','E','F','W','A','R','N','O','B','J','E','C','T', 00018850 00059 4'S','O','U','R','C','E','T','I','M','E','N','A','R','R','O','W', 00018860 00060 5'E','U','L','E','R','R','K','I','N','T','A','B','I','N','T'/ 00018870 00061 C***************************************************************** 00018880 00062 C * 00018890 00063 C START IS THE POSITION OF THE INTITIAL CHARACTER IN THE OPCH* 00018900 00064 C ARRAY TO BE COMPARED TO THE PRESENT OPTION. STOP IS THE * 00018910 00065 C POSITION OF THE FINAL CHARACTER. CNT IS THE NUMBER OF * 00018920 00066 C CHARACTERS CONTAINED IN THE OPTION TO COMPARE. NO IS * 00018930 00067 C USED TO INDICATE WHETHER 'NO' WAS SPECIFIED BEFORE THE * 00018940 00068 C OPTION. LOOK IS THE POSITION IN CDATA AT WHICH TO CHECK * 00018950 00069 C FOR THE OPTION TYPE. * 00018960 00070 C * 00018970 00071 C***************************************************************** 00018980 00072 START = 1 00018990 00073 STOP = 0 00019000 00074 CNT = 0 00019010 00075 NO = 0 00019020 00076 LOOK = 1 00019030 00077 C***************************************************************** 00019040 00078 C * 00019050 00079 C CHECK FOR 'NO' PRECEDING THE OPTION. IF FOUND, SET * 00019060 00080 C NO TO 1 AND SET LOOK TO SKIP 'NO' DURING COMPARISON. * 00019070 00081 C * 00019080 00082 C***************************************************************** 00019090 00083 IF (CDATA(1) .EQ. N .AND. CDATA(2) .EQ. O) NO = 1 00019100 00084 IF (NO .EQ. 1) LOOK = 3 00019110 00085 C***************************************************************** 00019120 00086 C * 00019130 00087 C BEGIN CHECKING FOR OPTIONS. COMPARE CHARACTERS IN CDATA * 00019140 00088 C TO ALL POSSIBLE OPTIONS. START IS INCREMENTED BY THE * 00019150 00089 C LENGTH OF THE PREVIOUS COMPARISON STRING TO GET THE * 00019160 00090 C START OF THE NEW STRING. THE LENGTH OF THE STRING IS * 00019170 00091 C DETERMINED AND ADDED TO THE STOP VALUE FOR THE * 00019180 00092 C PREVIOUS STRING. * 00019190 00093 C * 00019200 00094 C***************************************************************** 00019210 00095 DO 650 LOOP = 1, 16 00019220 00096 START = START + CNT 00019230 00097 CNT = 2 00019240 00098 GO TO (300,200,100,400,300,500,200,400,400,200,200,400, 00019250 00099 1200,300,300,300), LOOP 00019260 00100 100 CNT = CNT + 2 00019270 00101 200 CNT = CNT + 1 00019280 00102 300 CNT = CNT + 1 00019290 00103 400 CNT = CNT + 2 00019300 00104 500 STOP = STOP + CNT 00019310 00105 CHCNT = 0 00019320 00106 C***************************************************************** 00019330 00107 C * 00019340 00108 C COMPARE THE CHARACTER STRINGS. CHECK FOR BLANK AFTER 3RD * 00019350 00109 C CHARACTER IN ORDER TO FIND ABBREVIATED NAMES. IF A VALID * 00019360 00110 C COMPARISON IS MADE, MAKE SURE THE NEXT POSITION IN CDATA * 00019370 00111 C CONTAINS A BLANK. IF NO VALID COMPARISONS OCCUR, GIVE * 00019380 00112 C INVALID OPTION ERROR (204). * 00019390 NDT07 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 C * 00019400 00114 C***************************************************************** 00019410 00115 DO 600 LOOP2 = START, STOP 00019420 00116 CDPOS = LOOK + LOOP2 - START 00019430 00117 CHCNT = CHCNT + 1 00019440 00118 IF (CDATA(CDPOS) .NE. OPCHR(LOOP2)) GO TO 650 00019450 00119 IF (CHCNT .EQ. 3 .AND. CDATA(CDPOS + 1) .EQ. BLANK) GO TO 700 00019460 00120 600 CONTINUE 00019470 00121 IF (CDATA(CDPOS + 1) .EQ. BLANK) GO TO 700 00019480 00122 650 CONTINUE 00019490 00123 CALL NDT13 (LOOK, 204, 2) 00019500 00124 GO TO 1200 00019510 00125 C***************************************************************** 00019520 00126 C * 00019530 00127 C OPTION HAS BEEN RECOGNIZED AS BEING VALID. * 00019540 00128 C CHECK WID, NAR, EUL, RKI, ABI FOR PRECEDING 'NO' (206). * 00019550 00129 C SET NAR VALUES TO TREAT IT AS A 'NOWID'. * 00019560 00130 C * 00019570 00131 C***************************************************************** 00019580 00132 700 OPT = LOOP - 1 00019590 00133 IF (OPT .LT. 12 .AND. OPT .NE. 3) GO TO 800 00019600 00134 IF (NO .EQ. 1) CALL NDT13 (LOOK, 206, 2) 00019610 00135 IF (OPT .GE. 13) GO TO 900 00019620 00136 IF (OPT .EQ. 12) NO = 1 00019630 00137 OPT = 3 00019640 00138 C***************************************************************** 00019650 00139 C * 00019660 00140 C CHECK FOR PREVIOUS SPECIFICATION OF THE OPTION, THEN MAKE * 00019670 00141 C THE APPROPRIATE BIT SETTING IN OPTSP AND OPTNS. * 00019680 00142 C * 00019690 00143 C***************************************************************** 00019700 00144 800 MDVAL = 2 ** OPT 00019710 00145 USE = MOD (OPTSP / MDVAL, 2) 00019720 00146 IF (USE .NE. 0) GO TO 1100 00019730 00147 OPTSP = OPTSP + MDVAL 00019740 00148 IF (NO .EQ. DFLT(OPT + 1)) GO TO 1200 00019750 00149 OPTNS = OPTNS + MDVAL 00019760 00150 GO TO 1200 00019770 00151 C***************************************************************** 00019780 00152 C * 00019790 00153 C OPTION SPECIFIES AN INTEGRATION TYPE. CHECK FOR PREVIOUS * 00019800 00154 C SPECIFICATION, THEN SET INTYP BASED ON OPT. * 00019810 00155 C * 00019820 00156 C***************************************************************** 00019830 00157 900 IF (OPTSP .GE. 16384) GO TO 1100 00019840 00158 OPTSP = OPTSP + 16384 00019850 00159 INTYP = OPT - 12 00019860 00160 GO TO 1200 00019870 00161 1100 CALL NDT13 (LOOK, 205, 2) 00019880 00162 1200 RETURN 00019890 00163 END 00019910 EQUIVALENCED VARIABLES NDT07 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 OPTNS +12 OPTSP +45 INTYP +13 CDATA +1222 N +271 O +272 BLANK +251 SUBPROGRAMS CALLED MOD. NDT13 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] USE 1 STOP 2 LOOK 3 CDPOS 4 DFLT 5 CNT 21 LOOP 22 OPCHR 23 .S0001 144 .S0000 145 CHCNT 146 MDVAL 147 OPT 150 NO 151 LOOP2 152 .O0000 153 START 154 TEMPORARIES .A0016 155 BLANK 17# 21# 119 121 CARD1 11# 18# CARD2 11# 18# CDATA 15# 21# 83 118 119 121 CDPOS 16# 116# 118 119 121 CHCNT 16# 105# 117 117# 119 CNT 16# 74# 96 97# 100 100# 101 101# 102 102# 103 103# 104 CRSET 11# 18# 21# DEF 11# 18# DFLT 15# 54# 148 EQCHN 11# 18# ERROR 11# 18# FCTN 11# 18# INTYP 15# 21# 159# LITBL 10# 18# LOOK 16# 76# 84# 116 123 123# 134 134# 161 161# LOOP 16# 95# 98 132 LOOP2 16# 115# 116 118 MDVAL 17# 144# 145 147 149 MOD. 145 N 16# 21# 83 NDT07 9# NDT13 123 134 161 NO 16# 75# 83# 84 134 136# 148 O 16# 21# 83 OBJCD 11# 18# 21# OPCHR 15# 55# 118 OPER 11# 18# OPT 16# 132# 133 135 136 137# 144 148 159 OPTNS 15# 21# 149 149# OPTSP 15# 21# 145 147 147# 157 158 158# PTRS 11# 18# 21# RMAX 10# 18# RMIN 10# 18# START 15# 72# 96 96# 115 116 STOP 16# 73# 104 104# 115 SUBSC 11# 18# SYM 11# 18# SYMTB 11# 18# TITLE 11# 18# TMAP 11# 18# TOKEN 11# 18# TYPCT 11# 18# USE 17# 145# 146 XREF 11# 18# 100P 98 100# 1100P 146 157 161# 1200P 124 148 150 160 162# 200P 98 101# 300P 98 102# 400P 98 103# 500P 98 104# 600P 115 120# 650P 95 118 122# 700P 119 121 132# 800P 133 144# 900P 135 157# NDT07 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00019920 00002 C PROGRAM AUTHOR - GARY PELKEY 00019930 00003 C 00019940 00004 C 00019950 00005 SUBROUTINE NDT08 00019960 00006 REAL*8 RMIN,RMAX,LITBL(8192) 00019970 00007 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00019980 00008 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00019990 00009 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00020000 00010 3SYMTB(5,4096) 00020010 00011 INTEGER POS,EQOCC,PNT1,PNT2,CHAR,BLANK,TOKPT,I,NMBIT,EQPOS 00020020 00012 1,NMSET(11),RTC,CDATA(144),N,LASTI 00020030 00013 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00020040 00014 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00020050 00015 2SYMTB,LITBL 00020060 00016 EQUIVALENCE (BLANK,CRSET(1)),(TOKPT,TOKEN(3)), 00020070 00017 1(NMSET(1),CRSET(30)),(POS,OBJCD(145)),(EQOCC,OBJCD(146)), 00020080 00018 2(PNT1,OBJCD(147)),(PNT2,OBJCD(148)),(CHAR,OBJCD(149)), 00020090 00019 3(I,OBJCD(150)),(NMBIT,OBJCD(151)),(RTC,OBJCD(152)) 00020100 00020 4,(CDATA(1),OBJCD(1)),(EQPOS,TMAP(3)) 00020110 00021 C 00020120 00022 C 00020130 00023 C POS AND EQOCC ARE INITIALIZED HERE. POS IS THE POSITION 00020140 00024 C IN CDATA CURRENTLY UNDER SCRUTINY. EQOCC IS AN INDICATOR 00020150 00025 C TO THE VARIABLE CHECKER. IT IS SET TO 3 IF AN '=' HAS 00020160 00026 C BEEN ENCOUNTERED. 00020170 00027 C 00020180 00028 C 00020190 00029 POS=1 00020200 00030 EQOCC=0 00020210 00031 C 00020220 00032 C 00020230 00033 C STATEMENT LABEL 100 HERE IS THE ADDRESS AT WHICH THE SEARCH 00020240 00034 C FOR A NEW TOKEN BEGINS. PNT1 AND PNT2 ARE INDICATORS TO 00020250 00035 C THE VARIOUS PROCESSORS AS TO THE STARTING AND STOPPING POS 00020260 00036 C ITIONS OF STRINGS. A BLANK IN CDATA DELIMITS DATA. 00020270 00037 C CDATA(141) HAS ALREADY BEEN SET TO A BLANK TO INSURE THAT 00020280 00038 C THIS ROUTINE DOES NOT PROCESS FARTHER THAN 140. 00020290 00039 C 00020300 00040 C 00020310 00041 100 PNT1=POS 00020320 00042 CHAR=CDATA(POS) 00020330 00043 IF(CHAR.EQ.BLANK) GO TO 1000 00020340 00044 DO 150 I=2,9 00020350 00045 IF(CHAR.EQ.OPER(I)) GO TO 200 00020360 00046 150 CONTINUE 00020370 00047 GO TO 400 00020380 00048 C 00020390 00049 C 00020400 00050 C THIS SECTION ENTERS THE TOKEN FOR AN OPERATOR WITH 00020410 00051 C THE FORMULA: TOKEN=28672+OPNUM. '**' IS ONE TOKEN WITH AN 00020420 00052 C OPNUM OF 10. ')(' IS THREE TOKENS, THE '*' BEING IMPLIED. 00020430 00053 C 00020440 00054 C 00020450 00055 200 IF(I.NE.6) GO TO 250 00020460 00056 EQOCC=3 00020470 NDT08 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 IF(EQPOS.EQ.0) EQPOS=TOKPT+1 00020480 00058 C 00020490 00059 C 00020500 00060 C A SERIES OF TESTS ARE PERFORMED TO DETERMINE IF THE INCOMING 00020510 00061 C CHARACTER SHOULD BE CONSIDERED AS A UNARY OPERATOR. IF IT 00020520 00062 C PASSES THESE TESTS, THE OPERATOR IS CONSIDERED PART OF THE 00020530 00063 C NUMBER AND CONTROL IS PASSED TO THE NUMERIC PROCESSING PART 00020540 00064 C OF THIS ROUTINE. 00020550 00065 C 00020560 00066 C 00020570 00067 250 IF(I.NE.2.AND.I.NE.3) GO TO 290 00020580 00068 LASTI=MOD(TOKEN(TOKPT),4096) 00020590 00069 IF(LASTI.NE.6.AND.LASTI.NE.7.AND.LASTI.NE.9) GO TO 290 00020600 00070 DO 260 N=1,11 00020610 00071 IF(CDATA(POS+1).EQ.NMSET(N)) GO TO 270 00020620 00072 260 CONTINUE 00020630 00073 GO TO 290 00020640 00074 270 POS=POS+1 00020650 00075 NMBIT=2 00020660 00076 GO TO 500 00020670 00077 C 00020680 00078 C 00020690 00079 C THE OPERATOR IS NOT UNARY, PROCESSING CONTINUES. 00020700 00080 C 00020710 00081 C 00020720 00082 290 TOKPT=TOKPT+1 00020730 00083 IF(TOKPT.GT.80) CALL NDT12(2) 00020740 00084 IF(I.EQ.4.AND.CDATA(POS+1).EQ.OPER(4)) GO TO 300 00020750 00085 TOKEN(TOKPT)=28672+I 00020760 00086 POS=POS+1 00020770 00087 IF(I.NE.8.OR.CDATA(POS).NE.OPER(7)) GO TO 350 00020780 00088 TOKPT=TOKPT+1 00020790 00089 IF(TOKPT.GT.80) CALL NDT12(2) 00020800 00090 TOKEN(TOKPT)=28676 00020810 00091 GO TO 350 00020820 00092 300 TOKEN(TOKPT)=28682 00020830 00093 POS=POS+2 00020840 00094 350 CALL NDT23(PNT1,TMAP(TOKPT)) 00020850 00095 GO TO 100 00020860 00096 C 00020870 00097 C 00020880 00098 C THIS SECTION ASSUMES A VARIABLE IS BEING SCANNED IF THE 00020890 00099 C STARTING POSITION IS NOT A 'NUM' OR 'POINT'. IT FINDS 00020900 00100 C THE END OF THE STRING (DELIMITED BY AN 'OPER'), AND CALLS 00020910 00101 C THE APPROPRIATE ROUTINE. 00020920 00102 C 00020930 00103 C 00020940 00104 400 NMBIT=1 00020950 00105 DO 450 I=1,11 00020960 00106 IF(CHAR.EQ.NMSET(I)) NMBIT=2 00020970 00107 450 CONTINUE 00020980 00108 500 POS=POS+1 00020990 00109 CHAR=CDATA(POS) 00021000 00110 IF(CHAR.EQ.BLANK) GO TO 600 00021010 00111 DO 570 I=NMBIT,9 00021020 00112 PNT2=POS-1 00021030 NDT08 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 IF(CHAR.EQ.OPER(I).AND.(CDATA(PNT2).NE.CRSET(8).OR.(I.NE.2. 00021040 00114 1 AND.I.NE.3).OR.NMBIT.EQ.1)) GO TO 600 00021050 00115 570 CONTINUE 00021060 00116 GO TO 500 00021070 00117 600 PNT2=POS-1 00021080 00118 IF(NMBIT.EQ.1) GO TO 620 00021090 00119 CALL NDT22(PNT1,PNT2) 00021100 00120 GO TO 100 00021110 00121 620 CALL NDT24(PNT1,PNT2,RTC) 00021120 00122 C 00021130 00123 C 00021140 00124 C IF THE NEXT CHARACTER AFTER A VARIABLE-TYPE STRING IS AN 00021150 00125 C '(' NDT25 IS CALLED. IF NOT IT IS ASSUMED TO BE A VARIABLE. 00021160 00126 C 00021170 00127 C 00021180 00128 IF(CHAR.NE.OPER(7)) GO TO 800 00021190 00129 CALL NDT25 (PNT1,PNT2,RTC) 00021200 00130 GO TO 100 00021210 00131 800 IF(RTC.EQ.0) GO TO 900 00021220 00132 TOKPT=TOKPT+1 00021230 00133 IF(TOKPT.GT.80) CALL NDT12(2) 00021240 00134 TOKEN(TOKPT)=24576 00021250 00135 GO TO 950 00021260 00136 900 CALL NDT27 (PNT1,EQOCC) 00021270 00137 950 IF(CHAR.NE.OPER(1)) GO TO 100 00021280 00138 C 00021290 00139 C 00021300 00140 C IF A VARIABLE IS FOLLOWED BY A 'POINT' THE SUBSCRIPT CHECKER 00021310 00141 C IS CALLED TO UPDATE THE ALREADY EXITING TOKEN AND PRODUCE 00021320 00142 C ANY ASSOCIATED ERROR MESSAGES. 00021330 00143 C 00021340 00144 C 00021350 00145 POS=POS+1 00021360 00146 CALL NDT26 (POS) 00021370 00147 GO TO 100 00021380 00148 C 00021390 00149 C 00021400 00150 C THE TOKEN PROCESSING FOR THIS EQUATION HAS BEEN COMPLETED. 00021410 00151 C WHAT FOLLOWS IS A SIMPLE SCAN OVER THE TOKEN RECORD TO LOCATE 00021420 00152 C ERRORS SUCH AS A MISSING OR MISPLACED EQUALS SIGN OR MISSING 00021430 00153 C BEGINNING VARIABLE. 00021440 00154 C 00021450 00155 C 00021460 00156 1000 CALL NDT38 00021470 00157 RETURN 00021480 00158 END 00021500 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 NDT08 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 BLANK +251 TOKPT +524 NMSET +306 POS +1442 EQOCC +1443 PNT1 +1444 PNT2 +1445 CHAR +1446 I +1447 NMBIT +1450 RTC +1451 CDATA +1222 EQPOS +1724 SUBPROGRAMS CALLED MOD. NDT22 NDT27 NDT12 NDT26 NDT25 NDT24 NDT38 NDT23 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] N 1 LASTI 2 .S0003 3 .S0002 4 .S0001 5 .S0000 6 TEMPORARIES .A0016 7 .Q0000 10 BLANK 11# 16# 43 110 CARD1 7# 13# CARD2 7# 13# CDATA 11# 16# 42 71 84 87 109 113 CHAR 11# 16# 42# 43 45 106 109# 110 113 128 137 CRSET 7# 13# 16# 113 DEF 7# 13# EQCHN 7# 13# EQOCC 11# 16# 30# 56# 136 136# EQPOS 11# 16# 57 57# ERROR 7# 13# FCTN 7# 13# I 11# 16# 44# 45 55 67 84 85 87 105# 106 111# 113 LASTI 11# 68# 69 LITBL 6# 13# MOD. 68 N 11# 70# 71 NDT08 5# NDT12 83 89 133 NDT22 119 NDT23 94 NDT24 121 NDT25 129 NDT26 146 NDT27 136 NDT38 156 NMBIT 11# 16# 75# 104# 106# 111 113 118 NMSET 11# 16# 71 106 OBJCD 7# 13# 16# OPER 7# 13# 45 84 87 113 128 137 PNT1 11# 16# 41# 94 94# 119 119# 121 121# 129 129# 136 136# PNT2 11# 16# 112# 113 117# 119 119# 121 121# 129 129# POS 11# 16# 29# 41 42 71 74 74# 84 86 86# 87 93 93# 108 108# 109 112 117 145 145# 146 146# PTRS 7# 13# RMAX 6# 13# RMIN 6# 13# RTC 11# 16# 121 121# 129 129# 131 SUBSC 7# 13# SYM 7# 13# SYMTB 7# 13# TITLE 7# 13# TMAP 7# 13# 16# 94 94# TOKEN 7# 13# 16# 68 85# 90# 92# 134# TOKPT 11# 16# 57 68 82 82# 83 85 88 88# 89 90 92 94 132 132# 133 134 TYPCT 7# 13# XREF 7# 13# 1000P 43 156# 100P 41# 95 120 130 137 147 150P 44 46# 200P 45 55# 250P 55 67# 260P 70 72# 270P 71 74# 290P 67 69 73 82# 300P 84 92# 350P 87 91 94# 400P 47 104# 450P 105 107# 500P 76 108# 116 570P 111 115# 600P 110 113 117# 620P 118 121# 800P 128 131# 900P 131 136# 950P 135 137# NDT08 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00021510 00002 C * 00021520 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00021530 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY * 00021540 00005 C * 00021550 00006 C***************************************************************** 00021560 00007 SUBROUTINE NDT09 00021570 00008 C***************************************************************** 00021580 00009 C * 00021590 00010 C OUTPUT LEXICAL ANALYZER / COMPILER * 00021600 00011 C * 00021610 00012 C * 00021620 00013 C THIS PROGRAM ANALYZES AN OUTPUT REQUEST FOR SYNTACTICAL * 00021630 00014 C ERRORS AND BUILDS THE OUTPUT BUFFER. NDT09 IS CALLED BY * 00021640 00015 C NDT01, AND IN TURN CALLS NDT30 THROUGH NDT34, AND NDT13. * 00021650 00016 C * 00021660 00017 C * 00021670 00018 C * 00021680 00019 C OUTPT, AN ARRAY OF LENGTH 240, IS THE OUTPUT BUFFER. IT * 00021690 00020 C CONTAINS INFORMATION USED BY THE OUTPUT PHASE TO DETERMINE * 00021700 00021 C THE TYPE AND FORMAT OF THE OUTPUT. THE FOLLOWING VARIABLES* 00021710 00022 C ARE STORED IN THIS ARRAY: * 00021720 00023 C * 00021730 00024 C POSITION VARI- DESCRIPTION * 00021740 00025 C IN OUTPT ABLE * 00021750 00026 C --------- ----- -----------------------------------------* 00021760 00027 C 1 VARCT NUMBER OF VARIABLES ON THE OUTPUT CARD * 00021770 00028 C 2 TYPE TYPE INDICATES A PRINT OR A PLOT. * 00021780 00029 C 3 RUNNO THE HIGHEST RUN NUMBER REQUESTED * 00021790 00030 C 4 - 91 VNAM EACH VARIABLE NAME (UP TO 6 CHARACTERS * 00021800 00031 C PLUS THE RUN NUMBER) IS PLACED HERE, * 00021810 00032 C CENTERED. THE INDEPENDENT VARIABLE NAME * 00021820 00033 C FIELD STARTS AT POSITION 4. * 00021830 00034 C 92 - 102 VNUM EACH VARIABLE NUMBER IS PLACED HERE; THE * 00021840 00035 C INDEPENDENT VARIABLE NUMBER IS IN * 00021850 00036 C VNUM(1), OUTPT(92). * 00021860 00037 C 103 - 124 LOW A REAL ARRAY, LOW CONTAINS THE LOW VALUE * 00021870 00038 C FOR THE RANGE OF EACH VARIABLE. * 00021880 00039 C 125 - 146 HIGH A REAL ARRAY, HIGH CONTAINS THE HIGH * 00021890 00040 C VALUE FOR THE RANGE OF EACH VARIABLE. * 00021900 00041 C 147 - 157 FLAG FLAG CONTAINS DEFAULT INFORMATION FOR A * 00021910 00042 C PLOT VARIABLE'S RANGE. * 00021920 00043 C ONE'S DIGIT - 0,1,2,3 * 00021930 00044 C 0 - NO DEFAULTS * 00021940 00045 C 1 - LOW DEFAULT * 00021950 00046 C 2 - HIGH DEFAULT * 00021960 00047 C 3 - BOTH DEFAULTS * 00021970 00048 C TEN'S DIGIT * 00021980 00049 C THERE IS ONE CLAUSE IN EACH * 00021990 00050 C SERIES WHICH CONTAINS THE RANGE * 00022000 00051 C FOR THAT SERIES. THIS DIGIT * 00022010 00052 C POINTS TO IT. * 00022020 00053 C 158 IVPLT A FLAG TO DENOTE AN INDEP. VAR. PLOT * 00022030 00054 C 159 - 177 ----- RESERVED * 00022040 00055 C 178 SRCNT THE NUMBER OF SERIES ON THIS OUTPUT CARD.* 00022050 00056 C 179 - 189 RUN THE RUN NUMBER OF THE VARIABLE TO BE USED* 00022060 NDT09 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C ON THE OUTPUT IS STORED HERE. IT MUST BE* 00022070 00058 C BETWEEN 1 AND THE NUMBER OF RERUNS. * 00022080 00059 C 190 - 199 CHAR NOT USED FOR A PRINT, THE CHARACTER IS * 00022090 00060 C USED ON THE PLOT FOR ITS VARIABLE. * 00022100 00061 C 200 CFLAG CFLAG INDICATES THE PRESCENCE OF ANY * 00022110 00062 C TITLE INFO IN THE USER'S COMMENT FIELD. * 00022120 00063 C * 00022130 00064 C***************************************************************** 00022140 00065 REAL*8 RMIN,RMAX,LITBL(8192) 00022150 00066 REAL*8 LOW(11),HIGH(11) 00022160 00067 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00022170 00068 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00022180 00069 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00022190 00070 3SYMTB(5,4096) 00022200 00071 INTEGER CDATA(144),OUTPT(240),VARCT,TYPE,RUNNO,VNUM(11), 00022210 00072 1FLAG(11),RUN(11),CHAR(10),CFLAG,SRCNT,IVPLT 00022220 00073 INTEGER DMODE,RMODE,SMODE,LOOP,CLNUM,BGF(4),NDF(4), 00022230 00074 1SRNUM,CLFST,SLASH,BLANK,VMAX,SFLAG, 00022240 00075 2NARO,XCHAR,OPTNS,TIME(8) 00022250 00076 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00022260 00077 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00022270 00078 2SYMTB,LITBL 00022280 00079 EQUIVALENCE (OUTPT(1),DEF(1),VARCT),(OUTPT(2),TYPE), 00022290 00080 1(OUTPT(3),RUNNO),(OUTPT(92),VNUM(1)),(OUTPT(103),LOW(1)), 00022300 00081 2(OUTPT(125),HIGH(1)),(OUTPT(147),FLAG(1)),(OUTPT(158),IVPLT), 00022310 00082 3(OUTPT(178),SRCNT),(OUTPT(179),RUN(1)),(OUTPT(190),CHAR(1)), 00022320 00083 4(OUTPT(200),CFLAG),(CDATA(1),OBJCD(1)) 00022330 00084 EQUIVALENCE (DMODE,OUTPT(201)),(RMODE,OUTPT(202)), 00022340 00085 1(SMODE,OUTPT(203)),(LOOP,OUTPT(204)),(CLNUM,OUTPT(205)), 00022350 00086 2(BGF(1),OUTPT(206)),(NDF(1),OUTPT(210)),(OPTNS,PTRS(7)), 00022360 00087 3(SRNUM,OUTPT(220)),(CLFST,OUTPT(221)),(VMAX,OUTPT(223)) 00022370 00088 EQUIVALENCE (SLASH,OPER(5)),(BLANK,CRSET(1)) 00022380 00089 EQUIVALENCE (SFLAG,OUTPT(222)) 00022390 00090 DATA TIME /'T','I','M','E',' ',' ',' ',' '/ 00022400 00091 C***************************************************************** 00022410 00092 C * 00022420 00093 C THIS FIRST SECTION INITIALIZES SOME OF THE VARIABLES USED. * 00022430 00094 C * 00022440 00095 C DMODE DATA MODE -1 BEGINNING DATA MODE * 00022450 00096 C (BEFORE A LEGAL CHARACTER OCCURS)* 00022460 00097 C 0 INTERIOR MODE * 00022470 00098 C 1 END MODE - END OF DATA * 00022480 00099 C 2 END MODE - INDEPENDENT VARIABLE * 00022490 00100 C * 00022500 00101 C SMODE SERIES MODE -1 NO RANGE DEFINED * 00022510 00102 C 0 FIRST RANGE DEFINITION * 00022520 00103 C 1 RANGE PREVIOUSLY DEFINED * 00022530 00104 C * 00022540 00105 C ZERO OUT THE OUTPT ARRAY. * 00022550 00106 C * 00022560 00107 C***************************************************************** 00022570 00108 DO 50 XCHAR = 1, 157 00022580 00109 50 OUTPT(XCHAR) = 0 00022590 00110 DO 60 XCHAR = 179, 200 00022600 00111 60 OUTPT(XCHAR) = 0 00022610 00112 DMODE = -1 00022620 NDT09 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 SMODE = -1 00022630 00114 SRCNT = 1 00022640 00115 C***************************************************************** 00022650 00116 C * 00022660 00117 C CLNUM, CURRENT CLAUSE NUMBER, AND CLFST, THE FIRST CLAUSE * 00022670 00118 C IN THE CURRENT SERIES, ARE SET FOR THE FIRST CLAUSE. * 00022680 00119 C * 00022690 00120 C***************************************************************** 00022700 00121 CLNUM = 2 00022710 00122 CLFST = 2 00022720 00123 C***************************************************************** 00022730 00124 C * 00022740 00125 C NARO IS 1 FOR THE NARROW OUTPUT OPTION, 0 FOR WIDE. * 00022750 00126 C * 00022760 00127 C TYPE IS SET TO DENOTE PRINT OR PLOT, 12 OR 13. * 00022770 00128 C * 00022780 00129 C VMAX, THE MAXIMUM NUMBER OF VARIABLES ALLOWED, IS SET TO * 00022790 00130 C 10 FOR WIDE OUTPUT, 5 FOR A NARROW PRINT, AND 6 FOR A * 00022800 00131 C NARROW PLOT. * 00022810 00132 C * 00022820 00133 C***************************************************************** 00022830 00134 TYPE = TOKEN(1) 00022840 00135 NARO = MOD(OPTNS/8,2) 00022850 00136 VMAX = 11 - NARO*(TYPE-8) 00022860 00137 C***************************************************************** 00022870 00138 C * 00022880 00139 C IVPRT WILL BE 0 FOR A REGULAR PLOT, * 00022890 00140 C AND 1 FOR AN INDEPENDENT VARIABLE PLOT. * 00022900 00141 C * 00022910 00142 C LOOP, THE CURRENT CHARACTER POSITION IN CDATA, IS SET TO 0.* 00022920 00143 C * 00022930 00144 C***************************************************************** 00022940 00145 IVPLT = 0 00022950 00146 LOOP = 0 00022960 00147 C***************************************************************** 00022970 00148 C * 00022980 00149 C EACH SEARCH FOR A NEW CLAUSE BEGINS HERE. * 00022990 00150 C * 00023000 00151 C * 00023010 00152 C CALL THE OUTPUT FIELD PROCESSOR TO GET THE BEGINNING AND * 00023020 00153 C END FIELDS FOR THIS CLAUSE. * 00023030 00154 C IF BGF(1) INDICATES THAT NDT30 FOUND NO VARIABLE, * 00023040 00155 C GO TO THE RETURN SECTION. * 00023050 00156 C THEN PROCESS THESE FIELDS BY CALLING THE OUTPUT VARIABLE * 00023060 00157 C PROCESSOR, AND IF THE CARD IS A PLOT CARD, THE PLOT * 00023070 00158 C CHARACTER PROCESSOR AND THE OUTPUT RANGE ANALYZER. * 00023080 00159 C * 00023090 00160 C***************************************************************** 00023100 00161 100 CALL NDT30 00023110 00162 IF (BGF(1) .LT. 0) GO TO 800 00023120 00163 CALL NDT31 00023130 00164 IF (TYPE .EQ. 12) GO TO 150 00023140 00165 CALL NDT32 00023150 00166 CALL NDT33 00023160 00167 C***************************************************************** 00023170 00168 C * 00023180 NDT09 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 00169 C IF THE CLAUSE JUST PROCESSED WAS THE INDEPENDENT VARIABLE, * 00023190 00170 C GO TO THE RETURN SECTION. * 00023200 00171 C * 00023210 00172 C***************************************************************** 00023220 00173 150 IF (CLNUM .EQ. 1) GO TO 800 00023230 00174 C***************************************************************** 00023240 00175 C * 00023250 00176 C GO TO END OF DATA SECTION IF DMODE INDICATES END OF DATA. * 00023260 00177 C * 00023270 00178 C CHECK FOR AN AUTOPLOT OUTPUT CARD. * 00023280 00179 C * 00023290 00180 C***************************************************************** 00023300 00181 IF (CLNUM .GT. VMAX) GO TO 200 00023310 00182 IF (DMODE .GT. 0) GO TO 500 00023320 00183 IF (RUNNO .NE. 0) GO TO 175 00023330 00184 CALL NDT13(LOOP,724,2) 00023340 00185 GO TO 250 00023350 00186 C***************************************************************** 00023360 00187 C * 00023370 00188 C CHECK FOR MORE VARIABLES THAN PERMITTED. * 00023380 00189 C IF LESS THAN VMAX, SEARCH FOR A NEW CLAUSE. * 00023390 00190 C AN ERROR OCCURS IF CLNUM GREATER THAN VMAX. * 00023400 00191 C * 00023410 00192 C***************************************************************** 00023420 00193 175 CLNUM = CLNUM + 1 00023430 00194 GO TO 100 00023440 00195 200 CALL NDT13(LOOP,6*NARO+711,2) 00023450 00196 C***************************************************************** 00023460 00197 C * 00023470 00198 C THE END OF THE CARD HAS NOT OCCURED, SO * 00023480 00199 C SEARCH FOR INDEPENDENT VARIABLE. * 00023490 00200 C * 00023500 00201 C A DOUBLE SLASH DENOTES AN INDEPENDENT VARIABLE. * 00023510 00202 C SINCE A PRINT IS NOT ALLOWED TO HAVE AN INDEPENDENT VARIBLE* 00023520 00203 C DO NOT LOOK FOR ONE. * 00023530 00204 C * 00023540 00205 C***************************************************************** 00023550 00206 250 IF (TYPE .EQ. 12) GO TO 500 00023560 00207 300 LOOP = LOOP + 1 00023570 00208 IF (CDATA(LOOP) .EQ. SLASH) GO TO 400 00023580 00209 IF (CDATA(LOOP) .EQ. BLANK) GO TO 500 00023590 00210 GO TO 300 00023600 00211 400 IF (CDATA(LOOP+1) .NE. SLASH) GO TO 300 00023610 00212 C***************************************************************** 00023620 00213 C * 00023630 00214 C IF AN INDEPENDENT VARIABLE IS FOUND, SET DMODE TO * 00023640 00215 C INDEPENDENT VARIABLE MODE. * 00023650 00216 C * 00023660 00217 C***************************************************************** 00023670 00218 DMODE = 2 00023680 00219 LOOP = LOOP + 1 00023690 00220 C***************************************************************** 00023700 00221 C * 00023710 00222 C END OF CARD * 00023720 00223 C * 00023730 00224 C * 00023740 NDT09 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-4 00225 C SET VARCT TO THE NUMBER OF VARIABLES. * 00023750 00226 C IF IN INDEPENDENT VARIABLE MODE, SEARCH FOR A CLAUSE. * 00023760 00227 C * 00023770 00228 C***************************************************************** 00023780 00229 500 VARCT = CLNUM 00023790 00230 SRCNT = SRCNT - 1 00023800 00231 IF (DMODE .LE. 1) GO TO 600 00023810 00232 CLNUM = 1 00023820 00233 GO TO 100 00023830 00234 C***************************************************************** 00023840 00235 C * 00023850 00236 C TIME IS THE DEFAULT FOR INDEPENDENT VARIABLE, * 00023860 00237 C FILL IN THE NAME, RUN NO. AND VAR NO. IN OUTPT FOR TIME. * 00023870 00238 C * 00023880 00239 C***************************************************************** 00023890 00240 600 DO 700 XCHAR = 1,8 00023900 00241 700 OUTPT(XCHAR+3) = TIME(XCHAR) 00023910 00242 VNUM(1) = 12 00023920 00243 FLAG(1) = 13 00023930 00244 RUN(1) = 1 00023940 00245 C***************************************************************** 00023950 00246 C * 00023960 00247 C ASSIGN ANY PLOT CHARACTER DEFAULTS BY CALLING THE * 00023970 00248 C PLOT CHARACTER DEFAULT ASSIGNMENT ROUTINE. * 00023980 00249 C * 00023990 00250 C***************************************************************** 00024000 00251 800 IF (RUNNO .NE. 0) CALL NDT34 00024010 00252 C***************************************************************** 00024020 00253 C * 00024030 00254 C RETURN TO NDT01 * 00024040 00255 C * 00024050 00256 C***************************************************************** 00024060 00257 RETURN 00024070 00258 END 00024090 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 OUTPT +1462 VARCT +1462 CDATA +1222 OPTNS +12 SLASH +324 BLANK +251 TYPE +1463 RUNNO +1464 VNUM +1615 LOW +1630 HIGH +1656 FLAG +1704 IVPLT +1717 SRCNT +1743 RUN +1744 CHAR +1757 CFLAG +1771 DMODE +1772 RMODE +1773 SMODE +1774 LOOP +1775 CLNUM +1776 BGF +1777 NDF +2003 SRNUM +2015 CLFST +2016 VMAX +2020 SFLAG +2017 NDT09 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-5 SUBPROGRAMS CALLED NDT13 MOD. NDT31 NDT30 NDT34 NDT33 NDT32 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] NARO 1 XCHAR 2 .S0002 3 .S0001 4 .S0000 5 TIME 6 TEMPORARIES .A0016 16 .Q0000 17 BGF 73# 84# 162 BLANK 73# 88# 209 CARD1 67# 76# CARD2 67# 76# CDATA 71# 79# 208 209 211 CFLAG 71# 79# CHAR 71# 79# CLFST 73# 84# 122# CLNUM 73# 84# 121# 173 181 193 193# 229 232# CRSET 67# 76# 88# DEF 67# 76# 79# DMODE 73# 84# 112# 182 218# 231 EQCHN 67# 76# ERROR 67# 76# FCTN 67# 76# FLAG 71# 79# 243# HIGH 66# 79# IVPLT 71# 79# 145# LITBL 65# 76# LOOP 73# 84# 146# 184 184# 195 195# 207 207# 208 209 211 219 219# LOW 66# 79# MOD. 135 NARO 73# 135# 136 195 NDF 73# 84# NDT09 7# NDT13 184 195 NDT30 161 NDT31 163 NDT32 165 NDT33 166 NDT34 251 OBJCD 67# 76# 79# OPER 67# 76# 88# OPTNS 73# 84# 135 OUTPT 71# 79# 84# 89# 109# 111# 241# PTRS 67# 76# 84# RMAX 65# 76# RMIN 65# 76# RMODE 73# 84# RUN 71# 79# 244# RUNNO 71# 79# 183 251 SFLAG 73# 89# SLASH 73# 88# 208 211 SMODE 73# 84# 113# SRCNT 71# 79# 114# 230 230# SRNUM 73# 84# SUBSC 67# 76# SYM 67# 76# SYMTB 67# 76# TIME 73# 90# 241 TITLE 67# 76# TMAP 67# 76# TOKEN 67# 76# 134 TYPCT 67# 76# TYPE 71# 79# 134# 136 164 206 VARCT 71# 79# 229# VMAX 73# 84# 136# 181 VNUM 71# 79# 242# XCHAR 73# 108# 109 110# 111 240# 241 XREF 67# 76# 100P 161# 194 233 150P 164 173# 175P 183 193# 200P 181 195# 250P 185 206# 300P 207# 210 211 400P 208 211# 500P 182 206 209 229# 50P 108 109# 600P 231 240# 60P 110 111# 700P 240 241# 800P 162 173 251# NDT09 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00024100 00002 C * 00024110 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00024120 00004 C PROGRAM AUTHOR - THOMAS L EVERMAN JR * 00024130 00005 C * 00024140 00006 C THIS PROGRAM STORES THE MACRO DEFINITION BUFFER BUILT BY * 00024150 00007 C NDT39 ONTO THE SPECIFIED DISK RECORD. * 00024160 00008 C * 00024170 00009 C***************************************************************** 00024180 00010 SUBROUTINE NDT10 00024190 00011 REAL*8 RMIN,RMAX,LITBL(8192) 00024200 00012 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00024210 00013 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00024220 00014 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00024230 00015 3SYMTB(5,4096) 00024240 00016 INTEGER REC,DUPFG,DISK,MAC1(80),MAC2(80) 00024250 00017 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00024260 00018 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00024270 00019 2SYMTB,LITBL 00024280 00020 EQUIVALENCE (DISK,PTRS(3)),(MAC1(1),DEF(1)), 00024290 00021 1(MAC2(1),XREF(1)) 00024300 00022 C***************************************************************** 00024310 00023 C * 00024320 00024 C SET DUPFG TO 1 SO THAT NDT39 CHECKS FOR DUPLICATE ARGUMENTS* 00024330 00025 C CALL NDT39 TO BUILD BUFFER. IF REC IS RETURNED AS 0, THEN * 00024340 00026 C THE MACRO WAS ALREADY DEFINED AND NO NEW RECORD SHOULD * 00024350 00027 C BE WRITTEN. * 00024360 00028 C * 00024370 00029 C***************************************************************** 00024380 00030 DUPFG = 1 00024390 00031 CALL NDT39 (REC, DUPFG) 00024400 00032 IF (REC .EQ. 0) GO TO 100 00024410 00033 WRITE (DISK'REC) MAC1 00024420 00034 REC = REC + 1 00024430 00035 WRITE (DISK'REC) MAC2 00024440 00036 100 RETURN 00024450 00037 END 00024470 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 DISK +6 MAC1 +1462 MAC2 +1602 NDT10 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 SUBPROGRAMS CALLED NDT39 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] DUPFG 1 REC 2 TEMPORARIES .A0016 3 CARD1 12# 17# CARD2 12# 17# CRSET 12# 17# DEF 12# 17# 20# DISK 16# 20# 33 35 DUPFG 16# 30# 31 31# EQCHN 12# 17# ERROR 12# 17# FCTN 12# 17# LITBL 11# 17# MAC1 16# 20# 33 MAC2 16# 20# 35 NDT10 10# NDT39 31 OBJCD 12# 17# OPER 12# 17# PTRS 12# 17# 20# REC 16# 31 31# 32 33 34 34# 35 RMAX 11# 17# RMIN 11# 17# SUBSC 12# 17# SYM 12# 17# SYMTB 12# 17# TITLE 12# 17# TMAP 12# 17# TOKEN 12# 17# TYPCT 12# 17# XREF 12# 17# 20# 100P 32 36# NDT10 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00024480 00002 C * 00024490 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00024500 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY * 00024510 00005 C * 00024520 00006 C***************************************************************** 00024530 00007 SUBROUTINE NDT11 00024540 00008 C***************************************************************** 00024550 00009 C * 00024560 00010 C DEF CARD PROCESSOR * 00024570 00011 C * 00024580 00012 C * 00024590 00013 C THIS PROGRAM PROCESSES DEF CARDS. * 00024600 00014 C THE DEF CARD, WHICH WILL BE USED ONLY WHEN THE DOCUMENTER * 00024610 00015 C OPTION IS IN EFFECT, CONTAINS A DEFINITION FOR A VARIABLE. * 00024620 00016 C * 00024630 00017 C THE DEFINITION FOR EACH VARIABLE IS PUT INTO THE DEF * 00024640 00018 C ARRAY, WHICH IS THEN WRITTEN OUT TO DISK. * 00024650 00019 C * 00024660 00020 C***************************************************************** 00024670 00021 REAL*8 RMIN,RMAX,LITBL(8192) 00024680 00022 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00024690 00023 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00024700 00024 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00024710 00025 3SYMTB(5,4096) 00024720 00026 INTEGER CDATA(144),DASH(3),BLANK,POINT,DOCBT,CDST1,PGMCT, 00024730 00027 1DISK,LOOP,RTC,PNTR,XCHAR,LENTH,POS,RECNO,BUFFR(5),TOKPT 00024740 00028 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00024750 00029 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00024760 00030 2SYMTB,LITBL 00024770 00031 EQUIVALENCE (CDATA(1),OBJCD(1)),(PGMCT,PTRS(22)), 00024780 00032 1(DISK,PTRS(3)),(DOCBT,SYM(12)),(BLANK,CRSET(1)), 00024790 00033 2(CDST1,CDATA(142)),(RECNO,SYM(15)),(POINT,OPER(1)), 00024800 00034 3(TOKPT,TOKEN(3)) 00024810 00035 DATA DASH /' ','-',' '/ 00024820 00036 C***************************************************************** 00024830 00037 C * 00024840 00038 C BEFORE THE VARIABLE SYNTAX CHECKER CAN BE CALLED, THE * 00024850 00039 C STARTING AND STOPPING ADDRESSES OF THE VARIABLE MUST BE * 00024860 00040 C DETERMINED. ON A DEF CARD, SUBSCRIPTING IS NOT ALLOWED. * 00024870 00041 C * 00024880 00042 C BLANK OUT DEF ARRAY. * 00024890 00043 C * 00024900 00044 C***************************************************************** 00024910 00045 DO 50 XCHAR = 1, 80 00024920 00046 50 DEF(XCHAR) = BLANK 00024930 00047 LOOP = 0 00024940 00048 100 LOOP = LOOP + 1 00024950 00049 IF (CDATA(LOOP) .EQ. BLANK) GO TO 200 00024960 00050 IF (CDATA(LOOP) .NE. POINT) GO TO 100 00024970 00051 CALL NDT13(LOOP, 530, 1) 00024980 00052 C***************************************************************** 00024990 00053 C * 00025000 00054 C CHECK THE VARIABLE FOR PROPER SYNTAX. IF IT IS ILLEGAL, * 00025010 00055 C RETURN. THEN CALL THE HASH ENTRY ROUTINE TO GET ITS * 00025020 00056 C TOKEN. * 00025030 NDT11 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C * 00025040 00058 C***************************************************************** 00025050 00059 200 CALL NDT24(1, LOOP-1, RTC) 00025060 00060 IF (RTC .GT. 0) GO TO 1400 00025070 00061 CALL NDT40(BUFFR) 00025080 00062 CALL NDT37(BUFFR,PNTR) 00025090 00063 TOKEN(4) = PNTR - 1 00025100 00064 TOKPT = 4 00025110 00065 C***************************************************************** 00025120 00066 C * 00025130 00067 C THE DOCUMENTER BIT, DOCBT, WILL BE 1 IF A DEF CARD FOR * 00025140 00068 C THIS VARIABLE HAS EXISTED PREVIOUSLY. IF SO, RETURN. * 00025150 00069 C * 00025160 00070 C***************************************************************** 00025170 00071 IF (DOCBT .EQ. 0) GO TO 300 00025180 00072 CALL NDT14(0,152,2) 00025190 00073 GO TO 1400 00025200 00074 C***************************************************************** 00025210 00075 C * 00025220 00076 C SEARCH THE CARD FOR THE COMMENT FIELD. IT BEGINS WITH * 00025230 00077 C THE FIRST NON-BLANK CHARACTER AFTER THE FIRST BLANK * 00025240 00078 C AFTER THE VARIABLE. * 00025250 00079 C * 00025260 00080 C***************************************************************** 00025270 00081 300 DO 400 LOOP = CDST1, 72 00025280 00082 IF (CARD1(LOOP) .EQ. BLANK) GO TO 500 00025290 00083 400 CONTINUE 00025300 00084 GO TO 700 00025310 00085 500 DO 600 LOOP1 = LOOP, 72 00025320 00086 IF (CARD1(LOOP1) .NE. BLANK) GO TO 800 00025330 00087 600 CONTINUE 00025340 00088 C***************************************************************** 00025350 00089 C * 00025360 00090 C THE SEARCH FAILED; NO DEFINITION EXISTS FOR THIS VARIABLE.* 00025370 00091 C * 00025380 00092 C***************************************************************** 00025390 00093 700 CALL NDT14(0, 153, 2) 00025400 00094 GO TO 1400 00025410 00095 C***************************************************************** 00025420 00096 C * 00025430 00097 C THE DEFINTION FIELD HAS BEEN FOUND. SET THE DOCBT, AND * 00025440 00098 C BUILD THE DEF ARRAY. * 00025450 00099 C * 00025460 00100 C***************************************************************** 00025470 00101 800 DOCBT = 1 00025480 00102 DO 900 XCHAR = 1, 6 00025490 00103 900 DEF(XCHAR) = SYM(XCHAR) 00025500 00104 DO 1000 XCHAR = 1, 3 00025510 00105 1000 DEF(XCHAR+6) = DASH(XCHAR) 00025520 00106 LENTH = 73 - LOOP1 00025530 00107 DO 1100 XCHAR = 1, LENTH 00025540 00108 POS = XCHAR + LOOP1 - 1 00025550 00109 1100 DEF(XCHAR+9) = CARD1(POS) 00025560 00110 C***************************************************************** 00025570 00111 C * 00025580 00112 C IF THIS IS THE FIRST OCCURRENCE OF THIS VARIABLE, WRITE * 00025590 NDT11 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 C OUT THE DEF ARRAY TO THE DISK AND SET THE RECORD NUMBER * 00025600 00114 C (RECNO) TO THIS LOCATION. IF THIS VARIABLE WAS ALREADY * 00025610 00115 C DEFINED, WRITE THE DEF ARRAY TO THE OLD LOCATION. * 00025620 00116 C * 00025630 00117 C***************************************************************** 00025640 00118 IF (RECNO .EQ. 0) GO TO 1200 00025650 00119 WRITE (DISK'RECNO+6) DEF 00025660 00120 GO TO 1300 00025670 00121 1200 WRITE (DISK'PGMCT+7) DEF 00025680 00122 RECNO = PGMCT + 1 00025690 00123 C***************************************************************** 00025700 00124 C * 00025710 00125 C PACK THE SYMBOL TABLE INFORMATION WHENCE IT CAME. * 00025720 00126 C * 00025730 00127 C***************************************************************** 00025740 00128 1300 CALL NDT40(SYMTB(1,PNTR)) 00025750 00129 C***************************************************************** 00025760 00130 C * 00025770 00131 C RETURN 00025780 00132 C * 00025790 00133 C***************************************************************** 00025800 00134 1400 RETURN 00025810 00135 END 00025830 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 CDATA +1222 PGMCT +31 DISK +6 DOCBT +344 BLANK +251 RECNO +347 POINT +320 TOKPT +524 CDST1 +1437 SUBPROGRAMS CALLED NDT13 NDT40 NDT24 NDT14 NDT37 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] *LOOP1 1 XCHAR 2 BUFFR 3 PNTR 10 LOOP 11 RTC 12 POS 13 .S0005 14 .S0004 15 .S0003 16 LENTH 17 .S0002 20 .S0001 21 .S0000 22 DASH 23 TEMPORARIES .A0016 26 .Q0000 27 BLANK 26# 31# 46 49 82 86 BUFFR 26# 61 61# 62 62# CARD1 22# 28# 82 86 109 CARD2 22# 28# CDATA 26# 31# 49 50 CDST1 26# 31# 81 CRSET 22# 28# 31# DASH 26# 35# 105 DEF 22# 28# 46# 103# 105# 109# 119 121 DISK 26# 31# 119 121 DOCBT 26# 31# 71 101# EQCHN 22# 28# ERROR 22# 28# FCTN 22# 28# LENTH 26# 106# 107 LITBL 21# 28# LOOP 26# 47# 48 48# 49 50 51 51# 59 81# 82 85 LOOP1 85# 86 106 108 NDT11 7# NDT13 51 NDT14 72 93 NDT24 59 NDT37 62 NDT40 61 128 OBJCD 22# 28# 31# OPER 22# 28# 31# PGMCT 26# 31# 121 122 PNTR 26# 62 62# 63 128 POINT 26# 31# 50 POS 26# 108# 109 PTRS 22# 28# 31# RECNO 26# 31# 118 119 122# RMAX 21# 28# RMIN 21# 28# RTC 26# 59 59# 60 SUBSC 22# 28# SYM 22# 28# 31# 103 SYMTB 22# 28# 128 128# TITLE 22# 28# TMAP 22# 28# TOKEN 22# 28# 31# 63# TOKPT 26# 31# 64# TYPCT 22# 28# XCHAR 26# 45# 46 102# 103 104# 105 107# 108 109 XREF 22# 28# 1000P 104 105# 100P 48# 50 1100P 107 109# 1200P 118 121# 1300P 120 128# 1400P 60 73 94 134# 200P 49 59# 300P 71 81# 400P 81 83# 500P 82 85# 50P 45 46# 600P 85 87# 700P 84 93# 800P 86 101# 900P 102 103# NDT11 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00025840 00002 C PROGRAM AUTHOR - DANIEL A. POYDENCE 00025850 00003 C 00025860 00004 C 00025870 00005 SUBROUTINE NDT12 (CODE) 00025880 00006 REAL*8 RMIN,RMAX,LITBL(8192) 00025890 00007 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00025900 00008 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00025910 00009 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00025920 00010 3SYMTB(5,4096) 00025930 00011 INTEGER CODE 00025940 00012 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00025950 00013 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00025960 00014 2SYMTB,LITBL 00025970 00015 WRITE(6,100) CODE 00025980 00016 100 FORMAT(' SYSTEM ERROR:',I2) 00025990 00017 STOP 00026000 00018 END 00026010 COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 SUBPROGRAMS CALLED SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] CODE 1 TEMPORARIES .A0016 7 CARD1 7# 12# CARD2 7# 12# CODE 5# 11# 15 CRSET 7# 12# DEF 7# 12# EQCHN 7# 12# ERROR 7# 12# FCTN 7# 12# LITBL 6# 12# NDT12 5# OBJCD 7# 12# OPER 7# 12# PTRS 7# 12# RMAX 6# 12# RMIN 6# 12# SUBSC 7# 12# SYM 7# 12# SYMTB 7# 12# TITLE 7# 12# TMAP 7# 12# TOKEN 7# 12# TYPCT 7# 12# XREF 7# 12# 100P 15 16# NDT12 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00026020 00002 C PROGRAM AUTHOR - GARY PELKEY 00026030 00003 C 00026040 00004 C 00026050 00005 SUBROUTINE NDT13 (POS,CODE,SEVER) 00026060 00006 C 00026070 00007 C 00026080 00008 C THIS ROUTINE PROCESSES ERRORS IN THE LEXICAL PHASE. THE 00026090 00009 C ONLY DIFFERENCE BETWEEN THIS ROUTINE AND NDT14 IS NDT14 00026100 00010 C REQUIRES THE FIRST ARGUMENT (DESIGNATING POSITION ON THE 00026110 00011 C CARD WHERE THE ERROR OCCURED), TO BE IN THE PACKED FORM 00026120 00012 C COMPATIBLE WITH AN ERROR ARRAY ENTRY. THEREFORE, THIS ROUTINE 00026130 00013 C SIMPLY CALLS NDT23 TO PACK THE POSITION IN THE COMPATIBLE 00026140 00014 C FORM AND THEN CALLS NDT14 TO FINISH. 00026150 00015 C 00026160 00016 C 00026170 00017 REAL*8 RMIN,RMAX,LITBL(8192) 00026180 00018 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00026190 00019 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00026200 00020 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00026210 00021 3SYMTB(5,4096) 00026220 00022 INTEGER POS,CODE,SEVER,PNT 00026230 00023 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00026240 00024 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00026250 00025 2SYMTB,LITBL 00026260 00026 CALL NDT23 (POS,PNT) 00026270 00027 CALL NDT14 (PNT,CODE,SEVER) 00026280 00028 RETURN 00026290 00029 END 00026310 COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 SUBPROGRAMS CALLED NDT14 NDT23 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] POS 1 PNT 2 SEVER 3 CODE 4 TEMPORARIES .A0016 5 CARD1 18# 23# CARD2 18# 23# CODE 5# 22# 27 27# CRSET 18# 23# DEF 18# 23# EQCHN 18# 23# ERROR 18# 23# FCTN 18# 23# LITBL 17# 23# NDT13 5# NDT14 27 NDT23 26 OBJCD 18# 23# OPER 18# 23# PNT 22# 26 26# 27 27# POS 5# 22# 26 26# PTRS 18# 23# RMAX 17# 23# RMIN 17# 23# SEVER 5# 22# 27 27# SUBSC 18# 23# SYM 18# 23# SYMTB 18# 23# TITLE 18# 23# TMAP 18# 23# TOKEN 18# 23# TYPCT 18# 23# XREF 18# 23# NDT13 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00026320 00002 C PROGRAM AUTHOR - GARY PELKEY 00026330 00003 C 00026340 00004 C 00026350 00005 SUBROUTINE NDT14 (LOC,CODE,SEVER) 00026360 00006 C 00026370 00007 C 00026380 00008 C THIS ROUTINE PROCESSES ALL CONTEXT ERRORS. THE INCOMING 00026390 00009 C ARGUMENT LOC CONTAINS INFORMATION AS TO WHICH CARD AND 00026400 00010 C WHICH POSITION ON THE CARD THE ERROR OCCURED; ALL IN A FORM 00026410 00011 C COMPATIBLE WITH THE FIRST WORD OF AN ERROR ENTRY. EACH 00026420 00012 C ERROR ENTRY CONSISTS OF 2 CONSECUTIVE WORDS IN THE ERROR 00026430 00013 C ARRAY STARTING WITH ERROR(3). ERROR(2) OR ERRPT POINTS TO 00026440 00014 C THE LAST WORD USED IN THE ERROR ARRAY. IN ADDITION TO THE 00026450 00015 C ABOVE, THE FIRST WORD OF AN ERROR ENTRY CONTAIN INFORMATION 00026460 00016 C AS TO THE SEVERITY OF THE ERROR. THE SECOND WORD IS A CODE 00026470 00017 C USED TO SPECIFY WHICH ERROR HAS OCCURED. PROCESSING OF ERRORS 00026480 00018 C IS SKIPPED IF ERRPT IS 80 OR IF THE INCOMING ERROR IS A 00026490 00019 C WARNING AND THE NOWARN OPTION HAS BEEN SPECIFIED. EQCND AND 00026500 00020 C PGMCD ARE UPDATED IF THE ERROR IS OF HIGHER SEVERITY THAN 00026510 00021 C ANY IN THIS EQUATION THUS FAR OR IN THE PROGRAM THUS FAR, 00026520 00022 C RESPECTIVLY. WARNS, ERRS, AND CRITS ARE INCRIMENTED DEPENDING 00026530 00023 C ON WHETHER THE ERROR WAS A WARNING, ERROR OR CRITICAL. 00026540 00024 C 00026550 00025 C 00026560 00026 REAL*8 RMIN,RMAX,LITBL(8192) 00026570 00027 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00026580 00028 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00026590 00029 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00026600 00030 3SYMTB(5,4096) 00026610 00031 INTEGER ERRPT,LOC,SEVER,CODE,EQNCD,PGMCD,DINOG(3),OPTNS,PSSWT 00026620 00032 INTEGER BADNS 00026630 00033 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00026640 00034 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00026650 00035 2SYMTB,LITBL 00026660 00036 EQUIVALENCE (ERRPT,ERROR(2)),(EQNCD,ERROR(1)),(OPTNS,PTRS(7)) 00026670 00037 EQUIVALENCE (PGMCD,PTRS(15)),(DINOG(1),PTRS(11)) 00026680 00038 EQUIVALENCE (PSSWT,PTRS(10)) 00026690 00039 IF((MOD(OPTNS/256,2).EQ.1.AND.SEVER.EQ.1).OR.ERRPT.EQ.80)GOTO 100000026700 00040 BADNS=SEVER 00026710 00041 IF(PSSWT.EQ.5.AND.BADNS.EQ.3) BADNS=2 00026720 00042 ERROR(ERRPT+1)=LOC+2*BADNS 00026730 00043 ERROR(ERRPT+2)=CODE 00026740 00044 ERRPT=ERRPT+2 00026750 00045 IF(BADNS.GT.EQNCD) EQNCD=BADNS 00026760 00046 IF(BADNS.GT.PGMCD) PGMCD=BADNS 00026770 00047 DINOG(BADNS)=DINOG(BADNS)+1 00026780 00048 1000 RETURN 00026790 00049 END 00026810 EQUIVALENCED VARIABLES NDT14 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 ERRPT +1103 EQNCD +1102 OPTNS +12 PGMCD +22 DINOG +16 PSSWT +15 SUBPROGRAMS CALLED MOD. SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] LOC 1 BADNS 2 SEVER 3 CODE 4 TEMPORARIES .A0016 5 BADNS 32# 40# 41 41# 42 45 46 47 CARD1 27# 33# CARD2 27# 33# CODE 5# 31# 43 CRSET 27# 33# DEF 27# 33# DINOG 31# 37# 47# 47 EQCHN 27# 33# EQNCD 31# 36# 45 45# ERROR 27# 33# 36# 42# 43# ERRPT 31# 36# 39 42 43 44 44# FCTN 27# 33# LITBL 26# 33# LOC 5# 31# 42 MOD. 39 NDT14 5# OBJCD 27# 33# OPER 27# 33# OPTNS 31# 36# 39 PGMCD 31# 37# 46 46# PSSWT 31# 38# 41 PTRS 27# 33# 36# 37# 38# RMAX 26# 33# RMIN 26# 33# SEVER 5# 31# 39 40 SUBSC 27# 33# SYM 27# 33# SYMTB 27# 33# TITLE 27# 33# TMAP 27# 33# TOKEN 27# 33# TYPCT 27# 33# XREF 27# 33# 1000P 39 48# NDT14 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00026820 00002 C PROGRAM AUTHOR - GARY PELKEY 00026830 00003 C 00026840 00004 C 00026850 00005 SUBROUTINE NDT15 00026860 00006 C 00026870 00007 C 00026880 00008 C THIS PROGRAM PROCESSES TABLE STATEMENTS. TABLES ARE HANDLED 00026890 00009 C BY LOADING THE ELEMENTS SEQUENTIALLY INTO THE LITERAL TABLE 00026900 00010 C AFTER A POINTER TO THE ENTRY AND ONE WORD SPECIFYING THE 00026910 00011 C NUMBER OF ELEMENTS IN THE TABLE. TWO INSTRUCTIONS OF OBJECT 00026920 00012 C CODE ARE THEN PRODUCED TO LOAD THE -POINTER AND STORE IT 00026930 00013 C INTO THE VNUM OF THE TABLE VARIABLE. IN THIS WAY, AFTER 00026940 00014 C RELOCATION, THE TABLE EXECUTION INSTRUCTIONS CAN FIND THEIR 00026950 00015 C WAY BACK TO THE TABLE DATA THAT THEY MUST OPERATE ON. 00026960 00016 C 00026970 00017 C 00026980 00018 REAL*8 RMIN,RMAX,LITBL(8192) 00026990 00019 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00027000 00020 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00027010 00021 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00027020 00022 3SYMTB(5,4096) 00027030 00023 INTEGER COUNT,SAVE,LITCT,POS,TOKPT,START,CRSMT,OBJPT,EQPOS, 00027040 00024 1PNTR,PSSWT 00027050 00025 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00027060 00026 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00027070 00027 2SYMTB,LITBL 00027080 00028 EQUIVALENCE (LITCT,PTRS(18)),(TOKPT,TOKEN(3)),(CRSMT,TMAP(1)) 00027090 00029 EQUIVALENCE (OBJPT,OBJCD(1)),(PSSWT,PTRS(10)),(EQPOS,TMAP(3)) 00027100 00030 C 00027110 00031 C 00027120 00032 C COUNT IS THE NUMBER OF NUMERICS ON THE RIGHT OF THE '='. 00027130 00033 C SAVE SAVES THE NEXT AVAILABLE ADDRESS IN THE LITBL FOR 00027140 00034 C FUTURE REFERENCE. LITCT IS BUMPED BY 2 TO RESERVE 2 LOC- 00027150 00035 C ATIONS IN LITBL BEFORE THE ELEMENTS OF THIS TABLE CARD ARE 00027160 00036 C ENTERED. NDT08 IS CALLED TO BREAK THE CARD INTO TOKENS AND 00027170 00037 C TO ENTER THE ENTRYS INTO THE LITBL. 00027180 00038 C 00027190 00039 C 00027200 00040 COUNT=0 00027210 00041 SAVE=LITCT+1 00027220 00042 LITCT=LITCT+2 00027230 00043 CALL NDT08 00027240 00044 C 00027250 00045 C 00027260 00046 C THE NEWLY FORMED TOKENS ARE SEARCHED FOR AN EQUALS SIGN. 00027270 00047 C IF NOT FOUND, THE ASSOCIATED ERRORS HAVE ALREADY BEEN 00027280 00048 C FLAGGED AND THERE IS NOTHING MORE FOR THIS ROUTINE TO DO. 00027290 00049 C OTHERWISE THE TOKENS FROM POS+1 TO TOKPT SEARCHING AND 00027300 00050 C COUNTING THE LITERALS. COMMAS ARE IGNORED UNLESS THEY 00027310 00051 C BEGIN OR END THIS STRING OR UNLESS THEY ARE CONSECUTIVE. 00027320 00052 C ALL OTHER TOKEN TYPES ARE FLAGGED. 00027330 00053 C 00027340 00054 C 00027350 00055 IF(EQPOS.EQ.0) GO TO 900 00027360 00056 POS=EQPOS 00027370 NDT15 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 150 START=POS+1 00027380 00058 200 POS=POS+1 00027390 00059 IF(POS.GT.TOKPT) GO TO 600 00027400 00060 IF(TOKEN(POS).GT.0) GO TO 300 00027410 00061 C 00027420 00062 C 00027430 00063 C A LITERAL HAS BEEN FOUND. COUNT IS INCREMENTED AND A NEW 00027440 00064 C LITERAL IS SEARCHED FOR. 00027450 00065 C 00027460 00066 C 00027470 00067 COUNT=COUNT+1 00027480 00068 GO TO 200 00027490 00069 300 IF(TOKEN(POS).EQ.28681) GO TO 400 00027500 00070 C 00027510 00071 C 00027520 00072 C AN OPERATOR, VARIABLE, OR FUNCTION HAS BEEN ENCOUNTERED. 00027530 00073 C IT IS FLAGGED AND THE SEARCH CONTINUES. 00027540 00074 C 00027550 00075 C 00027560 00076 CALL NDT14 (TMAP(POS),804,2) 00027570 00077 GO TO 200 00027580 00078 C 00027590 00079 C 00027600 00080 C A COMMA HAS BEEN ENCOUNTERED. IT IS FLAGGED AS UNNECESSARY 00027610 00081 C IF IT STARTS OR STOPS THIS STRING (IT DELIMITS NOTHING), OR 00027620 00082 C IF IT IS FOLLOWED BY ANOTHER COMMA (CONSECUTIVE DELIMETER). 00027630 00083 C 00027640 00084 C 00027650 00085 400 IF(POS.NE.START.AND.POS.NE.TOKPT) GO TO 500 00027660 00086 CALL NDT14 (TMAP(POS),718,1) 00027670 00087 GO TO 200 00027680 00088 500 IF(TOKEN(POS+1).NE.28681) GO TO 200 00027690 00089 CALL NDT14 (TMAP(POS),701,1) 00027700 00090 POS=POS+1 00027710 00091 GO TO 200 00027720 00092 C 00027730 00093 C 00027740 00094 C IF NO LITERALS WERE FOUND, THE CARD IS BOMBED AND THIS 00027750 00095 C ROUTINE RETURNS. IF ONLY 1 WAS FOUND, AN ERROR IS ISSUED 00027760 00096 C AND PROCESSING CONTINUES. 00027770 00097 C 00027780 00098 C 00027790 00099 600 IF(COUNT.GT.0) GO TO 700 00027800 00100 CALL NDT14 (0,802,3) 00027810 00101 GO TO 900 00027820 00102 700 IF(COUNT.EQ.1.AND.PSSWT.NE.5) CALL NDT14 (0,803,1) 00027830 00103 C 00027840 00104 C 00027850 00105 C THE TWO RESERVED WORDS OF LITBL ARE SET HERE. THE FIRST 00027860 00106 C SIMPLY POINTS TO THE SECOND AND THE SECOND CONTAINS THE 00027870 00107 C NUMBER OF ENTRIES IN THIS TABLE CARD. 00027880 00108 C 00027890 00109 C 00027900 00110 900 LITBL(SAVE+1)=COUNT 00027910 00111 LITBL(SAVE)=SAVE+1 00027920 00112 C 00027930 NDT15 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 C 00027940 00114 C TWO INSTRUCTIONS OF OBJECT CODE ARE PRODUCED HERE: 00027950 00115 C L -SAVE 00027960 00116 C S VNUM (OF THIS TABLE VARIABLE) 00027970 00117 C THIS PREVENTS THE TABLE FROM BEING LOST DURING RELOCATION 00027980 00118 C AND PROVIDES A METHOD BY WHICH THE TABLE INSTRUCTION CAN 00027990 00119 C REFERENCE THE DATA. OBJECT CODE IS NOT PRODUCED IF IN RERUN 00028000 00120 C MODE. 00028010 00121 C 00028020 00122 C 00028030 00123 IF(PSSWT.EQ.5.OR.TOKEN(4).EQ.24576) GO TO 1000 00028040 00124 OBJPT=8 00028050 00125 OBJCD(3)=15 00028060 00126 OBJCD(4)=CRSMT 00028070 00127 OBJCD(5)=1 00028080 00128 OBJCD(6)=-SAVE 00028090 00129 OBJCD(7)=2 00028100 00130 PNTR=MOD(TOKEN(4),4096)+1 00028110 00131 CALL NDT41 (SYMTB(1,PNTR)) 00028120 00132 OBJCD(8)=SYM(14) 00028130 00133 1000 RETURN 00028140 00134 END 00028160 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 LITCT +25 TOKPT +524 CRSMT +1722 OBJPT +1222 PSSWT +15 EQPOS +1724 SUBPROGRAMS CALLED MOD. NDT08 NDT14 NDT41 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] SAVE 1 PNTR 2 POS 3 COUNT 4 .O0000 5 START 6 TEMPORARIES .A0016 7 .Q0000 10 CARD1 19# 25# CARD2 19# 25# COUNT 23# 40# 67 67# 99 102 110 CRSET 19# 25# CRSMT 23# 28# 126 DEF 19# 25# EQCHN 19# 25# EQPOS 23# 29# 55 56 ERROR 19# 25# FCTN 19# 25# LITBL 18# 25# 110# 111# LITCT 23# 28# 41 42 42# MOD. 130 NDT08 43 NDT14 76 86 89 100 102 NDT15 5# NDT41 131 OBJCD 19# 25# 29# 125# 126# 127# 128# 129# 132# OBJPT 23# 29# 124# OPER 19# 25# PNTR 23# 130# 131 POS 23# 56# 57 58 58# 59 60 69 76 85 86 88 89 90 90# PSSWT 23# 29# 102 123 PTRS 19# 25# 28# 29# RMAX 18# 25# RMIN 18# 25# SAVE 23# 41# 110 111 128 START 23# 57# 85 SUBSC 19# 25# SYM 19# 25# 132 SYMTB 19# 25# 131 131# TITLE 19# 25# TMAP 19# 25# 28# 29# 76 76# 86 86# 89 89# TOKEN 19# 25# 28# 60 69 88 123 130 TOKPT 23# 28# 59 85 TYPCT 19# 25# XREF 19# 25# 1000P 123 133# 150P 57# 200P 58# 68 77 87 88 91 300P 60 69# 400P 69 85# 500P 85 88# 600P 59 99# 700P 99 102# 900P 55 101 110# NDT15 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00028170 00002 C * 00028180 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00028190 00004 C PROGRAM AUTHOR - THOMAS L EVERMAN JR * 00028200 00005 C * 00028210 00006 C THIS PROGRAM PRODUCES OBJECT CODE FOR EQUATIONS. * 00028220 00007 C * 00028230 00008 C***************************************************************** 00028240 00009 SUBROUTINE NDT16 00028250 00010 REAL*8 RMIN,RMAX,LITBL(8192) 00028260 00011 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00028270 00012 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00028280 00013 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00028290 00014 3SYMTB(5,4096) 00028300 00015 INTEGER OPSTK(50),HISTK(50),VASTK(50),NEWOP,NEWHI,OBJPT,EQNCD 00028310 00016 INTEGER CRSMT,STYPE,TOKPT,VAPNT,OHPNT,FNON,PNEST,LAST,EQOCC,PNT 00028320 00017 INTEGER TOKE1,TOKE2,VNUM,NXTOP(10),NXTHI(10),NXLST(10),CKLST(10) 00028330 00018 INTEGER UMIN,FUNC,ACC,OPCOD,TEMP,BRNCH,OPRND,I,STARG,ARGNM,POS 00028340 00019 INTEGER COMMA,SA,VALCT,CBIT 00028350 00020 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00028360 00021 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00028370 00022 2SYMTB,LITBL 00028380 00023 EQUIVALENCE (OBJPT,OBJCD(1)),(EQNCD,ERROR(1)),(CRSMT,TMAP(1)), 00028390 00024 1(STYPE,TOKEN(1)),(TOKPT,TOKEN(3)),(VNUM,SYM(14)), 00028400 00025 2(I,BRNCH),(VASTK(1),XREF(1)),(CBIT,TOKEN(2)) 00028410 00026 EQUIVALENCE (VALCT,PTRS(20)) 00028420 00027 C***************************************************************** 00028430 00028 C * 00028440 00029 C OPSTK IS THE OPERATION STACK * 00028450 00030 C HISTK IS THE ASSOCIATED HIERARCHY STACK * 00028460 00031 C VASTK IS THE VARIABLE STACK * 00028470 00032 C NEWOP IS THE LATEST OPERATION ENCOUNTERED. * 00028480 00033 C NEWHI IS THE HIERARCHY OF THE NEW OPERATION. * 00028490 00034 C THE DATA AREAS HAVE VALUES FOR THEIR ELEMENTS WHICH ARE IN * 00028500 00035 C ONE TO ONE CORRESPONDENCE TO THE OPERS ARRAY. * 00028510 00036 C NXTOP CONTAINS A CODE FOR THE OPERATOR. * 00028520 00037 C NXTHI CONTAINS A HIERARCHY FOR THE OPERATOR. * 00028530 00038 C CKLST IS USED AS A COMPARISON FOR CONTEXT ANALYSIS. * 00028540 00039 C NXLST IS USED TO SET UP FOR FUTURE CONTEXT ANALYSIS. * 00028550 00040 C THE ASSOCIATION OF THESE ELEMENTS IS AS FOLLOWS: * 00028560 00041 C 1 - '.' 4 - '*' 7 - '(' 9 - ',' * 00028570 00042 C 2 - '+' 5 - '/' 8 - ')' 10 - 'EXP' * 00028580 00043 C 3 - '-' 6 - '=' * 00028590 00044 C UMIN REPRESENTS THE UNARY MINUS OPERATION * 00028600 00045 C FUNC REPRESENTS A PERFORM FUNCTION OPERATION * 00028610 00046 C ACC IS USED TO DENOTE A RESULT IN THE ACCUMULATOR. * 00028620 00047 C * 00028630 00048 C***************************************************************** 00028640 00049 DATA NXTOP /0,3,4,5,6,2,0,0,1,7/ 00028650 00050 DATA NXTHI /0,2,2,3,3,1,0,0,1,5/ 00028660 00051 DATA CKLST /0,2,2,1,1,3,0,0,1,2/ 00028670 00052 DATA NXLST /0,2,2,2,2,1,0,0,1,2/ 00028680 00053 DATA COMMA /1/, UMIN /8/, FUNC /9/, ACC /0/ 00028690 00054 C***************************************************************** 00028700 00055 C * 00028710 00056 C INITIALIZATION OCCURS BELOW: * 00028720 NDT16 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C OBJPT IS THE OBJCD BUFFER POINTER. * 00028730 00058 C NDT46 IS CALLED TO PLACE THE STATEMENT NUMBER IN OBJCD. * 00028740 00059 C OPSTK AND HISTK ARE SET TO INDICATE EQUATION START. * 00028750 00060 C OHPNT IS THE LENGTH OF OPSTK AND HISTK * 00028760 00061 C TEMP IS THE NUMBER OF TEMPORARY LOCATION ALLOCATED. * 00028770 00062 C FNON IS A FUNCTION NESTING COUNTER. * 00028780 00063 C VAPNT IS THE LENGTH OF THE VARIABLE STACK * 00028790 00064 C PNEST IS THE DEPTH OF PAREN NESTING. * 00028800 00065 C LAST IS THE TYPE OF THE LAST TOKEN ENCOUNTERED. * 00028810 00066 C 0 - NEXT TOKEN MUST BE OPERATION. * 00028820 00067 C 1 - LEFT PAREN OR COMMA, ALLOW UNARY - OPERATION. * 00028830 00068 C 2 - OPERATOR, NO OPERATORS MAY FOLLOW. * 00028840 00069 C EQOCC DENOTES THE OCCURRENCE OF DUPLICATE EQUAL SIGNS. * 00028850 00070 C PNT IS A POINTER TO THE CURRENT TOKEN. * 00028860 00071 C * 00028870 00072 C***************************************************************** 00028880 00073 OBJPT = 2 00028890 00074 CALL NDT46 (15, CRSMT) 00028900 00075 OPSTK(1) = 1 00028910 00076 HISTK(1) = 0 00028920 00077 OHPNT = 1 00028930 00078 FNON = 0 00028940 00079 VAPNT = 0 00028950 00080 PNEST = 0 00028960 00081 LAST = 2 00028970 00082 EQOCC = 1 00028980 00083 PNT = 3 00028990 00084 TEMP = 0 00029000 00085 C***************************************************************** 00029010 00086 C * 00029020 00087 C DETERMINE WHAT ACTION TO TAKE FOR NEXT TOKEN. * 00029030 00088 C SEPARATE TOKEN INTO TOKE1 AND TOKE2. TOKE1 INDICATES TOKEN * 00029040 00089 C TYPE. TOKE2 IS THE TOKEN POINTER. * 00029050 00090 C * 00029060 00091 C***************************************************************** 00029070 00092 100 PNT = PNT + 1 00029080 00093 IF (PNT .GT. TOKPT) GO TO 200 00029090 00094 TOKE1 = TOKEN(PNT) / 4096 00029100 00095 TOKE2 = MOD (TOKEN(PNT), 4096) 00029110 00096 C***************************************************************** 00029120 00097 C * 00029130 00098 C TOKEN IS AN OPERATOR. BRANCH TO THE APPROPRIATE OPERATOR * 00029140 00099 C ACTION ROUTINE. * 00029150 00100 C * 00029160 00101 C***************************************************************** 00029170 00102 IF (TOKE1 .EQ. 7) GO TO (100,400,400,700,700,500,800, 00029180 00103 11100,600,700), TOKE2 00029190 00104 C***************************************************************** 00029200 00105 C * 00029210 00106 C TOKEN IS NOT OPERATOR, THEREFORE IT SHOULD BE ENTERED INTO * 00029220 00107 C THE VARIABLE STACK. IF TOKEN IS NEGATIVE, SET VNUM TO * 00029230 00108 C TOKEN FOR NUMERIC LITERAL. * 00029240 00109 C * 00029250 00110 C***************************************************************** 00029260 00111 IF (TOKEN(PNT) .GE. 0) GO TO 125 00029270 00112 VNUM = TOKEN(PNT) 00029280 NDT16 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 GO TO 160 00029290 00114 C***************************************************************** 00029300 00115 C * 00029310 00116 C TOKEN INDICATES VARIABLE OR FUNCTION. ADD 1 TO TOKE1 TO * 00029320 00117 C OBTAIN APPROPRIATE INDEX FOR COMPUTED GO TO. TOKE1 VALUES * 00029330 00118 C ARE AS FOLLOWS: * 00029340 00119 C 1 - 5: VALID VARIABLES OF VARIOUS SUBSCRIPTS. * 00029350 00120 C 6: FUNCTION * 00029360 00121 C 7: INVALID VARIABLE * 00029370 00122 C IF INVALID VARIABLE OR FUNCTION, SET VNUM TO 4999. * 00029380 00123 C FOR FUNCTION, SET VNUM TO INDICATE BOTH FUNCTION OPCODE * 00029390 00124 C AND THE NUMBER OF REQUIRED SAVE AREAS, THEN INCREMENT BY * 00029400 00125 C 5000 FOR IDENTIFICATION IN VASTK. IF VALID VARIABLE, * 00029410 00126 C VNUM WILL BE SET IN UNPACK SUBROUTINE. AFTER VNUM IS * 00029420 00127 C DETERMINED, ENTER IT IN VASTK. ALSO CHECK FOR MISSING * 00029430 00128 C OPERATOR ERROR. * 00029440 00129 C * 00029450 00130 C***************************************************************** 00029460 00131 125 TOKE1 = TOKE1 + 1 00029470 00132 GO TO (150,150,150,150,150,140,130), TOKE1 00029480 00133 130 VNUM = 4999 00029490 00134 GO TO 160 00029500 00135 140 IF (TOKE2 .EQ. 0) GO TO 130 00029510 00136 VNUM = FCTN(5,TOKE2) * 100 + FCTN(3,TOKE2) + 5000 00029520 00137 GO TO 160 00029530 00138 150 CALL NDT41 (SYMTB(1,TOKE2 + 1)) 00029540 00139 160 VAPNT = VAPNT + 1 00029550 00140 VASTK(VAPNT) = VNUM 00029560 00141 IF (LAST .EQ. 0) CALL NDT14 (TMAP(PNT), 406, 3) 00029570 00142 LAST = 0 00029580 00143 GO TO 100 00029590 00144 C***************************************************************** 00029600 00145 C * 00029610 00146 C END OF TOKEN STRING HAS BEEN ENCOUNTERED. * 00029620 00147 C SET NEWOP AND NEWHI TO 1 TO FORCE COMPILATION OF STACKS. * 00029630 00148 C CHECK FOR PAREN BALANCE (403). * 00029640 00149 C MAKE SURE SOMETHING FOLLOWS EQUAL SIGN (404). * 00029650 00150 C DO NOT COMPILE IF THERE HAVE BEEN CRITICAL ERRORS. * 00029660 00151 C BRANCH TO COMPILATION ROUTINES. * 00029670 00152 C * 00029680 00153 C***************************************************************** 00029690 00154 200 NEWOP = 1 00029700 00155 NEWHI = 0 00029710 00156 IF (TOKEN(PNT - 1) .EQ. 28678 .AND. EQOCC .EQ. 2) GO TO 300 00029720 00157 IF (LAST .NE. 0) CALL NDT14 (TMAP(PNT - 1), 402, 3) 00029730 00158 IF (PNEST .GT. 0) CALL NDT14 (CBIT, 403, 3) 00029740 00159 IF (EQNCD .GE. 3) GO TO 1500 00029750 00160 GO TO 1200 00029760 00161 300 CALL NDT14 (TMAP(PNT - 1), 404, 3) 00029770 00162 GO TO 1500 00029780 00163 C***************************************************************** 00029790 00164 C * 00029800 00165 C THE FOLLOWING STATEMENTS ARE EXECUTED WHEN A + OR - SIGN * 00029810 00166 C IS ENCOUNTERED. A CHECK IS MADE TO DETERMINE WHETHER THE * 00029820 00167 C SIGN IS A UNARY OPERATOR. IF A UNARY + OCCURS, IT IS * 00029830 00168 C IGNORED. A UNARY - CAUSES THE SETTING OF NEWOP AND NEWHI * 00029840 NDT16 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 00169 C AND A BRANCH TO THE COMPILATION ROUTINES. * 00029850 00170 C IF THE OPERATOR IS NOT UNARY, THE ORDINARY OPERATOR * 00029860 00171 C ROUTINE IS EXECUTED. * 00029870 00172 C * 00029880 00173 C***************************************************************** 00029890 00174 400 IF (LAST .NE. 1) GO TO 700 00029900 00175 LAST = 2 00029910 00176 IF (TOKE2 .EQ. 2) GO TO 100 00029920 00177 NEWOP = UMIN 00029930 00178 NEWHI = 4 + PNEST 00029940 00179 GO TO 1200 00029950 00180 C***************************************************************** 00029960 00181 C * 00029970 00182 C THE CODING BELOW IS EXECUTED TO DETERMINE THE EXISTENCE * 00029980 00183 C OF DUPLICATE EQUAL SIGNS. * 00029990 00184 C * 00030000 00185 C***************************************************************** 00030010 00186 500 IF (EQOCC .NE. 1) CALL NDT14 (TMAP(PNT), 401, 3) 00030020 00187 EQOCC = EQOCC + 1 00030030 00188 GO TO 700 00030040 00189 C***************************************************************** 00030050 00190 C * 00030060 00191 C THE CODING BELOW GIVES AN ERROR WHEN A COMMA OCCURS OUTSIDE* 00030070 00192 C THE ARGUMENT LIST OF A FUNCTION. * 00030080 00193 C * 00030090 00194 C***************************************************************** 00030100 00195 600 IF (FNON .LE. 0) CALL NDT14 (TMAP(PNT), 407, 3) 00030110 00196 C***************************************************************** 00030120 00197 C * 00030130 00198 C THE FOLLOWING CODE IS EXECUTED FOR ALL OPERATORS BUT PARENS* 00030140 00199 C A COMPARISON TO CKLST RAISES ERROR CONDITIONS FOR IMPROPER * 00030150 00200 C OPERATOR SEQUENCES. NEWOP AND NEWHI ARE SET TO THE PROPER * 00030160 00201 C VALUES FOR THE GIVEN OPERATOR. THE VALUE OF LAST IS THEN * 00030170 00202 C SET FOR EVALUATION WHEN THE NEXT TOKEN IS ENCOUNTERED. * 00030180 00203 C * 00030190 00204 C***************************************************************** 00030200 00205 700 IF (LAST .GE. CKLST(TOKE2)) CALL NDT14 (TMAP(PNT), 402, 3) 00030210 00206 NEWOP = NXTOP(TOKE2) 00030220 00207 NEWHI = NXTHI(TOKE2) + PNEST 00030230 00208 LAST = NXLST(TOKE2) 00030240 00209 GO TO 1200 00030250 00210 C***************************************************************** 00030260 00211 C * 00030270 00212 C A LEFT PAREN HAS BEEN ENCOUNTERED. INCREMENT FNON IF IT * 00030280 00213 C IS ALREADY IN FUNCTION MODE. IF LAST IS 0, THERE IS A * 00030290 00214 C POSSIBLE FUNCTION. * 00030300 00215 C * 00030310 00216 C***************************************************************** 00030320 00217 800 IF (FNON .GT. 0) FNON = FNON + 1 00030330 00218 IF (LAST .EQ. 0) GO TO 900 00030340 00219 C***************************************************************** 00030350 00220 C * 00030360 00221 C NO FUNCTION HAS OCCURED. SET LAST TO 1 TO ALLOW UNARY OP. * 00030370 00222 C INCREMENT PAREN NESTING AND GET NEXT TOKEN. (THE PAREN * 00030380 00223 C NESTING INCREMENT IS 10 SO THAT IT IS GREATER THAN THE * 00030390 00224 C HIERARCHY OF ANY OPERATION. THEREFORE, WHEN PNEST IS ADDED* 00030400 NDT16 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-4 00225 C TO THE HIERARCHY OF ANY OPERATION, AN OPERATION WITHIN * 00030410 00226 C PARENS WILL HAVE A GREATER HIERARCHY.) * 00030420 00227 C * 00030430 00228 C***************************************************************** 00030440 00229 850 LAST = 1 00030450 00230 PNEST = PNEST + 10 00030460 00231 GO TO 100 00030470 00232 C***************************************************************** 00030480 00233 C * 00030490 00234 C DETERMINE WHETHER A FUNCTION EXISTS BY CHECKING VASTK. * 00030500 00235 C PREVIOUS TOKEN MAY BE VARIABLE OR LITERAL. * 00030510 00236 C * 00030520 00237 C***************************************************************** 00030530 00238 900 IF (VASTK(VAPNT) .GE. 4999) GO TO 1000 00030540 00239 CALL NDT14 (TMAP(PNT), 406, 3) 00030550 00240 GO TO 850 00030560 00241 C***************************************************************** 00030570 00242 C * 00030580 00243 C PAREN HAS BEEN DETERMINED TO INDICATE FUNCTION. * 00030590 00244 C ENTER IT IN OPSTK AND HISTK, INCREMENT PAREN NESTING, * 00030600 00245 C AND SET FNON IF IT IS NOT ALREADY SET. * 00030610 00246 C * 00030620 00247 C***************************************************************** 00030630 00248 1000 OHPNT = OHPNT + 1 00030640 00249 OPSTK(OHPNT) = FUNC 00030650 00250 HISTK(OHPNT) = 6 + PNEST 00030660 00251 PNEST = PNEST + 10 00030670 00252 IF (FNON .EQ. 0) FNON = 1 00030680 00253 LAST = 1 00030690 00254 GO TO 100 00030700 00255 C***************************************************************** 00030710 00256 C * 00030720 00257 C TOKEN INDICATES A RIGHT PAREN. DECREMENT NESTING. DECREMEN* 00030730 00258 C FNON IF NECESSARY. GIVE PAREN IMBALANCE ERROR (405) AND * 00030740 00259 C INVALID SEQUENCE ERROR(402). * 00030750 00260 C * 00030760 00261 C***************************************************************** 00030770 00262 1100 PNEST = PNEST - 10 00030780 00263 IF (FNON .GT. 0) FNON = FNON - 1 00030790 00264 IF (PNEST .LT. 0) CALL NDT14 (TMAP(PNT), 405, 3) 00030800 00265 IF (LAST .GE. 1) CALL NDT14 (TMAP(PNT), 402, 3) 00030810 00266 LAST = 0 00030820 00267 GO TO 100 00030830 00268 C***************************************************************** 00030840 00269 C * 00030850 00270 C THE FOLLOWING PROGRAM SECTION PRODUCES OBJECT CODE FROM THE* 00030860 00271 C STACK INFORMATION. THE HIERARCHY OF THE NEW OPERATION IS * 00030870 00272 C COMPARED TO THE HIERARCHY OF THE TOP STACK OPERATION. IF * 00030880 00273 C NEWHI IS LESS OR EQUAL THE OPERATIONS IN THE STACK ARE * 00030890 00274 C COMPILED UNTIL NEWHI IS GREATER THAN THE TOP STACK ELEMENT.* 00030900 00275 C WHEN NEWHI IS GREATER, NEWOP AND NEWHI ARE ADDED TO THE * 00030910 00276 C RESPECTIVE STACKS. * 00030920 00277 C * 00030930 00278 C***************************************************************** 00030940 00279 1200 IF (EQNCD .GE. 3) GO TO 100 00030950 00280 IF (NEWHI .GT. HISTK(OHPNT)) GO TO 1400 00030960 NDT16 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-5 00281 BRNCH = OPSTK(OHPNT) 00030970 00282 GO TO (1500,1600,1700,1700,1700,1700,1700,2000,2100), BRNCH 00030980 00283 1400 IF (NEWOP .EQ. COMMA) GO TO 100 00030990 00284 OHPNT = OHPNT + 1 00031000 00285 OPSTK(OHPNT) = NEWOP 00031010 00286 HISTK(OHPNT) = NEWHI 00031020 00287 GO TO 100 00031030 00288 1500 CALL NDT85 00031040 00289 RETURN 00031050 00290 C***************************************************************** 00031060 00291 C * 00031070 00292 C COMPILE = * 00031080 00293 C FIRST CHECK TO SEE IF ACC MUST BE LOADED. THIS OCCURS ONLY * 00031090 00294 C IN THE CASE A=B. STORE THE CONTENTS OF THE ACCUMULATOR IN * 00031100 00295 C THE FIRST ADDRESS IN THE STACK. * 00031110 00296 C * 00031120 00297 C***************************************************************** 00031130 00298 1600 IF (VASTK(2) .NE. ACC) CALL NDT46 (1, VASTK(2)) 00031140 00299 CALL NDT46 (2, VASTK(1)) 00031150 00300 OHPNT = OHPNT - 1 00031160 00301 GO TO 1200 00031170 00302 C***************************************************************** 00031180 00303 C * 00031190 00304 C COMPILE + - * / OR ** * 00031200 00305 C INITIAL OPCODE IS EQUAL TO THE BRNCH VALUE FROM COMP GO TO.* 00031210 00306 C NDT28 DETERMINES WHETHER TEMPORARY STORAGE IS NEEDED. AFTE* 00031220 00307 C NDT28 IS CALLED THE ACCUMULATOR WILL APPEAR IN VASTK AT THE* 00031230 00308 C TOP, 2ND FROM THE TOP, OR NOT AT ALL. * 00031240 00309 C FOR ACC AT TOP OF VASTK: * 00031250 00310 C 1) CHANGE OPCODE OF - / OR ** TO A REVERSE OPERATION. * 00031260 00311 C 2) OPERAND IS ADDRESS 2ND FROM TOP OF VASTK. * 00031270 00312 C FOR ACC AT 2ND POSITION FROM THE TOP: * 00031280 00313 C 1) NORMAL OPERATION IS COMPILED. * 00031290 00314 C 2) OPERAND IS ADDRESS AT TOP OF VASTK. * 00031300 00315 C WHEN ACC DOES NOT OCCUR IN TOP TWO POSITIONS: * 00031310 00316 C 1) GENERATE A LOAD INSTRUCTION WHOSE OPERAND IS THE * 00031320 00317 C ADDRESS SECOND FROM THE TOP OF VASTK. * 00031330 00318 C 2) GENERATE A NORMAL OPERATION FOR THE ADDRESS AT THE * 00031340 00319 C TOP OF VASTK. * 00031350 00320 C OPCOD IS THE OP CODE. * 00031360 00321 C OPRND IS THE OPERAND. * 00031370 00322 C WHEN FINISHED, DECREMENT ALL STACK POINTERS AND PLACE * 00031380 00323 C ACC INDICATOR AT THE TOP OF VASTK. * 00031390 00324 C * 00031400 00325 C***************************************************************** 00031410 00326 1700 OPCOD = BRNCH 00031420 00327 CALL NDT28 (TEMP, VAPNT - 2) 00031430 00328 IF (VASTK(VAPNT) .EQ. ACC) GO TO 1800 00031440 00329 IF (VASTK(VAPNT - 1) .NE. ACC) CALL NDT46 (1, VASTK(VAPNT - 1)) 00031450 00330 OPRND = VASTK(VAPNT) 00031460 00331 GO TO 1900 00031470 00332 1800 IF (OPCOD .EQ. 4) OPCOD = 8 00031480 00333 IF (OPCOD .EQ. 6) OPCOD = 9 00031490 00334 IF (OPCOD .EQ. 7) OPCOD = 10 00031500 00335 OPRND = VASTK(VAPNT - 1) 00031510 00336 1900 CALL NDT46 (OPCOD, OPRND) 00031520 NDT16 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-6 00337 VAPNT = VAPNT - 1 00031530 00338 VASTK(VAPNT) = ACC 00031540 00339 OHPNT = OHPNT - 1 00031550 00340 GO TO 1200 00031560 00341 C***************************************************************** 00031570 00342 C * 00031580 00343 C COMPILE UNARY * 00031590 00344 C NDT28 IS CALLED FOR TEMPORARY STORAGE ALLOCATION. * 00031600 00345 C STORE INSTRUCTION GENERATED IN NDT28 WILL ZERO ACC. * 00031610 00346 C NEGATION OCCURS BY SUBTRACTING DATA FROM ACC. * 00031620 00347 C OPSTK IS DECREMENTED AND RESULT IS IN ACC AT TOP OF VASTK. * 00031630 00348 C * 00031640 00349 C***************************************************************** 00031650 00350 2000 CALL NDT28 (TEMP, VAPNT) 00031660 00351 CALL NDT46 (4, VASTK(VAPNT)) 00031670 00352 VASTK(VAPNT) = ACC 00031680 00353 OHPNT = OHPNT - 1 00031690 00354 GO TO 1200 00031700 00355 C***************************************************************** 00031710 00356 C * 00031720 00357 C COMPILE FUNCTIONS * 00031730 00358 C NDT28 IS CALLED TO GENERATE REQUIRED TEMPORARY STORAGE. * 00031740 00359 C THE VARIABLE STACK IS SEARCHED DOWNWARD FROM THE TOP * 00031750 00360 C UNTIL AN ADDRESS GREATER THAN 5000 INDICATES A FUNCTION. * 00031760 00361 C THE FUNCTION ARGUMENTS ARE CONTAINED IN THE ADDRESSES * 00031770 00362 C IN VASTK ABOVE THE FUNCTION. THEY ARE LOADED AND STORED * 00031780 00363 C IN VARIABLE ARRAY LOCATIONS 17 - 21, AS NEEDED. THE * 00031790 00364 C VASTK IS DEMODULATED TO OBTAIN THE FUNCTION OPCODE AND * 00031800 00365 C THE SAVE AREA ADDRESS AS THE OPRND. INCREMENT THE VALCT * 00031810 00366 C TO THE END OF THE FUNCTION'S SAVE AREA. * 00031820 00367 C * 00031830 00368 C***************************************************************** 00031840 00369 2100 CALL NDT28 (TEMP, VAPNT) 00031850 00370 DO 2200 I = 1, VAPNT 00031860 00371 POS = VAPNT + 1 - I 00031870 00372 IF (VASTK(POS) .GE. 5000) GO TO 2300 00031880 00373 2200 CONTINUE 00031890 00374 2300 STARG = POS + 1 00031900 00375 ARGNM = 16 00031910 00376 DO 2400 I = STARG, VAPNT 00031920 00377 ARGNM = ARGNM + 1 00031930 00378 CALL NDT46 (1, VASTK(I)) 00031940 00379 2400 CALL NDT46 (2, ARGNM) 00031950 00380 OPCOD = VASTK(POS) - 5000 00031960 00381 SA = OPCOD / 100 00031970 00382 OPCOD = MOD (OPCOD, 100) 00031980 00383 IF (SA .EQ. 0) CALL NDT46 (OPCOD, 0) 00031990 00384 IF (SA .NE. 0) CALL NDT46 (OPCOD, VALCT + 1) 00032000 00385 VALCT = VALCT + SA 00032010 00386 VAPNT = POS 00032020 00387 VASTK(VAPNT) = ACC 00032030 00388 OHPNT = OHPNT - 1 00032040 00389 GO TO 1200 00032050 00390 END 00032070 NDT16 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-7 EQUIVALENCED VARIABLES ( I 1 BRNCH 1 ) COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 OBJPT +1222 EQNCD +1102 CRSMT +1722 STYPE +522 TOKPT +524 VNUM +346 VASTK +1602 CBIT +523 VALCT +27 SUBPROGRAMS CALLED NDT46 MOD. NDT85 NDT14 NDT28 NDT41 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] COMMA 2 NEWHI 3 ARGNM 4 OPCOD 5 VAPNT 6 HISTK 7 ACC 71 UMIN 72 OHPNT 73 BRNCH 1 LAST 74 POS 75 OPRND 76 STARG 77 OPSTK 100 NXTOP 162 SA 174 .S0001 175 .S0000 176 NEWOP 177 EQOCC 200 TOKE2 201 TEMP 202 PNT 203 FNON 204 NXTHI 205 I 1 NXLST 217 TOKE1 231 .O0000 232 CKLST 233 FUNC 245 PNEST 246 TEMPORARIES .A0016 247 .Q0000 250 ACC 18# 53# 298 328 329 338 352 387 ARGNM 18# 375# 377 377# 379 379# BRNCH 18# 23# 281# 282 326 CARD1 11# 20# CARD2 11# 20# CBIT 19# 23# 158 158# CKLST 17# 51# 205 COMMA 19# 53# 283 CRSET 11# 20# CRSMT 16# 23# 74 74# DEF 11# 20# EQCHN 11# 20# EQNCD 15# 23# 159 279 EQOCC 16# 82# 156 186 187 187# ERROR 11# 20# 23# FCTN 11# 20# 136 FNON 16# 78# 195 217 217# 252 252# 263 263# FUNC 18# 53# 249 HISTK 15# 76# 250# 280 286# I 18# 23# 370# 371 376# 378 LAST 16# 81# 141 142# 157 174 175# 205 208# 218 229# 253# 265 266# LITBL 10# 20# MOD. 95 382 NDT14 141 157 158 161 186 195 205 239 264 265 NDT16 9# NDT28 327 350 369 NDT41 138 NDT46 74 298 299 329 336 351 378 379 383 384 NDT85 288 NEWHI 15# 155# 178# 207# 280 286 NEWOP 15# 154# 177# 206# 283 285 NXLST 17# 52# 208 NXTHI 17# 50# 207 NXTOP 17# 49# 206 OBJCD 11# 20# 23# OBJPT 15# 23# 73# OHPNT 16# 77# 248 248# 249 250 280 281 284 284# 285 286 300 300# 339 339# 353 353# 388 388# OPCOD 18# 326# 332 332# 333 333# 334 334# 336 336# 380# 381 382 382# 383 383# 384 384# OPER 11# 20# OPRND 18# 330# 335# 336 336# OPSTK 15# 75# 249# 281 285# PNEST 16# 80# 158 178 207 230 230# 250 251 251# 262 262# 264 PNT 16# 83# 92 92# 93 94 95 111 112 141 156 157 161 186 195 205 239 264 265 POS 18# 371# 372 374 380 386 PTRS 11# 20# 26# RMAX 10# 20# RMIN 10# 20# SA 19# 381# 383 384 385 STARG 18# 374# 376 STYPE 16# 23# SUBSC 11# 20# SYM 11# 20# 23# SYMTB 11# 20# 138 138# TEMP 18# 84# 327 327# 350 350# 369 369# TITLE 11# 20# TMAP 11# 20# 23# 141 141# 157 157# 161 161# 186 186# 195 195# 205 205# 239 239# 264 264# 265 265# TOKE1 17# 94# 102 131 131# 132 TOKE2 17# 95# 102 135 136 138 176 205 206 207 208 TOKEN 11# 20# 23# 94 95 111 112 156 TOKPT 16# 23# 93 TYPCT 11# 20# UMIN 18# 53# 177 VALCT 19# 26# 384 385 385# VAPNT 16# 79# 139 139# 140 238 327 328 329 330 335 337 337# 338 350 350# 351 352 369 369# 370 371 376 386# 387 VASTK 15# 23# 140# 238 298 298# 299 299# 328 329 329# 330 335 338# 351 351# 352# 372 378 378# 380 387# VNUM 17# 23# 112# 133# 136# 140 XREF 11# 20# 23# 1000P 238 248# 100P 92# 102 143 176 231 254 267 279 283 287 1100P 102 262# 1200P 160 179 209 279# 301 340 354 389 125P 111 131# 130P 132 133# 135 1400P 280 283# 140P 132 135# 1500P 159 162 282 288# 150P 132 138# 1600P 282 298# 160P 113 134 137 139# 1700P 282 326# 1800P 328 332# 1900P 331 336# 2000P 282 350# 200P 93 154# 2100P 282 369# 2200P 370 373# 2300P 372 374# 2400P 376 379# 300P 156 161# 400P 102 174# 500P 102 186# 600P 102 195# 700P 102 174 188 205# 800P 102 217# 850P 229# 240 900P 218 238# NDT16 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00032080 00002 C * 00032090 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00032100 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY * 00032110 00005 C * 00032120 00006 C***************************************************************** 00032130 00007 SUBROUTINE NDT17 00032140 00008 C***************************************************************** 00032150 00009 C * 00032160 00010 C DEFAULT DOCUMENTATION GENERATOR * 00032170 00011 C * 00032180 00012 C * 00032190 00013 C THIS PROGRAM PREPARES THE DOCUMENTATION AREAS FOR THE CARD * 00032200 00014 C CURRENTLY IN CARD1. IT TAKES THE USER'S COMMENT FIELD AND * 00032210 00015 C PUTS IT IN THE DEF ARRAY. IF THE COMMENT FIELD IS BLANK, * 00032220 00016 C "NO DEFINITION PROVIDED" IS INSERTED. * 00032230 00017 C * 00032240 00018 C***************************************************************** 00032250 00019 REAL*8 RMIN,RMAX,LITBL(8192) 00032260 00020 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00032270 00021 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00032280 00022 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00032290 00023 3SYMTB(5,4096) 00032300 00024 INTEGER DEFBT,DOCBT,DASH(3),NODEF(22),BLANK,CDST1, 00032310 00025 1LENTH,LOOP,LOOP1,XCHAR,POS,PNTR,CDATA(144),STYPE 00032320 00026 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00032330 00027 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00032340 00028 2SYMTB,LITBL 00032350 00029 EQUIVALENCE (DEFBT,SYM(11)),(DOCBT,SYM(12)),(BLANK,DASH(1)), 00032360 00030 1(CDST1,CDATA(142)),(STYPE,TOKEN(1)) 00032370 00031 EQUIVALENCE (CDATA(1),OBJCD(1)) 00032380 00032 DATA DASH /' ','-',' '/ 00032390 00033 DATA NODEF /'N','O',' ','D','E','F','I','N','I','T','I','O', 00032400 00034 1 'N',' ','P','R','O','V','I','D','E','D'/ 00032410 00035 C***************************************************************** 00032420 00036 C * 00032430 00037 C THE FORMAT OF THE DEF ARRAY IS AS FOLLOWS: * 00032440 00038 C * 00032450 00039 C POSITION IN DEF * 00032460 00040 C 1 -- 6 10 --- 80 * 00032470 00041 C VARIABLE - DEFINITION FIELD * 00032480 00042 C * 00032490 00043 C * 00032500 00044 C FIRST, THE TOKEN MUST BE A LEGAL VARIABLE. TOKEN(4) WILL * 00032510 00045 C INDICATE IF THE TOKEN IS A VARIABLE. UNPACK THE TOKEN FROM* 00032520 00046 C THE SYMBOL TABLE, AND THE DEFINE BIT WILL TELL IF THE * 00032530 00047 C VARIBLE IS LEGAL. * 00032540 00048 C * 00032550 00049 C***************************************************************** 00032560 00050 IF (TOKEN(4) .LT. 0 .OR. TOKEN(4) .GT. 20479) GO TO 1100 00032570 00051 PNTR = MOD(TOKEN(4),4096) + 1 00032580 00052 CALL NDT41(SYMTB(1,PNTR)) 00032590 00053 IF (DEFBT .EQ. 0) GO TO 1100 00032600 00054 C***************************************************************** 00032610 00055 C * 00032620 00056 C IF A DEF CARD FOR THIS VARIABLE HAS BEEN ENCOUNTERED, OR * 00032630 NDT17 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C THE EQUATION IS FOR AN INITIAL VALUE AND THE DEFINING * 00032640 00058 C EQUATION'S COMMENT FIELD HAS ALREADY BEEN USED, DO * 00032650 00059 C NOT PROCESS THIS CARD'S COMMENT FIELD. * 00032660 00060 C * 00032670 00061 C BEGIN PROCESSING BY PUTTING THE VARIABLE NAME INTO THE * 00032680 00062 C DEF ARRAY, ALONG WITH THE DASH. * 00032690 00063 C * 00032700 00064 C***************************************************************** 00032710 00065 IF (DOCBT.EQ.1.OR.(STYPE.EQ.4.AND.DEF(10).NE.0)) GO TO 1100 00032720 00066 DO 50 XCHAR = 1, 80 00032730 00067 50 DEF(XCHAR) = BLANK 00032740 00068 DO 100 XCHAR = 1, 6 00032750 00069 100 DEF(XCHAR) = SYM(XCHAR) 00032760 00070 DO 200 XCHAR = 1, 3 00032770 00071 200 DEF(XCHAR + 6) = DASH(XCHAR) 00032780 00072 C***************************************************************** 00032790 00073 C * 00032800 00074 C THE USER'S COMMENT FIELD BEGINS AT THE FIRST NON-BLANK * 00032810 00075 C CHARACTER AFTER THE FIRST BLANK AFTER THE EQUATION ON * 00032820 00076 C THIS CARD. * 00032830 00077 C * 00032840 00078 C***************************************************************** 00032850 00079 DO 400 LOOP = CDST1, 72 00032860 00080 IF (CARD1(LOOP) .EQ. BLANK) GO TO 500 00032870 00081 400 CONTINUE 00032880 00082 GO TO 700 00032890 00083 500 DO 600 LOOP1 = LOOP, 72 00032900 00084 IF (CARD1(LOOP1) .NE. BLANK) GO TO 900 00032910 00085 600 CONTINUE 00032920 00086 C***************************************************************** 00032930 00087 C * 00032940 00088 C IF THE FIELD IS BLANK, PUT THE DEFAULT MESSAGE INTO DEF. * 00032950 00089 C * 00032960 00090 C***************************************************************** 00032970 00091 700 DO 800 XCHAR = 1, 22 00032980 00092 800 DEF(XCHAR + 9) = NODEF(XCHAR) 00032990 00093 GO TO 1100 00033000 00094 C***************************************************************** 00033010 00095 C * 00033020 00096 C IF THE FIELD DID INDEED EXIST, PUT THE FIELD INTO DEF. * 00033030 00097 C * 00033040 00098 C***************************************************************** 00033050 00099 900 LENTH = 73 - LOOP1 00033060 00100 DO 1000 XCHAR = 1, LENTH 00033070 00101 POS = LOOP1 + XCHAR - 1 00033080 00102 1000 DEF(XCHAR + 9) = CARD1(POS) 00033090 00103 C***************************************************************** 00033100 00104 C * 00033110 00105 C RETURN SECTION * 00033120 00106 C * 00033130 00107 C***************************************************************** 00033140 00108 1100 RETURN 00033150 00109 END 00033170 NDT17 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 EQUIVALENCED VARIABLES ( BLANK 1 DASH 1 ) COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 DEFBT +343 DOCBT +344 STYPE +522 CDATA +1222 CDST1 +1437 SUBPROGRAMS CALLED MOD. NDT41 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] NODEF 4 LOOP1 32 XCHAR 33 PNTR 34 LOOP 35 POS 36 BLANK 1 .S0006 37 .S0005 40 .S0004 41 .S0003 42 LENTH 43 .S0002 44 .S0001 45 .S0000 46 DASH 1 .O0000 47 TEMPORARIES .A0016 50 .Q0000 51 BLANK 24# 29# 67 80 84 CARD1 20# 26# 80 84 102 CARD2 20# 26# CDATA 24# 29# 31# CDST1 24# 29# 79 CRSET 20# 26# DASH 24# 29# 32# 71 DEF 20# 26# 65 67# 69# 71# 92# 102# DEFBT 24# 29# 53 DOCBT 24# 29# 65 EQCHN 20# 26# ERROR 20# 26# FCTN 20# 26# LENTH 24# 99# 100 LITBL 19# 26# LOOP 24# 79# 80 83 LOOP1 24# 83# 84 99 101 MOD. 51 NDT17 7# NDT41 52 NODEF 24# 33# 92 OBJCD 20# 26# 31# OPER 20# 26# PNTR 24# 51# 52 POS 24# 101# 102 PTRS 20# 26# RMAX 19# 26# RMIN 19# 26# STYPE 24# 29# 65 SUBSC 20# 26# SYM 20# 26# 29# 69 SYMTB 20# 26# 52 52# TITLE 20# 26# TMAP 20# 26# TOKEN 20# 26# 29# 50 51 TYPCT 20# 26# XCHAR 24# 66# 67 68# 69 70# 71 91# 92 100# 101 102 XREF 20# 26# 1000P 100 102# 100P 68 69# 1100P 50 53 65 93 108# 200P 70 71# 400P 79 81# 500P 80 83# 50P 66 67# 600P 83 85# 700P 82 91# 800P 91 92# 900P 84 99# NDT17 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00033180 00002 C PROGRAM AUTHOR - GARY PELKEY 00033190 00003 C 00033200 00004 C 00033210 00005 SUBROUTINE NDT18 00033220 00006 C 00033230 00007 C 00033240 00008 C THIS ROUTINE PROCESSES RERUN CARDS. ITS MAIN FUNCTIONS ARE 00033250 00009 C TO TIE OFF AND WRITE OUT PREVIOUSLY BUILT RERUN BUFFERS AND 00033260 00010 C TO INITIALIZE THE BUFFER FOR THE NEXT BATCH OF RERUN CHANGES. 00033270 00011 C 00033280 00012 C 00033290 00013 REAL*8 RMIN,RMAX,LITBL(8192) 00033300 00014 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00033310 00015 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00033320 00016 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00033330 00017 3SYMTB(5,4096) 00033340 00018 INTEGER RRBPT,RRBST,RELOC,VALCT,INTBT,RBFPT 00033350 00019 INTEGER RERUN(80),DISK 00033360 00020 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00033370 00021 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00033380 00022 2SYMTB,LITBL 00033390 00023 EQUIVALENCE (RRBPT,PTRS(37)),(RRBST,PTRS(36)),(RELOC,PTRS(40)) 00033400 00024 EQUIVALENCE (VALCT,PTRS(20)),(INTBT,RERUN(1),DEF(1)) 00033410 00025 EQUIVALENCE (RBFPT,RERUN(2)),(DISK,PTRS(3)) 00033420 00026 C 00033430 00027 C 00033440 00028 C A NEGATIVE RRBPT INDICATES THAT THIS IS THE FIRST RERUN CARD 00033450 00029 C THUS FAR ENCOUNTERED. NO TIE OFF IS NECESSARY BUT EQUATION 00033460 00030 C CHAINING MUST BE TERMINATED BY CALLING NDT21 WITH A 0. 00033470 00031 C RELOC IS SET HERE THUS DEFINING THE END OF THE MAINLINE VAR 00033480 00032 C IABLES AND THE BEGINNING OF THE LITBL AFTER RELOCATION. 00033490 00033 C RRBPT IS SET SO AS TO BE CORRECT WHEN THIS PROGRAM IS CALLED 00033500 00034 C NEXT. 00033510 00035 C 00033520 00036 C 00033530 00037 IF(RRBPT.GT.0) GO TO 100 00033540 00038 CALL NDT21 (0) 00033550 00039 RELOC=VALCT 00033560 00040 RRBPT=RRBST-1 00033570 00041 GO TO 300 00033580 00042 C 00033590 00043 C 00033600 00044 C IF A RERUN NEEDS TO BE TIED OFF, A GROUP ERROR IS ISSUED IF 00033610 00045 C THERE HAVE BEEN NO VALID RERUN CHANGES REQUESTED SINCE THE 00033620 00046 C LAST RERUN CARD WAS ENCOUNTERED. OTHERWISE THE RERUN BUFFER 00033630 00047 C IS WRITTEN OUT TO DISK AND RRBPT IS INCREMENTED. 00033640 00048 C 00033650 00049 C 00033660 00050 100 IF(INTBT.NE.0.OR.RBFPT.NE.2) GO TO 200 00033670 00051 CALL NDT20 (113,2) 00033680 00052 GO TO 300 00033690 00053 200 WRITE(DISK'RRBPT+1) RERUN 00033700 00054 RRBPT=RRBPT+1 00033710 00055 C 00033720 00056 C 00033730 NDT18 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C IN ALL CASES THE RERUN BUFFER IS INITIALIZED. INTBT IS SET 00033740 00058 C TO ZERO (IF IT COMES BACK AT ZERO, NO INTEGRATION CHANGE WAS 00033750 00059 C REQUESTED), RBFPT IS SET TO 2 (THE LAST USED POSITION OF A 00033760 00060 C RERUN PARM,C OR T CHANGE). POSITIONS 7 THRU 72 OF CARD1 ARE 00033770 00061 C COPIED ONTO THE HIGH END OF THE RERUN BUFFER. 00033780 00062 C 00033790 00063 C 00033800 00064 300 INTBT=0 00033810 00065 RBFPT=2 00033820 00066 RETURN 00033830 00067 END 00033850 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 RRBPT +50 RRBST +47 RELOC +53 VALCT +27 INTBT +1462 RERUN +1462 DISK +6 RBFPT +1463 SUBPROGRAMS CALLED NDT21 NDT20 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] TEMPORARIES .A0016 1 .Q0000 2 CARD1 14# 20# CARD2 14# 20# CRSET 14# 20# DEF 14# 20# 24# DISK 19# 25# 53 EQCHN 14# 20# ERROR 14# 20# FCTN 14# 20# INTBT 18# 24# 50 64# LITBL 13# 20# NDT18 5# NDT20 51 NDT21 38 OBJCD 14# 20# OPER 14# 20# PTRS 14# 20# 23# 24# 25# RBFPT 18# 25# 50 65# RELOC 18# 23# 39# RERUN 19# 24# 25# 53 RMAX 13# 20# RMIN 13# 20# RRBPT 18# 23# 37 40# 53 54 54# RRBST 18# 23# 40 SUBSC 14# 20# SYM 14# 20# SYMTB 14# 20# TITLE 14# 20# TMAP 14# 20# TOKEN 14# 20# TYPCT 14# 20# VALCT 18# 24# 39 XREF 14# 20# 100P 37 50# 200P 50 53# 300P 41 52 64# NDT18 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00033860 00002 C PROGRAM AUTHOR - GARY PELKEY 00033870 00003 C 00033880 00004 C 00033890 00005 SUBROUTINE NDT19 00033900 00006 C 00033910 00007 C 00033920 00008 C THIS SUBROUTINE PROCESSES CARDS IN RERUN MODE. THE ONLY 00033930 00009 C TYPES OF CARDS PARSED IN CDATA WHEN THIS IS CALLED ARE C,*, 00033940 00010 C T, AND PARM. CONSTANTS MUST BE CHECKED FOR NUMERIC ONLY 00033950 00011 C AND ALL OTHER SYNTAX RULES AS IN THE MAINLINE PROGRAM. 00033960 00012 C THE ONLY CONTROL CARD ALLOWED IS ONE SPECIFYING INTEGRATION 00033970 00013 C TYPE. TABLES MUST HAVE THE SAME NUMBER OF ENTRIES AS ITS 00033980 00014 C DEFINITION IN THE MAINLINE. THE ONLY PARAMATER CHANGE ALLOWED 00033990 00015 C IS DT. DT MUST ALSO BE NUMERIC ONLY IN RERUNS. 00034000 00016 C RERUN CHANGES ARE SAVED IN A RERUN BUFFER. INTEGRATOR CHANGES 00034010 00017 C ARE SAVED IN THE FIRST WORD OF THE BUFFER BUT ALL OTHER 00034020 00018 C CHANGES ARE SAVED AS FOUR CONSECUTIVE WORDS; RBFPT POINTING 00034030 00019 C TO THE LAST CHANGE MADE. THE FIRST TWO OF THE FOUR WORDS IS 00034040 00020 C THE PACKED NAME OF THE VARIABLE. THE NEXT WORD IS STYPE*4096+ 00034050 00021 C VNUM. THE FOURTH WORD IS THE ABSOLUTE LITBL LOCATION OF THE 00034060 00022 C NEW NUMERIC OR TABLE. 00034070 00023 C 00034080 00024 C 00034090 00025 REAL*8 RMIN,RMAX,LITBL(8192) 00034100 00026 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00034110 00027 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00034120 00028 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00034130 00029 3SYMTB(5,4096) 00034140 00030 INTEGER STYPE,I,J,INTRS(6,3),CDATA(144),INTBT,SAVE,LITCT, 00034150 00031 1PNTR,DISK,RECNO,SAVE1,POINT,VNUM,EQNCD,RBFPT,RERUN(80), 00034160 00032 2RELOC,OBJPT,OBJ1(80) 00034170 00033 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00034180 00034 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00034190 00035 2SYMTB,LITBL 00034200 00036 EQUIVALENCE (STYPE,TOKEN(1)),(CDATA(1),OBJCD(1)), 00034210 00037 1(INTBT,RERUN(1),DEF(1)),(LITCT,PTRS(18)),(DISK,PTRS(3)), 00034220 00038 2(VNUM,SYM(14)),(EQNCD,ERROR(1)),(RELOC,PTRS(40)) 00034230 00039 3,(RBFPT,RERUN(2)),(RECNO,SYM(15)),(OBJPT,OBJCD(1),OBJ1(1)) 00034240 00040 DATA INTRS /'E','U','L','E','R',' ','R','K','I','N','T',' ', 00034250 00041 1'A','B','I','N','T',' '/ 00034260 00042 C 00034270 00043 C 00034280 00044 IF(STYPE.NE.10) GO TO 400 00034290 00045 C 00034300 00046 C 00034310 00047 C IF A CONTROL CARD IS ENTERED, ITS CONTENTS ARE COMPARED 00034320 00048 C AGAINST AN ARRAY CONTAINING THE THREE LEGAL INTEGRATION 00034330 00049 C TYPES. IF ONE IS FOUND, THE NUMBER IS SAVED IN INTBT; IF 00034340 00050 C NOT, THE CONTROL CARD IS FLAGGED FOR BEING ILLEGAL IN A 00034350 00051 C RERUN. THE CORRESPONDENCE OF THE SAVED NUMBER TO THE INTE- 00034360 00052 C GRATION TYPE IS SHOWN BELOW: 00034370 00053 C 00034380 00054 C EULER - 1 00034390 00055 C RKINT - 2 00034400 00056 C ABINT - 3 00034410 NDT19 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C 00034420 00058 C 00034430 00059 DO 200 I=1,3 00034440 00060 DO 100 J=1,6 00034450 00061 IF(INTRS(J,I).NE.CDATA(J)) GO TO 200 00034460 00062 100 CONTINUE 00034470 00063 IF(INTBT.EQ.0) GO TO 150 00034480 00064 CALL NDT14 (0,114,2) 00034490 00065 GO TO 2000 00034500 00066 150 INTBT=I 00034510 00067 GO TO 2000 00034520 00068 200 CONTINUE 00034530 00069 CALL NDT14 (0,115,2) 00034540 00070 GO TO 2000 00034550 00071 C 00034560 00072 C 00034570 00073 C FOR T,C OR PARM CARDS, THE ADDRESS AT WHICH THEY WILL BE 00034580 00074 C STORED IN THE LITBL MUST BE SAVED. WHEN LATER ADDED TO 00034590 00075 C RELOC THIS WILL GIVE THE ADDRESS OF THE NEW CONSTANT OR 00034600 00076 C CONSTANTS AT EXECUTION TIME. 00034610 00077 C 00034620 00078 C 00034630 00079 400 SAVE=LITCT+1 00034640 00080 IF(STYPE.NE.1) GO TO 800 00034650 00081 C 00034660 00082 C 00034670 00083 C IF THE CARD IS A TABLE, THE TABLE PROCESSOR IS CALLED. 00034680 00084 C FURTHER PROCESSING IS DISCONTINUED IF THE TABLE PROCESSOR 00034690 00085 C DETECTED ERRORS OR CRITICALS ON THIS CARD. OTHERWISE 00034700 00086 C THE TABLE'S MAINLINE OBJECT CODE IS READ OFF OF DISK TO 00034710 00087 C BACKTRACK AND COMPARE THE NUMBER OF LITERALS ON THE RIGHT 00034720 00088 C OF THE '='. 00034730 00089 C 00034740 00090 C 00034750 00091 CALL NDT15 00034760 00092 IF(EQNCD.GT.1) GO TO 2000 00034770 00093 LITBL(SAVE) = SAVE + 1 + RELOC 00034780 00094 PNTR=MOD(TOKEN(4),4096)+1 00034790 00095 CALL NDT41 (SYMTB(1,PNTR)) 00034800 00096 READ(DISK'RECNO+4) OBJ1 00034810 00097 SAVE1=-OBJCD(6) 00034820 00098 POINT=LITBL(SAVE1) 00034830 00099 750 IF(LITBL(POINT).EQ.LITBL(SAVE+1)) GO TO 900 00034840 00100 CALL NDT14 (0,539,2) 00034850 00101 GO TO 2000 00034860 00102 C 00034870 00103 C 00034880 00104 C IF THE CARD IS A CONSTANT OR PARM, NDT08 IS CALLED TO 00034890 00105 C PERFORM THE LEXICAL ANALYSIS AND THEN NDT49 IS CALLED TO 00034900 00106 C INSURE THAT THERE IS ONLY ONE LITERAL ON THE RIGHT OF '='. 00034910 00107 C 00034920 00108 C 00034930 00109 800 CALL NDT08 00034940 00110 CALL NDT49 00034950 00111 C 00034960 00112 C 00034970 NDT19 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 C AN ATTEMPT BY THE USER TO WRITE AN EQUATION FOR A PARAMETER 00034980 00114 C (OTHER THAN DT) IN RERUN MODE IS FLAGGED HERE. 00034990 00115 C 00035000 00116 C 00035010 00117 900 IF(VNUM.EQ.11.OR.VNUM.GT.16) GO TO 1000 00035020 00118 CALL NDT14 (TMAP(4),538,2) 00035030 00119 GO TO 2000 00035040 00120 C 00035050 00121 C 00035060 00122 C IF THERE HAVE BEEN NO ERRORS OR CRITICALS TO THIS POINT AND 00035070 00123 C THE RERUN BUFFER IS NOT IN DANGER OF OVERFLOWING, TWO WORDS 00035080 00124 C ARE BUILT WHICH SPECIFY THE RERUN CHANGE. THESE TWO 00035090 00125 C WORDS CONTAIN INFORMATION WHICH SPECIFIES THE VNUM AND THE 00035100 00126 C LOCATION OF THE NEW LITERAL (OR GROUP OF LITERALS, AS IN 00035110 00127 C TABLES) WHERE THE RERUN VALUES CAN BE FOUND AFTER RELOCATION. 00035120 00128 C 00035130 00129 C 00035140 00130 1000 IF(EQNCD.GT.1) GO TO 2000 00035150 00131 IF(RBFPT.LE.78) GO TO 1100 00035160 00132 CALL NDT14 (0,116,2) 00035170 00133 GO TO 2000 00035180 00134 1100 IF(STYPE.EQ.1) GO TO 1150 00035190 00135 PNTR=MOD(TOKEN(4),4096)+1 00035200 00136 CALL NDT41 (SYMTB(1,PNTR)) 00035210 00137 READ(DISK'RECNO+4) OBJ1 00035220 00138 SAVE1 = - OBJCD(6) 00035230 00139 IF(OBJPT.EQ.8.AND.SAVE1.GT.0) GO TO 1150 00035240 00140 CALL NDT14 (0,999,2) 00035250 00141 GO TO 2000 00035260 00142 1150 RERUN(RBFPT+1)=SAVE1+RELOC 00035270 00143 RERUN(RBFPT+2)=SAVE+RELOC 00035280 00144 RBFPT=RBFPT+2 00035290 00145 2000 RETURN 00035300 00146 END 00035320 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 STYPE +522 CDATA +1222 INTBT +1462 RERUN +1462 LITCT +25 DISK +6 VNUM +346 EQNCD +1102 RELOC +53 RECNO +347 OBJPT +1222 OBJ1 +1222 RBFPT +1463 SUBPROGRAMS CALLED MOD. NDT08 NDT49 NDT15 NDT14 NDT41 NDT19 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] SAVE 1 PNTR 2 .R0000 3 J 4 .S0001 5 .S0000 6 POINT 7 SAVE1 10 I 11 INTRS 12 TEMPORARIES .A0016 34 .Q0001 35 CARD1 26# 33# CARD2 26# 33# CDATA 30# 36# 61 CRSET 26# 33# DEF 26# 33# 36# DISK 30# 36# 96 137 EQCHN 26# 33# EQNCD 30# 36# 92 130 ERROR 26# 33# 36# FCTN 26# 33# I 30# 59# 61 66 INTBT 30# 36# 63 66# INTRS 30# 40# 61 J 30# 60# 61 LITBL 25# 33# 93# 98 99 LITCT 30# 36# 79 MOD. 94 135 NDT08 109 NDT14 64 69 100 118 132 140 NDT15 91 NDT19 5# NDT41 95 136 NDT49 110 OBJ1 30# 36# 96# 137# OBJCD 26# 33# 36# 97 138 OBJPT 30# 36# 139 OPER 26# 33# PNTR 30# 94# 95 135# 136 POINT 30# 98# 99 PTRS 26# 33# 36# RBFPT 30# 36# 131 142 143 144 144# RECNO 30# 36# 96 137 RELOC 30# 36# 93 142 143 RERUN 30# 36# 142# 143# RMAX 25# 33# RMIN 25# 33# SAVE 30# 79# 93 99 143 SAVE1 30# 97# 98 138# 139 142 STYPE 30# 36# 44 80 134 SUBSC 26# 33# SYM 26# 33# 36# SYMTB 26# 33# 95 95# 136 136# TITLE 26# 33# TMAP 26# 33# 118 118# TOKEN 26# 33# 36# 94 135 TYPCT 26# 33# VNUM 30# 36# 117 XREF 26# 33# 1000P 117 130# 100P 60 62# 1100P 131 134# 1150P 134 139 142# 150P 63 66# 2000P 65 67 70 92 101 119 130 133 141 145# 200P 59 61 68# 400P 44 79# 750P 99# 800P 80 109# 900P 99 117# NDT19 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00035330 00002 C PROGRAM AUTHOR - GARY PELKEY 00035340 00003 C 00035350 00004 C 00035360 00005 SUBROUTINE NDT20 (CODE,SEVER) 00035370 00006 C 00035380 00007 C 00035390 00008 C THIS PROGRAM PROCESSES GROUP ERRORS. IT DOES THIS BY UPDATING 00035400 00009 C THE ERROR DISK RECORD OF THE LAST GROUP STARTER. THE LAST 00035410 00010 C GROUP'S TOKEN RECORD IS POINTED TO BY LSTGP. 00035420 00011 C 00035430 00012 C 00035440 00013 REAL*8 RMIN,RMAX,LITBL(8192) 00035450 00014 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00035460 00015 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00035470 00016 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00035480 00017 3SYMTB(5,4096) 00035490 00018 INTEGER CODE,SEVER,ERRPT,I,DISK,ENDER,LSTGP 00035500 00019 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00035510 00020 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00035520 00021 2SYMTB,LITBL 00035530 00022 EQUIVALENCE (ERRPT,ERROR(2)),(ENDER,OBJCD(2)),(DISK,PTRS(3)) 00035540 00023 EQUIVALENCE (LSTGP,PTRS(35)) 00035550 00024 C 00035560 00025 C 00035570 00026 C THE PRESENT CARDS ERROR INFORMATION IS SAVED. 00035580 00027 C 00035590 00028 C 00035600 00029 DO 100 I=1,ERRPT 00035610 00030 100 OBJCD(I)=ERROR(I) 00035620 00031 C 00035630 00032 C 00035640 00033 C THE GROUP STARTER'S ERROR RECORD IS READ IN AND UPDATED 00035650 00034 C BY CALLING NDT14. (THE POSITION OF A GROUP ERROR IS ALWAYS 00035660 00035 C 0, OR THE WHOLE CARD.) 00035670 00036 C 00035680 00037 C 00035690 00038 READ(DISK'LSTGP+3) ERROR 00035700 00039 CALL NDT14 (0,CODE,SEVER) 00035710 00040 WRITE(DISK'LSTGP+3) ERROR 00035720 00041 C 00035730 00042 C 00035740 00043 C THE PRESENT CARDS ERROR INFORMATION IS RESTORED. 00035750 00044 C 00035760 00045 C 00035770 00046 DO 200 I=1,ENDER 00035780 00047 200 ERROR(I)=OBJCD(I) 00035790 00048 RETURN 00035800 00049 END 00035810 EQUIVALENCED VARIABLES NDT20 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 ERRPT +1103 ENDER +1223 DISK +6 LSTGP +46 SUBPROGRAMS CALLED NDT14 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] .S0001 1 .S0000 2 SEVER 3 I 4 CODE 5 TEMPORARIES .A0016 6 .Q0000 7 CARD1 14# 19# CARD2 14# 19# CODE 5# 18# 39 39# CRSET 14# 19# DEF 14# 19# DISK 18# 22# 38 40 ENDER 18# 22# 46 EQCHN 14# 19# ERROR 14# 19# 22# 30 38# 40 47# ERRPT 18# 22# 29 FCTN 14# 19# I 18# 29# 30 46# 47 LITBL 13# 19# LSTGP 18# 23# 38 40 NDT14 39 NDT20 5# OBJCD 14# 19# 22# 30# 47 OPER 14# 19# PTRS 14# 19# 22# 23# RMAX 13# 19# RMIN 13# 19# SEVER 5# 18# 39 39# SUBSC 14# 19# SYM 14# 19# SYMTB 14# 19# TITLE 14# 19# TMAP 14# 19# TOKEN 14# 19# TYPCT 14# 19# XREF 14# 19# 100P 29 30# 200P 46 47# NDT20 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00035820 00002 C PROGRAM AUTHOR - DANIEL A. POYDENCE 00035830 00003 C 00035840 00004 C 00035850 00005 SUBROUTINE NDT21 (EQELM) 00035860 00006 C 00035870 00007 C 00035880 00008 C NDT21 MONITORS THE SEQUENTIAL CONSTRUCTION OF THE EQCHN 00035890 00009 C ARRAY. THIS ARRAY IS BUILT AT TWO DIFFERENT TIMES. DURING 00035900 00010 C THE INPUT PHASE, NDT21 ADDS AN EQCHN ELEMENT FOR EACH 00035910 00011 C EQUATION AND TABLE IN THE MODEL. DURING THE EQUATION 00035920 00012 C ORDING PHASE THIS ROUTINE MONITORS THE CONSTRUCTION OF THE 00035930 00013 C ORDERED EQCHN ELEMENTS. 00035940 00014 C 00035950 00015 C 00035960 00016 REAL*8 RMIN,RMAX,LITBL(8192) 00035970 00017 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00035980 00018 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00035990 00019 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00036000 00020 3SYMTB(5,4096) 00036010 00021 INTEGER CHNPT,EQNPT,DISK,EQELM 00036020 00022 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00036030 00023 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00036040 00024 2SYMTB,LITBL 00036050 00025 EQUIVALENCE (CHNPT,PTRS(29)),(EQNPT,PTRS(28)),(DISK,PTRS(3)) 00036060 00026 C 00036070 00027 C 00036080 00028 C CHNPT POINTS TO THE LAST POSITION USED IN EQCHN. EQNPT POINTS 00036090 00029 C TO THE LAST DISK RECORD USED FOR EQCHN INFORMATION. 00036100 00030 C 00036110 00031 C 00036120 00032 CHNPT=CHNPT+1 00036130 00033 EQCHN(CHNPT)=EQELM 00036140 00034 C 00036150 00035 C 00036160 00036 C IF EQCHN IS FILLED OR THE LAST ELEMENT ADDED WAS A 0 INDICATING 00036170 00037 C THE END OF EQCHN BUILDING THEN WRITE THE INFORMATION TO DISK 00036180 00038 C AND RESET THE POINTERS. 00036190 00039 C 00036200 00040 C 00036210 00041 IF(CHNPT.NE.80.AND.EQELM.NE.0) GO TO 100 00036220 00042 EQNPT=EQNPT+1 00036230 00043 WRITE(DISK'EQNPT) EQCHN 00036240 00044 CHNPT=0 00036250 00045 100 RETURN 00036260 00046 END 00036280 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 NDT21 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 CHNPT +40 EQNPT +37 DISK +6 SUBPROGRAMS CALLED SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] EQELM 1 TEMPORARIES .A0016 2 CARD1 17# 22# CARD2 17# 22# CHNPT 21# 25# 32 32# 33 41 44# CRSET 17# 22# DEF 17# 22# DISK 21# 25# 43 EQCHN 17# 22# 33# 43 EQELM 5# 21# 33 41 EQNPT 21# 25# 42 42# 43 ERROR 17# 22# FCTN 17# 22# LITBL 16# 22# NDT21 5# OBJCD 17# 22# OPER 17# 22# PTRS 17# 22# 25# RMAX 16# 22# RMIN 16# 22# SUBSC 17# 22# SYM 17# 22# SYMTB 17# 22# TITLE 17# 22# TMAP 17# 22# TOKEN 17# 22# TYPCT 17# 22# XREF 17# 22# 100P 41 45# NDT21 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00036290 00002 C PROGRAM AUTHOR - DANIEL A. POYDENCE 00036300 00003 C 00036310 00004 C 00036320 00005 SUBROUTINE NDT22 (START,STOP) 00036330 00006 C 00036340 00007 C 00036350 00008 C NDT22 PERFORMS A SYNTAX ANALYSIS ON NUMERIC LITERAL STRINGS, 00036360 00009 C ADDS AN ELEMENT TO THE TOKEN AND TMAP ARRAYS, AND PLACES THE 00036370 00010 C VALUE OF THE LITERAL INTO THE LITERAL TABLE. 00036380 00011 C 00036390 00012 C THE FIRST AND SECOND ARGUMENTS ARE THE STARTING AND 00036400 00013 C STOPPING POSITIONS OF THE STRING. 00036410 00014 C 00036420 00015 C 00036430 00016 REAL*8 RMIN,RMAX,LITBL(8192) 00036440 00017 REAL*8 VAL 00036450 00018 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00036460 00019 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00036470 00020 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00036480 00021 3SYMTB(5,4096) 00036490 00022 INTEGER PNTTMP 00023 INTEGER SPCL(4),PNT,COUNT,SGDCT,ESIGN,DIGIT,DEC,START,EXP, 00036500 00024 1LITCT,LITND,TOKPT,STOP,NSIGN,LOOP,NUM(10),EXPMX,CDATA(144) 00036510 00025 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00036520 00026 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00036530 00027 2SYMTB,LITBL 00036540 00028 EQUIVALENCE (NUM(1),CRSET(30)),(EXPMX,PTRS(9)),(LITCT,PTRS(18)), 00036550 00029 1(LITND,PTRS(19)),(TOKPT,TOKEN(3)),(CDATA(1),OBJCD(1)) 00036560 00030 DATA SPCL /'.','E','+','-'/ 00036570 00031 C 00036580 00032 C 00036590 00033 C INITIALIZE ALL COUNTERS AND FLAGS. 00036600 00034 C 00036610 00035 C 00036620 00036 VAL=0.D0 00036630 00037 COUNT=0 00036640 00038 SGDCT=-1 00036650 00039 DEC=-1 00036660 00040 EXP=-1 00036670 00041 NSIGN=0 00036680 00042 ESIGN=0 00036690 00043 C 00036700 00044 C 00036710 00045 C IF THE STARTING POSITION IS NOT LESS THAN OR EQUAL TO 00036720 00046 C THE STOPPING POSITION, THEN THE NUMBER IS MISSING. 00036730 00047 C SIGNAL THE ERROR, AND ASSUME A ZERO PRESENT. 00036740 00048 C 00036750 00049 C 00036760 00050 IF(START.LE.STOP) GO TO 100 00036770 00051 CALL NDT13 (START,601,2) 00036780 00052 GO TO 2100 00036790 00053 C 00036800 00054 C 00036810 00055 C THE OUTER LOOP PROCESSES CHARACTER BY CHARACTER FROM THE 00036820 00056 C LEFT TO THE RIGHT. 00036830 NDT22 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C 00036840 00058 C 00036850 00059 100 DO 1800 PNT=START,STOP 00036860 00060 PNTTMP=PNT 00061 C 00036870 00062 C 00036880 00063 C TEST FOR A VALID DIGIT. THE VALUE OF LOOP WILL 00036890 00064 C INDICATE WHICH DIGIT WAS FOUND. 00036900 00065 C 00036910 00066 C 00036920 00067 DO 200 LOOP=1,10 00036930 00068 IF(CDATA(PNT).EQ.NUM(LOOP)) GO TO 500 00036940 00069 200 CONTINUE 00036950 00070 C 00036960 00071 C 00036970 00072 C THE CHARACTER WAS NOT A DIGIT SO CHECK FOR 00036980 00073 C ONE OF THE SPECIAL SYMBOLS. 00036990 00074 C 00037000 00075 C 00037010 00076 DO 300 LOOP=1,4 00037020 00077 IF(CDATA(PNT).EQ.SPCL(LOOP)) GO TO (800,1300,1100,1100),LOOP 00037030 00078 300 CONTINUE 00037040 00079 C 00037050 00080 C 00037060 00081 C THE CHARACTER IS NOT LEGAL IN A NUMERIC LITERAL. INDICATE 00037070 00082 C THE ERROR AND ASSUME IT TO BE A ZERO. 00037080 00083 C 00037090 00084 C 00037100 00085 CALL NDT13 (PNTTMP,600,2) 00037110 00086 LOOP=1 00037120 00087 GO TO 500 00037130 00088 C 00037140 00089 C 00037150 00090 C THIS IS THE DIGIT PROCESSING ROUTINE. COUNT IS A 00037160 00091 C COUNTER FOR THE NUMBER OF DIGITS ENCOUNTERED SINCE 00037170 00092 C THE START OF THE MANTISSA OR THE START OF THE 00037180 00093 C EXPONENT. SGDCT IS THE NUMBER OF THOSE DIGITS 00037190 00094 C THAT ARE SIGNIFICANT (COUNT LESS THE LEADING ZEROS). 00037200 00095 C IF COUNT IS LESS THAN ZERO THEN MORE DIGITS HAVE 00037210 00096 C ALREADY OCCURRED THAN ARE ALLOWED SO IGNORE THIS ONE. 00037220 00097 C 00037230 00098 C 00037240 00099 500 IF(COUNT.LT.0) GO TO 1800 00037250 00100 C 00037260 00101 C 00037270 00102 C ADD ONE TO COUNT AND TEST TO SEE WHETHER THE DIGIT 00037280 00103 C IS A LEADING ZERO. IF IT IS GET THE NEXT CHARACTER 00037290 00104 C WITHOUT INITIALIZING SGDCT. IF IT IS NOT A LEADING 00037300 00105 C ZERO THEN INCREMENT SGDCT AND TEST THE LENGTH. 00037310 00106 C A MANTISSA LENGTH MAY NOT EXCEED 8 AND AN EXPONENT 00037320 00107 C LENGTH MAY NOT EXCEED 2. 00037330 00108 C 00037340 00109 C 00037350 00110 COUNT=COUNT+1 00037360 00111 IF(SGDCT.LT.0.AND.LOOP.NE.1) SGDCT=0 00037370 00112 IF(SGDCT.LT.0) GO TO 1800 00037380 NDT22 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 SGDCT=SGDCT+1 00037390 00114 IF(EXP.LT.0.AND.SGDCT.EQ.9) GO TO 600 00037400 00115 IF(EXP.GE.0.AND.SGDCT.EQ.3) GO TO 700 00037410 00116 C 00037420 00117 C 00037430 00118 C THE DIGIT IS VALID AND SIGNIFICANT. UPDATE THE VALUE 00037440 00119 C AND THE REAL VARIABLE VAL ACCORDING TO THE FLAGS AND 00037450 00120 C COUNTERS. DEC IS THE DECIMAL POINT FLAG AND COUNTER. 00037460 00121 C A NEGATIVE VALUE INDICATES THAT THE DECIMAL POINT 00037470 00122 C HAS NOT BEEN ENCOUNTERED. A NON-NEGATIVE VALUE 00037480 00123 C INDICATES THAT IT HAS OCCURRED AND IS A COUNTER 00037490 00124 C OF THE NUMBER OF DIGITS THAT HAVE FOLLOWED IT. 00037500 00125 C EXP HAS THE SAME FUNCTION WITH THE EXPONENT CHARACTER. 00037510 00126 C UPDATE ALL OF THE APPROPRIATE COUNTERS. 00037520 00127 C 00037530 00128 C 00037540 00129 IF(DEC.GE.0) DEC=DEC+1 00037550 00130 DIGIT=LOOP-1 00037560 00131 IF(DEC.LT.0.AND.EXP.LT.0) VAL=VAL*10.D0+DFLOAT(DIGIT) 00037570 00132 IF(DEC.GE.0.AND.EXP.LT.0) VAL=VAL+DFLOAT(DIGIT)/10.D0**DEC 00037580 00133 IF(EXP.GE.0) EXP=EXP*10+DIGIT 00037590 00134 GO TO 1800 00037600 00135 C 00037610 00136 C 00037620 00137 C THE MANTISSA EXCEEDS THE PREVIOUSLY STATED LIMITS FOR 00037630 00138 C LENGTH. PROCESS THE ERROR, IGNORE THIS DIGIT, AND 00037640 00139 C SET COUNT TO A NEGATIVE VALUE AS A FLAG. 00037650 00140 C 00037660 00141 C 00037670 00142 600 CALL NDT13 (PNTTMP,603,2) 00037680 00143 COUNT=-1 00037690 00144 GO TO 1800 00037700 00145 C 00037710 00146 C 00037720 00147 C THE EXPONENT EXCEEDS THE PREVIOUSLY STATED LINITS FOR 00037730 00148 C LENGTH. PROCESS THE ERROR, ASSUME THE MAXIMUM VALUE, 00037740 00149 C EXPMX, AND SET COUNT TO A NEGATIVE VALUE AS A FLAG. 00037750 00150 C 00037760 00151 C 00037770 00152 700 CALL NDT13 (PNTTMP,604,2) 00037780 00153 EXP=EXPMX 00037790 00154 VAL=1.D0 00037800 00155 COUNT=-1 00037810 00156 GO TO 1800 00037820 00157 C 00037830 00158 C 00037840 00159 C THIS IS THE DECIMAL POINT PROCESSING ROUTINE. 00037850 00160 C IF THE EXPONENT CHARACTER OR THE DECIMAL POINT 00037860 00161 C HAVE OCCURRED PREVIOUSLY IT IS AN ERROR. 00037870 00162 C IF THERE ARE NO ERRORS SET DEC TO ZERO AS A FLAG. 00037880 00163 C SINCE ZEROS ARE NOW SIGNIFICANT, SET SGDCT TO 00037890 00164 C ZERO AS A FLAG UNLESS IT IS ALREADY NON-NEGATIVE. 00037900 00165 C 00037910 00166 C 00037920 00167 800 IF(EXP.GE.0) GO TO 900 00037930 00168 IF(DEC.GE.0) GO TO 1000 00037940 NDT22 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 00169 DEC=0 00037950 00170 IF(SGDCT.LT.0) SGDCT=0 00037960 00171 GO TO 1800 00037970 00172 C 00037980 00173 C 00037990 00174 C THE DECIMAL POINT HAS OCCURRED IN THE EXPONENT. 00038000 00175 C SIGNAL THIS AS AN ERROR. 00038010 00176 C 00038020 00177 C 00038030 00178 900 CALL NDT13 (PNTTMP,606,2) 00038040 00179 GO TO 1800 00038050 00180 C 00038060 00181 C 00038070 00182 C A DUPLICATE DECIMAL POINT HAS OCCURRED IN THE 00038080 00183 C MANTISSA. SIGNAL THIS AS AN ERROR. 00038090 00184 C 00038100 00185 C 00038110 00186 1000 CALL NDT13 (PNTTMP,605,2) 00038120 00187 GO TO 1800 00038130 00188 C 00038140 00189 C 00038150 00190 C THIS ROUTINE PROCESSES THE PLUS AND MINUS SIGNS. 00038160 00191 C IF COUNT IS NOT ZERO THE SIGN HAS OCCURRED IN THE 00038170 00192 C MIDDLE OF A DIGIT STRING WHICH IS AN ERROR. IF THE 00038180 00193 C SIGN FOLLOWS A DECIMAL POINT IT IS AN ERROR. 00038190 00194 C IF IT IS FOR THE MANTISSA AND THE MANTISSA SIGN HAS 00038200 00195 C ALREADY BEEN ENCOUNTERED IT IS AN ERROR. 00038210 00196 C IF IT IS FOR THE EXPONENT AND THE EXPONENT SIGN HAS 00038220 00197 C ALREADY BEEN ENCOUNTERED IT IS AN ERROR. OTHERWISE, 00038230 00198 C THE SIGN IS VALID SO SET THE APPROPRIATE FLAG TO 00038240 00199 C INDICATE THAT IT HAS OCCURRED. 00038250 00200 C 00038260 00201 C 00038270 00202 1100 IF(COUNT.NE.0) GO TO 1200 00038280 00203 IF(DEC.GE.0.AND.EXP.LT.0) GO TO 1200 00038290 00204 IF(EXP.LT.0.AND.NSIGN.NE.0) GO TO 1200 00038300 00205 IF(EXP.GE.0.AND.ESIGN.NE.0) GO TO 1200 00038310 00206 IF(EXP.LT.0.AND.LOOP.EQ.3) NSIGN=1 00038320 00207 IF(EXP.LT.0.AND.LOOP.EQ.4) NSIGN=-1 00038330 00208 IF(EXP.GE.0.AND.LOOP.EQ.3) ESIGN=1 00038340 00209 IF(EXP.GE.0.AND.LOOP.EQ.4) ESIGN=-1 00038350 00210 GO TO 1800 00038360 00211 C 00038370 00212 C 00038380 00213 C THE SIGN CHARACTER IS ILLEGAL AS USED FOR ONE OF THE 00038390 00214 C REASONS STATED PREVIOUSLY. PROCESS THE ERROR. 00038400 00215 C 00038410 00216 C 00038420 00217 1200 CALL NDT13 (PNTTMP,602,2) 00038430 00218 GO TO 1800 00038440 00219 C 00038450 00220 C 00038460 00221 C THIS IS THE EXPONENT CHARACTER PROCESSING ROUTINE. 00038470 00222 C IF THE EXPONENT CHARACTER HAS OCCURRED PREVIOUSLY 00038480 00223 C IT IS AN ERROR. 00038490 00224 C 00038500 NDT22 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-4 00225 C 00038510 00226 1300 IF(EXP.GE.0) GO TO 1500 00038520 00227 C 00038530 00228 C 00038540 00229 C IF NO DIGITS HAVE BEEN ENCOUNTERED PREVIOUSLY 00038550 00230 C SIGNAL THE ERROR. IF VAL HAS A VALUE OF ZERO 00038560 00231 C THEN WARN THE USER THAT HE IS EXPONENTIATING 00038570 00232 C ZERO. OTHERWISE, THE CHARACTER IS VALID SO 00038580 00233 C SET THE APPROPRIATE FLAGS. 00038590 00234 C 00038600 00235 C 00038610 00236 IF(COUNT.EQ.0) GO TO 1600 00038620 00237 IF(VAL.EQ.0.D0) GO TO 1700 00038630 00238 1400 EXP=0 00038640 00239 COUNT=0 00038650 00240 SGDCT=-1 00038660 00241 GO TO 1800 00038670 00242 C 00038680 00243 C 00038690 00244 C A DUPLICATE EXPONENT CHARACTER HAS BEEN ENCOUNTERED. 00038700 00245 C PROCESS THE ERROR AND IGNORE IT. 00038710 00246 C 00038720 00247 C 00038730 00248 1500 CALL NDT13 (PNTTMP,608,2) 00038740 00249 GO TO 1800 00038750 00250 C 00038760 00251 C 00038770 00252 C THE EXPONENT CHARACTER WAS ENCOUNTERED BEFORE THE 00038780 00253 C MANTISSA. SIGNAL THE ERROR AND ASSUME A '1' PRESENT. 00038790 00254 C SET VAL TO TO A VALUE OF 1 UNLESS THE DECIMAL POINT 00038800 00255 C HAS PRECEEDED. IN THAT CASE SET VAL TO .1 AND CONTINUE 00038810 00256 C PROCESSING THE EXPONENT CHARACTER AS VALID. 00038820 00257 C 00038830 00258 C 00038840 00259 1600 CALL NDT13 (PNTTMP,609,2) 00038850 00260 VAL=1.D0 00038860 00261 IF(DEC.EQ.0) VAL=1.D-1 00038870 00262 GO TO 1400 00038880 00263 C 00038890 00264 C 00038900 00265 C THE NUMBER BEING EXPONENTIATED IS ZERO. WARN THE USER 00038910 00266 C AND PROCESS THE EXPONENT CHARACTER AS VALID. 00038920 00267 C 00038930 00268 C 00038940 00269 1700 CALL NDT13 (PNTTMP,607,1) 00038950 00270 GO TO 1400 00038960 00271 1800 CONTINUE 00038970 00272 C 00038980 00273 C 00038990 00274 C ALL CHARACTERS OF THE STRING HAVE BEEN PROCESSED. 00039000 00275 C SET THE SIGN FLAGS TO THE DEFAULT VALUES IF THEY 00039010 00276 C INDICATE THAT NO SIGN OCCURRED. 00039020 00277 C 00039030 00278 C 00039040 00279 IF(NSIGN.EQ.0) NSIGN=1 00039050 00280 IF(ESIGN.EQ.0) ESIGN=1 00039060 NDT22 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-5 00281 C 00039070 00282 C 00039080 00283 C IF THE EXPONENT FLAG IS NEGATIVE SET IT TO ZERO SO 00039090 00284 C THAT THE FINAL VALUE OF 'VAL' MAY BE FORMED CORRECTLY. 00039100 00285 C CHECK FOR AN OVERFLOW OR AN UNDERFLOW BEFORE FORMING 'VAL'. 00039110 00286 C 00039120 00287 C 00039130 00288 IF(EXP.LT.0) EXP=0 00039140 00289 IF(VAL.EQ.0.D0) GO TO 1900 00039150 00290 IF(DLOG10(VAL)+DFLOAT(EXP).LE.DFLOAT(EXPMX)) GO TO 1900 00039160 00291 EXP=EXPMX 00039170 00292 VAL=1.D0 00039180 00293 CALL NDT13 (PNT,612,2) 00039190 00294 C 00039200 00295 C 00039210 00296 C IF NO DIGITS HAVE OCCURRED THEN EITHER THE EXPECTED 00039220 00297 C MANTISSA IS MISSING OR THE EXPONENT CHARACTER WAS 00039230 00298 C NOT FOLLOWED BY AN EXPONENT. SIGNAL THE APPROPRIATE 00039240 00299 C ERROR AND ASSUME A ZERO. 00039250 00300 C 00039260 00301 C 00039270 00302 1900 IF(COUNT.NE.0) GO TO 2000 00039280 00303 IF(EXP.LT.0) CALL NDT13 (PNT+1,610,2) 00039290 00304 IF(EXP.GE.0) CALL NDT13 (PNT+1,611,2) 00039300 00305 C 00039310 00306 C 00039320 00307 C FORM THE VALUE OF THE LITERAL AND PLACE IT IN THE LITERAL 00039330 00308 C IF THE TABLE OVERFLOWS, INDICATE THE SYSTEM ERROR. 00039340 00309 C 00039350 00310 C 00039360 00311 2000 VAL=VAL*DFLOAT(NSIGN)*10.D0**(ESIGN*EXP) 00039370 00312 2100 LITCT=LITCT+1 00039380 00313 IF(LITCT.GT.LITND) CALL NDT12 (4) 00039390 00314 LITBL(LITCT)=VAL 00039400 00315 C 00039410 00316 C 00039420 00317 C ADD A NEW TOKEN AND TMAP ELEMENT FOR THE LITERAL AFTER 00039430 00318 C CHECKING FOR TOKEN OVERFLOW. 00039440 00319 C 00039450 00320 C 00039460 00321 TOKPT=TOKPT+1 00039470 00322 IF(TOKPT.GT.80) CALL NDT12 (2) 00039480 00323 TOKEN(TOKPT)=-LITCT 00039490 00324 CALL NDT23 (START,TMAP(TOKPT)) 00039500 00325 RETURN 00039510 00326 END 00039530 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 NDT22 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-6 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 NUM +306 EXPMX +14 LITCT +25 LITND +26 TOKPT +524 CDATA +1222 SUBPROGRAMS CALLED NDT13 DLG10. NDT12 DFLOT. NDT23 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] STOP 1 DIGIT 2 LOOP 3 SGDCT 4 COUNT 5 .S0002 6 .S0001 7 .S0000 10 EXP 11 DEC 12 PNT 13 VAL 14 NSIGN 16 ESIGN 17 START 20 PNTTMP 21 SPCL 22 TEMPORARIES .A0016 26 .Q0000 27 CARD1 18# 25# CARD2 18# 25# CDATA 23# 28# 68 77 COUNT 23# 37# 99 110 110# 143# 155# 202 236 239# 302 CRSET 18# 25# 28# DEC 23# 39# 129 129# 131 132 168 169# 203 261 DEF 18# 25# DFLOT. 131 132 290 311 DIGIT 23# 130# 131 132 133 DLG10. 290 EQCHN 18# 25# ERROR 18# 25# ESIGN 23# 42# 205 208# 209# 280 280# 311 EXP 23# 40# 114 115 131 132 133 133# 153# 167 203 204 205 206 207 208 209 226 238# 288 288# 290 291# 303 304 311 EXPMX 23# 28# 153 290 291 FCTN 18# 25# LITBL 16# 25# 314# LITCT 23# 28# 312 312# 313 314 323 LITND 23# 28# 313 LOOP 23# 67# 68 76# 77 86# 111 130 206 207 208 209 NDT12 313 322 NDT13 51 85 142 152 178 186 217 248 259 269 293 303 304 NDT22 5# NDT23 324 NSIGN 23# 41# 204 206# 207# 279 279# 311 NUM 23# 28# 68 OBJCD 18# 25# 28# OPER 18# 25# PNT 23# 59# 60 68 77 293 293# 303 304 PNTTMP 22# 60# 85 85# 142 142# 152 152# 178 178# 186 186# 217 217# 248 248# 259 259# 269 269# PTRS 18# 25# 28# RMAX 16# 25# RMIN 16# 25# SGDCT 23# 38# 111 111# 112 113 113# 114 115 170 170# 240# SPCL 23# 30# 77 START 5# 23# 50 51 51# 59 324 324# STOP 5# 23# 50 59 SUBSC 18# 25# SYM 18# 25# SYMTB 18# 25# TITLE 18# 25# TMAP 18# 25# 324 324# TOKEN 18# 25# 28# 323# TOKPT 23# 28# 321 321# 322 323 324 TYPCT 18# 25# VAL 17# 36# 131 131# 132 132# 154# 237 260# 261# 289 290 292# 311 311# 314 XREF 18# 25# 1000P 168 186# 100P 50 59# 1100P 77 202# 1200P 202 203 204 205 217# 1300P 77 226# 1400P 238# 262 270 1500P 226 248# 1600P 236 259# 1700P 237 269# 1800P 59 99 112 134 144 156 171 179 187 210 218 241 249 271# 1900P 289 290 302# 2000P 302 311# 200P 67 69# 2100P 52 312# 300P 76 78# 500P 68 87 99# 600P 114 142# 700P 115 152# 800P 77 167# 900P 167 178# NDT22 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00039540 00002 C PROGRAM AUTHOR - GARY PELKEY 00039550 00003 C 00039560 00004 C 00039570 00005 SUBROUTINE NDT23 (POS,OUT) 00039580 00006 REAL*8 RMIN,RMAX,LITBL(8192) 00039590 00007 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00039600 00008 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00039610 00009 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00039620 00010 3SYMTB(5,4096) 00039630 00011 INTEGER POS,OUT,CDATA(144) 00039640 00012 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00039650 00013 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00039660 00014 2SYMTB,LITBL 00039670 00015 EQUIVALENCE (CDATA(1),OBJCD(1)) 00039680 00016 OUT=8*(POS+CDATA(142)-1) 00039690 00017 IF(POS.GE.CDATA(143)) OUT=8*(POS-CDATA(143)+CDATA(144))+1 00039700 00018 IF(POS.EQ.0) OUT=0 00039710 00019 RETURN 00039720 00020 END 00039740 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 CDATA +1222 SUBPROGRAMS CALLED SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] POS 1 OUT 2 TEMPORARIES .A0016 3 CARD1 7# 12# CARD2 7# 12# CDATA 11# 15# 16 17 CRSET 7# 12# DEF 7# 12# EQCHN 7# 12# ERROR 7# 12# FCTN 7# 12# LITBL 6# 12# NDT23 5# OBJCD 7# 12# 15# OPER 7# 12# OUT 5# 11# 16# 17# 18# POS 5# 11# 16 17 18 PTRS 7# 12# RMAX 6# 12# RMIN 6# 12# SUBSC 7# 12# SYM 7# 12# SYMTB 7# 12# TITLE 7# 12# TMAP 7# 12# TOKEN 7# 12# TYPCT 7# 12# XREF 7# 12# NDT23 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00039750 00002 C PROGRAM AUTHOR - GARY PELKEY 00039760 00003 C 00039770 00004 C 00039780 00005 SUBROUTINE NDT24 (PNT1,PNT2,RTC) 00039790 00006 REAL*8 RMIN,RMAX,LITBL(8192) 00039800 00007 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00039810 00008 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00039820 00009 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00039830 00010 3SYMTB(5,4096) 00039840 00011 INTEGER POSTMP 00012 INTEGER CDATA(144),PNT1,PNT2,RTC,SUB,POS,I 00039850 00013 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00039860 00014 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00039870 00015 2SYMTB,LITBL 00039880 00016 EQUIVALENCE (SUB,OBJCD(153)),(CDATA(1),OBJCD(1)) 00039890 00017 EQUIVALENCE (POS,OBJCD(154)),(I,OBJCD(155)) 00039900 00018 C 00039910 00019 C 00039920 00020 C THIS PROGRAM PERFORMS A SYNTAX CHECK ON A VARIABLE CANDIDATE 00039930 00021 C LOCATED IN CDATA SPECIFIED BY THE INPUT STARTING AND 00039940 00022 C STOPPING ADDRESSES. CHARACTERS ARE COMPARED AGAINST THE 00039950 00023 C ELEMENTS OF CRSET AND THE SUBSCRIPTS OF THE MATCHING 00039960 00024 C ELEMENT OF CRSET ARE SAVED IN THE SUBSC ARRAY. SUBSC IS 00039970 00025 C INITIALLY BLANKED OUT (SET TO ALL 1'S). 00039980 00026 C 00039990 00027 C 00040000 00028 RTC=0 00040010 00029 DO 100 SUB=1,6 00040020 00030 100 SUBSC(SUB)=1 00040030 00031 SUB=0 00040040 00032 IF(PNT2.GE.PNT1) GO TO 150 00040050 00033 C 00040060 00034 C 00040070 00035 C THE CALLING ROUTINE EXPECTED TO FIND A VARIABLE STARTING 00040080 00036 C AT PNT1 AND ENDING AT PNT2. PNT2 IS LESS THAN PNT1 SO 00040090 00037 C THERE IS NO VARIABLE. THE ERROR IS FLAGGED. 00040100 00038 C 00040110 00039 C 00040120 00040 CALL NDT13 (PNT1,519,3) 00040130 00041 GO TO 600 00040140 00042 150 DO 400 POS=PNT1,PNT2 00040150 00043 SUB=SUB+1 00040160 00044 DO 200 I=1,39 00040170 00045 IF(CRSET(I).EQ.CDATA(POS)) GO TO 300 00040180 00046 200 CONTINUE 00040190 00047 RTC=3 00040200 00048 C 00040210 00049 C 00040220 00050 C AN ILLEGAL CHARACTER HAS BEEN ENCOUNTERED. IT IS FLAGGED. 00040230 00051 C 00040240 00052 C 00040250 00053 POSTMP=POS 00054 CALL NDT13 (POSTMP,502,RTC) 00040260 00055 GO TO 400 00040270 00056 300 IF(SUB.LT.7) SUBSC(SUB)=I 00040280 NDT24 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 400 CONTINUE 00040290 00058 C 00040300 00059 C 00040310 00060 C THE SUBSC ARRAY HAS BEEN FILLED AND ANY ILLEGAL CHARACTERS 00040320 00061 C HAVE BEEN DETECTED. WHAT REMAINS IS JUST A CHECK TO 00040330 00062 C MAKE SURE THAT THE VARIABLE BEGINS WITH A LEGAL CHARACTER 00040340 00063 C AND THAT THE STRING IS NOT OVER SIX CHARACTERS LONG. 00040350 00064 C EITHER OF THESE ERRORS WILL BE FLAGGED. 00040360 00065 C 00040370 00066 C 00040380 00067 IF(SUB.LT.7) GO TO 500 00040390 00068 RTC=3 00040400 00069 CALL NDT13 (PNT1+6,503,RTC) 00040410 00070 500 IF(SUBSC(1).LT.30) GO TO 600 00040420 00071 RTC=3 00040430 00072 CALL NDT13 (PNT1,501,RTC) 00040440 00073 600 RETURN 00040450 00074 END 00040470 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 SUB +1452 CDATA +1222 POS +1453 I +1454 SUBPROGRAMS CALLED NDT13 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] PNT2 1 PNT1 2 RTC 3 POSTMP 4 .S0002 5 .S0001 6 .S0000 7 TEMPORARIES .A0016 10 .Q0000 11 CARD1 7# 13# CARD2 7# 13# CDATA 12# 16# 45 CRSET 7# 13# 45 DEF 7# 13# EQCHN 7# 13# ERROR 7# 13# FCTN 7# 13# I 12# 17# 44# 45 56 LITBL 6# 13# NDT13 40 54 69 72 NDT24 5# OBJCD 7# 13# 16# 17# OPER 7# 13# PNT1 5# 12# 32 40 40# 42 69 72 72# PNT2 5# 12# 32 42 POS 12# 17# 42# 45 53 POSTMP 11# 53# 54 54# PTRS 7# 13# RMAX 6# 13# RMIN 6# 13# RTC 5# 12# 28# 47# 54 54# 68# 69 69# 71# 72 72# SUB 12# 16# 29# 30 31# 43 43# 56 67 SUBSC 7# 13# 30# 56# 70 SYM 7# 13# SYMTB 7# 13# TITLE 7# 13# TMAP 7# 13# TOKEN 7# 13# TYPCT 7# 13# XREF 7# 13# 100P 29 30# 150P 32 42# 200P 44 46# 300P 45 56# 400P 42 55 57# 500P 67 70# 600P 41 70 73# NDT24 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00040480 00002 C PROGRAM AUTHOR - GARY PELKEY 00040490 00003 C 00040500 00004 C 00040510 00005 SUBROUTINE NDT25 (PNT1,PNT2,INCOD) 00040520 00006 C 00040530 00007 C 00040540 00008 C THIS ROUTINE ENTERS TOKENS FOR FUNCTIONS. UPON BEING INVOKED 00040550 00009 C THE SUBSC ARRAY HAS ALREADY BEEN BUILT AND THE CHARACTERS 00040560 00010 C SERVING AS THE FUNCT. NAME HAVE ALREADY BEEN SYNTAX CHECKED. 00040570 00011 C WHAT REMAINS IS TO IDENTIFY THE FUNCTION, IF POSSIBLE, AS ONE 00040580 00012 C SUPPORTED BY NDTRAN, BUILD THE TOKEN, AND MAKE SURE THE 00040590 00013 C ARGUMENT COUNT IS CORRECT. 00040600 00014 C 00040610 00015 C 00040620 00016 REAL*8 RMIN,RMAX,LITBL(8192) 00040630 00017 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00040640 00018 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00040650 00019 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00040660 00020 3SYMTB(5,4096) 00040670 00021 INTEGER BUFFR(5),I,PNT1,PNT2,TOKPT,INCOD 00040680 00022 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00040690 00023 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00040700 00024 2SYMTB,LITBL 00040710 00025 EQUIVALENCE (TOKPT,TOKEN(3)) 00040720 00026 IF(INCOD.NE.0) GO TO 125 00040730 00027 C 00040740 00028 C 00040750 00029 C PACKING THE FUNCTION 'CANDIDATE' FOR COMPARISON 00040760 00030 C 00040770 00031 C 00040780 00032 CALL NDT40 (BUFFR) 00040790 00033 DO 100 I=1,22 00040800 00034 IF(BUFFR(1).EQ.FCTN(1,I).AND.BUFFR(2).EQ.FCTN(2,I)) GO TO 200 00040810 00035 100 CONTINUE 00040820 00036 CALL NDT13 (PNT1,523,3) 00040830 00037 C 00040840 00038 C 00040850 00039 C THE INCOMING FUNCTION WAS NOT FOUND IN THE FCTN ARRAY SO 00040860 00040 C ITS STARTING POSITION WAS FLAGGED. SETTING I TO 0 HERE 00040870 00041 C WILL HAVE THE EFFECT OF INSERTING A TOKEN FOR A FUNCTION 00040880 00042 C INTO THE TOKEN ARRAY WITH A POINTER TO THE FCTN TABLE OF 0. 00040890 00043 C 00040900 00044 C 00040910 00045 125 I=0 00040920 00046 200 TOKPT=TOKPT+1 00040930 00047 IF(TOKPT.GT.80) CALL NDT12 (2) 00040940 00048 TOKEN(TOKPT)=20480+I 00040950 00049 C 00040960 00050 C 00040970 00051 C IF A VALID FUNCTION HAS BEEN ENCOUNTERED, NDT23 IS CALLED 00040980 00052 C TO VARIFY THAT THE NUMBER OF ARGUMENTS IS CORRECT. 00040990 00053 C BEFORE RETURNING, NDT23 IS CALLED TO MAP THE NEW TOKEN BACK 00041000 00054 C ONTO THE ORIGINAL CARDS. 00041010 00055 C 00041020 00056 C 00041030 NDT25 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 IF(I.NE.0) CALL NDT42 (PNT1,PNT2,FCTN(4,I)) 00041040 00058 CALL NDT23 (PNT1,TMAP(TOKPT)) 00041050 00059 RETURN 00041060 00060 END 00041080 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 TOKPT +524 SUBPROGRAMS CALLED NDT13 NDT40 NDT12 NDT42 NDT23 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] PNT2 1 BUFFR 2 PNT1 7 .R0000 10 INCOD 11 .S0000 12 I 13 TEMPORARIES .A0016 14 .Q0001 15 BUFFR 21# 32 32# 34 CARD1 17# 22# CARD2 17# 22# CRSET 17# 22# DEF 17# 22# EQCHN 17# 22# ERROR 17# 22# FCTN 17# 22# 34 57 57# I 21# 33# 34 45# 48 57 INCOD 5# 21# 26 LITBL 16# 22# NDT12 47 NDT13 36 NDT23 58 NDT25 5# NDT40 32 NDT42 57 OBJCD 17# 22# OPER 17# 22# PNT1 5# 21# 36 36# 57 57# 58 58# PNT2 5# 21# 57 57# PTRS 17# 22# RMAX 16# 22# RMIN 16# 22# SUBSC 17# 22# SYM 17# 22# SYMTB 17# 22# TITLE 17# 22# TMAP 17# 22# 58 58# TOKEN 17# 22# 25# 48# TOKPT 21# 25# 46 46# 47 48 58 TYPCT 17# 22# XREF 17# 22# 100P 33 35# 125P 26 45# 200P 34 46# NDT25 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00041090 00002 C PROGRAM AUTHOR - GARY PELKEY 00041100 00003 C 00041110 00004 C 00041120 00005 SUBROUTINE NDT26 (POS) 00041130 00006 C 00041140 00007 C 00041150 00008 C THIS ROUTINE UPDATES AN EXISTING VARIABLE TOKEN TO INDICATE 00041160 00009 C SUBSCRIPT INFORMATION. THE FOLLOWING SCHEME IS USED TO 00041170 00010 C REPRESENT TOKEN CLASS: 00041180 00011 C 00041190 00012 C TYPE CLASS 00041200 00013 C 00041210 00014 C UNSUBSCRIPTED 0 00041220 00015 C INVALID 1 00041230 00016 C .K 2 00041240 00017 C .JK 3 00041250 00018 C .KL 4 00041260 00019 C 00041270 00020 C TOKEN=4096*CLASS+(POINTER TO SYMTB)-1 00041280 00021 C 00041290 00022 C 00041300 00023 REAL*8 RMIN,RMAX,LITBL(8192) 00041310 00024 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00041320 00025 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00041330 00026 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00041340 00027 3SYMTB(5,4096) 00041350 00028 INTEGER POS,START,CDATA(144),BLANK,I,FIRST,SCOND,J,K,L,LENTH 00041360 00029 INTEGER TOKPT 00041370 00030 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00041380 00031 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00041390 00032 2SYMTB,LITBL 00041400 00033 EQUIVALENCE (CDATA(1),OBJCD(1)),(BLANK,CRSET(1)) 00041410 00034 EQUIVALENCE (J,CRSET(13)),(K,CRSET(14)),(L,CRSET(15)) 00041420 00035 EQUIVALENCE (TOKPT,TOKEN(3)) 00041430 00036 START=POS 00041440 00037 C 00041450 00038 C 00041460 00039 C HERE STARTS A SEARCH FOR A DELIMITER. IF ONE IS FOUND, POS 00041470 00040 C WILL POINT TO IT AND THUS POS WILL POINT TO THE NEXT TOKEN 00041480 00041 C WHEN THIS ROUTINE RETURNS. 00041490 00042 C 00041500 00043 C 00041510 00044 100 IF(CDATA(POS).EQ.BLANK) GO TO 200 00041520 00045 DO 150 I=2,9 00041530 00046 IF(CDATA(POS).EQ.OPER(I)) GO TO 200 00041540 00047 150 CONTINUE 00041550 00048 POS=POS+1 00041560 00049 GO TO 100 00041570 00050 200 LENTH=POS-START 00041580 00051 IF(TOKEN(TOKPT).EQ.24576) GO TO 1000 00041590 00052 IF(LENTH.GT.0) GO TO 300 00041600 00053 CALL NDT13 (START-1,508,1) 00041610 00054 GO TO 900 00041620 00055 C 00041630 00056 C 00041640 NDT26 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C A SIFTING ALGORITHM IS USED TO DETERMINE WHICH MULTIPLE OF 00041650 00058 C 4096 IS TO BE ADDED TO THE EXISTING TOKEN. 00041660 00059 C 00041670 00060 C 00041680 00061 300 FIRST=CDATA(START) 00041690 00062 SCOND=CDATA(START+1) 00041700 00063 IF(LENTH.EQ.1.AND.(FIRST.EQ.J.OR.FIRST.EQ.L)) GO TO 900 00041710 00064 C 00041720 00065 C 00041730 00066 C .J AND .L HAVE BEEN GIVEN AN 'INVALID' CLASSIFICATION BUT 00041740 00067 C ARE NOT FLAGGED IN THIS ROUTINE. 00041750 00068 C 00041760 00069 C 00041770 00070 IF(LENTH.EQ.1.AND.FIRST.EQ.K) GO TO 800 00041780 00071 IF(LENTH.EQ.2.AND.FIRST.EQ.J.AND.SCOND.EQ.K) GO TO 700 00041790 00072 IF(LENTH.EQ.2.AND.FIRST.EQ.K.AND.SCOND.EQ.L) GO TO 600 00041800 00073 C 00041810 00074 C 00041820 00075 C INVALID SUBSCRIPTS ARE FLAGGED HERE. 00041830 00076 C 00041840 00077 C 00041850 00078 CALL NDT13 (START,504,1) 00041860 00079 GO TO 900 00041870 00080 600 TOKEN(TOKPT)=TOKEN(TOKPT)+4096 00041880 00081 700 TOKEN(TOKPT)=TOKEN(TOKPT)+4096 00041890 00082 800 TOKEN(TOKPT)=TOKEN(TOKPT)+4096 00041900 00083 900 TOKEN(TOKPT)=TOKEN(TOKPT)+4096 00041910 00084 1000 RETURN 00041920 00085 END 00041940 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 CDATA +1222 BLANK +251 J +265 K +266 L +267 TOKPT +524 SUBPROGRAMS CALLED NDT13 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] POS 1 SCOND 2 LENTH 3 .S0000 4 I 5 FIRST 6 START 7 NDT26 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 TEMPORARIES .A0016 10 .Q0000 11 BLANK 28# 33# 44 CARD1 24# 30# CARD2 24# 30# CDATA 28# 33# 44 46 61 62 CRSET 24# 30# 33# 34# DEF 24# 30# EQCHN 24# 30# ERROR 24# 30# FCTN 24# 30# FIRST 28# 61# 63 70 71 72 I 28# 45# 46 J 28# 34# 63 71 K 28# 34# 70 71 72 L 28# 34# 63 72 LENTH 28# 50# 52 63 70 71 72 LITBL 23# 30# NDT13 53 78 NDT26 5# OBJCD 24# 30# 33# OPER 24# 30# 46 POS 5# 28# 36 44 46 48 48# 50 PTRS 24# 30# RMAX 23# 30# RMIN 23# 30# SCOND 28# 62# 71 72 START 28# 36# 50 53 61 62 78 78# SUBSC 24# 30# SYM 24# 30# SYMTB 24# 30# TITLE 24# 30# TMAP 24# 30# TOKEN 24# 30# 35# 51 80# 80 81# 81 82# 82 83# 83 TOKPT 29# 35# 51 80 81 82 83 TYPCT 24# 30# XREF 24# 30# 1000P 51 84# 100P 44# 49 150P 45 47# 200P 44 46 50# 300P 52 61# 600P 72 80# 700P 71 81# 800P 70 82# 900P 54 63 79 83# NDT26 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00041950 00002 C PROGRAM AUTHOR - GARY PELKEY 00041960 00003 C 00041970 00004 C 00041980 00005 SUBROUTINE NDT27 (PNT1,UPDAT) 00041990 00006 C 00042000 00007 C 00042010 00008 C THIS ROUTINE ENTERS AND UPDATES SYMBOLS IN THE SYMBOL TABLE 00042020 00009 C AND ENTERS A TOKEN AND TMAP ENTRY FOR THEM. THE SUBSCRIPTS 00042030 00010 C FOR THE SYMBOL ARE ASSUMED TO BE IN THE SUBSC ARRAY ALREADY. 00042040 00011 C 00042050 00012 C 00042060 00013 REAL*8 RMIN,RMAX,LITBL(8192) 00042070 00014 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00042080 00015 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00042090 00016 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00042100 00017 3SYMTB(5,4096) 00042110 00018 INTEGER PNT1,UPDAT,BUFFR(5),TOKPT 00042120 00019 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00042130 00020 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00042140 00021 2SYMTB,LITBL 00042150 00022 EQUIVALENCE (TOKPT,TOKEN(3)) 00042160 00023 CALL NDT40 (BUFFR) 00042170 00024 C 00042180 00025 C 00042190 00026 C THE HASH ROUTINE IS CALLED TO FIND OR CREATE THE 00042200 00027 C INCOMING SYMBOL AND RETURN A POINTER TO IT. 00042210 00028 C 00042220 00029 C 00042230 00030 CALL NDT37 (BUFFR(1),LOC) 00042240 00031 IF(UPDAT.EQ.0) GO TO 100 00042250 00032 C 00042260 00033 C 00042270 00034 C SYM(8,9 OR 10) IS UPDATED AS REQUESTED INDICATING PRINT, 00042280 00035 C PLOT OR USED ON RIGHT OF EQUALS SIGN, RESPECTIVELY. 00042290 00036 C 00042300 00037 C 00042310 00038 SYM(UPDAT+7)=1 00042320 00039 CALL NDT40 (SYMTB(1,LOC)) 00042330 00040 100 TOKPT=TOKPT+1 00042340 00041 IF(TOKPT.GT.80) CALL NDT12 (2) 00042350 00042 C 00042360 00043 C 00042370 00044 C THE TOKEN AND ITS MAPPING ENTRY ARE CREATED. 00042380 00045 C 00042390 00046 C 00042400 00047 TOKEN(TOKPT)=LOC-1 00042410 00048 CALL NDT23 (PNT1,TMAP(TOKPT)) 00042420 00049 RETURN 00042430 00050 END 00042450 EQUIVALENCED VARIABLES NDT27 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 TOKPT +524 SUBPROGRAMS CALLED NDT40 NDT12 NDT23 NDT37 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] BUFFR 1 PNT1 6 *LOC 7 UPDAT 10 TEMPORARIES .A0016 11 .Q0000 12 BUFFR 18# 23 23# 30 30# CARD1 14# 19# CARD2 14# 19# CRSET 14# 19# DEF 14# 19# EQCHN 14# 19# ERROR 14# 19# FCTN 14# 19# LITBL 13# 19# LOC 30 30# 39 47 NDT12 41 NDT23 48 NDT27 5# NDT37 30 NDT40 23 39 OBJCD 14# 19# OPER 14# 19# PNT1 5# 18# 48 48# PTRS 14# 19# RMAX 13# 19# RMIN 13# 19# SUBSC 14# 19# SYM 14# 19# 38# SYMTB 14# 19# 39 39# TITLE 14# 19# TMAP 14# 19# 48 48# TOKEN 14# 19# 22# 47# TOKPT 18# 22# 40 40# 41 47 48 TYPCT 14# 19# UPDAT 5# 18# 31 38 XREF 14# 19# 100P 31 40# NDT27 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00042460 00002 C * 00042470 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00042480 00004 C PROGRAM AUTHOR - THOMAS L EVERMAN JR * 00042490 00005 C * 00042500 00006 C THIS SUBROUTINE ALLOCATES TEMPORARY STORAGE LOCATIONS * 00042510 00007 C FOR INTERMEDIATE RESULTS OF ARITHMETIC OPERATIONS. * 00042520 00008 C * 00042530 00009 C***************************************************************** 00042540 00010 SUBROUTINE NDT28 (TEMP, VATOP) 00042550 00011 REAL*8 RMIN,RMAX,LITBL(8192) 00042560 00012 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00042570 00013 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00042580 00014 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00042590 00015 3SYMTB(5,4096) 00042600 00016 INTEGER I,ACC,TEMP,VATOP,VASTK(50) 00042610 00017 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00042620 00018 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00042630 00019 2SYMTB,LITBL 00042640 00020 EQUIVALENCE (VASTK(1),XREF(1)) 00042650 00021 DATA ACC /0/ 00042660 00022 C***************************************************************** 00042670 00023 C * 00042680 00024 C A 0 IN VASTK INDICATES THE RESULT OF A PRECEDING OPERATION * 00042690 00025 C IS STORED IN THE ACCUMULATOR. THIS SUBROUTINE MOVES ANY * 00042700 00026 C SUCH RESULT TO A TEMPORARY STORAGE LOCATION. TEMP IS THE * 00042710 00027 C NUMBER OF TEMPORARY LOCATIONS USED PREVIOUSLY. TEMPORARY * 00042720 00028 C STORAGE LOCATIONS ARE POSITIONS 1 - 10 IN THE VARIABLE ARRA* 00042730 00029 C VATOP IS THE LAST POSITION IN THE VARIABLE STACK TO BE * 00042740 00030 C SEARCHED FOR THE ACCUMULATOR. THE ENTIRE STACK IS OFTEN * 00042750 00031 C NOT SEARCHED BECAUSE OF THE REVERSE OPERATIONS AND COMMU * 00042760 00032 C TATIVE PROPERTIES. IF THE ACCUMULATOR IS FOUND IN THE * 00042770 00033 C STACK, A STORE INSTRUCTION IS GENERATED. * 00042780 00034 C * 00042790 00035 C***************************************************************** 00042800 00036 DO 100 I = 1, VATOP 00042810 00037 IF (VASTK(I) .EQ. ACC) GO TO 200 00042820 00038 100 CONTINUE 00042830 00039 GO TO 300 00042840 00040 200 TEMP = TEMP + 1 00042850 00041 IF (TEMP .GT. 10) CALL NDT12 (6) 00042860 00042 CALL NDT46 (2, TEMP) 00042870 00043 VASTK(I) = TEMP 00042880 00044 300 RETURN 00042890 00045 END 00042910 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 NDT28 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 VASTK +1602 SUBPROGRAMS CALLED NDT46 NDT12 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] ACC 1 .S0000 2 TEMP 3 VATOP 4 I 5 TEMPORARIES .A0016 6 ACC 16# 21# 37 CARD1 12# 17# CARD2 12# 17# CRSET 12# 17# DEF 12# 17# EQCHN 12# 17# ERROR 12# 17# FCTN 12# 17# I 16# 36# 37 43 LITBL 11# 17# NDT12 41 NDT28 10# NDT46 42 OBJCD 12# 17# OPER 12# 17# PTRS 12# 17# RMAX 11# 17# RMIN 11# 17# SUBSC 12# 17# SYM 12# 17# SYMTB 12# 17# TEMP 10# 16# 40 40# 41 42 42# 43 TITLE 12# 17# TMAP 12# 17# TOKEN 12# 17# TYPCT 12# 17# VASTK 16# 20# 37 43# VATOP 10# 16# 36 XREF 12# 17# 20# 100P 36 38# 200P 37 40# 300P 39 44# NDT28 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00042920 00002 C * 00042930 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00042940 00004 C PROGRAM AUTHOR - THOMAS L EVERMAN JR * 00042950 00005 C * 00042960 00006 C***************************************************************** 00042970 00007 SUBROUTINE NDT29 (TYPE,START,POS,STR) 00042980 00008 REAL*8 RMIN,RMAX,LITBL(8192) 00042990 00009 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00043000 00010 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00043010 00011 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00043020 00012 3SYMTB(5,4096) 00043030 00013 INTEGER TYPE,START,BLANK,POS,I,STRNG(384) 00043040 00014 INTEGER LPBGN,LPEND,STR 00043050 00015 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00043060 00016 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00043070 00017 2SYMTB,LITBL 00043080 00018 EQUIVALENCE (BLANK,CRSET(1)),(STRNG(1),CARD1(1)) 00043090 00019 C***************************************************************** 00043100 00020 C * 00043110 00021 C THIS PROGRAM SEARCHES AN EQUATION STRING FOR THE * 00043120 00022 C OCCURENCE OF AN OPERATOR. IF AN OPERATOR IS FOUND, * 00043130 00023 C ITS SUBSCRIPT IN THE OPER ARRAY IS RETURNED IN TYPE * 00043140 00024 C AND THE POSITION IN THE STRING PRECEDING THE OPERATOR * 00043150 00025 C IS RETURNED IN POS. THE ARGUMENT START INDICATES THE * 00043160 00026 C POSITION IN THE STRING AT WHICH THE SEARCH IS TO BEGIN. * 00043170 00027 C THE ARGUMENT STR INDICATES WHICH STRING IS TO BE SEARCHED: * 00043180 00028 C 1 - CARD1 2 - CARD2 4 - CDATA * 00043190 00029 C * 00043200 00030 C***************************************************************** 00043210 00031 TYPE = 0 00043220 00032 LPBGN = START + (STR - 1) * 80 00043230 00033 LPEND = 80 * STR - 8 00043240 00034 IF (STR .EQ. 4) LPEND = 381 00043250 00035 DO 100 POS = LPBGN, LPEND 00043260 00036 IF (STRNG(POS) .EQ. BLANK) GO TO 300 00043270 00037 DO 100 I = 1, 9 00043280 00038 IF (STRNG(POS) .EQ. OPER(I)) GO TO 200 00043290 00039 100 CONTINUE 00043300 00040 POS = POS + 1 00043310 00041 GO TO 300 00043320 00042 200 TYPE = I 00043330 00043 300 POS = POS - 1 - (STR - 1) * 80 00043340 00044 RETURN 00043350 00045 END 00043370 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 NDT29 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 BLANK +251 STRNG +642 SUBPROGRAMS CALLED SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] LPBGN 1 STR 2 POS 3 .S0001 4 .S0000 5 TYPE 6 LPEND 7 I 10 START 11 TEMPORARIES .A0016 12 BLANK 13# 18# 36 CARD1 9# 15# 18# CARD2 9# 15# CRSET 9# 15# 18# DEF 9# 15# EQCHN 9# 15# ERROR 9# 15# FCTN 9# 15# I 13# 37# 38 42 LITBL 8# 15# LPBGN 14# 32# 35 LPEND 14# 33# 34# 35 NDT29 7# OBJCD 9# 15# OPER 9# 15# 38 POS 7# 13# 35# 36 38 40 40# 43 43# PTRS 9# 15# RMAX 8# 15# RMIN 8# 15# START 7# 13# 32 STR 7# 14# 32 33 34 43 STRNG 13# 18# 36 38 SUBSC 9# 15# SYM 9# 15# SYMTB 9# 15# TITLE 9# 15# TMAP 9# 15# TOKEN 9# 15# TYPCT 9# 15# TYPE 7# 13# 31# 42# XREF 9# 15# 100P 35 37 39# 200P 38 42# 300P 36 41 43# NDT29 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00043380 00002 C * 00043390 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00043400 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY * 00043410 00005 C * 00043420 00006 C***************************************************************** 00043430 00007 SUBROUTINE NDT30 00043440 00008 C***************************************************************** 00043450 00009 C * 00043460 00010 C OUTPUT FIELD PROCESSOR * 00043470 00011 C * 00043480 00012 C THIS PROGRAM, PART OF THE OUTPUT SYNTAX PHASE, PROCESSES * 00043490 00013 C A CLAUSE INTO ITS BEGINNING AND END FIELDS. IT IS CALLED * 00043500 00014 C BY NDT09, CALLS NDT35, AND USES NDT13 FOR HANDLING ERRORS. * 00043510 00015 C * 00043520 00016 C * 00043530 00017 C***************************************************************** 00043540 00018 REAL*8 RMIN,RMAX,LITBL(8192) 00043550 00019 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00043560 00020 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00043570 00021 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00043580 00022 3SYMTB(5,4096) 00043590 00023 INTEGER CDATA(144),OUTPT(240),VARCT,TYPE,RUNNO,FLAG(11), 00043600 00024 1CHAR(10),RUN(11),CFLAG,VMAX,IVPLT 00043610 00025 INTEGER DMODE,RMODE,SMODE,LOOP,CLNUM,BGF(4),NDF(4),DELIM(6), 00043620 00026 1SRNUM,RGFST,SFLAG,SLASH,EQSGN,OPNTH,CPNTH,COMMA,BLANK,XCHAR 00043630 00027 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00043640 00028 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00043650 00029 2SYMTB,LITBL 00043660 00030 EQUIVALENCE (OUTPT(1),DEF(1),VARCT),(OUTPT(2),TYPE), 00043670 00031 1(OUTPT(3),RUNNO),(OUTPT(158),IVPLT), 00043680 00032 2(OUTPT(147),FLAG(1)),(OUTPT(179),RUN(1)),(OUTPT(200),CFLAG), 00043690 00033 3(OUTPT(190),CHAR(1)),(CDATA(1),OBJCD(1)) 00043700 00034 EQUIVALENCE (DMODE,OUTPT(201)),(RMODE,OUTPT(202)), 00043710 00035 1(SMODE,OUTPT(203)),(LOOP,OUTPT(204)),(CLNUM,OUTPT(205)), 00043720 00036 2(BGF(1),OUTPT(206)),(NDF(1),OUTPT(210)), 00043730 00037 3(SRNUM,OUTPT(220)),(RGFST,OUTPT(221)),(SFLAG,OUTPT(222)), 00043740 00038 4(VMAX,OUTPT(223)) 00043750 00039 EQUIVALENCE (DELIM(1),SLASH),(DELIM(2),EQSGN), 00043760 00040 1(DELIM(3),OPNTH),(DELIM(4),CPNTH),(DELIM(5),COMMA), 00043770 00041 2(DELIM(6),BLANK) 00043780 00042 DATA DELIM /'/','=','(',')',',',' '/ 00043790 00043 C***************************************************************** 00043800 00044 C * 00043810 00045 C THIS FIRST SECTION INITIALIZES RMODE AND THE FIELD MARKERS * 00043820 00046 C FOR A NEW CLAUSE. * 00043830 00047 C * 00043840 00048 C RMODE RANGE MODE 0 BEFORE PARENTHESES OCCUR * 00043850 00049 C 1 INSIDE PARENTHESES, BEFORE COMMA * 00043860 00050 C 2 INSIDE PARENTHESES, AFTER COMMA * 00043870 00051 C * 00043880 00052 C BGF, NDF BEGINNING AND END FIELD MARKERS * 00043890 00053 C A CLAUSE IS DIVIDED INTO FOUR FIELDS: * 00043900 00054 C 1 - VARIABLE FIELD (INCLUDES RUN NUMBER), * 00043910 00055 C 2 - PLOT CHARACTER FIELD, * 00043920 00056 C 3 - LOW FIELD, AND * 00043930 NDT30 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C 4 - HIGH FIELD. * 00043940 00058 C BGF MARKS THE BEGINNING OF EACH FIELD, AND * 00043950 00059 C NDF MARKS THE END OF THE FIELD. * 00043960 00060 C BGF(1) IS SET TO THE NEXT CHARACTER. * 00043970 00061 C * 00043980 00062 C SFLAG END OF SERIES FLAG 0 SERIES CONTINUES * 00043990 00063 C 1 END OF SERIES * 00044000 00064 C * 00044010 00065 C***************************************************************** 00044020 00066 SFLAG = 0 00044030 00067 RMODE = 0 00044040 00068 DO 50 XCHAR = 1, 4 00044050 00069 BGF(XCHAR) = 0 00044060 00070 50 NDF(XCHAR) = 0 00044070 00071 BGF(1) = LOOP + 1 00044080 00072 C***************************************************************** 00044090 00073 C * 00044100 00074 C THIS SECTION SEARCHES FOR A MEMBER OF THE DELIMITER ARRAY * 00044110 00075 C IN CDATA. * 00044120 00076 C * 00044130 00077 C DELIM - CONTAINS THE SIX DELIMITERS THE OUTPUT FIELD * 00044140 00078 C PROCESSOR LOOKS FOR: * 00044150 00079 C 1 - SLASH '/' * 00044160 00080 C 2 - EQSGN '=' EQUAL SIGN * 00044170 00081 C 3 - OPNTH '(' OPEN PARENTHESES * 00044180 00082 C 4 - CPNTH ')' CLOSED PARENTHESES * 00044190 00083 C 5 - COMMA ',' * 00044200 00084 C 6 - BLANK ' ' * 00044210 00085 C * 00044220 00086 C***************************************************************** 00044230 00087 100 LOOP = LOOP + 1 00044240 00088 DO 200 XCHAR = 1,6 00044250 00089 IF (CDATA(LOOP) .EQ. DELIM(XCHAR)) GO TO 300 00044260 00090 200 CONTINUE 00044270 00091 C***************************************************************** 00044280 00092 C * 00044290 00093 C IF THE CHARACTER WAS NOT ONE OF THE DELIM ARRAY, THE DATA * 00044300 00094 C MODE IS SET TO INTERIOR MODE (DMODE = 0), AND THEN CONTROL * 00044310 00095 C IS SENT BACK TO CHECK THE NEXT CHARACTER. * 00044320 00096 C * 00044330 00097 C***************************************************************** 00044340 00098 DMODE = 0 00044350 00099 GO TO 100 00044360 00100 C***************************************************************** 00044370 00101 C * 00044380 00102 C A CHARACTER WAS FOUND. IF IN INTERIOR MODE, CONTROL IS * 00044390 00103 C SENT TO THE APPROPRIATE SECTION. IF A BLANK OCCURS, GO TO * 00044400 00104 C THE BLANK SECTION ANYWAY. * 00044410 00105 C * 00044420 00106 C IF DMODE INDICATES BEGINNING MODE, A DELIMITER HAS OCCURED * 00044430 00107 C BEFORE ANY OTHER CHARACTER. * 00044440 00108 C * 00044450 00109 C***************************************************************** 00044460 00110 300 IF (DMODE .GE. 0) GO TO (400,900,1200,1500,1600,2100),XCHAR 00044470 00111 IF (XCHAR .EQ. 6) GO TO 2100 00044480 00112 CALL NDT13(LOOP, 703, 2) 00044490 NDT30 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 BGF(1) = LOOP + 1 00044500 00114 GO TO 100 00044510 00115 C***************************************************************** 00044520 00116 C * 00044530 00117 C * * * * * SLASH * * * * * * 00044540 00118 C * 00044550 00119 C * 00044560 00120 C SET THE END OF CLAUSE MARKER (NDF(4)). * 00044570 00121 C * 00044580 00122 C***************************************************************** 00044590 00123 400 NDF(4) = LOOP - 1 00044600 00124 C***************************************************************** 00044610 00125 C * 00044620 00126 C ENTRY POINT FOR FINDING A )/ * 00044630 00127 C PRINT CARDS ARE NOT ALLOWED TO HAVE SLASHES. * 00044640 00128 C * 00044650 00129 C***************************************************************** 00044660 00130 500 IF (TYPE .EQ. 13) GO TO 600 00044670 00131 CALL NDT13(LOOP, 702, 1) 00044680 00132 GO TO 700 00044690 00133 C***************************************************************** 00044700 00134 C * 00044710 00135 C SET SFLAG TO INDICATE END OF SERIES. * 00044720 00136 C FOR A PLOT, A DOUBLE SLASH INDICATES AN INDEPENDENT * 00044730 00137 C VARIABLE FIELD. IF ENCOUNERED, SET DMODE TO INDEPENDENT * 00044740 00138 C VARIABLE MODE. * 00044750 00139 C * 00044760 00140 C***************************************************************** 00044770 00141 600 SFLAG = 1 00044780 00142 IF (CDATA(LOOP+1) .NE. SLASH) GO TO 700 00044790 00143 DMODE = 2 00044800 00144 IVPLT = 1 00044810 00145 LOOP = LOOP + 1 00044820 00146 C***************************************************************** 00044830 00147 C * 00044840 00148 C CALL NDT35, THE OUTPUT DELIMITER PROCESSOR, TO CHECK FOR * 00044850 00149 C CONSECUTIVE COMMAS AND SLASHES. * 00044860 00150 C * 00044870 00151 C***************************************************************** 00044880 00152 700 CALL NDT35(COMMA) 00044890 00153 CALL NDT35(SLASH) 00044900 00154 IF (CDATA(LOOP+1) .EQ. COMMA) GO TO 700 00044910 00155 C***************************************************************** 00044920 00156 C * 00044930 00157 C IF NOT INSIDE PARENTHESES, GO TO THE END OF CLAUSE SECTION.* 00044940 00158 C OTHERWISE, THERE SHOULD HAVE BEEN A CLOSED PARENTHESES * 00044950 00159 C BEFORE THIS SLASH. * 00044960 00160 C * 00044970 00161 C CHECK THE NEXT CHARACTER FOR A CPNTH, CALL THE APPROPRIATE * 00044980 00162 C ERROR MESSAGE, AND THEN GO TO THE END OF CLAUSE SECTION. * 00044990 00163 C IF THE CPNTH WAS MISSING, CHANGE THE CHARACTER SO THAT THE * 00045000 00164 C RANGE PROCESSOR CAN SET THE SERIES CORRECTLY. * 00045010 00165 C * 00045020 00166 C***************************************************************** 00045030 00167 IF (RMODE .EQ. 0) GO TO 2300 00045040 00168 IF (CDATA(LOOP+1) .EQ. CPNTH) GO TO 800 00045050 NDT30 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 00169 CALL NDT13(LOOP, 710, 2) 00045060 00170 GO TO 2300 00045070 00171 800 CALL NDT13(LOOP, 705, 1) 00045080 00172 LOOP = LOOP + 1 00045090 00173 GO TO 2300 00045100 00174 C***************************************************************** 00045110 00175 C * 00045120 00176 C * * * * * EQUAL SIGN * * * * * * 00045130 00177 C * 00045140 00178 C * 00045150 00179 C AN EQUAL SIGN MAY NOT APPEAR WITHIN PARENTHESES. IF FOUND,* 00045160 00180 C NOTE THE ERROR AND LOOK FOR ANOTHER DELIMITER. * 00045170 00181 C * 00045180 00182 C***************************************************************** 00045190 00183 900 IF (RMODE .EQ. 0) GO TO 1000 00045200 00184 CALL NDT13(LOOP, 718, 2) 00045210 00185 GO TO 100 00045220 00186 C***************************************************************** 00045230 00187 C * 00045240 00188 C NO PARENTHESES HAVE OCCURED. SET THE FIELD MARKERS, CHECK * 00045250 00189 C FOR CONSECUTIVE EQSGNS, AND CHECK FOR A PRINT CARD. THE * 00045260 00190 C EQUAL SIGN IS NOT LEGAL ON A PRINT CARD. * 00045270 00191 C * 00045280 00192 C THEN GO SEARCH FOR ANOTHER DELIMITER. * 00045290 00193 C * 00045300 00194 C***************************************************************** 00045310 00195 1000 NDF(1) = LOOP - 1 00045320 00196 CALL NDT35(EQSGN) 00045330 00197 IF (TYPE .EQ. 12) GO TO 1100 00045340 00198 BGF(2) = LOOP + 1 00045350 00199 GO TO 100 00045360 00200 1100 CALL NDT13(LOOP, 712, 2) 00045370 00201 BGF(2) = -1 00045380 00202 GO TO 100 00045390 00203 C***************************************************************** 00045400 00204 C * 00045410 00205 C * * * * * OPEN PARENTHESIS * * * * * * 00045420 00206 C * 00045430 00207 C * 00045440 00208 C * 00045450 00209 C PARENTHESES ARE NOT ALLOWED ON PRINT CARDS. * 00045460 00210 C * 00045470 00211 C FIRST CHECK FOR PROPER PARENTHESES. IF A SECOND OPNTH * 00045480 00212 C IS ENCOUNTERED, IT IS ASSUMED TO BE A CLOSED PARNTHESIS. * 00045490 00213 C CONTROL IS SENT TO THAT SECTION. * 00045500 00214 C * 00045510 00215 C***************************************************************** 00045520 00216 1200 IF (TYPE .EQ. 12) CALL NDT13(LOOP, 722, 2) 00045530 00217 IF (RMODE .EQ. 0) GO TO 1300 00045540 00218 CALL NDT13(LOOP, 706, 2) 00045550 00219 GO TO 1500 00045560 00220 C***************************************************************** 00045570 00221 C * 00045580 00222 C SET THE RANGE MODE AND FIELD MARKERS. CHECK IF THE END * 00045590 00223 C OF THE VARIABLE FIELD (NDF(1)) HAS BEEN DEFINED. IF IT * 00045600 00224 C HASN'T, THEN SET IT NOW. * 00045610 NDT30 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-4 00225 C * 00045620 00226 C***************************************************************** 00045630 00227 1300 RMODE = 1 00045640 00228 NDF(2) = LOOP - 1 00045650 00229 IF (NDF(1) .NE. 0) GO TO 1400 00045660 00230 NDF(1) = LOOP - 1 00045670 00231 BGF(2) = -1 00045680 00232 C***************************************************************** 00045690 00233 C * 00045700 00234 C CHECK FOR CONSECUTIVE OPNTH, THEN LOOK FOR ANOTHER * 00045710 00235 C DELIMITER. * 00045720 00236 C * 00045730 00237 C***************************************************************** 00045740 00238 1400 CALL NDT35(OPNTH) 00045750 00239 BGF(3) = LOOP + 1 00045760 00240 GO TO 100 00045770 00241 C***************************************************************** 00045780 00242 C * 00045790 00243 C * * * * * CLOSED PARENTHESIS * * * * * * 00045800 00244 C * 00045810 00245 C * 00045820 00246 C SET FIELD MARKERS. CHECK FOR PARENTHESIS ERRORS, AND * 00045830 00247 C CONSECUTIVE CPNTHS. SET RMODE TO INDICATE COMPLETED * 00045840 00248 C PARENTHESES. * 00045850 00249 C * 00045860 00250 C***************************************************************** 00045870 00251 1500 NDF(4) = LOOP - 1 00045880 00252 IF (RMODE .NE. 2) CALL NDT13(LOOP, 708 + RMODE*11, 2) 00045890 00253 CALL NDT35(CPNTH) 00045900 00254 RMODE = 0 00045910 00255 C***************************************************************** 00045920 00256 C * 00045930 00257 C A SLASH OR A COMMA SHOULD OCCUR AFTER A CPNTH. UPON THIS * 00045940 00258 C OCCURENCE, SEND CONTROL TO THE CORRESPONDING SECTION. * 00045950 00259 C NOTE THE ERROR IF BOTH TESTS FAIL, THEN GO TO * 00045960 00260 C END OF CLAUSE. * 00045970 00261 C * 00045980 00262 C***************************************************************** 00045990 00263 LOOP = LOOP + 1 00046000 00264 IF (CDATA(LOOP) .EQ. COMMA) GO TO 1700 00046010 00265 IF (CDATA(LOOP) .EQ. SLASH) GO TO 500 00046020 00266 IF (CDATA(LOOP) .EQ. BLANK) GO TO 2200 00046030 00267 LOOP = LOOP - 1 00046040 00268 CALL NDT13(LOOP, 707, 2) 00046050 00269 GO TO 2300 00046060 00270 C***************************************************************** 00046070 00271 C * 00046080 00272 C * * * * * COMMA * * * * * * 00046090 00273 C * 00046100 00274 C * 00046110 00275 C SET FIELD MARKER, CHECK FOR CONSECUTIVE COMMAS. * 00046120 00276 C * 00046130 00277 C***************************************************************** 00046140 00278 1600 NDF(4) = LOOP - 1 00046150 00279 CALL NDT35(COMMA) 00046160 00280 C***************************************************************** 00046170 NDT30 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-5 00281 C * 00046180 00282 C A COMMA IS HANDLED DIFFERENTLY, ACCORDING TO THE STATUS * 00046190 00283 C OF THE PARENTHESES, AS INDICATED BY RMODE. * 00046200 00284 C * 00046210 00285 C***************************************************************** 00046220 00286 IF (RMODE - 1) 1700, 1800, 1900 00046230 00287 C * 00046240 00288 C * 00046250 00289 C OUTSIDE PARENTHESES * 00046260 00290 C * 00046270 00291 C CHECK FOR CONSECUTIVE SLASHES AND COMMAS, AND THEN GO TO * 00046280 00292 C END OF CLAUSE. * 00046290 00293 C * 00046300 00294 C***************************************************************** 00046310 00295 1700 CALL NDT35(SLASH) 00046320 00296 CALL NDT35(COMMA) 00046330 00297 IF (CDATA(LOOP + 1) .EQ. SLASH) GO TO 1700 00046340 00298 GO TO 2300 00046350 00299 C***************************************************************** 00046360 00300 C * 00046370 00301 C INSIDE PARENTHESES * 00046380 00302 C * 00046390 00303 C SET RMODE, FIELD MARKERS, AND SEARCH FOR ANOTHER DELIMITER.* 00046400 00304 C * 00046410 00305 C***************************************************************** 00046420 00306 1800 NDF(3) = NDF(4) 00046430 00307 RMODE = 2 00046440 00308 BGF(4) = LOOP + 1 00046450 00309 GO TO 100 00046460 00310 C***************************************************************** 00046470 00311 C * 00046480 00312 C SECOND COMMA WITHIN PARENTHESES * 00046490 00313 C * 00046500 00314 C IF NEXT CHARACTER IS A CLOSED PARENTHESIS, ASSUME THE ,) * 00046510 00315 C WAS MEANT TO BE A ),. * 00046520 00316 C IF NOT, TREAT THE SECOND COMMA AS AN OUTSIDE COMMA. * 00046530 00317 C * 00046540 00318 C***************************************************************** 00046550 00319 1900 IF (CDATA(LOOP + 1) .EQ. CPNTH) GO TO 2000 00046560 00320 CALL NDT13(LOOP, 709, 2) 00046570 00321 GO TO 1700 00046580 00322 2000 CALL NDT13(LOOP, 705, 1) 00046590 00323 LOOP = LOOP + 1 00046600 00324 GO TO 2300 00046610 00325 C***************************************************************** 00046620 00326 C * 00046630 00327 C * * * * * BLANK * * * * * * 00046640 00328 C * 00046650 00329 C * 00046660 00330 C SET END FIELD MARKER. * 00046670 00331 C IF DMODE IS ZERO, THEN THERE WAS NO VARIABLE FIELD ON THIS * 00046680 00332 C CARD. SET BGF(1) TO -1 TO SIGNIFY THIS CONDITION. * 00046690 00333 C THEN GO TO THE RETURN SECTION. * 00046700 00334 C * 00046710 00335 C***************************************************************** 00046720 00336 2100 NDF(4) = LOOP - 1 00046730 NDT30 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-6 00337 IF (DMODE .GE. 0) GO TO 2200 00046740 00338 CALL NDT13(LOOP, 704, 3) 00046750 00339 BGF(1) = -1 00046760 00340 GO TO 2800 00046770 00341 C***************************************************************** 00046780 00342 C * 00046790 00343 C CHECK THE LAST CHARACTERS BEFORE THE BLANK FOR A COMMA OR * 00046800 00344 C SLASH. THIS IS AN ERROR. * 00046810 00345 C * 00046820 00346 C***************************************************************** 00046830 00347 2200 IF (CDATA(LOOP-1) .EQ. SLASH .OR. CDATA(LOOP-1) .EQ. COMMA) 00046840 00348 1 CALL NDT13(LOOP-1, 703, 2) 00046850 00349 DMODE = 1 00046860 00350 SFLAG = 1 00046870 00351 C***************************************************************** 00046880 00352 C * 00046890 00353 C * * * * * END OF CLAUSE * * * * * * 00046900 00354 C * 00046910 00355 C * 00046920 00356 C THIS SECTION CHECKS THROUGH THE FIELD MARKERS TO MAKE SURE * 00046930 00357 C ALL DEFAULTS ARE SET. THERE ARE THREE CASES THAT MAY OCCUR* 00046940 00358 C THAT ARE HANDLED: * 00046950 00359 C * 00046960 00360 C VARIABLE BY ITSELF (NDF1 = 0) * 00046970 00361 C NDF(1) = CURRENT POSITION * 00046980 00362 C BEGINNING FIELDS 2 - 4 DEFAULT (-1) * 00046990 00363 C * 00047000 00364 C VARIABLE AND PLOT CHARACTER (NDF2 = 0) * 00047010 00365 C NDF(2) = CURRENT POSITION * 00047020 00366 C BEGINNING FIELDS 3 AND 4 DEFAULT * 00047030 00367 C * 00047040 00368 C NO COMMA INSIDE PARENTHESES (BGF(4) = 0) * 00047050 00369 C NDF(3) = NDF(4) * 00047060 00370 C BEGINNING FIELD 4 DEFAULT * 00047070 00371 C * 00047080 00372 C***************************************************************** 00047090 00373 2300 IF (NDF(2) .EQ. 0) GO TO 2400 00047100 00374 IF (BGF(4) .NE. 0) GO TO 2800 00047110 00375 NDF(3) = NDF(4) 00047120 00376 GO TO 2700 00047130 00377 2400 IF (NDF(1) .EQ. 0) GO TO 2500 00047140 00378 NDF(2) = NDF(4) 00047150 00379 GO TO 2600 00047160 00380 2500 NDF(1) = NDF(4) 00047170 00381 BGF(2) = -1 00047180 00382 2600 BGF(3) = -1 00047190 00383 2700 BGF(4) = -1 00047200 00384 C***************************************************************** 00047210 00385 C * 00047220 00386 C * * * * * RETURN SECTION * * * * * * 00047230 00387 C * 00047240 00388 C IF LAST VARIABLE TO BE PROCESSED, SET END OF SERIES FLAG. * 00047250 00389 C * 00047260 00390 C***************************************************************** 00047270 00391 2800 IF (CLNUM .EQ. VMAX) SFLAG = 1 00047280 00392 RETURN 00047290 NDT30 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-7 00393 END 00047310 EQUIVALENCED VARIABLES ( DELIM 1 SLASH 1 EQSGN 2 OPNTH 3 CPNTH 4 COMMA 5 BLANK 6 ) COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 OUTPT +1462 VARCT +1462 CDATA +1222 TYPE +1463 RUNNO +1464 IVPLT +1717 FLAG +1704 RUN +1744 CFLAG +1771 CHAR +1757 DMODE +1772 RMODE +1773 SMODE +1774 LOOP +1775 CLNUM +1776 BGF +1777 NDF +2003 SRNUM +2015 RGFST +2016 SFLAG +2017 VMAX +2020 SUBPROGRAMS CALLED NDT13 NDT35 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] COMMA 5 EQSGN 2 XCHAR 7 BLANK 6 SLASH 1 DELIM 1 .S0001 10 OPNTH 3 .S0000 11 CPNTH 4 TEMPORARIES .A0016 12 .Q0000 13 BGF 25# 34# 69# 71# 113# 198# 201# 231# 239# 308# 339# 374 381# 382# 383# BLANK 25# 39# 266 CARD1 19# 27# CARD2 19# 27# CDATA 23# 30# 89 142 154 168 264 265 266 297 319 347 CFLAG 23# 30# CHAR 23# 30# CLNUM 25# 34# 391 COMMA 25# 39# 152 152# 154 264 279 279# 296 296# 347 CPNTH 25# 39# 168 253 253# 319 CRSET 19# 27# DEF 19# 27# 30# DELIM 25# 39# 42# 89 DMODE 25# 34# 98# 110 143# 337 349# EQCHN 19# 27# EQSGN 25# 39# 196 196# ERROR 19# 27# FCTN 19# 27# FLAG 23# 30# IVPLT 23# 30# 144# LITBL 18# 27# LOOP 25# 34# 71 87 87# 89 112 112# 113 123 131 131# 142 145 145# 154 168 169 169# 171 171# 172 172# 184 184# 195 198 200 200# 216 216# 218 218# 228 230 239 251 252 252# 263 263# 264 265 266 267 267# 268 268# 278 297 308 319 320 320# 322 322# 323 323# 336 338 338# 347 NDF 25# 34# 70# 123# 195# 228# 229 230# 251# 278# 306# 306 336# 373 375# 375 377 378# 378 380# 380 NDT13 112 131 169 171 184 200 216 218 252 268 320 322 338 347 NDT30 7# NDT35 152 153 196 238 253 279 295 296 OBJCD 19# 27# 30# OPER 19# 27# OPNTH 25# 39# 238 238# OUTPT 23# 30# 34# PTRS 19# 27# RGFST 25# 34# RMAX 18# 27# RMIN 18# 27# RMODE 25# 34# 67# 167 183 217 227# 252 254# 286 307# RUN 23# 30# RUNNO 23# 30# SFLAG 25# 34# 66# 141# 350# 391# SLASH 25# 39# 142 153 153# 265 295 295# 297 347 SMODE 25# 34# SRNUM 25# 34# SUBSC 19# 27# SYM 19# 27# SYMTB 19# 27# TITLE 19# 27# TMAP 19# 27# TOKEN 19# 27# TYPCT 19# 27# TYPE 23# 30# 130 197 216 VARCT 23# 30# VMAX 23# 34# 391 XCHAR 25# 68# 69 70 88# 89 110 111 XREF 19# 27# 1000P 183 195# 100P 87# 99 114 185 199 202 240 309 1100P 197 200# 1200P 110 216# 1300P 217 227# 1400P 229 238# 1500P 110 219 251# 1600P 110 278# 1700P 264 286 295# 297 321 1800P 286 306# 1900P 286 319# 2000P 319 322# 200P 88 90# 2100P 110 111 336# 2200P 266 337 347# 2300P 167 170 173 269 298 324 373# 2400P 373 377# 2500P 377 380# 2600P 379 382# 2700P 376 383# 2800P 340 374 391# 300P 89 110# 400P 110 123# 500P 130# 265 50P 68 70# 600P 130 141# 700P 132 142 152# 154 800P 168 171# 900P 110 183# NDT30 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00047320 00002 C * 00047330 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00047340 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY * 00047350 00005 C * 00047360 00006 C***************************************************************** 00047370 00007 SUBROUTINE NDT31 00047380 00008 C***************************************************************** 00047390 00009 C * 00047400 00010 C OUTPUT VARIABLE PROCESSOR * 00047410 00011 C * 00047420 00012 C THIS PROGRAM, PART OF THE OUTPUT SYNTAX PHASE, PROCESSES * 00047430 00013 C THE VARIABLES FOUND ON AN OUTPUT CARD. IT IS CALLED BY * 00047440 00014 C NDT09, CALLS NDT36 TO PROCESS THE RUN NUMBER FIELD, CALLS * 00047450 00015 C NDT24 AND NDT27 TO CHECK THE SYNTAX OF THE VARIABLE, AND * 00047460 00016 C USES NDT13 FOR ERROR HANDLING. * 00047470 00017 C * 00047480 00018 C***************************************************************** 00047490 00019 REAL*8 RMIN,RMAX,LITBL(8192) 00047500 00020 REAL*8 LOW(11),HIGH(11) 00047510 00021 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00047520 00022 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00047530 00023 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00047540 00024 3SYMTB(5,4096) 00047550 00025 INTEGER CDATA(144),OUTPT(240),VARCT,TYPE,RUNNO,VNUM(11), 00047560 00026 1FLAG(11),RUN(11),CHAR(10),CFLAG 00047570 00027 INTEGER DMODE,RMODE,SMODE,LOOP,CLNUM,BGF(4),NDF(4), 00047580 00028 1XCHAR,VAROK,BGF1,NDF1,XOTPT 00047590 00029 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00047600 00030 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00047610 00031 2SYMTB,LITBL 00047620 00032 EQUIVALENCE (OUTPT(1),DEF(1),VARCT),(OUTPT(2),TYPE), 00047630 00033 1(OUTPT(3),RUNNO),(OUTPT(103),LOW(1)),(OUTPT(125),HIGH(1)), 00047640 00034 2(OUTPT(147),FLAG(1)),(OUTPT(179),RUN(1)),(OUTPT(200),CFLAG), 00047650 00035 3(OUTPT(190),CHAR(1)),(CDATA(1),OBJCD(1)),(OUTPT(92),VNUM(1)) 00047660 00036 EQUIVALENCE (DMODE,OUTPT(201)),(RMODE,OUTPT(202)), 00047670 00037 1(SMODE,OUTPT(203)),(LOOP,OUTPT(204)),(CLNUM,OUTPT(205)), 00047680 00038 2(BGF(1),OUTPT(206),BGF1),(NDF(1),OUTPT(210),NDF1), 00047690 00039 3(SRNUM,OUTPT(220)),(CLFST,OUTPT(221)) 00047700 00040 C***************************************************************** 00047710 00041 C * 00047720 00042 C BEFORE ACTUALLY CHECKING THE VARIABLE, THE RUN NUMBER MUST * 00047730 00043 C BE FOUND AND CHECKED. CALL NDT36 TO DO THIS. * 00047740 00044 C * 00047750 00045 C***************************************************************** 00047760 00046 CALL NDT36 00047770 00047 C***************************************************************** 00047780 00048 C * 00047790 00049 C CALL THE VARIABLE SYNTAX CHECKER. VAROK, THE RETURN CODE * 00047800 00050 C INDICATES IF THE VARIABLE IS OKAY. IF IT ISN'T, RETURN. * 00047810 00051 C THEN CALL THE VARIABLE PROCESSOR. * 00047820 00052 C * 00047830 00053 C***************************************************************** 00047840 00054 CALL NDT24(BGF1, NDF1, VAROK) 00047850 00055 IF (VAROK .NE. 0) GO TO 1000 00047860 00056 CALL NDT27(BGF1, TYPE-11) 00047870 NDT31 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C***************************************************************** 00047880 00058 C * 00047890 00059 C PLACE THE VARIABLE NAME AND VARIABLE NUMBER IN THE * 00047900 00060 C OUTPUT BUFFER. * 00047910 00061 C * 00047920 00062 C***************************************************************** 00047930 00063 DO 900 XCHAR = 1, 6 00047940 00064 XOTPT = 8*CLNUM - 5 + XCHAR 00047950 00065 900 OUTPT(XOTPT) = SYM(XCHAR) 00047960 00066 VNUM(CLNUM) = SYM(14) 00047970 00067 C***************************************************************** 00047980 00068 C * 00047990 00069 C * * * * * RETURN SECTION * * * * * * 00048000 00070 C * 00048010 00071 C***************************************************************** 00048020 00072 1000 RETURN 00048030 00073 END 00048050 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 OUTPT +1462 VARCT +1462 CDATA +1222 TYPE +1463 RUNNO +1464 LOW +1630 HIGH +1656 FLAG +1704 RUN +1744 CFLAG +1771 CHAR +1757 VNUM +1615 DMODE +1772 RMODE +1773 SMODE +1774 LOOP +1775 CLNUM +1776 BGF +1777 BGF1 +1777 NDF +2003 NDF1 +2003 SRNUM +2015 CLFST +2016 SUBPROGRAMS CALLED NDT27 NDT36 NDT24 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] XCHAR 1 VAROK 2 .S0000 3 XOTPT 4 TEMPORARIES .A0016 5 .Q0000 6 BGF 27# 36# BGF1 27# 36# 54 54# 56 56# CARD1 21# 29# CARD2 21# 29# CDATA 25# 32# CFLAG 25# 32# CHAR 25# 32# CLFST 36# CLNUM 27# 36# 64 66 CRSET 21# 29# DEF 21# 29# 32# DMODE 27# 36# EQCHN 21# 29# ERROR 21# 29# FCTN 21# 29# FLAG 25# 32# HIGH 20# 32# LITBL 19# 29# LOOP 27# 36# LOW 20# 32# NDF 27# 36# NDF1 27# 36# 54 54# NDT24 54 NDT27 56 NDT31 7# NDT36 46 OBJCD 21# 29# 32# OPER 21# 29# OUTPT 25# 32# 36# 65# PTRS 21# 29# RMAX 19# 29# RMIN 19# 29# RMODE 27# 36# RUN 25# 32# RUNNO 25# 32# SMODE 27# 36# SRNUM 36# SUBSC 21# 29# SYM 21# 29# 65 66 SYMTB 21# 29# TITLE 21# 29# TMAP 21# 29# TOKEN 21# 29# TYPCT 21# 29# TYPE 25# 32# 56 VARCT 25# 32# VAROK 27# 54 54# 55 VNUM 25# 32# 66# XCHAR 27# 63# 64 65 XOTPT 27# 64# 65 XREF 21# 29# 1000P 55 72# 900P 63 65# NDT31 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00048060 00002 C * 00048070 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00048080 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY * 00048090 00005 C * 00048100 00006 C***************************************************************** 00048110 00007 SUBROUTINE NDT32 00048120 00008 C***************************************************************** 00048130 00009 C * 00048140 00010 C PLOT CHARACTER PROCESSOR * 00048150 00011 C * 00048160 00012 C THIS PROGRAM, PART OF THE OUTPUT SYNTAX PHASE, PROCESSES * 00048170 00013 C THE PLOT CHARACTERS FOUND ON A PLOT CARD. IT IS CALLED * 00048180 00014 C BY NDT09, AND USES NDT13 FOR HANDLING ERRORS. * 00048190 00015 C * 00048200 00016 C NDT32 FILLS IN THE OUTPUT BUFFER PLOT CHARACTER ARRAY, * 00048210 00017 C CHAR, CHECKING FOR ILLEGAL CHARACTERS AND DUPLICATIONS. * 00048220 00018 C * 00048230 00019 C***************************************************************** 00048240 00020 REAL*8 RMIN,RMAX,LITBL(8192) 00048250 00021 REAL*8 LOW(11),HIGH(11) 00048260 00022 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00048270 00023 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00048280 00024 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00048290 00025 3SYMTB(5,4096) 00048300 00026 INTEGER CDATA(144),OUTPT(240),VARCT,TYPE,RUNNO,FLAG(11), 00048310 00027 1CHAR(10),RUN(11),CFLAG 00048320 00028 INTEGER DMODE,RMODE,SMODE,LOOP,CLNUM,BGF(4),NDF(4),BGF2, 00048330 00029 1SRNUM,CLFST,XCHAR,OMEGA 00048340 00030 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00048350 00031 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00048360 00032 2SYMTB,LITBL 00048370 00033 EQUIVALENCE (OUTPT(1),DEF(1),VARCT),(OUTPT(2),TYPE), 00048380 00034 1(OUTPT(3),RUNNO),(OUTPT(103),LOW(1)),(OUTPT(125),HIGH(1)), 00048390 00035 2(OUTPT(147),FLAG(1)),(OUTPT(179),RUN(1)),(OUTPT(200),CFLAG), 00048400 00036 3(OUTPT(190),CHAR(1)),(CDATA(1),OBJCD(1)) 00048410 00037 EQUIVALENCE (DMODE,OUTPT(201)),(RMODE,OUTPT(202)), 00048420 00038 1(SMODE,OUTPT(203)),(LOOP,OUTPT(204)),(CLNUM,OUTPT(205)), 00048430 00039 2(BGF(1),OUTPT(206)),(NDF(1),OUTPT(210)),(DOT,OPER(1)), 00048440 00040 3(SRNUM,OUTPT(220)),(CLFST,OUTPT(221)) 00048450 00041 C***************************************************************** 00048460 00042 C * 00048470 00043 C IF THERE IS NO PLOT CHARACTER FIELD, PROCEED IMMEDIATELY * 00048480 00044 C TO THE RETURN SECTION. * 00048490 00045 C * 00048500 00046 C AN INDEPENDENT VARIABLE MAY NOT HAVE A PLOT CHARACTER. * 00048510 00047 C * 00048520 00048 C***************************************************************** 00048530 00049 BGF2 = BGF(2) 00048540 00050 IF (BGF2 .LE. 0) GO TO 700 00048550 00051 IF (CLNUM .NE. 1) GO TO 100 00048560 00052 CALL NDT13(BGF2-1, 723, 2) 00048570 00053 GO TO 100 00048580 00054 C***************************************************************** 00048590 00055 C * 00048600 00056 C CHECK THE LENGTH OF THE PLOT CHARACTER FIELD. * 00048610 NDT32 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C * 00048620 00058 C***************************************************************** 00048630 00059 100 IF (NDF(2)-BGF2) 200, 400, 300 00048640 00060 C***************************************************************** 00048650 00061 C * 00048660 00062 C NO FIELD AFTER EQUAL SIGN. * 00048670 00063 C CALL THE ERROR ROUTINE, AND GO TO THE RETURN SECTION. * 00048680 00064 C * 00048690 00065 C***************************************************************** 00048700 00066 200 CALL NDT13(NDF(2), 715, 2) 00048710 00067 GO TO 700 00048720 00068 C***************************************************************** 00048730 00069 C * 00048740 00070 C FIELD TOO LONG --- NOTE ERROR AND IGNORE EXTRA CHARACTERS. * 00048750 00071 C * 00048760 00072 C***************************************************************** 00048770 00073 300 CALL NDT13(BGF2+1, 713, 2) 00048780 00074 C***************************************************************** 00048790 00075 C * 00048800 00076 C FIELD IS LENGTH 1 --- CHECK FOR DUPLICATE CHARACTERS * 00048810 00077 C * 00048820 00078 C***************************************************************** 00048830 00079 400 OMEGA = CLNUM - 2 00048840 00080 DO 500 XCHAR = 1, OMEGA 00048850 00081 IF(CHAR(XCHAR) .EQ. CDATA(BGF2)) GO TO 600 00048860 00082 500 CONTINUE 00048870 00083 C***************************************************************** 00048880 00084 C * 00048890 00085 C IF THIS CHARACTER WAS NOT USED BEFORE, ASSIGN IT * 00048900 00086 C IN THE CHAR ARRAY OF OUTPT, THEN RETURN. * 00048910 00087 C * 00048920 00088 C***************************************************************** 00048930 00089 CHAR(CLNUM - 1) = CDATA(BGF2) 00048940 00090 GO TO 700 00048950 00091 C***************************************************************** 00048960 00092 C * 00048970 00093 C DUPLICATE PLOT CHARACTERS * 00048980 00094 C * 00048990 00095 C***************************************************************** 00049000 00096 600 CALL NDT13(BGF2, 714, 1) 00049010 00097 C***************************************************************** 00049020 00098 C * 00049030 00099 C RETURN SECTION * 00049040 00100 C * 00049050 00101 C***************************************************************** 00049060 00102 700 RETURN 00049070 00103 END 00049090 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) NDT32 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 OUTPT +1462 VARCT +1462 CDATA +1222 DOT +320 TYPE +1463 RUNNO +1464 LOW +1630 HIGH +1656 FLAG +1704 RUN +1744 CFLAG +1771 CHAR +1757 DMODE +1772 RMODE +1773 SMODE +1774 LOOP +1775 CLNUM +1776 BGF +1777 NDF +2003 SRNUM +2015 CLFST +2016 SUBPROGRAMS CALLED NDT13 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] XCHAR 1 BGF2 2 .S0000 3 OMEGA 4 TEMPORARIES .A0016 5 .Q0000 6 BGF 28# 37# 49 BGF2 28# 49# 50 52 59 73 81 89 96 96# CARD1 22# 30# CARD2 22# 30# CDATA 26# 33# 81 89 CFLAG 26# 33# CHAR 26# 33# 81 89# CLFST 28# 37# CLNUM 28# 37# 51 79 89 CRSET 22# 30# DEF 22# 30# 33# DMODE 28# 37# DOT 37# EQCHN 22# 30# ERROR 22# 30# FCTN 22# 30# FLAG 26# 33# HIGH 21# 33# LITBL 20# 30# LOOP 28# 37# LOW 21# 33# NDF 28# 37# 59 66 66# NDT13 52 66 73 96 NDT32 7# OBJCD 22# 30# 33# OMEGA 28# 79# 80 OPER 22# 30# 37# OUTPT 26# 33# 37# PTRS 22# 30# RMAX 20# 30# RMIN 20# 30# RMODE 28# 37# RUN 26# 33# RUNNO 26# 33# SMODE 28# 37# SRNUM 28# 37# SUBSC 22# 30# SYM 22# 30# SYMTB 22# 30# TITLE 22# 30# TMAP 22# 30# TOKEN 22# 30# TYPCT 22# 30# TYPE 26# 33# VARCT 26# 33# XCHAR 28# 80# 81 XREF 22# 30# 100P 51 53 59# 200P 59 66# 300P 59 73# 400P 59 79# 500P 80 82# 600P 81 96# 700P 50 67 90 102# NDT32 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00049100 00002 C * 00049110 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00049120 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY * 00049130 00005 C * 00049140 00006 C***************************************************************** 00049150 00007 SUBROUTINE NDT33 00049160 00008 C***************************************************************** 00049170 00009 C * 00049180 00010 C PLOT RANGE ANALYZER * 00049190 00011 C * 00049200 00012 C * 00049210 00013 C THIS PROGRAM, PART OF THE OUTPUT SYNTAX PHASE, ANALYZES A * 00049220 00014 C PLOT RANGE FOR DEFAULT INFORMATION ABOUT THE LOW AND HIGH * 00049230 00015 C VALUES, SETTING FLAG. NDT33 IS CALLED BY NDT09, AND CALLS * 00049240 00016 C NDT22 TO SYNTAX CHECK THE NUMBERS. * 00049250 00017 C * 00049260 00018 C***************************************************************** 00049270 00019 REAL*8 RMIN,RMAX,LITBL(8192) 00049280 00020 REAL*8 LOW(11),HIGH(11) 00049290 00021 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00049300 00022 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00049310 00023 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00049320 00024 3SYMTB(5,4096) 00049330 00025 INTEGER CDATA(144),OUTPT(240),VARCT,TYPE,RUNNO,FLAG(11), 00049340 00026 1CHAR(10),RUN(11),CFLAG,SRCNT 00049350 00027 INTEGER DMODE,RMODE,SMODE,LOOP,CLNUM,BGF(4),NDF(4), 00049360 00028 1SRNUM,CLFST,SFLAG,CLSPT,HILO,BGFLD,SLASH,STAR 00049370 00029 INTEGER LITCT,TOKPT 00049380 00030 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00049390 00031 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00049400 00032 2SYMTB,LITBL 00049410 00033 EQUIVALENCE (OUTPT(1),DEF(1),VARCT),(OUTPT(2),TYPE), 00049420 00034 1(OUTPT(3),RUNNO),(OUTPT(103),LOW(1)),(OUTPT(125),HIGH(1)), 00049430 00035 2(OUTPT(147),FLAG(1)),(OUTPT(179),RUN(1)),(OUTPT(200),CFLAG), 00049440 00036 3(OUTPT(190),CHAR(1)),(CDATA(1),OBJCD(1)),(SRCNT,OUTPT(178)) 00049450 00037 EQUIVALENCE (DMODE,OUTPT(201)),(RMODE,OUTPT(202)), 00049460 00038 1(SMODE,OUTPT(203)),(LOOP,OUTPT(204)),(CLNUM,OUTPT(205)), 00049470 00039 2(BGF(1),OUTPT(206)),(NDF(1),OUTPT(210)), 00049480 00040 3(SRNUM,OUTPT(220)),(CLFST,OUTPT(221)),(SFLAG,OUTPT(222)) 00049490 00041 EQUIVALENCE (TOKPT,TOKEN(3)),(LITCT,PTRS(18)) 00049500 00042 DATA SLASH,STAR /'/','*'/ 00049510 00043 C***************************************************************** 00049520 00044 C * 00049530 00045 C HILO KEEPS TRACK OF WHETHER THE LOW OR THE HIGH IS * 00049540 00046 C CURRENTLY BEING USED: 3 FOR LOW, 4 FOR HIGH. IF THE * 00049550 00047 C FIELD WAS NOT FOUND, THIS VALUE WILL BE ASSIGNED LATER, SO * 00049560 00048 C GO TO THE DEFAULT SECTION. * 00049570 00049 C * 00049580 00050 C***************************************************************** 00049590 00051 HILO = 2 00049600 00052 100 HILO = HILO + 1 00049610 00053 BGFLD = BGF(HILO) 00049620 00054 IF (BGFLD .LT. 0) GO TO 600 00049630 00055 C***************************************************************** 00049640 00056 C * 00049650 NDT33 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C WHEN CHECKING LOW, CHECK THE STATUS OF RANGE DEFINITIONS * 00049660 00058 C FOR THIS SERIES, ACCORDING TO SMODE. * 00049670 00059 C SMODE -1 NO RANGE DEFINED, SET SMODE TO 0. * 00049680 00060 C 0 FIRST RANGE DEFINITION, WILL NOT OCCUR * 00049690 00061 C AT THIS TIME. * 00049700 00062 C 1 A RANGE HAS BEEN PREVIOUSLY DEFINED FOR * 00049710 00063 C FOR THIS SERIES, ERROR. * 00049720 00064 C * 00049730 00065 C***************************************************************** 00049740 00066 IF (SMODE .LE. 0) GO TO 200 00049750 00067 IF (HILO .EQ. 3) CALL NDT13(BGFLD, 716, 2) 00049760 00068 GO TO 600 00049770 00069 200 SMODE = 0 00049780 00070 C***************************************************************** 00049790 00071 C * 00049800 00072 C A STAR DENOTES A DEFAULT VALUE. * 00049810 00073 C * 00049820 00074 C***************************************************************** 00049830 00075 IF (NDF(HILO) - BGFLD .EQ. 0 .AND. CDATA(BGFLD) .EQ. STAR) 00049840 00076 1 GO TO 600 00049850 00077 C***************************************************************** 00049860 00078 C * 00049870 00079 C CALL NDT22 TO CHECK THE NUMBER'S VALIDITY, INSERT IN EITHER* 00049880 00080 C THE LOW OR HIGH ARRAY, AND DELETE THE ENTRY FROM BOTH THE * 00049890 00081 C LITERAL TABLE AND TOKEN ARRAY. * 00049900 00082 C * 00049910 00083 C***************************************************************** 00049920 00084 CALL NDT22(BGFLD, NDF(HILO)) 00049930 00085 IF (HILO .EQ. 3) LOW(CLNUM) = LITBL(LITCT) 00049940 00086 IF (HILO .EQ. 4) HIGH(CLNUM) = LITBL(LITCT) 00049950 00087 TOKPT = TOKPT - 1 00049960 00088 LITCT = LITCT - 1 00049970 00089 GO TO 700 00049980 00090 C***************************************************************** 00049990 00091 C * 00050000 00092 C * * * * * DEFAULT * * * * * * 00050010 00093 C OCCURRENCE OF A STAR CHANGES SMODE, * 00050020 00094 C SET FLAG FOR ANY DEFAULT. * 00050030 00095 C * 00050040 00096 C***************************************************************** 00050050 00097 600 FLAG(CLNUM) = FLAG(CLNUM) + HILO - 2 00050060 00098 C***************************************************************** 00050070 00099 C * 00050080 00100 C DO AGAIN FOR HIGH. CHECK SMODE FOR SERIES INFORMATION. * 00050090 00101 C * 00050100 00102 C***************************************************************** 00050110 00103 700 IF (HILO .EQ. 3) GO TO 100 00050120 00104 IF (CLNUM .NE. 1) GO TO 750 00050130 00105 FLAG(1) = FLAG(1) + 10 00050140 00106 GO TO 1200 00050150 00107 750 IF (SMODE) 800, 900, 1000 00050160 00108 C***************************************************************** 00050170 00109 C * 00050180 00110 C NO RANGE DEFINED YET, BUT A SLASH OR BLANK MARKS THE END OF* 00050190 00111 C THE SERIES. THE FIRST VARIABLE IN THE SERIES WILL DEFINE * 00050200 00112 C THE RANGE FOR THE ENTIRE SERIES. * 00050210 NDT33 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 C * 00050220 00114 C***************************************************************** 00050230 00115 800 IF (SFLAG .EQ. 0) GO TO 1200 00050240 00116 SRNUM = 10 * CLFST 00050250 00117 GO TO 1000 00050260 00118 C***************************************************************** 00050270 00119 C * 00050280 00120 C THIS VARIABLE HOLDS THE RANGE DATA FOR THIS SERIES. * 00050290 00121 C * 00050300 00122 C***************************************************************** 00050310 00123 900 SRNUM = 10 * CLNUM 00050320 00124 C***************************************************************** 00050330 00125 C * 00050340 00126 C THE RANGE HAS ALREADY BEEN DEFINED FOR THIS SERIES, ADD * 00050350 00127 C THE DEFAULT INFORMATION TO THIS VARIABLE. * 00050360 00128 C * 00050370 00129 C***************************************************************** 00050380 00130 1000 DO 1100 CLSPT = CLFST, CLNUM 00050390 00131 1100 FLAG(CLSPT) = FLAG(CLSPT) + SRNUM 00050400 00132 CLFST = CLNUM + 1 00050410 00133 C***************************************************************** 00050420 00134 C * 00050430 00135 C SET SMODE TO SHOW SERIES STATUS. A SLASH MARKS THE * 00050440 00136 C BEGINNING OF A NEW SERIES. * 00050450 00137 C * 00050460 00138 C***************************************************************** 00050470 00139 SMODE = 1 00050480 00140 IF (SFLAG .EQ. 0) GO TO 1200 00050490 00141 SMODE = -1 00050500 00142 IF (CLNUM .NE. 1) SRCNT = SRCNT + 1 00050510 00143 1200 RETURN 00050520 00144 END 00050540 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 OUTPT +1462 VARCT +1462 CDATA +1222 TOKPT +524 LITCT +25 TYPE +1463 RUNNO +1464 LOW +1630 HIGH +1656 FLAG +1704 RUN +1744 CFLAG +1771 CHAR +1757 SRCNT +1743 DMODE +1772 RMODE +1773 SMODE +1774 LOOP +1775 CLNUM +1776 BGF +1777 NDF +2003 SRNUM +2015 CLFST +2016 SFLAG +2017 SUBPROGRAMS CALLED NDT13 NDT22 NDT33 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] HILO 1 CLSPT 2 BGFLD 3 SLASH 4 .S0000 5 STAR 6 .O0000 7 TEMPORARIES .A0016 10 .Q0000 11 BGF 27# 37# 53 BGFLD 27# 53# 54 67 67# 75 84 84# CARD1 21# 30# CARD2 21# 30# CDATA 25# 33# 75 CFLAG 25# 33# CHAR 25# 33# CLFST 27# 37# 116 130 132# CLNUM 27# 37# 85 86 97 104 123 130 132 142 CLSPT 27# 130# 131 CRSET 21# 30# DEF 21# 30# 33# DMODE 27# 37# EQCHN 21# 30# ERROR 21# 30# FCTN 21# 30# FLAG 25# 33# 97# 97 105# 105 131# 131 HIGH 20# 33# 86# HILO 27# 51# 52 52# 53 67 75 84 85 86 97 103 LITBL 19# 30# 85 86 LITCT 29# 41# 85 86 88 88# LOOP 27# 37# LOW 20# 33# 85# NDF 27# 37# 75 84 84# NDT13 67 NDT22 84 NDT33 7# OBJCD 21# 30# 33# OPER 21# 30# OUTPT 25# 33# 37# PTRS 21# 30# 41# RMAX 19# 30# RMIN 19# 30# RMODE 27# 37# RUN 25# 33# RUNNO 25# 33# SFLAG 27# 37# 115 140 SLASH 27# 42# SMODE 27# 37# 66 69# 107 139# 141# SRCNT 25# 33# 142 142# SRNUM 27# 37# 116# 123# 131 STAR 27# 42# 75 SUBSC 21# 30# SYM 21# 30# SYMTB 21# 30# TITLE 21# 30# TMAP 21# 30# TOKEN 21# 30# 41# TOKPT 29# 41# 87 87# TYPCT 21# 30# TYPE 25# 33# VARCT 25# 33# XREF 21# 30# 1000P 107 117 130# 100P 52# 103 1100P 130 131# 1200P 106 115 140 143# 200P 66 69# 600P 54 68 75 97# 700P 89 103# 750P 104 107# 800P 107 115# 900P 107 123# NDT33 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00050550 00002 C * 00050560 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00050570 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY * 00050580 00005 C * 00050590 00006 C***************************************************************** 00050600 00007 SUBROUTINE NDT34 00050610 00008 C***************************************************************** 00050620 00009 C * 00050630 00010 C PLOT CHARACTER DEFAULT ASSIGNMENTS * 00050640 00011 C * 00050650 00012 C * 00050660 00013 C * 00050670 00014 C THIS PROGRAM, PART OF THE OUTPUT SYNTAX PHASE, ASSIGNS PLOT* 00050680 00015 C CHARACTERS TO EACH VARIABLE TO BE PLOTTED. * 00050690 00016 C NDT34 IS CALLED BY THE OUTPUT ANALYZER, NDT09. * 00050700 00017 C * 00050710 00018 C***************************************************************** 00050720 00019 REAL*8 RMIN,RMAX,LITBL(8192) 00050730 00020 REAL*8 LOW(11),HIGH(11) 00050740 00021 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00050750 00022 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00050760 00023 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00050770 00024 3SYMTB(5,4096) 00050780 00025 INTEGER CDATA(144),OUTPT(240),VARCT,TYPE,RUNNO,FLAG(11), 00050790 00026 1CHAR(10),RUN(11),CFLAG 00050800 00027 INTEGER CLNUM,XCHAR,CHAR1,OMEGA,XALPH,NVAR,DIGIT(9) 00050810 00028 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00050820 00029 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00050830 00030 2SYMTB,LITBL 00050840 00031 EQUIVALENCE (OUTPT(1),DEF(1),VARCT),(OUTPT(2),TYPE), 00050850 00032 1(OUTPT(3),RUNNO),(OUTPT(103),LOW(1)),(OUTPT(125),HIGH(1)), 00050860 00033 2(OUTPT(147),FLAG(1)),(OUTPT(179),RUN(1)),(OUTPT(200),CFLAG), 00050870 00034 3(OUTPT(190),CHAR(1)),(CDATA(1),OBJCD(1)),(DIGIT(1),CRSET(31)) 00050880 00035 C***************************************************************** 00050890 00036 C * 00050900 00037 C EACH VARIABLE IS FIRST CHECKED IF IT HAS BEEN ASSIGNED A * 00050910 00038 C PLOT CHARACTER. * 00050920 00039 C***************************************************************** 00050930 00040 NVAR = VARCT - 1 00050940 00041 DO 700 CLNUM = 1, NVAR 00050950 00042 IF (CHAR(CLNUM) .NE. 0) GO TO 700 00050960 00043 C***************************************************************** 00050970 00044 C * 00050980 00045 C IF THERE IS MORE THAN ONE RUN, FIRST TRY TO ASSIGN THE * 00050990 00046 C RUN NUMBER. * 00051000 00047 C * 00051010 00048 C***************************************************************** 00051020 00049 IF (RUNNO .EQ. 1) GO TO 200 00051030 00050 XALPH = RUN(CLNUM + 1) 00051035 00051 DO 100 XCHAR = 1, NVAR 00051040 00052 IF (DIGIT(XALPH) .EQ. CHAR(XCHAR)) GO TO 200 00051050 00053 100 CONTINUE 00051060 00054 CHAR(CLNUM) = DIGIT(XALPH) 00051080 00055 GO TO 700 00051090 00056 C***************************************************************** 00051100 NDT34 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C * 00051110 00058 C NEXT TRY TO ASSIGN THE FIRST LETTER OF THE VARIABLE NAME. * 00051120 00059 C * 00051130 00060 C***************************************************************** 00051140 00061 200 CHAR1 = OUTPT(8*CLNUM + 4) 00051150 00062 DO 300 XCHAR = 1, NVAR 00051160 00063 IF (CHAR1 .EQ. CHAR(XCHAR)) GO TO 400 00051170 00064 300 CONTINUE 00051180 00065 CHAR(CLNUM) = CHAR1 00051190 00066 GO TO 700 00051200 00067 C***************************************************************** 00051210 00068 C * 00051220 00069 C FINALLY, ASSIGN FROM THE ALPHABET. * 00051230 00070 C * 00051240 00071 C***************************************************************** 00051250 00072 400 OMEGA = NVAR + 4 00051260 00073 DO 600 XALPH = 4, OMEGA 00051270 00074 DO 500 XCHAR = 1, NVAR 00051280 00075 IF (CRSET(XALPH) .EQ. CHAR(XCHAR)) GO TO 600 00051290 00076 500 CONTINUE 00051300 00077 CHAR(CLNUM) = CRSET(XALPH) 00051310 00078 GO TO 700 00051320 00079 600 CONTINUE 00051330 00080 700 CONTINUE 00051340 00081 RETURN 00051350 00082 END 00051370 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 OUTPT +1462 VARCT +1462 CDATA +1222 DIGIT +307 TYPE +1463 RUNNO +1464 LOW +1630 HIGH +1656 FLAG +1704 RUN +1744 CFLAG +1771 CHAR +1757 SUBPROGRAMS CALLED SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] XCHAR 1 NVAR 2 CHAR1 3 XALPH 4 CLNUM 5 .R0000 6 .S0004 7 .S0003 10 .S0002 11 .S0001 12 .S0000 13 OMEGA 14 NDT34 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 TEMPORARIES .A0016 15 CARD1 21# 28# CARD2 21# 28# CDATA 25# 31# CFLAG 25# 31# CHAR 25# 31# 42 52 54# 63 65# 75 77# CHAR1 27# 61# 63 65 CLNUM 27# 41# 42 50 54 61 65 77 CRSET 21# 28# 31# 75 77 DEF 21# 28# 31# DIGIT 27# 31# 52 54 EQCHN 21# 28# ERROR 21# 28# FCTN 21# 28# FLAG 25# 31# HIGH 20# 31# LITBL 19# 28# LOW 20# 31# NDT34 7# NVAR 27# 40# 41 51 62 72 74 OBJCD 21# 28# 31# OMEGA 27# 72# 73 OPER 21# 28# OUTPT 25# 31# 61 PTRS 21# 28# RMAX 19# 28# RMIN 19# 28# RUN 25# 31# 50 RUNNO 25# 31# 49 SUBSC 21# 28# SYM 21# 28# SYMTB 21# 28# TITLE 21# 28# TMAP 21# 28# TOKEN 21# 28# TYPCT 21# 28# TYPE 25# 31# VARCT 25# 31# 40 XALPH 27# 50# 52 54 73# 75 77 XCHAR 27# 51# 52 62# 63 74# 75 XREF 21# 28# 100P 51 53# 200P 49 52 61# 300P 62 64# 400P 63 72# 500P 74 76# 600P 73 75 79# 700P 41 42 55 66 78 80# NDT34 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00051380 00002 C * 00051390 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00051400 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY * 00051410 00005 C * 00051420 00006 C***************************************************************** 00051430 00007 SUBROUTINE NDT35 (CHAR) 00051440 00008 C***************************************************************** 00051450 00009 C * 00051460 00010 C OUTPUT DELIMITER ANALYZER * 00051470 00011 C * 00051480 00012 C * 00051490 00013 C * 00051500 00014 C THIS PROGRAM, PART OF THE OUTPUT SYNTAX PHASE, CHECKS FOR * 00051510 00015 C THE OCCURRENCE OF THE CHARACTER CHAR IN CDATA AFTER THE * 00051520 00016 C POSITION HELD IN LOOP. * 00051530 00017 C * 00051540 00018 C***************************************************************** 00051550 00019 REAL*8 RMIN,RMAX,LITBL(8192) 00051560 00020 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00051570 00021 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00051580 00022 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00051590 00023 3SYMTB(5,4096) 00051600 00024 INTEGER CDATA(144),LOOP,CHAR,OUTPT(240) 00051610 00025 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00051620 00026 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00051630 00027 2SYMTB,LITBL 00051640 00028 EQUIVALENCE (CDATA(1),OBJCD(1)),(OUTPT(1),DEF(1)), 00051650 00029 1(LOOP,OUTPT(204)) 00051660 00030 C***************************************************************** 00051670 00031 C * 00051680 00032 C IT ALSO CHECKS FOR CONSECUTIVE APPEARANCES OF CHAR, AND * 00051690 00033 C SETS LOOP TO THE LAST OCCURRENCE OF THAT CHARACTER, IF CHAR* 00051700 00034 C WAS FOUND. IF NOT, LOOP IS NOT CHANGED. * 00051710 00035 C * 00051720 00036 C***************************************************************** 00051730 00037 100 IF (CDATA(LOOP+1) .NE. CHAR) GO TO 200 00051740 00038 LOOP = LOOP + 1 00051750 00039 CALL NDT13(LOOP, 701, 1) 00051760 00040 GO TO 100 00051770 00041 200 RETURN 00051780 00042 END 00051800 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 CDATA +1222 OUTPT +1462 LOOP +1775 NDT35 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 SUBPROGRAMS CALLED NDT13 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] CHAR 1 TEMPORARIES .A0016 2 CARD1 20# 25# CARD2 20# 25# CDATA 24# 28# 37 CHAR 7# 24# 37 CRSET 20# 25# DEF 20# 25# 28# EQCHN 20# 25# ERROR 20# 25# FCTN 20# 25# LITBL 19# 25# LOOP 24# 28# 37 38 38# 39 39# NDT13 39 NDT35 7# OBJCD 20# 25# 28# OPER 20# 25# OUTPT 24# 28# PTRS 20# 25# RMAX 19# 25# RMIN 19# 25# SUBSC 20# 25# SYM 20# 25# SYMTB 20# 25# TITLE 20# 25# TMAP 20# 25# TOKEN 20# 25# TYPCT 20# 25# XREF 20# 25# 100P 37# 40 200P 37 41# NDT35 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00051810 00002 C * 00051820 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00051830 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY * 00051840 00005 C * 00051850 00006 C***************************************************************** 00051860 00007 SUBROUTINE NDT36 00051870 00008 C***************************************************************** 00051880 00009 C * 00051890 00010 C OUTPUT RUN NUMBER PROCESSOR * 00051900 00011 C * 00051910 00012 C THIS PROGRAM, PART OF THE OUTPUT SYNTAX PHASE, PROCESSES * 00051920 00013 C THE RUN NUMBERS ATTACHED TO THE VARIABLES ON AN OUTPUT * 00051930 00014 C CARD. IT IS CALLED BY NDT31, THE OUTPUT VARIABLE * 00051940 00015 C PROCESSOR, AND USES NDT13 FOR ERROR HANDLING. * 00051950 00016 C * 00051960 00017 C***************************************************************** 00051970 00018 REAL*8 RMIN,RMAX,LITBL(8192) 00051980 00019 REAL*8 LOW(11),HIGH(11) 00051990 00020 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00052000 00021 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00052010 00022 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00052020 00023 3SYMTB(5,4096) 00052030 00024 INTEGER CDATA(144),OUTPT(240),VARCT,TYPE,RUNNO,FLAG(11), 00052040 00025 1CHAR(10),RUN(11),CFLAG 00052050 00026 INTEGER DMODE,RMODE,SMODE,LOOP,CLNUM,BGF(4),NDF(4), 00052060 00027 1DOTPS,XCHAR,POINT,DIGIT(9),BGF1,NDF1,STAR 00052070 00028 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00052080 00029 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00052090 00030 2SYMTB,LITBL 00052100 00031 EQUIVALENCE (OUTPT(1),DEF(1),VARCT),(OUTPT(2),TYPE), 00052110 00032 1(OUTPT(3),RUNNO),(OUTPT(103),LOW(1)),(OUTPT(125),HIGH(1)), 00052120 00033 2(OUTPT(147),FLAG(1)),(OUTPT(179),RUN(1)),(OUTPT(200),CFLAG), 00052130 00034 3(OUTPT(190),CHAR(1)),(CDATA(1),OBJCD(1)) 00052140 00035 EQUIVALENCE (DMODE,OUTPT(201)),(RMODE,OUTPT(202)), 00052150 00036 1(SMODE,OUTPT(203)),(LOOP,OUTPT(204)),(CLNUM,OUTPT(205)), 00052160 00037 2(BGF(1),OUTPT(206),BGF1),(NDF(1),OUTPT(210),NDF1), 00052170 00038 3(SRNUM,OUTPT(220)),(CLFST,OUTPT(221)) 00052180 00039 EQUIVALENCE (DIGIT(1),CRSET(31)),(SFLAG,OUTPT(222)) 00052190 00040 EQUIVALENCE (STAR,OPER(4)),(POINT,OPER(1)) 00052200 00041 C***************************************************************** 00052210 00042 C * 00052220 00043 C DIGIT IS EQUIVALENCED INTO THE CRSET ARRAY SO THAT EACH * 00052230 00044 C ARRAY MEMBER CONTAINS THE CHARACTER CORRESPONDING TO ITS * 00052240 00045 C POSITION NUMBER. (EX. - DIGIT(1) = '1') * 00052250 00046 C * 00052260 00047 C * 00052270 00048 C * 00052280 00049 C FIRST, LOOK THROUGH THE VARIABLE FIELD FOR A DECIMAL POINT.* 00052290 00050 C IF POINT IS FOUND, DOTPS CONTAINS ITS POSITION IN CDATA. * 00052300 00051 C IF NOT FOUND, DOTPS IS SET TO THE POSITION PAST THE END * 00052310 00052 C OF THE VARIABLE FIELD, AND THE RUN NUMBER IS DEFAULTED * 00052320 00053 C TO ONE. * 00052330 00054 C * 00052340 00055 C***************************************************************** 00052350 00056 DO 100 DOTPS = BGF1, NDF1 00052360 NDT36 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 IF (CDATA(DOTPS) .EQ. POINT) GO TO 200 00052370 00058 100 CONTINUE 00052380 00059 DOTPS = NDF1 + 1 00052390 00060 GO TO 700 00052400 00061 C***************************************************************** 00052410 00062 C * 00052420 00063 C CHECK THE LENGTH OF THE RUN NUMBER FIELD. * 00052430 00064 C * 00052440 00065 C***************************************************************** 00052450 00066 200 IF (NDF1 - DOTPS - 1) 300, 400, 600 00052460 00067 C***************************************************************** 00052470 00068 C * 00052480 00069 C POINT PRESENT, BUT NO CHARACTER. * 00052490 00070 C * 00052500 00071 C***************************************************************** 00052510 00072 300 CALL NDT13(DOTPS, 720, 1) 00052520 00073 GO TO 700 00052530 00074 C***************************************************************** 00052540 00075 C * 00052550 00076 C FIELD IS ONE CHARACTER LONG --- CHECK IF THE CHARACTER IS * 00052560 00077 C BETWEEN ONE AND NINE. IF IT ISN'T, DEFAULT THE RUN NUMBER.* 00052570 00078 C * 00052580 00079 C***************************************************************** 00052590 00080 400 IF (CDATA(DOTPS+1) .NE. STAR) GO TO 450 00052600 00081 IF (CLNUM .EQ. 2) GO TO 425 00052610 00082 CALL NDT13(DOTPS+1,725,2) 00052620 00083 GO TO 700 00052630 00084 425 SFLAG = 1 00052640 00085 RUNNO = 0 00052650 00086 GO TO 900 00052660 00087 450 DO 500 XCHAR = 1, 9 00052670 00088 IF (DIGIT(XCHAR) .EQ. CDATA(DOTPS+1)) GO TO 800 00052680 00089 500 CONTINUE 00052690 00090 C***************************************************************** 00052700 00091 C * 00052710 00092 C ERROR --- FIELD TOO LONG OR CHARACTER NOT BETWEEN 1 AND 9. * 00052720 00093 C * 00052730 00094 C***************************************************************** 00052740 00095 600 CALL NDT13(DOTPS+1, 721, 1) 00052750 00096 C***************************************************************** 00052760 00097 C * 00052770 00098 C * * * * * RUN NUMBER DEFAULT * * * * * * 00052780 00099 C * 00052790 00100 C * 00052800 00101 C RUN NUMBER DEFAULT IS ONE. * 00052810 00102 C * 00052820 00103 C***************************************************************** 00052830 00104 700 XCHAR = 1 00052840 00105 C***************************************************************** 00052850 00106 C * 00052860 00107 C PLACE THE RUN NUMBER CHARACTER IN THE OUTPUT BUFFER. * 00052870 00108 C CHECK THE HIGHEST RUN NUMBER. * 00052880 00109 C * 00052890 00110 C***************************************************************** 00052900 00111 800 IF ((RUNNO.NE.0 .OR. CLNUM.NE.1) .AND. XCHAR.GT.RUNNO) 00052910 00112 1 RUNNO = XCHAR 00052920 NDT36 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 RUN(CLNUM) = XCHAR 00052930 00114 C***************************************************************** 00052940 00115 C * 00052950 00116 C BEFORE RETURNING, SET THE END FIELD MARKER TO DISCLUDE * 00052960 00117 C THE RUN NUMBER FIELD. * 00052970 00118 C * 00052980 00119 C***************************************************************** 00052990 00120 900 NDF(1) = DOTPS - 1 00053000 00121 RETURN 00053010 00122 END 00053030 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 OUTPT +1462 VARCT +1462 CDATA +1222 DIGIT +307 STAR +323 POINT +320 TYPE +1463 RUNNO +1464 LOW +1630 HIGH +1656 FLAG +1704 RUN +1744 CFLAG +1771 CHAR +1757 DMODE +1772 RMODE +1773 SMODE +1774 LOOP +1775 CLNUM +1776 BGF +1777 BGF1 +1777 NDF +2003 NDF1 +2003 SRNUM +2015 CLFST +2016 SFLAG +2017 SUBPROGRAMS CALLED NDT13 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] XCHAR 1 .S0001 2 .S0000 3 DOTPS 4 TEMPORARIES .A0016 5 .Q0000 6 BGF 26# 35# BGF1 26# 35# 56 CARD1 20# 28# CARD2 20# 28# CDATA 24# 31# 57 80 88 CFLAG 24# 31# CHAR 24# 31# CLFST 35# CLNUM 26# 35# 81 111 113 CRSET 20# 28# 39# DEF 20# 28# 31# DIGIT 26# 39# 88 DMODE 26# 35# DOTPS 26# 56# 57 59# 66 72 72# 80 82 88 95 120 EQCHN 20# 28# ERROR 20# 28# FCTN 20# 28# FLAG 24# 31# HIGH 19# 31# LITBL 18# 28# LOOP 26# 35# LOW 19# 31# NDF 26# 35# 120# NDF1 26# 35# 56 59 66 NDT13 72 82 95 NDT36 7# OBJCD 20# 28# 31# OPER 20# 28# 40# OUTPT 24# 31# 35# 39# POINT 26# 40# 57 PTRS 20# 28# RMAX 18# 28# RMIN 18# 28# RMODE 26# 35# RUN 24# 31# 113# RUNNO 24# 31# 85# 111 111# SFLAG 39# 84# SMODE 26# 35# SRNUM 35# STAR 26# 40# 80 SUBSC 20# 28# SYM 20# 28# SYMTB 20# 28# TITLE 20# 28# TMAP 20# 28# TOKEN 20# 28# TYPCT 20# 28# TYPE 24# 31# VARCT 24# 31# XCHAR 26# 87# 88 104# 111 113 XREF 20# 28# 100P 56 58# 200P 57 66# 300P 66 72# 400P 66 80# 425P 81 84# 450P 80 87# 500P 87 89# 600P 66 95# 700P 60 73 83 104# 800P 88 111# 900P 86 120# NDT36 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00053040 00002 C PROGRAM AUTHOR - GARY PELKEY 00053050 00003 C 00053060 00004 C 00053070 00005 SUBROUTINE NDT37 (WORDS,LOC) 00053080 00006 C 00053090 00007 C 00053100 00008 C THIS IS THE HASH ENTRY PROGRAM FOR A VARIABLE. WORDS ARE 00053110 00009 C THE TWO PACKED WORDS THAT REPRESENT THE SYMBOL STRING. 00053120 00010 C AN INITIAL SEARCH LOCATION IS COMPUTED AND THE SEARCH 00053130 00011 C CONTINUES THRU THE SYMBOL TABLE UNTIL A MATCH IS FOUND OR 00053140 00012 C AN EMPTY POSITION IS ENCOUNTERED. IF A MATCH IS FOUND, 00053150 00013 C THE SYMBOL INFORMATION IS UNPACKED INTO SYM AND THE SYMBOL 00053160 00014 C LOCATION IS RETURNED. IF AN EMPTY LOCATION IS ENCOUNTERED, 00053170 00015 C THE TWO WORDS AND A VNUM ARE INSERTED, THUS CREATING A NEW 00053180 00016 C SYMBOL. 00053190 00017 C 00053200 00018 C 00053210 00019 REAL*8 RMIN,RMAX,LITBL(8192) 00053220 00020 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00053230 00021 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00053240 00022 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00053250 00023 3SYMTB(5,4096) 00053260 00024 INTEGER LOC,ORLOC,WORDS(2),SYMND,VALCT 00053270 00025 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00053280 00026 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00053290 00027 2SYMTB,LITBL 00053300 00028 EQUIVALENCE (SYMND,PTRS(17)),(VALCT,PTRS(20)) 00053310 00029 LOC=(MOD(IABS(WORDS(1)),SYMND)+MOD(IABS(WORDS(2)),SYMND))/2+1 00053320 00030 ORLOC=LOC 00053330 00031 C 00053340 00032 C 00053350 00033 C HERE STARTS THE CYCLIC SEARCH THRU THE SYMBOL TABLE. 00053360 00034 C ORLOC HAS BEEN SET TO THE ORIGINAL LOCATION FOR LATER 00053370 00035 C COMPARISONS TO INSURE THAT THE SEARCH DOESN'T CONTINUE 00053380 00036 C FOREVER. 00053390 00037 C 00053400 00038 C 00053410 00039 100 IF(SYMTB(1,LOC).EQ.32767) GO TO 200 00053420 00040 IF(SYMTB(1,LOC).EQ.WORDS(1).AND.SYMTB(2,LOC).EQ.WORDS(2)) 00053430 00041 1GO TO 300 00053440 00042 LOC=MOD(LOC,SYMND)+1 00053450 00043 IF(ORLOC.NE.LOC) GO TO 100 00053460 00044 C 00053470 00045 C 00053480 00046 C THE FAILING OF THE ABOVE TEST INTICATES THAT THE INCOMING 00053490 00047 C SYMBOL IS NOT IN THE SYMBOL TABLE AND THAT THE TABLE ITSELF 00053500 00048 C IS FULL. THUS THERE IS NO ROOM FOR THIS NEW SYMBOL AND 00053510 00049 C THIS SYSTEM ERROR IS FLAGGED. 00053520 00050 C 00053530 00051 C 00053540 00052 CALL NDT12 (3) 00053550 00053 C 00053560 00054 C 00053570 00055 C AN EMPTY LOCATION HAS BEEN ENCOUNTERED INDICATING THAT THE 00053580 00056 C INCOMING SYMBOL IS NEW. AN ENTRY IS MADE FOR IT BY DEPOSITING 00053590 NDT37 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C THE PACKED SYMBOL IN POSITIONS 1 AND 2 AND CALCULATING AND 00053600 00058 C DEPOSITING A NEW VNUM IN POSITION 3. 00053610 00059 C 00053620 00060 C 00053630 00061 200 VALCT=VALCT+1 00053640 00062 SYMTB(3,LOC)=12287+VALCT 00053650 00063 SYMTB(1,LOC)=WORDS(1) 00053660 00064 SYMTB(2,LOC)=WORDS(2) 00053670 00065 C 00053680 00066 C 00053690 00067 C THE SYMBOL IS UNPACKED BEFORE RETURNING FOR FUTURE USE 00053700 00068 C BY CALLING ROUTINES. 00053710 00069 C 00053720 00070 C 00053730 00071 300 CALL NDT41 (SYMTB(1,LOC)) 00053740 00072 400 RETURN 00053750 00073 END 00053770 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 SYMND +24 VALCT +27 SUBPROGRAMS CALLED MOD. IABS. NDT12 NDT41 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] LOC 1 ORLOC 2 WORDS 3 .O0001 4 .O0000 5 TEMPORARIES .A0016 6 .Q0000 7 CARD1 20# 25# CARD2 20# 25# CRSET 20# 25# DEF 20# 25# EQCHN 20# 25# ERROR 20# 25# FCTN 20# 25# IABS. 29 LITBL 19# 25# LOC 5# 24# 29# 30 39 40 42 42# 43 62 63 64 71 MOD. 29 42 NDT12 52 NDT37 5# NDT41 71 OBJCD 20# 25# OPER 20# 25# ORLOC 24# 30# 43 PTRS 20# 25# 28# RMAX 19# 25# RMIN 19# 25# SUBSC 20# 25# SYM 20# 25# SYMND 24# 28# 29 42 SYMTB 20# 25# 39 40 62# 63# 64# 71 71# TITLE 20# 25# TMAP 20# 25# TOKEN 20# 25# TYPCT 20# 25# VALCT 24# 28# 61 61# 62 WORDS 5# 24# 29 40 63 64 XREF 20# 25# 100P 39# 43 200P 39 61# 300P 40 71# 400P 72# NDT37 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00053780 00002 C PROGRAM AUTHOR - GARY PELKEY 00053790 00003 C 00053800 00004 C 00053810 00005 SUBROUTINE NDT38 00053820 00006 C 00053830 00007 C 00053840 00008 C THIS PROGRAM IS CALLED BY THE LEXICAL PROCESSOR (NDT08) TO 00053850 00009 C FURTHER PROCESS VARIABLES ON THE LEFT OF AN EQUALS SIGN. 00053860 00010 C IT IS RESPONSIBLE FOR MARKING THE DEFINED BIT FOR THE VARIABLE 00053870 00011 C AND DETECTING ERRORS SUCH AS MISSING VARIABLE, MISSING OR 00053880 00012 C MISPLACED EQUALS SIGN, OR VARIABLE HAVING BEEN PREVIOUSLY 00053890 00013 C DEFINED. 00053900 00014 C 00053910 00015 C 00053920 00016 REAL*8 RMIN,RMAX,LITBL(8192) 00053930 00017 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00053940 00018 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00053950 00019 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00053960 00020 3SYMTB(5,4096) 00053970 00021 INTEGER TOKPT,PNTR,STYPE,INTBT,VNUM,VTYPE,DEFBT,RECNO 00053980 00022 INTEGER PGMCT,EQPOS,DISK,PSSWT 00053990 00023 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00054000 00024 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00054010 00025 2SYMTB,LITBL 00054020 00026 EQUIVALENCE (TOKPT,TOKEN(3)),(STYPE,TOKEN(1)),(INTBT,SYM(13)) 00054030 00027 EQUIVALENCE (VNUM,SYM(14)),(VTYPE,SYM(7)),(DEFBT,SYM(11)) 00054040 00028 EQUIVALENCE (RECNO,SYM(15)),(PGMCT,PTRS(22)),(DISK,PTRS(3)) 00054050 00029 EQUIVALENCE (EQPOS,TMAP(3)),(USDBT,SYM(10)),(PSSWT,PTRS(10)) 00054060 00030 C 00054070 00031 C 00054080 00032 C IN THE FOLLOWING SECTION THE EQUALS SIGN IS SEARCHED FOR. 00054090 00033 C IF NOT FOUND AN ERROR IS ISSUED. IF IT WAS THE FIRST TOKEN 00054100 00034 C THE MISSING VARIABLE IS FLAGGED. IF THERE ARE MORE THAN 1 00054110 00035 C TOKENS TO THE LEFT OF THE EQUALS SIGN THIS ERROR IS ALSO 00054120 00036 C FLAGGED. 00054130 00037 C 00054140 00038 C 00054150 00039 IF(EQPOS.NE.0) GO TO 1200 00054160 00040 CALL NDT14 (0,801,3) 00054170 00041 GO TO 2000 00054180 00042 1200 IF(EQPOS.NE.4) GO TO 1300 00054190 00043 CALL NDT14 (TMAP(4),519,3) 00054200 00044 GO TO 2000 00054210 00045 1300 IF(TOKEN(4) .EQ. 24576) GO TO 2000 00054220 00046 IF(EQPOS.EQ.5.AND.TOKEN(4).GE.0.AND.TOKEN(4).LT.20480) GO TO 1325 00054230 00047 CALL NDT14 (TMAP(4),805,3) 00054240 00048 GO TO 2000 00054250 00049 C 00054260 00050 C 00054270 00051 C HAVING PASSED THE ABOVE SYNTAX TESTS, THE LEFT VARIABLE IS 00054280 00052 C READY TO BE MARKED AS DEFINED (OR INITIALIZED). ERRORS 00054290 00053 C SUCH AS MULTIPLY DEFINING OR INITIALIZING AS WELL AS DEFINING 00054300 00054 C OR INITIALIZING TIME ARE FLAGGED HERE. 00054310 00055 C 00054320 00056 C 00054330 NDT38 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 1325 PNTR=MOD(TOKEN(4),4096)+1 00054340 00058 CALL NDT41 (SYMTB(1,PNTR)) 00054350 00059 IF(VTYPE.NE.3.OR.STYPE.EQ.3) GO TO 1350 00054360 00060 CALL NDT14(TMAP(4),551,3) 00054370 00061 GO TO 2000 00054380 00062 1350 IF(PSSWT.NE.5) GO TO 1395 00054390 00063 C 00054400 00064 C 00054410 00065 C IF RERUN MODE IS IN EFFECT, THE VARIABLE MUST BE CHECKED 00054420 00066 C FOR PREVIOUS DEFINITION. ALSO THE STATEMENT TYPES FROM RUN 00054430 00067 C TO RUN MUST BE CONSISTANT. IF NORMAL MODE IS IN EFFECT, 00054440 00068 C DIFFERENT CHECKS MUST BE PERFORMED. 00054450 00069 C 00054460 00070 C 00054470 00071 IF(DEFBT.EQ.1) GO TO 1370 00054480 00072 CALL NDT14 (TMAP(4),536,2) 00054490 00073 GO TO 2000 00054500 00074 1370 IF(USDBT.EQ.0.AND.VNUM.NE.11) CALL NDT14 (TMAP(4),537,2) 00054510 00075 IF(STYPE.NE.VTYPE) CALL NDT14(TMAP(4),548,2) 00054520 00076 GO TO 2000 00054530 00077 C 00054540 00078 C 00054550 00079 C IF THE VARIABLE ON THIS INITIAL VALUE CARD HAS ALREADY BEEN 00054560 00080 C INITIALIZED, THIS OCCURRENCE IS FLAGGED. A SEPARATE ERROR 00054570 00081 C IS ISSUED IF THE VARIABLE BEING INITIALIZED IS TIME. 00054580 00082 C 00054590 00083 C 00054600 00084 1395 IF(STYPE.NE.4) GO TO 1600 00054610 00085 IF(INTBT.EQ.0) GO TO 1500 00054620 00086 IF(VNUM.EQ.12) GO TO 1400 00054630 00087 CALL NDT14 (TMAP(4),559,3) 00054640 00088 GO TO 2000 00054650 00089 1400 CALL NDT14 (TMAP(4),550,3) 00054660 00090 GO TO 2000 00054670 00091 1500 INTBT=1 00054680 00092 GO TO 1900 00054690 00093 C 00054700 00094 C 00054710 00095 C IF THIS VARIABLE HAS ALREADY BEEN DEFINED IN ANOTHER EQUATION 00054720 00096 C THIS OCCURRENCE IS FLAGGED. A SEPARATE ERROR IS ISSUED IF 00054730 00097 C THE VARIABLE BEING DEFINED IS TIME. 00054740 00098 C 00054750 00099 C 00054760 00100 1600 IF(DEFBT.EQ.0) GO TO 1800 00054770 00101 IF(VNUM.EQ.12) GO TO 1700 00054780 00102 CALL NDT14 (TMAP(4),539+VTYPE,3) 00054790 00103 GO TO 2000 00054800 00104 1700 CALL NDT14 (TMAP(4),560,3) 00054810 00105 GO TO 2000 00054820 00106 C 00054830 00107 C 00054840 00108 C IF A NON-INITIAL VALUE CARD IS BEING PROCESSED AND THE 00054850 00109 C VARIABLE HASN'T PREVIOUSLY BEEN DEFINED, IT IS HERE DEFINED 00054860 00110 C BY MARKING DEFBT AND SETTING VTYPE. A NON-ZERO RECNO MEANS 00054870 00111 C THAT THE VARIABLE HAS A DOCUMENTOR DEFINITION ON DISK THAT 00054880 00112 C MUST BE MOVED TO THIS CARD'S DEF ARRAY. 00054890 NDT38 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 C 00054900 00114 C 00054910 00115 1800 DEFBT=1 00054920 00116 VTYPE=STYPE 00054930 00117 1900 DEF(10) = 0 00054940 00118 IF(RECNO.EQ.0) GO TO 1910 00054950 00119 READ(DISK'RECNO+6) DEF 00054960 00120 IF(STYPE.NE.4.OR.VTYPE.NE.5) GO TO 1999 00054970 00121 1910 RECNO = PGMCT + 1 00054980 00122 1999 CALL NDT40 (SYMTB(1,PNTR)) 00054990 00123 2000 RETURN 00055000 00124 END 00055020 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 TOKPT +524 STYPE +522 INTBT +345 VNUM +346 VTYPE +337 DEFBT +343 RECNO +347 PGMCT +31 DISK +6 EQPOS +1724 USDBT +342 PSSWT +15 SUBPROGRAMS CALLED MOD. NDT40 NDT14 NDT41 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] PNTR 1 TEMPORARIES .A0016 2 .Q0000 3 CARD1 17# 23# CARD2 17# 23# CRSET 17# 23# DEF 17# 23# 117# 119# DEFBT 21# 27# 71 100 115# DISK 22# 28# 119 EQCHN 17# 23# EQPOS 22# 29# 39 42 46 ERROR 17# 23# FCTN 17# 23# INTBT 21# 26# 85 91# LITBL 16# 23# MOD. 57 NDT14 40 43 47 60 72 74 75 87 89 102 104 NDT38 5# NDT40 122 NDT41 58 OBJCD 17# 23# OPER 17# 23# PGMCT 22# 28# 121 PNTR 21# 57# 58 122 PSSWT 22# 29# 62 PTRS 17# 23# 28# 29# RECNO 21# 28# 118 119 121# RMAX 16# 23# RMIN 16# 23# STYPE 21# 26# 59 75 84 116 120 SUBSC 17# 23# SYM 17# 23# 26# 27# 28# 29# SYMTB 17# 23# 58 58# 122 122# TITLE 17# 23# TMAP 17# 23# 29# 43 43# 47 47# 60 60# 72 72# 74 74# 75 75# 87 87# 89 89# 102 102# 104 104# TOKEN 17# 23# 26# 45 46 57 TOKPT 21# 26# TYPCT 17# 23# USDBT 29# 74 VNUM 21# 27# 74 86 101 VTYPE 21# 27# 59 75 102 116# 120 XREF 17# 23# 1200P 39 42# 1300P 42 45# 1325P 46 57# 1350P 59 62# 1370P 71 74# 1395P 62 84# 1400P 86 89# 1500P 85 91# 1600P 84 100# 1700P 101 104# 1800P 100 115# 1900P 92 117# 1910P 118 121# 1999P 120 122# 2000P 41 44 45 48 61 73 76 88 90 103 105 123# NDT38 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00055030 00002 C * 00055040 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00055050 00004 C PROGRAM AUTHOR - THOMAS L EVERMAN JR * 00055060 00005 C * 00055070 00006 C***************************************************************** 00055080 00007 SUBROUTINE NDT39 (REC,DUPFG) 00055090 00008 C***************************************************************** 00055100 00009 C * 00055110 00010 C THIS PROGRAM BUILDS A MACRO DEFINITION BUFFER FOR * 00055120 00011 C A MACRO OR AN EXPAND STATEMENT. IT ALSO LOCATES A PREVIOUS* 00055130 00012 C DEFINITION RECORD IF IT EXISTS. THE ARGUMENTS ARE: * 00055140 00013 C REC - RETURNS THE RECORD NUMBER OF THE DEFINITION. * 00055150 00014 C DUPFG - INDICATES WHETHER OR NOT THE SUBROUTINE SHOULD * 00055160 00015 C CHECK FOR DUPLICATE NAMES IN THE ARGUMENT LIST. * 00055170 00016 C A '0' SPECIFIES NO CHECK, '1' MEANS CHECK. * 00055180 00017 C * 00055190 00018 C***************************************************************** 00055200 00019 REAL*8 RMIN,RMAX,LITBL(8192) 00055210 00020 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00055220 00021 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00055230 00022 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00055240 00023 3SYMTB(5,4096) 00055250 00024 INTEGER CDATA(144),SYNCK,MACRO(160),MAC1(80),MAC2(80),I,J 00055260 00025 INTEGER BLANK,PNTR,PNEST,PKREP(5),MDT(3,53),MDTL,MDT1(80) 00055270 00026 INTEGER MDT2(80),TEST,PGMCT,EQNCD 00055280 00027 INTEGER DISK,START,ARGS,TYPE,POS,REC,DUPFG,OLDSY,SORCE 00055290 00028 INTEGER DEST,FLAG,NOARG 00055300 00029 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00055310 00030 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00055320 00031 2SYMTB,LITBL 00055330 00032 EQUIVALENCE (CDATA(1),OBJCD(1)),(MACRO(1),DEF(1)),(MAC1(1),MACRO(100055340 00033 1)),(MAC2(1),MACRO(81)),(BLANK,CRSET(1)),(MDT(1,1),MACRO(2)), 00055350 00034 2(MDTL,MACRO(1)),(MDT1(1),MAC1(1)),(MDT2(1),MAC2(1)), 00055360 00035 3(PGMCT,PTRS(22)),(EQNCD,ERROR(1)) 00055370 00036 EQUIVALENCE (DISK,PTRS(3)) 00055380 00037 C***************************************************************** 00055390 00038 C * 00055400 00039 C INITIALIZE THE VARIABLES AND MACRO BUFFER. * 00055410 00040 C SYNCK TELLS WHETHER A SYNTAX CHECK SHOULD BE PERFORMED * 00055420 00041 C AFTER AN OPERATOR IS ENCOUNTERED. START IS THE INPUT * 00055430 00042 C POSITION TO NDT29. ARGS IS THE NUMBER OF ARGUMENTS * 00055440 00043 C FOUND IN THE MACRO OR EXPAND STATEMENT. THE MACRO * 00055450 00044 C ARRAY IS USED TO BUILD THE BUFFER OF MACRO INFORMATION. * 00055460 00045 C * 00055470 00046 C***************************************************************** 00055480 00047 SYNCK = 0 00055490 00048 START = 1 00055500 00049 ARGS = 0 00055510 00050 C***************************************************************** 00055520 00051 C * 00055530 00052 C THE FOLLOWING LOOP LOCATES THE MACRO NAME AND SYNTAXES * 00055540 00053 C THE STATEMENT UP TO THE FIRST '('. IN PARTICULAR, * 00055550 00054 C THEIR SHOULD BE NO SUBSCRIPTS OR OPERATORS. * 00055560 00055 C * 00055570 00056 C***************************************************************** 00055580 NDT39 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 200 CALL NDT29 (TYPE, START, POS, 4) 00055590 00058 IF (POS .LT. START .AND. SYNCK .EQ. 0) GO TO 900 00055600 00059 IF (TYPE .EQ. 0) GO TO 800 00055610 00060 IF (TYPE .NE. 1 .AND. TYPE .NE. 7) GO TO 1000 00055620 00061 IF (SYNCK .NE. 0) GO TO 250 00055630 00062 C***************************************************************** 00055640 00063 C * 00055650 00064 C SYNTAX CHECK THE MACRO NAME, THEN OBTAIN PACKED * 00055660 00065 C REPRESENTATION OF NAME IN PKREP. READ IN THE MDT * 00055670 00066 C AND SEARCH FOR AN ENTRY WITH THE SAME REPRESENTATION. * 00055680 00067 C * 00055690 00068 C***************************************************************** 00055700 00069 CALL NDT24 (START, POS, RTC) 00055710 00070 CALL NDT40 (PKREP) 00055720 00071 READ (DISK'98) MDT1 00055730 00072 READ (DISK'99) MDT2 00055740 00073 TEST = DUPFG + 1 00055750 00074 DO 220 I = 1, MDTL 00055760 00075 IF (MDT(1,I) .EQ. PKREP(1) .AND. MDT(2,I) .EQ. PKREP(2)) 00055770 00076 1GO TO 230 00055780 00077 220 CONTINUE 00055790 00078 C***************************************************************** 00055800 00079 C * 00055810 00080 C NO PREVIOUS DEFINITION WAS FOUND. IF CALLED BY EXPND * 00055820 00081 C (TEST=1), SET REC TO 0 AND CONTINUE. IF CALLED BY * 00055830 00082 C MACRO, MAKE A NEW ENTRY INTO THE MDT, SET REC TO THE * 00055840 00083 C RECORD NUMBER WHERE THE DEFINITION WILL BE STORED, * 00055850 00084 C AND REWRITE THE MDT TO THE DISK FILE. * 00055860 00085 C * 00055870 00086 C***************************************************************** 00055880 00087 GO TO (225,226), TEST 00055890 00088 225 REC = 0 00055900 00089 GO TO 250 00055910 00090 226 MDTL = MDTL + 1 00055920 00091 MDT(1,MDTL) = PKREP(1) 00055930 00092 MDT(2,MDTL) = PKREP(2) 00055940 00093 REC = PGMCT + 7 00055950 00094 MDT(3,MDTL) = REC 00055960 00095 GO TO 240 00055970 00096 C***************************************************************** 00055980 00097 C * 00055990 00098 C A PREVIOUS DEFINTION WAS FOUND. IF IN EXPND MODE, SET * 00056000 00099 C REC TO THE RECORD NUMBER OF THE DEFINTION AND CONTINUE * 00056010 00100 C PROCESSING. IF IN MACRO MODE, MUST EITHER REPLACE A * 00056020 00101 C BUILT-IN MACRO DEFINITION OR GIVE A 305 ERROR FOR A * 00056030 00102 C DUPLICATE MACRO DEFINITION. IF A BUILT-IN MACRO IS * 00056040 00103 C REPLACED, THE MDT MUST BE UPDATED AND REWRITTEN. * 00056050 00104 C * 00056060 00105 C***************************************************************** 00056070 00106 230 GO TO (235,236), TEST 00056080 00107 235 REC = MDT(3,I) 00056090 00108 GO TO 250 00056100 00109 236 IF (I .LE. 5 .AND. MDT(3,I) .LT. 100) GO TO 237 00056110 00110 CALL NDT13 (START, 305, 2) 00056120 00111 REC = 0 00056130 00112 GO TO 250 00056140 NDT39 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 237 REC = PGMCT + 7 00056150 00114 MDT(3,I) = REC 00056160 00115 240 WRITE (DISK'98) MDT1 00056170 00116 WRITE (DISK'99) MDT2 00056180 00117 C***************************************************************** 00056190 00118 C * 00056200 00119 C CHECK UNTIL '(' IS FOUND TO DELIMIT ARGUMENT LIST. * 00056210 00120 C GIVE ERROR FOR SUBSCRIPT IF FOUND. SYNTAX CHECK ONLY * 00056220 00121 C THE FIRST VARIABLE UNTIL '(' IS FOUND. * 00056230 00122 C * 00056240 00123 C***************************************************************** 00056250 00124 250 START = POS + 2 00056260 00125 SYNCK = 1 00056270 00126 IF (TYPE .EQ. 7) GO TO 300 00056280 00127 CALL NDT13 (POS + 1, 530, 1) 00056290 00128 GO TO 200 00056300 00129 C***************************************************************** 00056310 00130 C * 00056320 00131 C MOVE MACRO NAME TO MACRO BUFFER, THEN BEGINNING CHECKING * 00056330 00132 C ARGUMENTS. THE ARGUMENT LIST MUST CONTAIN NO OPERATIONS. * 00056340 00133 C PNEST COUNTS PAREN NESTING AND INDICATES THE END OF THE * 00056350 00134 C ARGUMENT LIST. PNTR POINTS TO THE POSITION IN THE MACRO * 00056360 00135 C BUFFER WHERE THE NEXT ARGUMENT NAME IS TO BE ENTERED. * 00056370 00136 C * 00056380 00137 C***************************************************************** 00056390 00138 300 DO 100 I = 1, 160 00056400 00139 100 MACRO(I) = BLANK 00056410 00140 DO 400 I = 1, POS 00056420 00141 400 MACRO(I) = CDATA(I) 00056430 00142 PNEST = 1 00056440 00143 NOARG = 1 00056450 00144 PNTR = 5 00056460 00145 SYNCK = 0 00056470 00146 500 CALL NDT29 (TYPE, START, POS, 4) 00056480 00147 C***************************************************************** 00056490 00148 C * 00056500 00149 C CHECK FOR OPERATORS OR BLANK TO END LIST WITH PAREN * 00056510 00150 C IMBALANCE. NOARG IS A FLAG TO MAKE SURE THAT BACK TO * 00056520 00151 C BACK PARENS DO NOT OCCUR WITHOUT AN ARGUMENT LIST. * 00056530 00152 C * 00056540 00153 C***************************************************************** 00056550 00154 IF (TYPE .NE. 1 .AND. TYPE .NE. 9 .AND. TYPE .NE. 0) 00056560 00155 1GO TO 1100 00056570 00156 IF (SYNCK .NE. 0) GO TO 600 00056580 00157 C***************************************************************** 00056590 00158 C * 00056600 00159 C PREPARE TO MAKE NEW ARGUMENT ENTRY TO MACRO BUFFER * 00056610 00160 C INCREMENT THE ARGUMENT NUMBER AND MAKE SURE IT IS WITHIN * 00056620 00161 C LIMITS. MAKE THE SYNTAX CHECK AND THEN THE ENTRY. IF * 00056630 00162 C REQUIRED, CHECK FOR DUPLICATE ARGUMENT ENTRIES. * 00056640 00163 C * 00056650 00164 C***************************************************************** 00056660 00165 549 ARGS = ARGS + 1 00056670 00166 IF (ARGS .EQ. 19) GO TO 1200 00056680 00167 PNTR = PNTR + 8 00056690 00168 CALL NDT24 (START, POS, RTC) 00056700 NDT39 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 00169 DO 550 I = 1, 6 00056710 00170 DEST = PNTR + I 00056720 00171 SORCE = START + I - 1 00056730 00172 IF (SORCE .GT. POS) GO TO 560 00056740 00173 NOARG = 0 00056750 00174 550 MACRO(DEST) = CDATA(SORCE) 00056760 00175 560 IF (ARGS .EQ. 1) GO TO 600 00056770 00176 IF (DUPFG .EQ. 0) GO TO 600 00056780 00177 DO 570 I = 14, PNTR, 8 00056790 00178 FLAG = 0 00056800 00179 DO 580 J = 1, 6 00056810 00180 SORCE = PNTR + J 00056820 00181 DEST = I + J - 1 00056830 00182 IF (MACRO(DEST) .NE. MACRO(SORCE)) FLAG = 1 00056840 00183 580 CONTINUE 00056850 00184 IF (FLAG .EQ. 0) CALL NDT13 (START, 308, 2) 00056860 00185 570 CONTINUE 00056870 00186 C***************************************************************** 00056880 00187 C * 00056890 00188 C BRANCH OUT OF ARGUMENT LOOP IF BLANK WAS FOUND. * 00056900 00189 C CHECK FOR ARGUMENT SUBSCRIPT AND UPDATE SYNCK. * 00056910 00190 C * 00056920 00191 C***************************************************************** 00056930 00192 600 IF(TYPE .EQ. 0) GO TO 700 00056940 00193 IF (PNEST .EQ. 0) GO TO 1300 00056950 00194 START = POS + 2 00056960 00195 IF (TYPE .EQ. 1) CALL NDT13 (POS + 1, 530, 1) 00056970 00196 IF (TYPE .EQ. 1) SYNCK = 1 00056980 00197 IF (TYPE .EQ. 9) SYNCK = 0 00056990 00198 GO TO 500 00057000 00199 C***************************************************************** 00057010 00200 C * 00057020 00201 C ERROR INDICATORS * 00057030 00202 C 303 - NO FINAL PAREN * 00057040 00203 C 304 - NO ARGUMENT LIST * 00057050 00204 C 313 - MISSING MACRO NAME * 00057060 00205 C 314 - OPERATION IN MACRO NAME FIELD * 00057070 00206 C * 00057080 00207 C***************************************************************** 00057090 00208 700 CALL NDT13 (POS + 1, 303, 2) 00057100 00209 GO TO 1350 00057110 00210 800 CALL NDT13 (POS + 1, 304, 3) 00057120 00211 GO TO 1350 00057130 00212 900 CALL NDT13 (START, 313, 3) 00057140 00213 GO TO 1350 00057150 00214 1000 CALL NDT13 (POS + 1, 314, 3) 00057160 00215 GO TO 1350 00057170 00216 C***************************************************************** 00057180 00217 C * 00057190 00218 C AN ARITHMETIC OPERATOR WAS ENCOUNTERED IN THE ARGUMENT LIST* 00057200 00219 C IF PAREN, UPDATE PNEST, AND IF PNEST = 0, END OF ARGUMENT * 00057210 00220 C LIST HAS OCCURRED. OTHERWISE GIVE AN ERROR, UPDATE SYNCK * 00057220 00221 C INFORMATION, AND CONTINUE PROCESSING. ALSO CHECK NOARG * 00057230 00222 C FOR MISSING ARGUMENT LIST * 00057240 00223 C * 00057250 00224 C***************************************************************** 00057260 NDT39 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-4 00225 1100 IF (TYPE .EQ. 7) PNEST = PNEST + 1 00057270 00226 IF (TYPE .EQ. 8) PNEST = PNEST - 1 00057280 00227 IF (PNEST .NE. 0) CALL NDT13 (POS + 1, 307, 3) 00057290 00228 OLDSY = SYNCK 00057300 00229 SYNCK = 1 00057310 00230 IF (OLDSY .EQ. 0) GO TO 549 00057320 00231 IF (PNEST .EQ. 0) GO TO 1300 00057330 00232 GO TO 600 00057340 00233 C***************************************************************** 00057350 00234 C * 00057360 00235 C 302 - MORE THAN 18 ARGUMENTS * 00057370 00236 C * 00057380 00237 C***************************************************************** 00057390 00238 1200 CALL NDT13 (START, 302, 3) 00057400 00239 ARGS = 18 00057410 00240 GO TO 1350 00057420 00241 1300 IF (NOARG .EQ. 1) GO TO 800 00057430 00242 POS = POS + 2 00057440 00243 IF (CDATA(POS) .NE. BLANK) CALL NDT13(POS, 309, 2) 00057450 00244 C***************************************************************** 00057460 00245 C * 00057470 00246 C SET FINAL INFORMATION IN MACRO BUFFER * 00057480 00247 C 9 - RESERVED * 00057490 00248 C 10 - NUMBER OF ARGUMENTS * 00057500 00249 C 11 - RECORD NUMBER OF STARTING STATEMENT * 00057510 00250 C 12 - CRITICAL ERROR IN STATEMENT * 00057520 00251 C 13 - NUMBER OF INTERNAL VRAIABLES IN BUILT-IN MACRO * 00057530 00252 C * 00057540 00253 C***************************************************************** 00057550 00254 1350 MACRO(13) = 0 00057560 00255 MACRO(12) = 0 00057570 00256 IF (EQNCD .EQ. 3) MACRO(12) = 1 00057580 00257 MACRO(11) = PGMCT + 11 00057590 00258 MACRO(10) = ARGS 00057600 00259 MACRO(9) = 0 00057610 00260 RETURN 00057620 00261 END 00057640 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 CDATA +1222 MACRO +1462 BLANK +251 PGMCT +31 EQNCD +1102 DISK +6 MAC1 +1462 MAC2 +1602 MDT +1463 MDTL +1462 MDT1 +1462 MDT2 +1602 NDT39 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-5 SUBPROGRAMS CALLED NDT13 NDT40 NDT24 NDT29 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] NOARG 1 PKREP 2 PNTR 7 *RTC 10 DEST 11 POS 12 FLAG 13 DUPFG 14 .R0000 15 OLDSY 16 J 17 .S0005 20 .S0004 21 .S0003 22 .S0002 23 .S0001 24 .S0000 25 SYNCK 26 SORCE 27 TYPE 30 ARGS 31 TEST 32 I 33 .O0000 34 START 35 REC 36 PNEST 37 TEMPORARIES .A0016 40 .Q0001 41 ARGS 27# 49# 165 165# 166 175 239# 258 BLANK 25# 32# 139 243 CARD1 20# 29# CARD2 20# 29# CDATA 24# 32# 141 174 243 CRSET 20# 29# 32# DEF 20# 29# 32# DEST 28# 170# 174 181# 182 DISK 27# 36# 71 72 115 116 DUPFG 7# 27# 73 176 EQCHN 20# 29# EQNCD 26# 32# 256 ERROR 20# 29# 32# FCTN 20# 29# FLAG 28# 178# 182# 184 I 24# 74# 75 107 109 114 138# 139 140# 141 169# 170 171 177# 181 J 24# 179# 180 181 LITBL 19# 29# MAC1 24# 32# MAC2 24# 32# MACRO 24# 32# 139# 141# 174# 182 254# 255# 256# 257# 258# 259# MDT 25# 32# 75 91# 92# 94# 107 109 114# MDT1 25# 32# 71# 115 MDT2 26# 32# 72# 116 MDTL 25# 32# 74 90 90# 91 92 94 NDT13 110 127 184 195 208 210 212 214 227 238 243 NDT24 69 168 NDT29 57 146 NDT39 7# NDT40 70 NOARG 28# 143# 173# 241 OBJCD 20# 29# 32# OLDSY 27# 228# 230 OPER 20# 29# PGMCT 26# 32# 93 113 257 PKREP 25# 70 70# 75 91 92 PNEST 25# 142# 193 225 225# 226 226# 227 231 PNTR 25# 144# 167 167# 170 177 180 POS 27# 57 57# 58 69 69# 124 127 140 146 146# 168 168# 172 194 195 208 210 214 227 242 242# 243 243# PTRS 20# 29# 32# 36# REC 7# 27# 88# 93# 94 107# 111# 113# 114 RMAX 19# 29# RMIN 19# 29# RTC 69 69# 168 168# SORCE 27# 171# 172 174 180# 182 START 27# 48# 57 57# 58 69 69# 110 110# 124# 146 146# 168 168# 171 184 184# 194# 212 212# 238 238# SUBSC 20# 29# SYM 20# 29# SYMTB 20# 29# SYNCK 24# 47# 58 61 125# 145# 156 196# 197# 228 229# TEST 26# 73# 87 106 TITLE 20# 29# TMAP 20# 29# TOKEN 20# 29# TYPCT 20# 29# TYPE 27# 57 57# 59 60 126 146 146# 154 192 195 196 197 225 226 XREF 20# 29# 1000P 60 214# 100P 138 139# 1100P 154 225# 1200P 166 238# 1300P 193 231 241# 1350P 209 211 213 215 240 254# 200P 57# 128 220P 74 77# 225P 87 88# 226P 87 90# 230P 75 106# 235P 106 107# 236P 106 109# 237P 109 113# 240P 95 115# 250P 61 89 108 112 124# 300P 126 138# 400P 140 141# 500P 146# 198 549P 165# 230 550P 169 174# 560P 172 175# 570P 177 185# 580P 179 183# 600P 156 175 176 192# 232 700P 192 208# 800P 59 210# 241 900P 58 212# NDT39 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00057650 00002 C PROGRAM AUTHOR - GARY PELKEY 00057660 00003 C 00057670 00004 C 00057680 00005 SUBROUTINE NDT40 (OUT) 00057690 00006 C 00057700 00007 C 00057710 00008 C THIS ROUTINE PACKS SYMBOL INFORMATION FROM THE SUBSC ARRAY 00057720 00009 C AND THE SYM ARRAY INTO THE 5 WORD ARGUMENT ARRAY. 00057730 00010 C 00057740 00011 C 00057750 00012 REAL*8 RMIN,RMAX,LITBL(8192) 00057760 00013 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00057770 00014 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00057780 00015 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00057790 00016 3SYMTB(5,4096) 00057800 00017 INTEGER OUT(5) 00057810 00018 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00057820 00019 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00057830 00020 2SYMTB,LITBL 00057840 00021 OUT(1)=1521*(SUBSC(1)-20)+39*(SUBSC(2)-1)+SUBSC(3)-1 00057850 00022 OUT(2)=1521*(SUBSC(4)-20)+39*(SUBSC(5)-1)+SUBSC(6)-1 00057860 00023 OUT(3)=4096*(SYM(7)-1)+SYM(14)-1 00057870 00024 OUT(4)=32*SYM(8)+16*SYM(9)+8*SYM(10)+4*SYM(11)+2*SYM(12)+SYM(13) 00057880 00025 OUT(5)=SYM(15) 00057890 00026 RETURN 00057900 00027 END 00057920 COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 SUBPROGRAMS CALLED SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] OUT 1 TEMPORARIES .A0016 2 CARD1 13# 18# CARD2 13# 18# CRSET 13# 18# DEF 13# 18# EQCHN 13# 18# ERROR 13# 18# FCTN 13# 18# LITBL 12# 18# NDT40 5# OBJCD 13# 18# OPER 13# 18# OUT 5# 17# 21# 22# 23# 24# 25# PTRS 13# 18# RMAX 12# 18# RMIN 12# 18# SUBSC 13# 18# 21 22 SYM 13# 18# 23 24 25 SYMTB 13# 18# TITLE 13# 18# TMAP 13# 18# TOKEN 13# 18# TYPCT 13# 18# XREF 13# 18# NDT40 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00057930 00002 C PROGRAM AUTHOR - GARY PELKEY 00057940 00003 C 00057950 00004 C 00057960 00005 SUBROUTINE NDT41 (IN) 00057970 00006 C 00057980 00007 C 00057990 00008 C THIS PROGRAM UNPACKS THE 5 WORD INPUT ARRAY INTO SUBSC(1-6) 00058000 00009 C AND SYM(7-15). IT THEN PUTS THE CORRECT CHARACTERS IN SYM(1-6) 00058010 00010 C BASED ON WHAT IS IN SUBSC. 00058020 00011 C 00058030 00012 C 00058040 00013 REAL*8 RMIN,RMAX,LITBL(8192) 00058050 00014 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00058060 00015 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00058070 00016 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00058080 00017 3SYMTB(5,4096) 00058090 00018 INTEGER IN(5),FLAG,PT,N,TEMP,BIGPT,SUB 00058100 00019 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00058110 00020 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00058120 00021 2SYMTB,LITBL 00058130 00022 DO 100 PT=1,2 00058140 00023 N=3*PT-2 00058150 00024 TEMP=IN(PT) 00058160 00025 FLAG=1 00058170 00026 IF(IN(PT).GT.0) GO TO 50 00058180 00027 FLAG=0 00058190 00028 TEMP=IN(PT)+28899 00058200 00029 50 BIGPT=TEMP/1521 00058210 00030 SUBSC(N)=BIGPT+19*FLAG+1 00058220 00031 SUBSC(N+2)=MOD(TEMP,39)+1 00058230 00032 100 SUBSC(N+1)=(MOD(TEMP,1521)-SUBSC(N+2)+1)/39+1 00058240 00033 SYM(7)=IN(3)/4096+1 00058250 00034 SYM(14)=MOD(IN(3),4096)+1 00058260 00035 SYM(15)=IN(5) 00058270 00036 DO 200 I=1,6 00058280 00037 200 SYM(I+7)=MOD(IN(4),2**(7-I))/(2**(6-I)) 00058290 00038 400 DO 350 PT=1,6 00058300 00039 SUB=SUBSC(PT) 00058310 00040 350 SYM(PT)=CRSET(SUB) 00058320 00041 RETURN 00058330 00042 END 00058350 COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 NDT41 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 SUBPROGRAMS CALLED MOD. SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] N 1 PT 2 FLAG 3 SUB 4 .S0002 5 .S0001 6 .S0000 7 BIGPT 10 IN 11 TEMP 12 *I 13 .O0001 14 .O0000 15 TEMPORARIES .A0016 16 .Q0001 17 .Q0002 20 BIGPT 18# 29# 30 CARD1 14# 19# CARD2 14# 19# CRSET 14# 19# 40 DEF 14# 19# EQCHN 14# 19# ERROR 14# 19# FCTN 14# 19# FLAG 18# 25# 27# 30 I 36# 37 IN 5# 18# 24 26 28 33 34 35 37 LITBL 13# 19# MOD. 31 32 34 37 N 18# 23# 30 31 32 NDT41 5# OBJCD 14# 19# OPER 14# 19# PT 18# 22# 23 24 26 28 38# 39 40 PTRS 14# 19# RMAX 13# 19# RMIN 13# 19# SUB 18# 39# 40 SUBSC 14# 19# 30# 31# 32# 32 39 SYM 14# 19# 33# 34# 35# 37# 40# SYMTB 14# 19# TEMP 18# 24# 28# 29 31 32 TITLE 14# 19# TMAP 14# 19# TOKEN 14# 19# TYPCT 14# 19# XREF 14# 19# 100P 22 32# 200P 36 37# 350P 38 40# 400P 38# 50P 26 29# NDT41 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00058360 00002 C PROGRAM AUTHOR - THOMAS L. EVERMAN JR. 00058370 00003 C 00058380 00004 C 00058390 00005 SUBROUTINE NDT42 (PNT1,PNT2,ARGNM) 00058400 00006 REAL*8 RMIN,RMAX,LITBL(8192) 00058410 00007 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00058420 00008 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00058430 00009 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00058440 00010 3SYMTB(5,4096) 00058450 00011 INTEGER START,PNT1,PNT2,ARGNM,ARGS,LTPAR,RTPAR,COMMA,PNEST 00058460 00012 1,CDATA(144) 00058470 00013 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00058480 00014 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00058490 00015 2SYMTB,LITBL 00058500 00016 EQUIVALENCE (COMMA,OPER(9)),(LTPAR,OPER(7)),(RTPAR,OPER(8)) 00058510 00017 EQUIVALENCE (CDATA(1),OBJCD(1)) 00058520 00018 PNEST=0 00058530 00019 ARGS=1 00058540 00020 START=PNT2+1 00058550 00021 DO 100 I=START,140 00058560 00022 IF(CDATA(I).EQ.LTPAR) PNEST=PNEST+10 00058570 00023 IF(CDATA(I).EQ.RTPAR) PNEST=PNEST-10 00058580 00024 IF(PNEST.EQ.0) GO TO 200 00058590 00025 IF(PNEST.GT.10) GO TO 100 00058600 00026 IF(CDATA(I).EQ.COMMA) ARGS=ARGS+1 00058610 00027 100 CONTINUE 00058620 00028 200 IF(ARGS.NE.ARGNM) CALL NDT13(PNT1,506,3) 00058630 00029 RETURN 00058640 00030 END 00058660 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 COMMA +330 LTPAR +326 RTPAR +327 CDATA +1222 SUBPROGRAMS CALLED NDT13 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] ARGNM 1 PNT2 2 PNT1 3 .S0000 4 ARGS 5 *I 6 START 7 PNEST 10 NDT42 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 TEMPORARIES .A0016 11 ARGNM 5# 11# 28 ARGS 11# 19# 26 26# 28 CARD1 7# 13# CARD2 7# 13# CDATA 11# 17# 22 23 26 COMMA 11# 16# 26 CRSET 7# 13# DEF 7# 13# EQCHN 7# 13# ERROR 7# 13# FCTN 7# 13# I 21# 22 23 26 LITBL 6# 13# LTPAR 11# 16# 22 NDT13 28 NDT42 5# OBJCD 7# 13# 17# OPER 7# 13# 16# PNEST 11# 18# 22 22# 23 23# 24 25 PNT1 5# 11# 28 28# PNT2 5# 11# 20 PTRS 7# 13# RMAX 6# 13# RMIN 6# 13# RTPAR 11# 16# 23 START 11# 20# 21 SUBSC 7# 13# SYM 7# 13# SYMTB 7# 13# TITLE 7# 13# TMAP 7# 13# TOKEN 7# 13# TYPCT 7# 13# XREF 7# 13# 100P 21 25 27# 200P 24 28# NDT42 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00058670 00002 C * 00058680 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00058690 00004 C PROGRAM AUTHOR - THOMAS L EVERMAN JR * 00058700 00005 C * 00058710 00006 C THIS SUBROUTINE RIGHT JUSTIFIES REAL NUMBERS. * 00058720 00007 C * 00058730 00008 C***************************************************************** 00058740 00009 SUBROUTINE NDT43 (DVAL, FIELD, SCALE, PLACE) 00058750 00010 REAL*8 RMIN,RMAX,LITBL(8192) 00058760 00011 REAL*8 VAL,DVAL,POWER 00058770 00012 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00058780 00013 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00058790 00014 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00058800 00015 3SYMTB(5,4096) 00058810 00016 INTEGER FIELD(7),NUM(10),BLANK,SCALE,DEC,LEAD,POINT,SIGN 00058820 00017 INTEGER DIGIT,MINUS,PLACE,STDEC,POS 00058830 00018 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00058840 00019 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00058850 00020 2SYMTB,LITBL 00058860 00021 EQUIVALENCE (BLANK,CRSET(1)),(POINT,OPER(1)),(MINUS,OPER(3)) 00058870 00022 EQUIVALENCE (NUM(1),CRSET(30)) 00058880 00023 EQUIVALENCE (DEC,LEAD) 00058890 00024 C***************************************************************** 00058900 00025 C * 00058910 00026 C DVAL IS THE INPUT REAL NUMBER. FIELD IS THE OUTPUT RIGHT * 00058920 00027 C JUSTIFIED NUMBER. SCALE IS THE POWER OF 10 TO WHICH THE * 00058930 00028 C NUMBER IS TO BE SCALED. PLACE INDICATES THE NUMBER * 00058940 00029 C OF DECIMAL PLACES. * 00058950 00030 C SET VAL TO THE VALUE OF THE SCALED NUMBER. ASSUME A PLUS * 00058960 00031 C SIGN AND THEN CHECK FOR MEGATIVE VAL. TAKE ABSOLUTE * 00058970 00032 C VALUE OF VAL AND ROUND IT TO THE APPROPRIATE NUMBER OF * 00058980 00033 C DECIMAL PLACES. * 00058990 00034 C * 00059000 00035 C***************************************************************** 00059010 00036 VAL = DVAL / 10. ** SCALE 00059020 00037 FIELD(1) = BLANK 00059030 00038 SIGN = 1 00059040 00039 IF (DVAL .LT. 0.) SIGN = -1 00059050 00040 VAL = DABS (VAL + .5 * SIGN * 10. ** (-PLACE)) 00059060 00041 C***************************************************************** 00059070 00042 C * 00059080 00043 C SET DEC EQUAL TO DECIMAL POINT POSITION. IF IT OCCUPIES TH* 00059090 00044 C LAST FIELD POSITION, SET DEC TO 8 SO THAT NO DECIMAL POINT * 00059100 00045 C APPEARS IN THE FIELD. STDEC IS A HOLD AREA FOR DEC. * 00059110 00046 C * 00059120 00047 C***************************************************************** 00059130 00048 DEC = 7 - PLACE 00059140 00049 IF (DEC .EQ. 7) DEC = 8 00059150 00050 STDEC = DEC 00059160 00051 C***************************************************************** 00059170 00052 C * 00059180 00053 C EXTRACT THE NUMERIC CHARACTERS FROM VAL. VALUE FOR DEC * 00059190 00054 C MUST BE INCREMENTED AT THE DECIMAL POINT POSITION TO AVOID * 00059200 00055 C INVALID COMPUTATION OF NUMERIC CHARACTER. * 00059210 00056 C * 00059220 NDT43 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C***************************************************************** 00059230 00058 DO 300 POS = 2, 7 00059240 00059 IF (POS .EQ. STDEC) GO TO 200 00059250 00060 POWER = 10. ** (DEC - POS - 1) 00059260 00061 DIGIT = VAL / POWER 00059270 00062 FIELD(POS) = NUM(DIGIT + 1) 00059280 00063 VAL = VAL - FLOAT (DIGIT) * POWER 00059290 00064 GO TO 300 00059300 00065 200 DEC = DEC + 1 00059310 00066 FIELD(POS) = POINT 00059320 00067 300 CONTINUE 00059330 00068 C***************************************************************** 00059340 00069 C * 00059350 00070 C REPLACE LEADING ZEROS WITH BLANKS AND ENTER THE SIGN. * 00059360 00071 C * 00059370 00072 C***************************************************************** 00059380 00073 IF (DEC .EQ. 8) DEC = 9 00059390 00074 LEAD = DEC - 3 00059400 00075 POS = 2 00059410 00076 IF (LEAD .LE. 1) GO TO 500 00059420 00077 DO 400 POS = 2, LEAD 00059430 00078 IF (FIELD(POS) .NE. NUM(1)) GO TO 500 00059440 00079 FIELD(POS) = BLANK 00059450 00080 400 CONTINUE 00059460 00081 POS = POS + 1 00059470 00082 500 IF (SIGN .EQ. -1) FIELD(POS - 1) = MINUS 00059480 00083 RETURN 00059490 00084 END 00059510 EQUIVALENCED VARIABLES ( DEC 1 LEAD 1 ) COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 BLANK +251 POINT +320 MINUS +322 NUM +306 SUBPROGRAMS CALLED FLOAT. DABS. SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] SIGN 2 DIGIT 3 POS 4 POWER 5 FIELD 7 DVAL 10 PLACE 12 .S0001 13 .S0000 14 SCALE 15 DEC 1 VAL 16 .O0000 20 STDEC 21 LEAD 1 NDT43 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 TEMPORARIES .A0016 22 .Q0000 23 BLANK 16# 21# 37 79 CARD1 12# 18# CARD2 12# 18# CRSET 12# 18# 21# 22# DABS. 40 DEC 16# 23# 48# 49 49# 50 60 65 65# 73 73# 74 DEF 12# 18# DIGIT 17# 61# 62 63 DVAL 9# 11# 36 39 EQCHN 12# 18# ERROR 12# 18# FCTN 12# 18# FIELD 9# 16# 37# 62# 66# 78 79# 82# FLOAT. 63 LEAD 16# 23# 74# 76 77 LITBL 10# 18# MINUS 17# 21# 82 NDT43 9# NUM 16# 22# 62 78 OBJCD 12# 18# OPER 12# 18# 21# PLACE 9# 17# 40 48 POINT 16# 21# 66 POS 17# 58# 59 60 62 66 75# 77# 78 79 81 81# 82 POWER 11# 60# 61 63 PTRS 12# 18# RMAX 10# 18# RMIN 10# 18# SCALE 9# 16# 36 SIGN 16# 38# 39# 40 82 STDEC 17# 50# 59 SUBSC 12# 18# SYM 12# 18# SYMTB 12# 18# TITLE 12# 18# TMAP 12# 18# TOKEN 12# 18# TYPCT 12# 18# VAL 11# 36# 40 40# 61 63 63# XREF 12# 18# 200P 59 65# 300P 58 64 67# 400P 77 80# 500P 76 78 82# NDT43 [ NO ERRORS DETECTED ] NDT44 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 SUBROUTINE NDT44 (VAL,FIELD) 00059520 00002 INTEGER CHAR,EXP,PLACE,PNT,OUTER,BLANK,PLUS,POINT,E,SUB 00059530 00003 INTEGER COUNT,ZERO,FIELD(11),NUM(10),LOOP,MINUS 00059540 00004 REAL*8 VAL 00059550 00005 EQUIVALENCE (ZERO,NUM(1)) 00059560 00006 DATA NUM /'0','1','2','3','4','5','6','7','8','9'/ 00059570 00007 DATA BLANK,E,PLUS,MINUS,POINT /' ','E','+','-','.'/ 00059580 00008 DO 90 LOOP=8,11 00059590 00009 90 FIELD(LOOP)=BLANK 00059600 00010 CALL NDT77 (DABS(VAL),CHAR) 00059610 00011 IF(CHAR.LT.-1.OR.CHAR.GT.4) GO TO 100 00059620 00012 EXP=0 00059630 00013 PLACE=4-CHAR 00059640 00014 GO TO 200 00059650 00015 100 EXP=CHAR 00059660 00016 PLACE=4 00059670 00017 200 CALL NDT43 (VAL,FIELD,EXP,PLACE) 00059680 00018 DO 300 OUTER=1,6 00059690 00019 IF(FIELD(1).NE.BLANK) GO TO 500 00059700 00020 DO 400 LOOP=1,6 00059710 00021 400 FIELD(LOOP)=FIELD(LOOP+1) 00059720 00022 300 FIELD(7)=BLANK 00059730 00023 500 IF(CHAR.EQ.4) GO TO 800 00059740 00024 DO 600 LOOP=1,7 00059750 00025 PNT=8-LOOP 00059760 00026 IF(FIELD(PNT).EQ.BLANK) GO TO 600 00059770 00027 IF(FIELD(PNT).EQ.ZERO) GO TO 700 00059780 00028 IF(FIELD(PNT).NE.POINT) GO TO 800 00059790 00029 FIELD(PNT)=BLANK 00059800 00030 PNT=PNT-1 00059810 00031 GO TO 800 00059820 00032 700 FIELD(PNT)=BLANK 00059830 00033 600 CONTINUE 00059840 00034 800 IF(EXP) 825,5000,850 00059850 00035 825 COUNT=-EXP-1 00059860 00036 IF(COUNT.GT.5.OR.COUNT.GT.7-PNT) GO TO 850 00059870 00037 PNT=2 00059880 00038 IF(FIELD(2).NE.POINT.AND.FIELD(2).NE.BLANK) PNT=3 00059890 00039 FIELD(PNT)=FIELD(PNT-1) 00059900 00040 FIELD(PNT-1)=POINT 00059910 00041 DO 1000 OUTER=1,COUNT 00059920 00042 DO 1100 LOOP=PNT,6 00059930 00043 SUB=7-LOOP+PNT 00059940 00044 1100 FIELD(SUB)=FIELD(SUB-1) 00059950 00045 1000 FIELD(PNT)=ZERO 00059960 00046 GO TO 5000 00059970 00047 850 FIELD(PNT+1)=E 00059980 00048 FIELD(PNT+2)=PLUS 00059990 00049 IF(EXP.GT.0) GO TO 900 00060000 00050 EXP=-EXP 00060010 00051 FIELD(PNT+2)=MINUS 00060020 00052 900 PNT=PNT+3 00060030 00053 SUB=EXP/10+1 00060040 00054 FIELD(PNT)=NUM(SUB) 00060050 00055 IF(SUB.NE.1) PNT=PNT+1 00060060 00056 SUB=EXP-10*SUB+11 00060070 NDT44 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 FIELD(PNT)=NUM(SUB) 00060080 00058 5000 RETURN 00060090 00059 END 00060110 EQUIVALENCED VARIABLES ( ZERO 1 NUM 1 ) SUBPROGRAMS CALLED NDT77 NDT43 DABS. SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] E 13 ZERO 1 NUM 1 MINUS 14 LOOP 15 FIELD 16 CHAR 17 COUNT 20 BLANK 21 SUB 22 PLACE 23 .S0005 24 .S0004 25 .S0003 26 .S0002 27 .S0001 30 .S0000 31 EXP 32 PLUS 33 POINT 34 OUTER 35 PNT 36 VAL 37 .O0004 41 .O0003 42 .O0002 43 .O0001 44 .O0000 45 TEMPORARIES .A0016 46 .Q0000 47 .Q0001 50 BLANK 2# 7# 9 19 22 26 29 32 38 CHAR 2# 10 10# 11 13 15 23 COUNT 3# 35# 36 41 DABS. 10 E 2# 7# 47 EXP 2# 12# 15# 17 17# 34 35 49 50 50# 53 56 FIELD 1# 3# 9# 17 17# 19 21# 21 22# 26 27 28 29# 32# 38 39# 39 40# 44# 44 45# 47# 48# 51# 54# 57# LOOP 3# 8# 9 20# 21 24# 25 42# 43 MINUS 3# 7# 51 NDT43 17 NDT44 1# NDT77 10 NUM 3# 5# 6# 54 57 OUTER 2# 18# 41# PLACE 2# 13# 16# 17 17# PLUS 2# 7# 48 PNT 2# 25# 26 27 28 29 30 30# 32 36 37# 38# 39 40 42 43 45 47 48 51 52 52# 54 55 55# 57 POINT 2# 7# 28 38 40 SUB 2# 43# 44 53# 54 55 56 56# 57 VAL 1# 4# 10 17 17# ZERO 3# 5# 27 45 1000P 41 45# 100P 11 15# 1100P 42 44# 200P 14 17# 300P 18 22# 400P 20 21# 5000P 34 46 58# 500P 19 23# 600P 24 26 33# 700P 27 32# 800P 23 28 31 34# 825P 34 35# 850P 34 36 47# 900P 49 52# 90P 8 9# NDT44 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00060120 00002 C PROGRAM AUTHOR - DANIEL A. POYDENCE 00060130 00003 C 00060140 00004 C 00060150 00005 SUBROUTINE NDT45 (NUMBR,FIELD,OPTN) 00060160 00006 C 00060170 00007 C 00060180 00008 C NDT45 FORMATS INTEGER NUMBERS FOR PRINTING IN A1 FORMAT. 00060190 00009 C 00060200 00010 C THE FIRST ARGUMENT IS THE NUMBER IN INTEGER MODE WHICH IS 00060210 00011 C TO BE CONVERTED TO CHARACTER FORMAT. 00060220 00012 C 00060230 00013 C THE SECOND ARGUMENT IS THE TARGET FIELD IN WHICH THE 00060240 00014 C CHARACTER STRING REPRESENTATION IS PLACED. 00060250 00015 C 00060260 00016 C THE THIRD ARGUMENT INDICATES THE FORMAT OPTION: 00060270 00017 C 00060280 00018 C 0 - THE NUMBER IS LEFT JUSTIFIED IN THE FIELD WITH LEADING 00060290 00019 C ZERO SUPPRESSION AND BLANK PADDING ON THE RIGHT. 00060300 00020 C 1 - THE NUMBER IS RIGHT JUSTIFIED IN THE FIELD WITH LEADING 00060310 00021 C ZEROS LEFT IN THE FIELD AND NO BLANK PADDING. 00060320 00022 C 00060330 00023 C 00060340 00024 REAL*8 RMIN,RMAX,LITBL(8192) 00060350 00025 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00060360 00026 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00060370 00027 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00060380 00028 3SYMTB(5,4096) 00060390 00029 INTEGER FIELD(4),NUM(10),DIGIT,PNT,BLANK,LOOP,NUMBR,OPTN 00060400 00030 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00060410 00031 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00060420 00032 2SYMTB,LITBL 00060430 00033 EQUIVALENCE (DIGIT,PNT),(NUM(1),CRSET(30)),(BLANK,CRSET(1)) 00060440 00034 C 00060450 00035 C 00060460 00036 C THIS LOOP PLACES THE CHARACTER REPRESENTATION OF EACH DIGIT 00060470 00037 C IN ITS CORRESPONDING POSITION IN THE TARGET FIELD. 00060480 00038 C 00060490 00039 C 00060500 00040 DO 100 LOOP=1,4 00060510 00041 DIGIT=MOD(NUMBR/10**(4-LOOP),10)+1 00060520 00042 100 FIELD(LOOP)=NUM(DIGIT) 00060530 00043 C 00060540 00044 C 00060550 00045 C IF THE RIGHT JUSTIFY OPTION IS REQUESTED THEN PROCESSING 00060560 00046 C IS FINISHED. 00060570 00047 C 00060580 00048 C 00060590 00049 IF(OPTN.EQ.1) GO TO 400 00060600 00050 C 00060610 00051 C 00060620 00052 C THIS LOOP CHECKS THE LEADING POSITION FOR A ZERO. 00060630 00053 C IF IT IS NOT A ZERO THEN THE STRING IS LEFT JUSTIFIED. 00060640 00054 C 00060650 00055 C 00060660 00056 DO 300 PNT=1,3 00060670 NDT45 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 IF(FIELD(1).NE.NUM(1)) GO TO 400 00060680 00058 C 00060690 00059 C 00060700 00060 C THE LEADING CHARACTER IS A ZERO SO SHIFT ALL CHARACTERS 00060710 00061 C ONE POSITION TO THE LEFT AND BLANK OUT THE LAST POSTITON. 00060720 00062 C 00060730 00063 C 00060740 00064 DO 200 LOOP=1,3 00060750 00065 200 FIELD(LOOP)=FIELD(LOOP+1) 00060760 00066 300 FIELD(4)=BLANK 00060770 00067 400 RETURN 00060780 00068 END 00060800 EQUIVALENCED VARIABLES ( DIGIT 1 PNT 1 ) COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 NUM +306 BLANK +251 SUBPROGRAMS CALLED MOD. SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] DIGIT 1 LOOP 2 FIELD 3 .S0002 4 .S0001 5 .S0000 6 NUMBR 7 PNT 1 OPTN 10 .O0000 11 TEMPORARIES .A0016 12 .Q0000 13 BLANK 29# 33# 66 CARD1 25# 30# CARD2 25# 30# CRSET 25# 30# 33# DEF 25# 30# DIGIT 29# 33# 41# 42 EQCHN 25# 30# ERROR 25# 30# FCTN 25# 30# FIELD 5# 29# 42# 57 65# 65 66# LITBL 24# 30# LOOP 29# 40# 41 42 64# 65 MOD. 41 NDT45 5# NUM 29# 33# 42 57 NUMBR 5# 29# 41 OBJCD 25# 30# OPER 25# 30# OPTN 5# 29# 49 PNT 29# 33# 56# PTRS 25# 30# RMAX 24# 30# RMIN 24# 30# SUBSC 25# 30# SYM 25# 30# SYMTB 25# 30# TITLE 25# 30# TMAP 25# 30# TOKEN 25# 30# TYPCT 25# 30# XREF 25# 30# 100P 40 42# 200P 64 65# 300P 56 66# 400P 49 57 67# NDT45 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00060810 00002 C * 00060820 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00060830 00004 C PROGRAM AUTHOR - THOMAS L EVERMAN JR * 00060840 00005 C * 00060850 00006 C THIS PROGRAM CONSTRUCTS THE OBJECT CODE BUFFER. * 00060860 00007 C * 00060870 00008 C***************************************************************** 00060880 00009 SUBROUTINE NDT46 (OPCOD, OPRND) 00060890 00010 REAL*8 RMIN,RMAX,LITBL(8192) 00060900 00011 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00060910 00012 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00060920 00013 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00060930 00014 3SYMTB(5,4096) 00060940 00015 INTEGER OPCOD,OPRND,OBJPT 00060950 00016 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00060960 00017 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00060970 00018 2SYMTB,LITBL 00060980 00019 EQUIVALENCE (OBJPT,OBJCD(1)) 00060990 00020 C***************************************************************** 00061000 00021 C * 00061010 00022 C INCREMENT OBJPT AND CHECK FOR EXCEEDING BUFFER LENGTH. * 00061020 00023 C ENTER THE OPCODE AND OPERAND FROM THE ARGUMENT LIST INTO * 00061030 00024 C THE NEXT 2 LOCATIONS IN THE BUFFER. * 00061040 00025 C * 00061050 00026 C***************************************************************** 00061060 00027 OBJPT = OBJPT + 2 00061070 00028 IF (OBJPT .LE. 160) GO TO 100 00061080 00029 CALL NDT12 (5) 00061090 00030 GO TO 200 00061100 00031 100 OBJCD(OBJPT - 1) = OPCOD 00061110 00032 OBJCD(OBJPT) = OPRND 00061120 00033 200 RETURN 00061130 00034 END 00061150 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 OBJPT +1222 SUBPROGRAMS CALLED NDT12 NDT46 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] OPCOD 1 OPRND 2 TEMPORARIES .A0016 3 CARD1 11# 16# CARD2 11# 16# CRSET 11# 16# DEF 11# 16# EQCHN 11# 16# ERROR 11# 16# FCTN 11# 16# LITBL 10# 16# NDT12 29 NDT46 9# OBJCD 11# 16# 19# 31# 32# OBJPT 15# 19# 27 27# 28 31 32 OPCOD 9# 15# 31 OPER 11# 16# OPRND 9# 15# 32 PTRS 11# 16# RMAX 10# 16# RMIN 10# 16# SUBSC 11# 16# SYM 11# 16# SYMTB 11# 16# TITLE 11# 16# TMAP 11# 16# TOKEN 11# 16# TYPCT 11# 16# XREF 11# 16# 100P 28 31# 200P 30 33# NDT46 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00061160 00002 C * 00061170 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00061180 00004 C PROGRAM AUTHOR - THOMAS L EVERMAN JR * 00061190 00005 C * 00061200 00006 C THIS PROGRAM PROCESSES VARIABLES ON THE LEFT SIDE OF EQUATI* 00061210 00007 C * 00061220 00008 C***************************************************************** 00061230 00009 SUBROUTINE NDT47 00061240 00010 REAL*8 RMIN,RMAX,LITBL(8192) 00061250 00011 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00061260 00012 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00061270 00013 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00061280 00014 3SYMTB(5,4096) 00061290 00015 INTEGER EQPOS,STYPE,SUBCK(8),LFTYP,VSUB,SYMPT,USDBT,VTYPE, 00061300 00016 1INTBT,PRTBT,PLTBT,USOUT(3),I,DEFBT,TOKPT 00061310 00017 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00061320 00018 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00061330 00019 2SYMTB,LITBL 00061340 00020 EQUIVALENCE (EQPOS,TMAP(3)),(STYPE,TOKEN(1)),(USDBT,SYM(10)), 00061350 00021 1(VTYPE,SYM(7)),(INTBT,SYM(13)),(PRTBT,SYM(8)), 00061360 00022 2(PLTBT,SYM(9)),(DEFBT,SYM(11)),(TOKPT,TOKEN(3)) 00061370 00023 DATA USOUT /2,5,8/ 00061380 00024 DATA SUBCK /0,0,0,0,2,2,4,2/ 00061390 00025 C***************************************************************** 00061400 00026 C * 00061410 00027 C THE USOUT ARRAY LISTS EQUATION TYPES WHICH DEFINE VARIABLES* 00061420 00028 C WHOSE USE IN OUTPUT STATEMENTS IS ACCEPTABLE AS USAGE OF * 00061430 00029 C THE VARIABLE. THE SUBCK ARRAY GIVES A CORRESPONDENCE * 00061440 00030 C BETWEEN THE STATEMENT TYPE AND THE SUBSCRIPT OF THE NAME * 00061450 00031 C ON THE LEFT OF THE EQUAL SIGN. A CHECK IS FIRST MADE TO SE* 00061460 00032 C IF AN EQUAL SIGN EXISTS IN THE EQUATION. THEN, THE TOKEN * 00061470 00033 C TYPE IS DETERMINED. IF THE TOKEN DOES NOT INDICATE A * 00061480 00034 C VALID VARIABLE, THE PROGRAM RETURNS. * 00061490 00035 C * 00061500 00036 C***************************************************************** 00061510 00037 IF (EQPOS .NE. 5 .OR. TOKPT .EQ. 3) GO TO 400 00061520 00038 VSUB = TOKEN(4) / 4096 00061530 00039 IF (TOKEN(4) .LT. 0 .OR. VSUB .GT. 4) GO TO 400 00061540 00040 C***************************************************************** 00061550 00041 C * 00061560 00042 C COMPUTE THE SYMBOL TABLE POINTER FROM THE TOKEN. CALL THE * 00061570 00043 C UNPACK SUBROUTINE SO THAT VARIABLE INFORMATION IS AVAILABLE* 00061580 00044 C IN SYM. SET LFTYP TO THE STATEMENT TYPE * 00061590 00045 C BRANCH TO THE DEF CARD PROCESSING ROUTINE. * 00061600 00046 C***************************************************************** 00061610 00047 SYMPT = MOD (TOKEN(4), 4096) + 1 00061620 00048 CALL NDT41 (SYMTB(1,SYMPT)) 00061630 00049 LFTYP = STYPE 00061640 00050 IF (LFTYP .EQ. 18) GO TO 300 00061650 00051 C***************************************************************** 00061660 00052 C * 00061670 00053 C CROSS-CHECK THE SUBSCRIPTS. ALSO BRANCH TO RETURN * 00061680 00054 C IF PARM CARD VARIABLE IS BEING PROCESSED. * 00061690 00055 C * 00061700 00056 C***************************************************************** 00061710 NDT47 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 IF (VSUB .NE. SUBCK(LFTYP)) CALL NDT14 (TMAP(4), 530 + 00061720 00058 1SUBCK(LFTYP), 1) 00061730 00059 IF (VTYPE .EQ. 3) GO TO 400 00061740 00060 C***************************************************************** 00061750 00061 C * 00061760 00062 C MAKE SPECIAL CHECKS FOR INITIAL VALUE EQUATION. MAKE SURE * 00061770 00063 C INITIALIZED VARIABLE IS A LEVEL. IF N EQUATION DOES NOT * 00061780 00064 C INITIALIZE ANYTHING, GIVE WARNING AND CHANGE ITS TYPE * 00061790 00065 C TO A LEVEL. * 00061800 00066 C * 00061810 00067 C***************************************************************** 00061820 00068 IF (STYPE .NE. 4 .OR. DEFBT .NE. 0) GO TO 90 00061830 00069 CALL NDT14 (TMAP(4), 525, 1) 00061840 00070 VTYPE = 5 00061850 00071 CALL NDT40 (SYMTB(1,SYMPT)) 00061860 00072 GO TO 90 00061870 00073 C***************************************************************** 00061880 00074 C * 00061890 00075 C CHECK TO MAKE SURE A LEVEL VARIABLE HAS BEEN INITIALIZED. * 00061900 00076 C THEN CHECK TO MAKE SURE THAT THE VARIABLE HAS BEEN USED * 00061910 00077 C ON THE RIGHT SIDE OF AN EQUATION. IF IT IS NOT USED, NO * 00061920 00078 C WARNING IS ISSUED AS LONG AS THE VARIABLE IS A L, S, OR C * 00061930 00079 C AND IS USED FOR OUTPUT. IF A R OR A EQUATION IS USED FOR * 00061940 00080 C OUTPUT ONLY, A WARNING IS GIVEN TO INDICATE THAT THE * 00061950 00081 C VARIABLE SHOULD BE DEFINED AS A SUPPLEMENTARY. IF THE * 00061960 00082 C VARIABLE IS NEITHER USED NOR OUTPUT, A WARNING INDICATING * 00061970 00083 C THAT THE VARIABLE HAS NO USAGE IN THE PROGRAM IS GIVEN. * 00061980 00084 C * 00061990 00085 C***************************************************************** 00062000 00086 90 IF (VTYPE .EQ. 5 .AND. INTBT .EQ. 0) CALL NDT14 (TMAP(4),524,3) 00062010 00087 IF (USDBT .NE. 0) GO TO 400 00062020 00088 IF (PRTBT .EQ. 0 .AND. PLTBT .EQ. 0) GO TO 200 00062030 00089 DO 100 I = 1, 3 00062040 00090 IF (VTYPE .EQ. USOUT(I)) GO TO 400 00062050 00091 100 CONTINUE 00062060 00092 C***************************************************************** 00062070 00093 C * 00062080 00094 C ERROR MESSAGES: * 00062090 00095 C 587 - VARIABLE IS USED FOR OUTPUT ONLY AND SHOULD HAVE * 00062100 00096 C BEEN DEFINED AS A SUPPLEMENTARY. * 00062110 00097 C 588 - A VARIABLE HAS NO PURPOSE IN THE PROGRAM. * 00062120 00098 C 589 - THE DEF CARD OCCURS FOR AN UNDEFINED VARIABLE. * 00062130 00099 C * 00062140 00100 C***************************************************************** 00062150 00101 CALL NDT14 (TMAP(4), 587, 1) 00062160 00102 GO TO 400 00062170 00103 200 CALL NDT14 (TMAP(4), 588, 1) 00062180 00104 GO TO 400 00062190 00105 300 IF (DEFBT .EQ. 0) CALL NDT14 (TMAP(4), 589, 1) 00062200 00106 400 RETURN 00062210 00107 END 00062230 EQUIVALENCED VARIABLES NDT47 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 EQPOS +1724 STYPE +522 USDBT +342 VTYPE +337 INTBT +345 PRTBT +340 PLTBT +341 DEFBT +343 TOKPT +524 SUBPROGRAMS CALLED MOD. NDT40 NDT14 NDT41 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] SUBCK 1 .S0000 11 SYMPT 12 LFTYP 13 I 14 USOUT 15 VSUB 20 TEMPORARIES .A0016 21 .Q0000 22 CARD1 11# 17# CARD2 11# 17# CRSET 11# 17# DEF 11# 17# DEFBT 15# 20# 68 105 EQCHN 11# 17# EQPOS 15# 20# 37 ERROR 11# 17# FCTN 11# 17# I 15# 89# 90 INTBT 15# 20# 86 LFTYP 15# 49# 50 57 LITBL 10# 17# MOD. 47 NDT14 57 69 86 101 103 105 NDT40 71 NDT41 48 NDT47 9# OBJCD 11# 17# OPER 11# 17# PLTBT 15# 20# 88 PRTBT 15# 20# 88 PTRS 11# 17# RMAX 10# 17# RMIN 10# 17# STYPE 15# 20# 49 68 SUBCK 15# 24# 57 SUBSC 11# 17# SYM 11# 17# 20# SYMPT 15# 47# 48 71 SYMTB 11# 17# 48 48# 71 71# TITLE 11# 17# TMAP 11# 17# 20# 57 57# 69 69# 86 86# 101 101# 103 103# 105 105# TOKEN 11# 17# 20# 38 39 47 TOKPT 15# 20# 37 TYPCT 11# 17# USDBT 15# 20# 87 USOUT 15# 23# 90 VSUB 15# 38# 39 57 VTYPE 15# 20# 59 70# 86 90 XREF 11# 17# 100P 89 91# 200P 88 103# 300P 50 105# 400P 37 39 59 87 90 102 104 106# 90P 68 72 86# NDT47 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00062240 00002 C * 00062250 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00062260 00004 C PROGRAM AUTHOR - THOMAS L EVERMAN JR * 00062270 00005 C * 00062280 00006 C THIS PROGRAM PROCESSES VARABLES ON THE RIGHT SIDE OF * 00062290 00007 C AN EQUATION. * 00062300 00008 C * 00062310 00009 C***************************************************************** 00062320 00010 SUBROUTINE NDT48 00062330 00011 REAL*8 RMIN,RMAX,LITBL(8192) 00062340 00012 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00062350 00013 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00062360 00014 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00062370 00015 3SYMTB(5,4096) 00062380 00016 INTEGER EQPOS,STYPE,RSTYP,VTYPE,RVTYP,DEFBT,SUBCK(8,7), 00062390 00017 1VSUB,PNT,TOKPT,SYMPT,FUNPT,CHECK,OPTNS,XRFBT,DVSYM,INTBT 00062400 00018 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00062410 00019 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00062420 00020 2SYMTB,LITBL 00062430 00021 EQUIVALENCE (EQPOS,TMAP(3)),(STYPE,TOKEN(1)),(VTYPE,SYM(7)), 00062440 00022 1(DEFBT,SYM(11)),(TOKPT,TOKEN(3)),(SYMPT,FUNPT), 00062450 00023 2(OPTNS,PTRS(7)),(INTBT,SYM(13)) 00062460 00024 C***************************************************************** 00062470 00025 C * 00062480 00026 C THE SUBCK ARRAY IS USED TO SEE WHETHER A GIVEN VARIABLE * 00062490 00027 C TYPE IS VALID IN AN EQUATION AND WHETHER OR NOT IT IS * 00062500 00028 C PROPERLY SUBSCRIPTED. THE ROWS CORRESPOND TO STATEMENTS, * 00062510 00029 C AND THE COLUMNS CORRESPOND TO VARIABLE TYPES. THE VALUES * 00062520 00030 C AT THE INTERSECTING POSITION INDICATE THE FOLLOWING: * 00062530 00031 C 0 - USAGE IS PERMISSIBLE. NO SUBSCRIPT. * 00062540 00032 C 2 - USAGE IS PERMISSIBLE. SUBSCRIPT .K. * 00062550 00033 C 3 - USAGE IS PERMISSIBLE. SUBSCRIPT .JK. * 00062560 00034 C 100 - USAGE IS NOT PERMISSIBLE. * 00062570 00035 C * 00062580 00036 C***************************************************************** 00062590 00037 DATA SUBCK /0,0,0,100,0,0,0,0,100,0,100,100,100,100,100,100, 00062600 00038 1100,100,0,100,100,100,100,0,100,100,0,100,2,2,2,0, 00062610 00039 2100,100,0,100,2,2,2,0,100,100,0,3,100,100,3,0, 00062620 00040 3100,100,100,100,100,100,2,0/ 00062630 00041 C***************************************************************** 00062640 00042 C * 00062650 00043 C MAKE SURE EQUAL SIGN EXISTS IN EQUATION. PNT IS THE POSITI* 00062660 00044 C OF THE NEXT AVAILABLE TOKEN. RSTYP IS USED TO KEEP STYPE * 00062670 00045 C WITHIN THE BOUNDS OF THE SUBCK ARRAY. DVSYM IS THE SYMBOL * 00062680 00046 C TABLE POINTER OF THE DEPENDENT VARIABLE FOR THIS EQUATION. * 00062690 00047 C * 00062700 00048 C***************************************************************** 00062710 00049 IF (EQPOS .EQ. 0) GO TO 600 00062720 00050 XRFBT = MOD (OPTNS / 128, 2) 00062730 00051 PNT = EQPOS 00062740 00052 RSTYP = STYPE - 1 00062750 00053 IF (STYPE .EQ. 12 .OR. STYPE .EQ. 13) RSTYP = 8 00062760 00054 DVSYM = MOD (TOKEN(4), 4096) + 1 00062770 00055 C***************************************************************** 00062780 00056 C * 00062790 NDT48 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C INCREMENT THE TOKEN POINTER AND CHECK FOR THE END OF * 00062800 00058 C OF THE TOKEN STRING. DETERMINE THE SUBSCRIPT TYPE IN * 00062810 00059 C VSUB. GET NEXT TOKEN IF PRESENT TOKEN INDICATES A * 00062820 00060 C NUMERIC, FUNCTION, INVALID VARIABLE, OR OPERATOR. * 00062830 00061 C * 00062840 00062 C***************************************************************** 00062850 00063 100 PNT = PNT + 1 00062860 00064 IF (PNT .GT. TOKPT) GO TO 600 00062870 00065 VSUB = TOKEN(PNT) / 4096 00062880 00066 IF (TOKEN(PNT) .LT. 0 .OR. VSUB .GT. 5) GO TO 100 00062890 00067 C***************************************************************** 00062900 00068 C * 00062910 00069 C GET THE POINTER TO THE SYMBOL OR FUNCTION TABLE FROM THE * 00062920 00070 C TOKEN. BRANCH IF NOT A FUNCTION. * 00062930 00071 C * 00062940 00072 C***************************************************************** 00062950 00073 SYMPT = MOD (TOKEN(PNT), 4096) + 1 00062960 00074 IF (VSUB .NE. 5) GO TO 300 00062970 00075 C***************************************************************** 00062980 00076 C * 00062990 00077 C FUNCTION NAME HAS BEEN ENCOUNTERED. IF IT IS NOT ONE OF * 00063000 00078 C THE TABLE FUNCTIONS, GET THE NEXT TOKEN. OTHERWISE, GET * 00063010 00079 C A TOKEN TWO POSITIONS AWAY AND DETERMINE WHETHER IT IS * 00063020 00080 C POINTING TO A TABLE. IF IT IS A TABLE, CHECK SUBSCRIPT. * 00063030 00081 C * 00063040 00082 C***************************************************************** 00063050 00083 FUNPT = FUNPT - 1 00063060 00084 IF(FUNPT.EQ.6.AND.STYPE.NE.5) CALL NDT14 (TMAP(PNT),526,3) 00063070 00085 IF (FUNPT .LT. 19) GO TO 100 00063080 00086 PNT = PNT + 2 00063090 00087 VSUB = TOKEN(PNT) / 4096 00063100 00088 SYMPT = MOD (TOKEN(PNT), 4096) + 1 00063110 00089 IF (TOKEN(PNT) .LT. 0 .OR. VSUB .GT. 4) GO TO 200 00063120 00090 CALL NDT41 (SYMTB(1,SYMPT)) 00063130 00091 IF (XRFBT .NE. 0) CALL NDT58 (SYMPT) 00063140 00092 IF (VTYPE .NE. 1) GO TO 200 00063150 00093 IF (VSUB .NE. 0) CALL NDT14 (TMAP(PNT), 530, 1) 00063160 00094 PNT = PNT + 1 00063170 00095 IF (TOKEN(PNT) .NE. 28681) GO TO 200 00063180 00096 GO TO 100 00063190 00097 200 CALL NDT14 (TMAP(PNT), 521, 3) 00063200 00098 GO TO 100 00063210 00099 C***************************************************************** 00063220 00100 C * 00063230 00101 C PROCESS ORDINARY VARIABLE. IF A TABLE NAME IS FOUND, IT * 00063240 00102 C HAS NOT OCCURRED IN THE CORRECT POSITION. RVTYP KEEPS * 00063250 00103 C VTYPE WITHIN SUBCK ARRAY BOUNDS. THE VARIABLE MUST BE * 00063260 00104 C DEFINED, IT MUST BE ALLOWED IN THE PARTICULAR TYPE OF * 00063270 00105 C EQUATION, AND IT MUST BE SUBSCRIPTED CORRECTLY. * 00063280 00106 C * 00063290 00107 C***************************************************************** 00063300 00108 300 IF(SYMPT .EQ. DVSYM .AND. STYPE .LE. 8) 00063310 00109 1 CALL NDT14 (TMAP(PNT), 505, 3) 00063320 00110 CALL NDT41 (SYMTB(1,SYMPT)) 00063330 00111 IF (XRFBT .NE. 0) CALL NDT58 (SYMPT) 00063340 00112 IF (VTYPE .EQ. 1) GO TO 550 00063350 NDT48 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 RVTYP = VTYPE - 1 00063360 00114 IF (DEFBT .EQ. 0) GO TO 400 00063370 00115 350 CHECK = SUBCK(RSTYP,RVTYP) 00063380 00116 IF (CHECK .EQ. 100) GO TO 500 00063390 00117 IF (VSUB .NE. CHECK) CALL NDT14 00063400 00118 1(TMAP(PNT), 530 + CHECK, 1) 00063410 00119 GO TO 100 00063420 00120 400 IF(INTBT .EQ. 0) GO TO 450 00063430 00121 RVTYP = 1 00063440 00122 GO TO 350 00063450 00123 450 CALL NDT14 (TMAP(PNT), 516, 3) 00063460 00124 GO TO 100 00063470 00125 500 CALL NDT14 (TMAP(PNT), 570 + RVTYP, 3) 00063480 00126 GO TO 100 00063490 00127 550 CALL NDT14 (TMAP(PNT), 522, 3) 00063500 00128 GO TO 100 00063510 00129 600 RETURN 00063520 00130 END 00063540 EQUIVALENCED VARIABLES ( SYMPT 1 FUNPT 1 ) COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 EQPOS +1724 STYPE +522 VTYPE +337 DEFBT +343 TOKPT +524 OPTNS +12 INTBT +345 SUBPROGRAMS CALLED MOD. NDT58 NDT14 NDT41 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] SUBCK 2 FUNPT 1 XRFBT 72 RSTYP 73 CHECK 74 SYMPT 1 PNT 75 RVTYP 76 VSUB 77 DVSYM 100 TEMPORARIES .A0016 101 .Q0000 102 .Q0001 103 CARD1 12# 18# CARD2 12# 18# CHECK 16# 115# 116 117 CRSET 12# 18# DEF 12# 18# DEFBT 16# 21# 114 DVSYM 16# 54# 108 EQCHN 12# 18# EQPOS 16# 21# 49 51 ERROR 12# 18# FCTN 12# 18# FUNPT 16# 21# 83 83# 84 85 INTBT 16# 21# 120 LITBL 11# 18# MOD. 50 54 73 88 NDT14 84 93 97 108 117 123 125 127 NDT41 90 110 NDT48 10# NDT58 91 111 OBJCD 12# 18# OPER 12# 18# OPTNS 16# 21# 50 PNT 16# 51# 63 63# 64 65 66 73 84 86 86# 87 88 89 93 94 94# 95 97 108 117 123 125 127 PTRS 12# 18# 21# RMAX 11# 18# RMIN 11# 18# RSTYP 16# 52# 53# 115 RVTYP 16# 113# 115 121# 125 STYPE 16# 21# 52 53 84 108 SUBCK 16# 37# 115 SUBSC 12# 18# SYM 12# 18# 21# SYMPT 16# 21# 73# 88# 90 91 91# 108 110 111 111# SYMTB 12# 18# 90 90# 110 110# TITLE 12# 18# TMAP 12# 18# 21# 84 84# 93 93# 97 97# 108 108# 117 117# 123 123# 125 125# 127 127# TOKEN 12# 18# 21# 54 65 66 73 87 88 89 95 TOKPT 16# 21# 64 TYPCT 12# 18# VSUB 16# 65# 66 74 87# 89 93 117 VTYPE 16# 21# 92 112 113 XREF 12# 18# XRFBT 16# 50# 91 111 100P 63# 66 85 96 98 119 124 126 128 200P 89 92 95 97# 300P 74 108# 350P 115# 122 400P 114 120# 450P 120 123# 500P 116 125# 550P 112 127# 600P 49 64 129# NDT48 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00063550 00002 C * 00063560 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00063570 00004 C PROGRAM AUTHOR - THOMAS L EVERMAN JR * 00063580 00005 C * 00063590 00006 C THIS PROGRAM INSURES THAT ONLY A NUMERIC LITERAL * 00063600 00007 C OCCURS ON THE RIGHT SIDE OF AN EQUAL SIGN. * 00063610 00008 C * 00063620 00009 C***************************************************************** 00063630 00010 SUBROUTINE NDT49 00063640 00011 REAL*8 RMIN,RMAX,LITBL(8192) 00063650 00012 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00063660 00013 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00063670 00014 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00063680 00015 3SYMTB(5,4096) 00063690 00016 INTEGER EQPOS,TOKPT 00063700 00017 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00063710 00018 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00063720 00019 2SYMTB,LITBL 00063730 00020 EQUIVALENCE (EQPOS,TMAP(3)),(TOKPT,TOKEN(3)) 00063740 00021 C***************************************************************** 00063750 00022 C * 00063760 00023 C THE TOKEN AFTER THE EQUAL SIGN MAY ONLY BE A NUMERIC * 00063770 00024 C LITERAL. FIRST CHECK TO SEE THAT THERE IS AN EQUAL SIGN. * 00063780 00025 C THEN MAKE SURE THAT THERE IS ONE AND ONLY ONE TOKEN * 00063790 00026 C FOLLOWING THE EQUAL SIGN. IF THERE IS ONLY SUCH A SINGLE * 00063800 00027 C TOKEN, MAKE SURE THAT IT REPRESENTS A NUMERIC LITERAL. * 00063810 00028 C * 00063820 00029 C***************************************************************** 00063830 00030 IF (EQPOS .EQ. 0) GO TO 200 00063840 00031 IF (TOKPT .NE. EQPOS + 1) GO TO 100 00063850 00032 IF (TOKEN(TOKPT) .LT. 0) GO TO 200 00063860 00033 100 CALL NDT14 (TMAP(TOKPT), 806, 3) 00063870 00034 200 RETURN 00063880 00035 END 00063900 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 EQPOS +1724 TOKPT +524 SUBPROGRAMS CALLED NDT14 NDT49 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] TEMPORARIES .A0016 1 .Q0000 2 CARD1 12# 17# CARD2 12# 17# CRSET 12# 17# DEF 12# 17# EQCHN 12# 17# EQPOS 16# 20# 30 31 ERROR 12# 17# FCTN 12# 17# LITBL 11# 17# NDT14 33 NDT49 10# OBJCD 12# 17# OPER 12# 17# PTRS 12# 17# RMAX 11# 17# RMIN 11# 17# SUBSC 12# 17# SYM 12# 17# SYMTB 12# 17# TITLE 12# 17# TMAP 12# 17# 20# 33 33# TOKEN 12# 17# 20# 32 TOKPT 16# 20# 31 32 33 TYPCT 12# 17# XREF 12# 17# 100P 31 33# 200P 30 32 34# NDT49 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00063910 00002 C * 00063920 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00063930 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY * 00063940 00005 C * 00063950 00006 C***************************************************************** 00063960 00007 SUBROUTINE NDT50 00063970 00008 C***************************************************************** 00063980 00009 C * 00063990 00010 C * 00064000 00011 C DOCUMENTER * 00064010 00012 C * 00064020 00013 C * 00064030 00014 C THIS PROGRAM, CALLED BY THE SOURCE LISTING PROGRAM, * 00064040 00015 C HANDLES THE LISTING OF THE DEFINTIONS OF VARIABLES, * 00064050 00016 C WHEN THE DOCUMENT CONTROL CARD OPTION IS IN EFFECT. * 00064060 00017 C * 00064070 00018 C***************************************************************** 00064080 00019 REAL*8 RMIN,RMAX,LITBL(8192) 00064090 00020 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00064100 00021 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00064110 00022 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00064120 00023 3SYMTB(5,4096) 00064130 00024 INTEGER TOKPT,RECNO,PRNTR,DISK,PNTR,TOKE 00064140 00025 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00064150 00026 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00064160 00027 2SYMTB,LITBL 00064170 00028 EQUIVALENCE (TOKPT,TOKEN(3)),(RECNO,SYM(15)),(DISK,PTRS(3)), 00064180 00029 1(PRNTR,PTRS(2)) 00064190 00030 C***************************************************************** 00064200 00031 C * 00064210 00032 C GO THROUGH THE TOKEN ARRAY, TOKEN BY TOKEN, FIRST CHECKING * 00064220 00033 C FOR A VARIABLE. * 00064230 00034 C * 00064240 00035 C***************************************************************** 00064250 00036 CALL NDT57(1) 00064260 00037 WRITE (PRNTR,300) 00064270 00038 DO 100 TOKE = 4, TOKPT 00064280 00039 IF (TOKEN(TOKE) .LE. 0 .OR. TOKEN(TOKE) .GT. 20479) 00064290 00040 1 GO TO 100 00064300 00041 C***************************************************************** 00064310 00042 C * 00064320 00043 C IF IT IS A VARIABLE, UNPACK ITS SYMBOL TABLE ENTRY. * 00064330 00044 C CHECK FOR THE EXISTENCE OF A RECORD. * 00064340 00045 C * 00064350 00046 C***************************************************************** 00064360 00047 PNTR = MOD(TOKEN(TOKE),4096) + 1 00064370 00048 CALL NDT41(SYMTB(1,PNTR)) 00064380 00049 IF (RECNO .EQ. 0) GO TO 100 00064390 00050 C***************************************************************** 00064400 00051 C * 00064410 00052 C READ IN THE DEF ARRAY FROM DISK, AND THEN WRITE IT OUT * 00064420 00053 C TO THE PRINTER. * 00064430 00054 C * 00064440 00055 C***************************************************************** 00064450 00056 READ (DISK'RECNO+6) DEF 00064460 NDT50 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 CALL NDT57(1) 00064470 00058 WRITE (PRNTR,200) DEF 00064480 00059 C***************************************************************** 00064490 00060 C * 00064500 00061 C LOOK AT NEXT TOKEN. * 00064510 00062 C * 00064520 00063 C***************************************************************** 00064530 00064 100 CONTINUE 00064540 00065 CALL NDT57(1) 00064550 00066 WRITE (PRNTR,300) 00064560 00067 200 FORMAT (15X,80A1) 00064570 00068 300 FORMAT(1X) 00064580 00069 RETURN 00064590 00070 END 00064610 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 TOKPT +524 RECNO +347 DISK +6 PRNTR +5 SUBPROGRAMS CALLED MOD. NDT57 NDT41 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] TOKE 1 PNTR 2 .S0000 3 TEMPORARIES .A0016 7 .Q0000 10 CARD1 20# 25# CARD2 20# 25# CRSET 20# 25# DEF 20# 25# 56# 58 DISK 24# 28# 56 EQCHN 20# 25# ERROR 20# 25# FCTN 20# 25# LITBL 19# 25# MOD. 47 NDT41 48 NDT50 7# NDT57 36 57 65 OBJCD 20# 25# OPER 20# 25# PNTR 24# 47# 48 PRNTR 24# 28# 37 58 66 PTRS 20# 25# 28# RECNO 24# 28# 49 56 RMAX 19# 25# RMIN 19# 25# SUBSC 20# 25# SYM 20# 25# 28# SYMTB 20# 25# 48 48# TITLE 20# 25# TMAP 20# 25# TOKE 24# 38# 39 47 TOKEN 20# 25# 28# 39 47 TOKPT 24# 28# 38 TYPCT 20# 25# XREF 20# 25# 100P 38 39 49 64# 200P 58 67# 300P 37 66 68# NDT50 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00064620 00002 C * 00064630 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00064640 00004 C PROGRAM AUTHOR - THOMAS L EVERMAN JR * 00064650 00005 C * 00064660 00006 C THIS PROGRAM CHECKS THE FORMAT OF LEVEL EQUATIONS. * 00064670 00007 C * 00064680 00008 C***************************************************************** 00064690 00009 SUBROUTINE NDT51 00064700 00010 REAL*8 RMIN,RMAX,LITBL(8192) 00064710 00011 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00064720 00012 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00064730 00013 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00064740 00014 3SYMTB(5,4096) 00064750 00015 INTEGER EQPOS,TOKPT,PNT,PNEST,FNUM,OPTYP,FNOCC,EQNCD,TKNTP 00064760 00016 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00064770 00017 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00064780 00018 2SYMTB,LITBL 00064790 00019 EQUIVALENCE (TOKPT,TOKEN(3)),(FNUM,OPTYP), 00064800 00020 1(EQNCD,ERROR(1)),(EQPOS,TMAP(3)) 00064810 00021 C***************************************************************** 00064820 00022 C * 00064830 00023 C THE LEVEL EQUATION MUST CONFORM TO THE FORMAT: * 00064840 00024 C LEVEL=INTGRL(SUM OF RATES) * 00064850 00025 C CHECK FOR OTHER CRITICAL ERRORS BEFORE CONTINUING. * 00064860 00026 C * 00064870 00027 C***************************************************************** 00064880 00028 IF (EQNCD .GE. 3) GO TO 700 00064890 00029 C***************************************************************** 00064900 00030 C * 00064910 00031 C INITIALIZE PNT, THE POINTER TO THE NEXT TOKEN. PNEST * 00064920 00032 C CHECKS PAREN NESTING TO DETERMINE END OF TOKEN STRING. * 00064930 00033 C FNOCC DENOTES THAT AN INTGRL FUNCTION HAS OCCURRED. * 00064940 00034 C * 00064950 00035 C***************************************************************** 00064960 00036 PNT = EQPOS 00064970 00037 PNEST = 0 00064980 00038 FNOCC = 0 00064990 00039 C***************************************************************** 00065000 00040 C * 00065010 00041 C INCREMENT THE TOKEN POINTER TO THE NEXT TOKEN. SEPARATE * 00065020 00042 C THE TOKEN TYPE AND ITS ASSOCIATED POINTER. CHECK FOR FUNCTI* 00065030 00043 C * 00065040 00044 C***************************************************************** 00065050 00045 100 PNT = PNT + 1 00065060 00046 IF (PNT .GT. TOKPT) GO TO 600 00065070 00047 TKNTP = TOKEN(PNT) / 4096 00065080 00048 FNUM = MOD (TOKEN(PNT), 4096) 00065090 00049 IF (TKNTP .NE. 5) GO TO 250 00065100 00050 C***************************************************************** 00065110 00051 C * 00065120 00052 C A FUNCTION HAS BEEN FOUND IN THE TOKEN STRING. CHECK TO * 00065130 00053 C SEE IF IT IS AN INTEGRATION FUNCTION. IF IT IS INTGRL, * 00065140 00054 C MAKE SURE IT FOLLOWS DIRECTLY AFTER EQUAL SIGN. IF NOT * 00065150 00055 C INTGRL, FLAG AS AN INVALID FUNCTION. * 00065160 00056 C * 00065170 NDT51 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C***************************************************************** 00065180 00058 IF (FNUM .NE. 6) GO TO 200 00065190 00059 IF (PNT .NE. EQPOS + 1) CALL NDT14 (TMAP(PNT), 903, 3) 00065200 00060 FNOCC = 1 00065210 00061 GO TO 100 00065220 00062 200 CALL NDT14 (TMAP(PNT), 905, 3) 00065230 00063 GO TO 100 00065240 00064 C***************************************************************** 00065250 00065 C * 00065260 00066 C FLAG ANY NUMERIC LITERALS WHICH OCCUR. * 00065270 00067 C * 00065280 00068 C***************************************************************** 00065290 00069 250 IF (TOKEN(PNT) .GE. 0) GO TO 300 00065300 00070 CALL NDT14 (TMAP(PNT), 904, 3) 00065310 00071 GO TO 100 00065320 00072 C***************************************************************** 00065330 00073 C * 00065340 00074 C IF TOKEN INDICATES A VARIABLE, OBTAIN NEXT TOKEN. * 00065350 00075 C OTHERWISE, AN OPERATOR TOKEN IS PRESENT. IF INTGRL * 00065360 00076 C HAS NOT OCCURRED, TAKE NO ACTION. WITHIN AN INTGRL * 00065370 00077 C THE ONLY VALID OPERATORS ARE '+' AND '-'. PARENS * 00065380 00078 C ARE PERMITTED FOR GROUPING AND ARE USED TO DETERMINE * 00065390 00079 C THE END OF THE FUNCTION GROUP. * 00065400 00080 C * 00065410 00081 C***************************************************************** 00065420 00082 300 IF (TKNTP .LT. 7) GO TO 100 00065430 00083 IF (FNOCC .EQ. 0) GO TO 100 00065440 00084 GO TO (100,100,100,350,350,100,400,500,100,350), OPTYP 00065450 00085 C***************************************************************** 00065460 00086 C * 00065470 00087 C FLAG '*', '/', '**' AS INVALID OPERATIONS. * 00065480 00088 C * 00065490 00089 C***************************************************************** 00065500 00090 350 CALL NDT14 (TMAP(PNT), 901, 3) 00065510 00091 GO TO 100 00065520 00092 C***************************************************************** 00065530 00093 C * 00065540 00094 C PARENS HAVE OCCURRED. INCREMENT OR DECREMENT PNEST. * 00065550 00095 C * 00065560 00096 C***************************************************************** 00065570 00097 400 PNEST = PNEST + 1 00065580 00098 GO TO 100 00065590 00099 500 PNEST = PNEST - 1 00065600 00100 IF (PNEST .LE. 0) GO TO 550 00065610 00101 GO TO 100 00065620 00102 C***************************************************************** 00065630 00103 C * 00065640 00104 C CHECK FOR ADDITIONAL TOKENS AFTER END OF FUNCTION GROUP. * 00065650 00105 C THEN MAKE SURE AN INTEGRATION FUNCTION HAS OCCURRED. * 00065660 00106 C * 00065670 00107 C***************************************************************** 00065680 00108 550 IF (PNT .LT. TOKPT) CALL NDT14 (TMAP(PNT + 1), 902, 3) 00065690 00109 600 IF (FNOCC .EQ. 0) CALL NDT14 (TMAP(EQPOS + 1), 903, 3) 00065700 00110 700 RETURN 00065710 00111 END 00065730 NDT51 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 EQUIVALENCED VARIABLES ( FNUM 1 OPTYP 1 ) COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 TOKPT +524 EQNCD +1102 EQPOS +1724 SUBPROGRAMS CALLED MOD. NDT14 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] OPTYP 1 TKNTP 2 FNUM 1 PNT 3 FNOCC 4 PNEST 5 TEMPORARIES .A0016 6 .Q0000 7 CARD1 11# 16# CARD2 11# 16# CRSET 11# 16# DEF 11# 16# EQCHN 11# 16# EQNCD 15# 19# 28 EQPOS 15# 19# 36 59 109 ERROR 11# 16# 19# FCTN 11# 16# FNOCC 15# 38# 60# 83 109 FNUM 15# 19# 48# 58 LITBL 10# 16# MOD. 48 NDT14 59 62 70 90 108 109 NDT51 9# OBJCD 11# 16# OPER 11# 16# OPTYP 15# 19# 84 PNEST 15# 37# 97 97# 99 99# 100 PNT 15# 36# 45 45# 46 47 48 59 62 69 70 90 108 PTRS 11# 16# RMAX 10# 16# RMIN 10# 16# SUBSC 11# 16# SYM 11# 16# SYMTB 11# 16# TITLE 11# 16# TKNTP 15# 47# 49 82 TMAP 11# 16# 19# 59 59# 62 62# 70 70# 90 90# 108 108# 109 109# TOKEN 11# 16# 19# 47 48 69 TOKPT 15# 19# 46 108 TYPCT 11# 16# XREF 11# 16# 100P 45# 61 63 71 82 83 84 91 98 101 200P 58 62# 250P 49 69# 300P 69 82# 350P 84 90# 400P 84 97# 500P 84 99# 550P 100 108# 600P 46 109# 700P 28 110# NDT51 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00065740 00002 C * 00065750 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00065760 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY * 00065770 00005 C * 00065780 00006 C***************************************************************** 00065790 00007 SUBROUTINE NDT52 00065800 00008 C***************************************************************** 00065810 00009 C * 00065820 00010 C OUTPUT CONTEXT ANALYZER * 00065830 00011 C * 00065840 00012 C * 00065850 00013 C THIS PROGRAM CHECKS AN OUTPUT REQUEST FOR CONTEXT ERRORS. * 00065860 00014 C * 00065870 00015 C***************************************************************** 00065880 00016 REAL*8 RMIN,RMAX,LITBL(8192) 00065890 00017 REAL*8 LOW(11),HIGH(11) 00065900 00018 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00065910 00019 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00065920 00020 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00065930 00021 3SYMTB(5,4096) 00065940 00022 INTEGER OUTPT(240),VARCT,TYPE,RUNNO,FLAG(11),IVPLT, 00065950 00023 1CHAR(10),RUN(11),CFLAG,OUT1(80),OUT2(80),OUT3(80) 00065960 00024 INTEGER RUNCT,PNTR,VTYPE,NOTBT,XCHAR,NOTE(40) 00065970 00025 INTEGER DISK,OCBPT,PGMCT,TOKPT,VNUM(11) 00065980 00026 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00065990 00027 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00066000 00028 2SYMTB,LITBL 00066010 00029 EQUIVALENCE (OUTPT(1),DEF(1),OUT1(1),VARCT),(OUTPT(2),TYPE), 00066020 00030 1(OUTPT(3),RUNNO),(OUTPT(103),LOW(1)),(OUTPT(125),HIGH(1)), 00066030 00031 2(OUTPT(147),FLAG(1)),(OUTPT(179),RUN(1)),(OUTPT(200),CFLAG), 00066040 00032 3(OUTPT(190),CHAR(1)),(VNUM(1),OUTPT(92)),(IVPLT,OUTPT(158)), 00066050 00033 4(OUT2(1),XREF(1)),(OUT3(1),TMAP(1)) 00066060 00034 EQUIVALENCE (RUNCT,PTRS(14)),(VTYPE,SYM(7)), 00066070 00035 1(NOTBT,OBJCD(1)),(NOTE(1),OBJCD(2)),(DISK,PTRS(3)), 00066080 00036 2(PGMCT,PTRS(22)),(TOKPT,TOKEN(3)),(OCBPT,PTRS(43)) 00066090 00037 C***************************************************************** 00066100 00038 C * 00066110 00039 C FIRST, THE OUTPUT BUFFER MUST BE READ IN FROM DISK. DUE * 00066120 00040 C TO THE EQUIVALENCE STRUCTURE, THE BUFFER IS READ INTO * 00066130 00041 C DEF, XREF, AND TMAP. * 00066140 00042 C * 00066150 00043 C***************************************************************** 00066160 00044 READ (DISK'PGMCT+6) OUT1 00066170 00045 READ (DISK'PGMCT+7) OUT2 00066180 00046 READ (DISK'PGMCT+8) OUT3 00066190 00047 C***************************************************************** 00066200 00048 C * 00066210 00049 C CHECK FOR AN OUTPUT REQUEST WITH A RUN NUMBER GREATER * 00066220 00050 C THAN THE NUMBER OF RUNS IN THE MODEL. * 00066230 00051 C * 00066240 00052 C***************************************************************** 00066250 00053 IF (RUNNO .LE. RUNCT) GO TO 100 00066260 00054 CALL NDT14(0,728,3) 00066270 00055 GO TO 300 00066280 00056 C***************************************************************** 00066290 NDT52 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C * 00066300 00058 C CALL THE AUTOPLOT ROUTINE IF THE AUTOPLOT OPTION IS * 00066310 00059 C REQUESTED. * 00066320 00060 C * 00066330 00061 C***************************************************************** 00066340 00062 100 IF (RUNNO .EQ. 0) CALL NDT53 00066350 00063 C***************************************************************** 00066360 00064 C * 00066370 00065 C CALL THE VARIABLE ALIGNMENT ROUTINE TO PUT IN RUN * 00066380 00066 C NUMBERS IF THEY'RE NEEDED, AND TO CENTER THE VARIABLE * 00066390 00067 C NAMES FOR A PRINT. * 00066400 00068 C * 00066410 00069 C***************************************************************** 00066420 00070 CALL NDT54 00066430 00071 C***************************************************************** 00066440 00072 C * 00066450 00073 C CHECK FOR AN ATTEMPT TO USE A CONSTANT AS THE * 00066460 00074 C INDEPENDENT VARIABLE. THE INFORMATION MUST BE UNPACKED * 00066470 00075 C FROM THE SYMBOL TABLE. * 00066480 00076 C * 00066490 00077 C***************************************************************** 00066500 00078 IF (IVPLT .EQ. 0) GO TO 150 00066510 00079 PNTR = MOD(TOKEN(TOKPT),4096) + 1 00066520 00080 CALL NDT41(SYMTB(1,PNTR)) 00066530 00081 IF (VTYPE .EQ. 2) CALL NDT14(0,727,3) 00066540 00082 C***************************************************************** 00066550 00083 C * 00066560 00084 C IF THERE IS SUBTITLE INFORMATION OUT THERE, PULL IT * 00066570 00085 C IN, AND SET CFLAG. * 00066580 00086 C * 00066590 00087 C***************************************************************** 00066600 00088 150 IF (NOTBT .EQ. 0) GO TO 300 00066610 00089 CFLAG = 1 00066620 00090 DO 200 XCHAR = 1, 40 00066630 00091 200 OUTPT(200 + XCHAR) = NOTE(XCHAR) 00066640 00092 C***************************************************************** 00066650 00093 C * 00066660 00094 C WRITE THE OUTPT ARRAY TO DISK, THEN RETURN. * 00066670 00095 C * 00066680 00096 C***************************************************************** 00066690 00097 300 WRITE (DISK'OCBPT+1) OUT1 00066700 00098 WRITE (DISK'OCBPT+2) OUT2 00066710 00099 WRITE (DISK'OCBPT+3) OUT3 00066720 00100 OCBPT = OCBPT + 3 00066730 00101 RETURN 00066740 00102 END 00066760 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 NDT52 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 OUTPT +1462 OUT1 +1462 VARCT +1462 OUT2 +1602 OUT3 +1722 RUNCT +21 VTYPE +337 NOTBT +1222 NOTE +1223 DISK +6 PGMCT +31 TOKPT +524 OCBPT +56 TYPE +1463 RUNNO +1464 LOW +1630 HIGH +1656 FLAG +1704 RUN +1744 CFLAG +1771 CHAR +1757 VNUM +1615 IVPLT +1717 SUBPROGRAMS CALLED MOD. NDT54 NDT53 NDT14 NDT41 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] XCHAR 1 PNTR 2 .S0000 3 TEMPORARIES .A0016 4 .Q0000 5 CARD1 18# 26# CARD2 18# 26# CFLAG 22# 29# 89# CHAR 22# 29# CRSET 18# 26# DEF 18# 26# 29# DISK 25# 34# 44 45 46 97 98 99 EQCHN 18# 26# ERROR 18# 26# FCTN 18# 26# FLAG 22# 29# HIGH 17# 29# IVPLT 22# 29# 78 LITBL 16# 26# LOW 17# 29# MOD. 79 NDT14 54 81 NDT41 80 NDT52 7# NDT53 62 NDT54 70 NOTBT 24# 34# 88 NOTE 24# 34# 91 OBJCD 18# 26# 34# OCBPT 25# 34# 97 98 99 100 100# OPER 18# 26# OUT1 22# 29# 44# 97 OUT2 22# 29# 45# 98 OUT3 22# 29# 46# 99 OUTPT 22# 29# 91# PGMCT 25# 34# 44 45 46 PNTR 24# 79# 80 PTRS 18# 26# 34# RMAX 16# 26# RMIN 16# 26# RUN 22# 29# RUNCT 24# 34# 53 RUNNO 22# 29# 53 62 SUBSC 18# 26# SYM 18# 26# 34# SYMTB 18# 26# 80 80# TITLE 18# 26# TMAP 18# 26# 29# TOKEN 18# 26# 34# 79 TOKPT 25# 34# 79 TYPCT 18# 26# TYPE 22# 29# VARCT 22# 29# VNUM 25# 29# VTYPE 24# 34# 81 XCHAR 24# 90# 91 XREF 18# 26# 29# 100P 53 62# 150P 78 88# 200P 90 91# 300P 55 88 97# NDT52 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00066770 00002 C * 00066780 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00066790 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY * 00066800 00005 C * 00066810 00006 C***************************************************************** 00066820 00007 SUBROUTINE NDT53 00066830 00008 C***************************************************************** 00066840 00009 C * 00066850 00010 C AUTOPLOT PROCESSOR * 00066860 00011 C * 00066870 00012 C * 00066880 00013 C IF THE USER SPECIFIED AN OUTPUT CARD WITH A VARIABLE * 00066890 00014 C HAVING A STAR '*' AS A RUN NUMBER, "VAR.*", NDTRAN WILL * 00066900 00015 C AUTOMATICALLY EXPAND THAT STATEMENT TO OUTPUT A PLOT * 00066910 00016 C OR PRINT COMPARING THAT VARIABLE ACROSS EVERY RUN. * 00066920 00017 C * 00066930 00018 C***************************************************************** 00066940 00019 REAL*8 RMIN,RMAX,LITBL(8192) 00066950 00020 REAL*8 LOW(11),HIGH(11) 00066960 00021 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00066970 00022 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00066980 00023 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00066990 00024 3SYMTB(5,4096) 00067000 00025 INTEGER OUTPT(240),VARCT,TYPE,RUNNO,FLAG(11), 00067010 00026 1CHAR(10),RUN(11),VNUM(11),VNAM(8,11),CFLAG 00067020 00027 INTEGER RUNCT,CLNUM,XCHAR,OPTNS,VMAX 00067030 00028 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00067040 00029 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00067050 00030 2SYMTB,LITBL 00067060 00031 EQUIVALENCE (OUTPT(1),DEF(1),VARCT),(OUTPT(2),TYPE), 00067070 00032 1(OUTPT(3),RUNNO),(OUTPT(103),LOW(1)),(OUTPT(125),HIGH(1)), 00067080 00033 2(OUTPT(147),FLAG(1)),(OUTPT(179),RUN(1)),(OUTPT(200),CFLAG), 00067090 00034 3(OUTPT(190),CHAR(1)),(OUTPT(92),VNUM(1)) 00067100 00035 EQUIVALENCE (RUNCT,PTRS(14)),(OUTPT(4),VNAM(1,1)), 00067110 00036 1(OPTNS,PTRS(7)) 00067120 00037 C***************************************************************** 00067130 00038 C * 00067140 00039 C SET RUNNO TO THE NUMBER OF RUNS IN THIS MODEL. * 00067150 00040 C * 00067160 00041 C THE NARROW OPTION RESTRICTS THE NUMBER OF VARIABLES. * 00067170 00042 C * 00067180 00043 C***************************************************************** 00067190 00044 RUNNO = RUNCT 00067200 00045 VMAX = 10 - MOD(OPTNS/8,2)*(TYPE-8) 00067210 00046 IF (RUNNO .LE. VMAX) GO TO 100 00067220 00047 RUNNO = VMAX 00067230 00048 CALL NDT14(0, 726, 1) 00067240 00049 C***************************************************************** 00067250 00050 C * 00067260 00051 C CREATE A VARIABLE ENTRY IN THE OUTPT BUFFER FOR EACH * 00067270 00052 C RUN, SETTING VNAM, VNUM, RUN, AND FLAG. * 00067280 00053 C * 00067290 00054 C***************************************************************** 00067300 00055 100 VARCT = RUNNO + 1 00067310 00056 RUN(2) = 1 00067320 NDT53 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 IF (RUNNO .EQ. 1) GO TO 400 00067330 00058 DO 300 CLNUM = 2, VARCT 00067340 00059 DO 200 XCHAR = 1, 8 00067350 00060 200 VNAM(XCHAR,CLNUM) = VNAM(XCHAR,2) 00067360 00061 VNUM(CLNUM) = VNUM(2) 00067370 00062 RUN(CLNUM) = CLNUM - 1 00067380 00063 300 FLAG(CLNUM) = 23 00067390 00064 FLAG(1) = 13 00067400 00065 C***************************************************************** 00067410 00066 C * 00067420 00067 C ASSIGN THE PLOT CHARACTERS BY CALLING NDT34, AND SET * 00067430 00068 C VARCT. * 00067440 00069 C * 00067450 00070 C***************************************************************** 00067460 00071 400 CALL NDT34 00067470 00072 RETURN 00067480 00073 END 00067500 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 OUTPT +1462 VARCT +1462 RUNCT +21 OPTNS +12 TYPE +1463 RUNNO +1464 LOW +1630 HIGH +1656 FLAG +1704 RUN +1744 CFLAG +1771 CHAR +1757 VNUM +1615 VNAM +1465 SUBPROGRAMS CALLED MOD. NDT34 NDT14 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] VMAX 1 XCHAR 2 CLNUM 3 .R0000 4 .S0001 5 .S0000 6 TEMPORARIES .A0016 7 CARD1 21# 28# CARD2 21# 28# CFLAG 25# 31# CHAR 25# 31# CLNUM 27# 58# 60 61 62 63 CRSET 21# 28# DEF 21# 28# 31# EQCHN 21# 28# ERROR 21# 28# FCTN 21# 28# FLAG 25# 31# 63# 64# HIGH 20# 31# LITBL 19# 28# LOW 20# 31# MOD. 45 NDT14 48 NDT34 71 NDT53 7# OBJCD 21# 28# OPER 21# 28# OPTNS 27# 35# 45 OUTPT 25# 31# 35# PTRS 21# 28# 35# RMAX 19# 28# RMIN 19# 28# RUN 25# 31# 56# 62# RUNCT 27# 35# 44 RUNNO 25# 31# 44# 46 47# 55 57 SUBSC 21# 28# SYM 21# 28# SYMTB 21# 28# TITLE 21# 28# TMAP 21# 28# TOKEN 21# 28# TYPCT 21# 28# TYPE 25# 31# 45 VARCT 25# 31# 55# 58 VMAX 27# 45# 46 47 VNAM 25# 35# 60# 60 VNUM 25# 31# 61# 61 XCHAR 27# 59# 60 XREF 21# 28# 100P 46 55# 200P 59 60# 300P 58 63# 400P 57 71# NDT53 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00067510 00002 C * 00067520 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00067530 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY * 00067540 00005 C * 00067550 00006 C***************************************************************** 00067560 00007 SUBROUTINE NDT54 00067570 00008 C***************************************************************** 00067580 00009 C * 00067590 00010 C VARIABLE ALIGNMENT * 00067600 00011 C * 00067610 00012 C * 00067620 00013 C * 00067630 00014 C THIS PROGRAM, PART OF THE OUTPUT CONTEXT PHASE, WILL * 00067640 00015 C PREPARE THE VARIABLE NAME FIELD FOR OUTPUT. IT WILL * 00067650 00016 C INSERT THE RUN NUMBER IF THERE IS MORE THAN ONE RUN, * 00067660 00017 C AND WILL CENTER THE VARIABLES FOR A PRINT AND THE * 00067670 00018 C INDEPENDENT VARIABLE ON A PLOT. * 00067680 00019 C * 00067690 00020 C***************************************************************** 00067700 00021 REAL*8 RMIN,RMAX,LITBL(8192) 00067710 00022 REAL*8 LOW(11),HIGH(11) 00067720 00023 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00067730 00024 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00067740 00025 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00067750 00026 3SYMTB(5,4096) 00067760 00027 INTEGER OUTPT(240),VARCT,TYPE,RUNNO,FLAG(11), 00067770 00028 1CHAR(10),RUN(11),VNUM(11),VNAM(8,11),CFLAG 00067780 00029 INTEGER CLNUM,XCHAR,DOT,BLANK,CHARS,MOVES,XPOS,XPOS1 00067790 00030 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00067800 00031 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00067810 00032 2SYMTB,LITBL 00067820 00033 EQUIVALENCE (OUTPT(1),DEF(1),VARCT),(OUTPT(2),TYPE), 00067830 00034 1(OUTPT(3),RUNNO),(OUTPT(103),LOW(1)),(OUTPT(125),HIGH(1)), 00067840 00035 2(OUTPT(147),FLAG(1)),(OUTPT(179),RUN(1)),(OUTPT(200),CFLAG), 00067850 00036 3(OUTPT(190),CHAR(1)),(OUTPT(92),VNUM(1)) 00067860 00037 EQUIVALENCE (OUTPT(4),VNAM(1,1)),(DOT,OPER(1)), 00067870 00038 1(BLANK,CRSET(1)) 00067880 00039 C***************************************************************** 00067890 00040 C * 00067900 00041 C THE FIRST VARIABLE PROCESSED IS THE INDEPENDENT VARIABLE. * 00067910 00042 C * 00067920 00043 C***************************************************************** 00067930 00044 DO 800 CLNUM = 1, VARCT 00067940 00045 C***************************************************************** 00067950 00046 C * 00067960 00047 C EXTEND THE VARIABLE NAME LENGTH FROM 6 TO 8. * 00067970 00048 C * 00067980 00049 C***************************************************************** 00067990 00050 VNAM(7,CLNUM) = BLANK 00068000 00051 VNAM(8,CLNUM) = BLANK 00068010 00052 C***************************************************************** 00068020 00053 C * 00068030 00054 C LOCATE THE END OF THE VARIABLE NAME BY FINDING THE FIRST * 00068040 00055 C BLANK. * 00068050 00056 C * 00068060 NDT54 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C***************************************************************** 00068070 00058 DO 200 XCHAR = 1, 8 00068080 00059 IF (VNAM(XCHAR,CLNUM) .EQ. BLANK) GO TO 300 00068090 00060 200 CONTINUE 00068100 00061 C***************************************************************** 00068110 00062 C * 00068120 00063 C IF THERE IS MORE THAN ONE RUN, INSERT THE RUN NUMBER. * 00068130 00064 C * 00068140 00065 C***************************************************************** 00068150 00066 300 IF (RUNNO .EQ. 1 .OR. VNUM(CLNUM) .EQ. 12)GO TO 400 00068160 00067 VNAM(XCHAR,CLNUM) = DOT 00068170 00068 XPOS = RUN(CLNUM) + 30 00068180 00069 VNAM(XCHAR+1,CLNUM) = CRSET(XPOS) 00068190 00070 XCHAR = XCHAR + 2 00068200 00071 C***************************************************************** 00068210 00072 C * 00068220 00073 C IF A PRINT VARIABLE OR THE PLOT'S INDEPENDENT VARIABLE, * 00068230 00074 C CENTER THE VARIABLE NAME FIELD. * 00068240 00075 C * 00068250 00076 C***************************************************************** 00068260 00077 400 IF (TYPE .EQ. 13 .AND. CLNUM .GT. 1) GO TO 800 00068270 00078 MOVES = 4 - XCHAR/2 00068280 00079 IF (MOVES .EQ. 0) GO TO 800 00068290 00080 CHARS = XCHAR - 1 00068300 00081 DO 500 XCHAR = 1, CHARS 00068310 00082 XPOS = CHARS - XCHAR + 1 00068320 00083 XPOS1 = XPOS + MOVES 00068330 00084 500 VNAM(XPOS1,CLNUM) = VNAM(XPOS,CLNUM) 00068340 00085 DO 600 XCHAR = 1, MOVES 00068350 00086 600 VNAM(XCHAR,CLNUM) = BLANK 00068360 00087 800 CONTINUE 00068370 00088 RETURN 00068380 00089 END 00068400 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 OUTPT +1462 VARCT +1462 DOT +320 BLANK +251 TYPE +1463 RUNNO +1464 LOW +1630 HIGH +1656 FLAG +1704 RUN +1744 CFLAG +1771 CHAR +1757 VNUM +1615 VNAM +1465 SUBPROGRAMS CALLED NDT54 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] XCHAR 1 CLNUM 2 XPOS1 3 .R0000 4 XPOS 5 .S0003 6 .S0002 7 .S0001 10 .S0000 11 CHARS 12 MOVES 13 TEMPORARIES .A0016 14 BLANK 29# 37# 50 51 59 86 CARD1 23# 30# CARD2 23# 30# CFLAG 27# 33# CHAR 27# 33# CHARS 29# 80# 81 82 CLNUM 29# 44# 50 51 59 66 67 68 69 77 84 86 CRSET 23# 30# 37# 69 DEF 23# 30# 33# DOT 29# 37# 67 EQCHN 23# 30# ERROR 23# 30# FCTN 23# 30# FLAG 27# 33# HIGH 22# 33# LITBL 21# 30# LOW 22# 33# MOVES 29# 78# 79 83 85 NDT54 7# OBJCD 23# 30# OPER 23# 30# 37# OUTPT 27# 33# 37# PTRS 23# 30# RMAX 21# 30# RMIN 21# 30# RUN 27# 33# 68 RUNNO 27# 33# 66 SUBSC 23# 30# SYM 23# 30# SYMTB 23# 30# TITLE 23# 30# TMAP 23# 30# TOKEN 23# 30# TYPCT 23# 30# TYPE 27# 33# 77 VARCT 27# 33# 44 VNAM 27# 37# 50# 51# 59 67# 69# 84# 84 86# VNUM 27# 33# 66 XCHAR 29# 58# 59 67 69 70 70# 78 80 81# 82 85# 86 XPOS 29# 68# 69 82# 83 84 XPOS1 29# 83# 84 XREF 23# 30# 200P 58 60# 300P 59 66# 400P 66 77# 500P 81 84# 600P 85 86# 800P 44 77 79 87# NDT54 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00068410 00002 C * 00068420 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00068430 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY * 00068440 00005 C * 00068450 00006 C***************************************************************** 00068460 00007 SUBROUTINE NDT55 00068470 00008 C***************************************************************** 00068480 00009 C * 00068490 00010 C * 00068500 00011 C NOTE CARD PROCESSOR * 00068510 00012 C * 00068520 00013 C * 00068530 00014 C THIS PROGRAM, CALLED BY THE CONTEXT ANALYSIS ROUTINE, * 00068540 00015 C SETS UP THE NOTE INFORMATION FROM A NOTE CARD FOR * 00068550 00016 C POSSIBLE USE ON AN OUTPUT CARD AS A SUBTITLE. * 00068560 00017 C * 00068570 00018 C***************************************************************** 00068580 00019 REAL*8 RMIN,RMAX,LITBL(8192) 00068590 00020 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00068600 00021 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00068610 00022 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00068620 00023 3SYMTB(5,4096) 00068630 00024 INTEGER NOTBT,NOTE(40),BLANK,XCHAR,XCARD,XNOTE,LNOTE 00068640 00025 EQUIVALENCE (NOTBT,OBJCD(1)),(NOTE(1),OBJCD(2)), 00068650 00026 1(BLANK,CRSET(1)) 00068660 00027 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00068670 00028 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00068680 00029 2SYMTB,LITBL 00068690 00030 C***************************************************************** 00068700 00031 C * 00068710 00032 C CHECK FOR A BLANK CARD. IF IT IS, RETURN. * 00068720 00033 C * 00068730 00034 C***************************************************************** 00068740 00035 DO 100 XCHAR = 6, 72 00068750 00036 IF (CARD1(XCHAR) .NE. BLANK) GO TO 200 00068760 00037 100 CONTINUE 00068770 00038 GO TO 400 00068780 00039 C***************************************************************** 00068790 00040 C * 00068800 00041 C SET THE NOTE BIT, AND CALCULATE THE LAST POSITION TO BE * 00068810 00042 C READ ONTO THE NOTE CARD. * 00068820 00043 C * 00068830 00044 C***************************************************************** 00068840 00045 200 NOTBT = 1 00068850 00046 LNOTE = 73 - XCHAR 00068860 00047 IF (LNOTE .GT. 40) LNOTE = 40 00068870 00048 C***************************************************************** 00068880 00049 C * 00068890 00050 C PUT THE INFORMATION FROM CARD1 INTO THE NOTE ARRAY. * 00068900 00051 C * 00068910 00052 C***************************************************************** 00068920 00053 DO 300 XNOTE = 1, LNOTE 00068930 00054 XCARD = XNOTE + XCHAR - 1 00068940 00055 300 NOTE(XNOTE) = CARD1(XCARD) 00068950 00056 C***************************************************************** 00068960 NDT55 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C * 00068970 00058 C RETURN SECTION * 00068980 00059 C * 00068990 00060 C***************************************************************** 00069000 00061 400 RETURN 00069010 00062 END 00069030 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 NOTBT +1222 NOTE +1223 BLANK +251 SUBPROGRAMS CALLED SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] XCHAR 1 XCARD 2 .S0001 3 .S0000 4 XNOTE 5 LNOTE 6 .O0000 7 TEMPORARIES .A0016 10 BLANK 24# 25# 36 CARD1 20# 27# 36 55 CARD2 20# 27# CRSET 20# 25# 27# DEF 20# 27# EQCHN 20# 27# ERROR 20# 27# FCTN 20# 27# LITBL 19# 27# LNOTE 24# 46# 47 47# 53 NDT55 7# NOTBT 24# 25# 45# NOTE 24# 25# 55# OBJCD 20# 25# 27# OPER 20# 27# PTRS 20# 27# RMAX 19# 27# RMIN 19# 27# SUBSC 20# 27# SYM 20# 27# SYMTB 20# 27# TITLE 20# 27# TMAP 20# 27# TOKEN 20# 27# TYPCT 20# 27# XCARD 24# 54# 55 XCHAR 24# 35# 36 46 54 XNOTE 24# 53# 54 55 XREF 20# 27# 100P 35 37# 200P 36 45# 300P 53 55# 400P 38 61# NDT55 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00069040 00002 C * 00069050 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00069060 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY * 00069070 00005 C * 00069080 00006 C***************************************************************** 00069090 00007 SUBROUTINE NDT56 00069100 00008 C***************************************************************** 00069110 00009 C * 00069120 00010 C * 00069130 00011 C SOURCE/DIAGNOSTIC LISTINGS * 00069140 00012 C * 00069150 00013 C THIS PROGRAM LISTS A SOURCE STATEMENT AND ANY ERROR * 00069160 00014 C MESSAGES FOR IT. * 00069170 00015 C * 00069180 00016 C***************************************************************** 00069190 00017 REAL*8 RMIN,RMAX,LITBL(8192) 00069200 00018 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00069210 00019 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00069220 00020 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00069230 00021 3SYMTB(5,4096) 00069240 00022 INTEGER TLIMT,OPTNS,ERRPT,PRNTR,CRSMT,CBIT,BLANK,PLUS, 00069250 00023 1STYPE,EXCHR,LENTH,STMT(4),LINE1,LINE2,XERR,XCARD,XCHAR 00069260 00024 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00069270 00025 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00069280 00026 2SYMTB,LITBL 00069290 00027 EQUIVALENCE (TLIMT,PTRS(33)),(OPTNS,PTRS(7)), 00069300 00028 1(ERRPT,ERROR(2)),(PRNTR,PTRS(2)),(CRSMT,TMAP(1)), 00069310 00029 2(CBIT,TOKEN(2)),(BLANK,CRSET(1)),(STYPE,TOKEN(1)), 00069320 00030 3(PLUS,OPER(2)),(EXCHR,PTRS(39)) 00069330 00031 C***************************************************************** 00069340 00032 C * 00069350 00033 C THE SOURCE WILL NOT BE LISTED UNLESS THE SOURCE OPTION * 00069360 00034 C IS IN EFFECT OR THERE IS AN ERROR ON THE CURRENT CARD. * 00069370 00035 C * 00069380 00036 C***************************************************************** 00069390 00037 IF (MOD(OPTNS/1024,2) .EQ. 1 .AND. ERRPT .EQ. 2) GO TO 600 00069400 00038 C***************************************************************** 00069410 00039 C * 00069420 00040 C COMPUTE THE LENGTH OF THE OUTPUT LINE. (THIS INHIBITS * 00069430 00041 C THE PRINTING OF THE LINE NUMBERS FOR NARROW OUTPUT.) * 00069440 00042 C * 00069450 00043 C CALLING NDT45 SETS UP THE CURRENT STATEMENT NUMBER * 00069460 00044 C TO BE OUTPUTTED. * 00069470 00045 C * 00069480 00046 C***************************************************************** 00069490 00047 LENTH = TLIMT 00069500 00048 IF (LENTH .GT. 80) LENTH = 80 00069510 00049 CALL NDT45(CRSMT,STMT,1) 00069520 00050 C***************************************************************** 00069530 00051 C * 00069540 00052 C CALCULATE THE NUMBER OF LINES OF OUTPUT BY CHECKING FOR * 00069550 00053 C ERRORS ON THIS CARD AND ITS CONTINUATION. * 00069560 00054 C * 00069570 00055 C***************************************************************** 00069580 00056 LINE1 = 1 00069590 NDT56 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 LINE2 = 1 00069600 00058 IF (ERRPT .EQ. 2) GO TO 300 00069610 00059 DO 200 XERR = 3, ERRPT, 2 00069620 00060 IF (MOD(ERROR(XERR),2) .EQ. 0) GO TO 100 00069630 00061 LINE2 = 2 00069640 00062 GO TO 200 00069650 00063 100 LINE1 = 2 00069660 00064 200 CONTINUE 00069670 00065 C***************************************************************** 00069680 00066 C * 00069690 00067 C WRITE OUT THE SOURCE STATEMENT, FIRST CHECKING FOR THE * 00069700 00068 C END OF PAGE. * 00069710 00069 C * 00069720 00070 C***************************************************************** 00069730 00071 300 CALL NDT57(LINE1) 00069740 00072 WRITE (PRNTR,400) STMT,EXCHR,(CARD1(XCHAR),XCHAR=1,LENTH) 00069750 00073 400 FORMAT (5X,5A1,1X,80A1) 00069760 00074 C***************************************************************** 00069770 00075 C * 00069780 00076 C IF THERE ARE ANY ERRORS ON THE FIRST CARD, CALL NDT60 * 00069790 00077 C TO PRINT OUT THE ERROR MESSAGES. * 00069800 00078 C * 00069810 00079 C***************************************************************** 00069820 00080 IF (LINE1 .EQ. 2) CALL NDT60(0) 00069830 00081 C***************************************************************** 00069840 00082 C * 00069850 00083 C PRINT OUT THE CONTINUATION CARD IF THERE IS ONE. * 00069860 00084 C * 00069870 00085 C***************************************************************** 00069880 00086 IF (CBIT .EQ. 0) GO TO 600 00069890 00087 CALL NDT57(LINE2) 00069900 00088 WRITE (PRNTR,500) EXCHR,(CARD2(XCHAR),XCHAR=1,LENTH) 00069910 00089 500 FORMAT(9X,A1,1X,80A1) 00069920 00090 C***************************************************************** 00069930 00091 C * 00069940 00092 C IF THERE ARE ERRORS ON THE CONTINUATION CARD, PRINT * 00069950 00093 C THEM OUT BY CALLING NDT60. * 00069960 00094 C * 00069970 00095 C***************************************************************** 00069980 00096 IF (LINE2 .EQ. 2) CALL NDT60(1) 00069990 00097 C***************************************************************** 00070000 00098 C * 00070010 00099 C EXCHR IS THE EXPANSION CHARACTER. IT IS INITIALIZED * 00070020 00100 C TO BLANK. DURING A MACRO EXPANSION, IT IS A PLUS SIGN. * 00070030 00101 C * 00070040 00102 C***************************************************************** 00070050 00103 600 IF (STYPE .EQ. 17) EXCHR = PLUS 00070060 00104 IF (STYPE .EQ. 16) EXCHR = BLANK 00070070 00105 RETURN 00070080 00106 END 00070100 EQUIVALENCED VARIABLES NDT56 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 TLIMT +44 OPTNS +12 ERRPT +1103 PRNTR +5 CRSMT +1722 CBIT +523 BLANK +251 STYPE +522 PLUS +321 EXCHR +52 SUBPROGRAMS CALLED MOD. NDT45 NDT57 NDT60 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] XCHAR 1 %XCARD LINE2 2 XERR 3 LINE1 4 LENTH 5 .S0000 6 STMT 7 .O0000 13 TEMPORARIES .A0016 23 .Q0000 24 BLANK 22# 27# 104 CARD1 18# 24# 72 CARD2 18# 24# 88 CBIT 22# 27# 86 CRSET 18# 24# 27# CRSMT 22# 27# 49 49# DEF 18# 24# EQCHN 18# 24# ERROR 18# 24# 27# 60 ERRPT 22# 27# 37 58 59 EXCHR 22# 27# 72 88 103# 104# FCTN 18# 24# LENTH 22# 47# 48 48# 72 88 LINE1 22# 56# 63# 71 71# 80 LINE2 22# 57# 61# 87 87# 96 LITBL 17# 24# MOD. 37 60 NDT45 49 NDT56 7# NDT57 71 87 NDT60 80 96 OBJCD 18# 24# OPER 18# 24# 27# OPTNS 22# 27# 37 PLUS 22# 27# 103 PRNTR 22# 27# 72 88 PTRS 18# 24# 27# RMAX 17# 24# RMIN 17# 24# STMT 22# 49 49# 72 STYPE 22# 27# 103 104 SUBSC 18# 24# SYM 18# 24# SYMTB 18# 24# TITLE 18# 24# TLIMT 22# 27# 47 TMAP 18# 24# 27# TOKEN 18# 24# 27# TYPCT 18# 24# XCARD 22# XCHAR 22# 72 72# 88 88# XERR 22# 59# 60 XREF 18# 24# 100P 60 63# 200P 59 62 64# 300P 58 71# 400P 72 73# 500P 88 89# 600P 37 86 103# NDT56 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00070110 00002 C PROGRAM AUTHOR - DANIEL A. POYDENCE 00070120 00003 C 00070130 00004 C 00070140 00005 SUBROUTINE NDT57 (LINES) 00070150 00006 C 00070160 00007 C 00070170 00008 C NDT57 MONITORS THE NUMBER OF OUTPUT LINES WRITTEN TO THE 00070180 00009 C PRINTER OR OUTPUT DEVICE AND CAUSES PAGING WHEN THE NUMBER 00070190 00010 C OF LINES THAT ARE WAITING TO BE WRITTEN WILL CAUSE PAGE 00070200 00011 C OVERFLOW. 00070210 00012 C 00070220 00013 C THE ONLY ARGUMENT IS THE NUMBER OF LINES THAT ARE WAITING 00070230 00014 C TO PRINT. 00070240 00015 C 00070250 00016 C 00070260 00017 REAL*8 RMIN,RMAX,LITBL(8192) 00070270 00018 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00070280 00019 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00070290 00020 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00070300 00021 3SYMTB(5,4096) 00070310 00022 INTEGER LINCT,LINES,LINPP,PAGCT,PRNTR,I,TLIMT,DGMSG,PGMCD 00070320 00023 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00070330 00024 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00070340 00025 2SYMTB,LITBL 00070350 00026 EQUIVALENCE (LINCT,PTRS(5)),(LINPP,PTRS(6)),(PAGCT,PTRS(4)), 00070360 00027 1(PRNTR,PTRS(2)),(TLIMT,PTRS(33)),(DGMSG,PTRS(41)),(PGMCD, 00070370 00028 2PTRS(15)) 00070380 00029 C 00070390 00030 C 00070400 00031 C IF LINCT IS NEGATIVE THEN PAGING IS FORCED. UPDATE THE NUMBER 00070410 00032 C OF LINES OF OUTPUT FOR THIS PAGE AND SKIP TO A NEW PAGE IN THE 00070420 00033 C EVENT OF PAGE OVERFLOW. IF OVERFLOW DID NOT OCCUR RETURN. 00070430 00034 C 00070440 00035 C 00070450 00036 IF(LINCT.LT.0) GO TO 100 00070460 00037 LINCT=LINCT+LINES 00070470 00038 IF(LINCT.LT.LINPP) GO TO 300 00070480 00039 C 00070490 00040 C 00070500 00041 C INCREMENT PAGCT AND PLACE IT LEFT JUSTIFIED IN THE TITLE 00070510 00042 C BUFFER, SKIP TO A NEW PAGE, PRINT OUT THE TITLE, AND 00070520 00043 C SKIP ONE LINE. 00070530 00044 C 00070540 00045 C 00070550 00046 100 LINCT=LINES+2 00070560 00047 PAGCT=PAGCT+1 00070570 00048 CALL NDT45 (PAGCT,TITLE(6),0) 00070580 00049 WRITE(PRNTR,200) (TITLE(I),I=1,TLIMT) 00070590 00050 200 FORMAT('1',120A1) 00070600 00051 WRITE(PRNTR,201) 00070610 00052 201 FORMAT(1X) 00070620 00053 C 00070630 00054 C 00070640 00055 C IF NOSOURCE WAS SPECIFIED AND DIAGNOSTICS HAVE OCCURRED THEN 00070650 00056 C THE DIAGNOSTIC HEADER SHOULD BE PRINTED AT THE TOP OF THE 00070660 NDT57 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C FIRST PAGE OF MESSAGES. 00070670 00058 C 00070680 00059 C 00070690 00060 IF(DGMSG.EQ.1.OR.DGMSG.EQ.0.AND.PGMCD.EQ.0) GO TO 300 00070700 00061 DGMSG=1 00070710 00062 LINCT=LINCT+2 00070720 00063 WRITE(PRNTR,400) 00070730 00064 400 FORMAT(5X,'* * * * * D I A G N O S T I C S * * * * *'/) 00070740 00065 300 RETURN 00070750 00066 END 00070770 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 LINCT +10 LINPP +11 PAGCT +7 PRNTR +5 TLIMT +44 DGMSG +54 PGMCD +22 SUBPROGRAMS CALLED NDT45 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] LINES 1 I 2 TEMPORARIES .A0016 22 CARD1 18# 23# CARD2 18# 23# CRSET 18# 23# DEF 18# 23# DGMSG 22# 26# 60 61# EQCHN 18# 23# ERROR 18# 23# FCTN 18# 23# I 22# 49 49# LINCT 22# 26# 36 37 37# 38 46# 62 62# LINES 5# 22# 37 46 LINPP 22# 26# 38 LITBL 17# 23# NDT45 48 NDT57 5# OBJCD 18# 23# OPER 18# 23# PAGCT 22# 26# 47 47# 48 48# PGMCD 22# 26# 60 PRNTR 22# 26# 49 51 63 PTRS 18# 23# 26# RMAX 17# 23# RMIN 17# 23# SUBSC 18# 23# SYM 18# 23# SYMTB 18# 23# TITLE 18# 23# 48 48# 49 TLIMT 22# 26# 49 TMAP 18# 23# TOKEN 18# 23# TYPCT 18# 23# XREF 18# 23# 100P 36 46# 200P 49 50# 201P 51 52# 300P 38 60 65# 400P 63 64# NDT57 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00070780 00002 C * 00070790 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00070800 00004 C PROGRAM AUTHOR - THOMAS L EVERMAN JR * 00070810 00005 C * 00070820 00006 C THIS PROGRAM BUILDS THE CROSS REFERENCE BUFFER. * 00070830 00007 C * 00070840 00008 C***************************************************************** 00070850 00009 SUBROUTINE NDT58 (SYMPT) 00070860 00010 REAL*8 RMIN,RMAX,LITBL(8192) 00070870 00011 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00070880 00012 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00070890 00013 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00070900 00014 3SYMTB(5,4096) 00070910 00015 INTEGER RECNO,XRFND,DSKND,CRSMT,REFPT,RFCPT,DISK,RFDEF,I, 00070920 00016 1 REC,SYMPT 00070930 00017 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00070940 00018 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00070950 00019 2SYMTB,LITBL 00070960 00020 EQUIVALENCE (RECNO,SYM(15)),(XRFND,PTRS(16)),(DSKND,PTRS(25)), 00070970 00021 1(CRSMT,TMAP(1)),(REFPT,XREF(1)),(RFCPT,XREF(2)), 00070980 00022 2(RFDEF,XREF(3)),(DISK,PTRS(3)) 00070990 00023 C***************************************************************** 00071000 00024 C * 00071010 00025 C MAKE SURE VARIABLE HAS A CROSS-REFERENCE RECORD, THEN READ * 00071020 00026 C THE RECORD. CHECK TO SEE WHETHER THE STATEMENT NUMBER IS * 00071030 00027 C ALREADY CONTAINED IN THE RECORD BY EXAMINING THE DEFINITION* 00071040 00028 C WORD AND THE LAST NUMBER ENTERED INTO THE XREF BUFFER. * 00071050 00029 C * 00071060 00030 C***************************************************************** 00071070 00031 IF (RECNO .NE. 0) GO TO 50 00071080 00032 XRFND = XRFND + 1 00071090 00033 IF(XRFND .GT. DSKND) CALL NDT12 (7) 00071100 00034 REFPT = 3 00071110 00035 RFCPT = 0 00071120 00036 RFDEF = 0 00071130 00037 RECNO = XRFND - 7 00071140 00038 REC = XRFND 00071150 00039 CALL NDT40 (SYMTB(1,SYMPT)) 00071160 00040 GO TO 150 00071170 00041 50 REC = RECNO + 7 00071180 00042 100 READ (DISK'REC) XREF 00071190 00043 IF (CRSMT .EQ. RFDEF .OR. CRSMT .EQ. XREF(REFPT)) GO TO 500 00071200 00044 C***************************************************************** 00071210 00045 C * 00071220 00046 C CHECK TO SEE IF BUFFER IS FULL. IF IT IS NOT FULL, * 00071230 00047 C INCREMENT THE POINTER, ENTER THE CURRENT STATEMENT NUMBER, * 00071240 00048 C AND REWRITE THE XREF BUFFER TO THE DISK FILE. * 00071250 00049 C * 00071260 00050 C***************************************************************** 00071270 00051 IF (REFPT .EQ. 80) GO TO 200 00071280 00052 150 REFPT = REFPT + 1 00071290 00053 XREF(REFPT) = CRSMT 00071300 00054 WRITE (DISK'REC) XREF 00071310 00055 GO TO 500 00071320 00056 C***************************************************************** 00071330 NDT58 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C * 00071340 00058 C DETERMINE WHETHER A CONTINUATION RECORD ALREADY EXISTS. * 00071350 00059 C IF NO CONTINUATION EXISTS, ALLOCATE A NEW DISK RECORD * 00071360 00060 C AND INITIALIZE THE NEW XREF BUFFER AND WRITE IT TO THE FILE* 00071370 00061 C REWRITE THE OLD RECORD WITH THE ADDED CONTINUATION POINTER.* 00071380 00062 C * 00071390 00063 C***************************************************************** 00071400 00064 200 IF (RFCPT .NE. 0) GO TO 400 00071410 00065 XRFND = XRFND + 1 00071420 00066 IF (XRFND .GT. DSKND) CALL NDT12 (7) 00071430 00067 RFCPT = XRFND 00071440 00068 WRITE (DISK'REC) XREF 00071450 00069 DO 300 I = 1, 80 00071460 00070 300 XREF(I) = 0 00071470 00071 REFPT = 3 00071480 00072 RFDEF = CRSMT 00071490 00073 WRITE (DISK'XRFND) XREF 00071500 00074 GO TO 500 00071510 00075 C***************************************************************** 00071520 00076 C * 00071530 00077 C A CONTINUATION RECORD ALREADY EXISTS. READ IT IN USING THE* 00071540 00078 C POINTER FROM THE INITIAL RECORD. SET REC AND PROCESS THE * 00071550 00079 C CONTINUATION LIKE A NORMAL RECORD. * 00071560 00080 C * 00071570 00081 C***************************************************************** 00071580 00082 400 REC = RFCPT 00071590 00083 GO TO 100 00071600 00084 500 RETURN 00071610 00085 END 00071630 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 RECNO +347 XRFND +23 DSKND +34 CRSMT +1722 REFPT +1602 RFCPT +1603 RFDEF +1604 DISK +6 SUBPROGRAMS CALLED NDT40 NDT12 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] .S0000 1 SYMPT 2 I 3 REC 4 NDT58 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 TEMPORARIES .A0016 5 .Q0000 6 CARD1 11# 17# CARD2 11# 17# CRSET 11# 17# CRSMT 15# 20# 43 53 72 DEF 11# 17# DISK 15# 20# 42 54 68 73 DSKND 15# 20# 33 66 EQCHN 11# 17# ERROR 11# 17# FCTN 11# 17# I 15# 69# 70 LITBL 10# 17# NDT12 33 66 NDT40 39 NDT58 9# OBJCD 11# 17# OPER 11# 17# PTRS 11# 17# 20# REC 15# 38# 41# 42 54 68 82# RECNO 15# 20# 31 37# 41 REFPT 15# 20# 34# 43 51 52 52# 53 71# RFCPT 15# 20# 35# 64 67# 82 RFDEF 15# 20# 36# 43 72# RMAX 10# 17# RMIN 10# 17# SUBSC 11# 17# SYM 11# 17# 20# SYMPT 9# 15# 39 SYMTB 11# 17# 39 39# TITLE 11# 17# TMAP 11# 17# 20# TOKEN 11# 17# TYPCT 11# 17# XREF 11# 17# 20# 42# 43 53# 54 68 70# 73 XRFND 15# 20# 32 32# 33 37 38 65 65# 66 67 73 100P 42# 83 150P 40 52# 200P 51 64# 300P 69 70# 400P 64 82# 500P 43 55 74 84# 50P 31 41# NDT58 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00071640 00002 C * 00071650 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00071660 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY * 00071670 00005 C * 00071680 00006 C***************************************************************** 00071690 00007 SUBROUTINE NDT59 00071700 00008 C***************************************************************** 00071710 00009 C * 00071720 00010 C * 00071730 00011 C TITLE COMPLEMENTER * 00071740 00012 C * 00071750 00013 C THIS PROGRAM COMPLETES THE TITLE BUFFER, INSERTING THE * 00071760 00014 C COPYRIGHT INFORMATION, AND SETS TPNT. * 00071770 00015 C * 00071780 00016 C THIS PROGRAM ALSO MAKES SURE THE SOURCE OPTION IS IN * 00071790 00017 C EFFECT IF THE DOCUMENT OPTION IS. * 00071800 00018 C * 00071810 00019 C***************************************************************** 00071820 00020 REAL*8 RMIN,RMAX,LITBL(8192) 00071830 00021 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00071840 00022 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00071850 00023 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00071860 00024 3SYMTB(5,4096) 00071870 00025 INTEGER OPTNS,TPNT,NARO,RIGHT(14),XCOPY,XTITL,TLIMT 00071880 00026 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00071890 00027 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00071900 00028 2SYMTB,LITBL 00071910 00029 EQUIVALENCE (OPTNS,PTRS(7)),(TLIMT,PTRS(33)), 00071920 00030 1(TPNT,PTRS(30)) 00071930 00031 DATA RIGHT /' ',' ','(','C',')',' ','1','9','7','8', 00071940 00032 1 ' ','U','N','D'/ 00071950 00033 C***************************************************************** 00071960 00034 C * 00071970 00035 C DETERMINE THE LENGTH OF THE OUTPUT, WIDE OR NARROW. * 00071980 00036 C SET TPNT TO THE LAST WORD USED IN THE TITLE. * 00071990 00037 C * 00072000 00038 C***************************************************************** 00072010 00039 NARO = MOD(OPTNS/8,2) 00072020 00040 TLIMT = 120 - NARO*48 00072030 00041 IF (TPNT .GT. TLIMT-14) TPNT = TLIMT - 14 00072040 00042 C***************************************************************** 00072050 00043 C * 00072060 00044 C PUT THE COPYRIGHT INFORMATION INTO THE TITLE BUFFER. * 00072070 00045 C * 00072080 00046 C***************************************************************** 00072090 00047 DO 100 XCOPY = 1, 14 00072100 00048 XTITL = TLIMT - 14 + XCOPY 00072110 00049 100 TITLE(XTITL) = RIGHT(XCOPY) 00072120 00050 C***************************************************************** 00072130 00051 C * 00072140 00052 C IF DOCUMENT AND NOSOURCE WERE SPECIFIED, SET SOURCE. * 00072150 00053 C * 00072160 00054 C***************************************************************** 00072170 00055 IF (MOD(OPTNS/1024,2).EQ.1 .AND. MOD(OPTNS/4,2).EQ.1) 00072180 00056 1 OPTNS = OPTNS - 1024 00072190 NDT59 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 RETURN 00072200 00058 END 00072220 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 OPTNS +12 TLIMT +44 TPNT +41 SUBPROGRAMS CALLED MOD. SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] NARO 1 RIGHT 2 XCOPY 20 .S0000 21 XTITL 22 TEMPORARIES .A0016 23 CARD1 21# 26# CARD2 21# 26# CRSET 21# 26# DEF 21# 26# EQCHN 21# 26# ERROR 21# 26# FCTN 21# 26# LITBL 20# 26# MOD. 39 55 NARO 25# 39# 40 NDT59 7# OBJCD 21# 26# OPER 21# 26# OPTNS 25# 29# 39 55 55# PTRS 21# 26# 29# RIGHT 25# 31# 49 RMAX 20# 26# RMIN 20# 26# SUBSC 21# 26# SYM 21# 26# SYMTB 21# 26# TITLE 21# 26# 49# TLIMT 25# 29# 40# 41 48 TMAP 21# 26# TOKEN 21# 26# TPNT 25# 29# 41 41# TYPCT 21# 26# XCOPY 25# 47# 48 49 XREF 21# 26# XTITL 25# 48# 49 100P 47 49# NDT59 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00072230 00002 C * 00072240 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00072250 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY * 00072260 00005 C * 00072270 00006 C***************************************************************** 00072280 00007 SUBROUTINE NDT60(CARD) 00072290 00008 C***************************************************************** 00072300 00009 C * 00072310 00010 C * 00072320 00011 C ERROR MESSAGE PRINTING * 00072330 00012 C * 00072340 00013 C THIS IS CALLED ONLY WHEN THERE IS AN ERROR ON THE CURRENT * 00072350 00014 C CARD, BY THE SOURCE LISTING ROUTINE. IT WILL GATHER AND * 00072360 00015 C PRINT OUT THE ERROR INFORMATION. * 00072370 00016 C * 00072380 00017 C***************************************************************** 00072390 00018 REAL*8 RMIN,RMAX,LITBL(8192) 00072400 00019 REAL ERMSG(4,3) 00072410 00020 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00072420 00021 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00072430 00022 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00072440 00023 3SYMTB(5,4096) 00072450 00024 INTEGER CARD 00072460 00025 INTEGER ERRPT,PRNTR,BLANK,DSIGN 00072470 00026 INTEGER ERFLG(80),XERR,ERRCT,ERPOS,ERNUM,SEVER 00072480 00027 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00072490 00028 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00072500 00029 2SYMTB,LITBL 00072510 00030 EQUIVALENCE (ERRPT,ERROR(2)),(PRNTR,PTRS(2)), 00072520 00031 1(BLANK,CRSET(1)),(DSIGN,CRSET(2)) 00072530 00032 DATA ERMSG /' W A',' R N',' I N',' G',' ','E R','R O','R', 00072540 00033 1'C R','I T','I C','A L'/ 00072550 00034 C***************************************************************** 00072560 00035 C * 00072570 00036 C ERFLG IS THE ARRAY THAT WILL HOLD THE POINTERS TO THE * 00072580 00037 C ERROR POSITION ON THE CARD. * 00072590 00038 C * 00072600 00039 C FIRST, BLANK IT OUT. * 00072610 00040 C * 00072620 00041 C***************************************************************** 00072630 00042 DO 100 XERR = 1, 80 00072640 00043 100 ERFLG(XERR) = BLANK 00072650 00044 C***************************************************************** 00072660 00045 C * 00072670 00046 C SEARCH THROUGH THE ERROR ARRAY, AND IF THE ERROR IS ON * 00072680 00047 C THIS CARD (IT COULD BE ON A CONTINUATION CARD), NOTE * 00072690 00048 C ITS POSITION, AND SET ERFLG ACCORDINGLY. * 00072700 00049 C * 00072710 00050 C***************************************************************** 00072720 00051 DO 200 ERRCT = 3, ERRPT, 2 00072730 00052 IF (MOD(ERROR(ERRCT),2) .NE. CARD) GO TO 200 00072740 00053 ERPOS = MOD(ERROR(ERRCT)/8,128) 00072750 00054 IF(ERPOS.NE.0) ERFLG(ERPOS) = DSIGN 00072760 00055 200 CONTINUE 00072770 00056 C***************************************************************** 00072780 NDT60 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C * 00072790 00058 C WRITE OUT THE ERFLG ARRAY. THIS WILL APPEAR DIRECTLY * 00072800 00059 C UNDER THE SOURCE LISTING. NDT57 WAS NOT CALLED FOR * 00072810 00060 C THIS WRITE BECAUSE THE CHECK WAS DONE IN NDT56. * 00072820 00061 C * 00072830 00062 C***************************************************************** 00072840 00063 WRITE (PRNTR,300) ERFLG 00072850 00064 300 FORMAT(11X,80A1) 00072860 00065 C***************************************************************** 00072870 00066 C * 00072880 00067 C NOW CONVERT ERFLG TO HOLD THE ORDINAL POSITIONS OF * 00072890 00068 C THE ERRORS. * 00072900 00069 C * 00072910 00070 C***************************************************************** 00072920 00071 ERNUM = 1 00072930 00072 DO 500 XERR = 1, 80 00072940 00073 IF (ERFLG(XERR) .EQ. BLANK) GO TO 400 00072950 00074 ERFLG(XERR) = ERNUM 00072960 00075 ERNUM = ERNUM + 1 00072970 00076 GO TO 500 00072980 00077 400 ERFLG(XERR) = 0 00072990 00078 500 CONTINUE 00073000 00079 C***************************************************************** 00073010 00080 C * 00073020 00081 C GO THROUGH THE ERROR ARRAY AND PRINT OUT THE ERROR * 00073030 00082 C MESSAGE ASSOCIATED WITH EACH ERROR. * 00073040 00083 C * 00073050 00084 C***************************************************************** 00073060 00085 DO 600 ERRCT = 3, ERRPT, 2 00073070 00086 IF(MOD(ERROR(ERRCT),2).NE.CARD) GO TO 600 00073080 00087 SEVER = MOD(ERROR(ERRCT)/2,4) 00073090 00088 ERPOS = MOD(ERROR(ERRCT)/8,128) 00073100 00089 IF(ERPOS .EQ. 0) ERPOS = 1 00073110 00090 CALL NDT57(1) 00073120 00091 WRITE(PRNTR,700) ERFLG(ERPOS),(ERMSG(XERR,SEVER),XERR=1,4), 00073130 00092 1 ERROR(ERRCT+1) 00073140 00093 600 CONTINUE 00073150 00094 700 FORMAT(11X,I2,') ***** ',4A4,' ***** ND0',I3) 00073160 00095 C***************************************************************** 00073170 00096 C * 00073180 00097 C SKIP ONE LINE AFTER PRINTING ALL ERROR MESSAGES. * 00073190 00098 C * 00073200 00099 C***************************************************************** 00073210 00100 CALL NDT57 (1) 00073220 00101 WRITE(PRNTR,800) 00073230 00102 800 FORMAT(1X) 00073240 00103 C***************************************************************** 00073250 00104 C * 00073260 00105 C RETURN * 00073270 00106 C * 00073280 00107 C***************************************************************** 00073290 00108 RETURN 00073300 00109 END 00073320 NDT60 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 ERRPT +1103 PRNTR +5 BLANK +251 DSIGN +252 SUBPROGRAMS CALLED MOD. NDT57 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] ERRCT 1 XERR 2 CARD 3 ERNUM 4 .S0003 5 .S0002 6 .S0001 7 .S0000 10 ERMSG 11 SEVER 25 ERFLG 26 ERPOS 146 TEMPORARIES .A0016 164 .Q0000 165 BLANK 25# 30# 43 73 CARD 7# 24# 52 86 CARD1 20# 27# CARD2 20# 27# CRSET 20# 27# 30# DEF 20# 27# DSIGN 25# 30# 54 EQCHN 20# 27# ERFLG 26# 43# 54# 63 73 74# 77# 91 ERMSG 19# 32# 91 ERNUM 26# 71# 74 75 75# ERPOS 26# 53# 54 88# 89 89# 91 ERRCT 26# 51# 52 53 85# 86 87 88 91 ERROR 20# 27# 30# 52 53 86 87 88 91 ERRPT 25# 30# 51 85 FCTN 20# 27# LITBL 18# 27# MOD. 52 53 86 87 88 NDT57 90 100 NDT60 7# OBJCD 20# 27# OPER 20# 27# PRNTR 25# 30# 63 91 101 PTRS 20# 27# 30# RMAX 18# 27# RMIN 18# 27# SEVER 26# 87# 91 SUBSC 20# 27# SYM 20# 27# SYMTB 20# 27# TITLE 20# 27# TMAP 20# 27# TOKEN 20# 27# TYPCT 20# 27# XERR 26# 42# 43 72# 73 74 77 91 91# XREF 20# 27# 100P 42 43# 200P 51 52 55# 300P 63 64# 400P 73 77# 500P 72 76 78# 600P 85 86 93# 700P 91 94# 800P 101 102# NDT60 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00073330 00002 C PROGRAM AUTHOR - GARY PELKEY 00073340 00003 C 00073350 00004 C 00073360 00005 SUBROUTINE NDT61 00073370 00006 C 00073380 00007 C 00073390 00008 C NDT61 DIRECTS PROCESSING OF THE VARIOUS USER DEFINED OPTIONS. 00073400 00009 C IT BEGINS BY ALLOCATING SPACE FOR THE VARIOUS OPTION PROC 00073410 00010 C ESSORS BY WRITTING THE LITERAL TABLE OUT TO DISK. IT THEN 00073420 00011 C SIMPLY CHECKS THE OPTION BITS AND CALLS THE ROUTINES NECESS 00073430 00012 C ARY. A STOP IS ISSUED IF THE NOGO IS IN EFFECT. 00073440 00013 C 00073450 00014 C 00073460 00015 REAL*8 RMIN,RMAX,LITBL(8192) 00073470 00016 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00073480 00017 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00073490 00018 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00073500 00019 3SYMTB(5,4096) 00073510 00020 INTEGER DSKCT,XRFND,START,STOP,LITCT,DSKND,DISK,OPTNS,SRTPT 00073520 00021 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00073530 00022 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00073540 00023 2SYMTB,LITBL 00073550 00024 EQUIVALENCE (DSKCT,PTRS(24)),(XRFND,PTRS(16)),(LITCT,PTRS(18)) 00073560 00025 EQUIVALENCE (DSKND,PTRS(25)),(DISK,PTRS(3)),(OPTNS,PTRS(7)) 00073570 00026 C 00073580 00027 C 00073590 00028 C THE LITERAL TABLE IS WRITTEN OUT TO DISK. 00073600 00029 C 00073610 00030 C 00073620 00031 DSKCT=XRFND 00073630 00032 START=1 00073640 00033 100 STOP=START+39 00073650 00034 IF(STOP.GT.LITCT) STOP=LITCT 00073660 00035 DSKCT=DSKCT+1 00073670 00036 IF(DSKCT.GT.DSKND) CALL NDT12 (7) 00073680 00037 WRITE(DISK'DSKCT) (LITBL(I),I=START,STOP) 00073690 00038 IF(STOP.EQ.LITCT) GO TO 200 00073700 00039 START=STOP+1 00073710 00040 GO TO 100 00073720 00041 C 00073730 00042 C 00073740 00043 C THE SYMBOL TABLE LISTING PROGRAM AND THE CROSS REFERENCE 00073750 00044 C LISTING PROGRAM BOTH NEED A TAG SORT. NDT76 IS CALLED 00073760 00045 C HERE TO PERFORM THIS SORT IF IT WILL BE NEEDED. 00073770 00046 C 00073780 00047 C 00073790 00048 200 IF(MOD(OPTNS/64,2).EQ.1.OR.MOD(OPTNS/128,2).EQ.1) 00073800 00049 1CALL NDT76 (SRTPT) 00073810 00050 C 00073820 00051 C 00073830 00052 C THE STATS PROCESSOR IS CALLED IF ITS BIT IS MARKED. 00073840 00053 C 00073850 00054 C 00073860 00055 IF(MOD((OPTNS/16),2).EQ.0) CALL NDT66 00073870 00056 C 00073880 NDT61 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C 00073890 00058 C LIKEWISE THE SYMBOL TABLE PROCESSOR, 00073900 00059 C 00073910 00060 C 00073920 00061 IF(MOD(OPTNS/64,2).EQ.1) CALL NDT67 (SRTPT) 00073930 00062 C 00073940 00063 C 00073950 00064 C AND THE CROSS REFERENCE ROUTINE, 00073960 00065 C 00073970 00066 C 00073980 00067 IF(MOD(OPTNS/128,2).EQ.1) CALL NDT68 (SRTPT) 00073990 00068 C 00074000 00069 C 00074010 00070 C AND FINALLY THE SYSTEMS ANALYSIS ROUTINE. 00074020 00071 C 00074030 00072 C 00074040 00073 IF(MOD(OPTNS/2,2).EQ.1) CALL NDT69 00074050 00074 C 00074060 00075 C 00074070 00076 C IF NOGO IS IN EFFECT A STOP IS ISSUED HERE TO ABORT EQUATION 00074080 00077 C SORTING, LOADING, AND EXECUTION. 00074090 00078 C 00074100 00079 C 00074110 00080 IF(MOD(OPTNS/32,2).EQ.1) STOP 00074120 00081 RETURN 00074130 00082 END 00074150 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 DSKCT +33 XRFND +23 LITCT +25 DSKND +34 DISK +6 OPTNS +12 SUBPROGRAMS CALLED MOD. NDT69 NDT12 NDT68 NDT67 NDT76 NDT66 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] STOP 1 *I 2 SRTPT 3 START 4 NDT61 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 TEMPORARIES .A0016 5 .Q0001 6 .Q0002 7 CARD1 16# 21# CARD2 16# 21# CRSET 16# 21# DEF 16# 21# DISK 20# 25# 37 DSKCT 20# 24# 31# 35 35# 36 37 DSKND 20# 25# 36 EQCHN 16# 21# ERROR 16# 21# FCTN 16# 21# I 37 37# LITBL 15# 21# 37 LITCT 20# 24# 34 38 MOD. 48 55 61 67 73 80 NDT12 36 NDT61 5# NDT66 55 NDT67 61 NDT68 67 NDT69 73 NDT76 48 OBJCD 16# 21# OPER 16# 21# OPTNS 20# 25# 48 55 61 67 73 80 PTRS 16# 21# 24# 25# RMAX 15# 21# RMIN 15# 21# SRTPT 20# 48 48# 61 61# 67 67# START 20# 32# 33 37 39# STOP 20# 33# 34 34# 37 38 39 SUBSC 16# 21# SYM 16# 21# SYMTB 16# 21# TITLE 16# 21# TMAP 16# 21# TOKEN 16# 21# TYPCT 16# 21# XREF 16# 21# XRFND 20# 24# 31 100P 33# 40 200P 38 48# NDT61 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00074160 00002 C PROGRAM AUTHOR - DANIEL A. POYDENCE 00074170 00003 C 00074180 00004 C 00074190 00005 SUBROUTINE NDT62 00074200 00006 C 00074210 00007 C 00074220 00008 C NDT62 TAKES THE SEQUENTIAL CHAIN OF EQUATION ELEMENTS BUILT 00074230 00009 C DURING PASS1 AND ORDERS THEM SO THAT THE LOADER MAY ORDER 00074240 00010 C THE OBJECT CODE PROPERLY. THE ORDERING SCHEME IS AS FOLLOWS: 00074250 00011 C 00074260 00012 C EQUATIONS ARE SORTED BY TYPE: T, C, PARM, N, L, A, R, AND S. 00074270 00013 C AFTER THE SORT BY TYPE CERTAIN EQUATION TYPES REQUIRE FURTHER 00074280 00014 C SORTING. ANY EQUATION WHICH DEFINES A VARIABLE USED TO 00074290 00015 C INITIALIZE A LEVEL MUST BE EVALUATED AT THE STARTING TIME 00074300 00016 C OF THE MODEL. AUXILIARY AND SUPPLEMENTARY EQUATIONS MAY 00074310 00017 C BE DEPENDENT ON VARIABLES WITHIN THEIR OWN TYPES SO THEY 00074320 00018 C MUST BE ORDERED TO ENSURE THAT A VARIABLE IS EVALUATED 00074330 00019 C BEFORE IT IS USED. 00074340 00020 C 00074350 00021 C 00074360 00022 REAL*8 RMIN,RMAX,LITBL(8192) 00074370 00023 REAL STNAM(4,4) 00074380 00024 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00074390 00025 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00074400 00026 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00074410 00027 3SYMTB(5,4096) 00074420 00028 INTEGER SYMND,I,VTYPE,RECNO,START,REC,EQNPT,EQEND,DISK,DIST, 00074430 00029 1EQSRT(16384),STOP,FLAG,PNT,PNT2,SAVE,CHNPT,LSTYP,EQNXT, 00074440 00030 2TYPE,STPGM,ACTN(8),SRTPT,LSTPT,IDVPT,SRLST,TOKPT,VNUM, 00074450 00031 3SYMPT,SMFLG,OLDCT,EQNCT,SMEQN(80),SMQPT,BLANK,COMMA, 00074460 00032 4PRNTR,OPTNS,LINCT 00074470 00033 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00074480 00034 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00074490 00035 2SYMTB,LITBL 00074500 00036 EQUIVALENCE (SYMND,PTRS(17)),(VTYPE,SYM(7)),(RECNO,SYM(15)), 00074510 00037 1(EQNPT,PTRS(28)),(DISK,PTRS(3)),(EQSRT(1),LITBL(1)), 00074520 00038 2(CHNPT,PTRS(29)),(STPGM,PTRS(21)),(TOKPT,TOKEN(3)), 00074530 00039 3(BLANK,CRSET(1)),(COMMA,OPER(9)),(PRNTR,PTRS(2)), 00074540 00040 4(OPTNS,PTRS(7)),(LINCT,PTRS(5)),(VNUM,SYM(14)) 00074550 00041 DATA ACTN /0,1,0,2,0,1,0,1/ 00074560 00042 DATA STNAM /'CONS','TANT','S:',' ','INIT','IAL','VALU','ES:', 00074570 00043 1'AUXI','LIAR','IES:',' ','SUPP','LEME','NTAR','IES:'/ 00074580 00044 LINCT=-1 00074590 00045 C 00074600 00046 C 00074610 00047 C THE SYMBOL TABLE MUST BE PREPARED FOR EQUATION ORDERING. 00074620 00048 C EACH ENTRY IS UNPACKED AND REFORMATTED: 00074630 00049 C 00074640 00050 C 1:2 - PACKED VARIABLE NAMES 00074650 00051 C 3 - VARIABLE TYPE 00074660 00052 C 4 - THE RECORD NUMBER FOR THE DEFINING EQUATION 00074670 00053 C 5 - DEFINITION WORD 00074680 00054 C 0 - UNDEFINED 00074690 00055 C 1 - DEFINED 00074700 00056 C 00074710 NDT62 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C 00074720 00058 DO 100 I=1,SYMND 00074730 00059 IF(SYMTB(1,I).EQ.32767) GO TO 100 00074740 00060 CALL NDT41 (SYMTB(1,I)) 00074750 00061 SYMTB(3,I)=VTYPE 00074760 00062 IF(VNUM.EQ.12) SYMTB(3,I)=0 00074770 00063 SYMTB(4,I)=RECNO 00074780 00064 100 CONTINUE 00074790 00065 C 00074800 00066 C 00074810 00067 C THE EQUATION CHAIN ELEMENTS ON DISK ARE READ INTO SEQUENTIAL 00074820 00068 C MEMORY LOCATIONS FOR PROCESSING. 00074830 00069 C 00074840 00070 C 00074850 00071 START=1 00074860 00072 DO 300 REC=1,EQNPT 00074870 00073 STOP=START+79 00074880 00074 READ(DISK'REC) (EQSRT(I),I=START,STOP) 00074890 00075 300 START=STOP+1 00074900 00076 C 00074910 00077 C 00074920 00078 C EQEND MUST BE SET TO THE LAST ELEMENT IN THE CHAIN WHICH 00074930 00079 C IS FOLLOWED BY A ZERO. 00074940 00080 C 00074950 00081 C 00074960 00082 START=START-80 00074970 00083 STOP=START+79 00074980 00084 DO 310 EQEND=START,STOP 00074990 00085 IF(EQSRT(EQEND).EQ.0) GO TO 320 00075000 00086 310 CONTINUE 00075010 00087 320 EQEND=EQEND-1 00075020 00088 C 00075030 00089 C 00075040 00090 C THE EQUATION ELEMENTS ARE PACKED SUCH THAT AN INTEGER SORT 00075050 00091 C WILL ARRANGE THEM IN THE DESIRED ORDER BY TYPE AND IN THE 00075060 00092 C ORDER IN WHICH THEY WERE RECEIVED WITHIN TYPE. 00075070 00093 C 00075080 00094 C A 'SHELL-D' SORT IS USED TO PERFORM THE FIRST STEP OF ORDERING. 00075090 00095 C 00075100 00096 C 00075110 00097 DIST=EQEND 00075120 00098 2600 DIST=DIST/2 00075130 00099 IF(DIST.EQ.0) GO TO 3200 00075140 00100 DO 3100 START=1,DIST 00075150 00101 STOP=EQEND-DIST 00075160 00102 FLAG=1 00075170 00103 2700 IF(FLAG.EQ.0) GO TO 3100 00075180 00104 FLAG=0 00075190 00105 DO 3000 PNT=START,STOP,DIST 00075200 00106 PNT2=PNT+DIST 00075210 00107 IF(EQSRT(PNT).LT.EQSRT(PNT2)) GO TO 3000 00075220 00108 SAVE=EQSRT(PNT) 00075230 00109 EQSRT(PNT)=EQSRT(PNT2) 00075240 00110 EQSRT(PNT2)=SAVE 00075250 00111 FLAG=1 00075260 00112 3000 CONTINUE 00075270 NDT62 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 GO TO 2700 00075280 00114 3100 CONTINUE 00075290 00115 GO TO 2600 00075300 00116 C 00075310 00117 C 00075320 00118 C THE EQUATION ELEMENTS ARE ORDERED BY TYPE. THEY MUST NOW 00075330 00119 C BE CHAINED IN THE ORDER DESIRED FOR LOADING. 00075340 00120 C 00075350 00121 C INITIALIZE THE DISK RECORD POINTER, EQNPT, AND THE ELEMENT 00075360 00122 C POINTER, CHNPT. LSTYP IS THE EQUATION TYPE OF THE LAST 00075370 00123 C GROUP AND IS INITIALIZED SUCH THAT THE FIRST EQUATION WILL 00075380 00124 C SIGNAL A NEW GROUP. EQNXT IS A POINTER TO THE FIRST EQUATION 00075390 00125 C OF THE NEXT GROUP AND IS INITIALIZED TO THE FIRST EQUATION. 00075400 00126 C 00075410 00127 C 00075420 00128 3200 EQNPT=0 00075430 00129 CHNPT=0 00075440 00130 LSTYP=0 00075450 00131 EQNXT=1 00075460 00132 C 00075470 00133 C 00075480 00134 C IF THE LAST EQUATION HAS BEEN CHAINED THEN STOP PROCESSING. 00075490 00135 C 00075500 00136 C 00075510 00137 3500 IF(EQNXT.GT.EQEND) GO TO 6200 00075520 00138 C 00075530 00139 C 00075540 00140 C BEGIN PROCESSING THE NEXT GROUP. A NEW GROUP IS INDICATED 00075550 00141 C WHEN THE EQUATION TYPE DOES NOT MATCH LSTYP. THE FOLLOWING 00075560 00142 C LOOP CHAINS EQUATIONS IN THE ORDER IN WHICH THEY ARE RECEIVED 00075570 00143 C AS THE ORDER IS ARBITRARY FOR THE GROUP. 00075580 00144 C 00075590 00145 C 00075600 00146 3550 DO 3600 PNT=EQNXT,EQEND 00075610 00147 TYPE=EQSRT(PNT)/4096+1 00075620 00148 IF(TYPE.NE.LSTYP) GO TO 3700 00075630 00149 CALL NDT21 ((MOD(EQSRT(PNT),4096)-1)*9+STPGM) 00075640 00150 3600 CONTINUE 00075650 00151 GO TO 6200 00075660 00152 C 00075670 00153 C 00075680 00154 C A NEW GROUP HAS BEEN INDICATED. SET LSTYP AND ADD AN ELEMENT 00075690 00155 C TO THE CHAIN SO THAT THE LOADER MAY IDENTIFY THE START OF 00075700 00156 C THIS GROUP. SET EQNXT TO POINT TO THE FIRST ELEMENT FOR 00075710 00157 C THE GROUP. 00075720 00158 C 00075730 00159 C 00075740 00160 3700 LSTYP=TYPE 00075750 00161 CALL NDT21 (-TYPE) 00075760 00162 EQNXT=PNT 00075770 00163 C 00075780 00164 C 00075790 00165 C EACH NEW GROUP MUST BE CHECKED FOR A REQUIREMENT FOR FURTHER 00075800 00166 C ORDERING. THE 'ACTN' ARRAY INDICATES THE REQUIREMENTS: 00075810 00167 C 00075820 00168 C 0 - THE ORDERING WITHIN THE GROUP IS ARBITRARY. 00075830 NDT62 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 00169 C 1 - THE ELEMENTS OF THE GROUP MUST BE ARRANGED SUCH 00075840 00170 C THAT ALL VARIABLES ARE DEFINED BEFORE USED. 00075850 00171 C 2 - THE ELEMENTS MUST BE ARRANGED AS IN 1 ABOVE AND 00075860 00172 C ELEMENTS MUST BE ADDED TO SOLVE INITIAL VALUES 00075870 00173 C FOR AUXILIARY OR RATE VARIABLES IN N EQUATIONS. 00075880 00174 C 00075890 00175 C 00075900 00176 IF(ACTN(TYPE).EQ.0) GO TO 3550 00075910 00177 C 00075920 00178 C 00075930 00179 C FURTHER ORDERING IS REQUIRED. SRTPT IS THE LAST LOCATION 00075940 00180 C USED IN THE EQSRT ARRAY. THE SYMBOL TABLE IS INITIALIZED 00075950 00181 C TO INDICATE THAT ALL VARIABLES WHOSE TYPE IS LESS THAN THE 00075960 00182 C TYPE OF THE GROUP BEING PROCESSED ARE DEFINED AND ALL OTHERS 00075970 00183 C ARE UNDEFINED. 00075980 00184 C 00075990 00185 C 00076000 00186 SRTPT=EQEND 00076010 00187 DO 3800 I=1,SYMND 00076020 00188 IF(SYMTB(1,I).EQ.32767) GO TO 3800 00076030 00189 SYMTB(5,I)=0 00076040 00190 IF(SYMTB(3,I).LT.TYPE) SYMTB(5,I)=1 00076050 00191 3800 CONTINUE 00076060 00192 C 00076070 00193 C 00076080 00194 C PROCESSING BEGINS WITH THE FOLLOWING LOOP WHICH BUILDS A 00076090 00195 C VARIABLE LENGTH INFORMATION LIST NEEDED FOR PROPER ORDERING. 00076100 00196 C STOP IF A NEW GROUP IS ENCOUNTERED. 00076110 00197 C 00076120 00198 C 00076130 00199 DO 4400 PNT=EQNXT,EQEND 00076140 00200 TYPE=EQSRT(PNT)/4096+1 00076150 00201 IF(TYPE.NE.LSTYP) GO TO 4500 00076160 00202 C 00076170 00203 C 00076180 00204 C INITIALIZE THE REQUIRED POINTERS FOR INITIAL VALUE EQUATIONS. 00076190 00205 C LSTPT IS A POINTER TO THE FIRST LOCATION FOR THE LIST WHICH 00076200 00206 C IS CURRENTLY BEING SCANNED FOR AUXILIARY OR RATE VARIABLES 00076210 00207 C WHOSE INITIAL VALUES MUST BE COMPUTED. IDVPT IS A POINTER 00076220 00208 C TO THE INDEPENDENT VARIABLE BEING EVALUATED IN THE LIST 00076230 00209 C THAT IS BEING SCANNED. 00076240 00210 C 00076250 00211 C 00076260 00212 LSTPT=SRTPT+1 00076270 00213 IDVPT=LSTPT+2 00076280 00214 C 00076290 00215 C 00076300 00216 C THE REQUIRED INFORMATION IS CONTAINED IN THE TOKEN RECORD 00076310 00217 C SO ITS DISK LOCATION IS COMPUTED AND IT IS READ INTO MEMORY. 00076320 00218 C 00076330 00219 C 00076340 00220 REC=(MOD(EQSRT(PNT),4096)-1)*9+STPGM 00076350 00221 3850 READ(DISK'REC) TOKEN 00076360 00222 C 00076370 00223 C 00076380 00224 C THE INFORMATION LISTS CONTAIN: 00076390 NDT62 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-4 00225 C 00076400 00226 C 1 - THE RECORD NUMBER FOR THE EQUATION 00076410 00227 C 2 - A POINTER TO THE LAST LOCATION USED BY THIS LIST. 00076420 00228 C 3 - A SYMBOL TABLE POINTER FOR THE VARIABLE ON THE 00076430 00229 C LEFT OF THE EQUAL SIGN. 00076440 00230 C 4:N - POINTERS TO THE SYMBOL TABLE FOR EACH VARIABLE 00076450 00231 C WHICH MUST BE DEFINED BEFORE THIS EQUATION CAN 00076460 00232 C BE EVALUATED. 00076470 00233 C 00076480 00234 C 00076490 00235 SRTPT=SRTPT+1 00076500 00236 EQSRT(SRTPT)=REC 00076510 00237 C 00076520 00238 C 00076530 00239 C SRLST IS A POINTER TO THE LAST LOCATION USED BY THIS LIST. 00076540 00240 C THE FOLLOWING LOOP PUTS THE SYMBOL TABLE POINTERS INTO THE 00076550 00241 C LIST IF THEY ARE REQUIRED. 00076560 00242 C 00076570 00243 C 00076580 00244 SRLST=SRTPT+1 00076590 00245 DO 4000 PNT2=4,TOKPT 00076600 00246 C 00076610 00247 C 00076620 00248 C ONLY VARIABLES MAY AFFECT THE EQUATION ORDERING. IF A TOKEN 00076630 00249 C IS NOT FOR A VARIABLE THEN NO ENTRY IS MADE FOR IT IN THE LIST. 00076640 00250 C 00076650 00251 C 00076660 00252 IF(TOKEN(PNT2).LT.0.OR.TOKEN(PNT2).GT.20479) GO TO 4000 00076670 00253 C 00076680 00254 C 00076690 00255 C GET THE SYMBOL TABLE POINTER FROM THE TOKEN. IF THE VARIABLE 00076700 00256 C IS ALREADY DEFINED IT DOESN'T NEED TO BE ADDED TO THE LIST. 00076710 00257 C IF THE VARIABLE IS UNDEFINED AND THE ACTION FOR THIS GROUP 00076720 00258 C IS 1 THEN ADD A POINTER TO THE LIST IF THE VARIABLE TYPE MACTHES 00076730 00259 C THE EQUATION TYPE. IF THE VARIABLE IS UNDEFINED AND THE ACTION 00076740 00260 C CODE IS 2 THEN ADD A POINTER TO THE LIST IF THE VARIABLE IS 00076750 00261 C NOT A SUPPLEMENTARY. 00076760 00262 C 00076770 00263 C 00076780 00264 SYMPT=MOD(TOKEN(PNT2),4096)+1 00076790 00265 IF(SYMTB(5,SYMPT).EQ.1) GO TO 4000 00076800 00266 IF(ACTN(TYPE).EQ.1.AND.SYMTB(3,SYMPT).NE.TYPE) GO TO 4000 00076810 00267 IF(ACTN(TYPE).EQ.2.AND.SYMTB(3,SYMPT).EQ.8) GO TO 4000 00076820 00268 SRLST=SRLST+1 00076830 00269 EQSRT(SRLST)=SYMPT 00076840 00270 4000 CONTINUE 00076850 00271 C 00076860 00272 C 00076870 00273 C UNDEFINED EXPLANATORY VARIABLES WERE ENCOUNTERED. UPDATE 00076880 00274 C THE LIST ELEMENT WHICH POINTS TO THE LAST POINTER IN THIS 00076890 00275 C LIST AND UPDATE SRTPT, THE POINTER TO THE LAST LOCATION USED. 00076900 00276 C 00076910 00277 C 00076920 00278 EQSRT(SRTPT+1)=SRLST 00076930 00279 SRTPT=SRLST 00076940 00280 C 00076950 NDT62 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-5 00281 C 00076960 00282 C IF THE ACTION CODE IS 1 THEN NO EQUATIONS NEED TO BE ADDED 00076970 00283 C TO EVALUATE INITIAL CONDITIONS. 00076980 00284 C 00076990 00285 C 00077000 00286 IF(ACTN(TYPE).EQ.1) GO TO 4400 00077010 00287 C 00077020 00288 C 00077030 00289 C THE LIST JUST ADDED MUST BE SCANNED FOR VARIABLES WHOSE INITIAL 00077040 00290 C VALUES NEED TO BE COMPUTED. EACH OF THOSE VARIABLES WILL 00077050 00291 C GENERATE A LIST ENTRY WHICH MUST ALSO BE SCANNED. CHECK THE 00077060 00292 C NEXT INDEPENDENT VARIABLE IN THE LIST CURRENTLY BEING SCANNED. 00077070 00293 C 00077080 00294 C 00077090 00295 4010 IDVPT=IDVPT+1 00077100 00296 C 00077110 00297 C 00077120 00298 C IF ALL INDEPENDENT VARIABLES IN THIS LIST HAVE BEEN CHECKED, 00077130 00299 C START ON THE NEXT LIST. 00077140 00300 C 00077150 00301 C 00077160 00302 IF(IDVPT.GT.EQSRT(LSTPT+1)) GO TO 4020 00077170 00303 C 00077180 00304 C 00077190 00305 C IF THE VARIABLE TYPE IS LESS THAN OR EQUAL TO THE TYPE OF 00077200 00306 C THIS GROUP THEN IT IS DEFINED OR WILL HAVE A LIST ENTRY 00077210 00307 C ADDED FOR IT WHEN IT'S EQUATION IS ENCOUNTERED SO AN ENTRY 00077220 00308 C NEED NOT BE MADE. 00077230 00309 C 00077240 00310 C 00077250 00311 SYMPT=EQSRT(IDVPT) 00077260 00312 IF(SYMTB(3,SYMPT).LE.5) GO TO 4010 00077270 00313 C 00077280 00314 C 00077290 00315 C ANOTHER LIST ENTRY MUST BE ADDED FOR THIS VARIABLE UNLESS 00077300 00316 C A LIST ENTRY ALREADY EXISTS FOR THIS VARIABLE. THE RECORD 00077310 00317 C NUMBER IS COMPARED AGAINST THE RECORD NUMBERS OF THE OTHER 00077320 00318 C LIST ENTRIES. 00077330 00319 C 00077340 00320 C 00077350 00321 REC=SYMTB(4,SYMPT) 00077360 00322 PNT2=EQEND+1 00077370 00323 4030 IF(REC.EQ.EQSRT(PNT2)) GO TO 4010 00077380 00324 PNT2=EQSRT(PNT2+1)+1 00077390 00325 C 00077400 00326 C 00077410 00327 C AFTER CHECKING ALL OF THE LISTS AND FINDING NO MATCH, GO 00077420 00328 C BACK AND ADD A NEW LIST ENTRY. 00077430 00329 C 00077440 00330 C 00077450 00331 IF(PNT2.GT.SRTPT) GO TO 3850 00077460 00332 GO TO 4030 00077470 00333 C 00077480 00334 C 00077490 00335 C THE SCAN FOR THIS LIST IS COMPLETE. UPDATE THE LIST POINTER 00077500 00336 C AND INDEPENDENT VARIABLE POINTER FOR THE NEXT LIST. IF NO 00077510 NDT62 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-6 00337 C LISTS REMAIN FOR SCANNING THEN ALL VARIABLES WILL BE EVALUATED 00077520 00338 C TO SOLVE THE ORIGINAL INITIAL VALUE EQUATION. 00077530 00339 C 00077540 00340 C 00077550 00341 4020 LSTPT=IDVPT 00077560 00342 IDVPT=LSTPT+2 00077570 00343 IF(LSTPT.LT.SRTPT) GO TO 4010 00077580 00344 4400 CONTINUE 00077590 00345 C 00077600 00346 C 00077610 00347 C ALL EQUATIONS FOR THE GROUP HAVE EITHER BEEN CHAINED OR HAVE 00077620 00348 C THE REQUIRED ORDERING INFORMATION IN THE LIST ENTRIES. 00077630 00349 C IF A NEW GROUP WAS NOT ENCOUNTERED THEN SET PNT BEYOND 00077640 00350 C THE END OF THE EQUATION ELEMENTS FOR A LATER TEST. 00077650 00351 C THE FIRST EQUATION OF THE NEXT GROUP IS SAVED. 00077660 00352 C 00077670 00353 C 00077680 00354 PNT=EQEND+1 00077690 00355 4500 EQNXT=PNT 00077700 00356 C 00077710 00357 C 00077720 00358 C IF NO LISTS EXIST THEN ALL EQUATIONS WERE CHAINED SO GO BACK 00077730 00359 C AND PROCESS THE NEXT GROUP OF EQUATIONS. 00077740 00360 C 00077750 00361 C 00077760 00362 IF(SRTPT.EQ.EQEND) GO TO 3500 00077770 00363 C 00077780 00364 C 00077790 00365 C LISTS DO EXIST INDICATING THAT EQUATIONS NEED TO BE ORDERED. 00077800 00366 C INITIALIZE SMFLG, THE SIMULTANEOUS EQUATION FLAG, OLDCT AND 00077810 00367 C EQNCT, THE OLD AND NEW EQUATION COUNTERS. 00077820 00368 C 00077830 00369 C 00077840 00370 SMFLG=0 00077850 00371 OLDCT=0 00077860 00372 5000 EQNCT=0 00077870 00373 C 00077880 00374 C 00077890 00375 C INITIALIZE THE LIST POINTER TO THE FIRST LIST AND BEGIN. 00077900 00376 C 00077910 00377 C 00077920 00378 LSTPT=EQEND+1 00077930 00379 C 00077940 00380 C 00077950 00381 C GET THE STARTING AND STOPPING LOCATIONS FOR THE INDEPENDENT 00077960 00382 C VARIABLES FOR THIS EQUATION. IF THE FIRST WORD IN THE LIST 00077970 00383 C IS A ZERO THEN THE EQUATION HAS ALREADY BEEN DEFINED AND THE 00077980 00384 C LIST ENTRY IS TO BE IGNORED. 00077990 00385 C 00078000 00386 C 00078010 00387 5100 START=LSTPT+3 00078020 00388 STOP=EQSRT(LSTPT+1) 00078030 00389 IF(EQSRT(LSTPT).EQ.0) GO TO 6000 00078040 00390 C 00078050 00391 C 00078060 00392 C THIS EQUATION NEEDS TO BE CHECKED. INCREMENT EQNCT TO KEEP 00078070 NDT62 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-7 00393 C TRACK OF HOW MANY EQUATIONS ARE STILL UNRESOLVED. IF A 00078080 00394 C SIMULTANEOUS CONDITION HAS BEEN DETERMINED THEN LIST THIS 00078090 00395 C EQUATION AND IT'S SIMULTANEOUS VARIABLES. 00078100 00396 C 00078110 00397 C 00078120 00398 EQNCT=EQNCT+1 00078130 00399 IF(SMFLG.EQ.0) GO TO 5700 00078140 00400 C 00078150 00401 C 00078160 00402 C PUT THE EQUATION NUMBER INTO THE SMEQN PRINT BUFFER AND SET 00078170 00403 C THE BUFFER POINTER, SMQPT, TO THE LAST LOCATION USED. 00078180 00404 C 00078190 00405 CALL NDT45 ((EQSRT(LSTPT)-STPGM)/9+1,SMEQN(1),1) 00078200 00406 SMQPT=4 00078210 00407 C 00078220 00408 C 00078230 00409 C COPY THE SIMULTANEOUS VARIABLES INTO THE SMEQN BUFFER. 00078240 00410 C 00078250 00411 C 00078260 00412 DO 5400 PNT=START,STOP 00078270 00413 SYMPT=EQSRT(PNT) 00078280 00414 IF(SYMTB(5,SYMPT).EQ.1) GO TO 5400 00078290 00415 CALL NDT41 (SYMTB(1,SYMPT)) 00078300 00416 DO 5200 I=1,6 00078310 00417 IF(SYM(I).EQ.BLANK) GO TO 5300 00078320 00418 SMQPT=SMQPT+1 00078330 00419 5200 SMEQN(SMQPT)=SYM(I) 00078340 00420 5300 SMQPT=SMQPT+1 00078350 00421 SMEQN(SMQPT)=COMMA 00078360 00422 5400 CONTINUE 00078370 00423 C 00078380 00424 C 00078390 00425 C BLANK OUT THE REMAINING BUFFER LOCATIONS AND WRITE THE BUFFER 00078400 00426 C TO THE PRINTER. 00078410 00427 C 00078420 00428 C 00078430 00429 5500 DO 5600 I=SMQPT,80 00078440 00430 5600 SMEQN(I)=BLANK 00078450 00431 CALL NDT57 (1) 00078460 00432 WRITE(PRNTR,5650) SMEQN 00078470 00433 5650 FORMAT(3X,4A1,12X,76A1) 00078480 00434 GO TO 6000 00078490 00435 C 00078500 00436 C 00078510 00437 C EXAMINE ALL OF THE INDEPENDENT VARIABLES. IF ANY OF THEM ARE 00078520 00438 C STILL UNDEFINED THEN THE EQUATION CANNOT BE CHAINED. IF THERE 00078530 00439 C ARE NO UNRESOLVED INDEPENDENT VARIABLES TO BEGIN WITH THEN 00078540 00440 C THE EQUATION MAY BE IMMEDIATELY CHAINED. 00078550 00441 C 00078560 00442 C 00078570 00443 5700 IF(START.GT.STOP) GO TO 5900 00078580 00444 DO 5800 I=START,STOP 00078590 00445 PNT=EQSRT(I) 00078600 00446 IF(SYMTB(5,PNT).EQ.0) GO TO 6000 00078610 00447 5800 CONTINUE 00078620 00448 C 00078630 NDT62 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-8 00449 C 00078640 00450 C ALL OF THE INDEPENDENT VARIABLES WERE DEFINED. THE EQUATION 00078650 00451 C MAY BE CHAINED AND IT'S LIST ENTRY MARKED NOT IN USE. THE 00078660 00452 C DEPENDENT VARIABLE MAY BE MARKED DEFINED. 00078670 00453 C 00078680 00454 C 00078690 00455 5900 CALL NDT21 (EQSRT(LSTPT)) 00078700 00456 EQSRT(LSTPT)=0 00078710 00457 SYMPT=EQSRT(LSTPT+2) 00078720 00458 SYMTB(5,SYMPT)=1 00078730 00459 C 00078740 00460 C 00078750 00461 C GET THE NEXT LIST ENTRY AND EXAMINE IT'S VARIABLES. IF ALL 00078760 00462 C LISTS HAVE BEEN EXAMINED, CHECK FOR SIMULTANEOUS CONDITIONS. 00078770 00463 C SIMULTANEOUS EQUATIONS EXIST IF AFTER EXAMINING ALL OF THE 00078780 00464 C LISTS NO EQUATIONS COULD BE RESOLVED. THIS IS DETERMINED 00078790 00465 C BY COMPARING THE NUMBER OF EQUATIONS IN THE LIST WITH THE 00078800 00466 C NUMBER IN THE LIST BEFORE THE LAST PASS. IF ALL EQUATIONS 00078810 00467 C HAVE BEEN RESOLVED OR THE SIMULTANEOUS CONDITION HAS ALREADY 00078820 00468 C BEEN REPORTED, GO BACK AND PROCESS THE NEXT GROUP. 00078830 00469 C 00078840 00470 C 00078850 00471 6000 LSTPT=STOP+1 00078860 00472 IF(LSTPT.LT.SRTPT) GO TO 5100 00078870 00473 IF(EQNCT.EQ.0.OR.SMFLG.NE.0) GO TO 3500 00078880 00474 IF(EQNCT.NE.OLDCT) GO TO 6100 00078890 00475 C 00078900 00476 C 00078910 00477 C SIMULTANEOUS EQUATIONS EXIST. REPORT THIS CONDITION, SET 00078920 00478 C SMFLG, AND FORCE THE NOGO OPTION IF GO WAS IN EFFECT. 00078930 00479 C 00078940 00480 C 00078950 00481 PNT=LSTYP/2 00078960 00482 CALL NDT57 (5) 00078970 00483 WRITE(PRNTR,6010) (STNAM(I,PNT),I=1,4) 00078980 00484 6010 FORMAT(/' SIMULTANEOUS EQUATIONS HAVE BEEN DETECTED IN THE ', 00078990 00485 14A4,//' EQUATION',10X,'SIMULTANEOUS VARIABLES'/) 00079000 00486 SMFLG=1 00079010 00487 IF(MOD(OPTNS/32,2).EQ.0) OPTNS=OPTNS+32 00079020 00488 C 00079030 00489 C 00079040 00490 C ANOTHER PASS IS REQUIRED. SAVE THE EQUATION COUNT AND 00079050 00491 C GO BACK FOR ANOTHER PASS. 00079060 00492 C 00079070 00493 C 00079080 00494 6100 OLDCT=EQNCT 00079090 00495 GO TO 5000 00079100 00496 C 00079110 00497 C 00079120 00498 C ALL EQUATIONS FOR ALL GROUPS HAVE BEEN PROCESSED. SIGNAL 00079130 00499 C NDT21 TO STOP CHAINING AND SAVE THE LAST BUFFER TO DISK. 00079140 00500 C 00079150 00501 C 00079160 00502 6200 CALL NDT21 (0) 00079170 00503 C 00079180 00504 C 00079190 NDT62 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-9 00505 C IF SIMULTANEOUS EQUATIONS DID OCCUR THEN WE CAN PROCEED 00079200 00506 C NO FURTHER, SO TERMINATE PROCESSING. 00079210 00507 C 00079220 00508 C 00079230 00509 IF(MOD(OPTNS/32,2).EQ.1) STOP 00079240 00510 RETURN 00079250 00511 END 00079270 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 SYMND +24 VTYPE +337 RECNO +347 EQNPT +37 DISK +6 EQSRT +52220 CHNPT +40 STPGM +30 TOKPT +524 BLANK +251 COMMA +330 PRNTR +5 OPTNS +12 LINCT +10 VNUM +346 SUBPROGRAMS CALLED MOD. NDT45 NDT21 NDT57 NDT41 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] SAVE 1 STOP 2 EQEND 3 PNT2 4 LSTPT 5 EQNCT 6 SRLST 7 IDVPT 10 FLAG 11 .R0001 12 .R0000 13 STNAM 14 LSTYP 34 .S0007 35 .S0006 36 .S0005 37 .S0004 40 .S0003 41 SMEQN 42 DIST 162 .S0001 163 .S0000 164 SYMPT 165 TYPE 166 .S0015 167 .S0014 170 .S0013 171 .S0012 172 PNT 173 .S0011 174 .S0010 175 OLDCT 176 I 177 .O0004 200 ACTN 201 .O0002 211 SRTPT 212 .O0001 213 SMQPT 214 START 215 SMFLG 216 EQNXT 217 REC 220 TEMPORARIES .A0016 252 .Q0002 253 .Q0003 254 .Q0004 255 ACTN 28# 41# 176 266 267 286 BLANK 28# 36# 417 430 CARD1 24# 33# CARD2 24# 33# CHNPT 28# 36# 129# COMMA 28# 36# 421 CRSET 24# 33# 36# DEF 24# 33# DISK 28# 36# 74 221 DIST 28# 97# 98 98# 99 100 101 105 106 EQCHN 24# 33# EQEND 28# 84# 85 87 87# 97 101 137 146 186 199 322 354 362 378 EQNCT 28# 372# 398 398# 473 474 494 EQNPT 28# 36# 72 128# EQNXT 28# 131# 137 146 162# 199 355# EQSRT 28# 36# 74# 85 107 108 109# 109 110# 147 149 200 220 236# 269# 278# 302 311 323 324 388 389 405 413 445 455 455# 456# 457 ERROR 24# 33# FCTN 24# 33# FLAG 28# 102# 103 104# 111# I 28# 58# 59 60 61 62 63 74 74# 187# 188 189 190 416# 417 419 429# 430 444# 445 483 483# IDVPT 28# 213# 295 295# 302 311 341 342# LINCT 28# 36# 44# LITBL 22# 33# 36# LSTPT 28# 212# 213 302 341# 342 343 378# 387 388 389 405 455 456 457 471# 472 LSTYP 28# 130# 148 160# 201 481 MOD. 149 220 264 487 509 NDT21 149 161 455 502 NDT41 60 415 NDT45 405 NDT57 431 482 NDT62 5# OBJCD 24# 33# OLDCT 28# 371# 474 494# OPER 24# 33# 36# OPTNS 28# 36# 487 487# 509 PNT 28# 105# 106 107 108 109 146# 147 149 162 199# 200 220 354# 355 412# 413 445# 446 481# 483 PNT2 28# 106# 107 109 110 245# 252 264 322# 323 324 324# 331 PRNTR 28# 36# 432 483 PTRS 24# 33# 36# REC 28# 72# 74 220# 221 236 321# 323 RECNO 28# 36# 63 RMAX 22# 33# RMIN 22# 33# SAVE 28# 108# 110 SMEQN 28# 405 405# 419# 421# 430# 432 SMFLG 28# 370# 399 473 486# SMQPT 28# 406# 418 418# 419 420 420# 421 429 SRLST 28# 244# 268 268# 269 278 279 SRTPT 28# 186# 212 235 235# 236 244 278 279# 331 343 362 472 START 28# 71# 73 74 75# 82 82# 83 84 100# 105 387# 412 443 444 STNAM 23# 42# 483 STOP 28# 73# 74 75 83# 84 101# 105 388# 412 443 444 471 STPGM 28# 36# 149 220 405 SUBSC 24# 33# SYM 24# 33# 36# 417 419 SYMND 28# 36# 58 187 SYMPT 28# 264# 265 266 267 269 311# 312 321 413# 414 415 457# 458 SYMTB 24# 33# 59 60 60# 61# 62# 63# 188 189# 190 190# 265 266 267 312 321 414 415 415# 446 458# TITLE 24# 33# TMAP 24# 33# TOKEN 24# 33# 36# 221# 252 264 TOKPT 28# 36# 245 TYPCT 24# 33# TYPE 28# 147# 148 160 161 176 190 200# 201 266 267 286 VNUM 28# 36# 62 VTYPE 28# 36# 61 XREF 24# 33# 100P 58 59 64# 2600P 98# 115 2700P 103# 113 3000P 105 107 112# 300P 72 75# 3100P 100 103 114# 310P 84 86# 3200P 99 128# 320P 85 87# 3500P 137# 362 473 3550P 146# 176 3600P 146 150# 3700P 148 160# 3800P 187 188 191# 3850P 221# 331 4000P 245 252 265 266 267 270# 4010P 295# 312 323 343 4020P 302 341# 4030P 323# 332 4400P 199 286 344# 4500P 201 355# 5000P 372# 495 5100P 387# 472 5200P 416 419# 5300P 417 420# 5400P 412 414 422# 5500P 429# 5600P 429 430# 5650P 432 433# 5700P 399 443# 5800P 444 447# 5900P 443 455# 6000P 389 434 446 471# 6010P 483 484# 6100P 474 494# 6200P 137 151 502# NDT62 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00079280 00002 C PROGRAM AUTHOR - GARY PELKEY 00079290 00003 C 00079300 00004 C 00079310 00005 SUBROUTINE NDT63 (PRFLG,PLFLG) 00079320 00006 C 00079330 00007 C 00079340 00008 C THIS ROUTINE UPDATES OUTPUT DATA FOR PRINT OR PLOT CARDS 00079350 00009 C WHEN CALLED BY NDT64 OR NDT65. 00079360 00010 C 00079370 00011 C 00079380 00012 REAL*8 CMPAR,RMIN,RMAX,VAR(18705),ACCUM,EXTME,RSTME(10) 00079390 00013 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00079400 00014 1SUBSC(6),OUTPT(240),LINE(120),OBJCD(37410) 00079410 00015 INTEGER PRFLG,OUTCT,PLFLG,END,OAB,I,FLOC,TYPE,LOWRN, 00079420 00016 1RUNCT,VPOS,BUFPT,VNUM,SUBHI,FRONT,VARCT,HIPNT,COUNT,HERE, 00079430 00017 2THERE,REC,DISK,J,OCCUR,DSKND 00079440 00018 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,OUTPT,LINE, 00079450 00019 1EXTME,RSTME,ACCUM,VAR 00079460 00020 EQUIVALENCE(VAR(1),OBJCD(1)),(OUTCT,PTRS(10)), 00079470 00021 1(OAB,PTRS(12)),(RUNCT,PTRS(14)),(DISK,PTRS(3)),(DSKND,PTRS(25)) 00079480 00022 C 00079490 00023 C 00079500 00024 C THE MAJOR LOOP IS ONE WHICH CHECKS ALL THE DATA BUFFERS 00079510 00025 C AND SKIPS PROCESSING OF THE ONES WHOSE OUTPUT UPDATE IS 00079520 00026 C NOT REQUESTED. THIS IS DONE BY COMPARING THE FIRST WORD 00079530 00027 C OF EACH DATA BUFFER (TYPE) WITH THE INCOMING ARGUMENTS. 00079540 00028 C 00079550 00029 C 00079560 00030 END=OAB+OUTCT-1 00079570 00031 DO 1000 I=OAB,END 00079580 00032 FLOC=OBJCD(I) 00079590 00033 TYPE=OBJCD(FLOC) 00079600 00034 IF((TYPE.EQ.12.AND.PRFLG.EQ.0).OR.(TYPE.EQ.13.AND.PLFLG.EQ.0)) 00079610 00035 1GO TO 1000 00079620 00036 C 00079630 00037 C 00079640 00038 C PROCESSING FOR A SINGLE DATA BUFFER IS READY. HOWEVER, 00079650 00039 C PROCESSING IS COMPLETELY SKIPPED IF NONE OF THE VARIABLE'S 00079660 00040 C RUN SUBSCRIPTS MATCH THE CURRENT RUNCT. 00079670 00041 C 00079680 00042 C 00079690 00043 OCCUR=OBJCD(FLOC+3) 00079700 00044 IF(MOD(OCCUR/2**(RUNCT-1),2).EQ.0) GO TO 1000 00079710 00045 VARCT=OBJCD(FLOC+1) 00079720 00046 HIPNT=OBJCD(FLOC+5) 00079730 00047 C 00079740 00048 C 00079750 00049 C THE POINTER TO THE 40 WORD BUFFER IS INCREMENTED. IF THE 00079760 00050 C VARIABLES RUN SUBSCRIPT MATCHES RUNCT ITS VALUE IS DEPOSITED 00079770 00051 C IN THE BUFFER AND IT IS COMPARED TO THE PREVIOUS HIGH AND 00079780 00052 C LOW FOR POSSIBLE UPDATING. IF THE SUBSCRIPT DOES NOT MATCH 00079790 00053 C RUNCT, THE POSITION IN THE BUFFER IS SKIPPED OVER, THUS 00079800 00054 C RESERVING ROOM FOR ITS VALUE IN SUBSEQUENT RUNS. 00079810 00055 C 00079820 00056 C 00079830 NDT63 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 DO 500 COUNT=1,VARCT 00079840 00058 OBJCD(FLOC+6)=OBJCD(FLOC+6)+1 00079850 00059 BUFPT=OBJCD(FLOC+6) 00079860 00060 VPOS=FLOC+6+2*COUNT 00079870 00061 IF(OBJCD(VPOS+1).NE.RUNCT) GO TO 400 00079880 00062 VNUM=OBJCD(VPOS) 00079890 00063 VAR(BUFPT)=VAR(VNUM) 00079900 00064 CMPAR=VAR(VNUM) 00079910 00065 IF(CMPAR.LT.0.D0.AND.TYPE.EQ.12) CMPAR=-CMPAR 00079920 00066 SUBHI=HIPNT+2*COUNT-2 00079930 00067 IF(CMPAR.GT.VAR(SUBHI)) VAR(SUBHI)=CMPAR 00079940 00068 IF(CMPAR.LT.VAR(SUBHI+1)) VAR(SUBHI+1)=CMPAR 00079950 00069 C 00079960 00070 C 00079970 00071 C HERE THE BUFFER IS CHECKED TO SEE IF IT IS FULL. IF SO, 00079980 00072 C IT IS WRITTEN OUT TO DISK. IF RUNCT IS GREATER THAN LOWRN, 00079990 00073 C PREVIOUS RUN VARIABLE VALUES ARE SAVED BY READING THE NEXT 00080000 00074 C RECORD BACK INTO THE BUFFER. BUFPT IS SET TO THE FIRST REAL 00080010 00075 C POSITION PRECEEDING THE BUFFER AND THE RECORD POINTER (OBJCD( 00080020 00076 C FLOC+4)) IS UPDATED. 00080030 00077 C 00080040 00078 C 00080050 00079 400 FRONT=HIPNT+2*VARCT-1 00080060 00080 IF((BUFPT-FRONT).LT.40) GO TO 500 00080070 00081 HERE=FRONT+1 00080080 00082 THERE=HERE+39 00080090 00083 OBJCD(FLOC+6)=FRONT 00080100 00084 REC=OBJCD(FLOC+4) 00080110 00085 IF(REC.GT.DSKND) CALL NDT12 (9) 00080120 00086 WRITE(DISK'REC) (VAR(J),J=HERE,THERE) 00080130 00087 REC = REC + OUTCT 00080140 00088 OBJCD(FLOC+4) = REC 00080150 00089 LOWRN=OBJCD(FLOC+2) 00080160 00090 IF(RUNCT.GT.LOWRN) READ(DISK'REC) (VAR(J),J=HERE,THERE) 00080170 00091 C 00080180 00092 C 00080190 00093 C GET THE NEXT VARIABLE IN THIS DATA BUFFER. 00080200 00094 C 00080210 00095 C 00080220 00096 500 CONTINUE 00080230 00097 C 00080240 00098 C 00080250 00099 C GET THE NEXT DATA BUFFER. 00080260 00100 C 00080270 00101 C 00080280 00102 1000 CONTINUE 00080290 00103 RETURN 00080300 00104 END 00080320 EQUIVALENCED VARIABLES NDT63 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 OUTPT +356 LINE +736 EXTME +1126 RSTME +1130 ACCUM +1154 VAR +1156 OBJCD +1156 OUTCT +15 OAB +17 RUNCT +21 DISK +6 DSKND +34 SUBPROGRAMS CALLED MOD. NDT12 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] END 1 PRFLG 2 .O0010 3 PLFLG 4 VNUM 5 FRONT 6 VPOS 7 BUFPT 10 VARCT 11 .R0002 12 HIPNT 13 COUNT 14 LOWRN 15 J 16 .S0001 17 .S0000 20 SUBHI 21 THERE 22 TYPE 23 CMPAR 24 OCCUR 26 .O0007 27 .O0006 30 FLOC 31 I 32 .O0003 33 .O0002 34 .O0000 35 HERE 36 REC 37 TEMPORARIES .A0016 40 .Q0003 41 .Q0004 42 ACCUM 12# 18# BUFPT 15# 59# 63 80 CMPAR 12# 64# 65 65# 67 68 COUNT 15# 57# 60 66 CRSET 13# 18# DISK 15# 20# 86 90 DSKND 15# 20# 85 END 15# 30# 31 EXTME 12# 18# FLOC 15# 32# 33 43 45 46 58 59 60 83 84 88 89 FRONT 15# 79# 80 81 83 HERE 15# 81# 82 86 90 HIPNT 15# 46# 66 79 I 15# 31# 32 J 15# 86 86# 90 90# LINE 13# 18# LOWRN 15# 89# 90 MOD. 44 NDT12 85 NDT63 5# OAB 15# 20# 30 31 OBJCD 13# 20# 32 33 43 45 46 58# 58 59 61 62 83# 84 88# 89 OCCUR 15# 43# 44 OPER 13# 18# OUTCT 15# 20# 30 87 OUTPT 13# 18# PLFLG 5# 15# 34 PRFLG 5# 15# 34 PTRS 13# 18# 20# REC 15# 84# 85 86 87 87# 88 90 RMAX 12# 18# RMIN 12# 18# RSTME 12# 18# RUNCT 15# 20# 44 61 90 SUBHI 15# 66# 67 68 SUBSC 13# 18# SYM 13# 18# THERE 15# 82# 86 90 TITLE 13# 18# TYPE 15# 33# 34 65 VAR 12# 18# 20# 63# 63 64 67 67# 68 68# 86 90# VARCT 15# 45# 57 79 VNUM 15# 62# 63 64 VPOS 15# 60# 61 62 1000P 31 34 44 102# 400P 61 79# 500P 57 80 96# NDT63 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1979 - UNIVERSITY OF NOTRE DAME 00080330 00002 C PROGRAM AUTHOR - DANIEL A. POYDENCE 00080340 00003 C 00080350 00004 C 00080360 00005 SUBROUTINE NDT64 00080370 00006 C 00080380 00007 C 00080390 00008 C THIS SUBROUTINE EXECUTES THE NDTRAN OBJECT CODE CHECKING 00080400 00009 C FOR ALL ERROR CONDITIONS WHICH MIGHT RESULT IN LOSS OF 00080410 00010 C CONTROL DUE TO FORTRAN OR SYSTEM ERRORS. IN THE EVENT 00080420 00011 C OF AN ERROR, A MESSAGE I PRINTED GIVING THE SOURCE 00080430 00012 C STATEMENT NUMBER BEING EXECUTED WHEN THE CONDITION 00080440 00013 C WAS DETECTED AND THE TIME. ERROR RECOVERY IS ATTEMPTED 00080450 00014 C WHERE POSSIBLE UNTIL AN EXCESSIVE NUMBER OF ERRORS 00080460 00015 C TERMINATES THE RUN IN PROGRESS. 00080470 00016 C 00080480 00017 C 00080490 00018 REAL*8 RMIN,RMAX,VAR(18705),EXTME,RSTME(10) 00080500 00019 REAL*8 ACCUM,TIME,DT,START,STOP,PRTPR,PLTPR,HAFDT,RKCON, 00080510 00020 1ABCON,ARG1,ARG2,ARG3,ARG4,ARG5,Z,X,RANGE,INDEP,DISP, 00080520 00021 2A,B,C,D,TOLER,TEST 00080530 00022 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00080540 00023 1SUBSC(6),OUTPT(240),LINE(120),OBJCD(37410) 00080550 00024 INTEGER FLAG,OPCOD,RADDR,INTYP,PC,PRTBT,PLTBT,OPRND,VNUM, 00080560 00025 1RERUN,EXPMX,LADDR,VARNM,I,J,COUNT,SUB,PNT,RRUN(80),RUNCT, 00080570 00026 2RRBST,RBFPT,INTBT,REC,DISK,TO,FROM,OBJST,OUTCT,OAB, 00080580 00027 3HERE,THERE,OCBND,STMT,CODE,ERRCT,PRNTR,ERMSG(40) 00080590 00028 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,OUTPT,LINE, 00080600 00029 1EXTME,RSTME,ACCUM,VAR 00080610 00030 EQUIVALENCE (VAR(1),OBJCD(1)) 00080620 00031 EQUIVALENCE (DT,VAR(11)),(TIME,VAR(12)),(STOP,VAR(13)), 00080630 00032 1(START,VAR(14)),(PRTPR,VAR(15)),(PLTPR,VAR(16)), 00080640 00033 2(ARG1,VAR(17)),(ARG2,VAR(18)),(ARG3,VAR(19)), 00080650 00034 3(ARG4,VAR(20)),(ARG5,VAR(21)),(OPRND,VNUM),(PC,PTRS(15)), 00080660 00035 4(RERUN,PTRS(13)),(LADDR,PTRS(19)),(INTYP,PTRS(8)),(RADDR,PTRS(21))00080670 00036 EQUIVALENCE (EXPMX,PTRS(9)),(RUNCT,PTRS(14)), 00080680 00037 1(RRUN(1),OUTPT(1),INTBT),(RRBST,PTRS(36)), 00080690 00038 2(RBFPT,RRUN(2)),(DISK,PTRS(3)),(OBJST,PTRS(17)), 00080700 00039 3(OUTCT,PTRS(10)),(OAB,PTRS(12)),(OCBND,PTRS(44)), 00080710 00040 4(PRNTR,PTRS(2)) 00080720 00041 DATA ERMSG /' ','I','N',' ','S','T','A','T','E','M','E', 00080730 00042 1'N','T',' ',0,0,0,0,' ','A','T',' ','T','I','M','E', 00080740 00043 2' ','=',' ',0,0,0,0,0,0,0,0,0,0,0/ 00080750 00044 C 00080760 00045 C 00080770 00046 C STATEMENT LABEL 10000 IS RETURNED TO AFTER EACH INSTRUCTION 00080780 00047 C THE OPCODE AND ASSOCIATED OPERAND/VNUM ARE COMPUTED, 00080790 00048 C PC IS INCREMENTED, AND A COMPUTED GO TO IS EXECUTED 00080800 00049 C BASED UPON THE OPCODE. THE PROGRAM IS SET UP SO THAT 00080810 00050 C THE STATEMENT LABEL IS ALWAYS THE OPCODE*100+10000. 00080820 00051 C 00080830 00052 C 00080840 00053 C 00080850 00054 10000 OPCOD=OBJCD(PC) 00080860 00055 OPRND=OBJCD(PC+1) 00080870 00056 PC=PC+2 00080880 NDT64 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 GO TO (10100,10200,10300,10400,10500,10600,10700,10800,10900, 00080890 00058 111000,11100,11200,11300,11400,11500,11600,11700,11800, 00080900 00059 211900,12000,12100,12200,12300,12400,12500,12500,12700, 00080910 00060 312800,12700,13000,13100,13200,13300,13400,13400,13400, 00080920 00061 413400) ,OPCOD 00080930 00062 C**************************************************************** 00080940 00063 C 00080950 00064 C THE LOAD INSTRUCTION. 00080960 00065 C 00080970 00066 C 00080980 00067 10100 ACCUM=VAR(VNUM) 00080990 00068 GO TO 10000 00081000 00069 C 00081010 00070 C**************************************************************** 00081020 00071 C 00081030 00072 C THE STORE INSTRUCTION. (NOTE, THE STORE ZEROS OUT ACCUM) 00081040 00073 C 00081050 00074 C 00081060 00075 10200 VAR(VNUM)=ACCUM 00081070 00076 ACCUM=0.D0 00081080 00077 GO TO 10000 00081090 00078 C 00081100 00079 C**************************************************************** 00081110 00080 C 00081120 00081 C THE ADD INSTRUCTION. 00081130 00082 C 00081140 00083 C NDTRAN FLOATING POINT EXTREMES ARE SETUP SUCH THAT ADDITIONS 00081150 00084 C AND SUBTRACTIONS CANNOT RESULT IN LOSS OF CONTROL DUE TO 00081160 00085 C ERROR CONDITIONS. THE OPERATIONS ARE SIMPLY PERFORMED 00081170 00086 C AND CHECKED FOR NDTRAN OVERFLOW OR UNDERFLOW AFTERWARD.C 00081180 00087 C 00081190 00088 C THE FLOATING POINT MAXIMUM, RMAX ,WITH THE ORIGINAL SIGN 00081200 00089 C IS SUPPLIED AS THE RESULT IN THE CASE OF OVERFLOW. 00081210 00090 C ZERO IS SUPPLIED FOR THE UNDERFLOW CONDITION. 00081220 00091 C 00081230 00092 C 00081240 00093 C 00081250 00094 10300 ACCUM=ACCUM+VAR(VNUM) 00081260 00095 10310 TEST = DABS(ACCUM) 00081270 00096 IF(TEST .LE. RMAX) GO TO 10320 00081280 00097 CODE = 1 00081290 00098 TEST = RMAX 00081300 00099 IF(ACCUM .LT. 0.D0) TEST = -TEST 00081310 00100 ACCUM = TEST 00081320 00101 GO TO 20000 00081330 00102 10320 IF(TEST.GT. RMIN.OR.TEST.EQ.0.D0) GO TO 10000 00081340 00103 CODE = 2 00081350 00104 ACCUM = 0.D0 00081360 00105 GO TO 20000 00081370 00106 C**************************************************************** 00081380 00107 C 00081390 00108 C THE SUBTRACT INSTRUCTION. 00081400 00109 C 00081410 00110 C 00081420 00111 10400 ACCUM=ACCUM - VAR(VNUM) 00081430 00112 GO TO 10310 00081440 NDT64 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 C**************************************************************** 00081450 00114 C 00081460 00115 C THE MULTIPLY INSTRUCTION. 00081470 00116 C 00081480 00117 C 00081490 00118 C IF BOTH OPERANDS ARE NON-ZERO THEN LOSS OF CONTROL COULD 00081500 00119 C RESULT BY PERFORMING THE MULTIPLICATION. THEREFORE, 00081510 00120 C BEFORE PERFORMING THE OPERATION WE MUST DETERMINE 00081520 00121 C WHETHER IT IS SAFE TO DO SO. IF THE SUM OF THE CHARACTERISTICS 00081530 00122 C OF THE OPERANDS IS WITHIN THE LIMITS OF EXPMX, THE 00081540 00123 C EXTREMUM CHARACTERISTIC, THEN NO ERROR WILL OCCUR. 00081550 00124 C 00081560 00125 C 00081570 00126 C IF THE SUM IS GREATER THAN EXPMX THEN OVERFLOW WOULD 00081580 00127 C OCCUR AND NDTRAN SUPPLIES THE FLOATING POINT MAXIMUM 00081590 00128 C VALUE WITH THE SIGN OF THE WOULD-BE PRODUCT. Q SUM 00081600 00129 C LESS THAN -EXPMX INDICATES UNDERFLOW FOR WHICH A 00081610 00130 C ZERO PRODUCT IS SUPPLIED. 00081620 00131 C 00081630 00132 C 00081640 00133 10500 A = ACCUM 00081650 00134 B = VAR(VNUM) 00081660 00135 IF(A .EQ. 0.D0 .OR. B .EQ. 0.D0) GO TO 10510 00081670 00136 TEST = DLOG10(DABS(A)) + DLOG10(DABS(B)) 00081680 00137 IF(TEST .GT. FLOAT(EXPMX)) GO TO 10520 00081690 00138 IF(TEST .LT. FLOAT(-EXPMX)) GO TO 10530 00081700 00139 10510 ACCUM = A*B 00081710 00140 GO TO 10000 00081720 00141 10520 CODE = 1 00081730 00142 ACCUM = RMAX *(A/DABS(A)) *(B/DABS(B)) 00081740 00143 GO TO 20000 00081750 00144 10530 CODE = 2 00081760 00145 ACCUM = 0.D0 00081770 00146 GO TO 20000 00081780 00147 C 00081790 00148 C**************************************************************** 00081800 00149 C 00081810 00150 C THE DIVIDE INSTRUCTION. 00081820 00151 C 00081830 00152 C 00081840 00153 C BEFORE PERFORMING A DIVISION WE MUST CHECK FOR POTENTIAL 00081850 00154 C ERROR CONDITIONS. 00081860 00155 C 00081870 00156 C IN THE EVENT OF A ZERO DIVISOR, THE OPERATION IS NOT 00081880 00157 C PERFORMED AND THE DIVIDEND IS PROVIDED AS THE RESULT. 00081890 00158 C 00081900 00159 C IF THE DIFFERENCE OF THE CHARACTERISTICS OF THE DIVIDEND 00081910 00160 C AND THE DIVISOR IS WITHIN EXPMX LIMITS THEN THE OPERATION 00081920 00161 C MAY BE SAFELY PERFORMED. 00081930 00162 C 00081940 00163 C IF THE DIFFERENCE EXCEEDS EXPMX, THEN OVERFLOW WOULD 00081950 00164 C OCCUR AND NDTRAN SUPPLIES THE MAXIMUM VALUE WITH THE 00081960 00165 C SIGN OF THE WOULD BE QUOTIENT. IF THE DIFFERENCE 00081970 00166 C IS LESS THAN -EXPMX, THEN UNDERFLOW WOULD OCCUR AND 00081980 00167 C A ZERO RESULT IS SUPPLIED. 00081990 00168 C 00082000 NDT64 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 00169 C 00082010 00170 C 00082020 00171 10600 A = ACCUM 00082030 00172 B = VAR(VNUM) 00082040 00173 10610 CODE = 3 00082050 00174 ACCUM = A 00082060 00175 IF(B .EQ. 0.D0) GO TO 20000 00082070 00176 ACCUM = 0.D0 00082080 00177 IF(A .EQ. 0.D0) GO TO 10000 00082090 00178 TEST = DLOG10(DABS(A)) - DLOG10(DABS(B)) 00082100 00179 IF(TEST .GT. FLOAT(EXPMX)) GO TO 10520 00082110 00180 IF(TEST .LT. FLOAT(-EXPMX)) GO TO 10530 00082120 00181 ACCUM = A / B 00082130 00182 GO TO 10000 00082140 00183 C 00082150 00184 C**************************************************************** 00082160 00185 C 00082170 00186 C THE EXPONENTIATE INSTRUCTION. 00082180 00187 C 00082190 00188 C 00082200 00189 10700 B = ACCUM 00082210 00190 A = VAR(VNUM) 00082220 00191 10710 ACCUM=1.D0 00082222 00192 IF(A .EQ. 0.D0) GOTO 10000 00082224 00193 ACCUM=0.D0 00082226 00194 IF (B) 10720,10000,10740 00082230 00195 10740 ACCUM = DEXP(A*DLOG(B)) 00082240 00196 GO TO 10000 00082250 00197 10720 ACCUM = DEXP(A*DLOG(-B))*DFLOAT(1-MOD(IDINT(DABS(A)+.5),2)*2) 00082260 00198 GO TO 10000 00082270 00199 C 00082280 00200 C**************************************************************** 00082290 00201 C 00082300 00202 C THE REVERSE SUBTRACT INSTRUCTION. 00082310 00203 C 00082320 00204 C 00082330 00205 10800 ACCUM=VAR(VNUM)-ACCUM 00082340 00206 GO TO 10310 00082350 00207 C 00082360 00208 C**************************************************************** 00082370 00209 C 00082380 00210 C THE REVERSE DIVIDE INSTRUCTION. 00082390 00211 C 00082400 00212 C 00082410 00213 10900 A = VAR(VNUM) 00082420 00214 B = ACCUM 00082430 00215 GO TO 10610 00082440 00216 C 00082450 00217 C**************************************************************** 00082460 00218 C 00082470 00219 C THE REVERSE EXPONENTIATE INSTRUCTION. 00082480 00220 C 00082490 00221 C 00082500 00222 11000 B=VAR(VNUM) 00082510 00223 A=ACCUM 00082520 00224 GO TO 10710 00082530 NDT64 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-4 00225 C 00082540 00226 C**************************************************************** 00082550 00227 C 00082560 00228 C THE INITIALIZATION INSTRUCTION. 00082570 00229 C 00082580 00230 C 00082590 00231 11100 PC=RADDR 00082600 00232 ERRCT = 0 00082610 00233 FLAG=4 00082620 00234 RKCON=DT/6.D0 00082630 00235 ABCON=DT/24.D0 00082640 00236 HAFDT=DT/2.D0 00082650 00237 TOLER=DT/2.1D0 00082660 00238 DO 11110 I=1,OUTCT 00082670 00239 SUB=OAB+I-1 00082680 00240 SUB=OBJCD(SUB) 00082690 00241 IF(MOD(OBJCD(SUB+3)/2**(RUNCT-1),2).EQ.0) GO TO 11110 00082700 00242 OBJCD(SUB+6)=OBJCD(SUB+5)+2*OBJCD(SUB+1)-1 00082710 00243 REC=OBJCD(SUB+4) 00082720 00244 IF(REC.EQ.OCBND+I) GO TO 11110 00082730 00245 HERE=OBJCD(SUB+6)+1 00082740 00246 THERE=HERE+39 00082750 00247 WRITE(DISK'REC) (VAR(J),J=HERE,THERE) 00082760 00248 REC=OCBND+I 00082770 00249 READ(DISK'REC) (VAR(J),J=HERE,THERE) 00082780 00250 OBJCD(SUB+4)=REC 00082790 00251 11110 CONTINUE 00082800 00252 GO TO 10000 00082810 00253 C 00082820 00254 C**************************************************************** 00082830 00255 C 00082840 00256 C THE TIME INSTRUCTION. 00082850 00257 C 00082860 00258 C 00082870 00259 11200 IF(FLAG.NE.4.AND.(INTYP.EQ.2.OR.(INTYP.EQ.3.AND.TIME-START 00082880 00260 1 .LT.3.D0*DT))) GO TO 11250 00082890 00261 PRTBT=0 00082900 00262 PLTBT=0 00082910 00263 IF(PRTPR.EQ.0.D0) GO TO 11211 00082920 00264 IF(DABS(TIME/PRTPR-IDINT(TIME/PRTPR 00082930 00265 1+.5D0)).LE.TOLER/PRTPR) PRTBT=1 00082940 00266 11211 IF(PLTPR.EQ.0.D0) GO TO 11212 00082950 00267 IF(DABS(TIME/PLTPR-IDINT(TIME/PLTPR 00082960 00268 1+.5D0)).LE.TOLER/PLTPR) PLTBT=1 00082970 00269 11212 IF(PRTBT.EQ.1.OR.PLTBT.EQ.1) CALL NDT63 (PRTBT,PLTBT) 00082980 00270 IF(TIME.LT.STOP-TOLER) GO TO 11250 00082990 00271 PC=RERUN 00083000 00272 GO TO 10000 00083010 00273 11250 PC=LADDR 00083020 00274 ARG1=1.D0 00083030 00275 IF(INTYP.EQ.2.OR.(INTYP.EQ.3.AND.(TIME-START.LT.3.1D0*DT))) 00083040 00276 1 FLAG=MOD(FLAG,4)+1 00083050 00277 VARNM=12 00083060 00278 GO TO 11601 00083070 00279 C 00083080 00280 C**************************************************************** 00083090 NDT64 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-5 00281 C 00083100 00282 C THE RERUN INSTRUCTION. 00083110 00283 C 00083120 00284 C 00083130 00285 11300 RUNCT=RUNCT+1 00083140 00286 RERUN=RERUN+2 00083150 00287 PC=OBJST 00083160 00288 C 00083170 00289 C THE RERUN CHANGES THEMSELVES ARE MADE. 00083180 00290 C 00083190 00291 REC=RRBST+RUNCT-2 00083200 00292 READ(DISK'REC) RRUN 00083210 00293 IF(INTBT.NE.0) INTYP=INTBT 00083220 00294 IF(RBFPT.EQ.2) GO TO 10000 00083230 00295 DO 11350 I=3,RBFPT,2 00083240 00296 TO=RRUN(I) 00083250 00297 FROM=RRUN(I+1) 00083260 00298 11350 VAR(TO)=VAR(FROM) 00083270 00299 GO TO 10000 00083280 00300 C 00083290 00301 C**************************************************************** 00083300 00302 C 00083310 00303 C THE STOP INSTRUCTION. 00083320 00304 C 00083330 00305 C 00083340 00306 11400 RETURN 00083350 00307 C 00083360 00308 C**************************************************************** 00083370 00309 C 00083380 00310 C THE STMT INSTRUCTION 00083390 00311 C 00083400 00312 11500 STMT = OPRND 00083410 00313 GO TO 10000 00083420 00314 C**************************************************************** 00083430 00315 C 00083440 00316 C THE INTEGRATE INSTRUCTION. 00083450 00317 C 00083460 00318 C 00083470 00319 11600 VARNM=OBJCD(PC+1) 00083480 00320 C 00083490 00321 C**************************************************************** 00083500 00322 C 00083510 00323 C BRANCH TO THE CORRECT INTEGRATOR. 00083520 00324 C 00083530 00325 C 00083540 00326 11601 GO TO (11610,11620,11650),INTYP 00083550 00327 C 00083560 00328 C**************************************************************** 00083570 00329 C 00083580 00330 C EULER INTEGRATION-------- 00083590 00331 C 00083600 00332 C 00083610 00333 11610 ACCUM = VAR(VARNM) + DT * ARG1 00083620 00334 IGO=1 00083625 00335 GO TO 11697 00083630 00336 C 00083640 NDT64 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-6 00337 C 00083650 00338 C**************************************************************** 00083660 00339 C RUNGE-KUTTA INTEGRATION-------- 00083670 00340 C 00083680 00341 C 00083690 00342 11620 GO TO (11625,11630,11635,11640),FLAG 00083700 00343 11625 VAR(OPRND)=VAR(VARNM) 00083710 00344 VAR(OPRND+1)=ARG1 00083720 00345 ACCUM=VAR(OPRND)+HAFDT*ARG1 00083730 00346 GO TO 11699 00083740 00347 11630 VAR(OPRND+2)=ARG1 00083750 00348 ACCUM=VAR(OPRND)+HAFDT*ARG1 00083760 00349 GO TO 11699 00083770 00350 11635 VAR(OPRND+3)=ARG1 00083780 00351 ACCUM=VAR(OPRND)+DT*ARG1 00083790 00352 GO TO 11699 00083800 00353 11640 ACCUM=VAR(OPRND)+RKCON*(VAR(OPRND+1)+2.D0*VAR(OPRND+2) 00083810 00354 1+2.D0*VAR(OPRND+3)+ARG1) 00083820 00355 GO TO 11699 00083830 00356 C 00083840 00357 C**************************************************************** 00083850 00358 C 00083860 00359 C ADAMS-BASHFORTH INTEGRATION------- 00083870 00360 C 00083880 00361 C 00083890 00362 11650 IF(FLAG.NE.1) GO TO 11620 00083900 00363 COUNT=(TIME-START)/DT+1.1D0 00083910 00364 IF(COUNT.GT.3) GO TO 11670 00083920 00365 SUB=COUNT+OPRND+3 00083930 00366 VAR(SUB)=ARG1 00083940 00367 GO TO 11620 00083950 00368 11670 ACCUM=VAR(VARNM)+ABCON*(55.D0*ARG1-59.D0*VAR(OPRND+6) 00083960 00369 1+37.D0*VAR(OPRND+5)-9.D0*VAR(OPRND+4)) 00083970 00370 VAR(OPRND+4)=VAR(OPRND+5) 00083980 00371 VAR(OPRND+5)=VAR(OPRND+6) 00083990 00372 VAR(OPRND+6)=ARG1 00084000 00373 11699 IGO=1 00084010 00374 TEST=DABS(ACCUM) 00084011 00375 IF(TEST.LE.RMAX) GO TO 11698 00084012 00376 CODE=1 00084013 00377 TEST=RMAX 00084014 00378 IF(ACCUM.LT.0D0) TEST=-TEST 00084015 00379 ACCUM=TEST 00084016 00380 IGO=2 00084017 00381 GO TO 11697 00084018 00382 11698 IF(TEST.GT.RMIN.OR.TEST.EQ.0D0) GO TO 11697 00084019 00383 CODE=2 00084020 00384 ACCUM=0.D0 00084021 00385 IGO=2 00084022 00386 C 00084030 00387 C THE TIME INSTRUCTION IS NOT FOLLOWED BY A STORE. THEREFORE, 00084040 00388 C IF TIME WAS JUST INTEGRATED, THE STORE MUST BE DONE HERE 00084050 00389 C BEFORE THE NEXT INSTRUCTION IS EXECUTED. 00084060 00390 C 00084070 00391 C 00084080 00392 11697 IF(OPCOD.NE.12.AND.OPCOD.NE.28) GO TO (10000,20000),IGO 00084085 NDT64 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-7 00393 VAR(VARNM)=ACCUM 00084090 00394 IF(OPCOD.EQ.12) ACCUM=0.D0 00084100 00395 GO TO (10000,20000), IGO 00084110 00396 C 00084120 00397 C**************************************************************** 00084130 00398 C 00084140 00399 C THE ABSOLUTE VALUE FUNCTION. 00084150 00400 C 00084160 00401 C 00084170 00402 11700 ACCUM=DABS(ARG1) 00084180 00403 GO TO 10000 00084190 00404 C 00084200 00405 C**************************************************************** 00084210 00406 C 00084220 00407 C THE CLIP FUNCTION. 00084230 00408 C 00084240 00409 C 00084250 00410 11800 ACCUM=ARG1 00084260 00411 IF(ARG3.LT.ARG4) ACCUM=ARG2 00084270 00412 GO TO 10000 00084280 00413 C 00084290 00414 C**************************************************************** 00084300 00415 C 00084310 00416 C THE COSINE FUNCTION. 00084320 00417 C 00084330 00418 C 00084340 00419 11900 ACCUM=DCOS(ARG1) 00084350 00420 GO TO 10000 00084360 00421 C 00084370 00422 C**************************************************************** 00084380 00423 C 00084390 00424 C THE DELAY FUNCTION. 00084400 00425 C 00084410 00426 C 00084420 00427 12000 GO TO 10000 00084430 00428 C**************************************************************** 00084440 00429 C 00084450 00430 C THE EXP FUNCTION. 00084460 00431 C 00084470 00432 C 00084480 00433 12100 IF(ARG1 .LT. 2.3025851D0 * DFLOAT(EXPMX)) GO TO 12110 00084481 00434 CODE = 1 00084482 00435 ACCUM = RMAX 00084483 00436 GO TO 20000 00084484 00437 12110 ACCUM = DEXP(ARG1) 00084485 00438 GO TO 10000 00084486 00439 C 00084510 00440 C**************************************************************** 00084520 00441 C 00084530 00442 C THE NATURAL LOG FUNCTION. 00084540 00443 C 00084550 00444 C 00084560 00445 12200 IF(ARG1 .GT. 0.D0) GO TO 12210 00084570 00446 CODE = 5 00084580 00447 ACCUM = 0.D0 00084590 00448 GO TO 20000 00084600 NDT64 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-8 00449 12210 ACCUM = DLOG(ARG1) 00084610 00450 GO TO 10000 00084620 00451 C 00084630 00452 C**************************************************************** 00084640 00453 C 00084650 00454 C THE MAX FUNCTION. 00084660 00455 C 00084670 00456 C 00084680 00457 12300 ACCUM=ARG1 00084690 00458 IF(ARG2.GT.ARG1) ACCUM=ARG2 00084700 00459 GO TO 10000 00084710 00460 C 00084720 00461 C**************************************************************** 00084730 00462 C 00084740 00463 C THE MIN FUNCTION. 00084750 00464 C 00084760 00465 C 00084770 00466 12400 ACCUM=ARG1 00084780 00467 IF(ARG2.LT.ARG1) ACCUM=ARG2 00084790 00468 GO TO 10000 00084800 00469 C 00084810 00470 C**************************************************************** 00084820 00471 C 00084830 00472 C THE RANDOM NUMBER GENERATOR (NOISE). 00084840 00473 C 00084850 00474 C 00084860 00475 12500 IF(TIME.GT.START) GO TO 12540 00084870 00476 IF(ARG1.GT.100000.D0.OR.ARG1.LT.1.D0) ARG1=50000.D0 00084880 00477 VAR(OPRND)=ARG1 00084890 00478 12540 Z=899.D0*VAR(OPRND) 00084900 00479 I=Z/65536.D0 00084910 00480 VAR(OPRND)=Z-FLOAT(I)*65536.D0 00084920 00481 ACCUM=VAR(OPRND)/65536.D0 00084930 00482 IF(OPCOD.EQ.25) GO TO 10000 00084940 00483 C 00084950 00484 C**************************************************************** 00084960 00485 C 00084970 00486 C THE NORMALIZED RANDOM NUMBER GENERATOR (NORMN). 00084980 00487 C 00084990 00488 C 00085000 00489 X=2.D0*ACCUM-1.D0 00085010 00490 ACCUM=(((-.38709D0*X*X-.80611D0)*X*X)+(1.24056D0)*X/1.D0-X*X) 00085020 00491 1*ARG3+ARG2 00085030 00492 GO TO 10000 00085040 00493 C 00085050 00494 C**************************************************************** 00085060 00495 C 00085070 00496 C THE PULSE AND SAMPLE FUNCTIONS. 00085080 00497 C 00085090 00498 C 00085100 00499 12700 IF(TIME.NE.START) GO TO 12710 00085110 00500 IF(OPCOD.EQ.29.OR.ARG3.LT.START) GO TO 12725 00085120 00501 VAR(OPRND)=ARG3 00085130 00502 12710 ACCUM=0.D0 00085140 00503 IF(VAR(OPRND).LT.0.D0) GO TO 12750 00085150 00504 IF(VAR(OPRND)-TIME.GT.TOLER.OR.INTYP.EQ.2.AND.FLAG.NE.4)GOTO10000 00085160 NDT64 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-9 00505 12725 VAR(OPRND)=-(TIME+ARG2) 00085170 00506 VAR(OPRND+1)=ARG1 00085180 00507 ACCUM=ARG1 00085190 00508 GO TO 10000 00085200 00509 12750 IF(-VAR(OPRND).LT.TIME+TOLER) GO TO 12775 00085210 00510 ACCUM=VAR(OPRND+1) 00085220 00511 GO TO 10000 00085230 00512 12775 IF(OPCOD.EQ.29) GO TO 12725 00085240 00513 IF(ARG4.LT.TOLER) ARG4=STOP+1 00085250 00514 VAR(OPRND)=TIME+ARG4 00085260 00515 GO TO 10000 00085270 00516 C 00085280 00517 C**************************************************************** 00085290 00518 C 00085300 00519 C THE RAMP FUNCTION. 00085310 00520 C 00085320 00521 12800 IF(TIME.EQ.START) VAR(OPRND+7)=0.D0 00085330 00522 IF(TIME-ARG2.GT.TOLER) GO TO 12850 00085340 00523 ACCUM=VAR(OPRND+7) 00085350 00524 GO TO 10000 00085360 00525 12850 VARNM=OPRND+7 00085370 00526 GO TO 11601 00085380 00527 C 00085390 00528 C**************************************************************** 00085400 00529 C 00085410 00530 C THE SINE FUNCTION. 00085420 00531 C 00085430 00532 C 00085440 00533 13000 ACCUM=DSIN(ARG1) 00085450 00534 GO TO 10000 00085460 00535 C 00085470 00536 C**************************************************************** 00085480 00537 C 00085490 00538 C THE SQUARE ROOT FUNCTION. 00085500 00539 C 00085510 00540 C 00085520 00541 13100 IF(ARG1 .GE. 0.D0) GO TO 13110 00085530 00542 CODE = 6 00085540 00543 ACCUM = 0.D0 00085550 00544 GO TO 20000 00085560 00545 13110 ACCUM = DSQRT(ARG1) 00085570 00546 GO TO 10000 00085580 00547 C 00085590 00548 C**************************************************************** 00085600 00549 C 00085610 00550 C THE STEP FUNCTION. 00085620 00551 C 00085630 00552 C 00085640 00553 13200 ACCUM=0.D0 00085650 00554 IF(ARG2-TIME.LE.TOLER) ACCUM=ARG1 00085660 00555 GO TO 10000 00085670 00556 C 00085680 00557 C**************************************************************** 00085690 00558 C 00085700 00559 C THE SWITCH FUNCTION. 00085710 00560 C 00085720 NDT64 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-10 00561 C 00085730 00562 13300 ACCUM=ARG1 00085740 00563 IF(ARG3.LE.0.D0) ACCUM=ARG2 00085750 00564 GO TO 10000 00085760 00565 C 00085770 00566 C**************************************************************** 00085780 00567 C**************************************************************** 00085790 00568 C**************************************************************** 00085800 00569 C 00085810 00570 C THE TABLE FUNCTIONS: TABFL, TABHL, TABLE, AND TABND. 00085820 00571 C 00085830 00572 C 00085840 00573 C GET THE TABLE ADDRESS AND THE NO. OF ELEMENTS IN THE TABLE. 00085850 00574 C 00085860 00575 C 00085870 00576 13400 PNT=ARG1 00085880 00577 COUNT=VAR(PNT) 00085890 00578 C 00085900 00579 C 00085910 00580 C IF THERE IS ONLY ONE ELEMENT IN THE TABLE OUTPUT THAT VALUE. 00085920 00581 C 00085930 00582 C 00085940 00583 IF(COUNT.NE.1) GO TO 13410 00085950 00584 ACCUM=VAR(PNT+1) 00085960 00585 GO TO 10000 00085970 00586 C 00085980 00587 C 00085990 00588 C THE TABLE HAS MORE THAN ONE VALUE. CHECK THE INDEPENDENT 00086000 00589 C VARIABLE AGAINST THE SUPPLIED BOUNDS. IF IT IS OUT OF BOUNDS 00086010 00590 C THE RESULT IS DEPENDENT ON WHICH TABLE FUNCTION WAS USED. 00086020 00591 C 00086030 00592 C 00086040 00593 13410 OPCOD=OPCOD-33 00086050 00594 IF(ARG2.LT.ARG3) GO TO (13550,13530,13420,13560),OPCOD 00086060 00595 IF(ARG2.GT.ARG4) GO TO (13550,13540,13420,13570),OPCOD 00086070 00596 C 00086080 00597 C 00086090 00598 C MAP THE INDEPENDENT VARIABLE'S RANGE ONTO THE TABLE'S RANGE 00086100 00599 C AND SELECT THE TABLE ELEMENT WHOSE PERCENT DISPLACEMENT 00086110 00600 C FROM THE FIRST ELEMENT IS CLOSEST TO BUT NOT HIGHER THAN 00086120 00601 C THE PERCENT DISPLACEMENT OF THE INDEPENDENT VARIABLE FROM 00086130 00602 C IT'S LOWER BOUND. 00086140 00603 C 00086150 00604 C 00086160 00605 13420 DPCT=(ARG2-ARG3)/(ARG4-ARG3) 00086170 00606 I=PNT+1+IDINT(DPCT*DFLOAT(COUNT-1)) 00086180 00607 C 00086190 00608 C**************************************************************** 00086200 00609 C IF TABHL WAS REQUESTED OR THE TABLE ONLY HAS TWO ELEMENTS 00086210 00610 C THEN INTERPOLATE. 00086220 00611 C 00086230 00612 C 00086240 00613 IF(OPCOD.NE.2.AND.COUNT.NE.2) GO TO 13500 00086250 00614 IF(I.EQ.PNT+COUNT) I=I-1 00086260 00615 DISP=DPCT*DFLOAT(COUNT-1)-DFLOAT(I-PNT-1) 00086270 00616 ACCUM=DISP*(VAR(I+1)-VAR(I))+VAR(I) 00086280 NDT64 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-11 00617 GO TO 10000 00086290 00618 C 00086300 00619 C**************************************************************** 00086310 00620 C ONE OF THE THIRD ORDER TABLE FUNCTIONS WAS REQUESTED. 00086320 00621 C IF THE TABLE ONLY HAS THREE ELEMENTS THEN A SECOND ORDER 00086330 00622 C CURVE FIT IS THE BEST WE CAN DO. 00086340 00623 C 00086350 00624 C 00086360 00625 13500 IF(COUNT.NE.3) GO TO 13510 00086370 00626 I=PNT+1 00086380 00627 A=0.D0 00086390 00628 D=VAR(I+2) 00086400 00629 B=(D+VAR(I))/2.D0-VAR(I+1) 00086410 00630 C=(D-VAR(I))/2.D0+2.D0*B 00086420 00631 GO TO 13520 00086430 00632 C 00086440 00633 C**************************************************************** 00086450 00634 C 00086460 00635 C A THIRD ORDER CURVE FIT IS PERFORMED AS THE TABLE CONTAINS 00086470 00636 C A SUFFICIENT NUMBER OF ELEMENTS. FOUR ELEMENT VALUES ARE 00086480 00637 C USED INCLUDING THE ONE BEFORE THE ELEMENT PREVIOUSLY SELECTED 00086490 00638 C AND TWO AFTER THAT ELEMENT. IF THE ELEMENT SELECTED DOES NOT 00086500 00639 C HAVE ONE ELEMENT BEFORE IT OR TWO AFTER THEN THE INDEPENDENT 00086510 00640 C VARIABLE IS CLOSE TO ONE OF IT'S BOUNDS SO USE THE LAST OR 00086520 00641 C FIRST FOUR ELEMENTS DEPENDING ON WHICH BOUND IS INVOLVED. 00086530 00642 C 00086540 00643 C 00086550 00644 13510 IF(I.LT.PNT+2) I=PNT+2 00086560 00645 IF(I.GT.PNT+COUNT-2) I=PNT+COUNT-2 00086570 00646 D=VAR(I) 00086580 00647 B=(VAR(I-1)+VAR(I+1)-2.D0*D)/2.D0 00086590 00648 C=(8.D0*VAR(I+1)-7.D0*D-VAR(I+2)-4.D0*B)/6.D0 00086600 00649 A=B-C+D-VAR(I-1) 00086610 00650 13520 DISP=DPCT*DFLOAT(COUNT-1)-DFLOAT(I-PNT-1) 00086620 00651 ACCUM=((A*DISP+B)*DISP+C)*DISP+D 00086630 00652 GO TO 10000 00086640 00653 13530 ARG2=ARG3 00086650 00654 GO TO 13420 00086660 00655 13540 ARG2=ARG4 00086670 00656 GO TO 13420 00086680 00657 13550 SUB = PNT + COUNT 00086690 00658 ACCUM=(ARG2-ARG3)/(ARG4-ARG3)*(VAR(SUB)-VAR(PNT+1))+VAR(PNT+1) 00086700 00659 GO TO 10000 00086710 00660 13560 SUB = PNT + 2 00086720 00661 ACCUM=(ARG2-ARG3)/(ARG4-ARG3)*DFLOAT(COUNT-1)* 00086730 00662 1 (VAR(SUB)-VAR(SUB-1)) + VAR(SUB-1) 00086740 00663 GO TO 10000 00086750 00664 13570 SUB = PNT + COUNT 00086760 00665 ACCUM=(ARG2-ARG4)/(ARG4-ARG3)*DFLOAT(COUNT-1)* 00086770 00666 1 (VAR(SUB)-VAR(SUB-1)) + VAR(SUB) 00086780 00667 GO TO 10000 00086790 00668 C**************************************************************** 00086800 00669 C**************************************************************** 00086810 00670 C**************************************************************** 00086820 00671 C 00086840 00672 C 00086850 NDT64 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-12 00673 C 00086860 00674 C AN EXECUTION TIME ERROR HAS OCCURRED. IF IT IS THE FIRST 00086870 00675 C ERROR OF THE RUN, THEN PRINT A HEADER IDENTIFYING THE RUN. 00086880 00676 C IF 10 ERRORS HAVE OCCURRED THEN TERMINATE THE RUN. TELL THE 00086890 00677 C USER , AND BEGIN THE NEXT RUN. 00086900 00678 C 00086910 00679 C 00086920 00680 20000 IF(ERRCT .NE. 0) GO TO 20020 00086930 00681 CALL NDT78(3) 00086940 00682 WRITE(PRNTR,20010) RUNCT 00086950 00683 20010 FORMAT(/' ERRORS DURING RUN', I2,':'/) 00086960 00684 20020 ERRCT = ERRCT + 1 00086970 00685 IF(ERRCT .LE. 10) GO TO 20040 00086980 00686 CALL NDT78(3) 00086990 00687 WRITE(PRNTR,20030) 00087000 00688 20030 FORMAT(/'RUN',I2,' IS BEING TERMINATED DUE TO THE', 00087010 00689 A' EXCESSIVE NUMBER OF ERRORS.') 00087020 00690 RSTME(RUNCT) = TIME 00087030 00691 PC = RERUN 00087040 00692 GO TO 10000 00087050 00693 20040 CALL NDT78(1) 00087060 00694 CALL NDT45(STMT,ERMSG(15),1) 00087070 00695 CALL NDT44(TIME,ERMSG(30)) 00087080 00696 GO TO (20100,20200,20300,20400,20500,20600,20700,20800),CODE 00087090 00697 20100 WRITE(PRNTR,20110) ERMSG 00087100 00698 20110 FORMAT(' OVERFLOW HAS OCCURRED ',40A1) 00087110 00699 GO TO 10000 00087120 00700 20200 WRITE(PRNTR,20210) ERMSG 00087130 00701 20210 FORMAT(' UNDERFLOW HAS OCCURRED', 40A1) 00087140 00702 GO TO 10000 00087150 00703 20300 WRITE(PRNTR,20310) ERMSG 00087160 00704 20310 FORMAT(' DIVISION BY ZERO HAS OCCURRED', 40A1) 00087170 00705 GO TO 10000 00087180 00706 20400 WRITE(PRNTR,20410) ERMSG 00087190 00707 20410 FORMAT(' A NEGATIVE NUMBER IS BEING RAISED TO A', 00087200 00708 A' FRACTIONAL POWER', 40A1) 00087210 00709 GO TO 10000 00087220 00710 20500 WRITE(PRNTR,20510) ERMSG 00087230 00711 20510 FORMAT(' THE NATURAL LOG OF A NON-POSITIVE', 00087240 00712 A' NUMBER HAS BEEN REQUESTED', 40A1) 00087250 00713 GO TO 10000 00087260 00714 20600 WRITE(PRNTR,20610) ERMSG 00087270 00715 20610 FORMAT(' THE SQUARE ROOT OF A NEGATIVE NUMBER', 00087280 00716 A' HAS BEEN REQUESTED', 40A1) 00087290 00717 GO TO 10000 00087300 00718 20700 GO TO 10000 00087310 00719 20800 GO TO 10000 00087320 00720 END 00087330 EQUIVALENCED VARIABLES ( OPRND 1 VNUM 1 ) NDT64 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-13 COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 OUTPT +356 LINE +736 EXTME +1126 RSTME +1130 ACCUM +1154 VAR +1156 OBJCD +1156 DT +1202 TIME +1204 STOP +1206 START +1210 PRTPR +1212 PLTPR +1214 ARG1 +1216 ARG2 +1220 ARG3 +1222 ARG4 +1224 ARG5 +1226 PC +22 RERUN +20 LADDR +26 INTYP +13 RADDR +30 EXPMX +14 RUNCT +21 RRUN +356 INTBT +356 RRBST +47 DISK +6 OBJST +24 OUTCT +15 OAB +17 OCBND +57 PRNTR +5 RBFPT +357 SUBPROGRAMS CALLED DCOS. MOD. DLG10. NDT78 IDINT. NDT45 DFLOT. DLOG. DSIN. NDT63 NDT44 FLOAT. DEXP. DABS. DSQRT. SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] *IGO 2 RKCON 3 PRTBT 5 Z 6 OPCOD 10 .O0012 11 .O0011 12 ERRCT 13 .O0010 14 PLTBT 15 VNUM 1 DISP 16 B 20 FROM 22 FLAG 23 OPRND 1 ABCON 24 COUNT 26 SUB 27 J 30 D 31 .S0003 33 A 34 HAFDT 36 .S0000 40 THERE 41 X 42 ERMSG 44 TO 114 PNT 115 %RANGE .O0007 116 .O0006 120 TEST 121 .O0005 123 STMT 125 I 126 .O0004 127 .O0003 130 .O0002 131 .O0001 132 *DPCT 133 TOLER 134 C 136 .O0000 140 HERE 141 VARNM 142 REC 143 CODE 144 %INDEP TEMPORARIES .A0016 275 .Q0002 276 .Q0003 277 .Q0004 300 .Q0005 301 A 19# 133# 135 136 139 142 171# 174 177 178 181 190# 192 195 197 213# 223# 627# 649# 651 ABCON 19# 235# 368 ACCUM 19# 28# 67# 75 76# 94 94# 95 99 100# 104# 111 111# 133 139# 142# 145# 171 174# 176# 181# 189 191# 193# 195# 197# 205 205# 214 223 333# 345# 348# 351# 353# 368# 374 378 379# 384# 393 394# 402# 410# 411# 419# 435# 437# 447# 449# 457# 458# 466# 467# 481# 489 490# 502# 507# 510# 523# 533# 543# 545# 553# 554# 562# 563# 584# 616# 651# 658# 661# 665# ARG1 19# 31# 274# 333 344 345 347 348 350 351 353 366 368 372 402 410 419 433 437 445 449 457 458 466 467 476 476# 477 506 507 533 541 545 554 562 576 ARG2 19# 31# 411 458 467 490 505 522 554 563 594 595 605 653# 655# 658 661 665 ARG3 19# 31# 411 490 500 501 563 594 605 653 658 661 665 ARG4 19# 31# 411 513 513# 514 595 605 655 658 661 665 ARG5 19# 31# B 19# 134# 135 136 139 142 172# 175 178 181 189# 194 195 197 214# 222# 629# 630 647# 648 649 651 C 19# 630# 648# 649 651 CODE 24# 97# 103# 141# 144# 173# 376# 383# 434# 446# 542# 696 COUNT 24# 363# 364 365 577# 583 606 613 614 615 625 645 650 657 661 664 665 CRSET 22# 28# D 19# 628# 629 630 646# 647 648 649 651 DABS. 95 136 142 178 197 264 267 374 402 DCOS. 419 DEXP. 195 197 437 DFLOT. 197 433 606 615 650 661 665 DISK 24# 36# 247 249 292 DISP 19# 615# 616 650# 651 DLG10. 136 178 DLOG. 195 197 449 DPCT 605# 606 615 650 DSIN. 533 DSQRT. 545 DT 19# 31# 234 235 236 237 259 275 333 351 363 ERMSG 24# 41# 694 694# 695 695# 697 700 703 706 710 714 ERRCT 24# 232# 680 684 684# 685 EXPMX 24# 36# 137 138 179 180 433 EXTME 18# 28# FLAG 24# 233# 259 275 275# 342 362 504 FLOAT. 137 138 179 180 480 FROM 24# 297# 298 HAFDT 19# 236# 345 348 HERE 24# 245# 246 247 249 I 24# 238# 239 244 248 295# 296 297 479# 480 606# 614 614# 615 616 626# 628 629 630 644 644# 645 645# 646 647 648 649 650 IDINT. 197 264 267 606 IGO 334# 373# 380# 385# 392 395 INDEP 19# INTBT 24# 36# 293 INTYP 24# 31# 259 275 293# 326 504 J 24# 247 247# 249 249# LADDR 24# 31# 273 LINE 22# 28# MOD. 197 241 275 NDT44 695 NDT45 694 NDT63 269 NDT64 5# NDT78 681 686 693 OAB 24# 36# 239 OBJCD 22# 30# 54 55 240 241 242# 242 243 245 250# 319 OBJST 24# 36# 287 OCBND 24# 36# 244 248 OPCOD 24# 54# 57 392 394 482 500 512 593 593# 594 595 613 OPER 22# 28# OPRND 24# 31# 55# 312 343 344 345 347 348 350 351 353 365 368 370 371 372 477 478 480 481 501 503 504 505 506 509 510 514 521 523 525 OUTCT 24# 36# 238 OUTPT 22# 28# 36# PC 24# 31# 54 55 56 56# 231# 271# 273# 287# 319 691# PLTBT 24# 262# 267# 269 269# PLTPR 19# 31# 266 267 PNT 24# 576# 577 584 606 614 615 626 644 645 650 657 658 660 664 PRNTR 24# 36# 682 687 697 700 703 706 710 714 PRTBT 24# 261# 264# 269 269# PRTPR 19# 31# 263 264 PTRS 22# 28# 31# 36# RADDR 24# 31# 231 RANGE 19# RBFPT 24# 36# 294 295 REC 24# 243# 244 247 248# 249 250 291# 292 RERUN 24# 31# 271 286 286# 691 RKCON 19# 234# 353 RMAX 18# 28# 96 98 142 375 377 435 RMIN 18# 28# 102 382 RRBST 24# 36# 291 RRUN 24# 36# 292# 296 297 RSTME 18# 28# 690# RUNCT 24# 36# 241 285 285# 291 682 690 START 19# 31# 259 275 363 475 499 500 521 STMT 24# 312# 694 694# STOP 19# 31# 270 513 SUB 24# 239# 240 240# 241 242 243 245 250 365# 366 657# 658 660# 661 664# 665 SUBSC 22# 28# SYM 22# 28# TEST 19# 95# 96 98# 99 99# 100 102 136# 137 138 178# 179 180 374# 375 377# 378 378# 379 382 THERE 24# 246# 247 249 TIME 19# 31# 259 264 267 270 275 363 475 499 504 505 509 514 521 522 554 690 695 695# TITLE 22# 28# TO 24# 296# 298 TOLER 19# 237# 264 267 270 504 509 513 522 554 VAR 18# 28# 30# 31# 67 75# 94 111 134 172 190 205 213 222 247 249# 298# 298 333 343# 343 344# 345 347# 348 350# 351 353 366# 368 370# 370 371# 371 372# 393# 477# 478 480# 481 501# 503 504 505# 506# 509 510 514# 521# 523 577 584 616 628 629 630 646 647 648 649 658 661 665 VARNM 24# 277# 319# 333 343 368 393 525# VNUM 24# 31# 67 75 94 111 134 172 190 205 213 222 X 19# 489# 490 Z 19# 478# 479 480 10000P 54# 68 77 102 140 177 182 192 194 196 198 252 272 294 299 313 392 395 403 412 420 427 438 450 459 468 482 492 504 508 511 515 524 534 546 555 564 585 617 652 659 663 667 692 699 702 705 709 713 717 718 719 10100P 57 67# 10200P 57 75# 10300P 57 94# 10310P 95# 112 206 10320P 96 102# 10400P 57 111# 10500P 57 133# 10510P 135 139# 10520P 137 141# 179 10530P 138 144# 180 10600P 57 171# 10610P 173# 215 10700P 57 189# 10710P 191# 224 10720P 194 197# 10740P 194 195# 10800P 57 205# 10900P 57 213# 11000P 57 222# 11100P 57 231# 11110P 238 241 244 251# 11200P 57 259# 11211P 263 266# 11212P 266 269# 11250P 259 270 273# 11300P 57 285# 11350P 295 298# 11400P 57 306# 11500P 57 312# 11600P 57 319# 11601P 278 326# 526 11610P 326 333# 11620P 326 342# 362 367 11625P 342 343# 11630P 342 347# 11635P 342 350# 11640P 342 353# 11650P 326 362# 11670P 364 368# 11697P 335 381 382 392# 11698P 375 382# 11699P 346 349 352 355 373# 11700P 57 402# 11800P 57 410# 11900P 57 419# 12000P 57 427# 12100P 57 433# 12110P 433 437# 12200P 57 445# 12210P 445 449# 12300P 57 457# 12400P 57 466# 12500P 57 475# 12540P 475 478# 12700P 57 499# 12710P 499 502# 12725P 500 505# 512 12750P 503 509# 12775P 509 512# 12800P 57 521# 12850P 522 525# 13000P 57 533# 13100P 57 541# 13110P 541 545# 13200P 57 553# 13300P 57 562# 13400P 57 576# 13410P 583 593# 13420P 594 595 605# 654 656 13500P 613 625# 13510P 625 644# 13520P 631 650# 13530P 594 653# 13540P 595 655# 13550P 594 595 657# 13560P 594 660# 13570P 595 664# 20000P 101 105 143 146 175 392 395 436 448 544 680# 20010P 682 683# 20020P 680 684# 20030P 687 688# 20040P 685 693# 20100P 696 697# 20110P 697 698# 20200P 696 700# 20210P 700 701# 20300P 696 703# 20310P 703 704# 20400P 696 706# 20410P 706 707# 20500P 696 710# 20510P 710 711# 20600P 696 714# 20610P 714 715# 20700P 696 718# 20800P 696 719# NDT64 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00087340 00002 C PROGRAM AUTHOR - GARY PELKEY 00087350 00003 C 00087360 00004 C 00087370 00005 SUBROUTINE NDT65 00087380 00006 C 00087390 00007 C 00087400 00008 C THIS SUBROUTINE EXECUTES NDTRAN OBJECT CODE WITHOUT CHECKING 00087410 00009 C FOR CONDITIONS WHICH MIGHT CAUSE ACTUAL FORTRAN BOMBS. THE 00087420 00010 C OBJECT CODE IS ALREADY LOADED INTO THE OBJCD ARRAY SO THIS 00087430 00011 C PROGRAM SIMPLY EXECUTES THE SEQUENTIAL TWO WORD INSTRUCTIONS 00087440 00012 C UNTIL A STOP OPCODE IS EXECUTED, WHEREUPON THE PROGRAM 00087450 00013 C RETURNS. INTERMEDIATE OUTPUT VALUES ARE RETAINED BY THE 00087460 00014 C TIME COMMAND WHICH CALLS NDT63, THE OUTPUT UPDATE PROGRAM, 00087470 00015 C AT THE APPROPRIATE TIMES. RERUNS ARE HANDLED INTERNALLY 00087480 00016 C TO THIS PROGRAM BY EXECUTING THE RERUN INSTRUCTION. 00087490 00017 C 00087500 00018 C 00087510 00019 REAL*8 RMIN,RMAX,VAR(18705),EXTME,RSTME(10) 00087520 00020 REAL*8 ACCUM,TIME,DT,START,STOP,PRTPR,PLTPR,HAFDT,RKCON, 00087530 00021 1ABCON,ARG1,ARG2,ARG3,ARG4,ARG5,Z,X,RANGE,INDEP,DISP,A,B,C,D,TOLER 00087540 00022 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00087550 00023 1SUBSC(6),OUTPT(240),LINE(120),OBJCD(37410) 00087560 00024 INTEGER FLAG,OPCOD,RADDR,INTYP,PC,PRTBT,PLTBT,OPRND,VNUM, 00087570 00025 1RERUN,CRSMT,LADDR,VARNM,I,J,COUNT,SUB,PNT,RRUN(80),RUNCT, 00087580 00026 2RRBST,RBFPT,INTBT,REC,DISK,TO,FROM,OBJST,OUTCT,OAB,HERE, 00087590 00027 3THERE,OCBND 00087600 00028 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,OUTPT,LINE, 00087610 00029 1EXTME,RSTME,ACCUM,VAR 00087620 00030 EQUIVALENCE (VAR(1),OBJCD(1)) 00087630 00031 EQUIVALENCE (DT,VAR(11)),(TIME,VAR(12)),(STOP,VAR(13)), 00087640 00032 1(START,VAR(14)),(PRTPR,VAR(15)),(PLTPR,VAR(16)), 00087650 00033 2(ARG1,VAR(17)),(ARG2,VAR(18)),(ARG3,VAR(19)),(ARG4,VAR(20)), 00087660 00034 3(ARG5,VAR(21)),(OPRND,VNUM),(PC,PTRS(15)),(RADDR,PTRS(21)), 00087670 00035 4(RERUN,PTRS(13)),(LADDR,PTRS(19)),(INTYP,PTRS(8)) 00087680 00036 EQUIVALENCE (LEV,VAR(23)),(RUNCT,PTRS(14)), 00087690 00037 1(RRUN(1),OUTPT(1),INTBT),(RRBST,PTRS(36)),(RBFPT,RRUN(2)), 00087700 00038 2(DISK,PTRS(3)),(OBJST,PTRS(17)),(OUTCT,PTRS(10)), 00087710 00039 3(OAB,PTRS(12)),(OCBND,PTRS(44)) 00087720 00040 C 00087730 00041 C 00087740 00042 C STATEMENT LABEL 10000 IS RETURNED TO AFTER EACH INSTRUCTION. 00087750 00043 C THE OPCODE AND ASSOCIATED OPERAND/VNUM ARE COMPUTED, PC 00087760 00044 C IS INCREMENTED, AND A COMPUTED GO TO IS EXECUTED BASED UPON 00087770 00045 C THE OPCODE. THE PROGRAM IS SET UP SO THAT THE STATEMENT 00087780 00046 C LABEL IS ALWAYS THE OPCODE*100+10000. 00087790 00047 C 00087800 00048 C 00087810 00049 10000 OPCOD=OBJCD(PC) 00087820 00050 OPRND=OBJCD(PC+1) 00087830 00051 PC=PC+2 00087840 00052 GO TO (10100,10200,10300,10400,10500,10600,10700,10800,10900, 00087850 00053 111000,11100,11200,11300,11400,10000,11600,11700,11800, 00087860 00054 211900,12000,12100,12200,12300,12400,12500,12500,12700, 00087870 00055 312800,12700,13000,13100,13200,13300,13400,13400,13400, 00087880 00056 413400) ,OPCOD 00087890 NDT65 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C**************************************************************** 00087900 00058 C 00087910 00059 C THE LOAD INSTRUCTION. 00087920 00060 C 00087930 00061 C 00087940 00062 10100 ACCUM=VAR(VNUM) 00087950 00063 GO TO 10000 00087960 00064 C 00087970 00065 C**************************************************************** 00087980 00066 C 00087990 00067 C THE STORE INSTRUCTION. (NOTE, THE STORE ZEROS OUT ACCUM) 00088000 00068 C 00088010 00069 C 00088020 00070 10200 VAR(VNUM)=ACCUM 00088030 00071 ACCUM=0.D0 00088040 00072 GO TO 10000 00088050 00073 C 00088060 00074 C**************************************************************** 00088070 00075 C 00088080 00076 C THE ADD INSTRUCTION. 00088090 00077 C 00088100 00078 C 00088110 00079 10300 ACCUM=ACCUM+VAR(VNUM) 00088120 00080 GO TO 10000 00088130 00081 C 00088140 00082 C**************************************************************** 00088150 00083 C 00088160 00084 C THE SUBTRACT INSTRUCTION. 00088170 00085 C 00088180 00086 C 00088190 00087 10400 ACCUM=ACCUM-VAR(VNUM) 00088200 00088 GO TO 10000 00088210 00089 C 00088220 00090 C**************************************************************** 00088230 00091 C 00088240 00092 C THE MULTIPLY INSTRUCTION. 00088250 00093 C 00088260 00094 C 00088270 00095 10500 ACCUM=ACCUM*VAR(VNUM) 00088280 00096 GO TO 10000 00088290 00097 C 00088300 00098 C**************************************************************** 00088310 00099 C 00088320 00100 C THE DIVIDE INSTRUCTION. 00088330 00101 C 00088340 00102 C 00088350 00103 10600 ACCUM=ACCUM/VAR(VNUM) 00088360 00104 GO TO 10000 00088370 00105 C 00088380 00106 C**************************************************************** 00088390 00107 C 00088400 00108 C THE EXPONENTIATE INSTRUCTION. 00088410 00109 C 00088420 00110 C 00088430 00111 10700 B=ACCUM 00088440 00112 A=VAR(VNUM) 00088450 NDT65 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 10710 ACCUM = 1.D0 00088460 00114 IF (A .EQ. 0.D0) GO TO 10000 00088470 00115 ACCUM = 0.D0 00088480 00116 IF (B) 10720,10000,10740 00088490 00117 10740 ACCUM = DEXP(A*DLOG(B)) 00088492 00118 GO TO 10000 00088494 00119 10720 ACCUM=DEXP(A*DLOG(-B))*DFLOAT(1-MOD(IDINT(DABS(A)),2)*2) 00088500 00120 GO TO 10000 00088505 00121 C 00088510 00122 C**************************************************************** 00088520 00123 C 00088530 00124 C THE REVERSE SUBTRACT INSTRUCTION. 00088540 00125 C 00088550 00126 C 00088560 00127 10800 ACCUM=VAR(VNUM)-ACCUM 00088570 00128 GO TO 10000 00088580 00129 C 00088590 00130 C**************************************************************** 00088600 00131 C 00088610 00132 C THE REVERSE DIVIDE INSTRUCTION. 00088620 00133 C 00088630 00134 C 00088640 00135 10900 ACCUM=VAR(VNUM)/ACCUM 00088650 00136 GO TO 10000 00088660 00137 C 00088670 00138 C**************************************************************** 00088680 00139 C 00088690 00140 C THE REVERSE EXPONENTIATE INSTRUCTION. 00088700 00141 C 00088710 00142 C 00088720 00143 11000 B=VAR(VNUM) 00088730 00144 A=ACCUM 00088740 00145 GO TO 10710 00088750 00146 C 00088760 00147 C**************************************************************** 00088770 00148 C 00088780 00149 C THE INITIALIZATION INSTRUCTION. 00088790 00150 C 00088800 00151 C 00088810 00152 11100 PC=RADDR 00088820 00153 FLAG=4 00088830 00154 RKCON=DT/6.D0 00088840 00155 ABCON=DT/24.D0 00088850 00156 HAFDT=DT/2.D0 00088860 00157 TOLER=DT/2.1D0 00088870 00158 DO 11110 I=1,OUTCT 00088880 00159 SUB=OAB+I-1 00088890 00160 SUB=OBJCD(SUB) 00088900 00161 IF(MOD(OBJCD(SUB+3)/2**(RUNCT-1),2).EQ.0) GO TO 11110 00088910 00162 OBJCD(SUB+6)=OBJCD(SUB+5)+2*OBJCD(SUB+1)-1 00088920 00163 REC=OBJCD(SUB+4) 00088930 00164 IF(REC.EQ.OCBND+I) GO TO 11110 00088940 00165 HERE=OBJCD(SUB+6)+1 00088950 00166 THERE=HERE+39 00088960 00167 WRITE(DISK'REC) (VAR(J),J=HERE,THERE) 00088970 00168 REC=OCBND+I 00088980 NDT65 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 00169 READ(DISK'REC) (VAR(J),J=HERE,THERE) 00088990 00170 OBJCD(SUB+4)=REC 00089000 00171 11110 CONTINUE 00089010 00172 GO TO 10000 00089020 00173 C 00089030 00174 C**************************************************************** 00089040 00175 C 00089050 00176 C THE TIME INSTRUCTION. 00089060 00177 C 00089070 00178 C 00089080 00179 11200 IF(FLAG.NE.4.AND.(INTYP.EQ.2.OR.(INTYP.EQ.3.AND.TIME-START 00089090 00180 1 .LT.3.D0*DT))) GO TO 11250 00089100 00181 PRTBT=0 00089110 00182 PLTBT=0 00089120 00183 IF(PRTPR.EQ.0.D0) GO TO 11211 00089130 00184 IF(DABS(TIME/PRTPR-IDINT(TIME/PRTPR 00089140 00185 1+.5D0)).LE.TOLER/PRTPR) PRTBT=1 00089150 00186 11211 IF(PLTPR.EQ.0.D0) GO TO 11212 00089160 00187 IF(DABS(TIME/PLTPR-IDINT(TIME/PLTPR 00089170 00188 1+.5D0)).LE.TOLER/PLTPR) PLTBT=1 00089180 00189 11212 IF(PRTBT.EQ.1.OR.PLTBT.EQ.1) CALL NDT63 (PRTBT,PLTBT) 00089190 00190 IF(TIME.LT.STOP-TOLER) GO TO 11250 00089200 00191 PC=RERUN 00089210 00192 GO TO 10000 00089220 00193 11250 PC=LADDR 00089230 00194 ARG1=1.D0 00089240 00195 IF(INTYP.EQ.2.OR.(INTYP.EQ.3.AND.(TIME-START.LT.3.1D0*DT))) 00089250 00196 1 FLAG=MOD(FLAG,4)+1 00089260 00197 VARNM=12 00089270 00198 GO TO 11601 00089280 00199 C 00089290 00200 C**************************************************************** 00089300 00201 C 00089310 00202 C THE RERUN INSTRUCTION. 00089320 00203 C 00089330 00204 C 00089340 00205 11300 RUNCT=RUNCT+1 00089350 00206 RERUN=RERUN+2 00089360 00207 PC=OBJST 00089370 00208 C 00089380 00209 C THE RERUN CHANGES THEMSELVES ARE MADE. 00089390 00210 C 00089400 00211 REC=RRBST+RUNCT-2 00089410 00212 READ(DISK'REC) RRUN 00089420 00213 IF(INTBT.NE.0) INTYP=INTBT 00089430 00214 IF(RBFPT.EQ.2) GO TO 10000 00089440 00215 DO 11350 I=3,RBFPT,2 00089450 00216 TO=RRUN(I) 00089460 00217 FROM=RRUN(I+1) 00089470 00218 11350 VAR(TO)=VAR(FROM) 00089480 00219 GO TO 10000 00089490 00220 C 00089500 00221 C**************************************************************** 00089510 00222 C 00089520 00223 C THE STOP INSTRUCTION. 00089530 00224 C 00089540 NDT65 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-4 00225 C 00089550 00226 11400 RETURN 00089560 00227 C 00089570 00228 C**************************************************************** 00089580 00229 C 00089590 00230 C THE INTEGRATE INSTRUCTION. 00089600 00231 C 00089610 00232 C 00089620 00233 11600 VARNM=OBJCD(PC+1) 00089630 00234 C 00089640 00235 C 00089650 00236 C BRANCHING TO THE CORRECT INTEGRATOR. 00089660 00237 C 00089670 00238 C 00089680 00239 11601 GO TO (11610,11620,11650),INTYP 00089690 00240 C 00089700 00241 C 00089710 00242 C EULER INTEGRATION-------- 00089720 00243 C 00089730 00244 C 00089740 00245 11610 ACCUM=VAR(VARNM)+DT*ARG1 00089750 00246 GO TO 11699 00089760 00247 C 00089770 00248 C 00089780 00249 C RUNGE-KUTTA INTEGRATION-------- 00089790 00250 C 00089800 00251 C 00089810 00252 11620 GO TO (11625,11630,11635,11640),FLAG 00089820 00253 11625 VAR(OPRND)=VAR(VARNM) 00089830 00254 VAR(OPRND+1)=ARG1 00089840 00255 ACCUM=VAR(OPRND)+HAFDT*ARG1 00089850 00256 GO TO 11699 00089860 00257 11630 VAR(OPRND+2)=ARG1 00089870 00258 ACCUM=VAR(OPRND)+HAFDT*ARG1 00089880 00259 GO TO 11699 00089890 00260 11635 VAR(OPRND+3)=ARG1 00089900 00261 ACCUM=VAR(OPRND)+DT*ARG1 00089910 00262 GO TO 11699 00089920 00263 11640 ACCUM=VAR(OPRND)+RKCON*(VAR(OPRND+1)+2.D0*VAR(OPRND+2) 00089930 00264 1+2.D0*VAR(OPRND+3)+ARG1) 00089940 00265 GO TO 11699 00089950 00266 C 00089960 00267 C 00089970 00268 C ADAMS-BASHFORTH INTEGRATION------- 00089980 00269 C 00089990 00270 C 00090000 00271 11650 IF(FLAG.NE.1) GO TO 11620 00090010 00272 COUNT=(TIME-START)/DT+1.1 00090020 00273 IF(COUNT.GT.3) GO TO 11670 00090030 00274 SUB=COUNT+OPRND+3 00090040 00275 VAR(SUB)=ARG1 00090050 00276 GO TO 11620 00090060 00277 11670 ACCUM=VAR(VARNM)+ABCON*(55.D0*ARG1-59.D0*VAR(OPRND+6) 00090070 00278 1+37.D0*VAR(OPRND+5)-9.D0*VAR(OPRND+4)) 00090080 00279 VAR(OPRND+4)=VAR(OPRND+5) 00090090 00280 VAR(OPRND+5)=VAR(OPRND+6) 00090100 NDT65 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-5 00281 VAR(OPRND+6)=ARG1 00090110 00282 11699 IF(OPCOD.NE.12.AND.OPCOD.NE.28) GO TO 10000 00090120 00283 C 00090130 00284 C 00090140 00285 C THE TIME INSTRUCTION IS NOT FOLLOWED BY A STORE. THEREFORE, 00090150 00286 C IF TIME WAS JUST INTEGRATED, THE STORE MUST BE DONE HERE 00090160 00287 C BEFORE THE NEXT INSTRUCTION IS EXECUTED. 00090170 00288 C 00090180 00289 C 00090190 00290 VAR(VARNM)=ACCUM 00090200 00291 IF(OPCOD.EQ.12) ACCUM=0.D0 00090210 00292 GO TO 10000 00090220 00293 C 00090230 00294 C**************************************************************** 00090240 00295 C 00090250 00296 C THE ABSOLUTE VALUE FUNCTION. 00090260 00297 C 00090270 00298 C 00090280 00299 11700 ACCUM=DABS(ARG1) 00090290 00300 GO TO 10000 00090300 00301 C 00090310 00302 C**************************************************************** 00090320 00303 C 00090330 00304 C THE CLIP FUNCTION. 00090340 00305 C 00090350 00306 C 00090360 00307 11800 ACCUM=ARG1 00090370 00308 IF(ARG3.LT.ARG4) ACCUM=ARG2 00090380 00309 GO TO 10000 00090390 00310 C 00090400 00311 C**************************************************************** 00090410 00312 C 00090420 00313 C THE COSINE FUNCTION. 00090430 00314 C 00090440 00315 C 00090450 00316 11900 ACCUM=DCOS(ARG1) 00090460 00317 GO TO 10000 00090470 00318 C 00090480 00319 C**************************************************************** 00090490 00320 C 00090500 00321 C THE DELAY FUNCTION. 00090510 00322 C 00090520 00323 00090530 00324 00090540 00325 00090550 00326 00090560 00327 00090570 00328 00090580 00329 00090590 00330 00090600 00331 00090610 00332 C 00090620 00333 12000 GO TO 10000 00090630 00334 C**************************************************************** 00090640 00335 C 00090650 00336 C THE EXP FUNCTION. 00090660 NDT65 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-6 00337 C 00090670 00338 C 00090680 00339 12100 ACCUM=DEXP(ARG1) 00090690 00340 GO TO 10000 00090700 00341 C 00090710 00342 C**************************************************************** 00090720 00343 C 00090730 00344 C THE NATURAL LOG FUNCTION. 00090740 00345 C 00090750 00346 C 00090760 00347 12200 ACCUM=DLOG(ARG1) 00090770 00348 GO TO 10000 00090780 00349 C 00090790 00350 C**************************************************************** 00090800 00351 C 00090810 00352 C THE MAX FUNCTION. 00090820 00353 C 00090830 00354 C 00090840 00355 12300 ACCUM=ARG1 00090850 00356 IF(ARG2.GT.ARG1) ACCUM=ARG2 00090860 00357 GO TO 10000 00090870 00358 C 00090880 00359 C**************************************************************** 00090890 00360 C 00090900 00361 C THE MIN FUNCTION. 00090910 00362 C 00090920 00363 C 00090930 00364 12400 ACCUM=ARG1 00090940 00365 IF(ARG2.LT.ARG1) ACCUM=ARG2 00090950 00366 GO TO 10000 00090960 00367 C 00090970 00368 C**************************************************************** 00090980 00369 C 00090990 00370 C THE RANDOM NUMBER GENERATOR (NOISE). 00091000 00371 C 00091010 00372 C 00091020 00373 12500 IF(TIME.GT.START) GO TO 12540 00091030 00374 IF(ARG1.GT.100000.D0.OR.ARG1.LT.1.D0) ARG1=50000.D0 00091040 00375 VAR(OPRND)=ARG1 00091050 00376 12540 Z=899.D0*VAR(OPRND) 00091060 00377 I=Z/65536.D0 00091070 00378 VAR(OPRND)=Z-FLOAT(I)*65536.D0 00091080 00379 ACCUM=VAR(OPRND)/65536.D0 00091090 00380 IF(OPCOD.EQ.25) GO TO 10000 00091100 00381 C 00091110 00382 C**************************************************************** 00091120 00383 C 00091130 00384 C THE NORMALIZED RANDOM NUMBER GENERATOR (NORMN). 00091140 00385 C 00091150 00386 C 00091160 00387 X=2.D0*ACCUM-1.D0 00091170 00388 ACCUM=(((-.38709D0*X*X-.80611D0)*X*X)+(1.24056D0)*X/1.D0-X*X) 00091180 00389 1*ARG3+ARG2 00091190 00390 GO TO 10000 00091200 00391 C 00091210 00392 C**************************************************************** 00091220 NDT65 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-7 00393 C 00091230 00394 C THE PULSE AND SAMPLE FUNCTIONS. 00091240 00395 C 00091250 00396 C 00091260 00397 12700 IF(TIME.NE.START) GO TO 12710 00091270 00398 IF(ARG3.LT.0.D0) GO TO 12725 00091280 00399 VAR(OPRND)=ARG3 00091290 00400 12710 ACCUM=0.D0 00091300 00401 IF(VAR(OPRND).LT.0.D0) GO TO 12750 00091310 00402 IF(VAR(OPRND)-TIME.GT.TOLER.OR.INTYP.EQ.2.AND.FLAG.NE.4)GOTO10000 00091320 00403 12725 VAR(OPRND)=-(TIME+ARG2) 00091330 00404 VAR(OPRND+1)=ARG1 00091340 00405 ACCUM=ARG1 00091350 00406 GO TO 10000 00091360 00407 12750 IF(-VAR(OPRND).LT.TIME+TOLER) GO TO 12775 00091370 00408 ACCUM=VAR(OPRND+1) 00091380 00409 GO TO 10000 00091390 00410 12775 IF(OPCOD.EQ.29) GO TO 12725 00091400 00411 IF(ARG4.LT.TOLER) ARG4=STOP+1 00091410 00412 VAR(OPRND)=TIME+ARG4 00091420 00413 GO TO 10000 00091430 00414 C 00091440 00415 C**************************************************************** 00091450 00416 C 00091460 00417 C THE RAMP FUNCTION. 00091470 00418 C 00091480 00419 12800 IF(TIME.EQ.START) VAR(OPRND+7)=0.D0 00091490 00420 IF(TIME-ARG2.GT.TOLER) GO TO 12850 00091500 00421 ACCUM=VAR(OPRND+7) 00091510 00422 GO TO 10000 00091520 00423 12850 VARNM=OPRND+7 00091530 00424 GO TO 11601 00091540 00425 C 00091550 00426 C**************************************************************** 00091560 00427 C 00091570 00428 C THE SINE FUNCTION. 00091580 00429 C 00091590 00430 C 00091600 00431 13000 ACCUM=DSIN(ARG1) 00091610 00432 GO TO 10000 00091620 00433 C 00091630 00434 C**************************************************************** 00091640 00435 C 00091650 00436 C THE SQUARE ROOT FUNCTION. 00091660 00437 C 00091670 00438 C 00091680 00439 13100 ACCUM=DSQRT(ARG1) 00091690 00440 GO TO 10000 00091700 00441 C 00091710 00442 C**************************************************************** 00091720 00443 C 00091730 00444 C THE STEP FUNCTION. 00091740 00445 C 00091750 00446 C 00091760 00447 13200 ACCUM=0.D0 00091770 00448 IF(ARG2-TIME.LE.TOLER) ACCUM=ARG1 00091780 NDT65 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-8 00449 GO TO 10000 00091790 00450 C 00091800 00451 C**************************************************************** 00091810 00452 C 00091820 00453 C THE SWITCH FUNCTION. 00091830 00454 C 00091840 00455 C 00091850 00456 13300 ACCUM=ARG1 00091860 00457 IF(ARG3.LE.0.D0) ACCUM=ARG2 00091870 00458 GO TO 10000 00091880 00459 C 00091890 00460 C**************************************************************** 00091900 00461 C 00091910 00462 C THE TABLE FUNCTIONS: TABFL, TABHL, TABLE, AND TABND. 00091920 00463 C 00091930 00464 C 00091940 00465 C GET THE TABLE ADDRESS AND THE NO. OF ELEMENTS IN THE TABLE. 00091950 00466 C 00091960 00467 C 00091970 00468 13400 PNT=ARG1 00091980 00469 COUNT=VAR(PNT) 00091990 00470 C 00092000 00471 C 00092010 00472 C IF THERE IS ONLY ONE ELEMENT IN THE TABLE OUTPUT THAT VALUE. 00092020 00473 C 00092030 00474 C 00092040 00475 IF(COUNT.NE.1) GO TO 13410 00092050 00476 ACCUM=VAR(PNT+1) 00092060 00477 GO TO 10000 00092070 00478 C 00092080 00479 C 00092090 00480 C THE TABLE HAS MORE THAN ONE VALUE. CHECK THE INDEPENDENT 00092100 00481 C VARIABLE AGAINST THE SUPPLIED BOUNDS. IF IT IS OUT OF BOUNDS 00092110 00482 C THE RESULT IS DEPENDENT ON WHICH TABLE FUNCTION WAS USED. 00092120 00483 C 00092130 00484 C 00092140 00485 13410 OPCOD=OPCOD-33 00092150 00486 IF(ARG2.LT.ARG3) GO TO (13550,13530,13420,13560),OPCOD 00092160 00487 IF(ARG2.GT.ARG4) GO TO (13550,13540,13420,13570),OPCOD 00092170 00488 C 00092180 00489 C 00092190 00490 C MAP THE INDEPENDENT VARIABLE'S RANGE ONTO THE TABLE'S RANGE 00092200 00491 C AND SELECT THE TABLE ELEMENT WHOSE PERCENT DISPLACEMENT 00092210 00492 C FROM THE FIRST ELEMENT IS CLOSEST TO BUT NOT HIGHER THAN 00092220 00493 C THE PERCENT DISPLACEMENT OF THE INDEPENDENT VARIABLE FROM 00092230 00494 C IT'S LOWER BOUND. 00092240 00495 C 00092250 00496 C 00092260 00497 13420 DPCT=(ARG2-ARG3)/(ARG4-ARG3) 00092270 00498 I=PNT+1+IDINT(DPCT*DFLOAT(COUNT-1)) 00092280 00499 C 00092290 00500 C 00092300 00501 C IF TABHL WAS REQUESTED OR THE TABLE ONLY HAS TWO ELEMENTS 00092310 00502 C THEN INTERPOLATE. 00092320 00503 C 00092330 00504 C 00092340 NDT65 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-9 00505 IF(OPCOD.NE.2.AND.COUNT.NE.2) GO TO 13500 00092350 00506 IF(I.EQ.PNT+COUNT) I=I-1 00092360 00507 DISP=DPCT*DFLOAT(COUNT-1)-DFLOAT(I-PNT-1) 00092370 00508 ACCUM=DISP*(VAR(I+1)-VAR(I))+VAR(I) 00092380 00509 GO TO 10000 00092390 00510 C 00092400 00511 C 00092410 00512 C ONE OF THE THIRD ORDER TABLE FUNCTIONS WAS REQUESTED. 00092420 00513 C IF THE TABLE ONLY HAS THREE ELEMENTS THEN A SECOND ORDER 00092430 00514 C CURVE FIT IS THE BEST WE CAN DO. 00092440 00515 C 00092450 00516 C 00092460 00517 13500 IF(COUNT.NE.3) GO TO 13510 00092470 00518 I=PNT+1 00092480 00519 A=0.D0 00092490 00520 D=VAR(I+2) 00092500 00521 B=(D+VAR(I))/2.D0-VAR(I+1) 00092510 00522 C=(D-VAR(I))/2.D0+2.D0*B 00092520 00523 GO TO 13520 00092530 00524 C 00092540 00525 C 00092550 00526 C A THIRD ORDER CURVE FIT IS PERFORMED AS THE TABLE CONTAINS 00092560 00527 C A SUFFICIENT NUMBER OF ELEMENTS. FOUR ELEMENT VALUES ARE 00092570 00528 C USED INCLUDING THE ONE BEFORE THE ELEMENT PREVIOUSLY SELECTED 00092580 00529 C AND TWO AFTER THAT ELEMENT. IF THE ELEMENT SELECTED DOES NOT 00092590 00530 C HAVE ONE ELEMENT BEFORE IT OR TWO AFTER THEN THE INDEPENDENT 00092600 00531 C VARIABLE IS CLOSE TO ONE OF IT'S BOUNDS SO USE THE LAST OR 00092610 00532 C FIRST FOUR ELEMENTS DEPENDING ON WHICH BOUND IS INVOLVED. 00092620 00533 C 00092630 00534 C 00092640 00535 13510 IF(I.LT.PNT+2) I=PNT+2 00092650 00536 IF(I.GT.PNT+COUNT-2) I=PNT+COUNT-2 00092660 00537 D=VAR(I) 00092670 00538 B=(VAR(I-1)+VAR(I+1)-2.D0*D)/2.D0 00092680 00539 C=(8.D0*VAR(I+1)-7.D0*D-VAR(I+2)-4.D0*B)/6.D0 00092690 00540 A=B-C+D-VAR(I-1) 00092700 00541 13520 DISP=DPCT*DFLOAT(COUNT-1)-DFLOAT(I-PNT-1) 00092710 00542 ACCUM=((A*DISP+B)*DISP+C)*DISP+D 00092720 00543 GO TO 10000 00092730 00544 13530 ARG2=ARG3 00092740 00545 GO TO 13420 00092750 00546 13540 ARG2=ARG4 00092760 00547 GO TO 13420 00092770 00548 13550 SUB = PNT + COUNT 00092780 00549 ACCUM=(ARG2-ARG3)/(ARG4-ARG3)*(VAR(SUB)-VAR(PNT+1))+VAR(PNT+1) 00092790 00550 GO TO 10000 00092800 00551 13560 SUB = PNT + 2 00092810 00552 ACCUM=(ARG2-ARG3)/(ARG4-ARG3)*DFLOAT(COUNT-1)* 00092820 00553 1 (VAR(SUB)-VAR(SUB-1)) + VAR(SUB-1) 00092830 00554 GO TO 10000 00092840 00555 13570 SUB = PNT + COUNT 00092850 00556 ACCUM=(ARG2-ARG4)/(ARG4-ARG3)*DFLOAT(COUNT-1)* 00092860 00557 1 (VAR(SUB)-VAR(SUB-1)) + VAR(SUB) 00092870 00558 GO TO 10000 00092880 00559 END 00092900 NDT65 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-10 EQUIVALENCED VARIABLES ( OPRND 1 VNUM 1 ) COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 OUTPT +356 LINE +736 EXTME +1126 RSTME +1130 ACCUM +1154 VAR +1156 OBJCD +1156 DT +1202 TIME +1204 STOP +1206 START +1210 PRTPR +1212 PLTPR +1214 ARG1 +1216 ARG2 +1220 ARG3 +1222 ARG4 +1224 ARG5 +1226 PC +22 RADDR +30 RERUN +20 LADDR +26 INTYP +13 LEV +1232 RUNCT +21 RRUN +356 INTBT +356 RRBST +47 DISK +6 OBJST +24 OUTCT +15 OAB +17 OCBND +57 RBFPT +357 SUBPROGRAMS CALLED DCOS. MOD. IDINT. DFLOT. DLOG. DSIN. NDT63 FLOAT. DEXP. DABS. DSQRT. SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] RKCON 2 PRTBT 4 Z 5 OPCOD 7 .O0012 10 .O0011 11 .O0010 12 PLTBT 13 VNUM 1 DISP 14 B 16 FROM 20 FLAG 21 OPRND 1 ABCON 22 COUNT 24 SUB 25 J 26 %CRSMT D 27 .S0003 31 A 32 HAFDT 34 .S0000 36 THERE 37 X 40 TO 42 PNT 43 %RANGE .O0007 44 .O0006 46 .O0005 47 I 51 .O0004 52 .O0003 53 .O0002 54 .O0001 55 *DPCT 56 TOLER 57 C 61 .O0000 63 HERE 64 VARNM 65 REC 66 %INDEP TEMPORARIES .A0016 67 .Q0002 70 .Q0003 71 .Q0004 72 .Q0005 73 A 20# 112# 114 117 119 144# 519# 540# 542 ABCON 20# 155# 277 ACCUM 20# 28# 62# 70 71# 79 79# 87 87# 95 95# 103 103# 111 113# 115# 117# 119# 127 127# 135 135# 144 245# 255# 258# 261# 263# 277# 290 291# 299# 307# 308# 316# 339# 347# 355# 356# 364# 365# 379# 387 388# 400# 405# 408# 421# 431# 439# 447# 448# 456# 457# 476# 508# 542# 549# 552# 556# ARG1 20# 31# 194# 245 254 255 257 258 260 261 263 275 277 281 299 307 316 339 347 355 356 364 365 374 374# 375 404 405 431 439 448 456 468 ARG2 20# 31# 308 356 365 388 403 420 448 457 486 487 497 544# 546# 549 552 556 ARG3 20# 31# 308 388 398 399 457 486 497 544 549 552 556 ARG4 20# 31# 308 411 411# 412 487 497 546 549 552 556 ARG5 20# 31# B 20# 111# 116 117 119 143# 521# 522 538# 539 540 542 C 20# 522# 539# 540 542 COUNT 24# 272# 273 274 469# 475 498 505 506 507 517 536 541 548 552 555 556 CRSET 22# 28# CRSMT 24# D 20# 520# 521 522 537# 538 539 540 542 DABS. 119 184 187 299 DCOS. 316 DEXP. 117 119 339 DFLOT. 119 498 507 541 552 556 DISK 24# 36# 167 169 212 DISP 20# 507# 508 541# 542 DLOG. 117 119 347 DPCT 497# 498 507 541 DSIN. 431 DSQRT. 439 DT 20# 31# 154 155 156 157 179 195 245 261 272 EXTME 19# 28# FLAG 24# 153# 179 195 195# 252 271 402 FLOAT. 378 FROM 24# 217# 218 HAFDT 20# 156# 255 258 HERE 24# 165# 166 167 169 I 24# 158# 159 164 168 215# 216 217 377# 378 498# 506 506# 507 508 518# 520 521 522 535 535# 536 536# 537 538 539 540 541 IDINT. 119 184 187 498 INDEP 20# INTBT 24# 36# 213 INTYP 24# 31# 179 195 213# 239 402 J 24# 167 167# 169 169# LADDR 24# 31# 193 LEV 36# LINE 22# 28# MOD. 119 161 195 NDT63 189 NDT65 5# OAB 24# 36# 159 OBJCD 22# 30# 49 50 160 161 162# 162 163 165 170# 233 OBJST 24# 36# 207 OCBND 24# 36# 164 168 OPCOD 24# 49# 52 282 291 380 410 485 485# 486 487 505 OPER 22# 28# OPRND 24# 31# 50# 253 254 255 257 258 260 261 263 274 277 279 280 281 375 376 378 379 399 401 402 403 404 407 408 412 419 421 423 OUTCT 24# 36# 158 OUTPT 22# 28# 36# PC 24# 31# 49 50 51 51# 152# 191# 193# 207# 233 PLTBT 24# 182# 187# 189 189# PLTPR 20# 31# 186 187 PNT 24# 468# 469 476 498 506 507 518 535 536 541 548 549 551 555 PRTBT 24# 181# 184# 189 189# PRTPR 20# 31# 183 184 PTRS 22# 28# 31# 36# RADDR 24# 31# 152 RANGE 20# RBFPT 24# 36# 214 215 REC 24# 163# 164 167 168# 169 170 211# 212 RERUN 24# 31# 191 206 206# RKCON 20# 154# 263 RMAX 19# 28# RMIN 19# 28# RRBST 24# 36# 211 RRUN 24# 36# 212# 216 217 RSTME 19# 28# RUNCT 24# 36# 161 205 205# 211 START 20# 31# 179 195 272 373 397 419 STOP 20# 31# 190 411 SUB 24# 159# 160 160# 161 162 163 165 170 274# 275 548# 549 551# 552 555# 556 SUBSC 22# 28# SYM 22# 28# THERE 24# 166# 167 169 TIME 20# 31# 179 184 187 190 195 272 373 397 402 403 407 412 419 420 448 TITLE 22# 28# TO 24# 216# 218 TOLER 20# 157# 184 187 190 402 407 411 420 448 VAR 19# 28# 30# 31# 36# 62 70# 79 87 95 103 112 127 135 143 167 169# 218# 218 245 253# 253 254# 255 257# 258 260# 261 263 275# 277 279# 279 280# 280 281# 290# 375# 376 378# 379 399# 401 402 403# 404# 407 408 412# 419# 421 469 476 508 520 521 522 537 538 539 540 549 552 556 VARNM 24# 197# 233# 245 253 277 290 423# VNUM 24# 31# 62 70 79 87 95 103 112 127 135 143 X 20# 387# 388 Z 20# 376# 377 378 10000P 49# 52 63 72 80 88 96 104 114 116 118 120 128 136 172 192 214 219 282 292 300 309 317 333 340 348 357 366 380 390 402 406 409 413 422 432 440 449 458 477 509 543 550 554 558 10100P 52 62# 10200P 52 70# 10300P 52 79# 10400P 52 87# 10500P 52 95# 10600P 52 103# 10700P 52 111# 10710P 113# 145 10720P 116 119# 10740P 116 117# 10800P 52 127# 10900P 52 135# 11000P 52 143# 11100P 52 152# 11110P 158 161 164 171# 11200P 52 179# 11211P 183 186# 11212P 186 189# 11250P 179 190 193# 11300P 52 205# 11350P 215 218# 11400P 52 226# 11600P 52 233# 11601P 198 239# 424 11610P 239 245# 11620P 239 252# 271 276 11625P 252 253# 11630P 252 257# 11635P 252 260# 11640P 252 263# 11650P 239 271# 11670P 273 277# 11699P 246 256 259 262 265 282# 11700P 52 299# 11800P 52 307# 11900P 52 316# 12000P 52 333# 12100P 52 339# 12200P 52 347# 12300P 52 355# 12400P 52 364# 12500P 52 373# 12540P 373 376# 12700P 52 397# 12710P 397 400# 12725P 398 403# 410 12750P 401 407# 12775P 407 410# 12800P 52 419# 12850P 420 423# 13000P 52 431# 13100P 52 439# 13200P 52 447# 13300P 52 456# 13400P 52 468# 13410P 475 485# 13420P 486 487 497# 545 547 13500P 505 517# 13510P 517 535# 13520P 523 541# 13530P 486 544# 13540P 487 546# 13550P 486 487 548# 13560P 486 551# 13570P 487 555# NDT65 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00092910 00002 C PROGRAM AUTHOR - GARY PELKEY 00092920 00003 C 00092930 00004 C 00092940 00005 SUBROUTINE NDT66 00092950 00006 C 00092960 00007 C 00092970 00008 C THIS PROGRAM, THE OPTIONS PROCESSOR, GIVES THE USER A 00092980 00009 C SUMMARY OF ERRORS FOR HIS PROGRAM, A LISTING AND COUNT OF 00092990 00010 C EACH CARD TYPE IN THE PROGRAM, AND A LISTING OF THE VARIOUS 00093000 00011 C OPTIONS CURRENTLY IN EFFECT. 00093010 00012 C 00093020 00013 C 00093030 00014 REAL*8 RMIN,RMAX,LITBL(8192) 00093040 00015 REAL SECND(3),THIRD(2,3),OUT(12),OPTS(3,2,12),TYPE1(19),TYPE2(19) 00093050 00016 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00093060 00017 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00093070 00018 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00093080 00019 3SYMTB(5,4096) 00093090 00020 INTEGER LINCT,STMTS,PGMND,STPGM,SUM,WARNS,ERRS,CRITS,INTYP 00093100 00021 INTEGER I,TRDPT,BAD(3),FIRST(3),J,K,PTR,BIT,OPTNS,OUTPT,PRNTR 00093110 00022 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00093120 00023 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00093130 00024 2SYMTB,LITBL 00093140 00025 EQUIVALENCE (LINCT,PTRS(5)),(PGMND,PTRS(23)),(STPGM,PTRS(2 00093150 00026 1 1)),(WARNS,PTRS(11)),(ERRS,PTRS(12)),(CRITS,PTRS(13)), 00093160 00027 2(BAD(1),PTRS(11)),(OPTNS,PTRS(7)),(INTYP,PTRS(8)) 00093170 00028 3,(PRNTR,PTRS(2)) 00093180 00029 DATA FIRST /'W','E','C'/ 00093190 00030 DATA SECND /'ARNI','RROR','RITI'/ 00093200 00031 DATA THIRD /'NGS ','NG ','S ',' ','CALS','CAL '/ 00093210 00032 DATA TYPE1 /'T ','C ','PARM','N ','L ','A ','R ', 00093220 00033 1'S ','X ','* ','NOTE','PRIN','PLOT','RERU','MACR', 00093230 00034 2'MEND','EXPN','DEF ','TITL'/ 00093240 00035 DATA TYPE2 /' ',' ',' ',' ',' ',' ',' ', 00093250 00036 1' ',' ',' ',' ','T ',' ','N ','O ', 00093260 00037 2' ','D ',' ','E '/ 00093270 00038 DATA OPTS /'NOCH','ECK ',' ','CHEC','K ',' ','NOSY','STEM',00093280 00039 1' ','SYST','EM ',' ','NODO','CUME','NT ','DOCU', 00093290 00040 2'MENT',' ','WIDE',' ',' ','NARR','OW ',' ', 00093300 00041 3'STAT','S ',' ','A JO','KE I','T IS','GO ',' ', 00093310 00042 4' ','NOGO',' ',' ','NOSY','MBOL',' ','SYMB', 00093320 00043 5'OL ',' ','NOXR','EF ',' ','XREF',' ',' ', 00093330 00044 6'WARN',' ',' ','NOWA','RN ',' ','NOOB','JECT', 00093340 00045 7' ','OBJE','CT ',' ','SOUR','CE ',' ','NOSO', 00093350 00046 8'URCE',' ','NOTI','ME ',' ','TIME',' ',' '/ 00093360 00047 C 00093370 00048 C 00093380 00049 C WRITING OUT THE HEADING. 00093390 00050 C 00093400 00051 C 00093410 00052 LINCT=-1 00093420 00053 CALL NDT57 (5) 00093430 00054 WRITE(PRNTR,200) 00093440 00055 WRITE(PRNTR,100) 00093450 00056 100 FORMAT(1X) 00093460 NDT66 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 200 FORMAT(5X,'* * * S T A T S A N D O P T I O N S *', 00093470 00058 1' * *') 00093480 00059 C 00093490 00060 C 00093500 00061 C COMPUTING AND WRITING OUT THE NUMBER OF SOURCE STATEMENTS. 00093510 00062 C 00093520 00063 C 00093530 00064 STMTS=(PGMND-STPGM+1)/9 00093540 00065 WRITE(PRNTR,300) STMTS 00093550 00066 300 FORMAT(5X,I4,' SOURCE STATEMENTS') 00093560 00067 WRITE(PRNTR,100) 00093570 00068 C 00093580 00069 C 00093590 00070 C A SUMMARY OF ERRORS IS GIVEN. IF NO ERRORS HAVE BEEN 00093600 00071 C DETECTED, A MESSAGE TO THAT EFFECT IS GIVEN AND THE SUMMARY 00093610 00072 C IS SKIPPED. 00093620 00073 C 00093630 00074 C 00093640 00075 SUM=WARNS+ERRS+CRITS 00093650 00076 IF(SUM-1) 900,350,360 00093660 00077 350 WRITE(PRNTR,355) SUM 00093670 00078 355 FORMAT(5X,I4,' DIAGNOSTIC MESSAGE') 00093680 00079 GO TO 390 00093690 00080 360 WRITE(PRNTR,365) SUM 00093700 00081 365 FORMAT(5X,I4,' DIAGNOSTIC MESSAGES') 00093710 00082 390 WRITE(PRNTR,100) 00093720 00083 DO 700 I=1,3 00093730 00084 TRDPT=1 00093740 00085 IF(BAD(I)-1) 700,400,500 00093750 00086 400 TRDPT=2 00093760 00087 500 WRITE(PRNTR,600) BAD(I),FIRST(I),SECND(I),THIRD(TRDPT,I) 00093770 00088 WRITE(PRNTR,100) 00093780 00089 600 FORMAT(11X,I3,1X,A1,A4,A4) 00093790 00090 700 CONTINUE 00093800 00091 GO TO 1000 00093810 00092 900 WRITE(PRNTR,950) 00093820 00093 950 FORMAT(7X,'NO DIAGNOSTIC MESSAGES') 00093830 00094 WRITE(PRNTR,100) 00093840 00095 1000 WRITE(PRNTR,100) 00093850 00096 C 00093860 00097 C 00093870 00098 C A SUMMARY OF THE TYPES AND HOW MANY OF EACH TYPE OF CARD 00093880 00099 C IN THE USERS PROGRAM IS GIVEN. 00093890 00100 C 00093900 00101 C 00093910 00102 WRITE(PRNTR,1100) 00093920 00103 1100 FORMAT(6X,'CARD TYPE OCCURRENCE') 00093930 00104 WRITE(PRNTR,100) 00093940 00105 DO 2000 I=1,19 00093950 00106 IF(TYPCT(I).EQ.0) GO TO 2000 00093960 00107 WRITE(PRNTR,1500) TYPE1(I),TYPE2(I),TYPCT(I) 00093970 00108 1500 FORMAT(8X,A4,A4,8X,I4) 00093980 00109 2000 CONTINUE 00093990 00110 IF(TYPCT(20).EQ.0) GO TO 3000 00094000 00111 WRITE(PRNTR,2500) TYPCT(20) 00094010 00112 2500 FORMAT(8X,'UNRECOGNIZED',5X,I3) 00094020 NDT66 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 3000 WRITE(PRNTR,100) 00094030 00114 WRITE(PRNTR,100) 00094040 00115 C 00094050 00116 C 00094060 00117 C A LISTING OF WHICH OPTIONS ARE IN EFFECT OR NOT IN EFFECT 00094070 00118 C IS GIVEN IN BLOCKED FORM. 00094080 00119 C 00094090 00120 C 00094100 00121 WRITE(PRNTR,3100) 00094110 00122 3100 FORMAT(6X,'OPTIONS IN EFFECT:') 00094120 00123 WRITE(PRNTR,100) 00094130 00124 DO 5000 I=1,3 00094140 00125 DO 4000 J=1,4 00094150 00126 PTR=4*(I-1)+J 00094160 00127 BIT=MOD(OPTNS/2**(PTR-1),2) 00094170 00128 DO 4000 K=1,3 00094180 00129 OUTPT=3*(J-1)+K 00094190 00130 4000 OUT(OUTPT)=OPTS(K,BIT+1,PTR) 00094200 00131 4500 FORMAT(8X,12A4) 00094210 00132 5000 WRITE(PRNTR,4500) OUT 00094220 00133 WRITE(PRNTR,100) 00094230 00134 WRITE(PRNTR,100) 00094240 00135 C 00094250 00136 C 00094260 00137 C FINALLY, THE INTEGRATION TYPE BEING USED IN THE FIRST RUN 00094270 00138 C IS LISTED. 00094280 00139 C 00094290 00140 C 00094300 00141 WRITE(PRNTR,6000) 00094310 00142 WRITE(PRNTR,100) 00094320 00143 6000 FORMAT(6X,'INTEGRATION METHOD:') 00094330 00144 GO TO (6100,6200,6300),INTYP 00094340 00145 6100 WRITE(PRNTR,6150) 00094350 00146 6150 FORMAT(11X,'EULER LOWER SUM') 00094360 00147 GO TO 7000 00094370 00148 6200 WRITE(PRNTR,6250) 00094380 00149 6250 FORMAT(11X,'FOURTH ORDER RUNGE-KUTTA') 00094390 00150 GO TO 7000 00094400 00151 6300 WRITE(PRNTR,6350) 00094410 00152 6350 FORMAT(11X,'ADAMS-BASHFORTH PREDICTOR') 00094420 00153 7000 WRITE(PRNTR,100) 00094430 00154 WRITE(PRNTR,100) 00094440 00155 RETURN 00094450 00156 END 00094460 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 NDT66 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 LINCT +10 PGMND +32 STPGM +30 WARNS +16 ERRS +17 CRITS +20 BAD +16 OPTNS +12 INTYP +13 PRNTR +5 SUBPROGRAMS CALLED MOD. NDT57 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] OPTS 1 TRDPT 111 PTR 112 K 113 STMTS 114 TYPE2 115 .R0000 140 BIT 141 J 142 TYPE1 143 .S0004 166 SUM 167 .S0003 170 .S0002 171 .S0001 172 .S0000 173 OUTPT 174 SECND 175 .O0006 200 I 201 .O0004 202 .O0003 203 OUT 204 FIRST 220 THIRD 223 TEMPORARIES .A0016 363 .Q0001 364 BAD 21# 25# 85 87 BIT 21# 127# 130 CARD1 16# 22# CARD2 16# 22# CRITS 20# 25# 75 CRSET 16# 22# DEF 16# 22# EQCHN 16# 22# ERROR 16# 22# ERRS 20# 25# 75 FCTN 16# 22# FIRST 21# 29# 87 I 21# 83# 85 87 105# 106 107 124# 126 INTYP 20# 25# 144 J 21# 125# 126 129 K 21# 128# 129 130 LINCT 20# 25# 52# LITBL 14# 22# MOD. 127 NDT57 53 NDT66 5# OBJCD 16# 22# OPER 16# 22# OPTNS 21# 25# 127 OPTS 15# 38# 130 OUT 15# 130# 132 OUTPT 21# 129# 130 PGMND 20# 25# 64 PRNTR 21# 25# 54 55 65 67 77 80 82 87 88 92 94 95 102 104 107 111 113 114 121 123 132 133 134 141 142 145 148 151 153 154 PTR 21# 126# 127 130 PTRS 16# 22# 25# RMAX 14# 22# RMIN 14# 22# SECND 15# 30# 87 STMTS 20# 64# 65 STPGM 20# 25# 64 SUBSC 16# 22# SUM 20# 75# 76 77 80 SYM 16# 22# SYMTB 16# 22# THIRD 15# 31# 87 TITLE 16# 22# TMAP 16# 22# TOKEN 16# 22# TRDPT 21# 84# 86# 87 TYPCT 16# 22# 106 107 110 111 TYPE1 15# 32# 107 TYPE2 15# 35# 107 WARNS 20# 25# 75 XREF 16# 22# 1000P 91 95# 100P 55 56# 67 82 88 94 95 104 113 114 123 133 134 142 153 154 1100P 102 103# 1500P 107 108# 2000P 105 106 109# 200P 54 57# 2500P 111 112# 3000P 110 113# 300P 65 66# 3100P 121 122# 350P 76 77# 355P 77 78# 360P 76 80# 365P 80 81# 390P 79 82# 4000P 125 128 130# 400P 85 86# 4500P 131# 132 5000P 124 132# 500P 85 87# 6000P 141 143# 600P 87 89# 6100P 144 145# 6150P 145 146# 6200P 144 148# 6250P 148 149# 6300P 144 151# 6350P 151 152# 7000P 147 150 153# 700P 83 85 90# 900P 76 92# 950P 92 93# NDT66 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00094470 00002 C PROGRAM AUTHOR - GARY PELKEY 00094480 00003 C 00094490 00004 C 00094500 00005 SUBROUTINE NDT67 (SRTPT) 00094510 00006 C 00094520 00007 C 00094530 00008 C THIS SUBROUTINE PRODUCES A SYMBOL TABLE LISTING. A TAG SORT 00094540 00009 C HAS ALREADY BEEN PERFORMED ON THE SYMBOLS TO GET THEM IN 00094550 00010 C ALPHABETICAL ORDER. THE TAGS ARE POINTERS TO THE SYMBOL 00094560 00011 C TABLE AND ARE LOCATED IN THE SORT ARRAY FROM 1 TO SRTPT. 00094570 00012 C BY UNPACKING THE VARIABLES ENTRY INTO THE SYM ARRAY, ALL 00094580 00013 C THE INFORMATION IS PRESENT TO PRINT OUT THE VARIABLE'S 00094590 00014 C NAME, NUMBER, TYPE AND OUTPUT REQUEST. 00094600 00015 C 00094610 00016 C 00094620 00017 REAL*8 RMIN,RMAX,LITBL(8192) 00094630 00018 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00094640 00019 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00094650 00020 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00094660 00021 3SYMTB(5,4096) 00094670 00022 INTEGER LINCT,TAG,TYPE,SMART,NAME(6),J,VNUM,SRTPT,PRNTR, 00094680 00023 1SORT(16384) 00094690 00024 REAL TNAME(4,8),REQST(4,4) 00094700 00025 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00094710 00026 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00094720 00027 2SYMTB,LITBL 00094730 00028 EQUIVALENCE (LINCT,PTRS(5)),(TYPE,SYM(7)),(NAME(1),SYM(1)) 00094740 00029 1,(VNUM,SYM(14)),(PRNTR,PTRS(2)),(LITBL(1),SORT(1)) 00094750 00030 DATA TNAME /' ',' TA','BLE ',' ',' ','CONS','TANT', 00094760 00031 1' ',' ','PARA','METE','R ',' ',' ',' ', 00094770 00032 2' ',' ',' LE','VEL ',' ',' ','AUXI','LIAR', 00094780 00033 3'Y ',' ',' RA','TE ',' ',' SU','PPLE','MENT', 00094790 00034 4'ARY '/ 00094800 00035 DATA REQST /' ',' ',' ',' ',' ','PRIN','T ', 00094810 00036 1' ',' ',' PLO','T ',' ','PRIN','T AN','D PL', 00094820 00037 2'OT '/ 00094830 00038 C 00094840 00039 C 00094850 00040 C PAGING IS FORCED BY SETTING LINCT TO -1 AND CALLING NDT57. 00094860 00041 C THE HEADING IS PRINTED OUT. 00094870 00042 C 00094880 00043 C 00094890 00044 LINCT=-1 00094900 00045 CALL NDT57 (4) 00094910 00046 WRITE(PRNTR,700) 00094920 00047 WRITE(PRNTR,800) 00094930 00048 WRITE(PRNTR,900) 00094940 00049 WRITE(PRNTR,800) 00094950 00050 700 FORMAT(5X,'* * * * * * S Y M B O L T A B L E *', 00094960 00051 1' * * * * *') 00094970 00052 800 FORMAT(1X) 00094980 00053 900 FORMAT(5X,'VARIABLE NAME VARIABLE TYPE OUTPUT REQ', 00094990 00054 1'UEST VARIABLE NUMBER') 00095000 00055 C 00095010 00056 C 00095020 NDT67 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C THE TITLES AND HEADINGS HAVE BEEN PRINTED OUT AND ALL THAT 00095030 00058 C REMAINS IS TO LOOP FROM 1 TO SRTPT, FORMAT THE OUTPUT FOR 00095040 00059 C EACH VARIABLE, AND WRITE IT OUT. 00095050 00060 C 00095060 00061 C 00095070 00062 DO 2000 I=1,SRTPT 00095080 00063 TAG=SORT(I) 00095090 00064 CALL NDT41 (SYMTB(1,TAG)) 00095100 00065 SMART=SYM(9)*2+SYM(8)+1 00095110 00066 2000 WRITE(PRNTR,3000) NAME,(TNAME(J,TYPE),J=1,4),(REQST(J,SMART 00095120 00067 1),J=1,4),VNUM 00095130 00068 3000 FORMAT(9X,6A1,5X,4A4,3X,4A4,8X,I4) 00095140 00069 RETURN 00095150 00070 END 00095170 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 LINCT +10 TYPE +337 NAME +331 VNUM +346 PRNTR +5 SORT +52220 SUBPROGRAMS CALLED NDT57 NDT41 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] TAG 1 SMART 2 REQST 3 TNAME 23 J 63 .S0000 64 *I 65 SRTPT 66 TEMPORARIES .A0016 133 .Q0000 134 .Q0001 135 CARD1 18# 25# CARD2 18# 25# CRSET 18# 25# DEF 18# 25# EQCHN 18# 25# ERROR 18# 25# FCTN 18# 25# I 62# 63 J 22# 66 66# LINCT 22# 28# 44# LITBL 17# 25# 28# NAME 22# 28# 66 NDT41 64 NDT57 45 NDT67 5# OBJCD 18# 25# OPER 18# 25# PRNTR 22# 28# 46 47 48 49 66 PTRS 18# 25# 28# REQST 24# 35# 66 RMAX 17# 25# RMIN 17# 25# SMART 22# 65# 66 SORT 22# 28# 63 SRTPT 5# 22# 62 SUBSC 18# 25# SYM 18# 25# 28# 65 SYMTB 18# 25# 64 64# TAG 22# 63# 64 TITLE 18# 25# TMAP 18# 25# TNAME 24# 30# 66 TOKEN 18# 25# TYPCT 18# 25# TYPE 22# 28# 66 VNUM 22# 28# 66 XREF 18# 25# 2000P 62 66# 3000P 66 68# 700P 46 50# 800P 47 49 52# 900P 48 53# NDT67 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00095180 00002 C PROGRAM AUTHOR - GARY PELKEY 00095190 00003 C 00095200 00004 C 00095210 00005 SUBROUTINE NDT68 (SRTPT) 00095220 00006 C 00095230 00007 C 00095240 00008 C THIS ROUTINE PERFORMS A CROSS REFERENCE LISTING ON ALL 00095250 00009 C THE VARIABLES DEFINED IN THE USERS PROGRAM. ITS OUTPUT 00095260 00010 C IS IN THE FORM OF A LIST WHICH CONTAINS THE VARIABLE'S 00095270 00011 C NAME, THE STATEMENT NUMBER IT WAS DEFINED IN, AND THE 00095280 00012 C STATEMENT NUMBERS OF ALL THE STATEMENTS IN WHICH IT IS 00095290 00013 C REFERENCED. 00095300 00014 C 00095310 00015 C 00095320 00016 REAL*8 RMIN,RMAX,LITBL(8192) 00095330 00017 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00095340 00018 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00095350 00019 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00095360 00020 3SYMTB(5,4096) 00095370 00021 INTEGER LINCT,PRNTR,SETPT,I,SRTPT,TAG,J,OUT(120),BLANK, 00095380 00022 1RECNO,DISK,LOC,SUB,NUM(10),FIRST,LAST,REFPT,RFCPT,DIST, 00095390 00023 2START,STOP,FLAG,PNT,PNT2,TLIMT,REF,SORT(16384),VNUM, 00095400 00024 3DEFBT,USDBT 00095410 00025 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00095420 00026 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00095430 00027 2SYMTB,LITBL 00095440 00028 EQUIVALENCE (LINCT,PTRS(5)),(PRNTR,PTRS(2)),(BLANK,CRSET(1)), 00095450 00029 1(RECNO,SYM(15)),(DISK,PTRS(3)),(NUM(1),CRSET(30)), 00095460 00030 2(REFPT,XREF(1)),(RFCPT,XREF(2)),(TLIMT,PTRS(33)),(SORT(1), 00095470 00031 3LITBL(1)),(VNUM,SYM(14)),(DEFBT,SYM(11)),(USDBT,SYM(10)), 00095480 00032 4(OUT(1),OBJCD(1)) 00095490 00033 C 00095500 00034 C 00095510 00035 C THE TITLE, HEADING, AND BLANK LINES ARE PRINTED. 00095520 00036 C 00095530 00037 C 00095540 00038 LINCT=-1 00095550 00039 CALL NDT57 (4) 00095560 00040 WRITE(PRNTR,200) 00095570 00041 WRITE(PRNTR,300) 00095580 00042 200 FORMAT(5X,'* * * * * C R O S S R E F E R E N C', 00095590 00043 1' E * * * * *'/) 00095600 00044 300 FORMAT(5X,'VARIABLE NAME DEFINITION REFERENCES'/) 00095610 00045 C 00095620 00046 C 00095630 00047 C MAINLINE ITERATIVE PROCESSING IS BEGUN. 00095640 00048 C 00095650 00049 C 00095660 00050 SETPT=26 00095670 00051 DO 5000 I=1,SRTPT 00095680 00052 TAG=SORT(I) 00095690 00053 CALL NDT41 (SYMTB(1,TAG)) 00095700 00054 C 00095710 00055 C 00095720 00056 C THE LISTING OF THIS VARIABLE IS SUPPRESSED IF IT HAS NOT 00095730 NDT68 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C BEEN DEFINED IN AN EQUATION. 00095740 00058 C 00095750 00059 C 00095760 00060 IF(DEFBT.EQ.0) GO TO 5000 00095770 00061 C 00095780 00062 C 00095790 00063 C THE OUTPUT BUFFER IS BLANKED OUT. 00095800 00064 C 00095810 00065 C 00095820 00066 DO 400 J=1,TLIMT 00095830 00067 400 OUT(J)=BLANK 00095840 00068 C 00095850 00069 C 00095860 00070 C THE VARIABLE'S NAME IS MOVED INTO THE NAME FIELD. 00095870 00071 C 00095880 00072 C 00095890 00073 DO 500 J=1,6 00095900 00074 500 OUT(J+8)=SYM(J) 00095910 00075 C 00095920 00076 C 00095930 00077 C THE CROSS REFERENCE INFORMATION FOR THIS VARIABLE IS MOVED 00095940 00078 C INTO MEMORY FROM DISK. 00095950 00079 C 00095960 00080 C 00095970 00081 READ(DISK'RECNO+7) XREF 00095980 00082 C 00095990 00083 C 00096000 00084 C THE STATEMENT DEFINITION NUMBER IS PLACED INTO ITS FIELD. 00096010 00085 C THIS STEP IS SKIPPED IF THE VARIABLE IS TIME. 00096020 00086 C 00096030 00087 C 00096040 00088 IF(VNUM.EQ.12) GO TO 600 00096050 00089 CALL NDT45 (XREF(3),OUT(25),1) 00096060 00090 C 00096070 00091 C 00096080 00092 C BRING ALL REFERENCES INTO SORT STARTING AFTER SRTPT IF THERE 00096090 00093 C ARE ANY (USDBT=1). OTHERWISE SIMPLY WRITE OUT THE NAME AND 00096100 00094 C THE STATEMENT DEFINITION NUMBER AND PROCESS THE NEXT VARIABLE. 00096110 00095 C 00096120 00096 C 00096130 00097 600 IF(USDBT.EQ.0) GO TO 4900 00096140 00098 FIRST=SRTPT+1 00096150 00099 LAST=SRTPT 00096160 00100 900 DO 1000 J=4,REFPT 00096170 00101 LAST=LAST+1 00096180 00102 1000 SORT(LAST)=XREF(J) 00096190 00103 IF(RFCPT.EQ.0) GO TO 3000 00096200 00104 READ(DISK'RFCPT) XREF 00096210 00105 GO TO 900 00096220 00106 C 00096230 00107 C 00096240 00108 C THE REFERENCES ARE NOW PLACED IN THE OUT ARRAY AND 00096250 00109 C THE ARRAY IS PRINTED OUT WHEN IT IS FILLED UP TO 'TLIMT'. 00096260 00110 C 00096270 00111 C 00096280 00112 3000 PNT=SETPT 00096290 NDT68 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 DO 4000 REF=FIRST,LAST 00096300 00114 PNT=PNT+6 00096310 00115 OUT(PNT)=BLANK 00096320 00116 OUT(PNT+1)=BLANK 00096330 00117 CALL NDT45 (SORT(REF),OUT(PNT+2),1) 00096340 00118 IF(PNT+13.LE.TLIMT) GO TO 4000 00096350 00119 CALL NDT57 (1) 00096360 00120 WRITE(PRNTR,3300) (OUT(K),K=1,TLIMT) 00096370 00121 3300 FORMAT(1X,120A1) 00096380 00122 STOP=SETPT+6 00096390 00123 DO 3500 J=1,STOP 00096400 00124 3500 OUT(J)=BLANK 00096410 00125 PNT=SETPT 00096420 00126 4000 CONTINUE 00096430 00127 C 00096440 00128 C 00096450 00129 C THE OUT BUFFER MUST BE PRINTED OUT ONE MORE TIME IF IT IS 00096460 00130 C JUST PARTIALLY FILLED. (IF PNT=SETPT, IT HAS JUST BEEN 00096470 00131 C PRINTED OUT ABOVE.) 00096480 00132 C 00096490 00133 C 00096500 00134 IF(PNT.EQ.SETPT) GO TO 5000 00096510 00135 4900 CALL NDT57 (1) 00096520 00136 WRITE(PRNTR,3300) (OUT(K),K=1,TLIMT) 00096530 00137 5000 CONTINUE 00096540 00138 RETURN 00096550 00139 END 00096570 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 LINCT +10 PRNTR +5 BLANK +251 RECNO +347 DISK +6 NUM +306 REFPT +1602 RFCPT +1603 TLIMT +44 SORT +52220 VNUM +346 DEFBT +343 USDBT +342 OUT +1222 SUBPROGRAMS CALLED NDT45 NDT57 NDT41 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] STOP 1 %PNT2 TAG 2 *K 3 SETPT 4 %LOC LAST 5 %FLAG %SUB J 6 .S0006 7 .S0004 10 .S0003 11 .S0002 12 %DIST .S0001 13 .S0000 14 PNT 15 REF 16 I 17 SRTPT 20 FIRST 21 %START NDT68 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 TEMPORARIES .A0016 54 .Q0000 55 .Q0001 56 BLANK 21# 28# 67 115 116 124 CARD1 17# 25# CARD2 17# 25# CRSET 17# 25# 28# DEF 17# 25# DEFBT 21# 28# 60 DISK 21# 28# 81 104 DIST 21# EQCHN 17# 25# ERROR 17# 25# FCTN 17# 25# FIRST 21# 98# 113 FLAG 21# I 21# 51# 52 J 21# 66# 67 73# 74 100# 102 123# 124 K 120 120# 136 136# LAST 21# 99# 101 101# 102 113 LINCT 21# 28# 38# LITBL 16# 25# 28# LOC 21# NDT41 53 NDT45 89 117 NDT57 39 119 135 NDT68 5# NUM 21# 28# OBJCD 17# 25# 28# OPER 17# 25# OUT 21# 28# 67# 74# 89 89# 115# 116# 117 117# 120 124# 136 PNT 21# 112# 114 114# 115 116 117 118 125# 134 PNT2 21# PRNTR 21# 28# 40 41 120 136 PTRS 17# 25# 28# RECNO 21# 28# 81 REF 21# 113# 117 REFPT 21# 28# 100 RFCPT 21# 28# 103 104 RMAX 16# 25# RMIN 16# 25# SETPT 21# 50# 112 122 125 134 SORT 21# 28# 52 102# 117 117# SRTPT 5# 21# 51 98 99 START 21# STOP 21# 122# 123 SUB 21# SUBSC 17# 25# SYM 17# 25# 28# 74 SYMTB 17# 25# 53 53# TAG 21# 52# 53 TITLE 17# 25# TLIMT 21# 28# 66 118 120 136 TMAP 17# 25# TOKEN 17# 25# TYPCT 17# 25# USDBT 21# 28# 97 VNUM 21# 28# 88 XREF 17# 25# 28# 81# 89 89# 102 104# 1000P 100 102# 200P 40 42# 3000P 103 112# 300P 41 44# 3300P 120 121# 136 3500P 123 124# 4000P 113 118 126# 400P 66 67# 4900P 97 135# 5000P 51 60 134 137# 500P 73 74# 600P 88 97# 900P 100# 105 NDT68 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00096580 00002 C PROGRAM AUTHOR - DANIEL A. POYDENCE 00096590 00003 C 00096600 00004 C 00096610 00005 SUBROUTINE NDT69 00096620 00006 REAL*8 RMIN,RMAX,LITBL(8192) 00096630 00007 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00096640 00008 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00096650 00009 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00096660 00010 3SYMTB(5,4096) 00096670 00011 INTEGER PRNTR,LINCT 00096680 00012 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00096690 00013 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00096700 00014 2SYMTB,LITBL 00096710 00015 EQUIVALENCE (PRNTR,PTRS(2)),(LINCT,PTRS(5)) 00096720 00016 LINCT=-1 00096730 00017 CALL NDT57 (1) 00096740 00018 WRITE(PRNTR,100) 00096750 00019 100 FORMAT('A SYSTEM ANALYSIS IS CURRENTLY UNAVAILABLE.') 00096760 00020 RETURN 00096770 00021 END 00096780 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 PRNTR +5 LINCT +10 SUBPROGRAMS CALLED NDT57 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] TEMPORARIES .A0016 13 CARD1 7# 12# CARD2 7# 12# CRSET 7# 12# DEF 7# 12# EQCHN 7# 12# ERROR 7# 12# FCTN 7# 12# LINCT 11# 15# 16# LITBL 6# 12# NDT57 17 NDT69 5# OBJCD 7# 12# OPER 7# 12# PRNTR 11# 15# 18 PTRS 7# 12# 15# RMAX 6# 12# RMIN 6# 12# SUBSC 7# 12# SYM 7# 12# SYMTB 7# 12# TITLE 7# 12# TMAP 7# 12# TOKEN 7# 12# TYPCT 7# 12# XREF 7# 12# 100P 18 19# NDT69 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C* 00096790 00002 C 00096800 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00096810 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY 00096820 00005 C 00096830 00006 C* 00096840 00007 SUBROUTINE NDT70 00096850 00008 C* 00096860 00009 C 00096870 00010 C OUTPUT PHASE 00096880 00011 C 00096890 00012 C THIS PROGRAM COORDINATES ALL OUTPUT. IT BRINGS IN THE DATA 00096900 00013 C AND THE OUTPUT BUFFERS FROM DISK, AND COMPLETES THE TITLE 00096910 00014 C DATA FOR OUTPUTTING. THEN IT WILL CALL THE PRINT OR PLOT 00096920 00015 C ROUTINE APPROPRIATELY. 00096930 00016 C 00096940 00017 C* 00096950 00018 REAL*8 RMIN,RMAX,VAR(18705),ACCUM,EXTME,RSTME(10) 00096960 00019 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00096970 00020 1SUBSC(6),OUTPT(240),LINE(120),OBJCD(37410) 00096980 00021 INTEGER DISK,LINCT,TPNT,TLIMT,OCBST,OCBPT,OCBND,BLANK,DASH, 00096990 00022 1VARCT,TYPE,CFLAG,OUT1(80),OUT2(80),OUT3(80),OAB, 00097000 00023 2OUTCT,DBEND,FIRST,LAST,LOOP,SUB,FADDR,PNTR,FLOC,START, 00097010 00024 3STOP,TEND,FHIGH,REC,VARND 00097020 00025 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,OUTPT,LINE, 00097030 00026 1EXTME,RSTME,ACCUM,VAR 00097040 00027 EQUIVALENCE (DISK,PTRS(3)),(LINCT,PTRS(5)),(TPNT,PTRS(30)), 00097050 00028 1(TLIMT,PTRS(33)),(OCBST,PTRS(42)),(OCBPT,PTRS(43)), 00097060 00029 2(OCBND,PTRS(44)),(BLANK,CRSET(1)),(DASH,OPER(3)), 00097070 00030 3(OAB,PTRS(12)),(OUTCT,PTRS(10)),(DBEND,PTRS(22)) 00097080 00031 EQUIVALENCE (VARCT,OUTPT(1),OUT1(1)),(TYPE,OUTPT(2)), 00097090 00032 1(OUT2(1),OUTPT(81)),(OUT3(1),OUTPT(161),FHIGH), 00097100 00033 2(START,OUTPT(162)),(STOP,OUTPT(163)),(CFLAG,OUTPT(200)) 00097110 00034 EQUIVALENCE (VAR(1),OBJCD(1)),(VARND,PTRS(26)) 00097120 00035 C* 00097130 00036 C 00097140 00037 C OCBPT SETS UP THE MASTER LOOP, GOING THROUGH ONCE FOR EACH 00097150 00038 C OUTPUT REQUEST. 00097160 00039 C 00097170 00040 C LINCT IS SET TO -1 TO FORCE PAGING. 00097180 00041 C 00097190 00042 C* 00097200 00043 DO 3000 OCBPT = OCBST, OCBND, 3 00097210 00044 LINCT = -1 00097220 00045 C* 00097230 00046 C 00097240 00047 C READ THE OUTPT ARRAY IN TO COMMON FROM DISK. 00097250 00048 C 00097260 00049 C* 00097270 00050 READ (DISK'OCBPT) OUT1 00097280 00051 READ (DISK'OCBPT+1) OUT2 00097290 00052 READ (DISK'OCBPT+2) OUT3 00097300 00053 C* 00097310 00054 C 00097320 00055 C COMPLETE THE TITLE ARRAY FOR THIS OUTPUT REQUEST. 00097330 00056 C 00097340 NDT70 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C IF THERE IS NO SUBTITLE DATA (CFLAG=0), OR IF THERE IS 00097350 00058 C NO ROOM FOR IT, DO NOT ATTEMPT TO PROCESS THE DATA. 00097360 00059 C 00097370 00060 C IF THE PROGRAM IS TITLE-LESS, SUPPRESS THE PRINTING OF 00097380 00061 C DASH. 00097390 00062 C 00097400 00063 C* 00097410 00064 FIRST = TPNT + 1 00097420 00065 IF (FIRST .GT. TLIMT-3) GO TO 1000 00097430 00066 TEND = TLIMT - 14 00097440 00067 DO 100 LOOP = FIRST, TEND 00097450 00068 100 TITLE(LOOP) = BLANK 00097460 00069 IF (CFLAG .EQ. 0) GO TO 1000 00097470 00070 IF (FIRST .EQ. 10) GO TO 200 00097480 00071 TITLE(FIRST+1) = DASH 00097490 00072 FIRST = FIRST + 3 00097500 00073 200 LAST = FIRST + 39 00097510 00074 IF (LAST .GT. TEND) LAST = TEND 00097520 00075 DO 300 LOOP = FIRST, LAST 00097530 00076 SUB = 201 + LOOP - FIRST 00097540 00077 300 TITLE(LOOP) = OUTPT(SUB) 00097550 00078 C* 00097560 00079 C 00097570 00080 C CALCULATE THE ADDRESSES FOR THE DATA BUFFER. 00097580 00081 C 00097590 00082 C* 00097600 00083 1000 FADDR = OAB + (OCBPT-OCBST)/3 00097610 00084 FLOC = OBJCD(FADDR) 00097620 00085 FHIGH = OBJCD(FLOC + 5) 00097630 00086 C* 00097640 00087 C 00097650 00088 C PULL DATA IN FROM DISK TO CORE. 00097660 00089 C 00097670 00090 C FIRST, READ IN ANY DATA THAT WAS WRITTEN OUT TO DISK. 00097680 00091 C 00097690 00092 C* 00097700 00093 FIRST = (OCBPT-OCBST)/3 + 1 + OCBND 00097710 00094 START = DBEND + 1 00097720 00095 REC = OBJCD(FLOC + 4) 00097730 00096 LAST = REC - OUTCT 00097740 00097 IF (LAST .LT. FIRST) GO TO 2100 00097750 00098 DO 2000 LOOP = FIRST, LAST, OUTCT 00097760 00099 STOP = START + 39 00097770 00100 IF (STOP .GT. VARND) CALL NDT12(8) 00097780 00101 READ (DISK'LOOP) (VAR(SUB),SUB=START,STOP) 00097790 00102 2000 START = STOP + 1 00097800 00103 C* 00097810 00104 C 00097820 00105 C BRING IN ANY DATA THAT WAS STILL IN THE OBJCD ARRAY TO 00097830 00106 C THE VAR ARRAY, BEHIND THE DATA FROM DISK. 00097840 00107 C 00097850 00108 C* 00097860 00109 2100 LOOP = START 00097870 00110 START = FHIGH + 2*VARCT 00097880 00111 STOP = OBJCD(FLOC + 6) 00097890 00112 IF (STOP .LT. START) GO TO 2300 00097900 NDT70 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 DO 2200 SUB = START, STOP 00097910 00114 VAR(LOOP) = VAR(SUB) 00097920 00115 2200 LOOP = LOOP + 1 00097930 00116 2300 START = DBEND + 1 00097940 00117 STOP = LOOP - VARCT 00097950 00118 C* 00097960 00119 C 00097970 00120 C CALL EITHER THE PRINT OR PLOT ROUTINE. 00097980 00121 C 00097990 00122 C* 00098000 00123 IF (STOP .LT. START) GO TO 3000 00098010 00124 IF (TYPE .EQ. 12) CALL NDT71 00098020 00125 IF (TYPE .EQ. 13) CALL NDT72 00098030 00126 3000 CONTINUE 00098040 00127 RETURN 00098050 00128 END 00098070 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 OUTPT +356 LINE +736 EXTME +1126 RSTME +1130 ACCUM +1154 VAR +1156 DISK +6 LINCT +10 TPNT +41 TLIMT +44 OCBST +55 OCBPT +56 OCBND +57 BLANK +251 DASH +322 OAB +17 OUTCT +15 DBEND +31 VARCT +356 OUT1 +356 TYPE +357 OUT2 +476 OUT3 +616 FHIGH +616 START +617 STOP +620 CFLAG +665 OBJCD +1156 VARND +35 SUBPROGRAMS CALLED NDT12 NDT72 NDT71 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] FADDR 1 %PNTR LAST 2 LOOP 3 .R0001 4 SUB 5 .S0005 6 .S0003 7 .S0002 10 .S0001 11 .S0000 12 FLOC 13 TEND 14 .O0000 15 FIRST 16 REC 17 TEMPORARIES .A0016 20 .Q0002 21 .Q0003 22 ACCUM 18# 25# BLANK 21# 27# 68 CFLAG 21# 31# 69 CRSET 19# 25# 27# DASH 21# 27# 71 DBEND 21# 27# 94 116 DISK 21# 27# 50 51 52 101 EXTME 18# 25# FADDR 21# 83# 84 FHIGH 21# 31# 85# 110 FIRST 21# 64# 65 67 70 71 72 72# 73 75 76 93# 97 98 FLOC 21# 84# 85 95 111 LAST 21# 73# 74 74# 75 96# 97 98 LINCT 21# 27# 44# LINE 19# 25# LOOP 21# 67# 68 75# 76 77 98# 101 109# 114 115 115# 117 NDT12 100 NDT70 7# NDT71 124 NDT72 125 OAB 21# 27# 83 OBJCD 19# 34# 84 85 95 111 OCBND 21# 27# 43 93 OCBPT 21# 27# 43# 50 51 52 83 93 OCBST 21# 27# 43 83 93 OPER 19# 25# 27# OUT1 21# 31# 50# OUT2 21# 31# 51# OUT3 21# 31# 52# OUTCT 21# 27# 96 98 OUTPT 19# 25# 31# 77 PNTR 21# PTRS 19# 25# 27# 34# REC 21# 95# 96 RMAX 18# 25# RMIN 18# 25# RSTME 18# 25# START 21# 31# 94# 99 101 102# 109 110# 112 113 116# 123 STOP 21# 31# 99# 100 101 102 111# 112 113 117# 123 SUB 21# 76# 77 101 101# 113# 114 SUBSC 19# 25# SYM 19# 25# TEND 21# 66# 67 74 TITLE 19# 25# 68# 71# 77# TLIMT 21# 27# 65 66 TPNT 21# 27# 64 TYPE 21# 31# 124 125 VAR 18# 25# 34# 101# 114# 114 VARCT 21# 31# 110 117 VARND 21# 34# 100 1000P 65 69 83# 100P 67 68# 2000P 98 102# 200P 70 73# 2100P 97 109# 2200P 113 115# 2300P 112 116# 3000P 43 123 126# 300P 75 77# NDT70 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C* 00098080 00002 C 00098090 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00098100 00004 C PROGRAM AUTHOR - GARY PELKEY 00098110 00005 C TRANSLATED BY - TIMOTHY J. MALLOY 00098120 00006 C 00098130 00007 C* 00098140 00008 SUBROUTINE NDT71 00098150 00009 C* 00098160 00010 C 00098170 00011 C PRINT 00098180 00012 C 00098190 00013 C THIS ROUTINE HANDLES PRINTED OUTPUT. 00098200 00014 C 00098210 00015 C* 00098220 00016 REAL*8 RMIN,RMAX,VAR(18705),ACCUM,EXTME,RSTME(10) 00098230 00017 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00098240 00018 1SUBSC(6),OUTPT(240),LINE(120),OBJCD(37410) 00098250 00019 INTEGER VARCT,PLINS,AFTER(11),CRSTC(11),ECHAR(4,11),FLOC, 00098260 00020 1START,STOP,OUT(7,11),PRNTR,BLANK,E,PLUS,MINUS,NUM(10) 00098270 00021 INTEGER LOOP,HIPNT,FHIGH,HCRST,LCRST,MOVES,SUB,BUFF 00098280 00022 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,OUTPT,LINE, 00098290 00023 1EXTME,RSTME,ACCUM,VAR 00098300 00024 EQUIVALENCE (VAR(1),OBJCD(1)) 00098310 00025 EQUIVALENCE (VARCT,OUTPT(1)),(PLINS,PTRS(32)),(AFTER(1), 00098320 00026 1OUTPT(92)),(CRSTC(1),OUTPT(103)),(ECHAR(1,1),OUTPT(114)), 00098330 00027 2(FLOC,OUTPT(161)),(START,OUTPT(162)),(STOP,OUTPT(163)), 00098340 00028 3(OUT(1,1),OUTPT(164)),(FHIGH,OUTPT(161)) 00098350 00029 EQUIVALENCE (PRNTR,PTRS(2)),(BLANK,CRSET(1)),(E,CRSET(8)), 00098360 00030 1(PLUS,OPER(2)),(MINUS,OPER(3)),(NUM(1),CRSET(30)) 00098370 00031 C* 00098380 00032 C 00098390 00033 C SET PLINS --- THE NUMBER OF LINES IN THE OUTPUT HEADING 00098400 00034 C 00098410 00035 C* 00098420 00036 PLINS = 2 00098430 00037 C* 00098440 00038 C 00098450 00039 C ENTER A LOOP TO DETERMINE EACH VARIABLE'S PRINT 00098460 00040 C CHARACTERISTIC. 00098470 00041 C 00098480 00042 C SCALE IS A 2 BY 11 ARRAY WHICH HOLDS THIS CHARACTERISTIC 00098490 00043 C INFORMATION. THE FIRST ROW IN SCALE CONTAINS THE NUMBER 00098500 00044 C OF PLACES AFTER THE DECIMAL POINT FOR THE CORRESPONDING 00098510 00045 C VARIABLE, AND THE SECOND ROW CONTAINS THE CHARACTERISTIC. 00098520 00046 C 00098530 00047 C* 00098540 00048 DO 500 LOOP = 1, VARCT 00098550 00049 HIPNT = FHIGH + 2*(LOOP-1) 00098560 00050 CALL NDT77(VAR(HIPNT),HCRST) 00098570 00051 IF (HCRST .LE. -1 .OR. HCRST .GE. 3) GO TO 200 00098580 00052 AFTER(LOOP) = 4 - HCRST 00098590 00053 CRSTC(LOOP) = 0 00098600 00054 GO TO 500 00098610 00055 200 AFTER(LOOP) = 4 00098620 00056 CRSTC(LOOP) = HCRST 00098630 NDT71 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 400 MOVES = MOD(IABS(HCRST),3) 00098640 00058 IF(HCRST .LT. 0 .AND. MOVES .NE. 0) MOVES = 3 - MOVES 00098650 00059 AFTER(LOOP) = AFTER(LOOP) - MOVES 00098660 00060 CRSTC(LOOP) = CRSTC(LOOP) - MOVES 00098670 00061 IF (CRSTC(LOOP) .NE. 0) PLINS = 3 00098680 00062 500 CONTINUE 00098690 00063 C 00098700 00064 C BLANK OUT THE ECHAR ARRAY, AND THEN FILL IT TO HOLD THE 00098710 00065 C EXPONENTIAL CHARACTERS FOR PRINTING. 00098720 00066 C 00098730 00067 C* 00098740 00068 DO 600 LOOP = 114, 157 00098750 00069 600 OUTPT(LOOP) = BLANK 00098760 00070 IF (PLINS .EQ. 2) GO TO 800 00098770 00071 DO 700 LOOP = 1, VARCT 00098780 00072 ECHAR(1,LOOP) = E 00098790 00073 ECHAR(2,LOOP) = PLUS 00098800 00074 IF (CRSTC(LOOP) .LT. 0) ECHAR(2,LOOP) = MINUS 00098810 00075 SUB = IABS(CRSTC(LOOP)/10) + 1 00098820 00076 ECHAR(3,LOOP) = NUM(SUB) 00098830 00077 SUB = IABS(CRSTC(LOOP)) - SUB*10 + 11 00098840 00078 700 ECHAR(4,LOOP) = NUM(SUB) 00098850 00079 C* 00098860 00080 C 00098870 00081 C BLANK OUT THE OUT ARRAY, WHICH WILL BE USED TO STORE THE 00098880 00082 C ACTUAL CHARACTERS USED FOR OUTPUT. 00098890 00083 C 00098900 00084 C* 00098910 00085 800 DO 900 LOOP = 164, 240 00098920 00086 900 OUTPT(LOOP) = BLANK 00098930 00087 C* 00098940 00088 C 00098950 00089 C GO THROUGH THE DATA BUFFERS, CONVERT THE DATA TO CHARACTERS 00098960 00090 C BY CALLING NDT43, AND PRINT OUT THE OUTPUT. 00098970 00091 C 00098980 00092 C* 00098990 00093 DO 1100 BUFF = START, STOP, VARCT 00099000 00094 DO 1000 LOOP = 1, VARCT 00099010 00095 SUB = BUFF + LOOP - 1 00099020 00096 1000 CALL NDT43(VAR(SUB),OUT(1,LOOP),CRSTC(LOOP),AFTER(LOOP)) 00099030 00097 CALL NDT78(1) 00099040 00098 WRITE (PRNTR,1200) ((OUT(SUB,LOOP),SUB=1,7),LOOP=1,VARCT) 00099050 00099 1100 CONTINUE 00099060 00100 1200 FORMAT(5X,11(1X,7A1,2X)) 00099070 00101 RETURN 00099080 00102 END 00099100 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 NDT71 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 OPER +320 SYM +331 SUBSC +350 OUTPT +356 LINE +736 EXTME +1126 RSTME +1130 ACCUM +1154 VAR +1156 OBJCD +1156 VARCT +356 PLINS +43 AFTER +511 CRSTC +524 ECHAR +537 FLOC +616 START +617 STOP +620 OUT +621 FHIGH +616 PRNTR +5 BLANK +251 E +260 PLUS +321 MINUS +322 NUM +306 SUBPROGRAMS CALLED MOD. IABS. NDT78 NDT77 NDT43 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] HCRST 1 LOOP 2 .R0002 3 .R0001 4 HIPNT 5 .R0000 6 SUB 7 .S0006 10 .S0005 11 .S0004 12 .S0003 13 .S0002 14 .S0001 15 .S0000 16 BUFF 17 MOVES 20 %LCRST TEMPORARIES .A0016 25 .Q0003 26 .Q0004 27 .Q0005 30 .Q0006 31 ACCUM 16# 22# AFTER 19# 25# 52# 55# 59# 59 96 96# BLANK 19# 29# 69 86 BUFF 21# 93# 95 CRSET 17# 22# 29# CRSTC 19# 25# 53# 56# 60# 60 61 74 75 77 96 96# E 19# 29# 72 ECHAR 19# 25# 72# 73# 74# 76# 78# EXTME 16# 22# FHIGH 21# 25# 49 FLOC 19# 25# HCRST 21# 50 50# 51 52 56 57 58 HIPNT 21# 49# 50 IABS. 57 75 77 LCRST 21# LINE 17# 22# LOOP 21# 48# 49 52 53 55 56 59 60 61 68# 69 71# 72 73 74 75 76 77 78 85# 86 94# 95 96 98 98# MINUS 19# 29# 74 MOD. 57 MOVES 21# 57# 58 58# 59 60 NDT43 96 NDT71 8# NDT77 50 NDT78 97 NUM 19# 29# 76 78 OBJCD 17# 24# OPER 17# 22# 29# OUT 19# 25# 96 96# 98 OUTPT 17# 22# 25# 69# 86# PLINS 19# 25# 36# 61# 70 PLUS 19# 29# 73 PRNTR 19# 29# 98 PTRS 17# 22# 25# 29# RMAX 16# 22# RMIN 16# 22# RSTME 16# 22# START 19# 25# 93 STOP 19# 25# 93 SUB 21# 75# 76 77 77# 78 95# 96 98 98# SUBSC 17# 22# SYM 17# 22# TITLE 17# 22# VAR 16# 22# 24# 50 50# 96 96# VARCT 19# 25# 48 71 93 94 98 1000P 94 96# 1100P 93 99# 1200P 98 100# 200P 51 55# 400P 57# 500P 48 54 62# 600P 68 69# 700P 71 78# 800P 70 85# 900P 85 86# NDT71 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C* 00099110 00002 C 00099120 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00099130 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY 00099140 00005 C 00099150 00006 C* 00099160 00007 SUBROUTINE NDT72 00099170 00008 C* 00099180 00009 C 00099190 00010 C PLOT PRELIMINARIES 00099200 00011 C 00099210 00012 C* 00099220 00013 REAL*8 RMIN,RMAX,VAR(18705),ACCUM,EXTME,RSTME(10) 00099230 00014 REAL*8 LOW(11),HIGH(11) 00099240 00015 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00099250 00016 1SUBSC(6),OUTPT(240),LINE(120),OBJCD(37410) 00099260 00017 INTEGER VARCT,SRNUM,FLAG(11),PLINS,SRCNT,LSTSR,CLNUM, 00099270 00018 1POS,OPTNS,NARO,PLTSZ,PLTBG,PLTND,PLTDV,IVPLT,I, 00099280 00019 2IVNAM(10),BLANK 00099290 00020 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,OUTPT,LINE, 00099300 00021 1EXTME,RSTME,ACCUM,VAR 00099310 00022 EQUIVALENCE (VARCT,OUTPT(1)),(SRNUM,OUTPT(171)),(LOW(1), 00099320 00023 1OUTPT(103)),(HIGH(1),OUTPT(125)),(FLAG(1),OUTPT(147)), 00099330 00024 2(PLINS,PTRS(32)),(OPTNS,PTRS(7)),(PLTSZ,OUTPT(164)),(PLTDV, 00099340 00025 3OUTPT(165)),(PLTBG,OUTPT(166)),(PLTND,OUTPT(167)), 00099350 00026 4(VAR(1),OBJCD(1)),(SRCNT,OUTPT(178)),(IVPLT,OUTPT(158)), 00099360 00027 5(BLANK,CRSET(1)),(IVNAM(1),OUTPT(2)) 00099370 00028 C* 00099380 00029 C 00099390 00030 C SET PLINS --- THE NUMBER OF LINES IN THE OUTPUT HEADING 00099400 00031 C 00099410 00032 C* 00099420 00033 PLINS = - (SRCNT + 2) 00099430 00034 C* 00099440 00035 C 00099450 00036 C SET THE PLOT VARIABLES WHICH DESIGNATE THE SIZE OF THE PLOT, 00099460 00037 C ITS BEGINNING AND END POSITIONS ON THE OUTPUT PAGE, AND THE 00099470 00038 C SIZE OF THE DIVISION BETWEEN THE GRIDS ON THE PLOTTED PAGE. 00099480 00039 C 00099490 00040 C* 00099500 00041 NARO = MOD(OPTNS/8,2) 00099510 00042 PLTSZ = 89 - 32*NARO 00099520 00043 PLTBG = 1 + 6*NARO 00099530 00044 PLTND = 120 - 42*NARO 00099540 00045 PLTDV = (PLTSZ - 1)/4 00099550 00046 C* 00099560 00047 C 00099570 00048 C GO THROUGH THE FLAG ARRAY, AND FOR EACH DISTINCT SERIES 00099580 00049 C CALL NDT79 TO GET THE HIGH AND LOW VALUES FOR THAT SERIES. 00099590 00050 C 00099600 00051 C* 00099610 00052 LSTSR = 0 00099620 00053 DO 100 CLNUM = 1, VARCT 00099630 00054 SRNUM = FLAG(CLNUM)/10 00099640 00055 IF (SRNUM .EQ. LSTSR) GO TO 100 00099650 00056 CALL NDT79 00099660 NDT72 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 LSTSR = SRNUM 00099670 00058 100 CONTINUE 00099680 00059 C* 00099690 00060 C 00099700 00061 C NOW COPY THE HIGH AND LOW VALUES FOR EACH VARIABLE, 00099710 00062 C ACCORDING TO ITS SERIES. 00099720 00063 C 00099730 00064 C REMEMBER: DIVIDING FLAG BY TEN LEAVES THE SERIES NUMBER. 00099740 00065 C 00099750 00066 C* 00099760 00067 DO 200 CLNUM = 1, VARCT 00099770 00068 FLAG(CLNUM) = FLAG(CLNUM)/10 00099780 00069 POS = FLAG(CLNUM) 00099790 00070 LOW(CLNUM) = LOW(POS) 00099800 00071 200 HIGH(CLNUM) = HIGH(POS) 00099810 00072 C* 00099820 00073 C 00099830 00074 C MOVE THE INDEP VAR NAME FIELD FROM AN 00099840 00075 C EIGHT WORD ARRAY TO A TEN WORD ARRAY. 00099850 00076 C 00099860 00077 C* 00099870 00078 DO 400 I = 2, 9 00099880 00079 400 IVNAM(I) = IVNAM(I+1) 00099890 00080 IVNAM(1) = BLANK 00099900 00081 IVNAM(10) = BLANK 00099910 00082 C* 00099920 00083 C 00099930 00084 C IVPLT IS 0 FOR A TIME PLOT, 1 FOR AN X//Y PLOT. 00099940 00085 C 00099950 00086 C CALL THE APPROPRIATE PLOT ROUTINE. 00099960 00087 C 00099970 00088 C BUT FIRST MAKE SURE THE LINE ARRAY IS BLANK. 00099980 00089 C 00099981 00090 C* 00099982 00091 DO 450 I = 1, 120 00099983 00092 450 LINE(I) = BLANK 00099984 00093 IF (IVPLT .EQ. 0) GO TO 300 00099990 00094 CALL NDT74 00100000 00095 GO TO 500 00100010 00096 300 CALL NDT73 00100020 00097 500 RETURN 00100030 00098 END 00100050 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 OUTPT +356 LINE +736 EXTME +1126 RSTME +1130 ACCUM +1154 VAR +1156 VARCT +356 SRNUM +630 LOW +524 HIGH +552 FLAG +600 PLINS +43 OPTNS +12 PLTSZ +621 PLTDV +622 PLTBG +623 PLTND +624 NDT72 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 OBJCD +1156 SRCNT +637 IVPLT +613 BLANK +251 IVNAM +357 SUBPROGRAMS CALLED NDT79 MOD. NDT73 NDT74 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] LSTSR 1 NARO 2 CLNUM 3 POS 4 .R0000 5 .S0003 6 .S0002 7 .S0001 10 .S0000 11 I 12 .O0001 13 TEMPORARIES .A0016 14 ACCUM 13# 20# BLANK 17# 22# 80 81 92 CLNUM 17# 53# 54 67# 68 69 70 71 CRSET 15# 20# 22# EXTME 13# 20# FLAG 17# 22# 54 68# 68 69 HIGH 14# 22# 71# 71 I 17# 78# 79 91# 92 IVNAM 17# 22# 79# 79 80# 81# IVPLT 17# 22# 93 LINE 15# 20# 92# LOW 14# 22# 70# 70 LSTSR 17# 52# 55 57# MOD. 41 NARO 17# 41# 42 43 44 NDT72 7# NDT73 96 NDT74 94 NDT79 56 OBJCD 15# 22# OPER 15# 20# OPTNS 17# 22# 41 OUTPT 15# 20# 22# PLINS 17# 22# 33# PLTBG 17# 22# 43# PLTDV 17# 22# 45# PLTND 17# 22# 44# PLTSZ 17# 22# 42# 45 POS 17# 69# 70 71 PTRS 15# 20# 22# RMAX 13# 20# RMIN 13# 20# RSTME 13# 20# SRCNT 17# 22# 33 SRNUM 17# 22# 54# 55 57 SUBSC 15# 20# SYM 15# 20# TITLE 15# 20# VAR 13# 20# 22# VARCT 17# 22# 53 67 100P 53 55 58# 200P 67 71# 300P 93 96# 400P 78 79# 450P 91 92# 500P 95 97# NDT72 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C* 00100060 00002 C 00100070 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00100080 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY 00100090 00005 C 00100100 00006 C* 00100110 00007 SUBROUTINE NDT73 00100120 00008 C* 00100130 00009 C 00100140 00010 C TIME PLOT 00100150 00011 C 00100160 00012 C* 00100170 00013 REAL*8 RMIN,RMAX,VAR(18705),ACCUM,EXTME,RSTME(10) 00100180 00014 REAL*8 LOW(11),HIGH(11) 00100190 00015 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00100200 00016 1SUBSC(6),OUTPT(240),LINE(120),OBJCD(37410) 00100210 00017 INTEGER PRNTR,BLANK,DOT,COMMA,VARCT,START,STOP,PLTSZ,PLTDV, 00100220 00018 1PLTBG,PLTND,PCHAR,ODD,IVPRT,CHAR(10),PLOT(89),DUP(17), 00100230 00019 2OVRLP(11),LOOP,I,CLNUM,PLACE,HERE,POS,END 00100240 00020 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,OUTPT,LINE, 00100250 00021 1EXTME,RSTME,ACCUM,VAR 00100260 00022 EQUIVALENCE (VAR(1),OBJCD(1)) 00100270 00023 EQUIVALENCE (PRNTR,PTRS(2)),(BLANK,CRSET(1)),(DOT,OPER(1)), 00100280 00024 1(COMMA,OPER(9)),(VARCT,OUTPT(1)),(LOW(1),OUTPT(103)), 00100290 00025 2(HIGH(1),OUTPT(125)),(START,OUTPT(162)),(STOP,OUTPT(163)), 00100300 00026 3(PLTSZ,OUTPT(164)),(PLTDV,OUTPT(165)),(PLTBG,OUTPT(166)), 00100310 00027 4(PLTND,OUTPT(167)),(PCHAR,OUTPT(168)),(ODD,OUTPT(169)), 00100320 00028 5(IVPRT,OUTPT(170)),(CHAR(1),OUTPT(190)),(PLOT(1),LINE(14)), 00100330 00029 6(DUP(1),LINE(105)),(OVRLP(1),OUTPT(179)) 00100340 00030 C* 00100350 00031 C 00100360 00032 C PHASE I --- INITIALIZATION 00100370 00033 C 00100380 00034 C 00100390 00035 C LOOP IS USED TO KEEP TRACK OF THE BUFFER ADDRESS. 00100400 00036 C 00100410 00037 C IVPRT CAUSES EVERY TENTH LINE TO BE GRIDDED. 00100420 00038 C 00100430 00039 C* 00100440 00040 IVPRT = 1 00100450 00041 DO 1300 LOOP = START, STOP, VARCT 00100460 00042 C* 00100470 00043 C 00100480 00044 C THE LAST LINE OF DATA IS ALWAYS GRIDDED. 00100490 00045 C 00100500 00046 C CHECK FOR THE NEED TO GRID THIS LINE (NDT82). 00100510 00047 C 00100520 00048 C* 00100530 00049 IF (LOOP .GT. STOP-VARCT) IVPRT = 1 00100540 00050 CALL NDT82(VAR(LOOP)) 00100550 00051 C* 00100560 00052 C 00100570 00053 C ZERO OUT THE PLOT AND OVERLAP ARRAYS. 00100580 00054 C 00100590 00055 C* 00100600 00056 DO 200 I = 1, PLTSZ 00100610 NDT73 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 200 PLOT(I) = 0 00100620 00058 DO 300 I = 1, 11 00100630 00059 300 OVRLP(I) = 0 00100640 00060 C* 00100650 00061 C 00100660 00062 C PHASE II --- INTERPRETATION 00100670 00063 C 00100680 00064 C 00100690 00065 C TRANSFER DATA FROM THE BUFFER TO THE PLOT. 00100700 00066 C 00100710 00067 C IF THE PLACE THE DATA WOULD APPEAR ON THE PLOT LINE IS NOT 00100720 00068 C IN THE RANGE, IGNORE IT. 00100730 00069 C 00100740 00070 C* 00100750 00071 DO 500 CLNUM = 2, VARCT 00100760 00072 POS = LOOP + CLNUM - 1 00100770 00073 PLACE=(VAR(POS)-LOW(CLNUM))*((PLTSZ-1)/(HIGH(CLNUM)-LOW(CLNUM))) 00100780 00074 A+1.5D0 00100790 00075 IF (PLACE .LT. 1 .OR. PLACE .GT. PLTSZ) GO TO 500 00100800 00076 C* 00100810 00077 C 00100820 00078 C CHECK FOR OVERLAPS. 00100830 00079 C 00100840 00080 C* 00100850 00081 IF (PLOT(PLACE) .EQ. 0) GO TO 400 00100860 00082 HERE = PLOT(PLACE) 00100870 00083 OVRLP(CLNUM) = HERE 00100880 00084 OVRLP(HERE) = -1 00100890 00085 GO TO 500 00100900 00086 C* 00100910 00087 C 00100920 00088 C STORE THE VARIABLE NUMBER ON THE PLOT LINE. 00100930 00089 C 00100940 00090 C* 00100950 00091 400 PLOT(PLACE) = CLNUM 00100960 00092 500 CONTINUE 00100970 00093 C* 00100980 00094 C 00100990 00095 C PHASE III --- OVERLAP 00101000 00096 C 00101010 00097 C 00101020 00098 C GO THROUGH THE OVERLAP ARRAY. IF OVRLP IS NOT ZERO, 00101030 00099 C THERE WAS NO OVERLAP. 00101040 00100 C 00101050 00101 C* 00101060 00102 HERE = 1 00101070 00103 DO 700 CLNUM = 2, VARCT 00101080 00104 IF (OVRLP(CLNUM) .GE. 0) GO TO 700 00101090 00105 C* 00101100 00106 C 00101110 00107 C AN OVERLAP OCCURRED --- NOW CHECK TO SEE WHICH WERE SUPPRESSED 00101120 00108 C AND NOTE THEM IN THE DUP ARRAY. 00101130 00109 C 00101140 00110 C* 00101150 00111 DUP(HERE) = CHAR(CLNUM - 1) 00101160 00112 HERE = HERE + 1 00101170 NDT73 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 PLACE = CLNUM + 1 00101180 00114 DO 600 I = PLACE, VARCT 00101190 00115 IF (OVRLP(I) .NE. CLNUM) GO TO 600 00101200 00116 DUP(HERE) = CHAR(I - 1) 00101210 00117 HERE = HERE + 1 00101220 00118 600 CONTINUE 00101230 00119 DUP(HERE) = COMMA 00101240 00120 HERE = HERE + 1 00101250 00121 700 CONTINUE 00101260 00122 C* 00101270 00123 C 00101280 00124 C BLANK OUT THE REST OF THE DUP ARRAY. 00101290 00125 C 00101300 00126 C* 00101310 00127 IF (HERE .NE. 1) HERE = HERE - 1 00101320 00128 DO 800 I = HERE, 17 00101330 00129 800 DUP(I) = BLANK 00101340 00130 C* 00101350 00131 C 00101360 00132 C TRANSFER DUP ARRAY ONTO THE PLOT LINE. 00101370 00133 C 00101380 00134 C* 00101390 00135 DO 900 I = 1, 16 00101400 00136 POS = PLTSZ + 15 + I 00101410 00137 900 LINE(POS) = DUP(I) 00101420 00138 LINE(PLTSZ + 14) = BLANK 00101430 00139 LINE(PLTSZ + 15) = BLANK 00101440 00140 C* 00101450 00141 C 00101460 00142 C PHASE IV --- CHARACTER TRANSFER 00101470 00143 C 00101480 00144 C 00101490 00145 C CHANGE THE VARIABLE NUMBERS TO CHARACTERS. 00101500 00146 C CHECK THE FIRST POSITION, AND THEN EACH PLACE ON THE 00101510 00147 C PLOT LINE. 00101520 00148 C 00101530 00149 C* 00101540 00150 PCHAR = DOT 00101550 00151 CALL NDT81(PLOT(1)) 00101560 00152 DO 1100 I = 2, PLTSZ, PLTDV 00101570 00153 END = PLTDV - 2 + I 00101580 00154 DO 1000 PLACE = I, END 00101590 00155 PCHAR = BLANK 00101600 00156 IF (PLACE .NE. PLACE/2*2) PCHAR = ODD 00101610 00157 CALL NDT81(PLOT(PLACE)) 00101620 00158 1000 CONTINUE 00101630 00159 C* 00101640 00160 C 00101650 00161 C CHECK END + 1 00101660 00162 C 00101670 00163 C* 00101680 00164 PCHAR = DOT 00101690 00165 CALL NDT81(PLOT(END + 1)) 00101700 00166 1100 CONTINUE 00101710 00167 C* 00101720 00168 C 00101730 NDT73 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 00169 C PHASE V --- OUTPUTTING THE FINISHED PLOT LINE 00101740 00170 C 00101750 00171 C 00101760 00172 C* 00101770 00173 CALL NDT78(1) 00101780 00174 WRITE (PRNTR,1200) (LINE(I),I=PLTBG,PLTND) 00101790 00175 1200 FORMAT (1X, 120A1) 00101800 00176 1300 CONTINUE 00101810 00177 RETURN 00101820 00178 END 00101840 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 OUTPT +356 LINE +736 EXTME +1126 RSTME +1130 ACCUM +1154 VAR +1156 OBJCD +1156 PRNTR +5 BLANK +251 DOT +320 COMMA +330 VARCT +356 LOW +524 HIGH +552 START +617 STOP +620 PLTSZ +621 PLTDV +622 PLTBG +623 PLTND +624 PCHAR +625 ODD +626 IVPRT +627 CHAR +653 PLOT +753 DUP +1106 OVRLP +640 SUBPROGRAMS CALLED NDT82 NDT78 NDT81 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] END 1 LOOP 2 CLNUM 3 POS 4 .R0001 5 .R0000 6 PLACE 7 .S0007 10 .S0006 11 .S0005 12 .S0004 13 .S0003 14 .S0002 15 .S0001 16 .S0000 17 .S0011 20 .S0010 21 I 22 .O0001 23 HERE 24 TEMPORARIES .A0016 27 .Q0002 30 .Q0003 31 ACCUM 13# 20# BLANK 17# 23# 129 138 139 155 CHAR 17# 23# 111 116 CLNUM 17# 71# 72 73 83 91 103# 104 111 113 115 COMMA 17# 23# 119 CRSET 15# 20# 23# DOT 17# 23# 150 164 DUP 17# 23# 111# 116# 119# 129# 137 END 17# 153# 154 165 EXTME 13# 20# HERE 17# 82# 83 84 102# 111 112 112# 116 117 117# 119 120 120# 127 127# 128 HIGH 14# 23# 73 I 17# 56# 57 58# 59 114# 115 116 128# 129 135# 136 137 152# 153 154 174 174# IVPRT 17# 23# 40# 49# LINE 15# 20# 23# 137# 138# 139# 174 LOOP 17# 41# 49 50 72 LOW 14# 23# 73 NDT73 7# NDT78 173 NDT81 151 157 165 NDT82 50 OBJCD 15# 22# ODD 17# 23# 156 OPER 15# 20# 23# OUTPT 15# 20# 23# OVRLP 17# 23# 59# 83# 84# 104 115 PCHAR 17# 23# 150# 155# 156# 164# PLACE 17# 73# 75 81 82 91 113# 114 154# 156 157 PLOT 17# 23# 57# 81 82 91# 151 151# 157 157# 165 165# PLTBG 17# 23# 174 PLTDV 17# 23# 152 153 PLTND 17# 23# 174 PLTSZ 17# 23# 56 73 75 136 138 139 152 POS 17# 72# 73 136# 137 PRNTR 17# 23# 174 PTRS 15# 20# 23# RMAX 13# 20# RMIN 13# 20# RSTME 13# 20# START 17# 23# 41 STOP 17# 23# 41 49 SUBSC 15# 20# SYM 15# 20# TITLE 15# 20# VAR 13# 20# 22# 50 50# 73 VARCT 17# 23# 41 49 71 103 114 1000P 154 158# 1100P 152 166# 1200P 174 175# 1300P 41 176# 200P 56 57# 300P 58 59# 400P 81 91# 500P 71 75 85 92# 600P 114 115 118# 700P 103 104 121# 800P 128 129# 900P 135 137# NDT73 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C* 00101850 00002 C 00101860 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00101870 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY 00101880 00005 C 00101890 00006 C* 00101900 00007 SUBROUTINE NDT74 00101910 00008 C* 00101920 00009 C 00101930 00010 C INDEPENDENT VARIABLE PLOT 00101940 00011 C 00101950 00012 C* 00101960 00013 REAL*8 RMIN,RMAX,VAR(18705),ACCUM,EXTME,RSTME(10) 00101970 00014 REAL*8 LOW(11),HIGH(11),IVHI,IVLOW,INVAL,INRNG,IVVAL,RANGE 00101980 00015 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00101990 00016 1SUBSC(6),OUTPT(240),LINE(120),OBJCD(37410) 00102000 00017 INTEGER PRNTR,LINPP,PLINS,BLANK,DOT,VARCT,START,STOP,PLTSZ, 00102010 00018 1PLTDV,PLTBG,PLTND,PCHAR,ODD,IVPRT,CHAR(10),PLOT(89),SUB, 00102020 00019 2END,NARO,DPLOT,LNLFT,CLNUM,NVAR,PLACE,OPTNS 00102030 00020 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,OUTPT,LINE, 00102040 00021 1EXTME,RSTME,ACCUM,VAR 00102050 00022 EQUIVALENCE (VAR(1),OBJCD(1)) 00102060 00023 EQUIVALENCE (PRNTR,PTRS(2)),(LINPP,PTRS(6)),(PLINS,PTRS(32)), 00102070 00024 1(BLANK,CRSET(1)),(DOT,OPER(1)),(VARCT,OUTPT(1)),(LOW(1), 00102080 00025 2OUTPT(103),IVLOW),(HIGH(1),OUTPT(125),IVHI),(START, 00102090 00026 3OUTPT(162)),(STOP,OUTPT(163)),(PLTSZ,OUTPT(164)),(PLTDV, 00102100 00027 4OUTPT(165)),(PLTBG,OUTPT(166)),(PLTND,OUTPT(167)),(PCHAR, 00102110 00028 5OUTPT(168)),(ODD,OUTPT(169)),(IVPRT,OUTPT(170)),(CHAR(1), 00102120 00029 6OUTPT(190)),(PLOT(1),LINE(14)),(SUB,END),(OPTNS,PTRS(7)) 00102130 00030 C* 00102140 00031 C 00102150 00032 C NARROW VARIABLE-VARIABLE PLOT IS SHIFTED TWO PLACES. 00102160 00033 C 00102170 00034 C* 00102180 00035 NARO = MOD(OPTNS/8,2) 00102190 00036 PLTBG = PLTBG - 2*NARO 00102200 00037 PLTND = PLTND - 2*NARO 00102210 00038 DPLOT = 51 - NARO*10 00102220 00039 C* 00102230 00040 C 00102240 00041 C CALCULATE THE SIZE OF THE PLOT. 00102250 00042 C 00102260 00043 C* 00102270 00044 LNLFT = LINPP + PLINS - 2 00102280 00045 LNLFT = LNLFT - MOD(LNLFT,10) 00102290 00046 IF (LNLFT .GT. DPLOT) LNLFT = DPLOT 00102300 00047 IVPRT = 1 00102310 00048 C* 00102320 00049 C 00102330 00050 C SORT THE DATA TO MAKE CERTAIN IT IS IN ORDER. 00102340 00051 C 00102350 00052 C* 00102360 00053 CALL NDT83 00102370 00054 C* 00102380 00055 C 00102390 00056 C THE VARIABLE-VARIABLE PLOT HAS ONE LINE FOR EVERY RANGE 00102400 NDT74 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C OF VALUES. IVVAL KEEPS TRACK OF THE CURRENT LOCATION. 00102410 00058 C 00102420 00059 C* 00102430 00060 RANGE = (IVHI - IVLOW)/FLOAT(LNLFT) 00102440 00061 INRNG = (IVHI - IVLOW)/(FLOAT(DPLOT-1)/10) 00102450 00062 IVVAL = IVLOW - RANGE/2. 00102460 00063 INVAL = IVLOW 00102470 00064 C* 00102480 00065 C 00102490 00066 C LOOP IS THE COUNTER FOR THE DATA BUFFERS. 00102500 00067 C 00102510 00068 C CHECK FOR THE NEED TO PRINT THE INDEPENDENT VARIABLE VALUE. 00102520 00069 C 00102530 00070 C* 00102540 00071 LOOP = START 00102550 00072 100 IVVAL = IVVAL + RANGE 00102560 00073 IF (IVVAL .GT. IVHI) GO TO 900 00102570 00074 IF (IVVAL .GT. IVHI-RANGE) IVPRT=1 00102580 00075 CALL NDT82(INVAL) 00102590 00076 IF (IVPRT .EQ. 2) INVAL = INVAL + INRNG 00102600 00077 C* 00102610 00078 C 00102620 00079 C BLANK OUT THE PLOT LINE. 00102630 00080 C 00102640 00081 C* 00102650 00082 DO 200 I = 1, PLTSZ 00102660 00083 200 PLOT(I) = BLANK 00102670 00084 C* 00102680 00085 C 00102690 00086 C CHECK FOR DATA WITHIN THE RANGE FOR THIS LINE. 00102700 00087 C 00102710 00088 C* 00102720 00089 LOOP = LOOP - VARCT 00102730 00090 300 LOOP = LOOP + VARCT 00102740 00091 IF (VAR(LOOP) .LT. IVLOW .OR. VAR(LOOP) .GT. IVVAL+RANGE 00102750 00092 1 .OR. LOOP .GT. STOP) GO TO 500 00102760 00093 C* 00102770 00094 C 00102780 00095 C TRANSFER DATA FROM THE BUFFER TO THE PLOT. 00102790 00096 C IF THE PLACE THE DATA WOULD APPEAR ON THE PLOT LINE 00102800 00097 C IS NOT IN THE RANGE, IGNORE IT. 00102810 00098 C 00102820 00099 C* 00102830 00100 DO 400 CLNUM = 2, VARCT 00102840 00101 SUB = LOOP + CLNUM - 1 00102850 00102 PLACE=(VAR(SUB)-LOW(CLNUM))*((PLTSZ-1)/(HIGH(CLNUM)-LOW(CLNUM))) 00102860 00103 A+1.5 00102870 00104 IF (PLACE .LT. 1 .OR. PLACE .GT. PLTSZ ) GO TO 400 00102880 00105 IF ( PLOT(PLACE) .EQ. BLANK) PLOT(PLACE) = CHAR(CLNUM - 1) 00102890 00106 400 CONTINUE 00102900 00107 GO TO 300 00102910 00108 C* 00102920 00109 C 00102930 00110 C THIS ALGORITHM CREATES THE FRAME FOR THE PLOT. 00102940 00111 C 00102950 00112 C* 00102960 NDT74 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 500 IF (PLOT(1) .EQ. BLANK) PLOT(1) = DOT 00102970 00114 DO 700 I = 2, PLTSZ, PLTDV 00102980 00115 END = PLTDV - 2 + I 00102990 00116 DO 600 PLACE = I, END 00103000 00117 PCHAR = BLANK 00103010 00118 IF (PLACE .NE. PLACE/2*2) PCHAR = ODD 00103020 00119 IF (PLOT(PLACE) .EQ. BLANK) PLOT(PLACE) = PCHAR 00103030 00120 600 CONTINUE 00103040 00121 IF (PLOT(END + 1) .EQ. BLANK) PLOT(END + 1) = DOT 00103050 00122 700 CONTINUE 00103060 00123 C* 00103070 00124 C 00103080 00125 C OUTPUT THE FINISHED PLOT LINE. 00103090 00126 C 00103100 00127 C* 00103110 00128 CALL NDT78(1) 00103120 00129 WRITE(PRNTR,800) (LINE(I),I=PLTBG,PLTND) 00103130 00130 800 FORMAT (1X, 120A1) 00103140 00131 GO TO 100 00103150 00132 900 RETURN 00103160 00133 END 00103180 EQUIVALENCED VARIABLES ( SUB 1 END 1 ) COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 OUTPT +356 LINE +736 EXTME +1126 RSTME +1130 ACCUM +1154 VAR +1156 OBJCD +1156 PRNTR +5 LINPP +11 PLINS +43 BLANK +251 DOT +320 VARCT +356 LOW +524 IVLOW +524 HIGH +552 IVHI +552 START +617 STOP +620 PLTSZ +621 PLTDV +622 PLTBG +623 PLTND +624 PCHAR +625 ODD +626 IVPRT +627 CHAR +653 PLOT +753 OPTNS +12 SUBPROGRAMS CALLED MOD. NDT82 NDT78 FLOAT. NDT83 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] NARO 2 END 1 %NVAR INRNG 3 LNLFT 5 *LOOP 6 DPLOT 7 CLNUM 10 INVAL 11 .R0000 13 PLACE 14 SUB 1 .S0003 15 .S0002 16 .S0001 17 .S0000 20 RANGE 21 *I 23 .O0002 24 .O0001 25 IVVAL 26 NDT74 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 TEMPORARIES .A0016 32 .Q0001 33 .Q0002 34 ACCUM 13# 20# BLANK 17# 23# 83 105 113 117 119 121 CHAR 17# 23# 105 CLNUM 17# 100# 101 102 105 CRSET 15# 20# 23# DOT 17# 23# 113 121 DPLOT 17# 38# 46 61 END 17# 23# 115# 116 121 EXTME 13# 20# FLOAT. 60 61 HIGH 14# 23# 102 I 82# 83 114# 115 116 129 129# INRNG 14# 61# 76 INVAL 14# 63# 75 75# 76 76# IVHI 14# 23# 60 61 73 74 IVLOW 14# 23# 60 61 62 63 91 IVPRT 17# 23# 47# 74# 76 IVVAL 14# 62# 72 72# 73 74 91 LINE 15# 20# 23# 129 LINPP 17# 23# 44 LNLFT 17# 44# 45 45# 46 46# 60 LOOP 71# 89 89# 90 90# 91 101 LOW 14# 23# 102 MOD. 35 45 NARO 17# 35# 36 37 38 NDT74 7# NDT78 128 NDT82 75 NDT83 53 NVAR 17# OBJCD 15# 22# ODD 17# 23# 118 OPER 15# 20# 23# OPTNS 17# 23# 35 OUTPT 15# 20# 23# PCHAR 17# 23# 117# 118# 119 PLACE 17# 102# 104 105 116# 118 119 PLINS 17# 23# 44 PLOT 17# 23# 83# 105 105# 113 113# 119 119# 121 121# PLTBG 17# 23# 36 36# 129 PLTDV 17# 23# 114 115 PLTND 17# 23# 37 37# 129 PLTSZ 17# 23# 82 102 104 114 PRNTR 17# 23# 129 PTRS 15# 20# 23# RANGE 14# 60# 62 72 74 91 RMAX 13# 20# RMIN 13# 20# RSTME 13# 20# START 17# 23# 71 STOP 17# 23# 91 SUB 17# 23# 101# 102 SUBSC 15# 20# SYM 15# 20# TITLE 15# 20# VAR 13# 20# 22# 91 102 VARCT 17# 23# 89 90 100 100P 72# 131 200P 82 83# 300P 90# 107 400P 100 104 106# 500P 91 113# 600P 116 120# 700P 114 122# 800P 129 130# 900P 73 132# NDT74 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00103190 00002 C * 00103200 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00103210 00004 C WRITTEN BY THOMAS L EVERMAN JR * 00103220 00005 C * 00103230 00006 C***************************************************************** 00103240 00007 SUBROUTINE NDT75 00103250 00008 C***************************************************************** 00103260 00009 C * 00103270 00010 C THIS PROGRAM LOADS THE LITERAL POOL AND OBJECT CODE. * 00103280 00011 C IT ALSO PERFORMS PASS 3 INITIALIZATION AND BUILDS OCB'S. * 00103290 00012 C * 00103300 00013 C***************************************************************** 00103310 00014 REAL*8 RMIN,RMAX,VAR(18705),ACCUM,EXTME,RSTME(10) 00103320 00015 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00103330 00016 1SUBSC(6),OUTPT(240),LINE(120),OBJCD(37410) 00103340 00017 INTEGER INPUT(160),START,RELOC,DSKCT,XRFND,STOP,LITCT,DISK,VALCT 00103350 00018 INTEGER CHAIN(80),CHREC,CHNPT,CHOBJ,PC,OBJST,OBJIN 00103360 00019 INTEGER LADDR,RADDR,OBJLN,I,IN1(80),IN2(80),INPVL,RERUN 00103370 00020 INTEGER RUNCT,RUNNO,DBEND,LINCT 00103380 00021 INTEGER BIT(10),RUN(11),VNUM(11),PRTCT,PLTCT,OUTCT,OAB,OUT1(80) 00103390 00022 INTEGER OUT2(80),OUT3(80),TYPE,VARCT,OCBST,OCBND,OCBPT,DBPNT 00103400 00023 INTEGER LOWRN,RSTRT,SUB1,SUB2,EXPMX,TSAPT,SKSMT,OPTNS 00103410 00024 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,OUTPT,LINE, 00103420 00025 1EXTME,RSTME,ACCUM,VAR 00103430 00026 EQUIVALENCE (VAR(1),OBJCD(1)),(RELOC,PTRS(40)),(XRFND,PTRS(16)), 00103440 00027 1(LITCT,PTRS(18)),(DISK,PTRS(3)),(VALCT,PTRS(20)), 00103450 00028 2(PC,PTRS(15)),(OBJST,PTRS(17)),(OBJIN,START),(RUNNO,OUTPT(14)), 00103460 00029 3(LADDR,PTRS(19)),(RADDR,PTRS(21)),(OBJLN,INPUT(1)), 00103470 00030 4(IN1(1),INPUT(1)),(IN2(1),INPUT(81)),(RERUN,PTRS(13)), 00103480 00031 5(RUNCT,PTRS(14)),(DBEND,PTRS(22)),(OPTNS,PTRS(7)) 00103490 00032 EQUIVALENCE (INPUT(1),OUTPT(1)),(CHAIN(1),OUTPT(161)), 00103500 00033 1(RUN(1),OUTPT(179)),(VNUM(1),OUTPT(92)),(OUTCT,PTRS(10)), 00103510 00034 2(OAB,PTRS(12)),(OUT1(1),OUTPT(1)),(OUT2(1),OUTPT(81)), 00103520 00035 3(OUT3(1),OUTPT(161)),(PRTCT,OUTPT(12)),(PLTCT,OUTPT(13)), 00103530 00036 4(TYPE,OUTPT(2)),(VARCT,OUTPT(1)),(OCBST,PTRS(42)), 00103540 00037 5(OCBND,PTRS(44)),(OCBPT,PTRS(43)),(EXPMX,PTRS(9)) 00103550 00038 EQUIVALENCE(LOWRN,RSTRT),(LINCT,PTRS(5)) 00103560 00039 C***************************************************************** 00103570 00040 C * 00103580 00041 C READ IN THE LITERAL POOL AND STORE IT STARTING AT LOCATION * 00103590 00042 C RELOC + 1. EACH LITERAL OCCUPIES TWO INTEGER WORDS. * 00103600 00043 C * 00103610 00044 C***************************************************************** 00103620 00045 OUTCT = PRTCT + PLTCT 00103630 00046 START = RELOC + 1 00103640 00047 DSKCT = XRFND 00103650 00048 100 STOP = START + 39 00103660 00049 IF (STOP .GT. LITCT + RELOC) STOP = LITCT + RELOC 00103670 00050 DSKCT = DSKCT + 1 00103680 00051 READ (DISK'DSKCT) (VAR(I), I = START, STOP) 00103690 00052 IF (STOP .EQ. LITCT + RELOC) GO TO 200 00103700 00053 START = STOP + 1 00103710 00054 GO TO 100 00103720 00055 C***************************************************************** 00103730 00056 C * 00103740 NDT75 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C SET THE VARIABLE ALLOCATION COUNTER AND OBJECT CODE START. * 00103750 00058 C OBTAIN CHAIN RECORDS WHICH POINT TO TOKEN BUFFERS OF EACH * 00103760 00059 C STATEMENT IN ORDER BY WHICH THEY SHOULD BE EXECUTED. * 00103770 00060 C * 00103780 00061 C***************************************************************** 00103790 00062 200 VALCT = STOP 00103800 00063 OBJST = 2 * VALCT + 1 00103810 00064 CHREC = 0 00103820 00065 RADDR = 0 00103830 00066 SKSMT = 3 00103840 00067 IF (MOD (OPTNS, 2) .EQ. 0) SKSMT = 5 00103850 00068 OBJIN = OBJST 00103860 00069 300 CHREC = CHREC + 1 00103870 00070 READ (DISK'CHREC) CHAIN 00103880 00071 CHNPT = 0 00103890 00072 400 CHNPT = CHNPT + 1 00103900 00073 IF (CHNPT .GT. 80) GO TO 300 00103910 00074 CHOBJ = CHAIN(CHNPT) 00103920 00075 IF (CHOBJ .EQ. 0) GO TO 1000 00103930 00076 IF (CHOBJ .GT. 0) GO TO 800 00103940 00077 C***************************************************************** 00103950 00078 C * 00103960 00079 C CHAIN ELEMENT IS NEGATIVE. THIS INDICATES THAT THE NEXT OB* 00103970 00080 C CODE BUFFER WILL REPRESENT A STATEMENT WHOSE TYPE IS THE * 00103980 00081 C ABSOLUTE VALUE OF THE CHAIN ELEMENT. THIS VALUE SHOULD BE * 00103990 00082 C STORED IN THE OBJECT CODE AS AN INDICATOR. ALSO, THE LOCAT* 00104000 00083 C OF THE FIRST RATE AND LEVEL EQUATIONS SHOULD BE STORED, AND* 00104010 00084 C A SKIP INSTRUCTION SHOULD BE INSERTED BEFORE THE FIRST LEVE* 00104020 00085 C * 00104030 00086 C***************************************************************** 00104040 00087 CHOBJ = - CHOBJ 00104050 00088 GO TO (400,400,400,700,500,600,600,400), CHOBJ 00104060 00089 500 OBJCD(OBJIN) = 11 00104070 00090 OBJCD(OBJIN + 1) = 0 00104080 00091 OBJIN = OBJIN + 2 00104090 00092 LADDR = OBJIN 00104100 00093 GO TO 400 00104110 00094 600 IF(RADDR .EQ. 0) RADDR = OBJIN 00104120 00095 GO TO 400 00104130 00096 700 OBJCD(OBJIN) = 1 00104140 00097 OBJCD(OBJIN + 1) = 14 00104150 00098 OBJCD(OBJIN + 2) = 2 00104160 00099 OBJCD(OBJIN + 3) = 12 00104170 00100 OBJIN = OBJIN + 4 00104180 00101 GO TO 400 00104190 00102 C***************************************************************** 00104200 00103 C * 00104210 00104 C CHAIN ELEMENT INDICATES A TOKEN RECORD NUMBER. INCREMENT * 00104220 00105 C IT TO POINT TO THE OBJECT CODE BUFFER AND READ IN THE * 00104230 00106 C BUFFER AND, IF NECESSARY, ITS CONTINUATION. RELOCATE * 00104240 00107 C ANY NEGATIVE VALUES FOUND IN THE OBJECT CODE AND STORE * 00104250 00108 C THE RELOCATED CODE IN THE OBJCD ARRAY. * 00104260 00109 C * 00104270 00110 C***************************************************************** 00104280 00111 800 CHOBJ = CHOBJ + 4 00104290 00112 READ (DISK'CHOBJ) IN1 00104300 NDT75 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 00113 IF (OBJLN .GT. 80) READ (DISK'CHOBJ + 1) IN2 00104310 00114 DO 900 I = SKSMT, OBJLN 00104320 00115 INPVL = INPUT(I) 00104330 00116 IF (INPVL .LT. 0) INPVL = RELOC - INPVL 00104340 00117 OBJCD(OBJIN) = INPVL 00104350 00118 900 OBJIN = OBJIN + 1 00104360 00119 GO TO 400 00104370 00120 C***************************************************************** 00104380 00121 C * 00104390 00122 C A CHAIN ELEMENT WITH A VALUE OF 0 HAS INDICATED THE END * 00104400 00123 C OF THE OBJECT CODE CHAIN. IT IS NOW NECESSARY TO * 00104410 00124 C GENERATE THE TIME AND RERUN INSTRUCTIONS. * 00104420 00125 C * 00104430 00126 C***************************************************************** 00104440 00127 1000 OBJCD(OBJIN) = 12 00104450 00128 TSAPT = OBJIN + 1 00104460 00129 OBJIN = OBJIN + 2 00104470 00130 RERUN = OBJIN 00104480 00131 RUNCT = RUNCT - 1 00104490 00132 IF (RUNCT .EQ. 0) GO TO 1200 00104500 00133 DO 1100 I = 1, RUNCT 00104510 00134 OBJCD(OBJIN) = 13 00104520 00135 OBJCD(OBJIN + 1) = I 00104530 00136 1100 OBJIN = OBJIN + 2 00104540 00137 1200 OBJCD(OBJIN) = 14 00104550 00138 OBJCD(OBJIN + 1) = 0 00104560 00139 VALCT = (OBJIN + 2) / 2 00104570 00140 C* 00104580 00141 C 00104590 00142 C ALLOCATE SAVE AREA SPACE FOR THE TIME INSTRUCTION. 00104600 00143 C 00104610 00144 C* 00104620 00145 OBJCD(TSAPT) = VALCT + 1 00104630 00146 VALCT = VALCT + 7 00104640 00147 PC = OBJST 00104650 00148 RUNCT = 1 00104660 00149 C***************************************************************** 00104670 00150 C * 00104680 00151 C ALLOCATE SPACE FOR THE DATA BUFFER POINTERS 00104690 00152 C THERE ARE OUTCT NUMBER OF THEM. OAB POINTS 00104700 00153 C TO THE FIRST OF THE DATA BUFFER POINTERS. 00104710 00154 C 00104720 00155 C* 00104730 00156 OAB = 2 * VALCT + 1 00104740 00157 OABPT = OAB - 1 00104750 00158 VALCT = (OABPT + OUTCT + 1) / 2 00104760 00159 OCBPT = OCBST 00104770 00160 C* 00104780 00161 C READ THREE DATA BUFFERS FOR EACH PRINT OR PLOT CARD. 00104790 00162 C 00104800 00163 C* 00104810 00164 1300 IF (OCBPT .GT. OCBND) GO TO 1800 00104820 00165 READ (DISK'OCBPT) OUT1 00104830 00166 READ (DISK'OCBPT + 1) OUT2 00104840 00167 READ (DISK'OCBPT + 2) OUT3 00104850 00168 OCBPT = OCBPT + 3 00104860 NDT75 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-3 00169 C* 00104870 00170 C 00104880 00171 C ALLOCATE STORAGE FOR THE NEXT DATA BUFFER. 00104890 00172 C SET THE NEXT BUFFER POINTER TO THE FIRST INTEGER WORD. 00104900 00173 C 00104910 00174 C* 00104920 00175 OABPT = OABPT + 1 00104930 00176 DBPNT = 2 * VALCT + 1 00104940 00177 OBJCD(OABPT) = DBPNT 00104950 00178 VALCT = VALCT + 44 + 3 * VARCT 00104960 00179 C* 00104970 00180 C 00104980 00181 C BEGIN BUILDING DATA BUFFERS. INSERT TYPE OF BUFFER, 00104990 00182 C NUMBER OF VARIABLE, LOWEST RUN NUMBER, RUN NUMBER USAGE 00105000 00183 C INDICATORS, RECORD NUMBER, AND POINTERS TO REAL BUFFERS. 00105010 00184 C 00105020 00185 C* 00105030 00186 OBJCD(DBPNT) = TYPE 00105040 00187 OBJCD(DBPNT + 1) = VARCT 00105050 00188 LOWRN = 10 00105060 00189 DO 1400 I = 1, 10 00105070 00190 1400 BIT(I) = 0 00105080 00191 DO 1500 I = 1, VARCT 00105090 00192 RUNNO = RUN(I) 00105100 00193 BIT(RUNNO) = I 00105110 00194 IF (RUNNO .LT. LOWRN) LOWRN = RUNNO 00105120 00195 1500 CONTINUE 00105130 00196 OBJCD(DBPNT + 2) = LOWRN 00105140 00197 RUNNO = 0 00105150 00198 DO 1600 I = 1, 10 00105160 00199 IF (BIT(I) .NE. 0) RUNNO = RUNNO + 2 ** (I - 1) 00105170 00200 1600 CONTINUE 00105180 00201 OBJCD(DBPNT + 3) = RUNNO 00105190 00202 OBJCD(DBPNT + 4) = OABPT - OAB + 1 + OCBND 00105200 00203 RSTRT = (DBPNT + 8 + 2 * VARCT) / 2 + 1 00105210 00204 OBJCD(DBPNT + 5) = RSTRT 00105220 00205 OBJCD(DBPNT + 6) = RSTRT - 1 + 2 * VARCT 00105230 00206 DBPNT = DBPNT + 7 00105240 00207 DO 1700 I = 1, VARCT 00105250 00208 C* 00105260 00209 C 00105270 00210 C STORE PAIRS OF VNUM AND RUN IN CONSECUTIVE INTEGER WORDS. 00105280 00211 C 00105290 00212 C* 00105300 00213 SUB2 = DBPNT + I * 2 00105310 00214 SUB1 = SUB2 - 1 00105320 00215 OBJCD(SUB1) = VNUM(I) 00105330 00216 OBJCD(SUB2) = RUN(I) 00105340 00217 C* 00105350 00218 C 00105360 00219 C INITIALIZE HIGH AND LOW VALUES OF EACH VARIABLE IN 00105370 00220 C CONSECUTIVE REAL WORDS. 00105380 00221 C 00105390 00222 C* 00105400 00223 SUB2 = RSTRT - 1 + 2 * I 00105410 00224 SUB1 = SUB2 - 1 00105420 NDT75 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-4 00225 VAR(SUB1) = 0.D0 00105430 00226 IF (TYPE .EQ. 13) VAR(SUB1) = -1.1D0 * 10.D0 ** EXPMX 00105440 00227 1700 VAR(SUB2) = 1.1D0 * 10.D0 ** EXPMX 00105450 00228 C* 00105460 00229 C 00105470 00230 C INITIALIZE THE 40 WORD STORAGE BUFFER TO ZEROS. 00105480 00231 C 00105490 00232 C* 00105500 00233 SUB1 = OBJCD(DBPNT - 1) + 1 00105510 00234 SUB2 = SUB1 + 39 00105520 00235 DO 1750 I = SUB1, SUB2 00105530 00236 1750 VAR(I) = 0.D0 00105540 00237 GO TO 1300 00105550 00238 1800 DBEND = VALCT 00105560 00239 C* 00105570 00240 C 00105580 00241 C INITIALIZE ALL PARAMETER LOCATIONS. 00105590 00242 C 00105600 00243 C* 00105610 00244 DO 1900 I = 11, 16 00105620 00245 1900 VAR(I) = 0.D0 00105630 00246 IF (MOD (OPTNS / 512, 2) .EQ. 1) CALL NDT84 00105640 00247 IF (MOD (OPTNS / 2048, 2) .EQ. 1) CALL NDT86 00105650 00248 C 00105660 00249 C 00105670 00250 C FORCE PAGE EJECT FOR EXECUTION ERROR MESSAGES 00105680 00251 C 00105690 00252 C 00105700 00253 LINCT = -1 00105710 00254 RETURN 00105720 00255 END 00105740 EQUIVALENCED VARIABLES ( OBJIN 1 START 1 ) ( LOWRN 2 RSTRT 2 ) COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 OUTPT +356 LINE +736 EXTME +1126 RSTME +1130 ACCUM +1154 VAR +1156 OBJCD +1156 RELOC +53 XRFND +23 LITCT +25 DISK +6 VALCT +27 PC +22 OBJST +24 RUNNO +373 LADDR +26 RADDR +30 RERUN +20 RUNCT +21 DBEND +31 OPTNS +12 INPUT +356 CHAIN +616 RUN +640 VNUM +511 OUTCT +15 OAB +17 OUT1 +356 OUT2 +476 OUT3 +616 PRTCT +371 PLTCT +372 TYPE +357 VARCT +356 OCBST +55 OCBND +57 OCBPT +56 EXPMX +14 LINCT +10 OBJLN +356 IN1 +356 IN2 +476 NDT75 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-5 SUBPROGRAMS CALLED MOD. NDT86 NDT84 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] STOP 3 DBPNT 4 TSAPT 5 *OABPT 6 SKSMT 7 DSKCT 10 .R0003 11 .R0002 12 .R0001 13 BIT 14 CHNPT 26 CHREC 27 LOWRN 2 INPVL 30 OBJIN 1 .S0007 31 .S0006 32 .S0005 33 .S0004 34 .S0003 35 .S0002 36 .S0001 37 RSTRT 2 CHOBJ 40 SUB2 41 .S0010 42 I 43 .O0001 44 SUB1 45 START 1 TEMPORARIES .A0016 46 .Q0004 47 .Q0005 50 ACCUM 14# 24# BIT 21# 190# 193# 199 CHAIN 18# 32# 70# 74 CHNPT 18# 71# 72 72# 73 74 CHOBJ 18# 74# 75 76 87 87# 88 111 111# 112 113 CHREC 18# 64# 69 69# 70 CRSET 15# 24# DBEND 20# 26# 238# DBPNT 22# 176# 177 186 187 196 201 202 203 204 205 206 206# 213 233 DISK 17# 26# 51 70 112 113 165 166 167 DSKCT 17# 47# 50 50# 51 EXPMX 23# 32# 226 227 EXTME 14# 24# I 19# 51 51# 114# 115 133# 135 189# 190 191# 192 193 198# 199 207# 213 215 216 223 235# 236 244# 245 IN1 19# 26# 112# IN2 19# 26# 113# INPUT 17# 26# 32# 115 INPVL 19# 115# 116 116# 117 LADDR 19# 26# 92# LINCT 20# 38# 253# LINE 15# 24# LITCT 17# 26# 49 52 LOWRN 23# 38# 188# 194 194# 196 MOD. 67 246 247 NDT75 7# NDT84 246 NDT86 247 OAB 21# 32# 156# 157 202 OABPT 157# 158 175 175# 177 202 OBJCD 15# 26# 89# 90# 96# 97# 98# 99# 117# 127# 134# 135# 137# 138# 145# 177# 186# 187# 196# 201# 202# 204# 205# 215# 216# 233 OBJIN 18# 26# 68# 89 90 91 91# 92 94 96 97 98 99 100 100# 117 118 118# 127 128 129 129# 130 134 135 136 136# 137 138 139 OBJLN 19# 26# 113 114 OBJST 18# 26# 63# 68 147 OCBND 22# 32# 164 202 OCBPT 22# 32# 159# 164 165 166 167 168 168# OCBST 22# 32# 159 OPER 15# 24# OPTNS 23# 26# 67 246 247 OUT1 21# 32# 165# OUT2 22# 32# 166# OUT3 22# 32# 167# OUTCT 21# 32# 45# 158 OUTPT 15# 24# 26# 32# PC 18# 26# 147# PLTCT 21# 32# 45 PRTCT 21# 32# 45 PTRS 15# 24# 26# 32# 38# RADDR 19# 26# 65# 94 94# RELOC 17# 26# 46 49 52 116 RERUN 19# 26# 130# RMAX 14# 24# RMIN 14# 24# RSTME 14# 24# RSTRT 23# 38# 203# 204 205 223 RUN 21# 32# 192 216 RUNCT 20# 26# 131 131# 132 133 148# RUNNO 20# 26# 192# 193 194 197# 199 199# 201 SKSMT 23# 66# 67# 114 START 17# 26# 46# 48 51 53# STOP 17# 48# 49 49# 51 52 53 62 SUB1 23# 214# 215 224# 225 226 233# 234 235 SUB2 23# 213# 214 216 223# 224 227 234# 235 SUBSC 15# 24# SYM 15# 24# TITLE 15# 24# TSAPT 23# 128# 145 TYPE 22# 32# 186 226 VALCT 17# 26# 62# 63 139# 145 146 146# 156 158# 176 178 178# 238 VAR 14# 24# 26# 51# 225# 226# 227# 236# 245# VARCT 22# 32# 178 187 191 203 205 207 VNUM 21# 32# 215 XRFND 17# 26# 47 1000P 75 127# 100P 48# 54 1100P 133 136# 1200P 132 137# 1300P 164# 237 1400P 189 190# 1500P 191 195# 1600P 198 200# 1700P 207 227# 1750P 235 236# 1800P 164 238# 1900P 244 245# 200P 52 62# 300P 69# 73 400P 72# 88 93 95 101 119 500P 88 89# 600P 88 94# 700P 88 96# 800P 76 111# 900P 114 118# NDT75 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00105750 00002 C PROGRAM AUTHOR - GARY PELKEY 00105760 00003 C 00105770 00004 C 00105780 00005 SUBROUTINE NDT76 (SRTPT) 00105790 00006 C 00105800 00007 C 00105810 00008 C THIS ROUTINE PERFORMS A TAG SORT ON THE SYMBOL TABLE 00105820 00009 C FOR THE SYMBOL TABLE LISTING PROGRAM AND THE CROSS 00105830 00010 C REFERENCE PROGRAM. IT IS CALLED BY NDT61 IF EITHER OF 00105840 00011 C THESE OPTIONS IS IN EFFECT. 00105850 00012 C 00105860 00013 C 00105870 00014 REAL*8 RMIN,RMAX,LITBL(8192) 00105880 00015 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00105890 00016 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00105900 00017 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00105910 00018 3SYMTB(5,4096),SORT(16384) 00105920 00019 INTEGER SRTPT,I,DIST,START,STOP,FLAG,PNT,PNT2,TAG1,TAG2,SYMND 00105930 00020 REAL TNAME(4,8),REQST(4,4) 00105950 00021 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00105960 00022 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00105970 00023 2SYMTB,LITBL 00105980 00024 EQUIVALENCE (SORT(1),LITBL(1)),(SYMND,PTRS(17)) 00105990 00025 C 00106000 00026 C 00106010 00027 C A TAG (POINTER TO THE SYMBOL TABLE) IS CREATED FOR EACH NON- 00106020 00028 C EMPTY LOCATION IN THE SYMBOL TABLE. AN EMPTY LOCATION IS 00106030 00029 C SPECIFIED BY THE FIRST WORD = 32767. 00106040 00030 C 00106050 00031 C 00106060 00032 SRTPT=0 00106070 00033 DO 100 I=1,SYMND 00106080 00034 IF(SYMTB(1,I).EQ.32767) GO TO 100 00106090 00035 SRTPT=SRTPT+1 00106100 00036 SORT(SRTPT)=I 00106110 00037 100 CONTINUE 00106120 00038 C 00106130 00039 C 00106140 00040 C A SHELL D SORT IS NOW PERFORMED ON THE TAGS. THE TAGS RATHER 00106150 00041 C THAN THE SYMBOLS THEMSELVES ARE INTERCHANGED FOR ORDERING 00106160 00042 C BECAUSE THE SYMBOL TABLE MUST BE PRESERVED INTACT FOR FUTURE 00106170 00043 C REFERENCING. 00106180 00044 C 00106190 00045 C 00106200 00046 DIST=SRTPT 00106210 00047 200 DIST=DIST/2 00106220 00048 IF(DIST.EQ.0) GO TO 600 00106230 00049 DO 500 START=1,DIST 00106240 00050 STOP=SRTPT-DIST 00106250 00051 FLAG=1 00106260 00052 300 IF(FLAG.EQ.0) GO TO 500 00106270 00053 FLAG=0 00106280 00054 DO 400 PNT=START,STOP,DIST 00106290 00055 PNT2=PNT+DIST 00106300 00056 TAG1=SORT(PNT) 00106310 NDT76 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 TAG2=SORT(PNT2) 00106320 00058 IF(SYMTB(1,TAG1).LT.SYMTB(1,TAG2)) GO TO 400 00106330 00059 IF(SYMTB(1,TAG1).EQ.SYMTB(1,TAG2).AND.SYMTB(2,TAG1).LE. 00106340 00060 1SYMTB(2,TAG2)) GO TO 400 00106350 00061 SORT(PNT)=TAG2 00106360 00062 SORT(PNT2)=TAG1 00106370 00063 FLAG=1 00106380 00064 400 CONTINUE 00106390 00065 GO TO 300 00106400 00066 500 CONTINUE 00106410 00067 GO TO 200 00106420 00068 600 RETURN 00106430 00069 END 00106450 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 SORT +52220 SYMND +24 SUBPROGRAMS CALLED SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] STOP 1 PNT2 2 %REQST %TNAME FLAG 3 TAG2 4 .R0000 5 TAG1 6 .S0002 7 DIST 10 .S0001 11 .S0000 12 PNT 13 I 14 .O0002 15 SRTPT 16 .O0001 17 .O0000 20 START 21 TEMPORARIES .A0016 22 CARD1 15# 21# CARD2 15# 21# CRSET 15# 21# DEF 15# 21# DIST 19# 46# 47 47# 48 49 50 54 55 EQCHN 15# 21# ERROR 15# 21# FCTN 15# 21# FLAG 19# 51# 52 53# 63# I 19# 33# 34 36 LITBL 14# 21# 24# NDT76 5# OBJCD 15# 21# OPER 15# 21# PNT 19# 54# 55 56 61 PNT2 19# 55# 57 62 PTRS 15# 21# 24# REQST 20# RMAX 14# 21# RMIN 14# 21# SORT 15# 24# 36# 56 57 61# 62# SRTPT 5# 19# 32# 35 35# 36 46 50 START 19# 49# 54 STOP 19# 50# 54 SUBSC 15# 21# SYM 15# 21# SYMND 19# 24# 33 SYMTB 15# 21# 34 58 59 TAG1 19# 56# 58 59 62 TAG2 19# 57# 58 59 61 TITLE 15# 21# TMAP 15# 21# TNAME 20# TOKEN 15# 21# TYPCT 15# 21# XREF 15# 21# 100P 33 34 37# 200P 47# 67 300P 52# 65 400P 54 58 59 64# 500P 49 52 66# 600P 48 68# NDT76 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C COPYRIGHT 1978 - UNIVERSITY OF NOTRE DAME 00106460 00002 C PROGRAM AUTHOR - GARY PELKEY 00106470 00003 C 00106480 00004 C 00106490 00005 SUBROUTINE NDT77 (VAL,ICHAR) 00106500 00006 C 00106510 00007 C 00106520 00008 C THIS ROUTINE RETURNS TO THE PRINT AND PLOT ROUTINES 00106530 00009 C THE CHARACTERISTIC OF THE INPUT ARGUMENT VAL. 00106540 00010 C IF VAL IS ZERO OR NEGATIVE, SPECIAL DOCTORING 00106550 00011 C MUST TAKE PLACE TO RETURN THE DESIRED VALUE OF ICHAR. 00106560 00012 C 00106570 00013 C 00106580 00014 INTEGER ICHAR 00106590 00015 REAL*8 VAL,CHAR 00106600 00016 ICHAR=0 00106610 00017 IF (VAL .EQ. 0.) GOTO 100 00106620 00018 CHAR=DLOG10(DABS(VAL)) 00106630 00019 IF (CHAR .LT. 0.) CHAR=CHAR-.99999 00106640 00020 ICHAR=CHAR 00106650 00021 IF(10.**(ICHAR+1).LE.VAL+5.*10.**(ICHAR-5)) ICHAR=ICHAR+1 00106660 00022 100 RETURN 00106670 00023 END 00106690 SUBPROGRAMS CALLED DLG10. DABS. SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] ICHAR 1 CHAR 2 VAL 4 TEMPORARIES .A0016 6 .Q0000 7 .Q0001 10 CHAR 15# 18# 19 19# 20 DABS. 18 DLG10. 18 ICHAR 5# 14# 16# 20# 21 21# NDT77 5# VAL 5# 15# 17 18 21 100P 17 22# NDT77 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C* 00106700 00002 C 00106710 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00106720 00004 C PROGRAM AUTHOR - DANIEL A. POYDENCE 00106730 00005 C TRANSLATED BY - TIMOTHY J. MALLOY 00106740 00006 C 00106750 00007 C* 00106760 00008 SUBROUTINE NDT78 (LINES) 00106770 00009 C* 00106780 00010 C 00106790 00011 C EXECUTION TIME OUTPUT MONITOR 00106800 00012 C 00106810 00013 C* 00106820 00014 REAL*8 RMIN,RMAX,VAR(18705),ACCUM,EXTME,RSTME(10) 00106830 00015 REAL*8 INCR,LOW(11),HIGH(11) 00106840 00016 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00106850 00017 1SUBSC(6),OUTPT(240),LINE(120),OBJCD(37410) 00106860 00018 INTEGER LINES 00106870 00019 INTEGER PRNTR,PAGCT,LINCT,LINPP,PLINS,BLANK,VARCT,VNAMS(8,11), 00106880 00020 1IVNUM,ECHRS(44),SERIE(11),SRCNT,CHAR(10),TLIMT 00106890 00021 INTEGER LOOP,PNT,SRLST,SRPNT,NARO,CHRBF(10),CHRBS(5),CHRPT, 00106900 00022 1OPTNS,SCALE(11,5) 00106910 00023 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,OUTPT,LINE, 00106920 00024 1EXTME,RSTME,ACCUM,VAR 00106930 00025 EQUIVALENCE (VAR(1),OBJCD(1)),(PRNTR,PTRS(2)),(PAGCT, 00106940 00026 1PTRS(4)),(LINCT,PTRS(5)),(LINPP,PTRS(6)),(PLINS, 00106950 00027 2PTRS(32)),(BLANK,CRSET(1)),(VARCT,OUTPT(1)),(VNAMS(1,1), 00106960 00028 3OUTPT(4)),(IVNUM,OUTPT(92)),(LOW(1),OUTPT(103)), 00106970 00029 4(HIGH(1),OUTPT(125)),(ECHRS(1),OUTPT(114)),(SERIE(1), 00106980 00030 5OUTPT(147)),(SRCNT,OUTPT(178)),(CHAR(1),OUTPT(190)), 00106990 00031 6(CHRBS(1),CHRBF(6)),(OPTNS,PTRS(7)),(TLIMT,PTRS(33)) 00107000 00032 IF (LINCT .LT. 0) GO TO 100 00107010 00033 LINCT = LINCT + LINES 00107020 00034 IF (LINCT .LE. LINPP) GO TO 1600 00107030 00035 100 LINCT = LINES + 2 00107040 00036 PAGCT = PAGCT + 1 00107050 00037 CALL NDT45 (PAGCT, TITLE(6), 0) 00107060 00038 WRITE (PRNTR, 200) (TITLE(LOOP),LOOP=1,TLIMT) 00107070 00039 200 FORMAT ('1', 120A1) 00107080 00040 WRITE(PRNTR, 500) 00107090 00041 IF (PLINS .EQ. 0) GO TO 1600 00107100 00042 IF (PLINS .LT. 0) GO TO 600 00107110 00043 LINCT = LINCT + PLINS 00107120 00044 WRITE(PRNTR,300)((VNAMS(LOOP,PNT),LOOP=1,8),PNT=1,VARCT) 00107130 00045 300 FORMAT (5X,11(1X,8A1,1X)) 00107140 00046 WRITE (PRNTR,400) ECHRS 00107150 00047 400 FORMAT (5X,11(3X,4A1,3X)) 00107160 00048 IF (PLINS .EQ. 3) WRITE (PRNTR,500) 00107170 00049 500 FORMAT (1X) 00107180 00050 GO TO 1600 00107190 00051 C 00107200 00052 C 00107210 00053 C 00107220 00054 C 00107230 00055 600 LINCT = LINCT - PLINS 00107240 00056 WRITE (PRNTR,700) 00107250 NDT78 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 1 (CHAR(PNT-1),(VNAMS(LOOP,PNT), LOOP=1,8),PNT=2,VARCT) 00107260 00058 700 FORMAT (6X,8(A1,'=',8A1,2X)) 00107270 00059 WRITE (PRNTR,500) 00107280 00060 SRLST = SERIE(2) 00107290 00061 SRPNT = 2 00107300 00062 NARO = MOD(OPTNS/8,2) 00107310 00063 DO 1500 PNT = 1, SRCNT 00107320 00064 DO 800 LOOP = 1, 10 00107330 00065 800 CHRBF(LOOP) = BLANK 00107340 00066 CHRPT = 11 00107350 00067 900 IF (SERIE(SRPNT) .NE. SRLST) GO TO 1000 00107360 00068 CHRPT = CHRPT - 1 00107370 00069 CHRBF(CHRPT) = CHAR(SRPNT - 1) 00107380 00070 SRPNT = SRPNT + 1 00107390 00071 IF (SRPNT .LE. 11) GO TO 900 00107400 00072 1000 INCR = (HIGH(SRLST) - LOW(SRLST))/4. 00107410 00073 DO 1100 LOOP = 1, 5 00107420 00074 1100 CALL NDT44(LOW(SRLST)+FLOAT(LOOP-1)*INCR,SCALE(1,LOOP)) 00107430 00075 IF (NARO .EQ. 0) WRITE (PRNTR,1200) CHRBF,SCALE 00107440 00076 IF (NARO.EQ.1 .AND. IVNUM.EQ.12) WRITE (PRNTR,1300) CHRBS,SCALE 00107450 00077 IF (NARO.EQ.1 .AND. IVNUM.NE.12) WRITE (PRNTR,1400) CHRBS,SCALE 00107460 00078 1200 FORMAT (2X,10A1,2X,4(11A1,11X),11A1) 00107470 00079 1300 FORMAT (1X,5A1,2X,5(11A1,3X)) 00107480 00080 1400 FORMAT (3X,5A1,2X,5(11A1,3X)) 00107490 00081 IF (SRPNT .LE. 10) SRLST = SERIE(SRPNT) 00107500 00082 1500 CONTINUE 00107510 00083 1600 RETURN 00107520 00084 END 00107540 EQUIVALENCED VARIABLES ( CHRBS 6 CHRBF 1 ) COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 OUTPT +356 LINE +736 EXTME +1126 RSTME +1130 ACCUM +1154 VAR +1156 OBJCD +1156 PRNTR +5 PAGCT +7 LINCT +10 LINPP +11 PLINS +43 BLANK +251 VARCT +356 VNAMS +361 IVNUM +511 LOW +524 HIGH +552 ECHRS +537 SERIE +600 SRCNT +637 CHAR +653 OPTNS +12 TLIMT +44 SUBPROGRAMS CALLED MOD. NDT45 NDT44 FLOAT. NDT78 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] LINES 13 NARO 14 SRPNT 15 SRLST 16 LOOP 17 CHRBF 1 .R0002 20 .R0001 21 .R0000 22 .S0007 23 .S0006 24 .S0005 25 CHRPT 26 .S0003 27 .S0001 30 SCALE 31 PNT 120 INCR 121 .O0004 123 .O0003 124 .O0002 125 CHRBS 6 TEMPORARIES .A0016 167 .Q0003 170 .Q0004 171 .Q0005 172 ACCUM 14# 23# BLANK 19# 25# 65 CHAR 19# 25# 56 69 CHRBF 21# 25# 65# 69# 75 CHRBS 21# 25# 76 77 CHRPT 21# 66# 68 68# 69 CRSET 16# 23# 25# ECHRS 19# 25# 46 EXTME 14# 23# FLOAT. 74 HIGH 15# 25# 72 INCR 15# 72# 74 IVNUM 19# 25# 76 77 LINCT 19# 25# 32 33 33# 34 35# 43 43# 55 55# LINE 16# 23# LINES 8# 18# 33 35 LINPP 19# 25# 34 LOOP 21# 38 38# 44 44# 56 56# 64# 65 73# 74 LOW 15# 25# 72 74 MOD. 62 NARO 21# 62# 75 76 77 NDT44 74 NDT45 37 NDT78 8# OBJCD 16# 25# OPER 16# 23# OPTNS 21# 25# 62 OUTPT 16# 23# 25# PAGCT 19# 25# 36 36# 37 37# PLINS 19# 25# 41 42 43 48 55 PNT 21# 44 44# 56 56# 63# PRNTR 19# 25# 38 40 44 46 48 56 59 75 76 77 PTRS 16# 23# 25# RMAX 14# 23# RMIN 14# 23# RSTME 14# 23# SCALE 21# 74 74# 75 76 77 SERIE 19# 25# 60 67 81 SRCNT 19# 25# 63 SRLST 21# 60# 67 72 74 81# SRPNT 21# 61# 67 69 70 70# 71 81 SUBSC 16# 23# SYM 16# 23# TITLE 16# 23# 37 37# 38 TLIMT 19# 25# 38 VAR 14# 23# 25# VARCT 19# 25# 44 56 VNAMS 19# 25# 44 56 1000P 67 72# 100P 32 35# 1100P 73 74# 1200P 75 78# 1300P 76 79# 1400P 77 80# 1500P 63 82# 1600P 34 41 50 83# 200P 38 39# 300P 44 45# 400P 46 47# 500P 40 48 49# 59 600P 42 55# 700P 56 58# 800P 64 65# 900P 67# 71 NDT78 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C* 00107550 00002 C 00107560 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00107570 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY 00107580 00005 C 00107590 00006 C* 00107600 00007 SUBROUTINE NDT79 00107610 00008 C* 00107620 00009 C 00107630 00010 C EXTREMUM TRANSFER - DEFAULT CHECKING 00107640 00011 C 00107650 00012 C* 00107660 00013 REAL*8 RMIN,RMAX,VAR(18705),ACCUM,EXTME,RSTME(10) 00107670 00014 REAL*8 HI,LO,HIGH(11),LOW(11) 00107680 00015 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00107690 00016 1SUBSC(6),OUTPT(240),LINE(120),OBJCD(37410) 00107700 00017 INTEGER SRNUM,FLAG(11),DEFLT,ICHAR 00107710 00018 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,OUTPT,LINE, 00107720 00019 1EXTME,RSTME,ACCUM,VAR 00107730 00020 EQUIVALENCE (VAR(1),OBJCD(1)) 00107740 00021 EQUIVALENCE (SRNUM,OUTPT(171)),(LOW(1),OUTPT(103)), 00107750 00022 1(HIGH(1),OUTPT(125)),(FLAG(1),OUTPT(147)) 00107760 00023 C* 00107770 00024 C 00107780 00025 C DEFLT CONTAINS THE DEFAULT INFORMATION FOR THE HIGH AND LOW 00107790 00026 C VALUES FOR THIS VARIABLE: 00107800 00027 C DEFLT = 0 NO DEFAULTS 00107810 00028 C 1 LOW DEFAULT ONLY 00107820 00029 C 2 HIGH DEFAULT ONLY 00107830 00030 C 3 BOTH DEFAULTS 00107840 00031 C 00107850 00032 C* 00107860 00033 DEFLT = MOD(FLAG(SRNUM),10) 00107870 00034 C* 00107880 00035 C 00107890 00036 C FIRST CHECK FOR A HIGH DEFAULT. IF ONE EXISTS, CALL THE 00107900 00037 C SUBROUTINE NDT80 TO READ IN THE HIGH VALUE FROM THE DATA 00107910 00038 C BUFFERS. 00107920 00039 C 00107930 00040 C* 00107940 00041 IF (DEFLT .EQ. 0) GO TO 200 00107950 00042 IF (DEFLT .LT. 2) GO TO 100 00107960 00043 CALL NDT80(1) 00107970 00044 DEFLT = DEFLT - 2 00107980 00045 C* 00107990 00046 C 00108000 00047 C IF THERE IS A LOW DEFAULT, READ IN THE LOW VALUE FROM THE 00108010 00048 C DATA BUFFERS BY CALLING NDT80. 00108020 00049 C 00108030 00050 C* 00108040 00051 100 IF (DEFLT .EQ. 1) CALL NDT80(0) 00108050 00052 C* 00108060 00053 C 00108070 00054 C CHECK FOR AN INDEPENDENT VARIABLE WHOSE HIGH AND LOW ARE 00108080 00055 C EITHER EQUAL, OR REVERSED. 00108090 00056 C 00108100 NDT79 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C* 00108110 00058 200 HI = HIGH(SRNUM) 00108120 00059 LO = LOW(SRNUM) 00108130 00060 IF (HI .GT. LO) GO TO 400 00108140 00061 IF (HI .EQ. LO) GO TO 300 00108150 00062 C* 00108160 00063 C 00108170 00064 C IF HIGH WAS LESS THAN LOW, SWITCH THEM. 00108180 00065 C 00108190 00066 C* 00108200 00067 LOW(SRNUM) = HI 00108210 00068 HIGH(SRNUM) = LO 00108220 00069 GO TO 400 00108230 00070 C* 00108240 00071 C 00108250 00072 C IF HIGH EQUALS LOW, EXPAND THE RANGE. 00108260 00073 C 00108270 00074 C* 00108280 00075 300 CALL NDT77(HI,ICHAR) 00108290 00076 HIGH(SRNUM) = HI + 2.*(10.**(ICHAR-1)) 00108300 00077 LOW(SRNUM) = LO - 2.*(10.**(ICHAR-1)) 00108310 00078 400 RETURN 00108320 00079 END 00108340 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 OUTPT +356 LINE +736 EXTME +1126 RSTME +1130 ACCUM +1154 VAR +1156 OBJCD +1156 SRNUM +630 LOW +524 HIGH +552 FLAG +600 SUBPROGRAMS CALLED MOD. NDT77 NDT80 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] DEFLT 1 ICHAR 2 LO 3 .O0003 5 HI 7 TEMPORARIES .A0016 11 .Q0000 12 ACCUM 13# 18# CRSET 15# 18# DEFLT 17# 33# 41 42 44 44# 51 EXTME 13# 18# FLAG 17# 21# 33 HI 14# 58# 60 61 67 75 75# 76 HIGH 14# 21# 58 68# 76# ICHAR 17# 75 75# 76 77 LINE 15# 18# LO 14# 59# 60 61 68 77 LOW 14# 21# 59 67# 77# MOD. 33 NDT77 75 NDT79 7# NDT80 43 51 OBJCD 15# 20# OPER 15# 18# OUTPT 15# 18# 21# PTRS 15# 18# RMAX 13# 18# RMIN 13# 18# RSTME 13# 18# SRNUM 17# 21# 33 58 59 67 68 76 77 SUBSC 15# 18# SYM 15# 18# TITLE 15# 18# VAR 13# 18# 20# 100P 42 51# 200P 41 58# 300P 61 75# 400P 60 69 78# NDT79 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C* 00108350 00002 C 00108360 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00108370 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY 00108380 00005 C 00108390 00006 C* 00108400 00007 SUBROUTINE NDT80 (HILO) 00108410 00008 C* 00108420 00009 C 00108430 00010 C EXTREMUM TRANSFER - ROUNDING 00108440 00011 C 00108450 00012 C* 00108460 00013 REAL*8 RMIN,RMAX,VAR(18705),ACCUM,EXTME,RSTME(10) 00108470 00014 REAL*8 VAL,XLOW(22) 00108480 00015 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00108490 00016 1SUBSC(6),OUTPT(240),LINE(120),OBJCD(37410) 00108500 00017 INTEGER HILO,SRNUM,FHIGH,POS,ICHAR,SUB,SIGN 00108510 00018 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,OUTPT,LINE, 00108520 00019 1EXTME,RSTME,ACCUM,VAR 00108530 00020 EQUIVALENCE (VAR(1),OBJCD(1)) 00108540 00021 EQUIVALENCE (SRNUM,OUTPT(171)),(XLOW(1),OUTPT(103)), 00108550 00022 1(FHIGH,OUTPT(161)) 00108560 00023 C* 00108570 00024 C 00108580 00025 C THIS PROGRAM TAKES THE HIGH OR LOW VALUE FROM THE DATA 00108590 00026 C BUFFERS AND PUTS IT IN THE OUTPT ARRAY, ROUNDING THE VALUE. 00108600 00027 C 00108610 00028 C HILO DETERMINES WHETHER THE HIGH OR THE LOW IS USED. 00108620 00029 C HILO = 0 ==> LOW HILO = 1 ==> HIGH 00108630 00030 C 00108640 00031 C THE ROUNDING IS DONE TO TWO SIGNIFICANT DIGITS. 00108650 00032 C 00108660 00033 C* 00108670 00034 POS = FHIGH + 2*SRNUM - HILO - 1 00108680 00035 CALL NDT77 (VAR(POS), ICHAR) 00108690 00036 SUB = 11*HILO + SRNUM 00108700 00037 XLOW(SUB) = FLOAT(IDINT(VAR(POS)/10.**(ICHAR-1)))*10.**(ICHAR-1) 00108710 00038 SIGN = -2*HILO + 1 00108720 00039 VAL = VAR(POS) + SIGN*10.**(ICHAR-3) 00108730 00040 IF (FLOAT(SIGN)*XLOW(SUB) .GT. FLOAT(SIGN)*VAL) 00108740 00041 1 XLOW(SUB) = XLOW(SUB) - SIGN*10.**(ICHAR-1) 00108750 00042 RETURN 00108760 00043 END 00108780 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 OUTPT +356 LINE +736 EXTME +1126 RSTME +1130 ACCUM +1154 VAR +1156 OBJCD +1156 SRNUM +630 XLOW +524 FHIGH +616 NDT80 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 SUBPROGRAMS CALLED IDINT. NDT77 FLOAT. SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] SIGN 1 HILO 2 ICHAR 3 POS 4 SUB 5 VAL 6 .O0006 10 .O0005 11 .O0003 13 .O0002 14 .O0001 15 TEMPORARIES .A0016 16 .Q0000 17 ACCUM 13# 18# CRSET 15# 18# EXTME 13# 18# FHIGH 17# 21# 34 FLOAT. 37 40 HILO 7# 17# 34 36 38 ICHAR 17# 35 35# 37 39 40 IDINT. 37 LINE 15# 18# NDT77 35 NDT80 7# OBJCD 15# 20# OPER 15# 18# OUTPT 15# 18# 21# POS 17# 34# 35 37 39 PTRS 15# 18# RMAX 13# 18# RMIN 13# 18# RSTME 13# 18# SIGN 17# 38# 39 40 SRNUM 17# 21# 34 36 SUB 17# 36# 37 40 SUBSC 15# 18# SYM 15# 18# TITLE 15# 18# VAL 14# 39# 40 VAR 13# 18# 20# 35 35# 37 39 XLOW 14# 21# 37# 40 40# NDT80 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C* 00108790 00002 C 00108800 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00108810 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY 00108820 00005 C 00108830 00006 C* 00108840 00007 SUBROUTINE NDT81(POS) 00108850 00008 C* 00108860 00009 C 00108870 00010 C PLOTTED CHARACTER INSERTION 00108880 00011 C 00108890 00012 C* 00108900 00013 REAL*8 RMIN,RMAX,VAR(18705),ACCUM,EXTME,RSTME(10) 00108910 00014 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00108920 00015 1SUBSC(6),OUTPT(240),LINE(120),OBJCD(37410) 00108930 00016 INTEGER POS,XCHAR,CHAR(10),PCHAR 00108940 00017 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,OUTPT,LINE, 00108950 00018 1EXTME,RSTME,ACCUM,VAR 00108960 00019 EQUIVALENCE (CHAR(1),OUTPT(190)),(PCHAR,OUTPT(168)), 00108970 00020 1(VAR(1),OBJCD(1)) 00108980 00021 C* 00108990 00022 C 00109000 00023 C IF POS IS ZERO, INSERT PCHAR. 00109010 00024 C IF NOT, PRINT THE CHARACTER FROM THE CHAR ARRAY. 00109020 00025 C 00109030 00026 C* 00109040 00027 IF (POS .EQ. 0) GO TO 100 00109050 00028 XCHAR = POS - 1 00109060 00029 POS = CHAR(XCHAR) 00109070 00030 GO TO 200 00109080 00031 100 POS = PCHAR 00109090 00032 200 RETURN 00109100 00033 END 00109120 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 OUTPT +356 LINE +736 EXTME +1126 RSTME +1130 ACCUM +1154 VAR +1156 CHAR +653 PCHAR +625 OBJCD +1156 SUBPROGRAMS CALLED NDT81 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] XCHAR 1 POS 2 TEMPORARIES .A0016 3 ACCUM 13# 17# CHAR 16# 19# 29 CRSET 14# 17# EXTME 13# 17# LINE 14# 17# NDT81 7# OBJCD 14# 19# OPER 14# 17# OUTPT 14# 17# 19# PCHAR 16# 19# 31 POS 7# 16# 27 28 29# 31# PTRS 14# 17# RMAX 13# 17# RMIN 13# 17# RSTME 13# 17# SUBSC 14# 17# SYM 14# 17# TITLE 14# 17# VAR 13# 17# 19# XCHAR 16# 28# 29 100P 27 31# 200P 30 32# NDT81 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C* 00109130 00002 C 00109140 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00109150 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY 00109160 00005 C 00109170 00006 C* 00109180 00007 SUBROUTINE NDT82 (VAL) 00109190 00008 C* 00109200 00009 C 00109210 00010 C PLOT INDEPENDENT VARIABLE NAME PROCESSING 00109220 00011 C 00109230 00012 C* 00109240 00013 REAL*8 RMIN,RMAX,VAR(18705),ACCUM,EXTME,RSTME(10) 00109250 00014 REAL*8 VAL 00109260 00015 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00109270 00016 1SUBSC(6),OUTPT(240),LINE(120),OBJCD(37410) 00109280 00017 INTEGER BLANK,DOT,IVNAM(10),ODD,IVPRT,I,J 00109290 00018 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,OUTPT,LINE, 00109300 00019 1EXTME,RSTME,ACCUM,VAR 00109310 00020 EQUIVALENCE (BLANK,CRSET(1)),(DOT,OPER(1)),(IVNAM(1),OUTPT(2)), 00109320 00021 1(ODD,OUTPT(169)),(IVPRT,OUTPT(170)),(VAR(1),OBJCD(1)) 00109330 00022 C* 00109340 00023 C 00109350 00024 C ODD IS A CHARACTER THAT USUALLY CONTAINS A BLANK, BUT ON 00109360 00025 C EVERY TENTH LINE IS A DOT. 00109370 00026 C 00109380 00027 C* 00109390 00028 ODD = BLANK 00109400 00029 IF (IVPRT .EQ. 1) GO TO 200 00109410 00030 C* 00109420 00031 C 00109430 00032 C NO NEED TO PRINT THE INDEPENDENT VARIABLE. 00109440 00033 C IVNAM IS PRINTED DOWN IN THE FIRST GRID, AND THEN 00109450 00034 C BLANKED OUT FOR THE REST. 00109460 00035 C 00109470 00036 C* 00109480 00037 DO 100 I = 1, 13 00109490 00038 100 LINE(I) = BLANK 00109500 00039 LINE(7) = IVNAM(IVPRT) 00109510 00040 IVNAM(IVPRT) = BLANK 00109520 00041 GO TO 600 00109530 00042 C* 00109540 00043 C 00109550 00044 C ON EVERY TENTH LINE, PRINT THE INDEPENDENT VALUE. 00109560 00045 C 00109570 00046 C* 00109580 00047 200 ODD = DOT 00109590 00048 CALL NDT44(VAL,LINE(1)) 00109600 00049 C* 00109610 00050 C 00109620 00051 C RIGHT JUSTIFY THE INDEP VALUE. 00109630 00052 C 00109640 00053 C* 00109650 00054 300 IF (LINE(11) .NE. BLANK) GO TO 500 00109660 00055 DO 400 I = 1, 10 00109670 00056 J = 11 - I 00109680 NDT82 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 400 LINE(J+1) = LINE(J) 00109690 00058 LINE(1) = BLANK 00109700 00059 GO TO 300 00109710 00060 500 LINE(12) = BLANK 00109720 00061 LINE(13) = BLANK 00109730 00062 600 IVPRT = MOD(IVPRT, 10) + 1 00109740 00063 RETURN 00109750 00064 END 00109770 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 OUTPT +356 LINE +736 EXTME +1126 RSTME +1130 ACCUM +1154 VAR +1156 BLANK +251 DOT +320 IVNAM +357 ODD +626 IVPRT +627 OBJCD +1156 SUBPROGRAMS CALLED MOD. NDT44 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] J 1 .S0001 2 .S0000 3 VAL 4 I 6 TEMPORARIES .A0016 7 ACCUM 13# 18# BLANK 17# 20# 28 38 40 54 58 60 61 CRSET 15# 18# 20# DOT 17# 20# 47 EXTME 13# 18# I 17# 37# 38 55# 56 IVNAM 17# 20# 39 40# IVPRT 17# 20# 29 39 40 62 62# J 17# 56# 57 LINE 15# 18# 38# 39# 48 48# 54 57# 57 58# 60# 61# MOD. 62 NDT44 48 NDT82 7# OBJCD 15# 20# ODD 17# 20# 28# 47# OPER 15# 18# 20# OUTPT 15# 18# 20# PTRS 15# 18# RMAX 13# 18# RMIN 13# 18# RSTME 13# 18# SUBSC 15# 18# SYM 15# 18# TITLE 15# 18# VAL 7# 14# 48 48# VAR 13# 18# 20# 100P 37 38# 200P 29 47# 300P 54# 59 400P 55 57# 500P 54 60# 600P 41 62# NDT82 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C* 00109780 00002 C 00109790 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00109800 00004 C PROGRAM AUTHOR - TIMOTHY J. MALLOY 00109810 00005 C 00109820 00006 C* 00109830 00007 SUBROUTINE NDT83 00109840 00008 C* 00109850 00009 C 00109860 00010 C SORT OF DATA BUFFERS 00109870 00011 C 00109880 00012 C* 00109890 00013 REAL*8 RMIN,RMAX,VAR(18705),ACCUM,EXTME,RSTME(10) 00109900 00014 REAL*8 TEMP 00109910 00015 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00109920 00016 1SUBSC(6),OUTPT(240),LINE(120),OBJCD(37410) 00109930 00017 INTEGER VARCT,START,STOP,PLNTH,DIST,SORT,SORT1,DSORT,LOOP,LOOP1, 00109940 00018 1 SRTFG,ADDR,ADDR1 00109950 00019 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,OUTPT,LINE, 00109960 00020 1EXTME,RSTME,ACCUM,VAR 00109970 00021 EQUIVALENCE (VARCT,OUTPT(1)),(START,OUTPT(162)), 00109980 00022 1(STOP,OUTPT(163)),(VAR(1),OBJCD(1)) 00109990 00023 C* 00110000 00024 C 00110010 00025 C PLNTH IS THE NUMBER OF ELEMENTS IN DATA BUFFER. 00110020 00026 C 00110030 00027 C THE SHELL-D SORT COMPARES AT A DISTANCE 00110040 00028 C HALF OF PREVIOUS DISTANCE. 00110050 00029 C 00110060 00030 C* 00110070 00031 PLNTH = ((STOP - START)/VARCT) + 1 00110080 00032 DIST = PLNTH/2 00110090 00033 C* 00110100 00034 C 00110110 00035 C COMPARE THROUGH THE LIST DIST TIMES. 00110120 00036 C 00110130 00037 C* 00110140 00038 100 DO 400 SORT = 1, DIST 00110150 00039 SORT1 = (SORT - 1)*VARCT + START 00110160 00040 DSORT = DIST * VARCT 00110170 00041 200 LOOP1 = SORT1 00110180 00042 C* 00110190 00043 C 00110200 00044 C SRTFG IS 1 IF A CHANGE WAS MADE DURING THIS LOOP. 00110210 00045 C COMPARE LIST AT A DISTANCE DSORT APART. 00110220 00046 C 00110230 00047 C* 00110240 00048 SRTFG = 0 00110250 00049 DO 300 LOOP = SORT1, STOP, DSORT 00110260 00050 IF (VAR(LOOP) .GE. VAR(LOOP1)) GO TO 300 00110270 00051 C* 00110280 00052 C 00110290 00053 C IF OUT OF ORDER, REVERSE THE ITEMS. 00110300 00054 C 00110310 00055 C* 00110320 00056 SRTFG = 1 00110330 NDT83 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 DO 250 I = 1, VARCT 00110340 00058 ADDR = LOOP - 1 + I 00110350 00059 ADDR1 = LOOP1 - 1 + I 00110360 00060 TEMP = VAR(ADDR) 00110370 00061 VAR(ADDR) = VAR(ADDR1) 00110380 00062 250 VAR(ADDR1) = TEMP 00110390 00063 C* 00110400 00064 C 00110410 00065 C COMPARE THE NEXT ELEMENT. 00110420 00066 C 00110430 00067 C* 00110440 00068 300 LOOP1 = LOOP 00110450 00069 C* 00110460 00070 C 00110470 00071 C CONTINUE ONLY IF NO CHANGES WERE MADE IN THIS SEARCH. 00110480 00072 C 00110490 00073 C* 00110500 00074 IF (SRTFG .EQ. 1) GO TO 200 00110510 00075 400 CONTINUE 00110520 00076 DIST = DIST/2 00110530 00077 C* 00110540 00078 C 00110550 00079 C WHEN DIST GETS DOWN TO ZERO, SORT IS COMPLETED. 00110560 00080 C 00110570 00081 C* 00110580 00082 IF (DIST .NE. 0) GO TO 100 00110590 00083 RETURN 00110600 00084 END 00110620 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 OUTPT +356 LINE +736 EXTME +1126 RSTME +1130 ACCUM +1154 VAR +1156 VARCT +356 START +617 STOP +620 OBJCD +1156 SUBPROGRAMS CALLED SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] LOOP1 1 SORT 2 DSORT 3 LOOP 4 ADDR1 5 .R0000 6 .S0002 7 DIST 10 .S0001 11 .S0000 12 ADDR 13 TEMP 14 *I 16 .O0003 17 SRTFG 20 .O0002 21 .O0001 22 SORT1 23 .O0000 24 PLNTH 25 NDT83 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-2 TEMPORARIES .A0016 26 .Q0001 27 .Q0002 30 ACCUM 13# 19# ADDR 17# 58# 60 61 ADDR1 17# 59# 61 62 CRSET 15# 19# DIST 17# 32# 38 40 76 76# 82 DSORT 17# 40# 49 EXTME 13# 19# I 57# 58 59 LINE 15# 19# LOOP 17# 49# 50 58 68 LOOP1 17# 41# 50 59 68# NDT83 7# OBJCD 15# 21# OPER 15# 19# OUTPT 15# 19# 21# PLNTH 17# 31# 32 PTRS 15# 19# RMAX 13# 19# RMIN 13# 19# RSTME 13# 19# SORT 17# 38# 39 SORT1 17# 39# 41 49 SRTFG 17# 48# 56# 74 START 17# 21# 31 39 STOP 17# 21# 31 49 SUBSC 15# 19# SYM 15# 19# TEMP 14# 60# 62 TITLE 15# 19# VAR 13# 19# 21# 50 60 61# 61 62# VARCT 17# 21# 31 39 40 57 100P 38# 82 200P 41# 74 250P 57 62# 300P 49 50 68# 400P 38 75# NDT83 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C* 00110630 00002 C 00110640 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME 00110650 00004 C WRITTEN BY THOMAS L EVERMAN JR 00110660 00005 C 00110670 00006 C* 00110680 00007 SUBROUTINE NDT84 00110690 00008 C* 00110700 00009 C 00110710 00010 C THIS SUBROUTINE PRINTS THE OBJECT CODE LISTING. IT IS 00110720 00011 C INVOKED AT THE CONCLUSION OF THE LOADER PROGRAM IF 00110730 00012 C THE 'OBJECT' OPTION HAS BEEN SPECIFIED. 00110740 00013 C 00110750 00014 C* 00110760 00015 REAL*8 RMIN,RMAX,VAR(18705),ACCUM,EXTME,RSTME(10) 00110770 00016 REAL INST(37) 00110780 00017 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00110790 00018 1SUBSC(6),OUTPT(240),LINE(120),OBJCD(37410) 00110800 00019 INTEGER LINCT,OBJST,FLD1(4),FLD2,FLD3(4),OBPNT 00110810 00020 INTEGER OPRND,FIELD(4,2),SWTCH,I,BLANK,PRNTR 00110820 00021 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,OUTPT,LINE, 00110830 00022 1EXTME,RSTME,ACCUM,VAR 00110840 00023 EQUIVALENCE (VAR(1),OBJCD(1)),(LINCT,PTRS(5)),(OBJST,PTRS(17)) 00110850 00024 EQUIVALENCE (FLD1(1),FIELD(1,1)),(FLD3(1),FIELD(1,2)) 00110860 00025 EQUIVALENCE (BLANK,CRSET(1)),(PRNTR,PTRS(2)) 00110870 00026 DATA INST /'LOAD','ST ','ADD ','SUB ','MULT','DIV ','EXP ', 00110880 00027 1'RSUB','RDIV','REXP','INIT','TIME','RERN','STOP','STMT', 00110890 00028 2'INTG','ABS ','CLIP','COS ','DLAY','EXPF','LOG ','MAX ', 00110900 00029 3'MIN ','NOIS','NMRN','PULS','RAMP','SAMP','SIN ','SQRT', 00110910 00030 4'STEP','SWCH','TBFL','TBHL','TBLE','TBND'/ 00110920 00031 C* 00110930 00032 C 00110940 00033 C THE ABOVE ARRAY CONTAINS THE MNEMONICS FOR THE INSTRUCTION 00110950 00034 C SET. THE FIRST STEP IN THE PROGRAM IS TO TITLE A NEW PAGE. 00110960 00035 C 00110970 00036 C* 00110980 00037 LINCT = - 1 00110990 00038 CALL NDT57(4) 00111000 00039 WRITE (PRNTR,1) 00111010 00040 1 FORMAT (5X,'* * * * * O B J E C T C O D E * * * * *'/) 00111020 00041 WRITE (PRNTR,2) 00111030 00042 2 FORMAT (5X,'SOURCE STATEMENT OP CODE OPERAND'/) 00111040 00043 OBPNT = OBJST 00111050 00044 50 FLD2 = OBJCD(OBPNT) 00111060 00045 C* 00111070 00046 C 00111080 00047 C THE MNEMONIC HAS BEEN MATCHED TO THE OP CODE. NOW THE 00111090 00048 C OPERAND MUST BE LEFT JUSTIFIED IN A1 FORMAT AND INSERTED 00111100 00049 C INTO THE OPERAND FIELD UNLESS THE 'STMT' INSTRUCTION 00111110 00050 C IS ENCOUNTERED, IN THIS CASE, THE STATEMENT NUMBER OPERAND 00111120 00051 C IS PLACED IN FIELD1 SO THAT IT IS LISTED TO THE LEFT OF 00111130 00052 C THE OP CODE. 00111140 00053 C 00111150 00054 C* 00111160 00055 OPRND = OBJCD(OBPNT + 1) 00111170 00056 SWTCH = 1 00111180 NDT84 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 IF (FLD2 .NE. 15) SWTCH = 2 00111190 00058 CALL NDT45 (OPRND, FIELD(1, SWTCH), 2 - SWTCH) 00111200 00059 SWTCH = MOD (SWTCH, 2) + 1 00111210 00060 DO 100 I = 1, 4 00111220 00061 100 FIELD(I, SWTCH) = BLANK 00111230 00062 IF (OPRND .EQ. 0) FLD3(1) = BLANK 00111240 00063 CALL NDT57(1) 00111250 00064 IF (LINCT .NE. 3) GO TO 200 00111260 00065 LINCT = LINCT + 2 00111270 00066 WRITE (PRNTR,2) 00111280 00067 200 WRITE (PRNTR,3) FLD1, INST(FLD2), FLD3 00111290 00068 3 FORMAT (11X,4A1,12X,A4,7X,4A1) 00111300 00069 C* 00111310 00070 C 00111320 00071 C CHECK AND RETURN FOR 'STOP' INSTRUCTION 00111330 00072 C OTHERWISE INCREMENT AND LIST NEXT OPERATION 00111340 00073 C 00111350 00074 C* 00111360 00075 IF (FLD2 .EQ. 14) RETURN 00111370 00076 OBPNT = OBPNT + 2 00111380 00077 GO TO 50 00111390 00078 END 00111400 EQUIVALENCED VARIABLES ( FLD1 1 FIELD 1 FLD3 5 ) COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 OUTPT +356 LINE +736 EXTME +1126 RSTME +1130 ACCUM +1154 VAR +1156 OBJCD +1156 LINCT +10 OBJST +24 BLANK +251 PRNTR +5 SUBPROGRAMS CALLED MOD. NDT45 NDT57 SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] INST 11 FLD3 5 SWTCH 56 OBPNT 57 FLD2 60 FIELD 1 OPRND 61 FLD1 1 .S0000 62 I 63 .O0000 64 TEMPORARIES .A0016 120 .Q0000 121 .Q0001 122 ACCUM 15# 21# BLANK 20# 25# 61 62 CRSET 17# 21# 25# EXTME 15# 21# FIELD 20# 24# 58 58# 61# FLD1 19# 24# 67 FLD2 19# 44# 57 67 75 FLD3 19# 24# 62# 67 I 20# 60# 61 INST 16# 26# 67 LINCT 19# 23# 37# 64 65 65# LINE 17# 21# MOD. 59 NDT45 58 NDT57 38 63 NDT84 7# OBJCD 17# 23# 44 55 OBJST 19# 23# 43 OBPNT 19# 43# 44 55 76 76# OPER 17# 21# OPRND 20# 55# 58 58# 62 OUTPT 17# 21# PRNTR 20# 25# 39 41 66 67 PTRS 17# 21# 23# 25# RMAX 15# 21# RMIN 15# 21# RSTME 15# 21# SUBSC 17# 21# SWTCH 20# 56# 57# 58 59 59# 61 SYM 17# 21# TITLE 17# 21# VAR 15# 21# 23# 100P 60 61# 1P 39 40# 200P 64 67# 2P 41 42# 66 3P 67 68# 50P 44# 77 NDT84 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 C***************************************************************** 00111410 00002 C * 00111420 00003 C COPYRIGHT (C) 1978 - UNIVERSITY OF NOTRE DAME * 00111430 00004 C PROGRAM AUTHOR - THOMAS L EVERMAN JR * 00111440 00005 C * 00111450 00006 C THIS PROGRAM OPTIMIZES THE OBJECT CODE 00111460 00007 C * 00111470 00008 C***************************************************************** 00111480 00009 SUBROUTINE NDT85 00111490 00010 REAL*8 RMIN,RMAX,LITBL(8192) 00111500 00011 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00111510 00012 1SUBSC(6),TYPCT(20),EQCHN(80),TOKEN(80),CARD1(80),CARD2(80), 00111520 00013 2ERROR(80),OBJCD(160),DEF(80),XREF(80),TMAP(80),FCTN(5,22), 00111530 00014 3SYMTB(5,4096) 00111540 00015 INTEGER OBJPT,INSPT,MOVBK,INSRT 00111550 00016 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,TYPCT, 00111560 00017 1EQCHN,TOKEN,CARD1,CARD2,ERROR,OBJCD,DEF,XREF,TMAP,FCTN, 00111570 00018 2SYMTB,LITBL 00111580 00019 EQUIVALENCE (OBJPT,OBJCD(1)) 00111590 00020 C* 00111600 00021 C 00111610 00022 C MOVBK INDICATES THE NUMBER OF DELETED OP CODES AND 00111620 00023 C OPERANDS. INSPT POINTS TO THE NEXT INSTRUCTION TO 00111630 00024 C CHECK FOR THE 'ST' OPERATION. 00111640 00025 C 00111650 00026 C* 00111660 00027 MOVBK = 0 00111670 00028 INSPT = 5 00111680 00029 C* 00111690 00030 C 00111700 00031 C CHECK FOR STORE. THEN CHECK FOR A SUBSEQUENT LOAD WITH 00111710 00032 C THE IDENTICAL OPERAND BY LOOKING AT NEXT THREE WORDS. 00111720 00033 C 00111730 00034 C* 00111740 00035 50 IF (OBJCD(INSPT) .NE. 2) GO TO 100 00111750 00036 IF (OBJCD(INSPT + 2) .NE. 1 .OR. OBJCD(INSPT + 1) .NE. 00111760 00037 1OBJCD(INSPT + 3)) GO TO 100 00111770 00038 C* 00111780 00039 C 00111790 00040 C A CONSECUTIVE ST/LOAD HAS BEEN FOUND. UPDATE POINTERS 00111800 00041 C TO CAUSE THESE WORDS TO BE OVERWRITTEN. 00111810 00042 C 00111820 00043 C* 00111830 00044 MOVBK = MOVBK + 4 00111840 00045 INSPT = INSPT + 2 00111850 00046 GO TO 200 00111860 00047 C* 00111870 00048 C 00111880 00049 C OVERWRITE ANY ST/LOAD COMBINATION IF IT EXISTS 00111890 00050 C 00111900 00051 C* 00111910 00052 100 IF (MOVBK .EQ. 0) GO TO 200 00111920 00053 INSRT = INSPT - MOVBK 00111930 00054 OBJCD(INSRT) = OBJCD(INSPT) 00111940 00055 OBJCD(INSRT + 1) = OBJCD(INSPT + 1) 00111950 00056 C* 00111960 NDT85 NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1-1 00057 C 00111970 00058 C UPDATE POINTER AND CHECK FOR END OF BUFFER. IF 00111980 00059 C COMPLETE REDUCE BUFFER LENGTH INDICATOR (OBJPT). 00111990 00060 C 00112000 00061 C* 00112010 00062 200 INSPT = INSPT + 2 00112020 00063 IF (INSPT .LT. OBJPT - 2) GO TO 50 00112030 00064 IF (MOVBK .EQ. 0) GO TO 300 00112040 00065 OBJPT = OBJPT - MOVBK 00112050 00066 OBJCD(OBJPT) = OBJCD(INSPT + 1) 00112060 00067 OBJCD(OBJPT - 1) = OBJCD(INSPT) 00112070 00068 300 RETURN 00112080 00069 END 00112100 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112220) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 TYPCT +356 EQCHN +402 TOKEN +522 CARD1 +642 CARD2 +762 ERROR +1102 OBJCD +1222 DEF +1462 XREF +1602 TMAP +1722 FCTN +2042 SYMTB +2220 LITBL +52220 OBJPT +1222 SUBPROGRAMS CALLED SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] INSRT 1 INSPT 2 MOVBK 3 TEMPORARIES .A0016 4 CARD1 11# 16# CARD2 11# 16# CRSET 11# 16# DEF 11# 16# EQCHN 11# 16# ERROR 11# 16# FCTN 11# 16# INSPT 15# 28# 35 36 45 45# 53 54 55 62 62# 63 66 67 INSRT 15# 53# 54 55 LITBL 10# 16# MOVBK 15# 27# 44 44# 52 53 64 65 NDT85 9# OBJCD 11# 16# 19# 35 36 54# 54 55# 55 66# 66 67# 67 OBJPT 15# 19# 63 65 65# 66 67 OPER 11# 16# PTRS 11# 16# RMAX 10# 16# RMIN 10# 16# SUBSC 11# 16# SYM 11# 16# SYMTB 11# 16# TITLE 11# 16# TMAP 11# 16# TOKEN 11# 16# TYPCT 11# 16# XREF 11# 16# 100P 35 36 52# 200P 46 52 62# 300P 64 68# 50P 35# 63 NDT85 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 SUBROUTINE NDT86 00112110 00002 REAL*8 RMIN,RMAX,VAR(18705),ACCUM,EXTME,RSTME(10), 00112120 00003 1 AVGTM(37) 00112130 00004 INTEGER PTRS(45),TITLE(120),CRSET(39),OPER(9),SYM(15), 00112140 00005 1 SUBSC(6),OUTPT(240),LINE(120),OBJCD(37434), 00112150 00006 2 LADDR,ADDR,SUB,PRNTR 00112160 00007 COMMON RMIN,RMAX,PTRS,TITLE,CRSET,OPER,SYM,SUBSC,OUTPT,LINE, 00112170 00008 1 EXTME,RSTME,ACCUM,VAR 00112180 00009 EQUIVALENCE (VAR(1),OBJCD(1)),(LADDR,PTRS(19)), 00112190 00010 1 (PRNTR,PTRS(2)) 00112200 00011 DATA AVGTM /1.D0,2.D0,3.D0,4.D0,5.D0,6.D0,7.D0, 00112210 00012 1 1.D0,2.D0,3.D0,4.D0,5.D0,6.D0,7.D0, 00112220 00013 2 1.D0,2.D0,3.D0,4.D0,5.D0,6.D0,7.D0, 00112230 00014 3 1.D0,2.D0,3.D0,4.D0,5.D0,6.D0,7.D0, 00112240 00015 4 1.D0,2.D0,3.D0,4.D0,5.D0,6.D0,7.D0, 00112250 00016 5 1.D0,2.D0/ 00112260 00017 EXTME = 0.D0 00112270 00018 ADDR = LADDR - 2 00112280 00019 100 ADDR = ADDR + 2 00112290 00020 IF (OBJCD(ADDR) .EQ. 12) GO TO 200 00112300 00021 SUB = OBJCD(ADDR) 00112310 00022 EXTME = EXTME + AVGTM(SUB) 00112320 00023 GO TO 100 00112330 00024 200 WRITE (PRNTR,300) EXTME 00112340 00025 300 FORMAT (' EXECUTION TIME ESTIMATES ',E9.3,'UNITS') 00112350 00026 RETURN 00112360 00027 END 00112380 EQUIVALENCED VARIABLES COMMON BLOCKS /.COMM./(+112250) RMIN +0 RMAX +2 PTRS +4 TITLE +61 CRSET +251 OPER +320 SYM +331 SUBSC +350 OUTPT +356 LINE +736 EXTME +1126 RSTME +1130 ACCUM +1154 VAR +1156 OBJCD +1156 LADDR +26 PRNTR +5 SUBPROGRAMS CALLED SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] AVGTM 1 SUB 113 ADDR 114 TEMPORARIES .A0016 126 ACCUM 2# 7# ADDR 4# 18# 19 19# 20 21 AVGTM 2# 11# 22 CRSET 4# 7# EXTME 2# 7# 17# 22 22# 24 LADDR 4# 9# 18 LINE 4# 7# NDT86 1# OBJCD 4# 9# 20 21 OPER 4# 7# OUTPT 4# 7# PRNTR 4# 9# 24 PTRS 4# 7# 9# RMAX 2# 7# RMIN 2# 7# RSTME 2# 7# SUB 4# 21# 22 SUBSC 4# 7# SYM 4# 7# TITLE 4# 7# VAR 2# 7# 9# 100P 19# 23 200P 20 24# 300P 24 25# NDT86 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001 SUBROUTINE NDT87 00112390 00002 RETURN 00112400 00003 END 00112410 SUBPROGRAMS CALLED SCALARS AND ARRAYS [ "*" NO EXPLICIT DEFINITION - "%" NOT REFERENCED ] TEMPORARIES .A0016 1 NDT87 1# NDT87 [ NO ERRORS DETECTED ] MAIN. NDTRN2 FORTRAN V.5A(700) /KI/OPT/C 11-JUN-81 16:46 PAGE 1 00001