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

1.1       root        1:       PROGRAM MATMAIN(INPUT,OUTPUT,TAPE5=INPUT,TAPE6=OUTPUT)
                      2:       CALL MATLAB(0)
                      3:       STOP
                      4:       END
                      5:       SUBROUTINE FILES(LUNIT,NAME,IOSTAT)
                      6:       INTEGER LUNIT,NAME(64),IOSTAT
                      7: C
                      8: C     SYSTEM DEPENDENT ROUTINE TO ALLOCATE FILES
                      9: C     LUNIT = LOGICAL UNIT NUMBER
                     10: C           = 1,  SAVE
                     11: C           = 2,  LOAD
                     12: C           = 7,  PRINT
                     13: C           = 8,  DIARY
                     14: C           > 10, EXEC
                     15: C           < 0,  CLOSE -LUNIT
                     16: C           = -5, SPECIAL CASE, END OF FILE DETECTED ON TERMINAL
                     17: C     NAME = FILE NAME, 1 CHARACTER PER WORD
                     18: C     NONZERO IOSTAT RETURNED FOR ERROR CONDITION
                     19: C
                     20: C     (UNLESS CHANGED IN SUBROUTINE MATLAB, UNITS 5, 6 AND 9 ARE
                     21: C      USED FOR TERMINAL INPUT, TERMINAL OUTPUT AND THE HELP FILE.
                     22: C      THE HELP FILE IS OPENED BY SUBROUTINE HELPER.)
                     23: C
                     24:       CHARACTER*64 NAM
                     25: C
                     26:       IF (LUNIT .LT. 0) GO TO 30
                     27: C
                     28: C     FORTRAN 77 INTERNAL FILE CONVERSION FROM 64A1 TO CHARACTER*64
                     29: C
                     30:       WRITE(NAM,'(64A1)') NAME
                     31: C
                     32: C     UNFORMATTED I/O FOR SAVE AND LOAD
                     33: C     FORMATTED I/O FOR EXEC, DIARY AND PRINT
                     34: C
                     35:       IOSTAT = 0
                     36:       IF (LUNIT .EQ. 1)  OPEN(UNIT=LUNIT,FILE=NAM,FORM='UNFORMATTED',
                     37:      >                   STATUS='NEW',ERR=20,IOSTAT=IOSTAT)
                     38:       IF (LUNIT .EQ. 2)  OPEN(UNIT=LUNIT,FILE=NAM,FORM='UNFORMATTED',
                     39:      >                   STATUS='OLD',ERR=20,IOSTAT=IOSTAT)
                     40:       IF (LUNIT .EQ. 7)  OPEN(UNIT=LUNIT,FILE=NAM,
                     41:      >                   STATUS='NEW',ERR=20,IOSTAT=IOSTAT)
                     42:       IF (LUNIT .EQ. 8)  OPEN(UNIT=LUNIT,FILE=NAM,
                     43:      >                   STATUS='NEW',ERR=20,IOSTAT=IOSTAT)
                     44:       IF (LUNIT .GT. 10) OPEN(UNIT=LUNIT,FILE=NAM,
                     45:      >                   STATUS='OLD',ERR=20,IOSTAT=IOSTAT)
                     46:       IF (IOSTAT .NE. 0) GO TO 20
                     47: C
                     48: C     REWIND ALL EXCEPT DIARY
                     49: C
                     50:       IF (LUNIT .NE. 8) REWIND LUNIT
                     51:       RETURN
                     52: C
                     53: C     ERROR ON OPEN
                     54: C
                     55:    20 IF (IOSTAT .EQ. 0) IOSTAT = -1
                     56:       RETURN
                     57: C
                     58: C     CLOSE FILES
                     59: C
                     60:    30 CLOSE(UNIT=-LUNIT)
                     61:       RETURN
                     62:       END
                     63:       SUBROUTINE SAVLOD(LUNIT,ID,M,N,IMG,JOB,XREAL,XIMAG)
                     64:       INTEGER LUNIT,ID(4),M,N,IMG,JOB
                     65:       REAL XREAL(1),XIMAG(1)
                     66: C
                     67: C     IMPLEMENT SAVE AND LOAD
                     68: C     LUNIT = LOGICAL UNIT NUMBER
                     69: C     ID = NAME, FORMAT 4A1
                     70: C     M, N = DIMENSIONS
                     71: C     IMG = NONZERO IF XIMAG IS NONZERO
                     72: C     JOB = 0     FOR SAVE
                     73: C         = SPACE AVAILABLE FOR LOAD
                     74: C     XREAL, XIMAG = REAL AND OPTIONAL IMAGINARY PARTS
                     75: C
                     76: C     SYSTEM DEPENDENT FORMATS
                     77:   101 FORMAT(4A1,3I4)
                     78:   102 FORMAT(4O20)
                     79: C
                     80:       IF (JOB .GT. 0) GO TO 20
                     81: C
                     82: C     SAVE
                     83:    10 WRITE(LUNIT,101) ID,M,N,IMG
                     84:       DO 15 J = 1, N
                     85:          K = (J-1)*M+1
                     86:          L = J*M
                     87:          WRITE(LUNIT,102) (XREAL(I),I=K,L)
                     88:          IF (IMG .NE. 0) WRITE(LUNIT,102) (XIMAG(I),I=K,L)
                     89:    15 CONTINUE
                     90:       RETURN
                     91: C
                     92: C     LOAD
                     93:    20 READ(LUNIT,101) ID,M,N,IMG
                     94:       IF (EOF(LUNIT).NE.0) GO TO 30
                     95:       IF (M*N .GT. JOB) GO TO 30
                     96:       DO 25 J = 1, N
                     97:          K = (J-1)*M+1
                     98:          L = J*M
                     99:          READ(LUNIT,102) (XREAL(I),I=K,L)
                    100:          IF (EOF(LUNIT).NE.0) GO TO 30
                    101:          IF (IMG .NE. 0) READ(LUNIT,102) (XIMAG(I),I=K,L)
                    102:          IF (EOF(LUNIT).NE.0) GO TO 30
                    103:    25 CONTINUE
                    104:       RETURN
                    105: C
                    106: C     END OF FILE
                    107:    30 M = 0
                    108:       N = 0
                    109:       RETURN
                    110:       END
                    111:       SUBROUTINE FORMZ(LUNIT,X,Y)
                    112:       REAL X,Y
                    113: C
                    114: C     SYSTEM DEPENDENT ROUTINE TO PRINT WITH Z FORMAT
                    115: C
                    116:       IF (Y .NE. 0.0E0) WRITE(LUNIT,10) X,Y
                    117:       IF (Y .EQ. 0.0E0) WRITE(LUNIT,10) X
                    118:    10 FORMAT(2O22)
                    119:       RETURN
                    120:       END
                    121:       REAL FUNCTION FLOP(X)
                    122:       REAL X
                    123: C     SYSTEM DEPENDENT FUNCTION
                    124: C     COUNT AND POSSIBLY CHOP EACH FLOATING POINT OPERATION
                    125: C     FLP(1) IS FLOP COUNTER
                    126: C     FLP(2) IS NUMBER OF PLACES TO BE CHOPPED
                    127: C
                    128:       INTEGER SYM,SYN(4),BUF(256),CHAR,FLP(2),FIN,FUN,LHS,RHS,RAN(2)
                    129:       COMMON /COM/ SYM,SYN,BUF,CHAR,FLP,FIN,FUN,LHS,RHS,RAN
                    130: C
                    131:       REAL MASK(15)
                    132:       DATA MASK            / 77777777777777777770B,
                    133:      $ 77777777777777777700B,77777777777777777000B,
                    134:      $ 77777777777777770000B,77777777777777700000B,
                    135:      $ 77777777777777000000B,77777777777770000000B,
                    136:      $ 77777777777700000000B,77777777777000000000B,
                    137:      $ 77777777770000000000B,77777777700000000000B,
                    138:      $ 77777777000000000000B,77777770000000000000B,
                    139:      $ 77777700000000000000B,77777000000000000000B/
                    140: C
                    141:       FLP(1) = FLP(1) + 1
                    142:       K = FLP(2)
                    143:       FLOP = X
                    144:       IF (K .LE. 0) RETURN
                    145:       FLOP = 0.0E0
                    146:       IF (K .GE. 16) RETURN
                    147: C     LOGICAL AND FUNCTION
                    148: C     FLOP = X .AND. MASK(K)  IS AN ALTERNATE
                    149:       FLOP = AND(X,MASK(K))
                    150:       RETURN
                    151:       END
                    152:       SUBROUTINE XCHAR(BUF,K)
                    153:       INTEGER BUF(2),K
                    154: C
                    155: C     SYSTEM DEPENDENT ROUTINE TO HANDLE SPECIAL CHARACTERS
                    156: C
                    157:       INTEGER AT,UP,D,COLON
                    158:       DATA AT/O"74"/,UP/O"76"/,D/O"04"/,COLON/O"7404"/
                    159: C     TO HANDLE ASCII ON CDC NOS, AT SHOULD BE 74 OCTAL,
                    160: C     UP SHOULD BE 76 OCTAL, D  SHOULD BE 04 OCTAL,
                    161: C     AND COLON SHOULD BE 7404 OCTAL.
                    162: C     IN SUBROUTINE MATLAB, THE DATA STATEMENTS FOR ALPHA AND ALPHB
                    163: C     SHOULD BE ALTERED SO THAT ALPHA(41) IS 63 OCTAL (ASCII PERCENT)
                    164: C     AND ALPHB(41) IS THE SAME AS THE COLON HERE.  
                    165: C
                    166: C     THE 12-BIT CODE FOR COLON IS AT FOLLOWED BY D
                    167:       IF (BUF(1).EQ.AT .AND. BUF(2).EQ.D) BUF(2) = COLON
                    168: C     OTHERWISE IGNORE THE TWO 12-BIT ESCAPE CHARACTERS
                    169:       IF (BUF(1).EQ.AT .OR. BUF(1).EQ.UP) K = 0
                    170: C
                    171:       IF (K .NE. 0) WRITE(6,10) BUF(1)
                    172:    10 FORMAT(1X,A1,' is not a MATLAB character.')
                    173:       RETURN
                    174:       END
                    175:       SUBROUTINE USER(A,M,N,S,T)
                    176:       REAL A(M,N),S,T
                    177: C
                    178:       INTEGER A3(9)
                    179:       DATA A3 /-149,537,-27,-50,180,-9,-154,546,-25/
                    180:       IF (A(1,1) .NE. 3.0E0) RETURN
                    181:       DO 10 I = 1, 9
                    182:          A(I,1) = A3(I)
                    183:    10 CONTINUE
                    184:       M = 3
                    185:       N = 3
                    186:       RETURN
                    187:       END
                    188:       SUBROUTINE PROMPT(PAUSE)
                    189:       INTEGER PAUSE
                    190: C
                    191: C     ISSUE MATLAB PROMPT WITH OPTIONAL PAUSE
                    192: C
                    193:       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),RIO,WIO,RTE,WTE,HIO
                    194:       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,RIO,WIO,RTE,WTE,HIO
                    195:       WRITE(WTE,10)
                    196:       IF (WIO .NE. 0) WRITE(WIO,10)
                    197:    10 FORMAT(1X,/'<>')
                    198:       IF (PAUSE .EQ. 1) READ(RTE,20) DUMMY
                    199:    20 FORMAT(A1)
                    200:       RETURN
                    201:       END
                    202:       SUBROUTINE PLOT(LUNIT,X,Y,N,P,K,BUF)
                    203:       REAL X(N),Y(N),P(1)
                    204:       INTEGER BUF(79)
                    205: C
                    206: C     PLOT X VS. Y ON LUNIT
                    207: C     IF K IS NONZERO, THEN P(1),...,P(K) ARE EXTRA PARAMETERS
                    208: C     BUF IS WORK SPACE
                    209: C
                    210:       REAL XMIN,YMIN,XMAX,YMAX,DY,DX,Y1,Y0
                    211:       INTEGER AST,BLANK,H,W
                    212:       DATA AST/1H*/,BLANK/1H /,H/20/,W/79/
                    213: C
                    214: C     H = HEIGHT, W = WIDTH
                    215: C
                    216:       XMIN = X(1)
                    217:       XMAX = X(1)
                    218:       YMIN = Y(1)
                    219:       YMAX = Y(1)
                    220:       DO 10 I = 1, N
                    221:          XMIN = AMIN1(XMIN,X(I))
                    222:          XMAX = AMAX1(XMAX,X(I))
                    223:          YMIN = AMIN1(YMIN,Y(I))
                    224:          YMAX = AMAX1(YMAX,Y(I))
                    225:    10 CONTINUE
                    226:       DX = XMAX - XMIN
                    227:       IF (DX .EQ. 0.0) DX = 1.0
                    228:       DY = YMAX - YMIN
                    229:       WRITE(LUNIT,35)
                    230:       DO 40 L = 1, H
                    231:          DO 20 J = 1, W
                    232:             BUF(J) = BLANK
                    233:    20    CONTINUE
                    234:          Y1 = YMIN + (H-L+1)*DY/H
                    235:          Y0 = YMIN + (H-L)*DY/H
                    236:          JMAX = 1
                    237:          DO 30 I = 1, N
                    238:             IF (Y(I) .GT. Y1) GO TO 30
                    239:             IF (L.NE.H .AND. Y(I).LE.Y0) GO TO 30
                    240:             J = 1 + (W-1)*(X(I) - XMIN)/DX
                    241:             BUF(J) = AST
                    242:             JMAX = MAX0(JMAX,J)
                    243:    30    CONTINUE
                    244:          WRITE(LUNIT,35) (BUF(J),J=1,JMAX)
                    245:    35    FORMAT(1X,79A1)
                    246:    40 CONTINUE
                    247:       RETURN
                    248:       END
                    249:       SUBROUTINE EDIT(BUF,N)
                    250:       INTEGER BUF(N)
                    251: C
                    252: C     CALLED AFTER INPUT OF A SINGLE BACKSLASH
                    253: C     BUF CONTAINS PREVIOUS INPUT LINE, ONE CHAR PER WORD
                    254: C     ENTER LOCAL EDITOR IF AVAILABLE
                    255: C     OTHERWISE JUST
                    256:       RETURN
                    257:       END

unix.superglobalmegacorp.com

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