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

71 lines
5.5 KiB
Plaintext

COMMENT PROCEDURE - NEXTONE, 00000100
CUBE LIBRARY NUMBER IS Z200001. 00000200
THIS VERSION DATED 6/20/67; 00000300
REAL PROCEDURE NEXTONE (LISTID,FINI,SAVEIT); 00000400
INTEGER SAVEIT; 00000500
LIST LISTID; 00000600
BOOLEAN FINI; 00000700
COMMENT NEXTONE RETURNS THE VALUE OF THE"NEXT"PARAMETER IN THE 00000800
DECLARED LIST LISTID. FINI AND SAVEIT ARE DECLARED LOCAL TO THE 00000900
SEGMENT CALLING NEXTONE. THE FIRST ENTRY MUST BE WITH THE VALUE 00001000
OF FINI = TRUE. IF THERE IS AT LEAST ONE MORE ELEMENT IN 00001100
THE LIST TO BE RETURNED, FINI WILL BE SET = FALSE. WHEN THE 00001200
LIST IS EXHAUSTED A MINUS ONE IS RETURNED AND FINI IS SET=TRUE. 00001300
THE INFORMATION REQUIRED TO GET THE NEXT ITEM IN LISTID IS 00001400
STORED IN SAVEIT AND FINI. THEREFORE EACH ACTUAL PARAMETER 00001500
USED AS A LISTID MUST HAVE ITS OWN SAVEIT AND FINI. THIS IS 00001600
PARTICULARLY IMPORTANT IF SWITCH LIST CONSTRUCTS ARE USED. 00001700
IT IS RECOMMENDED THAT THE PROGRAMMER DECLARE PARALLEL BOOLEAN AND 00001800
INTEGER ARRAYS TO HOLD FINI AND SAVEIT FOR CORRESPONDING LISTS 00001900
IN THE SWITCH LIST. IF A GIVEN LIST IS EXHAUSTED THEN ITS FINI 00002000
AND SAVEIT MAY BE USED BY ANOTHER LIST. A LIST MAY BE RESTARTED AT 00002100
ANY TIME BY SETTING FINI=TRUE. A TYPICAL CALL WILL BE 00002200
LIST ITEMLIST(I,J,K). 00002300
INTEGER SAVER. 00002400
BOOLEAN DONE. 00002500
REAL A. 00002600
LABEL L1,EXIT. 00002700
DONE~TRUE. 00002800
L1: A~NEXTONE(ITEMLIST,DONE,SAVER). 00002900
IF DONE THEN GO TO EXIT 00003000
ELSE PROCESSNEWITEM. GO TO L1. 00003100
EXIT: ; 00003200
COMMENT VARIABLE A HAS A VALUE = -1 AT EXIT; 00003300
BEGIN 00003400
INTEGER I,J; REAL DUMMY; 00003500
STREAM PROCEDURE RSETTING (POINTER); 00003600
BEGIN 00003700
COMMENT THIS PROCEDURE RETURNS THE SETTING OF THE R REGISTER; 00003800
SI ~ POINTER; SI ~ SI - 55; 00003900
COMMENT BACK UP POINTER TO POINT TO MARK STACK CONTROL WORD. THE 00004000
NEXT NINE BITS IN THIS STRING ARE THE NINE BITS OF THE R REGISTER; 00004100
DI ~ POINTER; 00004200
DS ~ 5 LIT "Q0000"; DS ~ 3 RESET; 00004300
9 (IF SB THEN DS ~ SET ELSE DS ~ RESET; SKIP 1 SB;); 00004400
DS ~ 1 LIT "C"; 00004500
END RSETTING; 00004600
STREAM PROCEDURE XFER(A); 00004700
BEGIN 00004800
SI ~ A; SI ~ SI - 48; SI ~ SI - 16; 00004900
DI ~ A; DS ~ WDS; 00005000
END XFER; 00005100
STREAM PROCEDURE MOVE (A)"TO"(B)"AFTER PUTTING B IN"(C); 00005200
BEGIN 00005300
SI ~ B; DI ~ C; DS ~ WDS; 00005400
SI ~ A; DI ~ B; DS ~ WDS; 00005500
END MOVE; 00005600
RSETTING (I); 00005700
IF FINI THEN 00005800
BEGIN 00005900
FINI ~ FALSE; 00006000
MOVE (FINI,I,J); 00006100
END 00006200
ELSE MOVE(SAVEIT,I,J); 00006300
XFER(DUMMY); 00006400
COMMENT EXCHANGE LIST DESCRIPTOR AND DUMMY TO FOOL MACHINE. 00006500
REFERENCE TO DUMMY ACTUALLY EXECUTES LIST; 00006600
NEXTONE ~ DUMMY; 00006700
MOVE (J,I,SAVEIT); 00006800
IF SAVEIT = -1 THEN FINI ~ TRUE; 00006900
END PROCEDURE NEXTONE; 00007000