mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-03-02 17:44:40 +00:00
1. Commit library tape images, directories, and extracted text files. 2. Commit additional utilities under Unisys-Emode-Tools.
71 lines
5.5 KiB
Plaintext
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
|