FTN4
C 
C 
C     NAME:   DEPAK,REPAK,CLSLU,ISPRZ,ITRIC,NBUPT,TCVTA 
C     SOURCE: &TMGL0    92080-18405 
C     BINARY: %TMGL0    92080-1X405    PART OF  $TMGL1
C 
C 
C 
C     **************************************************************
C     * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  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     PGMR:   DANIEL POT   HPG
C 
C 
      SUBROUTINE DEPAK,92080-1X405 REV.2026  800515 
C 
C 
C     **************************************************
C     * IT DEPACKS IT BY EXTENDING INTERACTIVE AND AU- *
C     * XILIARY LU UP TO 64 AND GENERATING PARTITIONS  *
C     * INCLUDING 20 TMS-SUBROUTINES AND 3 LIBRARIES   *
C     * EACH OF THEM. ( EXTENSIONS WILL BE GENERATED). *
C     **************************************************
C 
C     STOP USED:  7010 - 7012 - 7013
C     ----------
C 
C 
C          FORMAT OF THE DEPACKED PARTITIONS HEADER 
C 
C     ************************************************
C     *  N E X T    P A R T I T I O N   A D R E S S  *
C     ************************************************
C     * BIT EQT.* EXTENSION#    *   PARTITION SIZE   *
C     ************************************************
C     * BIT SWP.* PARTITION #   *   PROGRAM NUMBER   *
C     ************************************************
C 
      DIMENSION ITEMP(3)
C 
C-----LABEL COMMON # 3  BUFFER AREA 
C 
      COMMON /TMGC3/IREFC,ILUGH,INTMS,ILPRG,IDECL,ILGMX,NBPRO 
     .             ,NCRTH(2490) 
C 
C     OFFSET CONSTANTS
C 
      IDISPL=260
      IOFST=2350+IREFC-NCRTH
      IF(IOFST.LT.IDISPL)  STOP 7010
C 
C     TRANSLATION INSIDE NCRTH TABLE
C 
      CALL MOVEW(NCRTH,NCRTH(IOFST+1),-NCRTH) 
      NCRTH(1+IOFST)=NCRTH(1+IOFST)+IOFST 
      DO 10 I=2,4 
      NCRTH(I+IOFST)=NCRTH(I)+IOFST 
10    CONTINUE
      J=NCRTH(4+IOFST)
20    IF(J.EQ.(NCRTH(1+IOFST)+1)) GOTO 30 
      NCRTH(J)=NCRTH(J)+IOFST 
      J=NCRTH(J)
      GOTO 20 
C 
C     INTERACTIVE LU# AND TYPES DILATATION
C 
30    INBLU=NCRTH(3)-NCRTH(2) 
      INDLU=NCRTH(3)
      CALL NUL(NCRTH(INDLU),(2*ILUGH)-INBLU)
C 
C     AUXILIARY LU# AND TYPES DILATATION
C 
      INBLU=NCRTH(4)-NCRTH(3) 
      INDLU=IREFC+ILUGH 
      INSLU=NCRTH(3)+IOFST
      CALL MOVEW(NCRTH(INSLU),NCRTH(INDLU),INBLU) 
C 
C     NEW HEADER ADRESSES 
C 
      NCRTH=ILGMX 
      NCRTH(2)=IREFC
      NCRTH(3)=NCRTH(2)+ILUGH 
      NCRTH(4)=NCRTH(3)+ILUGH 
C 
C     PARAMETERS INITIALISATION 
C 
      MM=0
      J=NCRTH(4+IOFST)
      ITEMP(1)=NCRTH(1+IOFST)+1 
      JJ=NCRTH(4) 
      KK=JJ+INTMS 
40    IF(J.EQ.ITEMP(1)) GOTO 300
      K=NCRTH(J)
      L=J+3 
      MM=MM+1 
      ITEMP(2)=NCRTH(J+1) 
      ITEMP(3)=NCRTH(J+2) 
C 
C     CALCULATES NUMBER OF TMS AND LIBRARIES
C 
      INBTS=(K-J-3)/3 
      INBLB=0 
      DO 60 NL=J+3,K-3,3
      IF(IAND(NCRTH(NL),100000B).NE.0) GOTO 70
60    CONTINUE
      GOTO 75 
70    INBTS=(NL-J-3)/3
      INBLB=(K-NL)/3
75    IF(INBLB/3.GE.INBTS/20) INBXT=INBLB/3 
      IF(INBLB/3.LT.INBTS/20) INBXT=INBTS/20
C 
C     PROGRAMS AND LIBRARIES GENERATION 
C 
      IX=INBXT
150   LL=(2*(JJ+3))-1 
      CALL BLAN(NCRTH,LL,ILPRG) 
      DO 80 IT=L,L+57,3 
      IF(INBTS.EQ.0) GOTO 85
      CALL MOVCA(NCRTH,((2*IT)-1),NCRTH,LL,5) 
      INBTS=INBTS-1 
      LL=LL+5 
80    CONTINUE
      L=L+60
85    NN=KK-9 
      DO 90 IL=NL,NL+6,3
      IF(INBLB.EQ.0) GOTO 95
      CALL MOVEW(NCRTH(IL),NCRTH(NN),3) 
      NCRTH(NN)=IAND(NCRTH(NN),77777B)
      INBLB=INBLB-1 
      NN=NN+3 
90    CONTINUE
      NL=NL+9 
95    ISWP=0
      IF(IAND(ITEMP(3),100000B).NE.0) ISWP=1
      ITEMP(3)=IAND(ITEMP(3),77777B)
      NCRTH(JJ+2)=(256*ITEMP(3))+MM 
      IF(ISWP.EQ.1) NCRTH(JJ+2)=IOR(NCRTH(JJ+2),100000B)
      IF(INBXT.EQ.0) INBXT=IX-1 
      NCRTH(JJ+1)=(256*(INBXT-IX+1))+ITEMP(2) 
      NCRTH(JJ)=KK
      JJ=KK 
      KK=KK+INTMS 
      IF(KK.GE.IT-3)    STOP 7012 
      IF(JJ.EQ.NCRTH+1) STOP 7013 
      IX=IX-1 
      IF(IX.NE.-1) GOTO 150 
      NCRTH(JJ-INTMS+1)=IOR(NCRTH(JJ-INTMS+1),100000B)
C 
C     CONTINUED 
C 
      J=K 
      GOTO 40 
300   NCRTH=JJ-1
      RETURN
      END 
      SUBROUTINE REPAK,92080-1X405 REV.2026  800515 
C 
C 
C 
C     *********************************************** 
C     * THIS SUBROUTINE REPAKS THE NCRTH TABLE PRE- * 
C     * VIOUSLY DEPACKED BY DEPAK SUBROUTINE AND    * 
C     * MODIFIED BY THE INTERACTIVE PROCESS, IN OR- * 
C     * TO RE-BUILD THE "&XXXX" FILE FORMAT.        * 
C     *********************************************** 
C 
C     STOP USED:   7050 - 7052 - 7054 - 7056
C     ----------
C 
C 
C-----LABEL COMMON # 3  BUFFER AREA 
C 
      COMMON /TMGC3/IREFC,ILUGH,INTMS,ILPRG,IDECL,ILGMX,NBPRO 
     .             ,NCRTH(2490) 
C 
      DIMENSION IBUFR(72) 
C 
      IDISPL=260
      KREFC=IREFC+2*ILUGH 
      LREFC=2130+IREFC
C 
C     LU AREA 
C 
C#####################################################################
C 
C     PRINT-OUT TUS AREA !
C 
D     KKK=NCRTH(4)
D     KKN=NCRTH+1 
D     WRITE(6,8971)KKN
D8971 FORMAT(2/,"  REPACK PRINT-OUT: NCRTH+1 ="I5)
D     KKL=KKK 
D8973 WRITE(6,8974)KKL,NCRTH(KKL) 
D8974 FORMAT(20X"ADDR:"I5"   CONTENT:"I5) 
D     KKL=NCRTH(KKL)
D     IF(KKL .NE. 0)  GOTO 8973 
D     DO 8978 KKL=KKK,KKN,INTMS 
D     KKO=IAND(NCRTH(KKL+2),177B) 
D     KKM=2HLS
D     IF(IAND(NCRTH(KKL+1),100000B).EQ.0) KKM=2HEX
D     WRITE(6,8976)KKM,KKO,KKL,(NCRTH(II),II=KKL,KKL+61)
D8976 FORMAT(10X,A2"T OF UPT #"I3,3X, 
D    ." ADDR ="I5,": VAL ="I5,2@10,/,10X," ["30A2,/,10X," ",29A2"]")
D8978 CONTINUE
C#####################################################################
      CALL ISPRZ(NCRTH(IREFC),ILUGH,NLE)
      NCRTH(3)=IREFC+NLE
      CALL ITRIC(NCRTH(IREFC),ILUGH,2)
      CALL CLSLU(NCRTH(IREFC),ILUGH)
      CALL ISPRZ(NCRTH(IREFC+ILUGH),ILUGH,NLE)
      CALL ITRIC(NCRTH(IREFC+ILUGH),ILUGH,2)
      CALL CLSLU(NCRTH(IREFC+ILUGH),ILUGH)
      CALL MOVEW(NCRTH(IREFC+ILUGH),NCRTH(NCRTH(3)),NLE)
      NCRTH(4)=NCRTH(3)+NLE 
C 
C     PROGRAM EXTENSIONS GROUPING AND CLASSING
C 
11    DO 14 I=KREFC+2,ILGMX-(2*INTMS)+2,INTMS 
      IPRGA=(IAND(NCRTH(I),177B)) 
      IPRGB=(IAND(NCRTH(I+INTMS),177B)) 
      IF(IPRGA.EQ.0 .AND. IPRGB.EQ.0)  GOTO 15
      IF(IPRGA.EQ.0)  GOTO 12 
      IF(IPRGA.LE.IPRGB) GOTO 14
      IF(IPRGB.EQ.0) GOTO 14
12    CALL MOVEW(NCRTH(I-2),IBUFR,INTMS)
      CALL MOVEW(NCRTH(I-2+INTMS),NCRTH(I-2),INTMS) 
      CALL MOVEW(IBUFR,NCRTH(I-2+INTMS),INTMS)
      GOTO 11 
14    CONTINUE
C 
C     TRANSFER TMS & LIBRARY AT THE NCRTH BOTTOM
C 
15    CONTINUE
C#####################################################################
C 
C     RE-PRINT-OUT TUS AREA ! 
C 
D     KKN=NCRTH+1 
D     WRITE(6,8981)KKN
D8981 FORMAT(2/,"  REPACK PRINT-OUT: (AFTER SORTING)  NCRTH+1 ="I5) 
D     KKL=KKK 
D8983 WRITE(6,8984)KKL,NCRTH(KKL) 
D8984 FORMAT(20X"ADDR:"I5"   CONTENT:"I5) 
D     KKL=NCRTH(KKL)
D     IF(KKL .NE. 0)  GOTO 8983 
D     DO 8988 KKL=KKK,KKN,INTMS 
D     KKO=IAND(NCRTH(KKL+2),177B) 
D     KKM=2HLS
D     IF(IAND(NCRTH(KKL+1),100000B).EQ.0) KKM=2HEX
D     WRITE(6,8976)KKM,KKO,KKL,(NCRTH(II),II=KKL,KKL+61)
D8988 CONTINUE
C#####################################################################
C 
C-----DISPLACE EVERYTHING BY 'IDISPL' WORDS FORWARD WITH A MOVE 
C 
      CALL MOVEW(NCRTH(KREFC),NCRTH(KREFC+IDISPL),-1613)
      NCRTH=NCRTH+IDISPL
C 
C     RESTORE NCRTH LINK
C 
      DO 18 I=KREFC+IDISPL,NCRTH+1-INTMS,INTMS
      NCRTH(I)=I+INTMS
18    CONTINUE
C 
C     PROGRAMS
C 
      J=KREFC+IDISPL
      JJ=NCRTH(4) 
20    LL=JJ 
      L=J 
      IEXTN=0 
      IF(J.EQ.NCRTH+1) GOTO 100 
      IF(IAND(NCRTH(J+1),77600B).NE.0) IEXTN=1
C 
C     SAVE LIBRARIES & HEADERS OF CURRENT PROGRAM 
C 
      I=LREFC 
      CALL BLANC(NCRTH(I),300)
      LLLL=L
200   CALL MOVEW(NCRTH(LLLL),NCRTH(I),3)
      I=I+3 
      LLLL=LLLL+INTMS-9 
      CALL MOVEW(NCRTH(LLLL),NCRTH(I),9)
      K=LLLL+9
      IF(IAND(NCRTH(LLLL-INTMS+10),100000B).NE.0) GOTO 25 
      LLLL=LLLL+9 
      I=I+9 
      IF(I-LREFC .GE. 295) STOP 7050
      GOTO 200
C 
C     TMS-SUBROUTINES 
C 
25    DO 30 I=(2*(J+3))-1,(2*(J+3))-1+96,5
      IF(IGET1(NCRTH,I).NE.1H ) GOTO 27 
      IF(IEXTN.NE.1) GOTO 40
      GOTO 31 
27    CALL MOVCA(NCRTH,I,NCRTH,(2*(JJ+3))-1,5)
      CALL PUTCA(NCRTH,1H ,(2*(JJ+3))+4)
      JJ=JJ+3 
      IF(JJ+3.GE.((I+1)/2)-3) STOP 7052 
30    CONTINUE
31    IF(IAND(NCRTH(J+1),100000B).NE.0) GOTO 40 
      J=NCRTH(J)
      IF(J.EQ.NCRTH+1) GOTO 40
      GOTO 25 
C 
C     LIBRARIES 
C 
40    J=LREFC 
      L=J 
45    DO 50 I=J+3,J+3+6,3 
      IF(NCRTH(I).NE.2H  ) GOTO 70
      IF(IEXTN.NE.1) GOTO 60
      GOTO 51 
70    CALL MOVEW(NCRTH(I),NCRTH(JJ+3),3)
      NCRTH(JJ+3)=IOR(NCRTH(JJ+3),100000B)
      JJ=JJ+3 
      IF(JJ+3.GE.K) STOP 7054 
50    CONTINUE
51    IF(IAND(NCRTH(J+1),100000B).NE.0) GOTO 60 
      IF(NCRTH(J).EQ.NCRTH+1) GOTO 60 
      J=J+12
      GOTO 45 
C 
C     PROCESS HEADER AND THEN GO TO NEXT PROGRAM
C 
60    JJ=JJ+3 
      IF(JJ+3.GE.K) STOP 7056 
      NCRTH(LL)=JJ
      NCRTH(LL+1)=IAND(NCRTH(J+1),177B) 
C 
C     SWAPPING BIT
C 
      ISWP=0
      IF(IAND(NCRTH(L+2),100000B).NE.0) ISWP=1
      NCRTH(LL+2)=(IAND(NCRTH(L+2),77600B))/256 
      IF(ISWP.EQ.1) NCRTH(LL+2)=IOR(NCRTH(LL+2),100000B)
      J=K 
C 
C     IS IT A TRUE PROGRAM ?
C 
      IF(JJ.NE.LL+3) GOTO 700 
      JJ=JJ-3 
700   IF(J.NE.NCRTH+1) GOTO 20
100   NCRTH=JJ-1
C 
      RETURN
      END 
      SUBROUTINE CLSLU(IBUF,LEN),92080-1X405 REV.2026  800515 
C 
C 
C 
C     ********************************************
C     * THIS SUBROUTINE LOOKS FOR LU# OF THE SA- *
C     * ME TYPE IN AN ALREADY ORDERED AREA, THEN *
C     * CLASS THEM IN AN INCREASING ORDER.       *
C     *                                          *
C     *   CALL CLSLU(P1,P2)                      *
C     *                                          *
C     *   P1 = NAME(I) OF THE AREA TO PROCESS    *
C     *        I POINTS AT THE FIRST LU#         *
C     *   P2 = LENGTH OF THIS AREA               *
C     ********************************************
C 
C 
C 
C-----LABEL COMMON # 3  BUFFER AREA 
C 
      COMMON /TMGC3/IDUM0(7),NCRTH(1) 
C 
      DIMENSION IBUF(1) 
C 
C 
      J=1 
      DO 10 I=2,LEN-2,2 
      IF(IBUF(I).EQ.IBUF(I+2)) GOTO 10
      IF(I-J.GE.3) GOTO 20
      J=I+1 
      GOTO 10 
20    CALL ITRIC(IBUF(J),I-J+1,1) 
      J=I+1 
10    CONTINUE
      RETURN
      END 
      SUBROUTINE ISPRZ(IBUF,LEN,NLE),92080-1X405 REV.2026  800515 
C 
C 
C     ******************************************* 
C     * THIS SUBROUTINE ELIMINATES ALL THE LU#  * 
C     * WHICH ARE EQUAL TO "00" IN THE PRECISED * 
C     * AREA.                                   * 
C     *                                         * 
C     *  CALL ISPRZ(P1,P2,P3)                   * 
C     *                                         * 
C     *  P1 = NAME(I) OF THE AREA TO PROCESS    * 
C     *       I POINTS AT THE THE FIRST LU#     * 
C     *  P2 = WORD LENGTH OF THE AREA           * 
C     *  P3 = WORD LENGTH AFTER COMPRESSION     * 
C     ******************************************* 
C 
C 
C 
      DIMENSION IBUF(1) 
C 
C 
      NLE=LEN 
      K=0 
      I=1 
10    IF(IBUF(I).EQ.0) GOTO 40
20    I=I+2 
      IF(I.LE.NLE-1) GOTO 10
30    DO 35 L=NLE+1,NLE+K 
      IBUF(L)=32767 
35    CONTINUE
      RETURN
40    J=I 
      KK=0
50    KK=KK+2 
      J=J+2 
      IF(J.GT.NLE-1) GOTO 60
      IF(IBUF(J).EQ.0) GOTO 50
      CALL MOVEW(IBUF(J),IBUF(I),NLE-J+1) 
60    NLE=NLE-KK
      K=K+KK
      GOTO 20 
      END 
      SUBROUTINE ITRIC(IBUF,LEN,IORG),92080-1X405 REV.2026  800515
C 
C 
C 
C     *********************************************** 
C     * THIS SUBROUTINE CLASS IN AN INCREASING OR-  * 
C     * DER THE LU-TYPE NCRTH AREA.                 * 
C     *                                             * 
C     *  CALL ITRIC(P1,P2,P3)                       * 
C     *                                             * 
C     *  P1 = NAME(I) OF THE AREA TO PROCESS        * 
C     *       I POINTS AT THE FIRST LU#             * 
C     *  P2 = LENGTH OF THE AREA TO BE ORDERED      * 
C     *  P3 = FUNCTION:   1 ORDERS LU#              * 
C     *                   2 ORDERS TYPE             * 
C     *********************************************** 
C 
C 
C 
      DIMENSION IBUF(1) 
C 
C 
C 
      DO 20 I=IORG,LEN+IORG-4,2 
10    IF(IBUF(I).LE.IBUF(I+2)) GOTO 20
      ITLU=IBUF(I-IORG+1) 
      ITYP=IBUF(I-IORG+2) 
      IBUF(I-IORG+1)=IBUF(I-IORG+3) 
      IBUF(I-IORG+2)=IBUF(I-IORG+4) 
      IBUF(I-IORG+3)=ITLU 
      IBUF(I-IORG+4)=ITYP 
      IF(I.EQ.IORG) GOTO 20 
      I=I-2 
      GOTO 10 
20    CONTINUE
      RETURN
      END 
      FUNCTION NBUPT(NCRTH),92080-1X405 REV.2026  800515
C 
C     ************************************************* 
C     * THIS FUNCTION RETURN THE NUMBER OF USER       * 
C     * PARTITION ENTERING IN AN APPLICATION.         * 
C     ************************************************* 
C 
C     NOTE: THIS SUBROUTINE WORKS ON THE PACKED FORMAT OF NCRTH 
C     -----                              ------ 
C 
C 
      DIMENSION NCRTH(1)
C 
      M=0 
      J=NCRTH(4)
100   K=NCRTH(J)
      M=M+1 
      J=K 
      IF(K .NE. NCRTH+1) GOTO 100 
      NBUPT=M 
      RETURN
      END 
C 
C 
      SUBROUTINE TCVTA(IARG,IARGLN),92080-1X405 REV.2026  800515
      DIMENSION IARG(1) 
      LOGICAL ISBTW,ISSPA 
      IF(ISSPA(IARG,1,IARGLN))GO TO 100 
      RETURN
100   IF(.NOT.ISBTW(IARG,040501B,055132B))GO TO 200 
300   K=NUMD(IARG,1,IARGLN) 
      IF(ISBTW(K,040501B,055132B))RETURN
      CALL BLAN(IARG,1,IARGLN)
      IARG=K
      RETURN
200   CALL JASC(IARG,IARG,1,IARGLN) 
      RETURN
      END 
END$
                                                                                  