|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.