Annotation of researchv10dc/cmd/matlab/sys.prime, revision 1.1.1.1

1.1       root        1: C     PROGRAM MAIN
                      2: C
                      3: C ********  THIS DRIVER WAS SET UP FOR THE PRIME 400 AT
                      4: C ********  THE CENTER FOR SCIENTIFIC COMPUTATION AND INTERACTIVE GRAPHICS
                      5: C ********  DREXEL UNIVERSITY
                      6: C ********  PHILADELPHIA, PA 19104
                      7: C
                      8: C      THIS PROGRAM AND ASSOCIATED SUBROUTINES SHOULD BE COMPILED
                      9: C      USING THE LONG INTEGER OPTION.
                     10: C
                     11:       INTEGER*2 I
                     12:       LOGICAL L,CLOS$A
                     13:       CALL MATLAB(0)
                     14:       I4=4
                     15:       DO 100 I=1,12
                     16:       L = CLOS$A(I)
                     17:   100 CONTINUE
                     18:       CALL EXIT
                     19:       END
                     20:       SUBROUTINE FILES(LUNIT,NAME,IOSTAT)
                     21:       INTEGER LUNIT,NAME(32)
                     22:       INTEGER*2 I1,I2,I3,I4,I5,I8,ITYPE,ICODE,IUNIT,I16
                     23:       INTEGER*4 NAM8(2)
                     24:       DATA I1,I3,I4,I5,I8,I16/1,3,4,5,8,16/
                     25: C
                     26: C     SYSTEM DEPENDENT ROUTINE TO ALLOCATE FILES
                     27: C     LUNIT = LOGICAL UNIT NUMBER
                     28: C     NAME = FILE NAME, 1 CHARACTER PER WORD
                     29: C
                     30: C     MODIFY SUBROUTINE MATLAB SO THAT RTE = 1 AND WTE = 1
                     31: C     ATTACH UNIT 9 TO HELP FILE
                     32: C
                     33:       L = -LUNIT
                     34:       IF (LUNIT .LT. 0) REWIND L
                     35:       IF (LUNIT .LT. 0) RETURN
                     36: C
                     37:       ENCODE(8,10,NAM8) (NAME(I),I=1,8)
                     38:    10 FORMAT(8A1)
                     39:       IUNIT = LUNIT-4
                     40:       CALL SRCH$$(I4,NAM8,0,IUNIT,ITYPE,ICODE)
                     41:       CALL SRCH$$(I3,NAM8,I8,IUNIT,ITYPE,ICODE)
                     42:       RETURN
                     43:       END
                     44:       SUBROUTINE SAVLOD(LUNIT,ID,M,N,IMG,JOB,XREAL,XIMAG)
                     45:       INTEGER LUNIT,ID(4),M,N,IMG,JOB
                     46:       DOUBLE PRECISION XREAL(1),XIMAG(1)
                     47: C
                     48: C     IMPLEMENT SAVE AND LOAD
                     49: C     LUNIT = LOGICAL UNIT NUMBER
                     50: C     ID = NAME, FORMAT 4A1
                     51: C     M, N = DIMENSIONS
                     52: C     IMG = NONZERO IF XIMAG IS NONZERO
                     53: C     JOB = 0     FOR SAVE
                     54: C         = SPACE AVAILABLE FOR LOAD
                     55: C     XREAL, XIMAG = REAL AND OPTIONAL IMAGINARY PARTS
                     56: C
                     57: C     SYSTEM DEPENDENT FORMATS
                     58:   101 FORMAT(4A1,3I4)
                     59:   102 FORMAT(4D25.18)
                     60: C
                     61:       IF (JOB .GT. 0) GO TO 20
                     62: C
                     63: C     SAVE
                     64:    10 WRITE(LUNIT,101) ID,M,N,IMG
                     65:       DO 15 J = 1, N
                     66:          K = (J-1)*M+1
                     67:          L = J*M
                     68:          WRITE(LUNIT,102) (XREAL(I),I=K,L)
                     69:          IF (IMG .NE. 0) WRITE(LUNIT,102) (XIMAG(I),I=K,L)
                     70:    15 CONTINUE
                     71:       RETURN
                     72: C
                     73: C     LOAD
                     74:    20 READ(LUNIT,101,END=30) ID,M,N,IMG
                     75:       IF (M*N .GT. JOB) GO TO 30
                     76:       DO 25 J = 1, N
                     77:          K = (J-1)*M+1
                     78:          L = J*M
                     79:          READ(LUNIT,102,END=30) (XREAL(I),I=K,L)
                     80:          IF (IMG .NE. 0) READ(LUNIT,102,END=30) (XIMAG(I),I=K,L)
                     81:    25 CONTINUE
                     82:       RETURN
                     83: C
                     84: C     END OF FILE
                     85:    30 M = 0
                     86:       N = 0
                     87:       RETURN
                     88:       END
                     89:       SUBROUTINE FORMZ(LUNIT,X,Y)
                     90:       DOUBLE PRECISION X,Y,XHEX(2),YHEX(2)
                     91:       INTEGER*2 I4
                     92:       DATA I4/4/
                     93: C
                     94: C     SYSTEM DEPENDENT ROUTINE TO PRINT WITH Z FORMAT
                     95: C
                     96:       CALL HEXCHR(X,I4,XHEX)
                     97:       IF(Y.EQ.0.D0)GO TO 20
                     98:       CALL HEXCHR(Y,I4,YHEX)
                     99:       WRITE(LUNIT,10)XHEX,YHEX
                    100:       RETURN
                    101:    20 WRITE(LUNIT,10)XHEX
                    102:       RETURN
                    103:    10 FORMAT(2A8,4X,2A8)
                    104:       END
                    105:       SUBROUTINE HEXCHR(VALUE,VALWDS,STRING)
                    106: C*  VALUE IS THE VALUE TO BE CONVERTED TO HEXADECIMAL.  ANY NUMBER OF WORDS.
                    107: C*  VALWDS IS THE NUMBER OF WORDS IN THE VALUE TO BE TRANSLATED:
                    108: C*
                    109: C*     INTEGER*2  -- 1
                    110: C*     INTEGER*4  -- 2
                    111: C*     REAL*4     -- 2
                    112: C*     REAL*8     -- 4
                    113: C*
                    114: C**===>   ETC.
                    115: C*  STRING IS AN ARRAY INTO WHICH THE CHARACTERS WILL BE PACKED.
                    116: C*  (IT DOESN'T MATTER WHAT KIND OF ARRAY IT IS).
                    117: C*
                    118: C*
                    119: C*  WARNING: IF THE STRING PROVIDED IS NOT LONG ENOUGH (IT HAS TO BE TWICE
                    120: C*           AS LONG IN TERMS OF BITS OR WORDS AS THE VALUE ARRAY), THERE
                    121: C*           IS NO WAY TO DETECT IF IT RUNS OFF AND DESTROYS OTHER MEMORY.
                    122: C*               (THIS IS PRIME STANDARD, BY THE WAY.)
                    123: C*           ALSO, ANYTHING BEYOND THE 2*VALWDS ELEMENT OF THE STRING ARRAY
                    124: C*           IS MEANINGLESS.
                    125: C*
                    126: C*
                    127: 
                    128: 
                    129: 
                    130:       INTEGER*2 VALUE(1),STRING(1),VALWDS,ONE,TWO,THREE,FOUR,I
                    131:       DO 10 I=1,VALWDS
                    132:       STRING(2*I-1) = 0
                    133:       STRING(2*I) = 0
                    134:       ONE = RS(LT(VALUE(I),4),12)
                    135:       TWO = RS(LT(RT(VALUE(I),12),8),8)
                    136:       THREE = RS(LT(RT(VALUE(I),8),12),4)
                    137:       FOUR = RT(VALUE(I),4)
                    138:       IF (ONE .LE. :011) STRING(2*I-1) =
                    139:      +                 OR(LS(OR(:260,ONE),8),STRING(2*I-1))
                    140:       IF (ONE .GT. :011) STRING(2*I-1) =
                    141:      +                  OR(LS(ONE + :267,8),STRING(2*I-1))
                    142:       IF (TWO .LE. :011) STRING(2*I-1) =
                    143:      +                  OR(TWO,:260,STRING(2*I-1))
                    144:       IF (TWO .GT. :011) STRING(2*I-1) =
                    145:      +                  OR(TWO+ :267,STRING(2*I-1))
                    146:       IF (THREE .LE. :011) STRING(2*I) =
                    147:      +                 OR(LS(OR(:260,THREE),8),STRING(2*I))
                    148:       IF (THREE .GT. :011) STRING(2*I) =
                    149:      +                  OR(LS(THREE + :267,8),STRING(2*I))
                    150:       IF (FOUR .LE. :011) STRING(2*I) =
                    151:      +                  OR(FOUR,:260,STRING(2*I))
                    152:       IF (FOUR .GT. :011) STRING(2*I) =
                    153:      +                  OR(FOUR+ :267,STRING(2*I))
                    154: 10    CONTINUE
                    155:       RETURN
                    156:       END
                    157:       DOUBLE PRECISION FUNCTION FLOP(X)
                    158:       DOUBLE PRECISION X
                    159: C     SYSTEM DEPENDENT FUNCTION
                    160: C     COUNT AND POSSIBLY CHOP EACH FLOATING POINT OPERATION
                    161: C     FLP(1) IS FLOP COUNTER
                    162: C     FLP(2) IS NUMBER OF PLACES TO BE CHOPPED
                    163: C
                    164:       INTEGER SYM,SYN(4),BUF(256),CHAR,FLP(2),FIN,FUN,LHS,RHS,RAN(2)
                    165:       COMMON /COM/ SYM,SYN,BUF,CHAR,FLP,FIN,FUN,LHS,RHS,RAN
                    166: C
                    167:       DOUBLE PRECISION MASK(11),XX,MM
                    168:       INTEGER*4 MAS(2,11),LX(2),LM(2)
                    169: C     LOGICAL LX(4),LM(4)
                    170:       EQUIVALENCE (LX(1),XX),(LM(1),MM),(MASK,MAS)
                    171: C
                    172: C      *** THESE ARE THE MASKS TO CHOP HEX DIGITS ON THE PRIME 400 ***
                    173: C
                    174:       DATA MAS  /-:00000000001,-:00003600001,
                    175:      $           -:00000000001,-:00077600001,
                    176:      $           -:00000000001,-:01777600001,
                    177:      $           -:00000000001,-:37777600001,
                    178:      $           -:00000000020,:00000177777,
                    179:      $           -:00000000400,:00000177777,
                    180:      $           -:00000010000,:00000177777,
                    181:      $           -:00000200000,:00000177777,
                    182:      $           -:00004000000,:00000177777,
                    183:      $           -:00100000000,:00000177777,
                    184:      $           -:02000000000,:00000177777/
                    185:       FLP(1) = FLP(1) + 1
                    186:       K = FLP(2)
                    187:       FLOP = X
                    188:       IF (K .LE. 0) RETURN
                    189:       FLOP = 0.0D0
                    190:       IF (K .GE. 12) RETURN
                    191:       XX = X
                    192:       MM = MASK(K)
                    193:       LX(1) = AND(LX(1),LM(1))
                    194:       LX(2) = AND(LX(2),LM(2))
                    195:       FLOP = XX
                    196:       RETURN
                    197:       END
                    198:       SUBROUTINE XCHAR(BUF,K)
                    199:       INTEGER BUF(1),K
                    200: C
                    201: C     SYSTEM DEPENDENT ROUTINE TO HANDLE SPECIAL CHARACTERS
                    202: C
                    203:       WRITE(6,10) BUF(1)
                    204:    10 FORMAT(1X,A1,' is not a MATLAB character.')
                    205:       RETURN
                    206:       END
                    207:       SUBROUTINE USER(A,M,N,S,T)
                    208:       DOUBLE PRECISION A(M,N),S,T
                    209: C
                    210:       INTEGER A3(9)
                    211:       DATA A3 /-149,537,-27,-50,180,-9,-154,546,-25/
                    212:       IF (A(1,1) .NE. 3.0D0) RETURN
                    213:       DO 10 I = 1, 9
                    214:          A(I,1) = A3(I)
                    215:    10 CONTINUE
                    216:       M = 3
                    217:       N = 3
                    218:       RETURN
                    219:       END
                    220:       SUBROUTINE PROMPT(PAUSE)
                    221:       INTEGER PAUSE
                    222: C
                    223: C     ISSUE MATLAB PROMPT WITH OPTIONAL PAUSE
                    224: C
                    225:       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),RIO,WIO,RTE,WTE,HIO
                    226:       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,RIO,WIO,RTE,WTE,HIO
                    227:       WRITE(WTE,10)
                    228:       IF (WIO .NE. 0) WRITE(WIO,10)
                    229:    10 FORMAT(/1X,'<>')
                    230:       IF (PAUSE .EQ. 1) READ(RTE,20) DUMMY
                    231:    20 FORMAT(A1)
                    232:       RETURN
                    233:       END
                    234:       SUBROUTINE PLOT(LUNIT,X,Y,N,P,K,BUF)
                    235:       DOUBLE PRECISION X(N),Y(N),P(1)
                    236:       INTEGER BUF(79)
                    237: C
                    238: C     PLOT X VS. Y ON LUNIT
                    239: C     IF K IS NONZERO, THEN P(1),...,P(K) ARE EXTRA PARAMETERS
                    240: C     BUF IS WORK SPACE
                    241: C
                    242:       DOUBLE PRECISION XMIN,YMIN,XMAX,YMAX,DY,DX,Y1,Y0
                    243:       INTEGER AST,BLANK,H,W
                    244:       DATA AST/1H*/,BLANK/1H /,H/20/,W/79/
                    245: C
                    246: C     H = HEIGHT, W = WIDTH
                    247: C
                    248:       XMIN = X(1)
                    249:       XMAX = X(1)
                    250:       YMIN = Y(1)
                    251:       YMAX = Y(1)
                    252:       DO 10 I = 1, N
                    253:          XMIN = DMIN1(XMIN,X(I))
                    254:          XMAX = DMAX1(XMAX,X(I))
                    255:          YMIN = DMIN1(YMIN,Y(I))
                    256:          YMAX = DMAX1(YMAX,Y(I))
                    257:    10 CONTINUE
                    258:       DX = XMAX - XMIN
                    259:       IF (DX .EQ. 0.0D0) DX = 1.0D0
                    260:       DY = YMAX - YMIN
                    261:       WRITE(LUNIT,35)
                    262:       DO 40 L = 1, H
                    263:          DO 20 J = 1, W
                    264:             BUF(J) = BLANK
                    265:    20    CONTINUE
                    266:          Y1 = YMIN + (H-L+1)*DY/H
                    267:          Y0 = YMIN + (H-L)*DY/H
                    268:          JMAX = 1
                    269:          DO 30 I = 1, N
                    270:             IF (Y(I) .GT. Y1) GO TO 30
                    271:             IF (L.NE.H .AND. Y(I).LE.Y0) GO TO 30
                    272:             J = 1 + (W-1)*(X(I) - XMIN)/DX
                    273:             BUF(J) = AST
                    274:             JMAX = MAX0(JMAX,J)
                    275:    30    CONTINUE
                    276:          WRITE(LUNIT,35) (BUF(J),J=1,JMAX)
                    277:    35    FORMAT(1X,79A1)
                    278:    40 CONTINUE
                    279:       RETURN
                    280:       END
                    281:       SUBROUTINE EDIT(BUF,N)
                    282:       INTEGER BUF(N)
                    283: C
                    284: C     CALLED AFTER INPUT OF A SINGLE BACKSLASH
                    285: C     BUF CONTAINS PREVIOUS INPUT LINE, ONE CHAR PER WORD
                    286: C     ENTER LOCAL EDITOR IF AVAILABLE
                    287: C     OTHERWISE JUST
                    288:       RETURN
                    289:       END
                    290:       DOUBLE PRECISION FUNCTION DSINH(X)
                    291:       IMPLICIT DOUBLE PRECISION (A-Z)
                    292:       DATA A0/-.139005324307231D6/,
                    293:      $     A1/-.180697428204813D5/,
                    294:      $     A2/-.404150536907816D3/,
                    295:      $     B0/-.139005324307231D6/,
                    296:      $     B1/+.509781123072247D4/,
                    297:      $     B2/-.954080394016126D2/
                    298:       IF (DABS(X) .LT. 0.5D0) GO TO 10
                    299:       E = DEXP(X)
                    300:       DSINH = 0.5D0*(E-1.0D0/E)
                    301:       RETURN
                    302:    10 Y = X*X
                    303:       P = ((A2*Y)+A1)*Y+A0
                    304:       Q = ((Y+B2)*Y+B1)*Y+B0
                    305:       DSINH = X*P/Q
                    306:       RETURN
                    307:       END
                    308:       DOUBLE PRECISION FUNCTION DCOSH(X)
                    309:       IMPLICIT DOUBLE PRECISION (A-Z)
                    310:       E = DEXP(X)
                    311:       DCOSH = 0.5D0*(E+1.0D0/E)
                    312:       RETURN
                    313:       END

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.