1
0
mirror of https://github.com/retro-software/B5500-software.git synced 2026-03-02 17:44:40 +00:00
Files
Paul Kimpel 2c72f7fd1d Commit CUBE Library version 13 of February 1972.
1. Commit library tape images, directories, and extracted text files.
2. Commit additional utilities under Unisys-Emode-Tools.
2018-05-27 11:24:23 -07:00

443 lines
35 KiB
Plaintext

COMMENT A TEST PROGRAM USING PROCEDURE BESSEL WHICH CALCULATES TEST0001
THE VALUES OF THE REGULAR AND MODIFIED BESSEL FUNCTIONS TEST0002
OF THE FIRST AND SECOND KINDS FOR COMPLEX ARGUMENTS AND TEST0003
POSITIVE INTEGRAL ORDERS. TEST0004
TEST0005
J. K. KONDO TEST0006
(PROFESSIONAL SERVICES GROUP, BURROUGHS CORPORATION). TEST0007
TEST0008
PROCEDURE CARD SEQUENCE START WITH BLCX0001. TEST0009
FIRST RELEASE DATE 04-01-1964 ; TEST0010
TEST0011
TEST0012
BEGIN TEST0013
TEST0014
LABEL START, EOP ; TEST0015
REAL X, Y, SUM, ISUM ; TEST0016
INTEGER N ; TEST0017
ALPHA FUNCTION ; TEST0018
TEST0019
FORMAT IN FMIN(I3,X5,A1,X5,2E19.12) ; TEST0020
FORMAT OUT COMT(X30,"BESSEL FUNCTION"///"FUNCTION",X2,"N",X10,"X", TEST0021
X20,"YI",X15,"REAL PART",X12,"IMAGINARY PART"), TEST0022
FRMT(X3,A1,X5,I2,4E21.12) ; TEST0023
TEST0024
FILE IN CARD(1,10) ; TEST0025
FILE OUT PRINTER(1,15) ; TEST0026
TEST0027
PROCEDURE COMPLEX(A,CONVECT) ; CPLX0001
REAL ARRAY A[0,0] ; CPLX0002
INTEGER ARRAY CONVECT[0] ; CPLX0003
CPLX0004
BEGIN CPLX0005
REAL PROCEDURE SINH(X1) ; CPLX0006
VALUE X1 ; CPLX0007
REAL X1 ; CPLX0008
CPLX0009
BEGIN CPLX0010
REAL Y ; CPLX0011
Y ~ EXP(X1) ; CPLX0012
SINH ~ (Y - 1.0/Y) | 0.5 CPLX0013
END ; CPLX0014
REAL PROCEDURE COSH(X1) ; CPLX0015
VALUE X1 ; CPLX0016
REAL X1 ; CPLX0017
CPLX0018
BEGIN CPLX0019
REAL Y ; CPLX0020
Y ~ EXP(X1) ; CPLX0021
COSH ~ (Y + 1.0/Y) | 0.5 CPLX0022
END ; CPLX0023
STREAM PROCEDURE ILLOP(MMMMMMMMMM,A,E,I) ; CPLX0024
BEGIN CPLX0025
DI ~ A ; DS ~ 26 LIT "*ILLEGAL OP CODE* ENTRY - " ; CPLX0026
SI ~ E ; DS ~ 4 DEC ; DS ~ 7 LIT " LOC - " ; CPLX0027
SI ~ I ; DS ~ 4 DEC ; DS ~ LIT "~" ; CPLX0028
SI ~ LOC A ; DI ~ MMMMMMMMMM ; CPLX0029
DS ~ 5 LIT "{|000" ; DS ~ 3 RESET ; CPLX0030
SI ~ SI + 5 ; SKIP 3 SB ; CPLX0031
3(IF SB THEN DS ~ SET ELSE DS ~ RESET ; SKIP 1 SB) ; CPLX0032
DS ~ 2 CHR ; CPLX0033
RELEASE(MMMMMMMMMM) ; CPLX0034
END ; CPLX0035
FILE OUT MMMMMMMMMM 2(1,10) ; CPLX0036
OWN INTEGER E ; CPLX0037
REAL ARRAY DD[0:10] ; CPLX0038
INTEGER I,J,I1,I2,I3 ; CPLX0039
LABEL NEXT,STORE,ADD,SUB,MUL,DVD,LOAD,ARG,ROOT,EXPC,SINC,COSC, CPLX0040
MODC,POLY,FIN,NEXT1 ; CPLX0041
CPLX0042
SWITCH TYPE ~ STORE,ADD,SUB,MUL,DVD,LOAD,ARG,ROOT,EXPC,SINC,COSC,CPLX0043
MODC,POLY ; CPLX0044
CPLX0045
REAL DIVD,Y ; CPLX0046
CPLX0047
COMMENT MATRIX A - CPLX0048
ROW 0 - REAL PART CPLX0049
ROW 1 - IMAGINARY PART CPLX0050
A[0,0] - REAL PART PSUEDO ACCUMULATOR CPLX0051
A[1,0] - IMAGINARY PART PSUEDO ACCUMULATOR CPLX0052
VECTOR CONVECT - CONTROL VECTOR CPLX0053
IN THE FOLLOWING I,J AND K ON THE RIGHT CPLX0054
REFER TO A[I],A[J] AND A[K] RESPECTIVELY CPLX0055
1,I - STORE PSUEDO ACCUMULATOR IN I CPLX0056
2,I,J - ADD I + J CPLX0057
3,I,J - SUBTRACT I - J CPLX0058
4,I,J - MULTIPLY I | J CPLX0059
5,I,J - DIVIDE I/J CPLX0060
6,I - LOAD I INTO PSUEDO ACCUMULATOR CPLX0061
7,I - ARG(I) CPLX0062
8,I - SQRT(I) CPLX0063
9,I - EXP(I) CPLX0064
10,I - SIN(I) CPLX0065
11,I - COS(I) CPLX0066
12,I - ABS(I) CPLX0067
13,I,J,K - POLYNOMIAL CALCULATION CPLX0068
LET X = A[K] CPLX0069
((...A[J] | X + A[J - 1]) | X +...A[I] ;CPLX0070
CPLX0071
I ~ -2 ; E ~ E + 1 ; CPLX0072
NEXT1: I ~ I + 2 ; CPLX0073
I1 ~ CONVECT[I+ 1] ; CPLX0074
GO TO TYPE[ABS(CONVECT[I])] ; CPLX0075
ILLOP(MMMMMMMMMM,DD,E,I) ; CPLX0076
E ~ E/0 ; CPLX0077
CPLX0078
STORE: A[0,I1] ~ A[0,0] ; CPLX0079
A[1,I1] ~ A[1,0] ; CPLX0080
GO TO NEXT ; CPLX0081
ADD: I2 ~ CONVECT[I+ 2] ; CPLX0082
A[0,0] ~ A[0,I1] + A[0,I2] ; CPLX0083
A[1,0] ~ A[1,I1] + A[1,I2] ; CPLX0084
I ~ I + 1 ; GO TO NEXT ; CPLX0085
CPLX0086
SUB: I2 ~ CONVECT[I + 2] ; CPLX0087
A[0,0] ~ A[0,I1] - A[0,I2] ; CPLX0088
A[1,0] ~ A[1,I1] - A[1,I2] ; CPLX0089
I ~ I + 1 ; GO TO NEXT ; CPLX0090
CPLX0091
MUL: I2 ~ CONVECT[I + 2] ; CPLX0092
Y ~ A[0,I1] | A[0,I2] - A[1,I1] | A[1,I2] ; CPLX0093
A[1,0] ~ A[0,I1] | A[1,I2] + A[0,I2] | A[1,I1] ; CPLX0094
A[0,0] ~ Y ; CPLX0095
I ~ I + 1 ; GO TO NEXT ; CPLX0096
CPLX0097
DVD: I2 ~ CONVECT[I + 2] ; CPLX0098
DIVD ~ A[0,I2]*2 + A[1,I2]*2 ; CPLX0099
Y ~ (A[0,I1] | A[0,I2] + A[1,I1] | A[1,I2])/DIVD ; CPLX0100
A[1,0] ~ (A[1,I1] | A[0,I2] - A[0,I1] | A[1,I2])/DIVD ; CPLX0101
A[0,0] ~ Y ; CPLX0102
I ~ I + 1 ; GO TO NEXT ; CPLX0103
CPLX0104
LOAD: A[0,0] ~ A[0,I1] ; CPLX0105
A[1,0] ~ A[1,I1] ; CPLX0106
GO TO NEXT ; CPLX0107
CPLX0108
ARG: IF A[0,I1] > 0 THEN CPLX0109
A[0,0] ~ ARCTAN(A[1,I1]/A[0,I1]) CPLX0110
ELSE CPLX0111
BEGIN CPLX0112
IF A[0,I1] = 0 THEN CPLX0113
A[0,0] ~ SIGN(A[1,I1]) | 1.57079632679 CPLX0114
ELSE CPLX0115
A[0,0] ~ ARCTAN(A[1,I1]/A[0,I1]) + CPLX0116
SIGN(A[1,I1]) | 3.14159265358 ; CPLX0117
END ; CPLX0118
A[1,0] ~ 0 ; CPLX0119
GO TO NEXT ; CPLX0120
CPLX0121
ROOT: IF A[1,I1] = 0 THEN CPLX0122
BEGIN CPLX0123
IF A[0,I1] < 0 THEN CPLX0124
BEGIN CPLX0125
A[1,0] ~ SQRT(ABS(A[0,I1])) ; CPLX0126
A[0,0] ~ 0 CPLX0127
END CPLX0128
ELSE CPLX0129
BEGIN CPLX0130
A[1,0] ~ 0 ; CPLX0131
A[0,0] ~ SQRT(A[0,I1]) ; CPLX0132
END ; CPLX0133
GO TO NEXT ; CPLX0134
END ; CPLX0135
Y ~ SQRT((SQRT(A[0,I1]*2 + A[1,I1]*2) + A[0,I1])/2.0) ; CPLX0136
A[1,0] ~ A[1,I1]/(2.0 | Y | SIGN(A[1,I1])) ; CPLX0137
A[0,0] ~ Y ; CPLX0138
GO TO NEXT ; CPLX0139
CPLX0140
EXPC: Y ~ EXP(A[0,I1]) ; CPLX0141
A[0,0] ~ COS(A[1,I1]) | Y ; CPLX0142
A[1,0] ~ SIN(A[1,I1]) | Y ; CPLX0143
GO TO NEXT ; CPLX0144
CPLX0145
SINC: Y ~ SIN(A[0,I1]) | COSH(A[1,I1]) ; CPLX0146
A[1,0] ~ COS(A[0,I1]) | SINH(A[1,I1]) ; CPLX0147
A[0,0] ~ Y ; CPLX0148
GO TO NEXT ; CPLX0149
CPLX0150
COSC: Y ~ COS(A[0,I1]) | COSH(A[1,I1]) ; CPLX0151
A[1,0] ~ -SIN(A[0,I1]) | SINH(A[1,I1]) ; CPLX0152
A[0,0] ~ Y ; CPLX0153
GO TO NEXT ; CPLX0154
CPLX0155
MODC: A[0,0] ~ SQRT(A[0,I1]*2 + A[1,I1]*2) ; CPLX0156
A[1,0] ~ 0 ; CPLX0157
GO TO NEXT ; CPLX0158
CPLX0159
POLY: I3 ~ CONVECT[I + 3] ; CPLX0160
Y ~ A[0,I2] ; DIVD ~ A[1,I2] ; CPLX0161
FOR J ~ I2 - 1 STEP -1 UNTIL I1 DO CPLX0162
BEGIN CPLX0163
Y ~ Y | A[0,I3] - DIVD | A[1,I3] + A[0,J] ; CPLX0164
DIVD ~ Y | A[1,I3] + A[0,I3] | DIVD + A[1,J] ; CPLX0165
END ; CPLX0166
A[0,0] ~ Y ; A[1,0] ~ DIVD ; CPLX0167
I ~ I + 1 ; GO TO NEXT ; CPLX0168
NEXT: IF CONVECT[I] } 0 THEN GO TO NEXT1 ; CPLX0169
CPLX0170
FIN: END ; CPLX0171
COMMENT THE INPUT PARAMETERS FOR PROCEDURE BESSELN ARE BLCX0001
FUNCTION - AN ALPHANUMERIC OF ONE CHARACTER WHICH BLCX0002
DETERMINES THE FUNCTION TO BE EVALUATED, BLCX0003
IT CAN ASSUME THE FOLLOWING VALUES: BLCX0004
J - REGULAR BESSEL OF THE FIRST KIND BLCX0005
Y - REGULAR BESSEL OF THE SECOND KIND BLCX0006
I - MODIFIED BESSEL OF THE FIRST KIND BLCX0007
K - MODIFIED BESSEL OF THE SECOND KIND. BLCX0008
X - REAL PART OF THE ARGUMENT. BLCX0009
Y - IMAGINARY PART OF THE ARGUMENT BLCX0010
N - THE ORDER OF THE FUNCTION TO BE EVALUATED BLCX0011
THE OUTPUT PARAMETERS ARE: BLCX0012
SUM - REAL PART OF THE EVALUATED FUNCTION. BLCX0013
ISUM - IMAGINARY PART OF THE EVALUATED FUNCTION ;BLCX0014
BLCX0015
PROCEDURE BESSELN(X,Y,N,FUNCTION,SUM,ISUM) ; BLCX0016
BLCX0017
VALUE X, Y, N, FUNCTION ; BLCX0018
REAL X, Y, SUM, ISUM ; BLCX0019
INTEGER N ; BLCX0020
ALPHA FUNCTION ; BLCX0021
BLCX0022
BEGIN BLCX0023
ARRAY A[0:1,0:5] ; BLCX0024
LABEL L1,EXIT ; BLCX0025
BLCX0026
PROCEDURE BESSELCOM(X,Y,ORDER,FUNCTION,SUM,ISUM) ; BLCX0027
BLCX0028
VALUE X, Y, FUNCTION, ORDER ; BLCX0029
REAL X, Y, SUM, ISUM ; BLCX0030
INTEGER ORDER ; BLCX0031
ALPHA FUNCTION ; BLCX0032
BLCX0033
BEGIN BLCX0034
INTEGER ARRAY CONVECT[0:14] ; BLCX0035
ARRAY A[0:1,0:6] ; BLCX0036
BOOLEAN BOOL ; BLCX0037
INTEGER N ; BLCX0038
REAL R, I, TOL, Z1, Z2 ; BLCX0039
LABEL EXIT, SECOND ; BLCX0040
IF ORDER = 1 THEN BOOL ~ TRUE ELSE BOOL ~ FALSE ; BLCX0041
TOL ~ 1.0@-13 ; BLCX0042
R ~ (X*2 - Y*2) | 0.25 ; I ~ X | Y | 0.5 ; BLCX0043
IF FUNCTION = "J" OR FUNCTION = "Y" THEN BLCX0044
BEGIN BLCX0045
R ~ -R ; I ~ -I BLCX0046
END ; BLCX0047
BLCX0048
BEGIN BLCX0049
COMMENT THE VALUE OF THE J OR THE I FUNCTION IS CALCULATED IN THISBLCX0050
BLOCK ; BLCX0051
LABEL L1 ; BLCX0052
INTEGER NN ; BLCX0053
A[0,1] ~ R ; A[1,1] ~ I ; BLCX0054
IF BOOL THEN BLCX0055
BEGIN BLCX0056
A[0,3] ~ A[0,2] ~ X | 0.5 ; BLCX0057
A[1,2] ~ A[1,3] ~ Y | 0.5 ; BLCX0058
Z1 ~ (X*2 + Y*2) | 0.25 ; BLCX0059
N ~ 0 BLCX0060
END BLCX0061
ELSE BLCX0062
BEGIN BLCX0063
A[0,3] ~ R ; BLCX0064
A[1,2] ~ A[1,3] ~ I ; BLCX0065
A[0,2] ~ 1.0 + R ; BLCX0066
Z1 ~ I*2 + A[0,2]*2 ; BLCX0067
N ~ 1 BLCX0068
END ; BLCX0069
BLCX0070
L1: N ~ N + 1 ; BLCX0071
NN ~ N | N ; BLCX0072
IF BOOL THEN NN ~ NN + N ; BLCX0073
A[0,3] ~ A[0,3]/NN; A[1,3] ~ A[1,3]/NN ; BLCX0074
FILL CONVECT[*] WITH 4,1,3,1,3,2,0,2,-1,4 ; BLCX0075
COMPLEX(A,CONVECT) ; BLCX0076
Z2 ~ A[0,4]*2 + A[1,4]*2 ; BLCX0077
IF ABS(Z2 - Z1) > TOL THEN BLCX0078
BEGIN BLCX0079
A[0,2] ~ A[0,4] ; A[1,2] ~ A[1,4] ; BLCX0080
Z1 ~ Z2 ; BLCX0081
GO TO L1 BLCX0082
END ; BLCX0083
IF FUNCTION = "Y" OR FUNCTION = "K" THEN GO TO SECOND ; BLCX0084
SUM ~ A[0,2] ; ISUM ~ A[1,2] ; BLCX0085
GO TO EXIT BLCX0086
END CALCULATION OF BESSEL FUNCTIONS OF THE FIRST KIND ; BLCX0087
BLCX0088
SECOND: BEGIN BLCX0089
COMMENT THE VALUE OF THE Y OR THE K FUNCTION IS CALCULATED IN THISBLCX0090
BLOCK ; BLCX0091
BLCX0092
PROCEDURE LNCOM(X,Y,RLN,ILN) ; BLCX0093
BLCX0094
VALUE X,Y ; BLCX0095
REAL RLN,ILN,X,Y ; BLCX0096
BLCX0097
BEGIN BLCX0098
RLN ~ 0.5 | LN(X*2 + Y*2) ; BLCX0099
IF X ! 0 THEN ILN ~ ARCTAN(Y/X) BLCX0100
ELSE IF Y > 0 THEN ILN ~ 1.57079632679 BLCX0101
ELSE ILN ~ -1.57079632679 ; BLCX0102
IF X < 0 THEN IF Y < 0 THEN ILN ~ ILN - 3.14159265359 BLCX0103
ELSE ILN ~ ILN + 3.14159265359 BLCX0104
ELSE IF Y < 0 THEN ILN ~ ILN + 6.28318530718 ; BLCX0105
END ; BLCX0106
BLCX0107
LNCOM(X/2,Y/2,A[0,1],A[1,1]) ; BLCX0108
A[0,1] ~ A[0,1] + 0.577215664902 ; BLCX0109
FILL CONVECT[*] WITH 4,1,2,-1,6 ; BLCX0110
COMPLEX(A,CONVECT) ; BLCX0111
BLCX0112
BEGIN BLCX0113
REAL NN, NNN ; BLCX0114
LABEL L1 ; BLCX0115
A[0,1] ~ R ; A[1,1] ~ I ; BLCX0116
IF BOOL THEN BLCX0117
BEGIN BLCX0118
A[0,3] ~ 1.0 ; BLCX0119
A[0,5] ~ A[0,2] ~ X | 0.5 ; BLCX0120
A[1,5] ~ A[1,2] ~ Y | 0.5 ; BLCX0121
Z1 ~ (X*2 + Y*2) | 0.25 ; BLCX0122
END BLCX0123
ELSE BLCX0124
BEGIN BLCX0125
A[0,5] ~ 1.0 ; BLCX0126
A[1,5] ~ A[0,3] ~ A[0,2] ~ A[1,2] ~ Z1 ~ 0 ; BLCX0127
END ; BLCX0128
A[1,3] ~ N ~ 0 ; BLCX0129
BLCX0130
L1: N ~ N + 1 ; BLCX0131
NN ~ 1.0/N ; BLCX0132
NNN ~ IF BOOL THEN 1/(N+1.0) ELSE NN ; BLCX0133
A[0,3] ~ A[0,3] + NN ; BLCX0134
IF BOOL THEN A[0,3] ~ A[0,3] + NNN ; BLCX0135
NN ~ NN | NNN ; BLCX0136
A[0,5] ~ A[0,5] | NN ; A[1,5] ~ A[1,5] | NN ; BLCX0137
FILL CONVECT[*] WITH 4,5,1,1,5,4,0,3,2,0,2,-1,4 ; BLCX0138
COMPLEX(A,CONVECT) ; BLCX0139
Z2 ~ A[0,4]*2 + A[1,4]*2 ; BLCX0140
IF ABS(Z2 - Z1) > TOL THEN BLCX0141
BEGIN BLCX0142
A[0,2] ~ A[0,4] ; A[1,2] ~ A[1,4] ; BLCX0143
Z1 ~ Z2 ; BLCX0144
GO TO L1 BLCX0145
END ; BLCX0146
END ; BLCX0147
IF BOOL THEN BLCX0148
BEGIN BLCX0149
A[0,1] ~ 1.0 ; A[1,1] ~ 0 ; BLCX0150
A[0,3] ~ X ; A[1,3] ~ Y ; BLCX0151
FILL CONVECT[*] WITH 5,1,3,-1,1 ; BLCX0152
COMPLEX(A,CONVECT) BLCX0153
END ; BLCX0154
A[0,4] ~ 2.0 ; A[1,4] ~ 0 ; BLCX0155
IF FUNCTION = "Y" THEN BLCX0156
BEGIN BLCX0157
A[0,3] ~ 3.14159265359 ; A[1,3] ~ 0 ; BLCX0158
IF BOOL THEN BLCX0159
FILL CONVECT[*] WITH 3,6,1,4,0,4,3,0,2,5,0,3,-1,1 BLCX0160
ELSE BLCX0161
FILL CONVECT[*] WITH 3,6,2,4,0,4,5,0,3,-1,1 ; BLCX0162
END BLCX0163
ELSE BLCX0164
IF BOOL THEN BLCX0165
FILL CONVECT[*] WITH 5,2,4,3,1,0,2,0,6,-1,1 BLCX0166
ELSE BLCX0167
FILL CONVECT[*] WITH 3,2,6,-1,1 ; BLCX0168
COMPLEX(A,CONVECT) ; BLCX0169
SUM ~ A[0,1] ; ISUM ~ A[1,1] ; BLCX0170
END CALCULATION OF BESSEL FUNCTIONS OF THE SECOND KIND ; BLCX0171
EXIT: END PROCEDURE BESSELCOM ; BLCX0172
BLCX0173
PROCEDURE RECURSIVE(A,FUNCTION,N) ; BLCX0174
BLCX0175
VALUE FUNCTION, N ; BLCX0176
ALPHA FUNCTION ; BLCX0177
INTEGER N ; BLCX0178
ARRAY A[0,0] ; BLCX0179
BLCX0180
BEGIN BLCX0181
BLCX0182
COMMENT THE INPUT PARAMETERS TO PROCEDURE RECURSIVE ARE: BLCX0183
A - AN ARRAY WHICH CONTAINS IN BLCX0184
COL 1 - THE COMPLEX ARGUMENT BLCX0185
COL 2 - THE VALUE OF THE FUNCTION OF ORDER ZERO BLCX0186
COL 3 - THE VALUE OF THE FUNCTION OF ORDER ONE BLCX0187
FUNCTION - THE FUNCTION BEING EVALUATED BLCX0188
N - THE ORDER OF THE FUNCTION BLCX0189
THE VALUE OF THE FUNCTION OF ORDER N IS STORED IN A[0,5] BLCX0190
AND A[1,5] ; BLCX0191
BLCX0192
INTEGER ARRAY CONVECT[0:11] ; BLCX0193
INTEGER J, NN ; BLCX0194
NN ~ N - 1 ; BLCX0195
A[0,4] ~ 2.0 ; A[1,4] ~ 0 ; BLCX0196
FILL CONVECT[*] WITH 5,4,1,-1,1 ; BLCX0197
COMPLEX(A,CONVECT) ; BLCX0198
BLCX0199
FOR J ~ 1 STEP 1 UNTIL NN DO BLCX0200
BEGIN BLCX0201
A[0,4] ~ J ; BLCX0202
FILL CONVECT[*] WITH 4,4,1,4,0,3,3,0,2,-1,5 ; BLCX0203
IF FUNCTION = "K" THEN CONVECT[6] ~ 2 BLCX0204
ELSE IF FUNCTION = "I" THEN BLCX0205
BEGIN BLCX0206
CONVECT[7] ~ 2 ; CONVECT[8] ~ 0 BLCX0207
END ; BLCX0208
COMPLEX(A,CONVECT) ; BLCX0209
A[0,2] ~ A[0,3] ; A[1,2] ~ A[1,3] ; BLCX0210
A[0,3] ~ A[0,5] ; A[1,3] ~ A[1,5] ; BLCX0211
END ; BLCX0212
END PROCEDURE RECURSIVE ; BLCX0213
BLCX0214
IF (X*2 + Y*2) > 100 THEN GO TO EXIT ; BLCX0215
IF N = 1 THEN GO TO L1 ; BLCX0216
BESSELCOM(X,Y,0,FUNCTION,A[0,2],A[1,2]) ; BLCX0217
IF N = 0 THEN BLCX0218
BEGIN BLCX0219
SUM ~ A[0,2] ; ISUM ~ A[1,2] ; BLCX0220
GO TO EXIT BLCX0221
END ; BLCX0222
BLCX0223
BLCX0224
L1: BESSELCOM(X,Y,1,FUNCTION,A[0,3],A[1,3]) ; BLCX0225
IF N = 1 THEN BLCX0226
BEGIN BLCX0227
SUM ~ A[0,3] ; ISUM ~ A[1,3] ; BLCX0228
GO TO EXIT BLCX0229
END ; BLCX0230
A[0,1] ~ X ; A[1,1] ~ Y ; BLCX0231
RECURSIVE(A,FUNCTION,N) ; BLCX0232
SUM ~ A[0,5] ; ISUM ~ A[1,5] ; BLCX0233
EXIT: END PROCEDURE BESSELN ; BLCX0234
TEST0028
WRITE(PRINTER,COMT) ; TEST0029
START: READ(CARD,FMIN,N,FUNCTION,X,Y)[EOP] ; TEST0030
BESSELN(X,Y,N,FUNCTION,SUM,ISUM) ; TEST0031
WRITE(PRINTER[DBL],FRMT,FUNCTION,N,X,Y,SUM,ISUM) ; TEST0032
GO TO START ; TEST0033
TEST0034
EOP: END . TEST0035