Annotation of researchv10dc/cmd/matlab/sys.cms, revision 1.1

1.1     ! root        1: C     PROGRAM MAIN
        !             2:       CALL ERRSET(208,1000000,-1,1)
        !             3:       CALL ERRSET(207,1000000,0,1)
        !             4:       CALL MATLAB(0)
        !             5:       STOP
        !             6:       END
        !             7:       SUBROUTINE FILES(LUNIT,NAME,IOSTAT)
        !             8:       INTEGER LUNIT,NAME(32)
        !             9: C
        !            10: C     SYSTEM DEPENDENT ROUTINE TO ALLOCATE FILES
        !            11: C     THIS VERSION FOR IBM CMS
        !            12: C     LUNIT = LOGICAL UNIT NUMBER
        !            13: C     NAME = FILE NAME, 1 CHARACTER PER WORD
        !            14: C
        !            15:       LOGICAL NAML(2),LL
        !            16:       DOUBLE PRECISION NAM8
        !            17:       EQUIVALENCE (NAML(1),NAM8),(L,LL)
        !            18: C
        !            19:       L = -LUNIT
        !            20:       IF (LUNIT .LT. 0) REWIND L
        !            21:       IF (LUNIT .LT. 0) RETURN
        !            22: C
        !            23:       K1 = 2**24
        !            24:       K2 = 2**30
        !            25:       K3 = 2**7
        !            26:       DO 10 I = 1,8
        !            27:          IF( NAME(I) .GT. 0 ) NAME(I) = NAME(I)/K1
        !            28:          IF( NAME(I) .LT. 0 ) NAME(I) = ((NAME(I)+K2)+K2)/K1+K3
        !            29:    10 CONTINUE
        !            30:       NAM8 = 0.0D0
        !            31:       DO 20 I = 1,4
        !            32:          L = K1*NAME(I)
        !            33:          NAML(1) = NAML(1) .OR. LL
        !            34:          L = K1*NAME(I+4)
        !            35:          NAML(2) = NAML(2) .OR. LL
        !            36:          K1 = K1/256
        !            37:    20 CONTINUE
        !            38:       IF( LUNIT .EQ. 1 ) REWIND 1
        !            39:       IF( LUNIT .EQ. 1 ) CALL CMSCMD(IRTURN,'FILEDEF ','01      ',
        !            40:      $                         'DISK    ',NAM8,'MATLAB  ','A1      ')
        !            41:       IF( LUNIT .EQ. 2 ) REWIND 2
        !            42:       IF( LUNIT .EQ. 2 ) CALL CMSCMD(IRTURN,'FILEDEF ','02      ',
        !            43:      $                         'DISK    ',NAM8,'MATLAB  ','A1      ')
        !            44:       IF( LUNIT .EQ. 11 ) REWIND 11
        !            45:       IF( LUNIT .EQ. 11 ) CALL CMSCMD(IRTURN,'FILEDEF ','11      ',
        !            46:      $                         'DISK    ',NAM8,'MATLAB  ','A1      ')
        !            47:       RETURN
        !            48:       END
        !            49:       SUBROUTINE SAVLOD(LUNIT,ID,M,N,IMG,JOB,XREAL,XIMAG)
        !            50:       INTEGER LUNIT,ID(4),M,N,IMG,JOB
        !            51:       DOUBLE PRECISION XREAL(1),XIMAG(1)
        !            52: C
        !            53: C     IMPLEMENT SAVE AND LOAD
        !            54: C     LUNIT = LOGICAL UNIT NUMBER
        !            55: C     ID = NAME, FORMAT 4A1
        !            56: C     M, N = DIMENSIONS
        !            57: C     IMG = NONZERO IF XIMAG IS NONZERO
        !            58: C     JOB = 0     FOR SAVE
        !            59: C         = SPACE AVAILABLE FOR LOAD
        !            60: C     XREAL, XIMAG = REAL AND OPTIONAL IMAGINARY PARTS
        !            61: C
        !            62: C     SYSTEM DEPENDENT FORMATS
        !            63:   101 FORMAT(4A1,3I4)
        !            64:   102 FORMAT(4Z18)
        !            65: C
        !            66:       IF (JOB .GT. 0) GO TO 20
        !            67: C
        !            68: C     SAVE
        !            69:    10 WRITE(LUNIT,101) ID,M,N,IMG
        !            70:       DO 15 J = 1, N
        !            71:          K = (J-1)*M+1
        !            72:          L = J*M
        !            73:          WRITE(LUNIT,102) (XREAL(I),I=K,L)
        !            74:          IF (IMG .NE. 0) WRITE(LUNIT,102) (XIMAG(I),I=K,L)
        !            75:    15 CONTINUE
        !            76:       RETURN
        !            77: C
        !            78: C     LOAD
        !            79:    20 READ(LUNIT,101,END=30) ID,M,N,IMG
        !            80:       IF (M*N .GT. JOB) GO TO 30
        !            81:       DO 25 J = 1, N
        !            82:          K = (J-1)*M+1
        !            83:          L = J*M
        !            84:          READ(LUNIT,102,END=30) (XREAL(I),I=K,L)
        !            85:          IF (IMG .NE. 0) READ(LUNIT,102,END=30) (XIMAG(I),I=K,L)
        !            86:    25 CONTINUE
        !            87:       RETURN
        !            88: C
        !            89: C     END OF FILE
        !            90:    30 M = 0
        !            91:       N = 0
        !            92:       RETURN
        !            93:       END
        !            94:       SUBROUTINE FORMZ(LUNIT,X,Y)
        !            95:       DOUBLE PRECISION X,Y
        !            96: C
        !            97: C     SYSTEM DEPENDENT ROUTINE TO PRINT WITH Z FORMAT
        !            98: C
        !            99:       IF (Y .NE. 0.0D0) WRITE(LUNIT,10) X,Y
        !           100:       IF (Y .EQ. 0.0D0) WRITE(LUNIT,10) X
        !           101:    10 FORMAT(2Z18)
        !           102:       RETURN
        !           103:       END
        !           104:       DOUBLE PRECISION FUNCTION FLOP(X)
        !           105:       DOUBLE PRECISION X
        !           106: C     SYSTEM DEPENDENT FUNCTION
        !           107: C     COUNT AND POSSIBLY CHOP EACH FLOATING POINT OPERATION
        !           108: C     FLP(1) IS FLOP COUNTER
        !           109: C     FLP(2) IS NUMBER OF PLACES TO BE CHOPPED
        !           110: C
        !           111:       INTEGER SYM,SYN(4),BUF(256),CHAR,FLP(2),FIN,FUN,LHS,RHS,RAN(2)
        !           112:       COMMON /COM/ SYM,SYN,BUF,CHAR,FLP,FIN,FUN,LHS,RHS,RAN
        !           113: C
        !           114:       DOUBLE PRECISION MASK(13),XX,MM
        !           115:       LOGICAL LX(2),LM(2)
        !           116:       EQUIVALENCE (LX(1),XX),(LM(1),MM)
        !           117:       DATA MASK        / ZFFFFFFFFFFFFFFF0,ZFFFFFFFFFFFFFF00,
        !           118:      $ ZFFFFFFFFFFFFF000,ZFFFFFFFFFFFF0000,ZFFFFFFFFFFF00000,
        !           119:      $ ZFFFFFFFFFF000000,ZFFFFFFFFF0000000,ZFFFFFFFF00000000,
        !           120:      $ ZFFFFFFF000000000,ZFFFFFF0000000000,ZFFFFF00000000000,
        !           121:      $ ZFFFF000000000000,ZFFF0000000000000/
        !           122: C
        !           123:       FLP(1) = FLP(1) + 1
        !           124:       K = FLP(2)
        !           125:       FLOP = X
        !           126:       IF (K .LE. 0) RETURN
        !           127:       FLOP = 0.0D0
        !           128:       IF (K .GE. 14) RETURN
        !           129:       XX = X
        !           130:       MM = MASK(K)
        !           131:       LX(1) = LX(1) .AND. LM(1)
        !           132:       LX(2) = LX(2) .AND. LM(2)
        !           133:       FLOP = XX
        !           134:       RETURN
        !           135:       END
        !           136:       SUBROUTINE XCHAR(NAME,K)
        !           137:       INTEGER NAME(1),K
        !           138: C
        !           139: C     SYSTEM DEPENDENT ROUTINE TO HANDLE SPECIAL CHARACTERS
        !           140: C
        !           141:       LOGICAL NAML(2),LL
        !           142:       DOUBLE PRECISION NAM8
        !           143:       EQUIVALENCE (NAML(1),NAM8),(L,LL)
        !           144:       DATA IXCHAR /1H!/
        !           145:       IF( NAME(1) .NE. IXCHAR ) WRITE(6,30) NAME(1)
        !           146:    30 FORMAT(1X,A1,' is not a MATLAB character.')
        !           147:       IF( NAME(1) .NE. IXCHAR ) RETURN
        !           148:       DO 5 I = 2,9
        !           149:          NAME(I-1) = NAME(I)
        !           150:     5 CONTINUE
        !           151:       K1 = 2**24
        !           152:       K2 = 2**30
        !           153:       K3 = 2**7
        !           154:       DO 10 I = 1,8
        !           155:          IF( NAME(I) .GT. 0 ) NAME(I) = NAME(I)/K1
        !           156:          IF( NAME(I) .LT. 0 ) NAME(I) = ((NAME(I)+K2)+K2)/K1+K3
        !           157:    10 CONTINUE
        !           158:       NAM8 = 0.0D0
        !           159:       DO 20 I = 1,4
        !           160:          L = K1*NAME(I)
        !           161:          NAML(1) = NAML(1) .OR. LL
        !           162:          L = K1*NAME(I+4)
        !           163:          NAML(2) = NAML(2) .OR. LL
        !           164:          K1 = K1/256
        !           165:    20 CONTINUE
        !           166:       CALL CMSCMD(IRTURN,NAM8)
        !           167:       K = 99
        !           168:       RETURN
        !           169:       END
        !           170:       SUBROUTINE USER(A,M,N,S,T)
        !           171:       DOUBLE PRECISION A(M,N),S,T
        !           172: C
        !           173:       INTEGER A3(9)
        !           174:       DATA A3 /-149,537,-27,-50,180,-9,-154,546,-25/
        !           175:       IF (A(1,1) .NE. 3.0D0) RETURN
        !           176:       DO 10 I = 1, 9
        !           177:          A(I,1) = A3(I)
        !           178:    10 CONTINUE
        !           179:       M = 3
        !           180:       N = 3
        !           181:       RETURN
        !           182:       END
        !           183:       SUBROUTINE PROMPT(PAUSE)
        !           184:       INTEGER PAUSE
        !           185: C
        !           186: C     ISSUE MATLAB PROMPT WITH OPTIONAL PAUSE
        !           187: C
        !           188:       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),RIO,WIO,RTE,WTE,HIO
        !           189:       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,RIO,WIO,RTE,WTE,HIO
        !           190:       WRITE(WTE,10)
        !           191:       IF (WIO .NE. 0) WRITE(WIO,10)
        !           192:    10 FORMAT(/1X,'<>')
        !           193:       IF (PAUSE .EQ. 1) READ(RTE,20) DUMMY
        !           194:    20 FORMAT(A1)
        !           195:       RETURN
        !           196:       END
        !           197:       SUBROUTINE PLOT(LUNIT,X,Y,N,P,K,BUF)
        !           198:       DOUBLE PRECISION X(N),Y(N),P(1)
        !           199:       INTEGER BUF(79)
        !           200: C
        !           201: C     PLOT X VS. Y ON LUNIT
        !           202: C     IF K IS NONZERO, THEN P(1),...,P(K) ARE EXTRA PARAMETERS
        !           203: C     BUF IS WORK SPACE
        !           204: C
        !           205:       DOUBLE PRECISION XMIN,YMIN,XMAX,YMAX,DY,DX,Y1,Y0
        !           206:       INTEGER AST,BLANK,H,W
        !           207:       DATA AST/1H*/,BLANK/1H /,H/20/,W/79/
        !           208: C
        !           209: C     H = HEIGHT, W = WIDTH
        !           210: C
        !           211:       XMIN = X(1)
        !           212:       XMAX = X(1)
        !           213:       YMIN = Y(1)
        !           214:       YMAX = Y(1)
        !           215:       DO 10 I = 1, N
        !           216:          XMIN = DMIN1(XMIN,X(I))
        !           217:          XMAX = DMAX1(XMAX,X(I))
        !           218:          YMIN = DMIN1(YMIN,Y(I))
        !           219:          YMAX = DMAX1(YMAX,Y(I))
        !           220:    10 CONTINUE
        !           221:       DX = XMAX - XMIN
        !           222:       IF (DX .EQ. 0.0D0) DX = 1.0D0
        !           223:       DY = YMAX - YMIN
        !           224:       WRITE(LUNIT,35)
        !           225:       DO 40 L = 1, H
        !           226:          DO 20 J = 1, W
        !           227:             BUF(J) = BLANK
        !           228:    20    CONTINUE
        !           229:          Y1 = YMIN + (H-L+1)*DY/H
        !           230:          Y0 = YMIN + (H-L)*DY/H
        !           231:          JMAX = 1
        !           232:          DO 30 I = 1, N
        !           233:             IF (Y(I) .GT. Y1) GO TO 30
        !           234:             IF (L.NE.H .AND. Y(I).LE.Y0) GO TO 30
        !           235:             J = 1 + (W-1)*(X(I) - XMIN)/DX
        !           236:             BUF(J) = AST
        !           237:             JMAX = MAX0(JMAX,J)
        !           238:    30    CONTINUE
        !           239:          WRITE(LUNIT,35) (BUF(J),J=1,JMAX)
        !           240:    35    FORMAT(1X,79A1)
        !           241:    40 CONTINUE
        !           242:       RETURN
        !           243:       END
        !           244:       SUBROUTINE EDIT(BUF,N)
        !           245:       INTEGER BUF(N)
        !           246: C
        !           247: C     CALLED AFTER INPUT OF A SINGLE BACKSLASH
        !           248: C     BUF CONTAINS PREVIOUS INPUT LINE, ONE CHAR PER WORD
        !           249: C     ENTER LOCAL EDITOR IF AVAILABLE
        !           250: C     OTHERWISE JUST
        !           251:       RETURN
        !           252:       END
        !           253: 
        !           254:          TITLE 'CMSCMD: INTERFACE TO EXECUTE A CMS COMMAND:: 6/13/79'
        !           255: ***********************************************************************
        !           256: *
        !           257: * COMMENTS TO JACK DONGARRA APPLIED MATHEMATICS DIVISION
        !           258: * ARGONNE NATIONAL LABORATORY. D-247, EXT 7246
        !           259: *
        !           260: * CMSCMD WILL EXECUTE A CMS COMMAND WHEN CALLED FROM FORTRAN.
        !           261: *
        !           262: * THE CALLING SEQUENCE IS:
        !           263: *     CALL CMSCMD(IRET,'COMMAND ','ARG1 ',ARG2',.....,'ARGN')
        !           264: *
        !           265: * WHERE <IRET>  IS INTEGER*4, THE RETURN CODE FROM <CMSCMD>.
        !           266: *               IRET CONTAINS THE RETURN CODE FROM THE CMS COMMAND,
        !           267: *               UNLESS MORE THAN 30 <ARG> FIELDS WHERE PASSED,
        !           268: *               WHEN IT WILL BE -31.
        !           269: *
        !           270: *         ALL THE REMAINING ARGUMENTS MUST BE LITERALS. THEY MUST
        !           271: *         NOT CONTAIN LEADING OR EMBEDDED SPACES. IF LESS THAN 8
        !           272: *         CHARACTERS LONG THEY SHOULD HAVE AT LEAST 1 TRAILING SPACE.
        !           273: *         COMPILERS PAD LITERALS DIFFERENTLY, SO IT IS SAFEST TO
        !           274: *         ALWAYS APPEND A TRAILING SPACE NO MATTER WHAT THE LENGTH
        !           275: *         OF THE LITERAL. FOR SOME COMPILERS <CMSCMD> WILL WORK
        !           276: *         CORRECTLY WITHOUT TRAILING SPACES. THE ARGUMENTS MAY, OF
        !           277: *         COURSE, BE ARRAYS OF TYPE "LOGICAL".
        !           278: *
        !           279: *       <COMMAND> IS THE NAME OF THE CMS COMMAND TO BE EXECUTED.
        !           280: *
        !           281: *       <ARG1>
        !           282: *        TO
        !           283: *       <ARGN>    ARE THE ARGUMENTS TO BE PASSED TO THE CMS COMMAND.
        !           284: *                 UP TO 30 SUCH ARGUMENTS MAY BE PASSED.
        !           285: *                 NOTE THAT SINCE CMS DOES NOT DO ANY FURTHER
        !           286: *                 TOKENIZATION AN ARGUMENT CONSISTING SOLELY OF SPACES
        !           287: *                 WILL HAVE A NULL VALUE.
        !           288: *
        !           289: ***********************************************************************
        !           290:          SPACE 3
        !           291: CMSCMD   CSECT 0
        !           292:          USING *,15
        !           293:          B     SAVEREGS
        !           294:          DC    AL1(6)
        !           295:          DC    C'CMSCMD'
        !           296: SAVEREGS STM   14,12,12(13)   SAVE CALLERS REGS IN OWN SAVE AREA
        !           297:          ST    13,SAVEAREA+4  STORE CHAIN BACK ADDRESS
        !           298:          LR    12,13
        !           299:          LA    13,SAVEAREA
        !           300:          ST    13,8(12)
        !           301:          DROP  15
        !           302:          BALR  10,0           ESTABLISH BASE REG
        !           303:          USING *,10
        !           304:          LA    4,ARGLIST-8    R4->CMS ARG LIST
        !           305:          L     5,=F'-31'      -31 IS RETURN CODE FOR BAD ARGS
        !           306: * R1 CONTAINS ADDRESS OF LIST OF CALLING ARG ADDRESSES
        !           307:          L     2,0(0,1)       R2 CONTAINS ADDR OF RETURN CODE (ARG1)
        !           308:          SR    3,3            R3 IS CALLING ARG COUNTER...SET TO ZERO
        !           309: NEXTARG  LA    4,8(0,4)       STEP R4 TO NEXT CMS ARG
        !           310:          CLI   0(1),X'80'     WAS THIS FLAGGED AS LAST ARG?
        !           311:          BE    GOCMS          YES..GO AND CALL CMS ROUTINE
        !           312:          LA    1,4(0,1)       NO...STEP CALLING ARG PTR
        !           313:          LA    3,1(0,3)       INCREMENT ARG COUNTER
        !           314:          C     3,VAL31        >31?
        !           315:          BH    EXIT           YES..LEAVE WITH RETURN CODE = -31
        !           316:          MVC   0(8,4),BLANKS  NO...BLANK OUT CMS ARG
        !           317:          LA    6,8(0,0)       SET R6=8 FOR COUNT OF 8 BYTES
        !           318:          L     7,0(0,1)       R7->CALLING ARG STRING
        !           319:          LR    8,4            R8->CMS ARG STRING
        !           320: COPYLOOP CLI   0(7),X'00'     NULL BYTE?
        !           321:          BE    NEXTARG        YES..END OF STRING
        !           322:          CLI   0(7),X'40'     NO...IS IT A SPACE?
        !           323:          BE    NEXTARG        YES..END OF STRING
        !           324:          MVC   0(1,8),0(7)    NO...COPY BYTE
        !           325:          LA    7,1(0,7)       INCREMENT R7, R8
        !           326:          LA    8,1(0,8)
        !           327:          BCT   6,COPYLOOP
        !           328:          B     NEXTARG
        !           329: GOCMS    MVC   0(8,4),NULLARG SET TRAILING NULL ARG FOR CMS
        !           330:          SR    5,5            HOPE FOR SUCCESS...RETURN CODE=0
        !           331:          LA    1,ARGLIST
        !           332:          SVC   202
        !           333:          DC    AL4(ERROR)
        !           334:          B     EXIT
        !           335: ERROR    LR    5,15           PICK UP CMS RETURN CODE
        !           336: EXIT     ST    5,0(0,2)       PASS BACK RETURN CODE
        !           337:          L     13,4(13)       RESTORE CALLER SAVEAREA PTR
        !           338:          LM    14,12,12(13)   RESTORE CALLERS REGS
        !           339:          BR    14             AND RETURN
        !           340:         SPACE 5
        !           341: NULLARG  DC    8X'FF'
        !           342: BLANKS   DC    CL8' '
        !           343: ARGLIST  DS    32D            FOR COMMAND NAME, PLUS UP TO 30 ARGS,
        !           344: *                             AND TRAILING NULL ARG EXPECTED BY CMS
        !           345: VAL31    DC    F'31'
        !           346: SAVEAREA DS    24F
        !           347:          END

unix.superglobalmegacorp.com

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