C DMPTAB -- DUMP TABLES ROUTINE C C SUBROUTINE DMPTAB(TYPE,MODULE,SEGMNT,VARIAB,OUTPUT) INTEGER TYPE(3),MODULE(3),SEGMNT(3),VARIAB(3),OUTPUT INTEGER SEG(3),MOD(3),VAR(3),IA1,IA2,ILINE,IADD,CLSFLG INTEGER CDE(40),ITYPE,ILIST,SELECT(4),DESC(4) INTEGER SAVSEG(3),SAVMOD(3) INTEGER*4 IREC1,IREC2,IREC3 COMMON/RECS/IREC1,IREC2,IREC3 CLSFLG=.FALSE. LUN=5 IF(OUTPUT.LT.2)GOTO10 600 OPEN(UNIT=7,NAME='SDT.DAT',ACCESS='SEQUENTIAL',TYPE='NEW', + ERR=800) GOTO700 800 IF(CLSFLG.EQ..TRUE.)GOTO850 CLSFLG=.TRUE. CLOSE(UNIT=7) GOTO600 850 ENCODE(84,852,MESAGE) 852 FORMAT(' *** OPEN ERROR FILE SDT.DAT, RE: WAS NOT PROPERLY', + ' CLOSED AFTER PREVIOUS USEAGE ***') RETURN 700 LUN=7 10 IF(KOMSTR(TYPE,1,3,'ALL',1,3).EQ.0)SELECT(1)=0 IF(KOMSTR(TYPE,1,3,' ',1,3).EQ.0)SELECT(1)=-1 IF(KOMSTR(TYPE,1,4,'CODE',1,4).EQ.0)SELECT(1)=2 IF(KOMSTR(TYPE,1,4,'VARS',1,4).EQ.0)SELECT(1)=3 IF(KOMSTR(TYPE,1,4,'PROG',1,4).EQ.0)SELECT(1)=1 IF(KOMSTR(MODULE,1,3,'ALL',1,3).EQ.0)SELECT(2)=1 IF(KOMSTR(VARIAB,1,3,'ALL',1,3).EQ.0)SELECT(4)=1 IF(KOMSTR(VARIAB,1,3,' ',1,3).EQ.0)SELECT(4)=1 GOTO(100,200,300),SELECT(1) C C PROCESS .PRG FILE C 100 IREC1=1 WRITE(LUN,104) 104 FORMAT(//' PROGRAMS FILE:'/, + ' SEGMENT MODULE ADDRESS LENGTH SYMBOLS(1=YES,0=NO', + ',-1=NOCODE)'/, + '----------------------------------------------------') 101 READ(1'IREC1,ERR=200)SEG,MOD,IA1,IA2,ILIST IF(SELECT(2).EQ.1)GOTO102 IF(KOMSTR(MOD,1,6,MODULE,1,6).NE.0)GOTO101 IF(SELECT(3).EQ.1)GOTO102 IF(KOMSTR(SEG,1,6,SEGMNT,1,6).NE.0)GOTO101 102 WRITE(LUN,103)SEG,MOD,IA1,IA2-IA1+1,ILIST 103 FORMAT(' ',3A2,' ',3A2,' ',O6,' ',I5,' ',I3) GOTO101 C C PROCESS CODE FILE C 200 GOTO(500,220,500),SELECT(1) 220 IREC3=1 WRITE(LUN,201) 201 FORMAT(//' CODE TABLE FILE:') IFLAG=0 202 READ(3'IREC3,ERR=300)SAVSEG,SAVMOD,ILINE,IADD,CDE IF(IFLAG.NE.0)GOTO206 209 CALL STRMOV(SAVSEG,1,6,SEG,1) CALL STRMOV(SAVMOD,1,6,MOD,1) 206 IF(SELECT(2).EQ.1)GOTO203 IF(KOMSTR(MOD,1,6,MODULE,1,6).NE.0)GOTO202 IF(SELECT(3).EQ.1)GOTO203 IF(KOMSTR(SEG,1,6,SEGMNT,1,6).NE.0)GOTO202 203 IF(SELECT(4).EQ.1)GOTO210 IF(LSTRNG(CDE,1,10,VARIAB,1,4).LE.0)GOTO202 210 IF(IFLAG.NE.0)GOTO205 IFLAG=1 WRITE(LUN,204)SEG,MOD 204 FORMAT(' CODE FOR SEGMENT: ',3A2,' MODULE: ',3A2/, + ' ADDRESS CODE'/, + '-----------------------------------------------------') 205 IF(KOMSTR(SAVSEG,1,6,SEG,1,6).NE.0)GOTO208 IF(KOMSTR(SAVMOD,1,6,MOD,1,6).NE.0)GOTO208 DO 290 I=1,80 IF(KOMSTR(CDE,I,1,"11,1,1).EQ.0)CALL STRMOV(' ',1,1,CDE,I) 290 CONTINUE WRITE(LUN,207)IADD,CDE 207 FORMAT(1X,O6,1X,40A2) GOTO202 208 IFLAG=0 GOTO209 C C PROCESS THE VARIABLES FILE C 300 GOTO(500,500,301),SELECT(1) 301 IREC2=1 WRITE(LUN,303) 303 FORMAT(//' VARIABLES FILE:'/, + ' SEGMENT MODULE VARIABLE ADDRESS TYPE SIZE'/, + '-----------------------------------------------------') 305 READ(2'IREC2,ERR=500)SEG,MOD,VAR,IADD,ITYPE,ISIZE IF(SELECT(2).EQ.1)GOTO308 IF(KOMSTR(MOD,1,6,MODULE,1,6).NE.0)GOTO305 IF(SELECT(3).EQ.1)GOTO308 IF(KOMSTR(SEG,1,6,SEGMNT,1,6).NE.0)GOTO305 308 IF(SELECT(4).EQ.1)GOTO310 IF(KOMSTR(VAR,1,6,VARIAB,1,6).NE.0)GOTO305 310 CALL STRMOV('UNKNOWN ',1,8,DESC,1) IF(ITYPE.EQ.1)CALL STRMOV('INTEGER ',1,8,DESC,1) IF(ITYPE.EQ.2)CALL STRMOV('REAL ',1,8,DESC,1) IF(ITYPE.EQ.3)CALL STRMOV('BYTES ',1,8,DESC,1) WRITE(LUN,320)SEG,MOD,VAR,IADD,DESC,ISIZE 320 FORMAT(' ',3A2,' ',3A2,' ',3A2,' ',O6,' ',4A2,' ',I5) GOTO305 500 IF(LUN.EQ.7.AND.OUTPUT.EQ.2)GOTO520 IF(LUN.EQ.7.AND.OUTPUT.EQ.4)GOTO540 IF(LUN.NE.7)GOTO550 TYPE 510 510 FORMAT(' TABLES ARE ON: [DEFAULT UIC]SDT.DAT ') CLOSE(UNIT=7) GOTO550 520 CALL PRTNOW(7,'LP') GOTO550 540 CALL PRTNOW(7,'GD') 550 RETURN END