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

1.1       root        1: C     PROGRAM MAIN FOR VAX/VMS
                      2: C     For overflow handling, RTFM on Common Run-Time Library.
                      3: C     Also compile subroutine URAND with FORTRAN/NOCHECK.
                      4:       EXTERNAL UNTRAP
                      5:       CALL LIB$ESTABLISH(UNTRAP)
                      6:       CALL MATLAB(0)
                      7:       STOP
                      8:       END
                      9:       INTEGER FUNCTION UNTRAP(SIGARGS,MECHARGS)
                     10:       INTEGER SIGARGS(3),MECHARGS(5)
                     11:       INCLUDE 'SYS$LIBRARY:SIGDEF'
                     12:       INTEGER HUGE(2)
                     13:       DATA HUGE/'FFFF7FFF'X,'FFFFFFFF'X/
                     14:       I = LIB$SIM_TRAP(SIGARGS,MECHARGS)
                     15:       IF (LIB$MATCH_COND (SIGARGS(2), SS$_FLTOVF)) THEN
                     16:          WRITE(6,10)
                     17:    10    FORMAT(' ---OVERFLOW---')
                     18:          CALL LIB$INSV(1,0,3,SIGARGS(2))
                     19:          UNTRAP = SS$_CONTINUE
                     20:       ELSEIF (LIB$MATCH_COND (SIGARGS(2), SS$_INTOVF)) THEN
                     21:          WRITE(6,12)
                     22:    12    FORMAT(' ---INTEGER OVERFLOW---')
                     23:          CALL LIB$INSV(2,0,3,SIGARGS(2))
                     24:          UNTRAP = SS$_CONTINUE
                     25:       ELSEIF (LIB$MATCH_COND (SIGARGS(2), SS$_ROPRAND)) THEN
                     26:          UNTRAP = LIB$FIXUP_FLT(SIGARGS,MECHARGS,HUGE)
                     27:       ELSE
                     28:          UNTRAP = SS$_RESIGNAL
                     29:       ENDIF
                     30:       RETURN
                     31:       END
                     32:       SUBROUTINE FILES(LUNIT,NAME,IOSTAT)
                     33:       INTEGER LUNIT,NAME(64),IOSTAT
                     34: C
                     35: C     SYSTEM DEPENDENT ROUTINE TO ALLOCATE FILES
                     36: C     LUNIT = LOGICAL UNIT NUMBER
                     37: C           = 1,  SAVE
                     38: C           = 2,  LOAD
                     39: C           = 7,  PRINT
                     40: C           = 8,  DIARY
                     41: C           > 10, EXEC
                     42: C           < 0,  CLOSE -LUNIT
                     43: C           = -5, SPECIAL CASE, END OF FILE DETECTED ON TERMINAL
                     44: C     NAME = FILE NAME, 1 CHARACTER PER WORD
                     45: C     NONZERO IOSTAT RETURNED FOR ERROR CONDITION
                     46: C
                     47: C     (UNLESS CHANGED IN SUBROUTINE MATLAB, UNITS 5, 6 AND 9 ARE
                     48: C      USED FOR TERMINAL INPUT, TERMINAL OUTPUT AND THE HELP FILE.
                     49: C      THE HELP FILE IS OPENED BY SUBROUTINE HELPER.)
                     50: C
                     51:       CHARACTER*64 NAM
                     52: C
                     53:       IF (LUNIT .LT. 0) GO TO 30
                     54: C
                     55: C     FORTRAN 77 INTERNAL FILE CONVERSION FROM 64A1 TO CHARACTER*64
                     56: C
                     57:       WRITE(NAM,'(64A1)') NAME
                     58: C
                     59: C     UNFORMATTED I/O FOR SAVE AND LOAD
                     60: C     FORMATTED I/O FOR EXEC, DIARY AND PRINT
                     61: C
                     62:       IOSTAT = 0
                     63:       IF (LUNIT .EQ. 1)  OPEN(UNIT=LUNIT,FILE=NAM,FORM='UNFORMATTED',
                     64:      >                   STATUS='NEW',ERR=20,IOSTAT=IOSTAT)
                     65:       IF (LUNIT .EQ. 2)  OPEN(UNIT=LUNIT,FILE=NAM,FORM='UNFORMATTED',
                     66:      >                   STATUS='OLD',ERR=20,IOSTAT=IOSTAT)
                     67:       IF (LUNIT .EQ. 7)  OPEN(UNIT=LUNIT,FILE=NAM,
                     68:      >                   STATUS='NEW',ERR=20,IOSTAT=IOSTAT)
                     69:       IF (LUNIT .EQ. 8)  OPEN(UNIT=LUNIT,FILE=NAM,
                     70:      >                   STATUS='NEW',ERR=20,IOSTAT=IOSTAT)
                     71:       IF (LUNIT .GT. 10) OPEN(UNIT=LUNIT,FILE=NAM,
                     72:      >                   STATUS='OLD',ERR=20,IOSTAT=IOSTAT)
                     73:       IF (IOSTAT .NE. 0) GO TO 20
                     74: C
                     75: C     REWIND ALL EXCEPT DIARY
                     76: C
                     77:       IF (LUNIT .NE. 8) REWIND LUNIT
                     78:       RETURN
                     79: C
                     80: C     ERROR ON OPEN
                     81: C
                     82:    20 IF (IOSTAT .EQ. 0) IOSTAT = -1
                     83:       RETURN
                     84: C
                     85: C     CLOSE FILES
                     86: C
                     87:    30 CLOSE(UNIT=-LUNIT)
                     88:       RETURN
                     89:       END
                     90:       SUBROUTINE SAVLOD(LUNIT,ID,M,N,IMG,JOB,XREAL,XIMAG)
                     91:       INTEGER LUNIT,ID(4),M,N,IMG,JOB
                     92:       DOUBLE PRECISION XREAL(1),XIMAG(1)
                     93: C
                     94: C     IMPLEMENT SAVE AND LOAD
                     95: C     LUNIT = LOGICAL UNIT NUMBER
                     96: C     ID = NAME, FORMAT 4A1
                     97: C     M, N = DIMENSIONS
                     98: C     IMG = NONZERO IF XIMAG IS NONZERO
                     99: C     JOB = 0     FOR SAVE
                    100: C         = SPACE AVAILABLE FOR LOAD
                    101: C     XREAL, XIMAG = REAL AND OPTIONAL IMAGINARY PARTS
                    102: C
                    103: C     SYSTEM DEPENDENT FORMATS
                    104:   101 FORMAT(4A1,3I4)
                    105:   102 FORMAT(4Z18)
                    106: C
                    107:       IF (JOB .GT. 0) GO TO 20
                    108: C
                    109: C     SAVE
                    110:    10 WRITE(LUNIT,101) ID,M,N,IMG
                    111:       DO 15 J = 1, N
                    112:          K = (J-1)*M+1
                    113:          L = J*M
                    114:          WRITE(LUNIT,102) (XREAL(I),I=K,L)
                    115:          IF (IMG .NE. 0) WRITE(LUNIT,102) (XIMAG(I),I=K,L)
                    116:    15 CONTINUE
                    117:       RETURN
                    118: C
                    119: C     LOAD
                    120:    20 READ(LUNIT,101,END=30) ID,M,N,IMG
                    121:       IF (M*N .GT. JOB) GO TO 30
                    122:       DO 25 J = 1, N
                    123:          K = (J-1)*M+1
                    124:          L = J*M
                    125:          READ(LUNIT,102,END=30) (XREAL(I),I=K,L)
                    126:          IF (IMG .NE. 0) READ(LUNIT,102,END=30) (XIMAG(I),I=K,L)
                    127:    25 CONTINUE
                    128:       RETURN
                    129: C
                    130: C     END OF FILE
                    131:    30 M = 0
                    132:       N = 0
                    133:       RETURN
                    134:       END
                    135:       SUBROUTINE FORMZ(LUNIT,X,Y)
                    136:       DOUBLE PRECISION X,Y
                    137: C
                    138: C     SYSTEM DEPENDENT ROUTINE TO PRINT WITH Z FORMAT
                    139: C
                    140:       IF (Y .NE. 0.0D0) WRITE(LUNIT,10) X,Y
                    141:       IF (Y .EQ. 0.0D0) WRITE(LUNIT,10) X
                    142:    10 FORMAT(2Z18)
                    143:       RETURN
                    144:       END
                    145:       DOUBLE PRECISION FUNCTION FLOP(X)
                    146:       DOUBLE PRECISION X
                    147: C     SYSTEM DEPENDENT FUNCTION
                    148: C     COUNT AND POSSIBLY CHOP EACH FLOATING POINT OPERATION
                    149: C     FLP(1) IS FLOP COUNTER
                    150: C     FLP(2) IS NUMBER OF PLACES TO BE CHOPPED
                    151: C
                    152:       INTEGER SYM,SYN(4),BUF(256),CHAR,FLP(2),FIN,FUN,LHS,RHS,RAN(2)
                    153:       COMMON /COM/ SYM,SYN,BUF,CHAR,FLP,FIN,FUN,LHS,RHS,RAN
                    154: C
                    155:       DOUBLE PRECISION MASK(14),XX,MM
                    156:       real mas(2,14)
                    157:       LOGICAL LX(2),LM(2)
                    158:       EQUIVALENCE (LX(1),XX),(LM(1),MM)
                    159:       equivalence (mask(1),mas(1))
                    160:       data mas/
                    161:      $ 'ffffffff'x,'fff0ffff'x,
                    162:      $ 'ffffffff'x,'ff00ffff'x,
                    163:      $ 'ffffffff'x,'f000ffff'x,
                    164:      $ 'ffffffff'x,'0000ffff'x,
                    165:      $ 'ffffffff'x,'0000fff0'x,
                    166:      $ 'ffffffff'x,'0000ff00'x,
                    167:      $ 'ffffffff'x,'0000f000'x,
                    168:      $ 'ffffffff'x,'00000000'x,
                    169:      $ 'fff0ffff'x,'00000000'x,
                    170:      $ 'ff00ffff'x,'00000000'x,
                    171:      $ 'f000ffff'x,'00000000'x,
                    172:      $ '0000ffff'x,'00000000'x,
                    173:      $ '0000fff0'x,'00000000'x,
                    174:      $ '0000ff80'x,'00000000'x/
                    175: C
                    176:       FLP(1) = FLP(1) + 1
                    177:       K = FLP(2)
                    178:       FLOP = X
                    179:       IF (K .LE. 0) RETURN
                    180:       FLOP = 0.0D0
                    181:       IF (K .GE. 15) RETURN
                    182:       XX = X
                    183:       MM = MASK(K)
                    184:       LX(1) = LX(1) .AND. LM(1)
                    185:       LX(2) = LX(2) .AND. LM(2)
                    186:       FLOP = XX
                    187:       RETURN
                    188:       END
                    189:       SUBROUTINE XCHAR(BUF,K)
                    190:       INTEGER BUF(1),K
                    191: C
                    192: C     SYSTEM DEPENDENT ROUTINE TO HANDLE SPECIAL CHARACTERS
                    193: C
                    194: C
                    195:       INTEGER BACK,MASK
                    196:       DATA BACK/'20202008'X/,MASK/'000000FF'X/
                    197: C
                    198:       IF (BUF(1) .EQ. BACK) K = -1
                    199:       L = BUF(1) .AND. MASK
                    200:       IF (K .NE. -1) WRITE(6,10) BUF(1),L
                    201:    10 FORMAT(1X,1H',A1,4H' = ,Z2,' hex is not a MATLAB character.')
                    202:       RETURN
                    203:       END
                    204:       SUBROUTINE USER(A,M,N,S,T)
                    205:       DOUBLE PRECISION A(M,N),S,T
                    206: C
                    207:       INTEGER A3(9)
                    208:       DATA A3 /-149,537,-27,-50,180,-9,-154,546,-25/
                    209:       IF (A(1,1) .NE. 3.0D0) RETURN
                    210:       DO 10 I = 1, 9
                    211:          A(I,1) = A3(I)
                    212:    10 CONTINUE
                    213:       M = 3
                    214:       N = 3
                    215:       RETURN
                    216:       END
                    217:       SUBROUTINE PROMPT(PAUSE)
                    218:       INTEGER PAUSE
                    219: C
                    220: C     ISSUE MATLAB PROMPT WITH OPTIONAL PAUSE
                    221: C
                    222:       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),RIO,WIO,RTE,WTE,HIO
                    223:       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,RIO,WIO,RTE,WTE,HIO
                    224:       WRITE(WTE,10)
                    225:       IF (WIO .NE. 0) WRITE(WIO,10)
                    226:    10 FORMAT(/1X,'<>')
                    227:       IF (PAUSE .EQ. 1) READ(RTE,20) DUMMY
                    228:    20 FORMAT(A1)
                    229:       RETURN
                    230:       END
                    231:       SUBROUTINE PLOT(LUNIT,X,Y,N,P,K,BUF)
                    232:       DOUBLE PRECISION X(N),Y(N),P(1)
                    233:       INTEGER BUF(79)
                    234: C
                    235: C     PLOT X VS. Y ON LUNIT
                    236: C     IF K IS NONZERO, THEN P(1),...,P(K) ARE EXTRA PARAMETERS
                    237: C     BUF IS WORK SPACE
                    238: C
                    239:       DOUBLE PRECISION XMIN,YMIN,XMAX,YMAX,DY,DX,Y1,Y0
                    240:       INTEGER AST,BLANK,H,W
                    241:       DATA AST/1H*/,BLANK/1H /,H/20/,W/79/
                    242: C
                    243: C     H = HEIGHT, W = WIDTH
                    244: C
                    245:       XMIN = X(1)
                    246:       XMAX = X(1)
                    247:       YMIN = Y(1)
                    248:       YMAX = Y(1)
                    249:       DO 10 I = 1, N
                    250:          XMIN = DMIN1(XMIN,X(I))
                    251:          XMAX = DMAX1(XMAX,X(I))
                    252:          YMIN = DMIN1(YMIN,Y(I))
                    253:          YMAX = DMAX1(YMAX,Y(I))
                    254:    10 CONTINUE
                    255:       DX = XMAX - XMIN
                    256:       IF (DX .EQ. 0.0D0) DX = 1.0D0
                    257:       DY = YMAX - YMIN
                    258:       WRITE(LUNIT,35)
                    259:       DO 40 L = 1, H
                    260:          DO 20 J = 1, W
                    261:             BUF(J) = BLANK
                    262:    20    CONTINUE
                    263:          Y1 = YMIN + (H-L+1)*DY/H
                    264:          Y0 = YMIN + (H-L)*DY/H
                    265:          JMAX = 1
                    266:          DO 30 I = 1, N
                    267:             IF (Y(I) .GT. Y1) GO TO 30
                    268:             IF (L.NE.H .AND. Y(I).LE.Y0) GO TO 30
                    269:             J = 1 + (W-1)*(X(I) - XMIN)/DX
                    270:             BUF(J) = AST
                    271:             JMAX = MAX0(JMAX,J)
                    272:    30    CONTINUE
                    273:          WRITE(LUNIT,35) (BUF(J),J=1,JMAX)
                    274:    35    FORMAT(1X,79A1)
                    275:    40 CONTINUE
                    276:       RETURN
                    277:       END
                    278:       SUBROUTINE EDIT(BUF,N)
                    279:       INTEGER BUF(N)
                    280: C
                    281: C     CALLED AFTER INPUT OF A SINGLE BACKSLASH
                    282: C     BUF CONTAINS PREVIOUS INPUT LINE, ONE CHAR PER WORD
                    283: C     ENTER LOCAL EDITOR IF AVAILABLE
                    284: C     OTHERWISE JUST
                    285:       RETURN
                    286:       END

unix.superglobalmegacorp.com

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