FTN4 PROGRAM TMPG0(5),92903-16452 REV.1913 790119 C C C NAME: TMPG0 C SOURCE: &TMPG0 92903-18452 C RELOC: %TMPG0 92903-16452 C C PGMR: DANIEL POT / FRANCOIS GAULLIER HPG C C C ************************************************************** C * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * C * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- * C * PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH- * C * OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * C ************************************************************** C C C C ************************************************************* C * * C * THIS IS THE FIRST SEGMENT OF TMPGN * C * * C * THIS SEGMENT IS CALL TO ANALYSE THE ANSWER TO THE * C * MENU SCREEN OR AT THE END OF EACH TASK TO REQUEST * C * THE NEXT ONE. * C * THIS SEGMENT TAKES CARE ALSO OF ALL FATAL ERRORS. * C * * C ************************************************************* C C C STOP USED: 4 - 5 - 7 - 10 - 11 - 13 - 14 - 15 - 16 - 17 - 20 C ---------- C C C IRQFLG(30) = NCRTH COMMON STATUS : 0 IF EMPTY, 1 IF FULL C (NOT USED IN TMPGN) C C C-----LABEL COMMON # 1 GENERAL INFORMATION C COMMON /TMGC1/LU,LUPRT,LUOUT,ISYTP,ISCRN,IOFST,IEND,IJOB C C-----LABEL COMMON # 2 FLAGS C COMMON /TMGC2/ITMFL,IRQFLG(30),IMOTR(9),IVASC0(9) C C-----LABEL COMMON # 3 BUFFER AREA C COMMON /TMGC3/IREFC,IDUM0(6),NCRTH(1) C C-----LABEL COMMON # 4 BUFFER USED IN CREATION PHASE & ERROR FLAG C AND LINE BUFFER OF 90 WORDS MAX C COMMON /TMGC4/IERFL,IERNB,IERTN,IERMS(7),LINEBU(1) C C DIMENSION NAME(3),IREG(2),IDCB(144),FNAME(3) DIMENSION ITEMP(3),IRSET(8),IPRES(26) C INTEGER FNAME,OPEN,PURGE,AREG,BREG,FTYPE EQUIVALENCE (REG,IREG,AREG),(IREG(2),BREG) C LOGICAL JPAR,KPAR,ISBTW,OKABT,GETBK,OKABT,CMPB LOGICAL READF,WRITF,CREAT,RWNDF,DORMT C DATA IRSET/15530B,15555B,15446B,2Hk0,2HB ,15542B,15510B,15512B/ DATA IPRES/15542B,6412B,6412B,15446B,2Ha+,2H47,2HC ,15446B .,2HdJ,2HPr,2Hes,2Hs ,15446B,2HdK,2HNE,2HXT,2H S,2HCR,2HEE .,2HN ,15446B,2HdJ,2Hke,74433B,2H&d,2H@ / DATA FNAME/2H& ,2H ,2H / DATA FTYPE/31/ D DATA LUOXXX/40/ DATA MAXCOP/2/ C KPAR(IP1,IP2,IP3)=JPAR(LINEBU,LENSC0,IDXX,IP1,IP2,IFLG,IP3) C C-----TERMINATE TMPGN ? C D WRITE(LUOXXX,9877)ISYTP,ISCRN,IOFST,IEND,IJOB D9877 FORMAT(2/" $OPSY="I3", SCREEN# ="I2", IOFST="I5", IEND="I4, D .", IJOB="I4) C IF(IEND .EQ. 2) GOTO 9900 C C-----SYSTEM TYPE OK ? (RTE-IV ONLY) C IF(ISYTP.NE.-9) GOTO 9900 C C JOB ? C IF(IJOB.EQ.2) GOTO 300 IF(IJOB.EQ.4) GOTO 270 C C-----ANALYSE SFK OR MENU SCREEN (#8 OR #6 OR #7) C IDXX=1 NERR=-IEND IF(NERR .EQ. 0) GOTO 10 C 5 CALL TMPGE(NERR,IDXX,IASC(IGET(1653B))) C C-----GET DATA FROM THE 2645/2648 TERMINAL C 10 LENSC0=0 IF(ISCRN .EQ. 6) LENSC0=9 IF(ISCRN .EQ. 7) LENSC0=4 IF(ISCRN .EQ. 8) LENSC0=2 IF(LENSC0 .EQ. 0) STOP 0004 C-----IF GET FAIL, RE-ISSUE THE SCREEN (MENU) IF( GETBK(LU,LINEBU,LENSC0) ) GOTO 198 C C IMOTR(1) = TMPGN FUNCTION C IMOTR(2) = LOAD OPTION C IMOTR(3) = PRINT LOAD MAP (0 DO NOT PRINT) C IMOTR(4) = C IMOTR(5) = C IMOTR(6) = APPLICATION NAME C IMOTR(8) = SECURITY CODE (ALWAYS 0) C IMOTR(9) = CARTRIDGE # C C-----ANALYSE USER'S ANSWER C IF(ISCRN .EQ. 8) GOTO 60 IEND=0 IF( ISCRN .EQ. 6 ) GOTO 40 C C-----MODIFICATION OF THE TMP IS PERFORMED, FUNCTION SELECTED ? C IMOTR=0 IDXX=1 IF(KPAR(ITEMP,1,JVAL)) GOTO 195 NERR=1 IF(IFLG.NE.3) GOTO 5 IF(ITEMP .EQ. 2HM ) IMOTR=1 IF(ITEMP .EQ. 2HT ) IMOTR=2 IF(ITEMP .EQ. 2HU ) IMOTR=4 IF(ITEMP .EQ. 2HL ) IMOTR=6 IF(ITEMP .EQ. 2HK ) IMOTR=7 IF(ITEMP .EQ. 2HI ) IMOTR=8 IF(IMOTR .EQ. 0) GOTO 5 IVASC0(3)=ITEMP GOTO 56 C C-----CREATION OF A NEW TMP IS PERFORMED, C INITIALIZE NCRTH IN PACKED FORMAT WITH BLANK OR 0 C 40 CONTINUE C C========================================= SPECIAL TMPGN C C SET UP SYSTEM MODULE: ZTMP, TSE, STORA, STORB, TSMG C INTO 2 USER PARTITION C C UPT 1: ZTMP, TSE, STORA, STORB C NO PARTITION SIZE, NO PARTITION ASSIG. C C UPT 2: TSMG C PARTITION SIZE, NO PARTITION ASSIG. C C K=6 C C-----FIXED PART INITIALISATION C CALL MOVEW(IMOTR(6),NCRTH(5),4) CALL NUL(NCRTH(9),9) CALL MOVEW(14HZTMP TSE ,NCRTH(18),7) NCRTH(21)=67 NCRTH(25)=0 CALL NUL(NCRTH(26),74) CALL MOVEW(20HTMP REV.1913 ,NCRTH(87),10) C C INTERACTIVE AND AUXILIARY LU C (1 DUMMY INTERACTIVE DEVICE & 3 AUXILIARY DEVICES) C I=IREFC NCRTH(2)=I NCRTH(I)=00 NCRTH(I+1)=3070 I=I+2 NCRTH(3)=I NCRTH(I)=LU NCRTH(I+1)=2645 NCRTH(I+2)=2 NCRTH(I+3)=7905 NCRTH(I+4)=3 NCRTH(I+5)=7905 I=I+6 NCRTH(4)=I C C-----PROGRAMS C NCRTH(I+1)=0 NCRTH(I+2)=0 CALL MOVEW(24HTSE STORA STORB IOM70 ,NCRTH(I+3),12) NCRTH(I)=I+15 I=NCRTH(I) NCRTH(I+1)=0 NCRTH(I+2)=0 CALL MOVEW(6HTSMG ,NCRTH(I+3),3) NCRTH(I)=I+6 I=NCRTH(I) NCRTH(I+1)=0 NCRTH(I+2)=0 CALL MOVEW(18HZTMP OFLPO IOM75 ,NCRTH(I+3),9) NCRTH(I)=I+12 NCRTH=NCRTH(I)-1 C C========================================= END SPECIAL TMPGN C C-----CREATION OF A NEW TMP, GET THE CR# C IMOTR=1 IDXX=1 IF(KPAR(ITEMP,6,IMOTR(9))) GOTO 195 IF(IFLG .EQ. 0) GOTO 55 NERR=5 IF(IFLG .NE. 3) GOTO 52 IF(ISUPB(ITEMP,3) .NE. 1) GOTO 5 IMOTR(9)=ITEMP GOTO 54 52 IF(IFLG.NE.1) GOTO 5 IF(IMOTR(9) .EQ. 100000B) GOTO 5 C C-----CARTRIDGE MOUNTED ? C 54 NERR=35 IF(ICRLU(IMOTR(9)) .LT. 0) GOTO 5 55 NCRTH(8)=IMOTR(9) C C-----GET THE LOGGING LU # C 56 IDXX=2 JVAL=0 IF( KPAR(ITEMP,2,JVAL) ) GOTO 195 IF(IFLG .EQ. 0) GOTO 58 NERR=2 IF(IFLG .NE. 1) GOTO 5 NERR=44 IF(ISBTW(JVAL,1,IGET(1653B)) ) GOTO 5 NERR=9 IEQT=IAND(IGET(IGET(1652B)+JVAL-1),77B) IF(IEQT .EQ. 0) GOTO 5 IF(IAND(IGET(IGET(1650B)+((IEQT-1)*15)+4),37400B)/256 . .NE. 23B) GOTO 5 58 NCRTH(13)=JVAL GOTO 200 C C-----ANALYSE KEY MAP SCREEN C VERIFY THAT THE TMP IS NOT CURRENTTLY RUNNING C TRY TO OPEN THE FILE TO KNOW IF IT IS A CREATE/MODIFY REQUEST C 60 IF(IEND.NE.0 .AND. IEND.NE.-33) GOTO 9900 IEND=0 CALL MOVEW(IMOTR(6),ITEMP,2) ITEMP(3)=2H NERR=4 IF( .NOT. DORMT(ITEMP)) GOTO 97 IDXX=1 IF( KPAR(ITEMP,1,JVAL) .AND. IFLG.EQ.9) GOTO 197 IF(IFLG .NE. 0) GOTO 198 IMOTR(9)=0 CALL MOVCA(IMOTR,11,FNAME,2,4) IF(OPEN(IDCB,IERR,FNAME,3,IMOTR(8),IMOTR(9)).GE.0) GOTO 65 C-----IF FILE DOESNT EXIT, INIT NCRTH & CREATE TE NEW TMP IF( IERR .NE. -6 ) GOTO 64 C C-----THE FILE DOESNT EXIST, IT IS A CREATION C ISCRN=6 CALL NUL(IVASC0,2) IVASC0(3)=2H GOTO 198 C C-----THE FILE EXIST, VERIFY IF IT IS A GOOD ONE C 64 NERR=6 IF(IERR.EQ.-7) GOTO 97 STOP 0005 C 65 NERR=38 IF(IERR .NE. FTYPE) GOTO 95 C C-----READ FILE INTO NCRTH C I=1 80 IF(READF(IDCB,IERR,NCRTH(I),200,LEN)) STOP 0007 I=I+LEN IF(LEN .NE. -1) GOTO 80 C C-----CHECK THAT THE FILE IS OK C IF(NCRTH .NE. I) GOTO 95 IF(NCRTH(8) .EQ. 0) NCRTH(8)=ICRLU(-IAND(IDCB,77B)) IF(IMOTR(9) .LE. 0) IMOTR(9)=NCRTH(8) IF(NCRTH(8) .NE. IMOTR(9)) GOTO 95 C C-----OK, WRITE IT BACK TO CHECK NOW THE SECURITY CODE C IF(RWNDF(IDCB,IERR)) STOP 0010 NERR=6 I=NCRTH/128 LEN=128 IF(I.EQ.0) LEN=NCRTH IF( .NOT. WRITF(IDCB,IERR,NCRTH,LEN) ) GOTO 85 IF(IERR.EQ.-7) GOTO 95 CALL CLOSE(IDCB) STOP 0011 85 CALL CLOSE(IDCB) C-----INIT FLAG TO NOT PREPARE AND NOT LOAD ANY PROGRAM DO 88 I=1,28 88 IRQFLG(I)=0 C C-----SINCE THE FILE EXIST AND IS CORRECT, IT IS A MODIFY C ISCRN=7 IVASC0=NCRTH(8) IVASC0(2)=NCRTH(13) IVASC0(3)=2H GOTO 198 C C-----ERROR ON THE FILE ALREADY OPEN, CLOSE IT AND REPORT ERROR C 95 CALL CLOSE(IDCB) C-----OUTPUT/RE-OUTPUT SCREEN, PRINT THE ERROR MESSAGE AND THEN READ 97 CALL TMGSC(3,ISCRN,0,-NERR) C C-----SPECIAL CHARACTER FROM THE 2645/2648 C PREVIOUS SCREEN OR ABORT ? C 195 NERR=33 IF(IFLG .EQ. 8) GOTO 97 NERR=34 IF(IFLG .NE. 9) GOTO 5 C C-----USER WANTS TO ABORT ? C 197 IF(OKABT(LU)) GOTO 9900 C C-----IT IS NOT ABORT REQUEST, RE-ISSUE THE SCREEN C 198 CALL TMGSC(3,ISCRN) C C********************************************************************* C C C-----PROCESS THE REQUESTED FUNCTION C 200 IVASC0=NCRTH(8) IVASC0(2)=NCRTH(13) IVASC0(9)=ISCRN C C-----SET-UP SEGMENTS' PARAMETERS C ISEGNB=5 IRQ=0 IJOB=0 C C ***** LIST ? C IF(IMOTR .EQ. 6) GOTO 278 C C ***** PURGE ? C IF(IMOTR .NE. 7) GOTO 210 IVASC0(2)=0 IVASC0(9)=6 IEND=3 GOTO 238 C C ***** MODIFY LU ? C 210 IF(IMOTR .EQ. 2) GOTO 223 C C ***** MODIFY / CREATE REQUEST ? C IF(IMOTR .NE. 1) GOTO 215 K=2 213 DO 218 I=K,28 218 IRQFLG(I)=1 GOTO 223 C C ***** DEFINE USER WRITTEN MODULES ? C 215 IF(IMOTR .NE. 4) GOTO 220 IJOB=3 K=5 GOTO 213 C C ***** MODIFY MAIN PROGRAM ? C 220 IF(IMOTR .NE. 3) GOTO 227 223 IRQFLG=1 NBPRO=NBUPT(NCRTH) CALL DEPAK C-----EDITING PROCESSING, CALL SEG # 5 OR 4, C (LU & PRG. OR DATA-BASE & MAIN / RELOAD SOME PARTITION) CALL TMGSC(ISEGNB,0,0,0,IJOB) C C ***** MODIFY DATA-BASE DEFINITON ? C 227 IF(IMOTR .NE. 8) GOTO 230 ISEGNB=4 IRQFLG(2)=1 GOTO 223 C C ***** PREPARE AND LOAD ALL THE APPLICATION ? C 230 IF(IMOTR .NE. 5) STOP 0013 DO 232 I=1,28 232 IRQFLG(I)=1 C-----CALL PREP. MODULE C (STOP THE APPLT., PREP. FILES AND LOAD AS REQUESTED) 235 IF(IMOTR(2) .EQ. 1) GOTO 900 IRQ=1 238 CALL TMGSC(2,IRQ,0,IEND,4) C C-----RETURN FROM THE COMPILER, THE LISTING, THE PURGE OR C THE LOAD OPERATION. C 270 IF(IEND .EQ. -1) GOTO 420 IF(IEND .EQ. -2) GOTO 280 IF(IEND .EQ. 1) GOTO 900 IF(IEND .NE. 0) GOTO 450 C-----PREP. WAS OK, LOAD PROGRAMS. IRQ=1 278 CALL TMGSC(1,IRQ,0,0,4) C-----LOAD HAS FAIL, STOP TMPGN OPERATION 280 CALL MOVEW(16H Loading ERROR ,LINEBU,8) CALL MOVEW(IERMS(3),LINEBU(9),2) CALL MOVEW(16H, Program ,LINEBU(11),8) CALL MOVEW(IERMS(5),LINEBU(16),3) CALL MOVEW(22H has not been loaded. ,LINEBU(19),11) LINEBU(30)=6412B CALL BLANC(LINEBU(31),8) GOTO 440 C C-----RETURN FROM THE INTERACTIVE EDITING PROCESSING, C FUNCTION MUST BE 1,2,3,4 OR 8 AND IEND=1 TO BE THE END C (REPACK, WRITE THE FILE AND LOAD IF NEEDED) C 300 IF( IEND .NE. 1 ) STOP 0014 IF(IMOTR.NE.1 .AND. IMOTR.NE.2 .AND. IMOTR.NE.3 . .AND. IMOTR.NE.4 .AND. IMOTR.NE.8 ) STOP 0015 CALL REPAK CALL MOVCA(NCRTH,9,FNAME,2,4) C C========================================= SPECIAL TMPGN C C SETUP PARTITION SIZE FOR ALL SYSTEM MODULE C C MAIN = CODE SIZE + BUFFER + EMA C ICODZ=8 CALL MADSP(ITEMP) N=(NCRTH(4)-NCRTH(2))/2 C-----EMA SIZE = 1.6 * N + ( N ** 2 ) / 75. C MINIMUM IS 5 I= 0.5 + 1.6*N*(075.+N)/75. IF(I .LT. 5) I=5 C-----MSEG SIZE = 3 + EMA / 50 J=3+I/50 C-----BUFFER SIZE IN WORDS = ( STACKLEN + 200 ) * N K= (NCRTH(21)+200)*N C-----CHECK THAT MAXIMUM ADDR SPACE IS OK C CODE SIZE + BUFFER + MSEG + 1 = < MAX ADDR. SPACE K= ICODZ + 1 + K/1024 IF(K+J+1 .GT. ITEMP(2)) K=ITEMP(2)-J-1 C-----SET EMA SIZE AND MSEG SIZE NCRTH(9)=I NCRTH(10)=J C-----SET PARTITION SIZE = CODE + BUFFER NCRTH(11)=K C C TMP.B = 5K + .350 * NUMBER OF TRANS. SPEC. C X=5.+.35*25. I=NCRTH(NCRTH(4)) NCRTH(I+1)=IFIX(X)+1 C C IMAGE = CODE SIZE + LOCK TABLE + ROOT FILE + IMAGE DCB C 12 K + LCKTB SIZE + 4K C IF(NCRTH(26) .EQ. 0) GOTO 340 J=27 DO 320 I=1,NCRTH(26) NCRTH(J+12)=(12288.+FLOAT(NCRTH(J+14))+4000.)/1000 320 J=J+15 C C-----REINIT THE CRT AUXILIARY LU TO THE CRT USED BY TMPGN C 340 NCRTH(NCRTH(3))=LU C C-----IF TMP # 1, SET SYSTEM COMMON FLAG FOR ALL UPT C IF( NCRTH(6) .NE. 2HP1 ) GOTO 360 J=NCRTH(4) 350 CALL SETBT(NCRTH(J+2),15,1) J=NCRTH(J) IF(J .NE. NCRTH+1) GOTO 350 360 CONTINUE C C========================================= END SPECIAL TMPGN C IF(OPEN(IDCB,IERR,FNAME,1,NCRTH(7),NCRTH(8)).EQ.31) GOTO 303 IF(IERR.NE.-006) STOP 0015 IF(CREAT(IDCB,IERR,FNAME,2,FTYPE,NCRTH(7),NCRTH(8))) GOTO 400 303 I=NCRTH/128 IF(I.EQ.0) GOTO 309 DO 307 K=1,I IF(WRITF(IDCB,IERR,NCRTH((128*K)-127),128)) STOP 0016 307 CONTINUE 309 LEN=(NCRTH)-(128*I) IF(WRITF(IDCB,IERR,NCRTH((128*(I+1))-127),LEN)) STOP 0017 IF(WRITF(IDCB,IERR,NCRTH,-1)) STOP 0020 CALL CLOSE(IDCB) C-----RE-INIT SCREEN DATA & IMOTR WITH &XXXX:SC:CR FROM NCRTH IVASC0(9)=7 CALL MOVEW(NCRTH(5),IMOTR(6),4) IF(IMOTR.NE.1 .AND. IMOTR.NE.4) GOTO 316 C-----IF THE NUMBER OF PROGRAM HAS DECREASE, CLEAN UP UNUSED MODULE IF(NBPRO .EQ. 0) GOTO 316 IF(NBPRO .LE. NBUPT(NCRTH)) GOTO 316 CALL MOVEW(IRSET,LINEBU,8) CALL MOVEW(26H Clean up unused modules. ,LINEBU(9),13) CALL EXEC(2,LU,LINEBU,21) IRQ=2 IEND=4 GOTO 238 316 NBPRO=NBUPT(NCRTH) C-----ANY PROGRAM TO PREPARE AND LOAD ? DO 318 I=1,28 IF(IRQFLG(I) .NE. 0) GOTO 235 318 CONTINUE C-----GO BACK TO SCREEN # 0 (MENU) GOTO 900 C C-----NO ROOM ON THE CARTRIDGE !! C 400 CALL MOVEW(FNAME,LINEBU(24),3) CALL MOVEW(IRSET,LINEBU,8) GOTO 430 420 CALL MOVEW(IERMS,LINEBU(20),7) CALL BLANC(LINEBU,7) LINEBU(8)=6412B IF(IERNB .EQ. -6) GOTO 430 C C-----FATAL FMP ERROR DURING CREATION PHASE C CALL MOVEW(22H Illegal file type on,LINEBU(9),11) IF(IERNB .GT. 0) GOTO 427 CALL MOVEW(22H FMP ERROR # XXXXXX on,LINEBU(9),11) CALL JASC(IERNB,LINEBU(15),1,7) 427 CALL MOVEW(22H !! ,LINEBU(27),11) GOTO 438 430 CALL MOVEW(14H NO ROOM on CR,LINEBU(9),7) CALL CNUMD(NCRTH(8),LINEBU(16)) CALL MOVEW(10H , file: ,LINEBU(19),5) CALL MOVEW(22H has not been created.,LINEBU(27),11) 438 LINEBU(38)=6412B 440 LINEBU(39)=6412B CALL MOVEW(30H generation is NOT completed, ,LINEBU(40),15) CALL MOVEW(32Hcorrective action MUST be taken.,LINEBU(55),16) CALL EXEC(2,LU,LINEBU,70) IEND=0 C-----WAIT ACKNOWLEDGMENT FROM THE OPERATOR 450 CALL EXEC(2,LU,IPRES,26) REG= EXEC(1,LU,I,1) IF(IEND .EQ. 4) GOTO 316 ISCRN=IVASC0(9) IF(BREG.EQ.1 .AND. IGET1(I,1).EQ.60440B) GOTO 197 GOTO 900 C C END TMPGN C 900 CONTINUE 9900 CALL MOVEW(IRSET,LINEBU,8) CALL MOVEW(14H /TMPGN: $END ,LINEBU(9),7) CALL PNAME(LINEBU(10)) LINEBU(12)=IOR(LINEBU(12),72B) CALL EXEC(2,LU,LINEBU,8) C-----TRY TO SCHEDULE 'DCMON', ATTENTION TO ABORT RETURN CALL EXEC(100000B+24,6HDCMON ,LU,0,0,0,0) GOTO 9920 9918 GOTO 9950 C-----DCMON NOT LOADED, PRINT "/TMPGN: $END" 9920 CALL EXEC(2,LU,LINEBU(9),7) C C-----RELEASE TRACKS C 9950 CALL EXEC(5,-1) C C-----TERMINATE PROGRAM C CALL EXEC(6) C DUMMY CALL TO MAIN !! CALL TMPGN END END$