1
0
mirror of https://github.com/retro-software/B5500-software.git synced 2026-03-03 01:47:56 +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

186 lines
15 KiB
Plaintext

COMMENT PROCEDURE - PLOT, 00000100
CUBE LIBRARY NUMBER IS J500001. 00000200
THIS VERSION DATED 5/31/67; 00000300
PROCEDURE PLOT (X, Y, ID, NW, XSC, YSC, XID, YID, PLOTTER); 00000400
VALUE XID, YID; 00000500
REAL XSC, YSC, XID, YID; 00000600
ARRAY X[0], Y[0], ID[0], NW[0]; 00000700
FILE PLOTTER; 00000800
BEGIN 00000900
COMMENT X[0] AND Y[0] ARE RESERVED FOR INPUT OF MINIMUM SCALE 00001000
VALUES, WHERE X AND Y ARE VECTORS CONTAINING PLOT VALUES.00001100
ID IS VECTOR CONTAINING ALPHA DESCRIPTION OF PLOT. 00001200
NW IS 4 WORD ARRAY WITH LOWER BOUND OF 0 WHERE 00001300
0 = NUMBER OF X, Y VALUES IN X, Y ARRAYS 00001400
1 = NUMBER OF WORDS IN ID ARRAY (ID IS PRINTED ALPHA)00001500
2 = CHARACTER TO BE USED AS PLOT SYMBOL 00001600
3 = 0 IF PLOT IS TO BE CLEARED AND PRINTED 00001700
3 = 1 IF PLOT NOT TO BE PRINTED ON THIS CALL - RETAIN00001800
3 = 2 IF PLOT NOT TO BE CLEARED OR PRINTED THIS CALL 00001900
3 = 3 IF PLOT NOT TO BE CLEARED BUT IS TO BE PRINTED 00002000
XSC AND YSC ARE SCALE VALUES FOR X AND Y, IF ZERO SCALES 00002100
WILL BE CALCULATED. 00002200
XID AND YID ARE ONE WORD ALPHA AXIS IDENTIFICATION. 00002300
PLOTTER IS FILE WHERE PLOT IS TO BE WRITTEN ; 00002400
OWN REAL ARRAY P[0:40, 0:17]; 00002500
LABEL EXIT; 00002600
REAL SYM, VID, V1, A, B; 00002700
INTEGER I, J, K, L, M, N; 00002800
FORMAT F1 (20A6); 00002900
FORMAT OUT F3A (A1, X9,"-", 18A6); 00003000
FORMAT OUT F3B (A1, R8.1, X1, "I", 18A6); 00003100
FORMAT F5 (X20, "SCALE FACTOR FOR ",A1, " = 10 TO THE ", I3, 00003200
" POWER"); 00003300
FORMAT OUT F6 (X11, 21("I----")); 00003400
FORMAT OUT F8 (X11, 21(I4, X1)); 00003500
FORMAT OUT F10 (X50, A6); 00003600
LIST L1 (FOR K ~ 0 STEP 1 UNTIL NW[1] DO ID[K]); 00003700
LIST L3A(VID, FOR K ~ 0 STEP 1 UNTIL 17 DO P[I,K]); 00003800
LIST L3B(VID, V1, FOR K ~ 0 STEP 1 UNTIL 17 DO P[I,K]); 00003900
LIST L8 (FOR K ~ 0 STEP 5 UNTIL 100 DO (K | XSC + X[0])| B); 00004000
PROCEDURE SCALE (VA, NV, SC); 00004100
VALUE NV; INTEGER NV; ARRAY VA[0]; REAL SC; 00004200
BEGIN 00004300
REAL MIN, MAX, RG; 00004400
REAL I, J; 00004500
INTEGER K; 00004600
MIN ~ VA[1]; MAX ~ VA[1]; 00004700
FOR K ~ 2 STEP 1 UNTIL NV DO 00004800
BEGIN 00004900
IF VA[K] < MIN THEN MIN ~ VA[K]; 00005000
IF VA[K] > MAX THEN MAX ~ VA[K]; 00005100
END; 00005200
J ~ 0; 00005300
IF ABS(MIN) > 10 THEN 00005400
BEGIN 00005500
DO J ~ J + 1 UNTIL 10*J > ABS(MIN); 00005600
J ~ 10 * (J-1); 00005700
END ELSE 00005800
IF ABS(MIN) < 1 AND ABS(MIN) ! 0 THEN 00005900
BEGIN 00006000
DO J ~ J - 1 UNTIL 10*J < ABS(MIN); 00006100
IF J ! -1 THEN 00006200
J ~ 10 * (J+1) ELSE J ~ 0.1; 00006300
END ELSE 00006400
J ~ 1; 00006500
MIN ~ ENTIER(MIN/J) | J; 00006600
IF VA[0] ! 0 AND VA[0] < MIN THEN MIN ~ VA[0]; 00006700
RG ~ MAX - MIN; J ~ -1; 00006800
IF RG > 10 THEN 00006900
DO J ~ J + 1 UNTIL (I~10*J) } (RG / SC) ELSE 00007000
IF RG / SC ! 0 THEN 00007100
BEGIN 00007200
I ~ 0.1; 00007300
IF I > (RG/SC) THEN 00007400
DO I ~ I | 0.1 UNTIL I { RG / SC; 00007500
I ~ I | 10; 00007600
END ELSE 00007700
I ~ 10; 00007800
IF I } 1 AND I | 0.5 > (RG/SC) THEN I ~ I | 0.5; 00007900
IF I < 1 AND I | 5 < (RG/SC) THEN I ~ I | 5; 00008000
SC ~ I; VA[0] ~ MIN; 00008100
END; 00008200
ALPHA STREAM PROCEDURE CKPT (W, WP); 00008300
BEGIN 00008400
LOCAL AD; 00008500
SI ~ WP; DI ~ LOC AD; DS ~ WDS; SI ~ W; SI ~ SI + 2; 00008600
SI ~ SI + AD; DI ~ LOC CKPT; DS ~ 7 LIT "0000000"; 00008700
DS ~ 1 CHR; 00008800
END; 00008900
STREAM PROCEDURE PT (W, WP, SYM); 00009000
BEGIN 00009100
LOCAL AD; 00009200
SI ~ WP; DI ~ LOC AD; DS~WDS; DI~W; DI~ DI+2; DI~DI+AD; 00009300
SI ~ SYM; SI ~ SI + 7; DS ~ 1 CHR; 00009400
END; 00009500
PROCEDURE SCPT (SC, MIN, LB, UB, NP, SV); 00009600
VALUE SC, MIN, LB, UB, NP; 00009700
REAL SC, MIN, LB, UB; 00009800
INTEGER NP, SV; 00009900
BEGIN 00010000
COMMENT THIS PROCEDURE CLCULATES 10 TO X POWER FOR PRINTING 00010100
AXIS VALUES; 00010200
SV ~0; 00010300
IF SC | NP + MIN > UB THEN 00010400
DO SV~SV+1 UNTIL (SC | NP + MIN) | 10 * (-SV) { UB; 00010500
IF SC < LB THEN 00010600
BEGIN 00010700
IF SC | 5 < LB THEN 00010800
DO SV ~ SV - 1 UNTIL (SC | 5) | 10 * (-SV) } LB; 00010900
IF SC | 10 * (-SV) -ENTIER (SC | 10 * (-SV)) < LB THEN 00011000
SV ~ SV - 1; 00011100
END; 00011200
END; 00011300
00011400
ALPHA STREAM PROCEDURE CHT (W, C); 00011500
BEGIN 00011600
LOCAL C1; 00011700
DI ~ LOC C1; SI ~ C; DS ~ WDS; 00011800
DI ~ LOC CHT; DI ~ DI + 7; SI ~ W; SI ~ SI + C1; 00011900
DS ~ 1 CHR; 00012000
END; 00012100
N ~ NW[0]; 00012200
IF NW[3] = 0 OR NW[3] = 3 THEN 00012300
WRITE (PLOTTER[PAGE]); 00012400
IF NW[3] = 0 OR NW[3] = 1 THEN 00012500
BEGIN 00012600
FOR I ~ 0 STEP 1 UNTIL 40 DO 00012700
FOR K ~ 0 STEP 1 UNTIL 17 DO P[I,K] ~ " "; 00012800
END; 00012900
IF XSC = 0 THEN 00013000
BEGIN 00013100
XSC ~ 100; SCALE (X, N, XSC); 00013200
END; 00013300
IF YSC = 0 THEN 00013400
BEGIN 00013500
YSC ~ 40; SCALE (Y, N, YSC); 00013600
END; 00013700
FOR I ~ 1 STEP 1 UNTIL N DO 00013800
BEGIN 00013900
K ~ (X[I] - X[0]) / XSC; 00014000
L ~ (Y[I] - Y[0]) / YSC; 00014100
M ~ K MOD 6; 00014200
K ~ K DIV 6; 00014300
IF L } 0 AND L{ 40 AND K } 0 AND K { 17 AND M } 0 THEN 00014400
BEGIN 00014500
V1 ~ CKPT (P[L,K], M); 00014600
IF V1 = " " THEN SYM ~ NW[2] ELSE 00014700
IF V1 < 7 THEN SYM ~ V1 + 1 ELSE 00014800
SYM ~ 2; 00014900
PT (P[L,K], M, SYM); 00015000
END ELSE 00015100
BEGIN 00015200
M ~ 0; SYM ~ "~"; 00015300
PT (P[0,0], M, SYM); 00015400
END; 00015500
END; 00015600
IF NW[3] = 1 OR NW[3] = 2 THEN GO TO EXIT; 00015700
WRITE (PLOTTER[DBL], F1, L1); 00015800
SCPT (YSC, Y[0], 0.1, 8@5, 40, M); 00015900
SCPT (XSC, X[0], 1.0, 9@3, 100, N); 00016000
WRITE (PLOTTER, F5, "Y", M); 00016100
WRITE (PLOTTER[DBL], F5, "X", N); 00016200
IF M = 0 THEN A ~ 1 ELSE A ~ 10 * (-M); 00016300
IF N = 0 THEN B ~ 1 ELSE B ~ 10 * (-N); 00016400
FOR I ~ 40 STEP -1 UNTIL 0 DO 00016500
BEGIN 00016600
IF I < 31 AND I > 24 THEN 00016700
BEGIN 00016800
L ~ 32 - I; 00016900
VID ~ CHT (YID, L); 00017000
END ELSE 00017100
VID ~ " "; 00017200
00017300
IF I MOD 5 = 0 THEN 00017400
BEGIN 00017500
V1 ~ (I | YSC + Y[0] ) | A; 00017600
WRITE (PLOTTER, F3B, L3B); 00017700
END ELSE 00017800
WRITE (PLOTTER, F3A, L3A); 00017900
END; 00018000
WRITE (PLOTTER, F6); 00018100
WRITE (PLOTTER, F8, L8); 00018200
WRITE (PLOTTER, F10, XID); 00018300
EXIT: 00018400
END; 00018500