ERRATA Jackson, James H., SELMA: A Conversational System for the Graphical Specification of Markovian Queueing Networks. Page 18, 9th line from bottom should read: which are associated with the merge. Whenever an item is available... Page 19, 8th line through 5th line from bottom should read: probability 0.3. Whenever the server in Figure 8d is not full, an item is placed in it from the bottom queue if the bottom queue is not empty, or from the top queue if this queue is not empty and the bottom queue is empty. Page 24: Replace with Corrected Figure 10 (see next page). Page 29, Line 3 should read: phase and results phase to provide this function. When this light button is referenced with... Page 32, 8th line from the bottom should read: For the example in Figure 13, this result is shown in Figure 14a. QAS then returns the information necessary to display the graph, and SELMA generates the graph and displays it on these axes, as shown in Figure 14b. Page 34, 7th line from the bottom should read: DETAIL light button allows the user to specify the maximum and minimum... Page 37, 12th line from the bottom should read: are used to save the current model on a file at the IBM 360/67 and to retrieve... 6th line from the bottom should read: command is terminated by a carriage return from the keyboard.) Page 40, 4th line from the bottom should read: the SEL Executive System until the command exchanger has removed... Page 44, Line 8 should read: 01 02 T,T2 Display single value Footnote 2 should appear as follows: 2Abscissa value, ordinate value Footnote 4 should not appear. Page 65: The word "EXIT" in the figure should be written "Exit".

24 -I ----- KP l - I (1) (2) (3),. - a. Random Branch -t 9 9- ^ - - > - - (1) (2) (3) P.r Bb. Priority Branch Corrected Figure 10. Generation of Branches

THE UNIVERSITY OF MICHIGAN Technical Report 23 SELMA: A Conversational System for the Graphical Specification of Markovian Queueing Networks James H. Jackson CONCOMP: Research in Conversational Use of Computers F. H. Westervelt, Director ORA Project 07449 supported by: ADVANCED RESEARCH PROJECTS AGENCY DEPARTMENT OF DEFENSE WASHINGTON, D. C. CONTRACT NO. DA-49-083 OSA-3050 ARPA ORDER NO. 716 administered through: OFFICE OF RESEARCH ADMINISTRATION ANN ARBOR October 1969

ABSTRACT This report discusses the design and use of the Systems Engineering Laboratory's Markovian Analyzer (SELMA) system for a DEC 339 computer display terminal. This system provides interactive graphics support for a program which was developed concurrently for the IBM 360/67 to analyze a class of Markovian queueing networks. Special features of the system include handling of all graphic operations at the terminal and recognition of patterns of motion of the light pen to provide a human-oriented drawing capability.

TABLE OF CONTENTS Abstract................. iii 1. Introduction.......................... 1 2. Usage of SELMA and QAS................... 5 3. The Command Exchanger................... 40 4. The Display Structure..................... 61 5. Special Command Exchanger Feature.............69 6. Foreseeable Modifications...................71 References........................73

LIST OF FIGURES Figure 1. Simplified SELMA Structure............. 2 Figure 2. SELMA Phases................... 6 a. Construction Phase................ 6 b. Results Phase................... 6 c. Plot Phase.................. 7 Figure 3. Phase Transitions.................. 8 Figure 4. Element Symbols................... 10 Figure 5. Threshold Pattern for Light Pen Motion Recognition................. 12 Figure 6. Light Pen Motion on Unconnected Element Symbols................... 13 a. Threshold Patterns About a Symbol....... 13 b. Deleting a Symbol................ 13 c. Moving a Symbol................. 13 Figure 7. Drawing a Connection Line............. 15 a. Start of Connection Line at Output Port..... 15 b. After First Corner................ 15 c. After Second Corner............... 16 Figure 8. Examples of Branches and Merges......... 20 a. Random Branch................. 20 b. Priority Branch.................. 20 c. Random Merge.................. 21 d. Priority Merge.................. 21 Figure 9. Threshold Patterns for Generating Branches.... 23 Figure 10. Generation of Branches................ 24 a. Random Branch................. 24 b. Priority Branch................. 24 vii

Figure 11. Threshold Patterns for Generating Merges..... 26 Figure 12. Generation of Merges................ 27 a. Random Merge.................. 27 b. Priority Merge.................. 27 Figure 13. Identification of an Element............. 31 Figure 14. Result Plot for Model in Figure 13......... 33 a. Before Graph is Returned from QAS...... 33 b. After Graph is Returned from QAS....... 33 Figure 15. Modification of a Result Plot............. 35 a. Display of Numerical Values.......... 35 b. Expansion of a Section of the Graph....... 35 Figure 16. Command Format.................. 42 Figure 17. Commands Accepted by QAS........... 43 Figure 18. Commands Accepted by SELMA........... 44 Figure 19. Typical Construction of a Model........... 50 a. Creation of Elements.............. 50 b. Addition of Simple Connections......... 50 c. Generation of Priority Branch......... 51 d. Assignment of Parameters........... 51 Figure 20. An Incomplete Network Diagram........... 64 Figure 21. Display Structure for Diagram in Figure 20...................... 65 Figure 22. Construction Phase Display Structure........ 68 viii

1. Introduction This report discusses the design and use of the Systems Engineering Laboratory's Markovian Analyzer (SELMA) system for a DEC 339 [1] computer display terminal. The purpose of this system is to provide interactive graphic support for the QAS program [2], which was developed concurrently for the IBM 360/67 to analyze a class of Markovian queueing models. SELMA consists of a set of user tasks which are executed in a multiprogrammed fashion under the control of the SEL Executive System [3]. A simplified representation of the tasks which comprise SELMA is shown in Figure 1. Each task is represented by a rectangle, whereas each of the major display structures is represented by a circle. Each directed path on the diagram represents a flow of information from one unit to another. Whenever SELMA is operating, both the command exchanger task, and the keyboard interpreter task are continuously executed. The function of the command exchanger is to communicate with the QAS program in the IBM 360/67 via a 201A dataphone. Because the bandwidth of this dataphone is somewhat limited (2000 bits/sec), all graphic operations are performed locally in the display terminal, and all data sent to QAS or received from QAS are formatted into blocks called commands. Each command represents a macroscopic operation, such as creating or destroying an element, and it contains only the required control information, rather than an excessive 1

2 Keyboard esult TYPE /PLOT C —----- Command LCmQAS Exchanger CREATE User Diagram ~(, ~ Light Pen \\ 1 Interpreter - \ TRANSLATE Push Button Interpreter DEC 339 < - -- IBM 360/6 Figure 1 Simplified SELMA Structure

3 amount of graphic information. The basic function of the keyboard interpreter is to provide a direct path between the user and the command exchanger for certain relatively infrequent operations such as destroying the current model or terminating execution. The other tasks which are shown in Figure 1 are scheduled for execution in response to user inputs. The TYPE and PLOT tasks are scheduled in response to references to light buttons whose function is to request results from QAS. These tasks do not modify the diagram of the current model; they merely instruct the command exchanger to send appropriate commands to QAS. The CREATE task is scheduled in response to a reference to any one of several light buttons, each of which is used to create an element of a particular type. This task must both give the command exchanger information to send to QAS and modify the diagram to include the symbol for the created element. The other functions which are required in order to draw the network are handled by the light pen interpreter task. This task is scheduled in response to a reference to any part of the diagram with the light pen. The function which it performs is determined by the part of the diagram which is referenced, and, in many cases, by recognition of subsequent patterns of light pen motion. This recognition of patterns of light pen motion allows the user to express his intentions in a human-oriented fashion and it eliminates the need to cluttae the screen with other light buttons or to sequence throUgh. a larg set of light button menus. The TRANSLATE task and the push

4 button interpreter task are used to modify the behavior of the light pen interpreter. The TRANSLATE task, which is invoked by a light button, modifies the behavior of the light pen interpreter so that the entire 75"x 75" "paper" on which the diagram is drawn may be moved under the display screen. In this way, a diagram which is larger then the display screen may be drawn. The push button interpreter accepts numerical parameter values from the push buttons and modifies the behavior of the light pen interpreter so that these values may be assigned at various attachment points on the diagram. In the sections which follow, usage of the system, as well as the operations performed by the various tasks, is described. In Section 2. usage of the system is described, together with the operation of the light pen interpreter. The command exchanger is described in detail in Section 3, and, in Section 4, the display structure which is interrogated in order to form many of the commands which are sent to QAS is described. In Section 5, a feature of the command exchanger which should be useful while implementing future modifications of SELMA and/or QAS is described, and some forseeable modifications are discussed in Section 6. A listing of SELMA is supplied as an appendix.

2. Usage of SELMA and QAS Whenever SELMA is to be used in conjunction with QAS, the command to run QAS must be given to the central time-sharing system before SELMA is started. This restriction is necessary because the SELMA command exchanger contains no provision for communicating with the command language interpreter of the time-sharing system. SELMA may then be started by scheduling and running the single task at the location whose address appears on the SELMA binary tape. (This address is not specified here because it is subject to change without notice.) Just after SELMA is started, the light buttons shown in Figure 2a appear on the screen. When these light buttons are present, SELMA is said to be in the construction phase, and the light pen interpreter is adjusted so that a diagram of a queueing model may be drawn or modified. The other two phases indicated in Figure 2 are the results phase (Figure 2b) and the plot phase (Figure 2c). The results phase allows the user to request results, whereas the plot phase displays a graph of the last requested result and allows the user to expand sections of the graph and to request labels for points of interest on the graph. Transitions between SELMA phases are depicted by Figure 3. In this figure, each phase is represented by a circle, and the light buttons which produce transitions between phases are indicated by. 5

6 a. Construction Phase b. Results Phase Figure 2 SELMA Phases

7 c. Plot Phase Figure 2 SELMA Phases (cont.)

8 Construction Phase RESULTS /CONSTRUCT PLOT \ I Results Plot \ Phase Phase ~~\ / ^ ~DIAGRAM\ Figure 3 Phase Transitions

9 labels on directed oaths between phases. SELMA is placed in the construction phase when it is started so that the user may begin the construction of a new model. Before any other steps in the construction can be performed, at least one element must be created. An element is created by selecting the light button in the upper right-hand corner of the screen (Figure 2a) which denotes its type. A tracking cross appears with the element so that the element may be moved to any desired position on the screen. The various elements which may be created are shown in Figure 4. The interpretation of each of these elements has been described previously [4, 5j. Each element symbol includes one or more ports, i.e., attachment points for connections to other elements. In addition, an element symbol may have a body and one or more numerical parameters. Since no value is assumed for the parameter of an element when the element is created, the position of each parameter in a newly created symbol is indicated by a dot, called a parameter dot. The creation of new symbols is the only operation required for the construction of a model which requires the use of light buttons. All other operations are performed with the aid of the light pen interpreter. As mentioned in the introduction, the action to be taken by the light pen interpreter is determined from the part of the diagram which is referenced and often from a recognition of subsequent patterns of motion of the light pen. The part of the diagram which is

10 Input Port Output Port Body Parameter Dot QUEUE Input Port Output Port Body Parameter Dot SERVER Body Output Port Input Port SOURCE EXIT SOURCE EXIT Figure 4 Element Symbols

11 referenced is easily determined from the display structure (Section 4) through the use of subroutines available in the executive system. However, since the executive system provides no facility for recognizing patterns of light pen motion, this latter determination is made completely within SELMA. The method employed by SELMA to recognize patterns of light pen motion may be described with the aid of Figure 5. Whenever a light pen reference is made to a part of the diagram which requires that subsequent patterns of motion of the light pen be recognized, tracking is started at the coordinates of the light pen, and one or more threshold patterns, i.e., patterns of imaginary lines of the form shown in Figure 5, are placed on the screen. The number of patterns and the coordinates and size of each pattern are determined by the part of the diagram which is referenced. (The size of each pattern is specified by a parameter d.) Whenever an element symbol is referenced with the light pen while SELMA is in the construction phase (and the light pen interpreter has not been modified by the TRANSLATE task or the push button interpreter), two threshold patterns are placed at the coordinates of the symbol as shown in Figure 6a, and a tracking cross is placed at the coordinates of the light pen. If the symbol has connected ports, the fragment of the diagram which consists of this symbol and all connections and symbols associated with it are moved with the tracking cross. Otherwise, the symbol may be either moved or deleted,

12 I I Coordinates of pattern is~~~~~~~~~~~ - I /I A I I 1 I I Id/2 ---- d 2Figure 5 Threshold Pattern for Light Pen Motion Recognition

13 MI M IM M _ IM__ -r —- r — —' MI I M I I!Ai I I ___ _L_ _ _ ___ \ I I' I I 4i I b. Deleting a Symbol c. Moving a Symbol Figure 6 Light Pen Motion on Unconnected Element Symbols

14 depending on subsequent motion of the light pen. In Figure 6a, the significant regions of the screen which are bounded by the lines of the threshold pattern and/or the edge of the screen are labeled A, B, or M. The decision to delete or move the symbol is made by recognizing transitions among these regions. The symbol is deleted if the pen is stroked vertically across the symbol as shown in Figure 6b. This motion is recognized as a sequence of five transitions between the A and B regions without entering an M region. The symbol is moved with the light pen if the light pen is moved into a M region. This latter motion is depicted in Figure oc. In the above discussion of deleting and moving symbols, a reference to a symbol with the light pen was assumed to be a reference to any part of the symbol other than an output port. When an unconnected output port is referenced on any symbol (regardless of whether or not the symbol has connected ports), the drawing of a connection line is begun as shown in Figure 7a. A threshold pattern is established at the coordinates of the output port. The connection line is continuously updated as shown until the light pen is moved into either a U or D region, at which time a new vertical segment is added to the connection line (Figure 7b). A smaller threshold pattern is then established at the coordinates of the output port. The original threshold pattern is moved to the newly created corner of the connection line. If the light pen is now moved into the E region, the vertical segment of the connection line is deleted, the smaller threshold pattern is deleted,

15 I Connection line | — I /(x coordinate same _ _ _ L as x tracking coordinate) I_' | | I ^<____ Tracking cross _! d Z 1 inch Dr~- D D a. Start of Connection Line at Output Port _I _ I I| 1^ nc 7 r i. El r i -iutt- 7...Tracking Cross Connection line Tracking Cross (y coordinate same as y tracking coordinate) b. After First Corner Figure 7 Drawing a Connection Line

16 t I I I I —-- [ Tracking I I | Cross (IU U tI D + E t I I D__ D Connection line (x coordinate same as x tracking coordinate) c. After Second Corner Figure 7 Drawing a Connection Line (Cont.)

17 the larger threshold pattern is moved to the coordinates of the output port, and action proceeds again as depicted in Figure 7a. If the light pen is moved into an L or R region, a second horizontal segment is added to the connection line as shown in Figure 7c. The small threshold pattern is moved to the next to last corner, and the larger threshold pattern is moved to the newly created corner. Again, if the light pen is moved into the E region, the last segment of the connection line is deleted and action proceeds according to Figure 7b. If the light pen is moved into a U or D region, a second vertical segment is added to the connection line. The operation proceeds in this manner until the drawing of the connection line is terminated by either of the following events: 1. The connection line is deleted by loss of tracking, 2. The connection line is used to form or modify a connection. Connection lines may be used to form the following five types of connections: 1. Simple connection, 2. Random branch, 3. Priority branch, 4. Random merge, and 5. Priority merge. The first of these, the simple connection, associates an output port of t w an element with an input ort of either the same or another element. An item flows from the output port through the connection to the input port whenever an item is available at the output port and the input port

18 can accept it. A branch associates one output port with several input ports. Whenever an item is available at the output port and atleast one input port can accept it, it flows through the branch to one of the input ports which can accept it. If the branch is a random branch, no input port can accept the item unless all input ports associated with the branch can accept it. Whenever all of these ports can accept the item, one of them is selected randomly in accordance with probabilities assigned to each of them. If the branch is a priority branch, an available item flows through the branch if any input port can accept it, and priorities assigned to the input ports determine which port receives the item. A merge associates several output ports with one input port. Whenever the input port can accept an item and an item becomes available at at least one output port, one of the available items flows through the merge to the input port. If the merge is a random merge, an item is not available at an output port unless items are available at all output ports which are associated with the branch. Whenever an item is available at all of these output ports and the input port can accept an item, one of the available items is selected randomly in accordance with probabilities assigned to each output port. If the merge is a priority merge, an available item flows through the merge if the input port can accept it, and priorities assigned to each output port determine which item is selected. For both branches and merges, selection of ports on the basis of probability is indicated in a SELMA diagram by a dot (.), and selection

19 of ports on the basis of priority is indicated by a diamond ( <>). Some examples of branches and merges which are drawn with these symbols are shown in Figure 8. (The arrowheads on each branch are actually connected input ports, which differ in appearance from unconnected input ports. ) In Figure 8a, whenever the server has finished servicing an item and neither of the queues is full, the item from the server is placed in the top queue with probability 0. 3 or in the bottom queue with probability 0. 7. The server in Figure 8b cannot hold an item after it has been serviced, for there is always an input port which can accept it. If the top queue is not full and the server finishes servicing an item, the item is placed in the top queue. Otherwise, if the top queue is full and the bottom queue is not, the item is placed in the bottom queue. If both queues are full, the item leaves the system through the sink. In Figure 8c, whenever the server is empty and no queue is empty, an item is placed in the server from the top queue with probability 0. 2, from the middle queue with probability 0. 5, or from the bottom queue with probability 0. 3. Whenever the right-hand queue in Figure 8d is not full, an item is placed in it from the bottom left-hand queue if the bottom left-hand queue is not empty, or from the top left-hand queue if this queue is not empty and the bottom left-hand queue is empty. All connections which are drawn with SELMA are originally generated as simple connections, which later may be extended to form branches or merges. A simple connection is drawn by starting a connection line at an unconnected output port and terminating it at an unconnected

20 a. Random Branch b. Priority Branch Figure 8 Examples of Branches and Merges

21 c. Random Merge d. Priority Merge Figure 8 (Cont.)

22 input port by passing the light pen over the input port while drawing the connection line. SELMA will then stop tracking the light pen and will convert the connection line to a simple connection. Whenever a simple connection is to be converted to a branch, the type of branch (i. e., random or priority) must be established. This is accomplished by recognizing a pattern of light pen motion. In addition, a simple connection may be deleted by stroking vertically across it in the same manner that one would use to delete an element symbol. The threshold patterns which are involved are shown in Figure 9. When the light pen is aimed at a connection, a dot appears on the connection at the coordinates at which the light pen was detected. If the connection is a simple connection and the light pen is then moved into an M region without entering a W, an X, a Y, and a Z region or moving back and forth five times between A and B regions, a connection line is started at this point, and the dot remains to indicate that the connection is to be converted to a random branch. The conversion is performed when the connection line is completed by passing the pen over an unconnected input port. This operation is shown in Figure 1Oa. If the light pen enters a W, an X, a Y, and a Z region without entering an M region or moving back and forth five times between A and B regions, the dot is converted to a diamond to indicate that the connection is to be converted to a priority branch. When the light pen is subsequently moved into an M region, a connection line is started in the center of the diamond. This operation is indicated in Figure lOb. If the light pen is moved back and

23 I- I M - MJ KA __ __ -' M ______ Ml IA A,W IA I M M _ _ _ _ IM 7~ _ S I x I{ Y IY M dx l/4in d02/5in MI i M/. /V/ I BI/BZ I2 in I I M M IM IM IM M Mw Coordinates at which light pen was detected on simple connection Figure 9 Threshold Patterns for Generating Branches

24 a. Random Branch I l if i (3) b. Priority Branch Figure 10 Generation of Branches

25 forth five times between A and B regions without entering an M region or a W, an X, a Y, and a Z region, the connection is deleted. This action for deleting simple connections is the same as that for deleting symbols, and it applies to branches and merges as well. A merge, like a branch, is also formed by adding a connection line to a simple connection. However, the connection line to be added is drawn from an output port to the simple connection, rather than from the simple connection to an input port. The type of merge (i.e., random or priority) is determined by recognizing light pen motion as the connection line is terminated. The thresholds involved in this operation are shown in Figure 11. If the light pen enters the W, X, Y, and, Z regions without entering an M region, tracking of the light pen is terminated by SELMA, and a priority merge is formed. If the user removes the light pen near the simple connection without entering an M region, a random merge is formed. These operations are shown in Figure 12. If the light pen is moved into an M region, the threshold pattern is removed, and drawing of the connection line continues as through no simple connection had been encountered. Once a branch or a merge is formed, more element ports may be associated with it by drawing additional connection lines. A connection line t to be added to a branch is drawn from the branch to an input port, whereas a connection line to be added to a merge is drawn from an output port to the merge. No threshold pattern is required to determine whether a dot or diamond is to be placed at the intersection of the new

26 II I I I // I I _M/ __M —. M IM,M M \I I M I I I IWI — 4- 1 I I Figure 11 Threshold Patterns for Generating Merges MI M.M FM.M

27 I (1) _ (2) Light pen removed here (3) a. Random Merge'it' -. -—; l i (1) (2) (3) b. Priority Merge Figure 12 Generation of Merges

28 connection line with the branch or merge, since the type of branch or merge is already established. The values of the probabilities and priorities which are associated with branches and merges, as well as the values of the parameters which are associated with certain symbols, are assigned through the use of push buttons. Push buttons 0 through 9 represent the decimal digits 0 through 9, respectively. Push button 10 represents a decimal point, and push button 11 is used to delete erroneous parameter values. A parameter value is specified by supplying a sequence of from one to four characters. The value is displayed in the lower right-hand corner of the screen as it is inputted, and the light pen interpreter is modified so that all parameter dots and parameter values, but no other parts of the diagram, are sensitive to the light pen. If the light pen is now aimed at a parameter dot or parameter value, the parameter dot or parameter value is replaced with the new parameter value which was obtained from the push buttons, and the light pen interpreter is restored to its original state. Two modes of parameter values may be assigned: integer and real. The function of each parameter value in the diagram determines its mode, e. g., a queue length must be an integer, a probability must be a real parameter, etc. SELMA refuses to accept a parameter value of the wrong mode. Occasionally, a model will be so complex that its diagram will not fit onto the display screen. For this reason, the diagram is considered to be drawn on a 75"x 75" piece of "paper" which may be moved to

29 various positions under the screen. The TRANSLATE light button is provided in the lower left-hand corner of the screen in the construction phase to provide this function. When this light button is referenced with the light pen, the light pen interpreter is put into a translate mode, and the TRANSLATE light button is modified to indicate this fact. A subsequent reference to this light button will restore the light pen interpreter and the TRANSLATE light button to their original states. (The creation of a new element will also produce this effect.) When the light pen interpreter is in the translate mode, a subsequent reference to a point on the diagram causes tracking to be started and the corresponding point on the "paper" to be affixed to the tracking cross. The "paper" may then be moved by moving the light pen. When a diagram is thought to be complete, SELMA may be put into the results phase (Figure 2b) via a reference to the RESULTS light button. When SELMA is in this phase, the user may request a steady-state probability density function either for any single element or for the entire model. The light pen interpreter is modified when this phase is entered so that the only function which can be performed by referencing the diagram without further modifying the light pen interpreter (via the TRANSLATE light button or by assignment of parameter values) is the identification of elements. When a density function is to be requested for a particular element, that element may be identified by referencing it with the light pen. A box of dotted lines is placed around the element and a one-character alphabetic

30 name is assigned to the element as shown in Figure 13. If a different element is subsequently selected before the result request is completed by referencing either the PLOT or TYPE light button (described below), the box is moved to that element, and the name associated with the box is changed to the name of the new element. A reference to the box with the light pen will remove it from the diagram. When no box appears around any element, the entire model, rather than any particular element, is identified. The probability density function for the item (i. e., either the entire model or a particular element) identified in this manner may be obtained in either of two forms: (1) as a histogram on the display screen, or (2) as a table on the teletype. A histogram is obtained through a reference to the PLOT light button, and a typed table is obtained through a reference to the TYPE light button. When a result is requested, it will not be returned if the diagram is not complete or if contradictory parameter values exist. The diagram is not complete under either of the following conditions: (1) At least one port in the diagram is not connected, or (2) At least one parameter dot remains on the diagram. Contradictory parameter values exist if either of the following conditions is true: (1) Two equal priorities are assigned to one priority branch or merge, or

31 Figure 13 Identification of an Element

32 (2) The probabilities assigned to a random branch or merge do not sum to 1. 0. If any of these four conditions is true, SELMA is forced into the construction phase, a large flashing arrow is placed on the screen to indicate the location of the error, and an appropriate comment is typed on the teletype. The flashing arrow disappears from the screen when the error is corrected. However, if the error involves contradictory parameter values, the arrow may not point to the value which the user decides to change to correct the problem. In this event, the parameter which is being indicated should be reassigned the same value to delete the arrow and thus avoid confusion on subsequent errors. If the result which was requested was a histogram and none of the above errors is present in the diagram, SELMA enters the plot phase (Figure 2c). The diagram is removed from the screen, and axes for the graph are displayed, together with a label for the abscissa. For the example in Figure 13, this result is shown in Figure 14b. Only the maximum and minimum values of the abscissa and ordinate which could be represented without scaling the graph are represented on the final plot. However, the user may request numerical values from QAS for any particular bar in the histogram by pointing to that bar with the light pen. (Subsequent references to other bars will erase previous values so that only the last one is displayed.) The result of pointing to the fourth bar in Figure 14b is shown in Figure 15a.

33 a. Before Graph Is Returned from QAS b. After Graph Is Returned from QAS Figure 14 Result Plot For Model in Figure 13

34 In addition to facility for obtaining numerical values for points on the graph, facility is also provided for looking at various sections of the graph. This facility is necessary because a maximum of 50 abscissa values may appear in one graph (limited by local storage and resolution of the display) and some results require more than 50 abscissa values to plot in their entirety. It is also a convenience, since detailed examination of a graph with a wide range of ordinate values or a large number of abscissa values is more difficult without it. Various sections of the graph may be displayed through the use of the RIGHT, LEFT, and DETAIL light buttons. If the RIGHT light button is referenced, and then the bar at a particular abscissa is referenced, the plot is modified so that that abscissa, together with all abscissas of greater value (up to a total of 50 abscissa values) is plotted. In similar manner, a plot involving an abscissa, together with all abscissas of smaller value (up to a total of 50 values) may be obtained through the use of the LEFT light button. For example, the graph obtained by applying the LEFT light button to the abscissa 2 in Figure 15a is shown in Figure 15b. The DETAIL light allows the user to specify the maximum and minimum abscissas he wishes to plot. After the DETAIL light button is referenced, these two abscissas are specified by referencing the two bars of the graph which correspond to them. For all of these operations, the fact that a particular light button has been selected is indicated by the removal of all other light buttons from the screen until the new graph is completely specified.

35 a. Display of Numerical Values Figure 15 Modifications of a Result Plot

36 As indicated by the above discussion, all of the very common operations which are involved in the specification of a queueing model, with the exception of parameter value input, are performed with the light pen only. This type of operation was chosen because the user can usually generate faster input with the light pen than with any other input device. (Input of parameter values with the light pen was found to be awkward, so push buttons were used for this purpose.) However, there are some operations which are performed very infrequently, and, should they be performed accidentally, compensating for their effect would be difficult. In particular, destroying the current model in order to begin a new model, and terminating SELMA are such operations. These operations are performed through the use of the keyboard, which is a relatively inaccessable device to the user. In this way, accidental performance of these operations is less likely than it would be if these operations were invoked with the light pen. All operations performed from the keyboard are initiated by commands which are invoked by a single character. The keyboard interpreter responds to each command by typing a word or phrase which is a more complete description of the command. A command may be deleted before it is effective by typing a rubout in place of any subsequent character. The command which destroys the current model in preparation for beginning a new one is the following: CLEAR? OK

37 (The underlined characters are those typed by the user.) Although the character "C" would be sufficient for specifying this operation, a confirmation (accomplished by typing "O") is required to help avoid accidental performance of this operation. The fact that the confirmation is required is indicated by the question mark (?). If the user wishes not to confirm the operation, he may type "N" for "NO". Similarly, the following command, which terminates SELMA (and QAS), requires confirmation: ESCAPE? OK Two other keyboard commands which represent infrequent operations which cannot easily be reversed once they are performed are saving the current model on a file at the IBM 360/67 and retrieving a queueing model from a file. These two commands are the following: SAVE ON FILE GET FILE Each command is completed by typing a file name,or a file name followed by a space, in turn followed by the word "ALL". (The command is terminated by a carriage-return typed on the keyboard.) In the former case, any results which have been computed are not saved, but in the latter case they are saved. The user is prevented from performing any other operations while a model is being saved or retrieved. Retrieval of a model effects a "CLEAR" command before the model is actually retrieved.

38 Although saving or retrieving a model is costly to perform accidentally, no provision for explicit confirmation is provided. The file name which is required to complete each command serves as a confirmation. If an illegal file name is specified, a comment to this effect will be typed, and QAS will ignore the command. Some users have found the keyboard, rather than the push buttons, to be a more suitable device for inputting parameter values. For this reason, a command to substitute the teletype for the push buttons and a command to specify a parameter value from the keyboard are provided. The device from which parameter values are to be obtained is specified by the command PUSH BUTTONS VALUES FROM( i TELETYPE (The default device is the push buttons. ) While the teletype is the input device for parameter values, the following command may be given to specify a parameter value: PARAME TER: This command is completed by typing a number which consists of from one to eight characters, followed by a carriage return. All of the characters are sent to QAS, but only the first four are displayed if more than four are specified. Real values are restricted to be less than or equal to 999.9999 to avoid misrepresentation of the decimal point on the display. Two other keyboard commands are provided for purposes of debugging SELMA and/or CAS. However, these commands are not

39 normally available to the user, since they deal with dataphone commands between SELMA and QAS. They are described in Section 5, following a detailed description of the command exchanger in Section 3 and a description of the data structure used to represent the topology of the network in Section 4.

3. The Command Exchanger In order to be effective, the frequently used operations described in the previous section must provide rapid response to user inputs. If all programmed operations were performed in sequence, the low data rate of the dataphone would pose a threat to this response time in that the transmission of commands to inform QAS of certain inputs might delay responses to subsequent inputs. For this reason, the response..task for each user input which- requires. communication with QAS merely places the commands to be sent to QAS into a buffer. A separate task, the command exchanger, then reads commands from this buffer and sends them to QAS. Since the command exchanger and response tasks for user inputs are executed asynchronously, the rate of dataphone transmission does not seriously affect the rate of response to user inputs. Since the dataphone under consideration is a half-duplex dataphone, SELMA and CAS must not transmit simultaneously. For this reason, SELMA and QAS alternately transmit records, with QAS sending the first record. Since OAS sends the first record, QAS need not be executing before SELMA is started. Since a record directed to the SELMA command exchanger is not acknowledged by the SEL executive system until the command exchanger has removed it from the dataphone input buffer, SELMA need not be executing before execution of QAS begins. Each dataphone record which is sent from SELMA to QAS or 40

41 from QAS to SELMA contains exactly one command. The general format of a command is shown in Figure 16. The command is delimited by bytes whose value is FF16, and all other bytes in the command have values less than FF16. (Although the beginning and end of the record are sufficient to delimit the command, the two delimiting bytes were included in the format to facilitate a possible future program modification to permit transmission of multiple commands per record.) The first byte after the initial delimiter specifies. the "phase" of the command, and the byte which follows it identifies the command within that phase. (The command phase is not related to the phase of SELMA.) The combination of the phase and command bytes identifies the command, and, consequently, specifies the format of the data bytes. The formats of the commands which are accepted by QAS are indicated by Figure 17, and the formats of the commands which are accepted by SELMA are indicated by Figure 18. The abbreviations for various groups of data bytes are interpreted as follows: CN Connection name. A number between 129 and 254 which identifies a particular connection. (1 byte) CPN Connection port number. A number between 1 and 254 which specifies a particular port of the connection specified by an associated connection name. (1 byte) CT Connection type. A number between 129 and 254 which specifies the type of connection (e. g., simple

42 Initial delimiter Final delimiter FF1..... \.... Phase byte Command byte Data bytes (16o-FE16) ( 016-FE16) (0016-FE16) Figure 16 Command Format

43 Phase Command Byte Byte Data Byte s Function 00 00 - Null 00 01 -Patch-upl 00 02 -Call system 00 03 -Call error' 00 04 -Call MTS1 00 05 - nitialize 00 06 -Wipe out QAS output buffer1 01 00 EN or CN, ET or CT, GPV Create element 01 01 EN or CN Destroy element or connection 01 02 EN or CN, PN, PV Assign parameter value 01 03 CN, CPN, EN, EPN Connect 01 04 EN, EPN Disconnect 01 05 EN or CN, GPN, GPV Alter generation parameter value 02 00 IL, PV2 Compile and solve 03 00 EN3 Plot results 03 01 SN, SC Modify plot 03 02 SN Get value for graph 03 03 EN3 Type results 04 00 FN Begin saving model 04 01 - Terminate saving model 04 02 FN Retrieve model from file 04 03 SELMA phase 02 command Save command to be returned Figure 17 Commands Accepted by QAS This command is not currently generated by SELMA. 2Parameter value specifies convergence factor (see OAS report). An element name 00 specifies the entire model.

44 Phase Command Byte Byte Data Byte s Function 00 00 -Null 00 01 (See text) Patch-up 00 02 - End of file 01 00 XC,T,T,T,T,T Setupgraph 01 01 YC,YC,...,YC Plot values 01 02 T, T Display single value 02 00 YC,XC rreate fragment 02 01 YC,XC, EN, 00, LET Create element 02 01 YC, XC, CN, 00,WC Create connection 02 02 OW, DW,..., DW Load connection segment 02 03 - nsert connection leaf 02 04 YC,XC,PV3 Assign parameter 02 05 EN, EPN Connect 03 00 Send model to be saved Figure 18 Commands Accepted by SELMA Distance between abscissas, minimum x label, maximum x label, minimum y label, maximum y label, y axis label. 2Ordinate label. 3Missing parameter value indicates unassigned parameter. 4Abscissa value, ordinate value.

45 connection, random branch or merge, priority branch or merge). (1 byte) DW Display file word. Two bytes, each of which has a value from 0 through 127. These two bytes are decoded to form an 18-bit word to be loaded into core by SELMA according to the following scheme: (1) The low-order 7 bits of each byte are concatenated to form a 14-bit number. (2) The two high-order bits of the 14-bit number are placed into positions 0 and 1 of the 18-bit word, and the remaining 12 bits are placed into positions 6-17 of the 18-bit word. Positions 2-5 of the 18-bit word are set to zero. EN Element name. A number between 1 and 127 which identifies a particular element. (1 byte) EPN Element port number. A number between 1 and 254 which specifies a particular port of the element specified by an associated element name. (1 byte) ET Element type. A number between 1 and 127 which specifies the type of element (e.g., queue, server, or source or exit). (1 byte) FN File name. A sequence of bytes whose values are 6-bit character codes [3 p. 17] which represent a file name. (1 to 16 bytes)

46 GPN Generation parameter number. A number between 1 and 254 which identifies a particular generation parameter (i. e., parameter which modifies an element or connection type). (1 byte) GPV Generation parameter value. A number between 1 and 254 which represents the value of a generation parameter. (1 byte) IL Iteration limit. Two bytes, each of which has a value between 0 and 127. A number between 1 and 16, 383 which represents the maximum number of iterations which will be performed whenever a model is solved is obtained by concatenating the low-order 7 bits of the two bytes. LET Local element type. A number between 1 and 254 which identifies a graphical symbol for an element type. This number is not necessarily the same as the corresponding element type, for several graphical symbols may be associated with one element type (e. g., source and exit represent the same element type). (1 byte) PN Parameter number. A number between 1 and 254 which identifies a parameter for an element or connection. (1 byte)

47 PV Parameter value. A sequence of bytes whose values are 6-bit character codes which represent a nonnegative real or integer number. (1 to 8 bytes) SC State count. A number between 1 and 254 which represents the number of points to be plotted on a graph by QAS. Fifty points are plotted if this number is either zero or greater than 50. (1 byte) SN State number. A number between 0 and 16, 383 which represents an abscissa on a graph plotted by QAS. This number is coded in the same way that an iteration limit (IL) is coded. (2 bytes) T Text item. A sequence of bytes, the first of which has a value which is the number of bytes which follow it, and the remainder of which are 6-bit character codes. (2-16 bytes) WC Word count. A number between 1 and 16, 383 which represents the size of storage block required to load a connection leaf when retrieving a model from a file. This number is coded in the same way that an iteration limit (IL) is coded. (2 bytes) XC An abscissa between -8192 and 8191. This coordinate is coded in the same way that an iteration limit (IL) is coded. However, the 14-bit number represented is interpreted as a two's complement

48 number, rather than as an unsigned positive number. (2 bytes) YC An ordinate between -8192 and 8191. This number is coded in the same way an abscissa is coded. (2 bytes) Several of the commands described in Figure 17 and Figure 18 affect the exchange of other commands. The null command (which may be sent in either direction) is provided so that one party can allow the other to transmit without directing it to perform any other function. However, if each party were to send null commands whenever it had nothing else to send, the maximum dataphone traffic would occur when both SELMA and QAS were idle. Since all external inputs are directed to SELMA, rather than to both SELMA and QAS, this redundant dataphone traffic is eliminated by having SELMA not send a null command unless it expects a non-null reply from QAS. In this way, no communication takes place when both parties are idle, and SELMA is the next party to transmit whenever both parties are idle. The patch-up command which is generated by QAS is transmitted to SELMA in response to receiving a command from SELMA which cannot be performed. The data bytes for the patch-up command form a command (except for delimiter bytes) to be returned to QAS to replace the offensive command. Some of the data bytes for the replacement command are set to zero or are not present to indicate

49 to SELMA that these are to be filled in before the replacement command is sent. SELMA may then either complete the replacement command and send it to QAS, or it may send an entirely different command, as though it had never sent the illegal command. Currently, SELMA responds to all patch-up commands by informing the user of the error which has occurred, and not responding to QAS. The user is then free to correct the error in any way he desires. In order to prevent one such error from being diagnosed as a series of errors, the user is prevented from proceeding whenever his activity generates a command to be sent to QAS which could result in a patch-up. (Such a command is generated whenever a model is saved or retrieved or whenever a result is requested.) This is accomplished by setting an "end-of-file switch" in SELMA and disabling all inputs until it is reset. This switch is then reset by either an end-of-file command from QAS (indicating the end of a successful series of transmissions) or by a patch-up command (indicating that the operation could not be performed). As an example of a typical exchange of commands between SELMA and QAS, consider the operations depicted by Figure 19. Before any of these operations are performed, SELMA and QAS are started. Since QAS must send the first command, but it has no operation to perform (since SELMA has not informed it of any input), QAS initially sends a null command to SELMA. SELMA then initializes QAS, and

50 a. Creation of Elements b. Addition of Simple Connections Figure 19 Typical Construction of a Model

51 c. Generation of Priority Branch d. Assignment of Parameters Figure 19 (Cont.)

52 QAS replies with a second null command. This exchange of commands may be depicted (in hexadecimal notation) as follows: QAS: 0000 (null) SELMA: 0005 (initialize QAS) QAS: 0000 (null) (The delimiter bytes are not shown.) Then, when the elements shown in Figure 19a are created, the following commands are exchanged: SELMA: 01000103 (create source) QAS: 0000 SELMA: 01000202 (create server) QAS: 0000 SELMA: 01000301 (create queue) QAS: 0000 SELMA: 01000402 (create server) QAS: 0000 SELMA: 01000503 (create exit) QAS: 0000 SELMA: 01000603 (create exit) QAS: 0000 Each of the commands transmitted by SELMA completely specifies the creation of an element. However, three commands are required to completely specify the creation of each of the simple connections in Figure 19b: one to create the connection, and one to connect each

53 of its ports to element ports. The commands involved when the simple connections in Figure 19b are created are the following: SELMA: 01008181 (create connection) QAS: 0000 SELMA: 010381010101 (connect) QAS: 0000 SELMA: 010381020201 (connect) QAS: 0000 SELMA: 01008281 (create connection) QAS: 0000 SELMA: 010382010202 (connect) QAS: 0000 SELMA: 010382020301 (connect) QAS: 0000 SELMA: 01008381 (create connection) QAS: 0000 SELMA: 010383010302 (connect) QAS: 0000 SELMA: 010383020401 (connect) QAS: 0000 SELMA: 01008481 (create connection) QAS: 0000 SELMA: 010384010402 (connect) QAS: 0000

54 SELMA: 010384020501 (connect) QAS: 0000 For purposes of illustration, assume that the user now indicates that he wants a plot of the probability distribution for the queue in Figure 19b. Clearly, the diagram in Figure 19b is incomplete, so a patch-up command will be returned by QAS. Since QAS checks the structure of the model before it checks its parameters, the patch-up command will refer to the unconnected exit. The following exchange of commands results from the user's attempt to obtain this solution: SELMA: 030003 (plot results) QAS: 0001010300000601 (patch-up) The user, upon being requested via a flashing arrow on the screen and a teletype comment to connect the unconnected port, then draws the priority branch shown in Figure 19c. Since the former simple connection must be replaced with a new branch connection, the following commands are exchanged: SELMA: 01040202 (disconnect) QAS: 0000 SELMA: 01040301 (disconnect) QAS: 0000 SELMA: 010182 (destroy connection) QAS: 0000 SELMA: 0100828202 (create priority branch) QAS: 0000

55 SELMA: 010382010202 (connect) QAS: 0000 SELMA: 010382020301 (connect) QAS: 0000 SELMA: 010382030601 (connect) QAS: 0000 Now that the request for correction has been satisfied, the user again requests a probability distribution for the queue. However, the diagram is still not complete, for not all (in fact, none) of the parameter values have been assigned. QAS complains about the parameter in the server which receives inputs from the source. The following commands are exchanged: SELMA: 030003 (plot results) QAS: 000101020201 (patch-up) In response to this second complaint, the user assigns parameter values as shown in Figure 19d. The commands involved are the following: SELMA: 010202010131 (assign 1.) QAS: 0000 SELMA: 0102820101 (assign 1) QAS: 0000 SELMA: 0102820202 (assign 2) QAS: 0000 SELMA: 0102030105 (assign 5)

56 QAS: 0000 SELMA: 01020401013102 (assign 1.2) QAS: 0000 The diagram is now complete, and the user once again requests a probability distribution for the queue. This time, a plot is returned. The commands which are involved are the following: SELMA: 030003 (plot results) QAS: 0100100001000105030031000231 (set up graph) 050B19 1B180BOAOB1215121D22 SELMA: 0000 (null) QAS: 0101510D1E 64195B153D1178037C (results) SELMA: 0000 (null) QAS: 0002 (end of file) Now that a solution has been obtained, the user decides to save both the model and the results of solution on the file S, and then terminate SELMA and QAS with the ESCAPE command. The following commands are exchanged as a result of these operations: SELMA: 04001C3EOA1515 (begin saving of file S) QAS: 0300 (send model to be saved) SELMA: 04030200000C7F45 (save) QAS: OOCO (null) SELMA: 040302017F66002E060004 etc. QAS: 0000 SELMA: 0403020100000053040002

57 QAS: 0000 SELMA: 04030201000000 53040002 QAS: 0000 SELMA: 040302047F7C7F74013102 QAS: 0000 SELMA: 0403020100000036030001 QAS: 0000 SELMA: 040302047F7C7F7C05 QA S: 0000 SELMA: 040302010000006 BO 50004 QAS: 0000 SELMA: 0403020100000018020002 QAS: 0000 SELMA: 040302047F7C7F780131 QAS: 0000 SELMA: 0403020100000000010003 QAS: 0000 SELMA: 04030201000000 1F8200002 1 QA S: 0000 SE LMA: 04030202 4 50222402 4 5108001008246100081418 1C 181C0 8140 800382 4 5110000000100000001868 0000100000344068083400001808245110000000 10000048400018482CO0 QAS: 0000 SELMA: 04030203

58 QAS: 0000 SELMA: 02040003002301 QAS: 0000 SELMA: 040302047F1C001802 QAS: 0000 SELMA: 040302050202 QAS: 0000 SELMA: 040302050301 QAS: 0000 SELMA: 040302050601 QAS: 0000 SELMA: 04030201000000 5A8400000A QAS: 0000 SELMA: 0403020201012240245110000000100000444000 18442C00 QAS: 0000 SELMA: 04030203 QAS: 0000 SELMA: 040302050402 QAS: 0000 SELMA: 040302050501 QAS: 0000 SELMA: 040302010000003D8300000A QAS: 0000

59 SELMA: 04030202010122402 4 5110000000100000444 00018442COO QAS: 0000 SELMA: 04030203 QAS: 0000 SELMA: 040302050302 QAS: 0000 SELMA: 040302050401 QAS: 0000 SELMA: 0403020100000002 8100000A QAS: 0000 SELMA: 0403020201012240245110000000100000444 00018442COO QAS: 0000 SELMA: 04030203 QAS: 0000 SELMA: 040302050101 QAS: 0000 SELMA: 040302050201 QAS: 0000 SELMA: 0401 (terminate saving) QAS: 0000 SELMA: 0002 (call system) The command which terminates the save operation (0401 from SELMA) resets the end-of-file switch in SELMA which is set by the initial save

60 command (0400 from SELMA). Consequently, no end-of-file command (0002 from QAS) is needed from QAS. This special condition is consistent with the design of QAS, for QAS produces no non-null output and therefore does not generate the end-of-file command. The reader should note that some of the commands which are saved when a model is saved on a file do not contain all of the information necessary to reconstruct the model. For example, the "assign parameter" command (0204) which is saved does not specify to which element it refers or which parameter of that element is being assigned. Such information however, may be derived from the order in which commands are saved in the file. The process of obtaining this information is described in the following section, following a description of the display structure which is used to represent the topology of the network.

4. The Display Structure In order that SELMA be able to generate the commands described in the previous section or to interpret those received from QAS, the topology of the network diagram must be known to SELMA at all stages of its construction. This topology is stored in a display structure consisting of levels and leaves maintained by the executive system [3 p. 35]. The arrangement of these levels and leaves for this application may be described in terms of sets. A set of element symbols which are connected to each other, together with the symbols for the connections which connect them, is treated as a unit, called a fragment. A completed diagram of a queueing network consists of exactly one fragment. However, the diagram may consist of several fragments before it has been completed. The diagram, then, is considered to be a set of fragments, or D= {Fi}.th where D denotes the diagram and F. denotes the ih fragment in the 1 diagram. Each fragment, in turn, consists of symbols for elements and connections, or Fi= Sij where S.. denotes the j symbol in the ith fragment. The reader should note that, for topological purposes, the symbol for an element is no different than a symbol for a connection. 61

62 Each symbol is defined by a 3-tuple which consists of a leaf, a set of ports, and a set of parameters, i. e., Sij = (.ij P.ij Qij), where Lij is the leaf which draws the symbol Sij (except for its ports and parameters), Pij is an ordered set of ports, and Qij is an ordered set of parameters. If Sij is the symbol for an element,.ij represents a leaf which may be used to help define other element symbols, whereas, if S.. is the symbol for a connection, i.. is used to help define only S... The reason for this condition is that all elements of the same type have identical appearance, whereas connections of the same type almost always do not have the same appearance. The set of ports for the symbol Sij may be represented by the m..-tuple 12 ij 9n.. Pij= =(Pij Pij,Pj ) and the set of parameters for S.. may be represented by the n. -tuple 1 2 nij Since every element and connection must have at least one port, mij is a positive integer, whereas, since some elements and connections have no parameters, n.. is a non-negative integer. Even if n.. = 0, Qij is considered to exist, but with dimension zero. The only items in the topology which may be used in more than one place in the diagram are the leaves which draw element symbols and ports. Multiple uses of leaves which draw element symbols have

63 been described above. When a port is used as part of more than one symbol, one of the symbols represents an element, and one of the symbols represents the connection which associates that port with other element ports. Clearly, both the connection symbol and the element symbol must be in the same fragment. To summarize, r s pj = Pk=i k=i, and either (1) Sij is an element symbol and Si. is a connection symbol, or (2) Sij is a connection symbol and Si. is an element symbol. In order to illustrate a typical display structure for a network diagram, Figure 20 shows an incomplete network diagram and Figure 21 shows the display structure for that diagram. (All rectangles in the display structure diagram represent leaves, and all other symbols represent levels. The ordering of the attributes of each level is indicated by arranging these attributes in order from left to right in the display structure diagram.) Different leaves are used for connected and unconnected ports so that SELMA may easily ignore connected ports while connections are being drawn. Except for the leaves which display connection symbols and the leaves which display parameter values, only one copy of each leaf which displays a particular graphic element exists in the structure. This leaf is then inserted into as many levels as required to represent all of the occurrences of the graphic element which it displays.

64 S11 S12 S13 { 1, / \ [ I <^'-'1/ X I N \ iin^~ 1S ~S14 S15 S16 Figure 20 An Incomplete Network Diagram

c-I4 C14 0', 6 5 c-I — 4r -C1 0C bo'-a~~~~~~~~ 0CIO bO~~~~~~~~~~~~~~~~~ Ln r-4 0~~~~cI (-Iq v —4 CY~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~t oe u > u, ~~~~~~-( ~~~~~~CtC~~~~~~C- ~~~~~4c cqC4C~ v,,LIZ CY~~a, ~~~~~~~~~~~ 3~~~~~~~~~~~~~~~~~~0 CL rH u~~~~~~~~r rJ -- -is rH M-4(1 CY v a

66 As mentioned in the previous section, one of the many uses of the display structure for the network diagram is the interpretation of commands received by SELMA during the retrieval of a saved model. In general, the following information is not explicit in these commands, but is implied by the order in which they are received: (1) The command which creates an element or connection symbol does not specify to which fragment that symbol belongs. (2) The command which inserts a connection leaf does not specify into which symbol level that leaf should be inserted. (3) The command which assigns a parameter value does not specify which parameter of which symbol is being assigned. (4) The command which connects a connection port to an element port does not specify which port of which connection is being connected. The information which is missing from these four commands is obtained from the order in which the commands are received as follows: (1) A newly created symbol is inserted into the last fragment which was created. (2) A connection leaf is inserted into the last symbol which was created. (3) A parameter is assigned to the last symbol which was created. Parameters are received in their reverse order, so inserting them successively into a Qij level

67 will order them properly. (4) A connection is made between a port of the last symbol created (which must represent a connection) and the element port specified by the command. Connect commands are received in the reverse order that connection ports are to assume, so inserting element ports successively into a P.. level to generate connection ports will order the connection ports properly. The display structure which represents the network diagram is part of another display structure whenever it is active (i. e., in the construction phase and results phase). The form of this display structure for the construction phase is shown in Figure 22. Each light button consists of a leaf inserted into a level (denoted by LB). All ofLthe LB levels are, in turn, inserted into a single level to facilitate destroying all of them when SELMA changes phases. The scratch level is used for highly temporary displays such as connection lines while they are being drawn, arrows to identify patch-up errors, etc. Whenever the plot phase is entered, the diagram level (D) is removed from the highest active level [3 p. 35] and replaced with a level into which are inserted the display structure components necessary to display a graph on the screen. This level is then again replaced with the diagram level when SELMA enters the construction or results phase.

68 Highest Active Level D Title Scratch / I\ / I\ LB LB LB LB LB LB SELMA-3 TRANSLATE IEXIT ISERVER | RESULTS SOURCE| UQUEU Figure 22 Construction Phase Display Structure

5. Special Command Exchanger Feature In addition to those features described in Section 3, a special feature is included in the command exchanger to facilitate testing of future modifications to SELMA which affect the command repertoire. Whenever SELMA is started, but the dataphone is not connected to another party, the teletype is substituted for the QAS program. This is accomplished by the addition of a command to the keyboard interpreter to permit simulated input from QAS and by the routing of all command output to the teleprinter (to be typed in hexadecimal format). The command which is added to the keyboard interpreter is of the following form: QAS: [ __] The command is begun by typing the letter "Q" on the keyboard. A command is then typed (except for delimiter bytes) on the keyboard in hexadecimal notation. If a carriage return is typed instead of the command, a null command is assumed. Otherwise, an even number of hexadecimal digits must be typed, followed by the carriage return. (In all cases, the right bracket is typed in response to the carriage return. ) If a phase byte is explicitly inputted, a carriage return will be ignored until the command byte is inputted. The command may be deleted at any time before it is completed by typing a null character [3 p. 17]. Because the command exchanger actually interprets the QAS keyboard command, commands between the user and SELMA via teletype are subject to the same restrictions that govern commands 69

70 between QAS and SELMA. The first command via teletype must be inputted by the user, and only one command is typed by SELMA until the next command is inputted via keyboard. For example, assume that SELMA is started with the data set disconnected. Only after the user supplies the command QAS: [0000] does SELMA respond by typing SELMA: [0005] to indicate that QAS should be initialized. (The zeros in the QAS keyboard command were not underlined here because it is assumed that all null commands are inputted simply by typing a carriage return.) If the user then again inputs a null command, no response from SELMA is produced until the user performs some action which generates one or more commands. The first of these generated commands is then typed, and the others are retained until more QAS commands are inputted. Since the only communication between SELMA and QAS is in the form of commands, the feature described above permits complete testing of new versions of SELMA without the use of the IBM 360/67. This feature of the command exchanger is intended only for this purpose, and should not be used by users who are attempting to solve queueing models.

6. Foreseeable Modifications The system described in this report was designed to demonstrate the usefulness of graphical input for the specification of queueing networks to a computer. It was not intended to be a tool for the queueing analyst. However, with a few modifications, the system could serve the latter purpose as well. The elements which are available in SELMA (i. e., queue, server, source, and exit) may not be sufficient for the specification of many models. In fact, various users may disagree on what elements are sufficient. Since a universally acceptable set of elements is difficult, if not impossible, to derive, a definition capability for elements is desirable in SELMA. Since the "menu" of elements in SELMA is table-driven, the inclusion of this facility in SELMA would not be difficult. However, a corresponding definition facility for QAS might be difficult to implement. Another type of definition facility could allow definition of elements which would be equivalent to existing fragments. This definition facility could be supported exclusively by the display terminal, since the creation of a copy of such an element could be described to QAS by the sequence of commands required to generate the corresponding fragment. Each element defined in this way could be represented by a symbol such as one which is used to represent an element in the current version of SELMA. Much larger models than can presently be accommodated in the display terminal could then be 71

72 accommodated because the detail of each fragment which represents a composite element would not have to be stored locally once the equivalent element was defined. For SELMA/QAS to be a useful tool, results should be available in forms other than probability distributions for individual state variables. A suitable generalization of this type of result might be a conditional probability distribution for an algebraic function of state variables, where the algebraic function and the conditions which affect the distribution are specified by the user. Such distributions could be further processed by QAS to produce conditional expectations of functions of state variables.

73 References 1. 339 Programmed Buffered Display User's Handbook, DEC-09I6FA-D, Digital Equipment Corporation, Maynard, Massachusetts, May 1968. 2. Randall, L. S., I. S. Uppal, G. A. Mc Clain, and J. F. Blinn, Implementation of the Queue Analyzer System (QAS) on the IBM 360/67, Technical Report 22, Concomp Project; also SEL 43, Systems Engineering Laboratory, University of Michigan, Ann Arbor, Michigan, to be published. 3. Jackson, James H., An Executive System for a DEC 339 Computer Display Terminal, Technical Report 15, Concomp Project; also SEL-32, Systems Engineering Laboratory, University of Michigan, Ann Arbor, December 1968. 4. Wallace, V. L., and K. B. Irani, Network Models for the Conversational Design of Stochastic Service Systems, Technical Report 13, Concomp Project; also SEL-30, Systems Engineering Laboratory, University of Michigan, Ann Arbor, November 1968. 5. Wallace, V. L., and K. B. Irani, A System for the Solution of Simple Stochastic Networks, Technical Report 14, Concomp Project; also SEL 31, Systems Engineering Laboratory, University of Michigan, Ann Arbor, to be published.

Appendix Program Listing

STITLE SELMA/QAS COMMAND EXCHANGER QASEOR $EQU 27 END OF RECORD * QAS IS A TASK WHICH COMMUNICATES WITH THE /360 QAS PROGRAM, QAS DZM QASCM+2 DZM QASCMR+2 DZM QASCMS LAC =QASQ JMS* =Q.C LAC =QAST4 DAC QASB LAC =740000 DAC QASR+1 LAW 610 JMS*:T.A LAW 10 JS,* =:T QASCMD JMS QASR SAD =377 SKP JMP QASCMD JMS QASR DAC QASP JMS QASR DAC QASC LAC QASPHS TAD QASP SMA JPP QASE LAC -QASPHS+1 TAD QASP DAC QAST LAC* QAST DAC QAST LAC* QAST TAD QASC SMA JMP QASE A-1

LAC QAST TAD QASC TAD =DAC QAST XCT* QAST QASE LAW 10 JMS * =T.A LAC =QASTI JMS* =L.T LAC QASP SAD =3 77 XOR =400 SPA JMPI KBDRPY JSi QASBYT LAC QASC SAD =377 XOR =400 SPA JMP KBDRPY J I QASBYT JMS QASR SAD =377 JMP *-2 SPA JMP KBDRPY JMS QASBYT JMP *-6 QOOOO JMS QASR SMA JMP QOO LAC QASQ+1 SAD QASQ+2 JMP Q00002 LAC =377 JIMS QASS DZM Q00004 LAC =QASQ A-2

JMP *+3 Q0000I LAC =QASQ DAC Q00004 JMS* =Q.F JMP Q00003 DAC Q00005 LRS 11 AND s377 JMS QASS LAC Q00005 LRS 11 AND =400 SZA JMP *+22 LAC Q00005 AND =377 JMS QASS LAC Q00004 SZA JMtP *+10 LAC Q00005 SAD S0002 JMP *+14 SAD S0003,JMP *+12 SAD S0004 JMP *+10 LAC QOOO05 AND =400 NA JMP QOOO01 LAC:377 JMS QASS JMP QASCMD LAC =377 J S QASS LAC QASR+1 SAD =740000 LAW 600 SAD *"lI A-3

JMS*:T J JMS* =T.F JMP QOO00+3 Q00002 JM,*:ToP JMP QOOO01 Q00003 JMS* =T.P Q0002 DtM QASCMS JMP QOOO0 A-4

* READ BYTE FROM COMMAND SOURCE * CALLING SEQUENCE: * JaMS QASR * ---- (RETURN) * AC CONTENT ON RETURNs * BYTE FROM COMMAND SOURCE QASR SDC 0 $DC O JMS* =B FI SKP JMP* QASR LAW 10 JMS* =T,A LAC =QAST2 JMS* L.T LAW 610 JMS* =T.R LAC =560000+QASR DAC QASR+1 QASRI JMS KBDBYT JMP* QASR A-5

* SEND BYTE TO COMMAND SINK * CALLING SEQUENCEs * JHIS QASS * --- (RETURN) * AC CONTENT ON ENTRY * BYTE TO BE SENT QASS $DC 0 DAC QASS2 JMS* =8*FO JMP QASSI LAC QASS2 JMS QASBRK SAD =QAST4 LAW QASEOR SAD **1 JMlS* B.FO NOP JMP* QASS QASS LAC QASS2 JMS QASBYT JMP* QASS A-6

* GET BRACKET TEXT * CALLING SEQUENCE: * JMS QASBRK * *a — (RETURN) * AC CONTENT ON ENTRYs * BYTE TO BE TESTED * AC CONTENT ON RETURN: * GIVEN BYTE IF GIVEN BYTE WAS NOT'FF' * POINTER TO BRACKET TEXT LIST IF GIVEN BYTE WAS'FF' QASBRK $DC 0 SAD =377 SKP JMP* QASBRK LAC QASB SAD =QAST4 JMP *+3 LAC:QAST4 SKP LAC =QAST3 DAC QASB JMP* QASBRK A-7

* TYPE BYTE ON TELEPRINTER * CALLING SEQUENCEI * JMS QASBYT * _ —- (RETURN) * AC CONTENT ON ENTRYt * BYTE TO BE TYPED QASBYT $DC 0 SAD =377 JMP *+10 AND s377 LRS 4 ALSS 2 LLS 4 XOR =770000 JMS* =B.T JMP* QASBYT J S QASBRK SAD =QAST4 JMP *+4 LAW 10 JMSc* =T.A LAC =QAST3 JMS* =L.T LAC QASB SAD =QAST3 JMP* QASBYT LAW 10 JMS*:T.R JMP* QASBYT A-8

* PUT OUTPUT COMMAND ON QUEUE * CALLING SEQUENCE: * JMS QASCM *, —- (RETURN) * AC CONTENT ON ENTRYt * POINTER TO COMMAND QASCM $DC 0 JMS*:T.L SDC 0 DAC QASCMS QASCM1 LAC* QASCM3 LMQ LAC:QASQ JMS* =Q.A JMP QASCM2 LAC* QASCM3 ISZ QASCM3 AND =400400 SNA JMP QASCM1 JMS*:T.U $DC QASCM JMP QASCMI QASCM2 JMS* =TP A-9

* REQUEST QAS OUTPUT * CALLING SEQUENCE: * J Sm QASCMR * -—.- (RETURN) * AC CONTENT ON ENTRYt * POINTER TO COMMAND QASCMR $DC 0 JMS* T.L $DC 0 DAC QASCM4 LAC QASCMS SZA+CLC JMP *+7 DAC QASCMS LAC QASCM4 JMS QASCM JIMS* =T.,U $DC QASCMR JMP QASCMR+4 JMS*:T.P A-10

* TEXT LISTS QAS T $DC 7 $TEXT "*** ILLEGAL COMMAND [" QAST2 $DC 31 $TEXT "*** DATA SET DISCONNECTE" $DC 157475 $TEXT "*** COMMAND SOURCE & SINK SWITCHED TO TELETYP" $DC 167475 QAST3 SDC 3 $TEXT "SELMA: [" QAST4 $DC I $DC 537475 QASQ SDC *+400 $DS 400 A-ll

* RECEIVED COMMAND DECODING TABLES QASPHS SDC -4 SDC QASOO CONTROL PHASE $DC QASOI DISPLAY RESULTS PHASE SDC QAS02 REGENERATION PHASE $DC QAS03 SAVE PHASE QASOO $DC -3 JMP QOOOO NULL JMP QOOO1 PATCH-UP JMP Q0002 END OF FILE QAS01 $DC -3 JMP QO100 SET UP GRAPH JMP QO101 PLOT VALUES JMP Q0102 DISPLAY SINGLE VALUE QAS02 $DC -6 JMP Q0200 CREATE FRAGMENT JMP Q0201 CREATE ELEMENT OR CONNECTION JMP Q0202 LOAD CONNECTION SEGMENT JMP Q0203 INSERT CONNECTION LEAF JMP Q0204 ASSIGN PARAMETER JMP Q0205 CONNECT QAS03 $DC -1 JMP Q0300 SEND MODEL TO BE SAVED A-12

* TRANSMITTED COMMAND TABLES * CONTROL PHASE 50000 $DC 400 NULL COMMAND SOO50 $DC 401 PATCH-UP S0002 $DC 402 CALL SYSTEM S0003 $DC 403 CALL ERROR S0004 $DC 404 CALL MTS S0005 $DC 405 INITIALIZE 50006 $DC 406 WIPE OUT /360 OUTPUT BUFFER * GENERATION PHASE SO100 $DC 1000 CREATE ELEMENT OR CONNECTION $DC 0 NAME/TYPE $DC 0 GEN PAR VALUES (NO 1I & 2) SO 01 $DC 1001 DESTROY ELEMENT OR CONNECTION SDC 0 NAME (HIGH ORDER) S0102 $DC 1002 ASSIGN PARAMETER VALUE $DC 0 NAME/PARAMETER NUMBER $DS 4 PARAMETER VALUE (6-BIT CODE) S0103 $DC 1003 CONNECT $DC 0 CON NAME/CON PORT NUMBER $DC 0 ELEMENT NAME/ELEMENT PORT NUMBER S0104 $DC 1004 DISCONNECT SDC 0 ELEMENT NAME/ELEMENT PORT NUMBER SO 105 $DC 1005 ALTER GENERATION PARAMETER $DC 0 NAME/GENERATION PARAMETER NUMBER $DC 0 GEN PAR VALUE (HIGH ORDER) * SOLVE PHASE S0200 $DC 2000 COMPILE & SOLVE $DC 0 NUMBER OF ITERATIONS SDS 4 CONVERGENCE FACTOR (6-BIT CODE) * RESULTS PHASE S0300 $DC 3000 PLOT RESULTS SDC 0 ELT NO. (O=ALL) (HIGH ORDER) S0501 $DC 3001 MODIFY PLOT $DC 0 FIRST STATE NUMBER A-13

$DC 0 COUNT (HIGH ORDER) S0302 $DC 3002 GET SINGLE VALUE $DC 0 STATE NUMBER S0303 $DC 3003 TYPE RESULTS SDC 0 ELT NO. (O=ALL) (HIGH ORDER) * DOCUMENTATION PHASE 50400 SDC 4000 BEGIN SAVE SDS 14 FILE NAME S0401 SDC 4401 END SAVE S0402 SDC 4002 RETRIEVE SDS 14 FILE NAME S0403 SDC 4003 SAVE RETURN COMMAND $DS 42 RETURN COMMAND A-14

STITLE SELMA RESPONSE TO QAS COMMANDS Q0001 DZM QASCMS M S QASR SAD =: JMP QOOOII SAD =4 SKP JMP QASE LAC QOOOl F JMS*:L.T JMS QASR SNA JMP *+3 LAC 00QO G JMS* =L T JMP QOOOO LAC QO0001S JMP *-3 QOOOII LAC =KBDI DAC KBDTBL LAC -PBT JMS* =P.T JMS QASR SAD:2 JMP Q00012 JMS QASR Jd QASR LAC:QOOOIC SKP Q00012 LAC =QOOOIP DAC QOOOIT JMS QASR TAD:NAME DAC Q001N LAC* Q0001 N JIS ATTR $DC 0 CLA JIS ATTR A-15

SDC 0 DAC QOOOIL LAC QOOOIT SAD =QOOOIC JMP *+5 CLA JMS ATTR $DC 0 DAC QOOOIL JtS QASR SZA JMP *+4 LAC =QOOOIR DAC QOOOIT LAC =1 DAC QOOOIN LAC QOOOIL JMS ATTR $DC 0 LMQ LAC QOOOIL J MS PENCNT CMA TAD QOOOIN DAC QOOOI N LAC QOO01L SKP CLA JtS ATTR $DC 0 ISZ QOOO N JrP *-4 DAC QOOOIL LAC QOOOIT JMS* =L.T LAC QOOOIL JME ATTR $DC 0 DAC QOOOIT LMQ A-16

LAC QOOOIL JI M*:S TR $DC 0 LAC QOOOI A LPIQ LAC QOO IL JMS* =S.TI $DC * LAC QOOOIT LMQ LAC QOOOIL J.MS* =S STI DC 0 * LAC QOOOI E JMS* =L.T LAC C ON.JMS* =T.S JMP QOOOO A-17

* SET UP GRAPH QO 100 JMS PLOCLR JMS QASR ALSS 7 DAC PLOI C JMS QASR XOR PLOI NC LRSS 5 DAC PLOI NC JMS PLOLBL $DC -320 $DC -250 JMS PLOLBL $DC -320 $DC 250 JMS PLOLBL $DC -310 $DC -340 JIS PLOLBL $DC 310 SDC -340 JMS PLOLBL $DC 330 $DC -300 Q01001 LAC =SO000 JIV QASCMI JlP QOOOO A-18

* PLOT VALUES QO10I JMS QASR SAD =:77 JMP QO1OO1 ALSS 7 DAC QO1011 JMS QASR XOR Q01011 LRSS 5 XOR:4000 DAC QOIOI LAC =1 DAC* PLOPTR ISZ PLOPTR LAC Q010 1 DAC* PLOPTR ISZ PLOPTR ISZ PLOPTR LAW 4000 DAC* PLOPTR ISZ PLOPTR CLC TAD PLOI NC DAC* PLOPTR iSZ PLOPTR LAC Q01O11 XOR =2000 DAC* PLOPTR LAC PLOPTR TAD =3 DAC PLOPTR jMP QOIO1 A-19

* DISPLAY SINGLE VALUE Q0102 LAC LVLVX LMQ LAC LVLSCR JMS* =S STR JMP *+3 LAC LVLVX JMS CHEW LAC LVLVY LMQ LAC LVLSCR JMS* S,.TR JMP *+3 LAC LVLVY JMS CHEW LAC PENGPI LRS 3 AND =77 MUL PLOINC $DC 0 LACQ TAD o-300 RAL TAD PLOINC RAR DAC *+3 JMS PLOLBL.DC -3 50 $DC 0 DAC LVLVX JMS PLOLBL Q01021 $DC 0 $DC -340 DAC LVLVY JMS* =D.E JMP QOOOO A-20

* CREATE FRAGMENT Q0200 JMS*:S.TL $DC 0 DAC Q02FRG LIQ LAC LVLDGIM JMS*:=STI $DC 0 LAC Q02 RG JPS Q02CRD Q02001 LAC rS0000 JlM QASCM JMP QOOOO A-21

* CREATE ELEMENT OR CONNECTION Q0201 JMS*:S.TL $DC * DAC Q02PAR JMS LVL $DC Q02FRG SDC 0 SDC 0 SDC 0 $DC 0 * DAC QO2SYM JMS Q02CRD JMS* =S TL $DC 0 DAC Q02PRT LPIQ LAC Q02SYM JMS* =S TI $DC * JMS QASR TAD =NAME DAC Q02TMIP LAC Q02SYM DAC* Q02TMP LAW -NAME TAD Q02 TIP AND =200 SZA JMP Q02013 JMS QASR JMS QASR TAD =Q0201 T I DAC Q02TMP LAC* Q02TMP DAC QO2TMP Q02011 LAC* Q02TMP SMA JMP Q02012 ALS 2 A-22

LRSS 12 DAC *+14 LACQ LRSS 12 DAC *+12 LAC* Q02TMPP AND =600000 SAD =400000 LAC =INP SAD =600000 LAC =OUT JMS LVL $DC Q02PRT $DC 0 $DC 0 $DC 500 $DC 0 * ISZ Q02TMP JMP Q02011 Q02012 LAC Q02TMP TAD = LMQ LAC Q02SYM JMS*:S.TI $DC 0 * JMP Q02001 Q02013 JMS QASR IJS QASR ALSS 7 DAC Q02TMP JMS QASR XOR Q02 TIP JMS COR GET $DC 0 DAC Q02BLK DAC Q02PTR LAW 10 LMQ LAC Q02PRT JMS* =S.LP

JMP Q02001 Q0201T $DC DICI+10 $DC DIC2+10 $DC DIC3+7 $DC DIC 4+7 A-24

* LOAD CONNECTION LEAF SEGMENT Q0202 JPMS QASR SAD =377 JPP Q02001 LRSS 5 ALSS 4 LLS 5 ALSS 7 DAC Q02TMP JMS QASR XOR Q021IPP DAC* Q02PTR ISZ Q02PTR JiP Q0202 A-25

* INSERT CONNECTION LEAF Q0205 LAC Q02BLK TAD =1 LMQ LAC Q02SYM JMS* -S.TI $DC 0 * JMP Q02001 A-26

* ASSIGN PARAMETER Q0204 LAC Q02SYM JMS ATTR $DC 0 TAD =-I DAC Q02TMP LAC* Q02TMP AND =377 SAD:1 LAC:PARINT SAD =202 LAC =PARINT SAD:PARINT SKP LAC:PAR DAC Q 02 OD JMS* =S*TL $DC 0 * DAC Q02 TMP LMQ LAC Q02PAR.JMS =S,TI $DC O * LAC Q02TMP JMS Q02CRD LAW 500 LMQ LAC Q02TMP JMS* S. LP LAC =Q02BUF+t 3AC Q02PTR DZM Q02BUF JMS QASR SAD =377 JMP Q02042 Q02041 XOR =777700 DAC* Q02PTR ISZ Q02BUF ISZ Q02PTR A-27

JMS QASR SAD =$77 SKP iJP? Q02041 LAC Q 02BUF JPS* =L.D SDC * DAC Q02BLK LAC* Q02 MOD AND =400000 XOR =2010 DAC* Q02BLK LAC QO2BUF ALSS 14 XOR* Q02BLK DAC* Q02BLK LAC Q02BLK SKP Q02042 LAC Q021OD LMQ LAC Q02TMP JMS*:S TI DC * JMP Q02001 Q02BUF $DS 5 A-28

* CONNECT'10205 JMS QASR TAD =NAME DAC Q02 TIP LAC* Q02 TP JMS ATTR $DC 0 CLA JMS ATTR $DC 0 DAC Q02PTR JMS ATTR $DC 0 DAC Q02TMP LMQ LAC Q02PTR.jMS PENCNT CMA DAC Q02BLK JlS QASR TAD Q02BLK DAC Q02BLK LAC Q02PTR SKP Q02051 CLA JMS ATTR $DC 0 DAC Q02 TP ISZ Q02BLK jMP Q02051 LAC Q02TMP JIS ATTR $DC 0 DAC Q02PTR LMQ LAC Q02TMP JMS* =S.TR $DC 0 LAC Q02PTR A-29

SAD I NP LAC =INPCON SAD =OUT LAC:OUTCON LMQ LAC Q02TMP JMS* =S,TI $DC * LAC Q02TMP LMQ LAC Q02PRT JMS* =S.TI $DC O * IMP Q02001 A-30

* SAVE DIAGRAM Q0300 DZM KBDSS JMP QOOOO * TRANSLATE LEVEL TO DATAPHONE COORDINATES * CALLING SEQUENCE: * JMS Q02CRD * - --- (RETURN) * AC CONTENT ON ENTRY( * POINTER TO LEVEL TO BE TRANSLATED Q02CRD $DC 0 DAC Q02CR2 JMS Q02CRI JMS*:S.LY JMS Q02CRI JMlS* =S.LX JMIP* Q02CRD Q02CRI $DC 0 JMS QASR ALSS 7 DAC Q02CR3 J M. QASR XOR Q02CR3 ALS 4 LRSS 26 LAC Q02CR2 JMP* Q02CR 1 A-31

Q000A $DC 500 $DC 6302 VEC $DC 2010 $DC 10 SDC 6020 $DC 40 $DC 2020 $DC 2020 $DC 4040 $DC 2020 $DC 6200 $DC 200 $DC 210 $DC 6210 $DC 6301 POP A-32

Q0001F $DC 7 $TEXT "*** BAD FILE NAME" $DC 747577 QOOOIG $DC 11 $TEXT "*** RETRIEVAL CANCELLED" SDC 747577 QOOOIS $DC 13 $TEXT "*** SAVE OPERATION CANCELLED" $DC 747577 Q0001C $DC 11 $TEXT "*** PORT NOT CONNECTED" $DC 747577 uuvvir $DC 7 $TEXT "*** BAD PARAMETER" $DC 747577 QOOOIR $DC 15 $TEXT "*** PROBABILITIES DO NOT SUM TO 1.0" $DC 747577 Q0001E SDC 15 $TEXT "*** RESULT REQUEST CANCELLED" $DC 747577 A-33

STITLE SELMA KEYBOARD INTERPRETER KBD LAW 7 DAC KBDI LAC =KBDI DAC KBDTBL LAW 30 J MS* =T.A KBDINT LAW 10 JM6* =T.R JPS KBDXCT LAC KBDTBL /PAR A-34

* CLEAR COMMAND KBDC JMS KBDTP LAC =KBDCT+400000 /PAR LAC =KBDCCM J MS* =T S LAC LVLDGM JMS CHEWA JMS* =X*T LAW -400 JMS CORZRO LAC:NAME /PAR JMP KBDINT KBDCCM LAC =S00 JMS QASCM tMS*:T.F A-35

* ESCAPE COMMAND KBDE JMS KBDTP LAC =KBDET+400000 /PAR LAC LVLHAL JMS CHEWA CLA JMS* =D.P JMS* =X.T LAC =KBDECM JlMS* =T.S LAC QASR+l SAD =740000 JMP *+12 LAC QASQ+1 SAD QASQ+2 LAC QASR AND =77777 SAD =QOOO+1 JMP *+4 LAC =KBD3 DAC KBDTBL JMP KBDINT CLA JMS*:P.T LAW 33 JMS* =TR JMS* T.F KBDECM LAC:=S002 MJ S QASCM JMS* =T.F A-36

* GET C OMMA ND KBDG JMS KBDTP LAC =KBDGT /PAR JMS KBDFL $DC S0402+1 LAC =PBTR+2 JMS* =P T CLA JMS* -D.P LAW 10 LIMQ LAC LVLBUT JMS* =S LP JMS* =X.S JPS* =T.P LAC LVLDGM JMS CHEWA LAW -400 JMS CORZRO LAC =NAME /PAR LAC =S0005 JMS QASCM LAC =KBDI NT JMS* T.S LAC =S0402 JMS QASCMR KB DG 1 LAC QASCMS SZA JMP KBDG2 LAC TRAPEN JMS PENSET LAC =PBT JMS*.P.T LAC LVLBUT CLQ JMS* S.,LP LAC KBDFSV DAC KBDTBL JMS* =T,F A-37

JMP KBDG1 KBDG2 JMS* =TP A-38

* PARAMETER COMMAND KBDP LAC KBDVSW S NA JMP KBDINT+2 JMS KBDTP LAC =KBDPT /PAR DZM KBDPM LAC KBDTBL DAC KBDPSV LAC =KBD5 DAC KBDTBL LAC TRAPEN DAC KBDPLP LAC:PENPAR JMS PENSET JMS KBDPI JMS KBDPI JMS KBDPI JMS KBDPI LAC KBDPM SNA JMP *+5 JMS KBDP1 JMS KBDP1 JMS KBDPI JMS KBDPI LAC =KBD6 DAC KBDTBL JMS KBDPI XBDP1 $DC 0 JMS KBDXCT LAC KBDTBL /PAR KBDP2 XOR =777700 ISZ KBDPP DAC* KBDPP ISZ KBDPB JMS*:B T A-39

JMP* KBDPI KBDP3 LAC KBDPM SNA+CLC JMP *+4 TAD KBDPI DAC KBDP1 JMP* KBDP1 LAW 17761 DAC KBDPM JMP KBDP2+1 K DP4 DZM KBDPB LAC =KBDPB DAC KBDPP LAC KBDPLP JMS PENSET LAC KBDPSV DAC KBDTBL JMP KBDCM2'KBDPB SDC 0 $DC 777777 $DC 777777 $DC 777777 $DC 777777 $DC 777777 $DC 777777 $DC 777777 $DC 777777 A-40

* QAS COMMAND KBDQ LAC QASR+1 SAD =740000 JMP KBDINT JMS KBDTP LAC =KBDQT /PAR JMS KBDCM LAC =KBDQQ /PAR LAW -6 DAC KBDI LAC QASQ+2 SAD QASQ+1 JMP KBDINT SAD QASQ LAC =QASQ+2 TAD =1 DAC KBDQ LAC* KBDQI SAD S0002 SKP SAD S0003 SKP SAD S0004 SKP JMP KBDINT LAW 31 JMS* -TR JMSl* =TF KBDQQ $DC *+47 $DS 47 A-41

* REPLY COMMAND KB DR JMS KBDTP LAC =KBDRT /PAR JMS KBDCM LAC:KBDRQ /PAR LAW 10 JMS* T.,R LAC KBDRSV DAC KBDTBL JMS KBDR2 DAC KBDSW J S KBDR2 SZA DZM KBDSW DAC QASP JMS KBDR2 SAD:2 SKP SAD =3 SKP SAD =4 SKP DZM KBDSW DAC QASC LAC KBDSW SNA JMP KBDRI LAC =QASQ J M* =Q.C LAC =SOOOO TAD QASC JMS QASCM LAC LVLHAL J M CHEWA CLA JMS* =DP JMS* X.T LAW 21 JMS*:T R A-42

JPS* =TF XBDRI LAC:377 JMS QASS LAC QASP JMS QASS LAC QASC JMS QASS J M; KBDR2 SPA JMP KBDI NT+2 JMS QASS JMP *-4 KBDR2 $DC 0 LAC =KBDRQ JMS* =Q.F $DC 0 JMP* KBDR2 KBDRQ $DC *+47 $DS 47 A-43

* SAVE COMMAND KBDS JMS KBDTP LAC =KBDST /PAR JMS KBDFL $DC S0400+1 LAC -PBTR+2 JMS*:P,T CLA JMS* =D.P LAW 10 LMQ LAC LVLBUT JMS*:S.LP JEMS* X.S JMS* =T.P LAC =KBDINT JS* =-T.S LAC S 0400 DAC KBDSS JMS QASCMR LAC QASCMS S NA JMP KBDGI LAC KBDSS SNA JMP *+4 SKP JMP *-7 JMS* =T.P LAC =KBDSFQ JMS * =Q C LAC LVLDGM KBDS1 JMS ATTR JMP KBDS2 LMQ LAC:KBDSFQ JMS* =Q A $DC 0 CLA A-44

JMP KBDSI K BDS2 LAC =KBDSFQ JMS* =Q,F JMP KBDS I DAC KBDSF LAC =2000 DAC S0403+1 LAC KBDSF JMS KBDCRD LAC S0403+5 XOR =400 DAC S0403+3 LAC =S 0403 JMS QASCM LAC =KBDSQ 1 J * =Q.C LAC =KBDSQ2 JMS* =Q.C LAC KBDSF KBDS3 JlS ATTR JMP KBDS4 LMQ LAC =KBDSQI jJMS* =QA $DC 0 CLA JMP KBDS3 KBDS4 LAC =KBDSQI JMS* =Q.F JMP KBDS6 DAC KBDSS JMS ATTR SDC 0 TAD =-.I DAC KBDSTP LAC* KBDSTP AND =200 S NA JMP KBDS5 LAC KBDSS A-45

LMQ LAC =KBDSQ2 J IS* =Q A $DC 0 JMP KBDS4 KBDS 5 LAC =2001 DAC S0403+1 LAC KBDSS JMS KBDCRD LAC KBDSS JMS NAMGET SDC 0 ALSS 11 DAC S0403+4 LAC KBDSTP SAD =DIC1+12 LAC =401000 SAD -DIC2+12 LAC =402000 SAD =DIC3+10 LAC =403000 SAD =DIC4+10 LAC =404000 DAC S0403+5 LAC =S0403 J B QASCM J MS KBDPAR JMP KBDS4 KBDS6 LAC =KBDSQ2 JMS* =Q.F JMP KBDS2 DAC KBDSS LAC =2001 DAC S0403+1 LAC KBDSS JMiE KBDCRD LAC KBDSS JdE NAMGET $DC 0 ALSS 11 A-46

DAC S0403+4 LAC KBDSS JMS ATTR $DC 0 TAD — 2 DAC KBDSTP LAC* KBDSTP ISZ KBDSTP TAD =-1 DAC KBDSC JMS KBDCOD XOR:400 DAC S0403+5 LAC =S0403 JS QASCM LAC =2002 DAC S0405+1 LAC KBDSC CMA TAD -1 DAC KBDSC KBDS7 LAC =S0403+2 DAC KBDSP LAW -41 DAC KBDSWC KBDS8 LAC* KBDSTP ISZ KBDSTP LRS 14 RTR RTR LLS 14 JMS KBDCOD DAC* KBDSP ISZ KBDSP ISZ KBDSC SKP JMP KBDS9 ISZ KBDSWC JMP KBDS8 CLC A-47

TAD KBDSP DAC KBDSP LAC* KBDSP XOR =400 DAC* KBDSP LAC =S0403 JMS QASCM JMP KBDS7 KBDS9 CLC TAD KBDSP DAC KBDSP LAC* KBDSP XOR =400 DAC* KBDSP LAC =S0403 JMS QASCM LAC =2403 DAC S0403+1 LAC =S0403 JMS QASCM,JMS KBDPAR LAC =KBDSQ3 JMS* =Q.C LAC =2005 DAC S0403+1 LAC KBDSS JMS ATTR $DC 0 CLA JlS ATTR $DC 0 DAC KBDSSV JMS ATTR JMP XBDSIO LMQ LAC =KBDSQ3 JMS* =Q.I $DC 0 CLA JMP *-7 A-48

KBDS 1 LAC -KBDSQ3 JMS* =Q.F JMP KBDS6 DAC KBDSP LMQ LAC KBDSSV JMS* =S:TR $DC 0 LAC =*+5 LMQ LAC KBDSP JM* =S.LU JMS* =T.F LAC KBDSP JMS* =S.LN LAC KBDSP LMQ LAC KBDSSV JMS* S.TI $DC 0 LAW 2 JMS*:D 0 $DC 0 DAC KBDSYM LAW 1 JMS* =-D.O $DC 0 DAC KBDPRT JtS* =DE LAC KBDSYM JMS NAMGET $DC 0 ALSS 11 DAC S0403+2 LAC KBDSP LMQ LAC KBDPRT JMS PENCNT XOR =400 XOR S0403+2 A-49

DAC S0403+2 LAC S 0403 JMS QASCM JMP KBDS10 KPDS1I LAC =S0401 JMS QASCM DZM QASCMS JMP KBDGI KBDSFQ $DC *+30 $DS 30 KBDSQI $DC *+30 $DS 30 KBDSQ2 $DC *+15 $DS 15 KBDSQ3 $DC *+15 $DS 1I A-50

* VALUE COMMAND KBDV JMS KBDTP LAC =KBDVT /PAR J MS* =B.K SAD =31 JMP *+6 SAD =35 JMP *+4 SAD -77 JMP KBDCM2 JMP *-7 TAD:-31 DAC KBDVSW TAD:KBDVTP SAD:KBDVTP+4 TAD =KBDVTT-KBDVTP-4 JMS* =L:.T JMP KBDI NT A-51

* RESPONSE TO ILLEGAL COMMAND FROM QAS KBDRPY LAC =537475 JMS* =B T LAW 10 JMS* =T.R LAC KBDTBL DAC KBDRS V LAC =KBD2 DAC KBDTBL CLC DAC KBDSW LAC KBDSW SAD =377 JMP Q0000+3 SZA JMP *+3 JMP QASCMD JMP *-6 JMS* =T.P A-52

* RETURN BYTE FROM LAST KEYBOARD COMMAND * CALLING SEQUENCEt * JJMS KBDBYT * -*.*- (RETURN) * AC CONTENT ON RETUR.N * BYTE IN BITS 10-17t BITS 0-9 CLEAR (UNLESS END OF RECORD) *** CALLED FROM QAS TASK ONLY *** KBDBYT $DC O LAW -6 SAD KBDI JMP *+4 SKP JMP KBDBYT+I JMS* =T,P LAC =KBDQQ JMS* =QF $DC 0 SMA JMP* KBDBYT LAW -7 DAC KBD1 CLC JMP* KBDBYT A-53

* INTERPRET KEYBOARD CHARACTER * CALLING SEQUENCEt * JIMS KBDXCT * LAC -- (LAC POINTER TO KEYBOARD TABLE) KBDXCT $DC 0 JMS* =BK DAC KBDXC1 XCT* KBDXCT DAC KBDPTR LAC* KBDPTR DAC KBDCNT LAC KBDXCI ISZ KBDPTR SAD* KBDPTR JMP *+5 ISZ KBDPTR ISZ KBDCNT JMP *-5 JMP KBDXCT+I ISZ KBDPTR XCT* KBDPTR A-54

* TYPE KEYBOARD RESPONSE AND OBTAIN CONFIRMATION IF NECESSARY * CALLING SEQUENCEt * JMS KBDTP * LAC --- (LAC POINTER TO RESPONSE TEXT LISTI * BIT 0 SET IF CONFIRMATION REQUIRED) * ---- (RETURN) KBDTP $DC 0 LAW 10 JMSE* T.A XCT* KBDTP JMS* =L*T XCT* KBDTP ISZ XBDTP SMA JMP* KBDTP KBDTPI JMS KBDXCT LAC:KBD4 /PAR KBDTP2 LAC =KBDOK JMS*:L.T JMP* KBDTP KBDTP3 LAC:KBDNO JMS* =L.T JMP KBDINT A-55

* READ COMMAND FROM KEYBOARD * CALLING SEQUENCEt * J MS KBDCM * LAC ---- (LAC POINTER TO SINK QUEUE) * ---- (RETURN) KBDCM $DC 0 XCT* KBDCM JMS* =Q,C LAC 3 77 LMQ XCT* KBDCM J MS* =Q.A $DC 0 jMS KBDCM4 JMP KBDCM3 JMS KBDCM4 JMP KBDCM2 JMS KBDCM4 SKP JMP *.2 KBDCMI LAC =377 LMQ XCT* KBDCM JMS* =Q.A JMP KBDCM2 CLQ+CMQ XCT* KBDCM JMS* =Q.A JMP KBDCM2 LAC =537475 JMS* =B.T ISZ KBDCM JMP* KBDCM KBDCM2 LAC =KBDDEL JMS* =L.T JMP KBDINT KBDCM3 LAC =KBDNUL JMS* =L.T CLQ A-56

XCT* KBDCM JMS* =Q.A $DC 0 CLQ XCT* KBDCM JMS* =Q,A $DC 0 JMP KBDCMI KBDCM4 $DC 0 JMS KBDCM5 JMP* KBDCM4 DAC KBDCM7 JMS KBDCM5 JMS* =T.P LRS 4 LAC KBDCM7 LRSS 16 XCT* KBDCM JS* =Q.A JMP KBDCM2 ISZ KBDCM4 JMP* KBDCM4 KBDCM5 $DC 0 J MS* =B.K SAD =74 JMP* KBDCM5 SAD =77 JMP KBDCM2 TAD — 20 SMA JMP KBDCM5+1 AND =777717 DAC KBDCM6 JMS* =B.T LAC KBDCM6 AND =17 ISZ KBDCM5 JMP* KBDCM5 A-57

* GET FILE NAME FROM KEYBOARD * CALLING SEQUENCES * JMIS XBDFL * $DC -— * (POINTER TO 16-BYTE VECTOR) * --- (RETURN) KBDFL $DC 0 LAC* KBDFL DAC KBDFL3 DAC KBDFL4 LAW -14 DAC KBDFL5 DAC KBDFL6 LAC =76076 DAC* KBDFL3 ISZ KBDFL3 ISZ KBDFLS JMP *-3 JMS* B,K SAD =77 JMP KBDCM2 SAD =74 JMP KBDCM2 XOR =400 ALSS 11 DAC* KBDFL4 LRS 11 AND =77 XOR =777700 JMS* =B.T KBDFLI JMS* =B.K SAD =77 JMP KBDCM2 SAD =74 JMP KBDFL2 XOR* KBDFL4 XOR =400400 DAC* KBDFL4 AND =77 XOR =777700 A-58

JMS* =BT ISZ KBDFL6 SKP JMP KBDFL2 JMP* =Bo.K SAD =77 JMP KBDCM2 SAD =74 JMpP KBDFL2 DAC KBDFL7 LAC* KBDFL4 AND:177177'DAC* KBDFL4 ISZ KBDFL4 LAC KBDFL7 XOR:400 ALSS 11 DAC* KBDFL4 LAC KBDFL7 XOR =777700 JMS* =B T JMP KBDFLI KBDFL2 LAW 17475 JPS* =B.T LAC KBDTBL DAC KBDFSV LAC =K.D3 DAC KBDTBL ISZ KBDFL JMP* KBDFL A-59

* SEND PARAMETERS * CALLING SEQUENCEt * J MS KBDPAR * ** — (RETURN) KBDPAR $DC 0 LAC =KBDSQ3 JMS* =QC LAC =2004 DAC S0403+1 LAC KBDSS JMS ATTR $DC 0 CLA JMS ATTR $DC 0 CLA JMS ATTR lMP* KBDPAR JMS ATTR JlMP *+7 LMQ LAC =KBDSQ3 JMS* Q.I SDC 0 CLA JMP *-7 KBDPAI LAC:KBDSQ3 JM5* =Q,F JMP* KBDPAR DAC KBDSP JMS KBDCRD LAC KBDSP JMS ATTR $DC 0 DAC KBDSP SAD =PARINT JMP KBDPA3 SAD =PAR JMP KBDPA3 A-60

ISZ KBDSP LAC* KBDSP LRS 3 AND =77000 XOR =400000 DAC S0403+4 ISZ KBDSP LAC* KBDSP SAD =761121 JMP KBDPA2 ISZ KBDSP LAC* KBDSP LRS 14 AND =77 XOR =400400 XOR S0403+4 DAC S0403+4 ISZ KBDSP LAC* KBDSP SAD =761121 JMP KBDPA2 ISZ KBDSP LAC* KBDSP LRS 3 AND =77000 XOR =400000 DAC S0403+5 LAC S0403+4 XOR:400 DAC S0403+4 ISZ KBDSP LAC* KBDSP SAD =761121 JMP KBDPA2 ISZ KBDSP LAC* KBDSP LRS 14 AND =77 XOR =400400 XOR S0403+5 A-61

DAC S0403+5 KBDPA2 LAC =S0403 JMS QASCM JMP KBDPAI KBDPA3 LAC S 0403+3 XOR =400 DAC S0403+3 JMP KBDPA2 A-62

* SET UP COORDINATES FOR TRANSMISSION * CALLING SEQUENCEs * JMS KBDCRD * ---- (RETURN) * AC CONTENT ON ENTRY: * POINTER TO LEVEL WHOSE COORDINATES ARE TO BE SENT KBDCRD $DC 0 TAD =4 DAC KBDCR LAC* KBDCR JMS* =C.CB JMS KBDCOD DAC S0403+2 ISZ KBDCRI LAC* KBDCRI JMS* =C.CB JMS KBDCOD DAC S0403+3 JMP* KBDCRD A-63

* ENCODE 14 BITS OF INFORMATION FOR TRANSMISSION * CALLING SEQUENCE: * JMS KBDCOD * --- (RETURN) * AC CONTENT ON ENTRYt * INFORMATION TO BE ENCODED IN BITS 4-17 * AC CONTENT ON RETURN: * TWO-BYTE WORD OF ENCODED INFORMATION KBDCOD $DC 0 LRS 7 ALS 2 LLS 7 AND:177177 JMP* KBDCOD A-64

* KEYBOARD TABLES KBD I SDC - 7 $TEXT "OOC" JMP KBDC $TEXT "OOE" JMP KBDE $TEXT "OOG" JMP KBDG $TEXT "OOP" JMP KBDP $TEXT "0OS" JMP XBDS $TEXT "OOV" JMP KBDV $TEXT "OOQ" JMP KBDQ KBD2 $DC -I $TEXT "OOR" JMP KBDR KBD3 $DC -1 $TEXT "OOQ" JMP KBDQ KBD4 $DC -3 STEXT "000" JMP KBDTP2 $TEXT "OON" JMP KBDTP3 $DC 77 JMP KBDTPS KBD5 $DC -14 $DC 0 JMP KBDP2 $DC I JMP KBDP2 SDC 2 A-65

JMP KBDP2 $DC 3 JMIP KBDP2 $DC 4 JPIP KBDP2 $DC 5 JPP KBDP2 $DC 6 JMP KBDP2 $DC 7 JMP KBDP2 $DC 10 JMP KBDP2 $DC 11 JPIP KBDP2 $TEXT "00, JMP KBDP3 $DC 77 1JMP KBDP4 KBD6 $DC *1 $DC 77 JMP KBDP4 A-66

* TEXT LISTS KBDCT $DC 3 $TEXT "CLEAR? " KBDET $DC 3 $TEXT "ESCAPE? " KBDGT $DC 3 $TEXT "GET FILE " KBDPT $DC 4 $TEXT "PARAMETERt KBDQT $DC 2 $TEXT "QASt (" K DR T $DC 3 $TEXT "REPLY " KBDST $DC 5 $TEXT "SAVE ON FILE -KBDVT $DC 4 $TEXT "VALUES ROM KBDVTP $DC 5 $TEXT "PUSH BUTTONS" $DC 747577 KBDVTT $DC 4 T EXT " TEL ETYPE" $DC 747577 KBDOK $DC 2 STEXT "OK" $DC 747577 KEDNO $DC 2 $TEXT "NO" A-67

SDC- 747577 KBDDEL $DC 5 STEXT " -- DELETED' $DC 747577 KBDNUL $DC 2 $TEXT "0000O A-68

STITLE SELMA PUSH BUTTON INTERPRETER PBT LAC KBDVSW SZA JMP PBTR JMS* =P.R SAD =1 JMP PBTR CLA JMS* =P T DZM KBDPM LAC KBDTBL DAC KBDPSV LAC =KBD6 DAC KBDTBL LAC TRAPEN DAC KBDPLP LAC =PENPAR JMS PENS ET LAW -400 LMQ LAC LVLSCR JMS* =S.LY LAC =320 LMQ LAC LVLSCR J S* =S.LX JMS PBTI JMS PBTI Jt PBTI JMS PBTI JMS PBTI PBTD LAC LVLSCR JP CHEWA DZM KBDPB LAC =K 8 DPB DAC KBDPP LAC KBDPLP JMS PENSET LAC KBDPSV A-69

DAC KBDTBL PBTR LAC =PBT JMS* =P.T CLA JMS* =P S JpMS* -P,E JMS* -T.F PBT1 $DC 0 JMS* =P.E JIM* =PP SZA JMP *+7 LAC KBDPB S NA JMP PBTR SKP JMP *-7 JMS* =T.P SAD =1 JMP PBTD NOR M LACS TAD =777637 SAD =777712 TAD =47 SAD KBDPM JMP PBT2 SAD =777761 DAC KBDPM ISZ KBDPP DAC* KBDPP ISZ KBDPB LAC LVLSCR JMS CHEWA LAC =KBDPB JMS* =L.D DC O * LMQ LAC LVLSCR A-70

JMs* =S.T $DC 0 * CLA JMS* =P S JMP* PBTI PBT2 CLA JMS* =PS JMP PBTI+1 A-71

STITLE SELMA CONSTRUCTION FRAME CON JS*:X.S JMP PENEND LAC LVLBUT J S CHEWA LAC LVLDGM LMQ LAC LVLHAL JMS* =S,TR NOP LAC LVLRES LMQ LAC LVLDGM JMS* =S.TR JMP *+3 LAC LVLRES JMS CHEW LAC LVLDGM LMQ LAC LVLHAL JMS* =S TI $DC * LAC =310 DAC CONY LAC =DICI DAC CONDIC TAD =1 DAC *+5 TAD =1 TA D* *+3 DAC *+7 JMS BUTX SDC 0 $DC LVLBUT CONY $DC 0 SDC 320 $DC 500 SDC 0 $DC * A-72

LAW -50 TAD CONY DAC CONY LAC* CONDIC SZA JMP CONY-11 JMS BUTX $DC RESTXT $DC LVLBUT $DC -400 $DC -34 $DC 500 $DC RES $DC 0 * JMS BUTX $DC SELT2 $DC LVLBUT $DC 400 $DC -400 $DC 500 $DC TRA $DC * DAC LVLTRA LAC =PENINT JMS PENSET LAW -100 JMS* =N.C JMP PENEND * CREATE NEW SYMBOL CONCRE $DC 0 DAC CONDIC J MS*:X.S JMP PENEND JMS PENHIT LAC TRAPEN JMS PENSET JMS* S.TL JMP PENEND A-73

DAC LVLFRG LAC PENY CMA TAD PENYL C MA LRSS 25 LAC LVL FRG JMS* =S oLY LAC PENX CMA TAD PENXL CMA LRSS 25 LAC LVLFRG JMS* =S LX JMS* =S.TL JMP CON8 DAC LVLSYM LMQ LAC LVLFRG JMS* =S.TI JMP CON7 CON LAC* CONDIC SPA JMP CON3 JMS* =S TL JMP CONS DAC LVLTMP LMQ LAC LVLSYM JMS* =S TI iMP CON6 CON2 LAC* CONDIC SPA JMP CONS ALS 2 LRSS 12 DAC *+13 LACQ LRSS 12 A-74

DAC *+11 LAC* CONDIC AND =600000 SNA LAC =PAR -PAR I NT+200000 TAD -PARI NT-200000 JMS LVL $DC LVLTMP $DC 0 $DC 0 $DC 500 JMP CON8 ISZ CONDIC JMP CON2 CON3 JMS* =S.TL JMP CON8 DAC LVLTMP LMQ LAC LVLSYM JMS* =S.TI JMP CON6 CON4 LAC* CONDIC S MA JMP CONS ALS 2 LRSS 12 DAC *+14 LACQ LRSS 12 DAC *+12 LAC* CONDIC AND =600000 SAD =400000 LAC =I NP SAD =600000 LAC =OUT JMl LVL SDC LVLTMP $DC 0 $DC 0 A-75

$DC 500 JMP CON8 ISZ CONDIC JMP CON4 CON5 LAC CONDIC TAD =1 LMQ LAC LVLSYM JMS* =S TI JMP CONS LAC LVLFRG LMQ LAC LVLDGM JMS* =S TI JMP CON8 LAC =PENMV JMS* =T S LAC* CONDIC JMS NAMDEF LAC LVLSYM /PAR XCT* CONCRE /PAR $DC 0 JMS* =T,F CON6 LAC LVLTMP SKP CON7 LAC LVLSYM MS CHEW CONS LAC LVLFR G JMS CHEW JMP PENEND CONTXT $DC 3 $TEXT WCONSTRUCT" * CREATE ELEMENT WITH NO GENERATION PARAMETERS CONNUL $DC 0 LAC SOlOO+1 XOR =400 DAC SO 00+1 A-76

LAC:SO10O JMS QASCM JMP* CONNUL * MOVE FRAGMENT LEVEL WITH TRACKING CROSS PENMV JMS TRAC LAC LVLFRG /PAR LAW -40 JMS* =NC JMP PENEND * INTERPRET HIT ON ELEMENT OR CONNECTION PENINT JMS PENLVL LAC LVLEAF SAD =OUT JMP- PENCON LAC LVLSYM JlM ATTR $DC 0 TAD =-1 DAC PENTMP LAC* PENTMP AND =200 S NA +C LA JMP *+14 JMS* -DO0 $DC 0 TAD:-1 SAD PENTMP SKP JMP PENEND LAC* PENTMP AND =200000 TAD =140 DAC PENCI1+1 JMP PENCIN JMS PENHIT LAC LVLFRG A-77

JMS ATTR $DC 0 CLA JMS ATTR SKP JMP PENMV LAW -5 DAC PENINC DZM PENIND LAC LVLSYM JMS COORDS $DC 0 DAC PENY LACQ DAC PENX PENTHR JMS PENREG $DC 160 ^ND =757 SZzA JMP PENMV JMS PENREG $DC 10 AND =202 SNA JMP *+7 SAD PENIND JMP *+5 DAC PENIND ISZ PENINC SKP JMP PENDEL JMS* X.S JMP *+3 JMP PENEND JMP PENTHR JPM* =TP * DELETE SYMBOL PENDEL JMS* =X.T A-78

LAC LVLFR LMQ LAC LVLDGM Jim* S.TR SDC 0 LAC LVLSYM JMS NAMGET $DC 0 DAC PENT.MP XOR =400 LLS 11 DAC SO101+1 LAC SO0101 JMS QASCM LAC = NAME TAD PENTMP DAC PENTMP DZ*t PENTMP LAC LVLFRG JMS CHEW JMP PENEND * TERMINATE CONNECTION LINE PENLIN JMS PENLVL LAC LVLEAF SAD =INP JMP PENINP LAC LVLSYM SAD PENSYM JMP PENEND JMS ATTR $DC 0 TAD =-1 DAC PENTMP LAC* PENTMP SPA JMP PENEND AND =200 SNA A-79

JMP PENEND DAC LINTYP JMS* =T.F PENINP LAC LINV DAC PENTMP ISZ PENTMP LAC* PENTMP SMA JMP PENEND DAC LINTYP LAC =QOOO1A LMQ LAC LVLOUT JM* =S.TR NOP JMS* =X.T JMS* =T.F * DRAW CONNECTION FROM OUTPUT PORT PENCON LAC =QOOOIA LMQ LAC LVLOUT JMS =S.TR NOP JMS PENHIT LAC LVLFRG DAC PENFRG JMS COORDS $DC 0 DAC PENFY LACQ DAC PENFX LAC LVLSYM DAC PENSYM LAC LVLPRT DAC PENPRT LAC LVLOUT DAC PENOUT JMS COORDS A-80

$DC 0 DAC PENY LACQ DAC PENX JMS LINDRW JMP PENEND SKP JMP PENIB LAC LVLOUT JMS COORDS $DC 0 DAC PENYT LACQ DAC PENXT JMS LINADJ JMS* =STL $DC * DAC LVLFRG LAC LINE LMQ LAC LVLSCR JMS* =S.TR $DC 0 LAC LINY CMA TAD PENFY CMA LRSS 3 DAC *+12 LAC LINX CMA TAD PENFX CMA LRSS 3 DAC *+5 LAC LVLFRG JMS LVL $DC PENFRG $DC 0 $DC 0 A-81

$DC 0 $DC 0 * DAC PENFRG LAW 10 LMQ LAC LVLFRG JMS* =S LP LAC PENOUT LMQ LAC LVLFRG J ES* =S.TI $DC 0 * LAC LVLOUT LMQ LAC LVLFRG JlS* =S TI $DC 0 * LAC LINE LMQ LAC PENFRG JMS* =S TI $DC 0 * LAC =OUT LMQ LAC PENOUT JMIS* =S.TR $DC 0 LAC -OUTCON LMQ LAC PENOUT JMS* =S TI $DC O * LAC =INP LMQ LAC LVLOUT JMS*:=STR $DC 0 LAC I NPCON LMQ LAC LVLOUT A-82

JMS* =S TI $DCO 0 LAC =201 DAC SO100+1 JMS NAMDEF LAC PENFRG /PAR JMS CONNUL /PAR $DC 0 LAC PENFRG JMS NAMGET $DC 0 ALSS t1 DAC S0103+1 ISZ S0103+1 LAC PENSYM JMS NAMGET $DC 0 ALSS 11 DAC S0103+2 LAC PENOUT LMQ LAC PENPRT J MS PENCNT XOR S0103+2 XOR =400 DAC SO 103+2 LAC =S0103 JMS QASCM ISZ S0103+1 LAC LVLSYM JMS NAMGET $DC 0 ALSS 1 DAC SO 103+2 LAC LVLOUT LMQ LAC LVLPRT JMS PENCNT XOR S0103+2 XOR =400 A-83

DAC SO 103+2 LA.C =S0103 JMS QASCM LAV -40 JMS* =N.C JMP PENEND * DETERMINE WHETHER TO DELETE CONNECTION OR DRAW OUTPUT BRANCH PENCIN JMS PENHIT LAC PENY LRSS 23 LAC LVLSCR JMS* =S.LY LAC PENX LRSS 23 LAC LVLSCR JMS* =S LX LAC.RAND LMQ LAC LVLSCR JMS* =S TI $DC * LAW -5 DAC PENINC DZ M PENIND DZM PENTYP PENCIl JMS PEEREG SDC 0 AND =757 SZA JMP PENOB JMS PENREG $DC 20 AND =252 LMQ LAC PENTYP OMQ DAC PENTYP SAD =252 A-84

JMP PENOB JMS PENR EG $DC 24 AND -202 S NA JMP *+7 SAD PENIND JMP *+5 DAC PENIND ISZ PENINC SKP JMP PENCDL JlS* =X.S JMP PENCI2 LAC LVLSCR JMS CHEWA JIP PENEND JMP PENCII PENCI2 J'MS* =T.P * DELETE CONNECTION PENCDL LAC LVLSCR JMS CHEWA JMSE*:X.T CLA JMS* D.P LAC LVLFRG TAD =4 DAC PENTMP LAC* PENTMP JPMS* =C.CB DAC PENY ISZ PENTMP LAC* PENTMP JMSS*:C.CB DAC PENX LAC LVLSYM DAC PENSYM LMQ A-85

LAC LVLFR G JMS*:S TR $DC 0 LAC PENSYM JMS ATTR $DC 0 CLA JMS ATTR $DC 0 DAC PENPRT PENCDI LAC PENPRT JMS ATTR JMP PENCD2 DAC PENOUT LMQ LAC PENPRT J MS* =S TR $DC 0 LAC PENOUT JMS ATTR $DC 0 DAC PENTMP LMQ LAC PENOUT JMS* =S.TR $DC 0 LAC PENTMP SAD:OUTCON LAC:OUT SAD =INPCON LAC I NP LMQ LAC PENOUT JMS* =S.TI $DC O JMS PENCDS JMS PENLVL LAC LVLSYM JMS NAMGET $DC 0 A-86

ALSS 11 DAC SO 104+1 LAC LVLOUT LMQ LAC LVLPRT JMS PENCNT XOR S0104+1 XOR =400 DAC S0104+1 LAC =S0104 JMS QASCM JMP PENCD1 PENCD2 LAC PENSYM JMS NAMGET $DC 0 DAC PENTMP XOR =400 ALSS 11 DAC SO101+1 LAC =S1I0 JMS QASCM LAC =NAME TAD PENTMP DAC PENTMP DZM* PENTMP LAC PENSYM J MS CHEW LAC =PENCQ 1 Jms* =Q.C LAC =PENCQ2 J MS* =Q.C PENCD3 LAC LVLFRG JMS ATTR JMP PENCD8 DAC PENSYM JMS* =S TL $DC * DAC PENFR G LMQ LAC LVLDGM A-87

JMS* =S.TI $DC * LAC PENY LMQ LAC PENFRG JMS* =SLY LAC PENX LMQ LAC PENFRG JMS* =S LX LAC PENSYM PENCD4 LMQ LAC LVLFRG JMS* S.TR JMP PENCD7 LAC PENSYM LMQ LAC PENFRG JMS* =S TI $DC O * LAC PENSYM Jms ATTR $DC 0 CLA JMS ATTR $DC 0 DAC PENPRT PENCD5 LAC PENPRT JMS ATTR JMPP PENCD6 DAC PENOUT LMQ LAC PENPRT JMS* =S TR $DC 0 LAC PENOUT LMQ LAC =PENCQ JMS* =Q.I $DC 0 A-88

LAC PENOUT JMS ATTR SDC 0 SAD I NP JMP PENCD5 SAD =OUT JMP PENCD5 JMS PENCDS LAW 2 JMS*:D.O $DC 0 LMQ LAC =PENCQ2 JMS* Q.I $DC 0 JMP PENCD5 PENCD6 LAC =PENCQI JMS* =Q.F JMP PENCD7 LMQ LAC PENPRT JMS* =S TI SDC 0 * JMP PENCD6 PENCD7 LAC =PENCQ2 JMS* =Q.F JMP PENCD3 DAC PENSYM JMP PENCD4 PENCDB LAC LVLFRG LMQ LAC LVLDGM JMS*:S.TR $DC 0 LAC LVLFRG JlS CHEW LAC TRAPEN JMS PENSET JMP PENEND A-89

PENCDS $DC 0 LAC'=*+6 LMQ LAC PENOUT JMS*.=S.LU JMS* =D.E JMS* -T.F LAC PENOUT JMS* =S LN MP* PENC DS PENCQ1 $DC *+34 $DS 34 PENCQ2 $DC *+34 $DS 34 A-90

$TITLE SELMA CONSTRUCTION FRAME (CONT.) * DRAW OUTPUT BRANCH PENOB LAC LVLFRG DAC PENFRG J MS COORDS $DC 0 DAC PENFY LACQ DAC PENFX LAC LVLSYM DAC PENSYM JMS ATTR $DC 0 TAD -- AC PENTMP LAC* PENTMP SAD =201 JMP *+6 RAL PA+R AR JMP PENCI1+16 TAD =400 JMP PENOB1 LAC PENTYP SAD =252 LAC =401202 SAD =401202 3KP LAC =401203 PENOBI DAC PENTYP AND =377 SAD =203 JMP PENOB2 LAC LVLSCR JIS CHEWA LAC =PRIO LMQ LAC LVLSCR A-91

JMS* =S TI $DC * PENOB2 LAC LVLPRT DAC PENPRT LAC LVLOUT DAC PENOUT J MS LINDRW SKP JMP *+4 LAC LVLSCR JMS CHEWA JMP PENEND LAC LVLOUT JMS COORDS $DC 0 DAC PENYT LACQ DAC PENXT JMS LINADJ LAC LVLFRG LMQ LAC PENFRG DAC LVLFRG LACQ DAC PENFRG LAC LVLSYM LMQ LAC PENSYM DAC LVLSYM LACQ DAC PENSYM LAC LVLPRT LMQ LAC PENPRT DAC LVLPRT LACQ DAC PENPRT LAC LVLOUT LMQ LAC PENOUT A-92

DAC LVLOUT LACQ DAC PENOUT JMP PENBCH;' TERMINATE MULTI-INPUT BRANCH )ENIB LAC LVLSYM JMS ATTR $DC 0 TAD — 1 DAC PENTMP LAC* PENTMP SAD =201 LAC LINTYP TAD =400 DAC PENTYP LAC LINV DAC PENTMP ISZ PENTMP LAC* PENTMP SPA+CLC JMP *+6 TAD LINV DAC LINV ISZ LINR LAC =1 SKP LAW -3 DAC PENTMP LAC PENX DAC PENXT C MA TAD LI NX CMA JMS LINSTR LAC PENTMP TAD LINV DAC LINV CLC A-93

TAD LINR DAC LINR LAC PENY DAC PENY T C MA TAD LINY CMA JMS LI NSTR LAC LVLFRG SAD PENFRG JMP PENBCH JlS COORDS $DC O CMA TAD PENFY CMA LRSS 3 DAC PENTMP LLS 25 CMA TAD PENFX CMA LRSS 25 LAC PENTMP J M PENMOV LAC PENFRG /PAR LAC LVLFRG /PAR LAC LVLFRG LMQ LAC LVLDGM JMS* =STR $DC 0 LAC LVLFRG JMS CHEW JMP PENBCH * ADD BRANCH TO CONNECTION & INFORM QAS PENBCH LAC LVLSYM JMS ATTR A-94

$DC 0 TAD =-1 DAC PENBC LAC* PENBC SAD =201 J M PENBC3 LAC LVLSYM Jlr NAMGET $DC 0 ALSS 11 XOR =1 DAC S0105+1 LAC PENTYP RAL AND =377000 XOR =400000 DAC S0105+2 LAC =S0105 JMS QASCM PENBCI CLA MS* =D.P LAC =*+6 LMQ LAC LVLSYM JMS* =S.LU JMS* =DE JMS* =T.F LAC LVLSYM JMS* =S LN LAC PENTYP S MA.JMP *+5 LAC LINY DAC PENYT LAC LI NX DAC PENXT LAC LVLSYM JMS COORDS $DC 0 DAC PENYB A-95

C MA TAD PENYT C MA LRSS I DAC PENYT LLS 23 DAC PENXB CMA TAD PENXT CMA LRSS I DAC PENXT CLC TAD PENBC DAC PENBCC LAW -2 TAD LINE DAC PENBCB LAC PENTYP AND:1 S NA+CLA LAW -3 TAD =-4 DAC PENBCN SAD — 7 LAC =PRI O- A ND-4 TAD =RAND+5 DAC PENTMP LAC PENBCN CMA TAD 1 TAD* PENBCB TAD* PENBCC JMS CORGET $DC * DAC PENBCT DAC PENBCP LAC PENTYP DAC* PENBCP ISZ PENBCP A-96

LAC =200500 DAC* PENBCP ISZ PENBCP LAC =201121 DAC* PENBCP ISZ PENBCP LAC PENYT JMS* =C BC XOR =2000 DAC* PENBCP ISZ PENBCP LAC PENXT JMS* =C BC XOR =6000 DAC* PENBCP iSZ PENBCP LAC PENBCN JMS CORMOV LAC PENBCP /PAR LAC PENTMP /PAR LAC PENBCN C A TAD =1 TAD PENBCP DAC PENBCP LAC LINE TAD =1 DAC PENTMP LAC PENTYP SMA JMP PENBC6 LAW -4 PENBC2 TAD* PENBCB DAC PENBCN CMA TAD =JMS CORMOV LAC PENBCP /PAR LAC PENTMP /PAR LAC PENBCN A-97

TAD PENBCP DAC PENBCP TAD — 1 DAC PENTMP LAC* PENTMP AND =3777 DAC* PENTMP LAC PENYT JMS* -C.BC DAC* PENBCP ISZ PENBCP LAC PENXT J M* =C BC XOR =4000 DAC* PENBCP ISZ PENBCP LAC PENBC TAD =2 DAC PENTMP LAW -4 TAD* PENBCC C MA JMS CORMOV LAC PENBCP /PAR LAC PENTMP /PAR LAC PENBC TAD =1 LMQ LAC LVLSYM JMS* =S TR $DC 0 LAC PENBCT TAD =LMQ LAC LVLSYM JMS* =S TI $DC 0 * LAC LVLSCR JMS CHEWA LAC PENBC A-98

JMS CORFRE LAC PENOUT JMS ATTR $DC 0 DAC PENTMP LMQ LAC PENOUT JMS*:S.TR $DC 0 LAC PENTMP SAD =- NP LAC -!NPCON SAD =OUT LAC -OUTCON LriQ LAC PENOUT JMS* =S TI $DC * LAC LVLSYM JMS ATTR $DC 0 DAC PENTMP CLA JMS ATTR $DC 0 DAC LVLPRT CLA JMS ATTR $DC 0 DAC LVLTMP LAC PENTYP AND =1 S NA+C LA LAC =PARI NT-PAR TAD:PAR DAC PENTMP LAC =*+6 LMQ LAC PENOUT JMS* =S LU A-99

JMS* =DE JMS* =TF LAC PENOUT.JMS* =S LN LAC TRAPEN JMS PENSET LAC PENOUT LMQ LAC LVLPRT JMS* S.TI $DC 0 * LAC PENOUT JMS COORDS $DC 0 TAD =20 CMA TAD PENYB CMA LRSS 1 DAC PENYT LLS 23 DAC PENXT LAC PENTYP SPA+CLA LAW -200 TAD =100 TAD PENXT CMA TAD PENXB CMA LRSS I DAC PENXT LAC PENTMP JMS LVL $DC LVLTMP PENYT $DC 0 PENXT $DC 0 $DC 500 $DC 0 * LAC LVLSYM A-100

JMS NAMGET $DC 0 ALSS I1 DAC S 103+1 LAC PENOUT LMQ LAC LVLPRT JMS PENCNT XOR S0103+1 DAC S0103+1 LAC PENSYM JMS NAMGET $DC 0 ALSS 11 DAC SO 10+2 LAC PENOUT LMQ LAC PENPRT JMS PENCNT XOR S0103+2 LAC PENOUT LMQ LAC PENPRT JMS PENCNT XOR S0103+2 XOR =400 DAC S0103+2 LAC =S0103 JMS QASCM LAW -40 JMS* =N,C JMP PENEND PENBC3 CLA JMS!* =D.P LAC =10 DAC PENYB LAC =40 DAC PENXB LAC LVLSYM A-101

JIM ATTR $DC 0 DAC PENTMP CLA JPS ATTR $DC 0 DAC LVLPRT CLA JMS ATTR JMP PENBC5 DAC LVLTMP LAC PENTYP AND 1l SNA+CLA LAC -PARINT-PAR TAD =PAR DAC PENTMP LAC PENTYP SMA JMP PENBC4 CLC TAD PENBC DAC PENBCC LAW -3 TAD* PENBCC TAD PENBCC DAC PENBCP LAC* PENBCP jMS* =C.CB CMA TAD PENYB DAC PENYB ISZ PENBCP LAC* PENBCP JM* =C,CB C MA TAD =* 100 TAD PENXB DAC PENXB PENBC4 LAC PENTMP A-102

JMS LVL $DC LVLTMP PENYB $DC 0 PENXB $DC 0 $DC 500 $DC 0 * LAC LVLPRT DAC PENBCP J MS ATTR $DC 0 DAC LVLTMP CLA JMS ATTR $DC 0 DAC PENTMP LIQ LAC PENBCP JMS*:S.TR $DC 0 LAC LVLTMP LMQ LAC PENBCP JM * -S TR $DC 0 LAC LVLSYM DAC PENBSV JMS NA MGET $DC 0 ALSS 11 DAC S0103+1 XOR =400000 DAC SOIOI+1 LAC =*+6 LMQ LAC PENT M JMS* =S,LU JMS* =DE JMS* =T.F LAC PENTMP JMS* =S.LN A-103

JMS PENLVL LAC LVLSYM JMS NAMGET $DC 0 ALSS I1 DAC S0104+1 LAC PENTMP LMQ LAC LVLPRT JiM PENC #T XOR =400 XOR S0104+1 DAC S0104+1 DAC SO103+2 LAC =S0104 J MS QASCM LAC =*+6 LMQ LAC LVLTMP JMS* =S.LU.JM* =DE JMS* T,F LAC LVLTMP JMS* =S.LN JMS PENLVL LAC LVLSYM JMS NAMGET $DC 0 ALSS 11 DAC S0104+1 LAC LVLTMP LMQ LAC LVLPRT JMSE PENCNT XOR =400 XOR S0104+1 DAC S0104+1 LAC =S0104 JMS QASCM LAC =SOIOI A-104

JMS QASCM LAC PENTYP AND =377 XOR S0101+1 XOR =400000 DAC SO1OO+I LAC =402000 DAC S0100+2 LAC =SOIOO JMS QASCM ISZ SO103+1 LAC PENTYP SMA ISZ S0103+1 LAC =S0103 J M QASCM LAC S0104+1 DAC S0103+2 LAC S0103+1 XOR =3 DAC S0103+1 LAC =S0103 JMS QASCM LAC PENBSV DAC LVLSYM LAC PENTMP LMQ LAC PENBCP JMS* =S TI $DC * LAC LVLTMP LMQ LAC PENBCP JMS* =S TI $DC * JMP PENBC1 PENBC5 LAC PENTMP LMQ LAC LVLSYM JMS* =S TR A-105

$DC 0 LAC LVLPR T LMQ LAC LVLSYM JMS* =S TR $DC 0 JMS* =S TL $DC 0 * DAC LVLTMP LMQ LAC LVLSYM JMS* =STI $DC 0 * LAC LVLPRT LIMQ LAC LVLSYM JMS* =S TI $DC 0 LAC PENTMP LMQ LAC LVLSYM JMS* =S.TI $DC 0* JMP PENBC3+22 PENBC6 LAC =201121 DAC* PENBCP ISZ PENBCP LAC* PENTMP ISZ PENTMP SMA JMP *-3 DAC* PENBCP ISZ PENBCP LAC* PENTMP ISZ PENTMP AND =3777 DAC* PENBCP ISZ PENBCP LAC LINE TAD =2 A-106

DAC PENTMP LAW -7 JMP PENBC2 A- 10 7

$TITLE SELMA RESULTS FRAME RES JMS* =X.S JMP PENEND LAC LVLBUT J lMS CHEWA LAC LVLDGM LMQ LAC LVLHAL JMS* =S.TR NOP LAC LVLDGM LMQ LAC LVLHAL JMS* =S TI $DC 0* JMS BUTX $DC SELT2 $DC LVLBUT $DC -400 $DC -400 $DC 500 $DC TRA $DC * DAC LVLTRA LAC. PENID JMS PENSET JMS BUTX $DC CONTXT $DC LVLBUT $DC -400 $DC - 160 $DC 500 $DC CON $DC 0 * JMS BUTX $DC PLOTXT $DC LVLBUT $DC - 400 $DC 50 A- 108

$DC 500 $DC PLO $DC * JMS BUTX $DC RESTYP $DC LVLBUT $DC -400 $DC 200 $DC 500 $DC REST $DC * DAC LVLTYP LAW -67 DAC PENIDT+1 DZM LVLRES LAW - 100 JMS* =NC JMP PENEND I IDENTIFY SYMBOL'ENID JPS PENLVL LAC LVLSYM JMS NAMGET $DC 0 DAC PENIDN AND =200 SZA JMP PENEND LAC PENIDN TAD — 67 DAC PENIDT+1 LAC LVLRES LMQ LAC LVLDGM JMS*:=STR JMP *+3 LAC LVLRES JlM CHEW JMS PENHIT A- 109

LAC LVLDGM JMS COORDS $DC 0 CMA DAC PENIDY LACQ C MA DAC PENIDX LAC LVLSYM JPM COORDS $DC 0 TAD =121 TAD PENIDY LRSS 1 DAC PENI DY LLS 23 TAD — 77 TAD PENIDX LRSS I DAC PENIDX JMs BUTX $DC PENIDT $DC LVLDGM PENIDY $DC 0 PENIDX $DC 0 $DC 540 $DC PENIDC $DC 0 DAC LVLRES LAC =R ESB OX LMQ LAC LVLRES JMS* S.TI SDC 0 * JfS* =X,S JMS* =T.P JMP PENEND * REMOVE ELEMENT LABEL A-110

PENIDC LAC LVLRES LMQ LAC LVLDGM JMS* =S TR $DC 0 LAC LVLRES JISE CHEW LAW -67 DAC PENIDT+1 JMP PENEND REST LAC PENIDT+I TAD =67 XOR =400 LLS 11 DAC S0303+1 LAC LVLTYP LAC LVLBUT JMS* =S.TR $DC 0 LAW -100 JMSP* =NC LAC LVLTYP LMQ LAC LVLBUT JiM* =S TI $DC 0 LAC =S0303 JMS QASCM JMP PENEND PENIDT $DC I $DC 0 IESTXT $DC 3 $TEXT "RESULTS" IESTYP $DC 2 $TEXT "TYPE" A- ll

RESBOX $DC 700 VEC $DC 2002 $DC 0 $DC 6020 $DC 0 $DC 4000 $DC 20 $DC 4020 SDC 0 $DC 4000 $DC 2020 $DC 2 $DC 4000 POP A-112

$TITLE SELMA PLOT FRAME PLO JMS* X.S JMP PENEND LAC PB TR+2 JMES* P.T DZM LVLVX DZM LVLVY LAC KBDTBL DAC PLOKBD LAC =KBDS DAC KBDTBL LAC LVLBUT J M CHEWA LAC LVLDGM LMQ LAC LVLHAL JMS,* =S.TR NOP LAC LVLRES LMQ LAC LVLDGM JMS* =S.TR JMP *+3 LAC LVLR ES JMS CHEW DZM LVLRES LAC =PENGPH JMS* =D.P LAC:PLOAX LMQ LAC LVLBUT JMS* =S.TI $DC 0 * JMS BUTX $DC PLODGM $DC LVLBUT $DC -400 $DC -34 $DC 500 A-113

$DC DGM $DC 0 * DAC LVLESC LAW -67 SAD PENIDT+1 JMP PLOALL LAC PENIDT+1 XOR =420100 DAC PLOLBE+6 JMS BUTX $DC PL OLB E $DC LVLBUT $DC -320 $DC -110 $DC 500 $DC PENEND $DC * JMP *+11 PLOALL JMS BUTX $DC PLOLBA SDC LVLBUT $DC -320 $DC -124 $DC 500 $DC PENEND $DC O * JMS BUTX $DC PLORT $DC LVLBUT $DC 310 $DC 320 $DC 500 $DC PLORTT $DC * DAC LVLPR JMS BUTX $DC PLOLT $DC LVLBUT $DC 240 $DC 320 A-114

$DC 500 $DC PLOLTT $DC O * DAC LVLPL JMSE BUTX $DC PLODT $DC LVLBUT $DC 170 $DC 320 $DC 500 $DC PLODTT $DCO 0 DAC LVLPD JMS PLOCLR LAW -300 LMQ LAC LVLSCR JMS* =S.LX LAW -300 LMQ LAC LVLSCR JMS* =S.LY LAC PENIDT+I TAD =467 ALS 11 DAC S0300+1 LAC =S0300 JMS QASC MR Z M PLOST LAC QASCMS SNA JMP PENEND SKP JMP *-4 JMS* =T.P DGM LAC PLOKB D DAC KBDTBL LAC =PBT JMS* =P.T A-115

JMS PLOCLR JMP RES * MODIFY PLOT PLODTT LAC LVLPD SKP PLORTT LAC LVLPR SKP PLOLTT LAC LVLPL DAC LVLPLO JMS* S.LN LAW 10 LMQ LAC LVLESC JMS* =S,LP. LAW 10 LMQ LAC LVLPD SAD LVLPLO SKP JMS,* =S.LP LAW 10 LMQ LAC LVLPR SAD LVLPLO SKP JMS* S SLP LAW 10 LMQ LAC LVLPL SAD LVLPLO SKP JMS* =S.LP LAC P ENSHF JMS* =DP LAC =400000 DAC S0301+2 DZM PLOSW JMS* =D.E A-116

LAC PLOSW SZA JMP *+4 SKP JMP *-4 JMS* S =T.P LAC LVLPLO SAD LVLPD JMP PLOD SAD LVLPR JMP *+20 LAC PLOCNT TAD =-61 TAD PLOST SPA CLA DAC PLOEEG CMA TAD PLOST TAD =2 TAD PLOCNT ALSS 11 XOR =400000 DAC S0301+2 LAC PLOBEG JMP *+3 LAC PLOCNT TAD PLOST DAC PLOST JIM KBDCOD DAC S0301+1 PLOEND LAC LVLPLO SAD LVLPD LAC =PLODTT SAD LVLPR LAC =PLORTT SAD LVLPL LAC =PLOLTT LMQ LAC LVLPLO A-117

JMS I S SLL LAW 500 LMQ LAC LVLPD JMS* =S.LP LAW 500 LMQ LAC LVLPR JMS* =S LP LAW 500 LMQ LAC LVLPL JMS* S.LP LAW 500 LMQ LAC LVLESC J'MS* =S LP LAC =PENGPH jMS* =D.P LAC =S0301 JMS QASCMR LAC QASCMS SNA JMP PENEND SKP.JMP *-4 JMS* =T.P PLOD JMS PENHIT JMS* =X.S JMS* =T,P LAC PLOCNT DAC PLOSAV DZM PLOSW JMS* =D,E LAC PLOSW SZA JMP *+4 SKP JMP *-4 JMS* =T.P A-118

LAC PLOCNT CMA TAD PLOSAV CMA ALS 11 XOR =400000 SPA JMP *+6 C MA TAD =2000 DAC S0301+2 LAC PLOCNT JMP *+4 TAD =1000 DAC S0301+2 LAC PLOSAV TAD PLOST DAC PLOST JMS KBDCOD DAC S0301+1 JMP PLOEND * DISPLAY VALUE PENGPH JMS* =D.A TAD =-PLOGPH-3 AND =777770 DAC PENGPI LRSS 3 TAD PLOST JMS KBDCOD XOR =400 DAC S0302+1 LAC =S0302 JMS QASCM LAC PENGP1 TAD =PLOGPH+4 DAC Q01021 LAC* Q01021 AND =1777 A-119

TAD — 300 DAC Q01021 JMS* -T.F * SHIFT GRAPH PENSHF JMSE* =D,A TAD =-PLOGPH-3 LRSS 3 DAC PLOCNT CLC DAC PLOSW JMS* =TF A-120

* CLEAR GRAPH * CALLING SEQUENCEr * JMS PLOCLR * * — (RETURN) PLOCLR $DC 0 LAC LVLSCR JMS CHEWA LAW -1000 DAC PLOCI LAC =PLOGPH+2 DAC PLOC2 DZM* PLOC2 ISZ PLOC2 ISZ PLOC JMP *-3 LAC =PLOGPH LMQ LAC LVLSCR JMS* =S *TI $DC 0 * LAC =PLOGPH+3 DAC PLOPTR MJP* PLOCLR PLOGPH $DC 560 VEC $DS 1000 $DC 0 $DC 4000 POP A-121

* DISPLAY LABEL FROM DATAPHONE BUFFER * CALLING SEQUENCE: * JMS PLOLBL * $DC ---- (Y COORDINATE) * $DC — *" (X COORDINATE) * VW g (RETURN) PLOLBL $DC 0 LAC* PLOLBL ISZ PLOLBL TAD =300 DAC PLOLBY J MS QASR DAC PLOLBB CMA TAD =1 DAC PLOLBC CLL ALS 2 TAD* PLOLBL ISZ PL OLBL TAD 3=00 DAC PLOLBX LAC =PLOLBB+1 DAC PLOLBP jMS QASR XOR =777700 DAC* PLOLBP ISZ PLOLBP ISZ PLOLBC JMP *-5 JMS BUTX $DC PLOLBB $DC LVLSCR PLOLBY $DC 0 PLOLBX $DC 0 $DC 500 $DC PENEND $DC 0 * JMP* PLOLBL A-122

PLOLBB $DS 20 A-123

PLOTXT $DC 2 $TEXT "PLOT" PLODGM $DC 3 $TEXT "DIAGRAM" PLOLBE $DC 6 $TEXT "STATE OF ELEMEN" $DC 0 PLOLPA $DC 7 STEXT "STATE OF ENTIRE MODEL" PLORT $DC 2 STEXT "RIGHT" PLOLT $DC 2 STEXT "LEFT" PLODT $DC 2 $TEXT "DETAIL" PLOTT $DC 2 STEXT " YPE" A- 124

PLOAX SDC 500 VEC $DC 300 $DC 2300 $DC 6600 $DC 0 $DC 4000 $DC 620 $DC 300 $DC 6320 POP A-125

$TITLE SELMA GLOBAL DISPLAY TASKS * TERMINATE DISPLAY SERVICE PENEND LAC QASCM+2 SZA JMP *+4 JMS* =DoE JMS* =ToF JMP PENEND JMS* =ToP * PARAMETER DISPLAY TASK PENPAR LAC KBDPB SNA JMP PENEND SAD =1 SKP J JP *+4 LAC KBDPB+1 SAD =777761 JMP PENEND JMS PENLVL LAC LVLEAF SNA JMP PENEND SAD =PAR JMP *+10 SAD =PARINT:JMP *+6 LAC* LVLEAF AND:7777 SAD =2010 SKP JMP PENEND LAC* LVLEAF XOR KBDPM SPA JMP PENEND A-126

LAC LVLSY M JMS NAMGET $DC 0 ALSS I DAC SO 02+1 LAC LVLOUT LMQ LAC LVLPRT JMS PENCNT XOR S0102+1 DAC S0102+1 LAC LVLEAF LMQ LAC LVLOUT JM* =S TR $DC 0 LAC KBDPB TAD =-4 S MA CLA TAD:4 DAC KBDPB LAC* KBDPP XOR =400 DAC* KBDPP LAC =KBDPB DAC PENPA3 LAW -4 DAC PENPA LAC =S0102+2 DAC PENPA2 ISZ PENPA3 LAC* PENPA3 ALSS 11 ISZ PENPA3 XOR* PENPA3 XOR =77077 DAC* PENPA2 ISZ PENPA2 ISZ PENPA I A-127

JMP *I11 LAC S 01 02 JMS QASCM LAC* KBDPP XOR =400 DAC* KBDPP LAC* LVLEAF LRS 14 AND =7 C MA DAC PENPA1 LAC LVLOUT TAD =4 DAC PENPA2 LAC LVLEAF JMS CHEWA LAC LVLEAF SAD =PAR JMP *+4 SAD =PARINT SKP JMP *+7 LAC* PENPA2 JMS* =C.CB TAD =-4 LMQ LAC LVLOUT JMS* =S LY LAC PENPA TAD KBDPB CMA+CLL ALS 2 DAC PENPA3 ISZ PENPA-2 LAC* PENPA2 JMS* =C.CB TAD PENPA3 LMQ LAC LVLOUT JMS* =S.LX A-128

LAC =KBDPB JMS* =LD JMP PENREJ DAC LVLEAF LMQ LAC LVLOUT JMS*:=S TI JMP PENCHW LAC =QOOOIA LMQ LAC LVLOUT JMS* =S.TR NOP LAC* LVLEAF AND =7777 DAC* LVLEAF LAC KBDPM AND =40 XOR KBDPB ALSS 4 XOR* LVLEAF DAC* LVLEAF JMP PENREJ+10 PENREJ LAC KBDPM SMA+CLA LAC =PARI NT-PAR TAD =PAR LMQ LAC LVLOUT JMS* =S.TI $DC 0 LAC KBDPLP J MS PENS ET LAC KBDPSV DAC KBDTBL DZM KBDPB LAC =KBDPB DAC KBDPP LAC LVLSCR JMS CHEWA A-129

LAC KBDVSW SNA JMP *+5 LAW 17475 JMS* =B.T LAW 10 JMr* =-TR LAW -40 JMS* =NC JMP PENEND PENCHW LAC LVLEAF JMS CHEW JMP PENREJ * TRANSLATION TASKS TRA JMS* =X,S JMP PENEND LAC TRAS SZA J MP *+11 LAW -360 DAC TRAS LMQ LAC LVLTRA JMS* =S LY LAC =PENTRA JMS* =D.P JMP *+3 LAC TRAPEN JMS PENS ET LAW -40 JMS* =N.C JMP PENEND PENTRA JMS PENHIT JMS TRAC LAC LVLDGM /PAR LAC LVLDGM A- 130

J MS COORDS $DC 0 DAC PENYL LACQ DAC PENXL JMP PENEND A-131

STITLE SELMA GRAPHICAL TABLES * SYMBOL DICTIONARY DICI $DC DIC2 $DC 2 $TEXT "QUEUE" LAC =*+3 JMS CONCRE JMS CONNUL /PAR $DC 200000 INTEGER PARAMETER AT (0,0) #1 $DC 400354 INPUT PORT AT (-24,0) #1 $DC 600034 OUTPUT PORT AT (34,0) #2 $DC I QUEUE $DC 500 VEC $DC 0 $DC 4024 I NCR $DC 7252 $DC 5372 $DC 5352 $DC 7373 $DC 6354 $DC 5374 $DC 5374 $DC 7464 $DC 5574 $DC 5554 $DC 7575 $DC 6556 $DC 5576 $DC 5576 $DC 5676 $DC 5657 $DC 7657 $DC 5677 $DC 7767 $DC 5057 $DC 7057 A-132

$DC 7070 $DC 6051 $DC 7051 $DC 5071 $DC 7161 $DC 5251 $DC 7251 $DC 7252 $DC 1400 VEC $DC 0 $DC 6024 POP DIC2 $DC DIC3 $DC 2 $TEXT "SERVER" LAC =*+3 JMS CONCRE JMS CONNUL /PAR $DC 0 REAL PARAMETER AT (0.0) #1 $DC 400354 INPUT PORT AT (-24.0) #1 $DC 600034 OUTPUT PORT AT (34,0) #2 $DC 2 SERVER $DC 500 VEC $DC 24 $DC 24 $DC 4000 $DC 2050 $DC 6050 $DC 0 $DC 4000 $DC 50 $DC 4050 $DC 0 SDC 2024 SDC 6024 POP A-133

DIC3 $DC DIC4 $DC 2 $TEXT "SOURCE" LAC =*+3 JMSE CONCRE JMS CONNUL /PAR $DC 600010 OUTPUT PORT AT (10,0) #1 $DC 3 SOURCE $DC 500 SVEC $DC 1400 $DC 7400 $DC 7300 $DC 1340 POP DIC4 $DC 0 $DC 2 STEXT " EXIT LAC =*+3 J MS CONCRE JIS CONNUL /PAR $DC 400000 INPUT PORT AT (0,0) #1 $DC 3 EXIT $DC 500 POP A-134

* GRAPHICAL PORTS * OUTPUT PORT (UNCONNECTED) OUT SVEC SDC 30 $DC 4050 POP * OUTPUT PORT (CONNECTED) OUTCON SVEC $DC 30 $DC 4050 POP * INPUT PORT (UNCONNECTED) INP SVEC $DC 30 $DC 4050 POP * INPUT PORT (CONNECTED) INPCON SVEC $DC 4727 $DC 3721 $DC 4707 $DC 0141 POP * UNASSIGNED REAL PARAMETER PAR $DC 401111 $DC 5255 $DC 5751 SDC 400 POP UNASSIGNED INTEGER PARAMETER PARINT INCR $DC 5255 $DC 5751 $DC 400 POP * RANDOM BRANCH NODE RAND $DC 200500 $DC 201111 $DC 5164 A-135

$DC 6660 $DC 5204 $DC 203000 * PRIORITY BRANCH NODE PRIO $DC 200500 $DC 201141 $DC 10 $DC 5030 $SC 7030 $DC 7010 $DC 5010 $DC 70 $DC 203000 A-136

$TITLE SELMA LINE DRAWING SUBROUTINES * DRAW CONNECTION LINE * CALLING SEQUENCES * JMS LI NDRW * w —- (RETURN IF LINE NOT COMPLETED) * --- (RETURN IF LINE ENDED ON PORT) * ---- (RETURN IF LINE ENDED ON CONNECTION) * LINE STARTS AT COORDINATES IN PENX AND PENY LINDRW $DC 0 LAC PENY DAC LINY LRJSS 23 LAC LVLSCR JMS* =SLY LAC PENX DAC LINX LRSS 23 LAC LVLSCR JlM* =S LX LAC =12 JMS CORGET J MP* LI NDR W DAC LINE ISZ LINE DAC LINTMP LAC =201 DAC* LINTMP ISZ LINTMP LAC =200500 DAC* LINTMP ISZ LINTMP LAC:201121 DAC* LINTMP ISZ LINTMP LAC =4000 DAC* LINTMP ISZ LINTMP DZM* LINTMP A- 137

ISZ LI NTMP LAC LINTMP DAC LINVEC LAC =4000 DAC* LI NTMP ISZ LI NT.MP DZ M* LI NTMP ISZ LINTMP LAC LI NTMP DAC LINRET LAC =400000 DAC* LI NTMP ISZ LI NTMP LAC =4000 DAC* LINTMP ISZ LINTMP LAC =203000 DAC* LINTMP LAC LINE LMQ LAC LVLSCR JMS* =S.TI JMP LINDEL DZM LINTYP LAC =PENLIN JMS* =D.P JMS* =D.E JMP LINXL LINDEL LAC LINE JMS CHEW J MP *+3 LINCHW LAC LVLSCR J MS CHEWA JMS* =D.D LAC TRAPEN JMS PENSET J MP LI NDR W LINXL LAC LINVEC DAC LINV ISZ LINV A-138

LAC LI NR ET DAC LI NR ISZ LINR LI NXM SKP SKP JMS* =T.P JPSE* =X.X C MA TAD LINX CMA JMS LI NSTR J MS PENREG SDC 100 AND =707 SZ A JMP LINXA MS PENR EG $DC 40 AND =555 S NA JMP LINXS LI NONE LAC LINTYP SAD =200 JMS LINCON JMPS* X.S JMP LI NXM LAC LINTYP S NA J MP LINCHW LAC:PENINT JMS PENS ET ISZ LI NDRW JMP* LI NDR W LI NXA LAW -5 TAD LI NV SAD LINE SKP JMP *+13 J M PENREG $DC 100 A-139

AND:555 SZA JMP *+6 LAC PENX CMA TAD LI NX CMA JES LI NSTR LAC* LI NV JMS* =C CB RCL TAD PENX DAC PENX LAC LINE LMQ LAC LVLSCR JMS* =S.TR $DC 0 LAC LINE JMS LI NEXT DAC LINE /PAR DAC LINVEC /PAR DAC LINRET /PAR JMP LINDEL LAC LINE LMQ LAC LVLSCR JMS* =S TI JMP LINDEL JMP LINYL LINXS LAW -5 TAD LINV SAD LINE JMP LI NONE LAC PENX CMA TAD LINX CMA JMS LINSTR LAC LINE A-140

LMQ LAC LVLSCR J'M* =S.TR $DC 0 LAC LINE JMS LINTRM DAC LINE /PAR DAC LINVEC /PAR DAC LINRET /PAR JMP LINDEL LAC LINE LMQ LAC LVLSCR JMS* =S.TI JMP LI NDEL LAC* LINVEC XOR:2000 J MS* cC CB RCL A D PENY DAC PENY JINYL LAC LINVEC DAC LINV LAC LI NR ET DAC LINR i NYM SKP SKP JMSe* =TP JlS* =X Y CMA TAD LINY CMA JMS LI NSTR JMS PENREG $DC 100 AND =555 SZA JMP LINYA JMS PENR EG $DC 40 A-141

AND =707 S NA JMP LINYS LAC LINTYP SAD =200 JMS LI NCON JMS* X OS JMP LINYM JMP LI NCHW LINYA LAC* LINV JMS* =C.CB RCL TAD PENY DAC PENY LAC LINE LMQ LAC LVLSCR JMS* =S.TR $DC 0 LAC LINE JMS LI NEXT DAC LINE /PAR DAC LINVEC /PAR DAC LINRET /PAR JMP LINDEL LAC LINE LMQ LAC LVLSCR JMS* sS.TI JMP LI NDEL JMP LINXL LI NYS LAC PENY C MA TAD LINY CMA JMS LINS TR LAC LINE LMQ LAC LVLSCR J MS* =S TR A-142

$DC 0 LAC LINE J S LI NTRM DAC LINE /PAR DAC LINVEC /PAR DAC LINRET /PAR JMP LINDEL LAC LINE LMQ LAC LVLSCR JMS* =STI JMP LINDEL LAC LINVEC DAC LINV ISZ LINV LAC* LINV XOR =2000 JMS* =C CB RCL TAD PENX DAC PENX JMP LINXL+3 INCON $DC 0 LAC PENX DAC PENXT LAC PENY DAC PENYT JMS PENHIT JMS* =X S J MP LI NR EG- LAC =200603 I NDUN DAC LINTYP LAC TRAPEN JMS PENSET JMS* =X XT ISZ LI NDRW ISZ LI NDR W J MP* LINDRW DZM LINTYP.INREG JMS PENREG A-143

$DC 140 AND:20 SZA JMP *+ I DZ LINTYP LAC PENXT DAC PENX LAC PENYT DAC PENY ISZ LI NCON JMS* =D.E JMP* LINCON JMS PENREG $DC 20 AND =252 LMQ LAC LINTYP OMQ DAC LINTYP SAD =252 JPI *+5 J MS* =X.S JMP *+6 JMS* =D.D JMP LI NDUN-I LAC =200602 JMP LINDUN J MP LINREG J'MS* =T.P A-144

* STORE COORDINATE IN LINE BLOCK * CALLING SEQUENCE: * JMS LINSTR *.-.. (RETURN) * AC CONTENT ON ENTRYt * DESIRED COORDINATE AT END OF LINE RELATIVE TO BEGINNING LINSTR $DC 0 AND =777770 LRSS I DAC LINI JMS* =C BC XOR =2000 DAC LIN2 LAC* LI NR JflE* =C CB DAC LIN3 LAC* LINV JMS* =C.CB TAD LIN3 TAD LINI JMS* =C BC XOR* LINV AND =3777 XOR* LI NV DAC* LINV LAC* LI NR AND =774000 XOR LI N2 DAC* LINR JMP* LINSTR A-145

* EXTEND NON-ACTIVE LINE BLOCK * CALLING SEQUENCEt * JMS LINEXT * DAC ---- (DAC POINTER TO NEW BLOCK) * DAC ---- (DAC POINTER TO LAST VECTOR) * DAC — *- (DAC POINTER TO RETURN VECTOR) * --- (RETURN IF NOT ENOUGH STORAGE) * ---- (RETURN) * AC CONTENT ON ENTRY: * POINTER TO BLOCK TO BE EXTENDED (SECOND LOCATION) LINEXT $DC 0 TAD =-1 DAC LINI DAC LIN2 TAD =-1 DAC LI N3 LAC* LIN3 TAD =1 JMS CORGET JMP LINE DAC LI N3 TAD =1 XCT* LI NEXT ISZ LI NEXT LAC* LI N2 SPA JMP *+5 DAC* LI N ISZ LIN2 ISZ LI N3 JMP *-6 LAC LIN3 XCT* LI NEXT ISZ LINEXT LAC =4000 DAC* LIN3 ISZ LIN3 DZM* LIN3 ISZ LIN3 A-146

LAC LIN3 XCT* LI NEXT LAC* LI N2 ISZ LI N2 DAC* LI N3 ISZ LI N3 LAC* LI N2 DAC* LIN3 ISZ LI N3 LAC =203000 DAC* LIN3 LAC LINI JMS CORFRE SKP LINE1 ISZ LINEXT SZ LI NEXT ISZ LI NEXT JMP* LI NEXT A-147

* SHORTEN NON-ACTIVE LINE BLOCK * CALLING SEQUENCE: * JMS LINTRM * DAC -( — (DAC POINTER TO NEW BLOCK) * DAC ---- (DAC POINTER TO LAST VECTOR) * DAC — a- (DAC POINTER TO RETURN VECTOR) *.. — (RETURN IF NOT ENOUGH STORAGE) * ---- (RETURN) * AC CONTENT ON ENTRYt * POINTER TO LINE BLOCK (SECOND LOCATION) LINTRM $DC 0 TAD =-1 DAC LI N DAC LIN2 TAD:-1 DAC LIN3 LAW -3 TAD* LI N3 J MS COR GET JMP LINTI DAC LIN3 TAD =1 XCT* LINTRM ISZ LINTRM LAC* LIN2 SPA JMP *+5 DAC* LIN3 ISZ LI N2 ISZ LIN3 JMP *-6 LAW -4 TAD LI N3 XCT* LINTRM ISZ LI NTRM TAD =2 DAC LI N3 XCT* LINTRM LAC* LI N2 A-148

ISZ LI N2 DAC* LI NS ISZ LI N3 LAC* LI N2 DAC* LIN3 ISZ LI N3 LAC =203000 DAC* LIN3 LAC LINI JMS CORFR E SKP LINTI I SZ LINTRM ISZ LINTRM ISZ LINTRM JMP* LI NTRM A-149

* ADJUST END OF LINE * CALLING SEQUENCE: * JMS LI NADJ * -- - (RETURN) * LINV & LINR SET TO X VECTOR ON ENTRY LINADJ $DC 0 LAC PENXT CMA TAD LI NX CMA JMS LINSTR LAC LVLFR G SAD PENFRG JMP LINA JMS COOR DS $DC 0 TAD PENY CMA TAD PENFY TAD PENYT CMA LRSS 3 DAC PENTMP LLS 25 CMA TAD PENFX C MA LRSS 25 LAC PENTMP JMS PENMOV LAC PENFRG /PAR LAC LVLFRG /PAR LAC LVLFRG LMQ LAC LVLDGM JMS*:S TR $DC 0 LAC LVLFRG JMS CHEW A-150

JMP* LINADJ LINAI LAW -3 TAD LINV DAC LI NV CLC TAD LINR DAC LINR LAC PENYT C MA TAD LI NY CMA JS LI NS TR JMP* LI NADJ A-151

$T I TLE SELMA DISPLAY SUPPORT SUBROUTINES * GENERATE INTERMEDIATE LEVEL * CALLING SEQUENCEt * JMS LVL * $DC ---- (LOC CONTAINING POINTER TO OWNER) * $DC (* — (Y COORDINATE) * $DC --- (X COORDINATE) * $DC - -- (DISPLAY PARAMETER) * ---- (RETURN IF DISPLAY STORAGE EXCEEDED) * ---- (RETURN) * AC CONTENTS ON ENTRY: * POINTER TO ATTRIBUTE * AC CONTENTS ON RETURN: * POINTER TO CREATED LEVEL LVL $DC 0 JMS* =To. $DC 0 DAC LVL4 JMS* =S TL JMP LVL3 DAC LVL5 LAC LVL4 LMQ LAC LVL5 JMS* =STI JMP LVL2 LAC* LVL+2 DAC LVL4 ISZ LVL+2 LAC* LVL+2 LMQ LAC LVL5 JMS* =S.LY ISZ LVL+2 LAC* LVL+2 LMQ LAC LVL5 JMS* =S LX A-152

ISZ LVL+2 LAC* LVL+2 LMQ LAC LVL5 JMS* =-S.LP LAC LVL5 LMQ LAC* LVL4 JIMS* S.TI LJMP LVL1 LAC LVL5 JMP LVL3+2 LVL I LAC LVL JMS ATTR $DC 0 LMQ LAC LVL. J S* =S.TR $DC 0 LAC LVL5 JMS* =S TD $DC 0 JMP LVL3+3 LVL2 LAC LVL5 JMS* =S TD $DC 0 LVL3 ISZ LVL+2 ISZ LVL+2 ISZ LVL+2 ISZ LVL+2 JMS* =T.U $DC LVL A- 153

* FORM LIGHT BUTTON FROM PREDEFINED STRUCTURE * CALLING SEQUENCE: * JMS BUTN * $DC -— s (LOC CONTAINING POINTER TO OWNER) * $DC -- - (Y COORDINATE) * $DC --- (X COORDINATE) * $DC w — - (DISPLAY PARAMETER) * $DC -$ - (SERVICE TASK ADDRESS) * -- - (RETURN IF DISPLAY STORAGE EXCEEDED) * * —-- (RETURN IF SUCCESSFUL) * AC CONTENTS ON ENTRY: * POINTER TO STRUCTURE FOR BUTTON DISPLAY * AC CONTENTS ON RETURN: * POINTER TO LIGHT BUTTON LEVEL BUTN $DC 0 JMS* =T.L $DC 0 DAC BUTN3 LAW -4 DAC BUTN4 LAC =BUTNI DAC BUTN5 LAC* BUTN+2 DAC* BUTN5 ISZ BUTN+2 ISZ BUTN5 ISZ BUTN4 JMP *-5 LAC BUTN3 JMS LVL BUTNI $DC 0 $DC 0 $DC 0 $DC 0 JMP BUTN2 DAC BUTN3 LAC* BUTN+2 LMQ LAC BUTN3 A-154

J MS* S.LL LAC BUT N3 ISZ BUTN+2 BUTN2 ISZ BUTN+2 JPS* =TMU $DC BUTN A-155

* CREATE TEXT LIGHT BUTTON * CALLING SEQUENCE: * JMS BUTX * $DC * —- (ADDRESS OF TEXT LIST) * $DC — gs (LOC CONTAINING POINTER TO OWNER) * $DC ---- (Y COORDINATE) * $DC ---- (X COORDINATE) * $DC ---- (DISPLAY PARAMETER) * $DC ---- (SERVICE TASK ADDRESS) *.. — (RETURN IF DISPLAY STORAGE EXCEEDED) * ---- (RETURN IF SUCCESSFUL) * AC CONTENTS ON RETURN: * POINTER TO LIGHT BUTTON LEVEL B UTX $DC 0 JMS* -TL $DC O LAC* BUTX+2 JMS* =L.D JMP BUTX4 DAC BUTX7 LAW -6DAC' BUTX5 LAC =BUTX2 DAC BUTX6 BUTXI ISZ BUTX+2 ISZ BUTX6 ISZ BUTX5 SKP JMP BUTX2-1 LAC* BUTX+2 DAC* BUTX6 JMP BUTXI LAC BUTX7 BUTX2 JMS BUTN $DC 0 $DC 0 $DC 0 $DC 0 $DC 0 A-156

JMP BUTX3+2 ISZ BUTX+2 WUTX3 JMS* =T.U $DC BUTX LAC BUTX7 JMS* -S.LL JMP BUTX3 UTX4 LAC BUTX+2 TAD =6 DAC BUTX+2 JMP BUTX3 A-157

* DESTROY ALL LEVELS, NODES, AND TEXT LEAVES IN A DISPLAY * STRUCTUR E * CALLING SEQUENCE: * J M CHEW * ---- (RETURN) * AC CONTENTS ON ENTRY: * POINTER TO MAXIMUM ELEMENT IN THE STRUCTURE TO BE CHEWED * THE MAXIMUM ELEMENT SPECIFIED MUST OWN ALL LEVELS WHICH OWN * ELEMENTS OF THE STRUCTURE, CHEW $DC 0 JMS* =TL $DC 0 DAC CHEW6 LAC =CHEWQ JMS* =:Q.C CHEWI LAC* CHEW6 SNA JMP CHEW5 AND =777 SAD =2010 JMP CHEW4 LAC CHEW6 CMA TAD FREE CMA SMA JMP CHEW35 LAC CHEW6 AND =70000 SAD =10000 SKP JMP CHEW5 CHEW2 LAC CHEW6 JMS ATTR JMP CHEW3 DAC CHEW7 LMQ LAC CHEW6 4JMS* =S.TR A-158

$DC 0 LAC CHEW7 LMQ LAC =CHEWQ JME;* =QA $DC 0 JMP CHEW2 CHEWS LAC CHEW6 JMS* S.TD $DC 0 JMP CHEW5 CHEW35 CLC TAD CHEW6 J MS CORFRE JMP CHEWS CHEW4 LAC CHEW6 JMS* =L.L CHEW5 LAC =CHEWQ JMS* =Q F J MP *+3 DAC CHEW6 JMP CHEWI JMS* =T.U $DC CHEW CHEWQ $DC *+200 $DS 200 A- 159

* CHEW ATTRIBUTES * CALLING SEQUENCE * JMS CHEWA * _ —- (RETURN) * AC CONTENT ON ENTRY * POINTER TO LEVEL WHOSE ATTRIBUTES ARE TO BE CHEWED CHEWA $DC 0 JMS* T.L $DC 0 DAC CHEWAI LAC CHEWA1 JMS ATTR JMP *+11 DAC CHEWA2 LMQ LAC CHEWA1 MS* =S.TR $DC 0 LAC CHEWA2 jIMS CHEW JMP CHEWA+4 JMS* =TU $DC CHEWA A- 160

* FIND ATTRIBUTE OF LEVEL * CALLING SEQUENCEt * JMS ATTR * -. — (RETURN IF NO MORE ATTRIBUTES) * O — (RETURN IF ATTRIBUTE FOUND) * AC CONTENTS ON ENTRYt * ADDRESS OF LEVEL -- GET POINTER TO FIRST ATTRIBUTE * ZERO -- GET POINTER TO NEXT ATTRIBUTE ATTR $DC 0 SNA JMP ATTRI TAD =7 DAC ATTR2 LAC* ATTR2 DAC ATTR2 LAC* ATTR2 AND =777770 SAD -762010 SKP JMP* ATTR ISZ ATTR2 LAC* ATTR2 ISZ ATTR JMP* ATTR ATTR I LAC ATTR2 TAD =2 JMP ATTR+4 A-161

* CHECK TRACKI NG THRESHOLDS * CALLING SEQUENCEs:* JMS THRS- (THRSX OR THRSY) * $DC ---- (REFERENCE COORDINATE C) * $DC --- (THRESHOLD VALUE T) * ---- (Z > C+T-I) * --- (C-T < Z < C+T) * --- (Z c C-T+I) * THRSY -- TEST Y TRACKING COORDINATE * THRSX -- TEST X TRACKING COORDINATE * "Z" DENOTES EITHER THE X OR Y TRACKING COORDINATE THRSX $DC 0 JMS* =X,X CMA TAD* THRSX ISZ THRSX TAD* THRSX CMA SMA JMP THRSXI TAD* THRSX TAD* THRSX SPA ISZ THRSX ISZ THRSX THRSXI ISZ THRSX JMP* THRSX THRSY $DC 0 LAC THRSY DAC THRSX JlM* =X.Y JMP THRSX+2 A- 162

* FIND COORDINATES OF OWNER LEVEL ON LAST DISPLAY INTERRUPT * CALLING SEQUENCEt * JMS COORDS *.. — (RETURN IF LEVEL NOT AN OWNER) * - _ — (RETURN) * AC CONTENT ON ENTRY: * POINTER TO OWNER LEVEL * AC CONTENT ON RETURNt * Y COORDINATE * MQ CONTENT ON RETURNt * X COORDINATE COORDS $DC 0 JMS* =T,L $DC 0 DAC COOLVL LAC =COOQ JMS* =QC DZM COOSW DZM COOCNT LAC COOCNT JMS* -D.O JMP *+16 DAC COOTMP SAD COOLVL DAC COOSW LAC COOSW SNA JMP *+6 LAC COOTMP LMQ LAC:CO OQ JMS* =Q.I $DC 0 ISZ COOCNT JMP *-17 LAC COOSW SNA JMP COOFAL LAC =3 A-163

DAC COOSKL DZM COOX DZM COOY COONXT LAC =COOQ JMS* =Q.F JMP COODUN TAD =2 DAC COOTMP LAC* COOTMP LRS 10 AND -1 S NA+CLA+CLL JMP *+3 LLS 2 DAC COOSKL LAC COOSKL XOR =640700 DAC COOS ISZ COOTMP ISZ COOTMP LAC* COOTMP JMS* =C CB CLL COOS $DC 0 TAD COOY DAC COOY ISZ COOTMP LAC* COOTMP JME* =C.CB CLL XCT COOS TAD COOX DAC COOX JMP COONXT COODUN LAC COOX LMQ LAC COOY ISZ COORDS+2 COOFAL JMS* =T,U $DC COORDS A-164

COOQ $DC *+103 $DS 103 A-165

* MOVE LEVEL WITH TRACKING COORDINATES * CALLING SEQUENCEt * JMS TRAC * LAC -—._ (LAC POINTER TO LEVEL) 4* d —- (RETURN) TRAC $DC 0 LAC PENY DAC TRACY LAC PENX DAC TRACX XCT* TRAC TAD =4 DAC TRACTP LAC* TRACTP JMS* =C CCB LLSS 3 DAC TRACYL ISZ TRACTP LAC* TRACTP JMS* =C,.CB LLSS 3 DAC TRACXL TRAC JMS* =X.X LMQ CMA TAD TRACX CMA DAC TRACXI LACQ DAC TRACX MS* =X.Y LMQ CMA TAD TRACY C MA DAC TRACYI LACQ DAC TRACY LAC TRACXI A-166

TAD TRACXL DAC TRACXL LRSS 25 XCT* TRAC JMS* =S,LX LAC TRACYI TAD TRACYL DAC TRACYL LRSS 25 XCT* TRAC JMS* =S LY JMS* =X.S JMP *+4 ISZ TRAC JMP* TRAC JPP TRAC1 JPS* =T.P A-167

$TITLE SELMA MISCELLANEOUS SUBROUTINES * DEFINE SYMBOL NAME & SEND CREATE COMMAND TO /360 * CALLING SEQUENCES * JMS NAMDEF * LAC — (- (LAC POINTER TO SYM OR CON LVL) * JMS --- (JMS TO GEN PAR SUBROUTINE) * 0 —-- (RETURN IF NO NAME AVALIABLE) * ---- (RETURN IF SUCCESSFUL) * AC CONTENT ON ENTRYt * TYPE NUMBER IN BITS 10-17 NAMDEF $DC 0 JMS* =T*L $DC 0 AND 3 77 DAC SOIO0+1 AND =200 TAD =NAME+1 DAC NAM4 LAW -177 DAC NAM5 NAMI LAC* NAM4 S NA JMP NAM2 ISZ NA M4 ISZ NAM5 JMP NAMI JMP NAM3 NAM2 XCT* NAMDEF+2 DAC* NAM4 LAC NAM4 TAD — NAME CLQ LLS 11 XOR SO100+1 DAC SOO10+1 ISZ NAMDEF+2 XCT* NAMDEF+2 NAM3 ISZ NAMDEF+2 A-168

ISZ NAMDEF+2 JMS* =T*U $DC NAMDEF A-169

z FIND SYMBOL NAME * CALLING SEQUENCEt * JMS NAMGET * ---- (RETURN IF NO CORRESPONDING NAME) * ---- (RETURN IF SUCCESSFUL) * AC CONTENT ON ENTRYt * POINTER TO SYMBOL * AC CONTENT ON RETURNt * NAME OF SYMBOL IN BITS 10-17, BITS 0-9 CLEAR NAMGET $DC 0 AND =77777 DAC NA M6 LAC:NAME+1 DAC NAM4 LAW -3 77 DAC NAM5 LAC* NAM4 AND =77777 SAD NAM6 JMP *+5 ISZ NAM4 ISZ NAM5 JMP *-6 JMP* NAMGET LAC NA M4 TAD:-NAME ISZ NAMGET JMP* NA MGET NAME $DS 400 A-170

* SET LIGHT PEN SERVICE & STOP TRANSLATION 4 CALLING SEQUENCE: * JMS PENSET l* — rw* (RETURN) * AC CONTENT ON ENTRY * POINTER TO NEW LIGHT PEN SERVICE TASK PENSET $DC 0 DAC TRAPEN JMS* =DP LAW -400 DZM TRAS LMQ LAC LVLTRA JMS* =S SLY OJMP* PENSET A- 171

* READ DISPLAY COORDINATES AND START TRACKING * CALLING SEQUENCE: * JMS PENHIT * * —- (RETURN) * X & Y COORDINATES ARE STORED IN PENX & PENY BY THIS SUBROUTINE PENHIT $DC 0 JMS* -DY TAD -4 AND =777770 DAC PENY TAD =700 SPA JMP PENEND JMS* =DX TAD =4 AND =777770 DAC PENX LMQ LAC PENY JMS* =X.I JMP* PENHIT A-172

DETERMINE LIGHT PEN REGION RELATIVE TO PENX AND PENY W CALLING SEQUENCES I JS PENREG:.$DC ---- (THRESHOLD VALUE) M S —* (RETURN): AC CONTENT ON RETURN: ALL BITS 0 EXCEPT ONE WHICH DENOTES REGION: ICF 15 16 17 FIc 12 13 14 FIct 9 10 11:ENREG $DC O LAC* PENREG ISZ PENREG DAC PENY+1 DAC PENX+1 DZM PENTMP JMS THRSY ENY $DC 0 $DC 0 ISZ PENTMP ISZ PENTMP LAC PENTMP TAD PENTMP TAD PENTMP XOR =660500 DAC *+7 JMS THRSX PENX $DC 0 $DC 0 ISZ *+3 ISZ *+2 LAC =400 $DC 0 JMP* PENREG A-173

* MOVE ALL ATTRIBUTES FROM ONE LEVEL INTO ANOTHER * CALLING SEQUENCEt * JMS PENMOV * LAC — "- (LAC POINTER TO "TO" LEVEL) * LAC -- - (LAC POINTER TO "FROM" LEVEL) * ---- (RETURN) * AC CONTENT ON ENTRYt * Y DISPLACEMENT TO BE ADDED TO ALL MOVED LEVELS * MQ CONTENT ON ENTRY c* X DISPLACEMENT TO BE ADDED TO ALL MOVED LEVELS PENMOV $DC 0 DAC PENMY LACQ DAC PENMX XCT* PENMOV 3AC PENSNK ISZ PENMOV XCT* PENMOV DAC PENSOU ISZ PENMOV PENM LAC PENSOU JMS ATTR JMP* PENMOV DAC PENMT LMQ LAC PENSOU JMS* =S TR $DC 0 LAC PENMT TAD =4 DAC PENMC LAC* PENMC JMS* =C.CB TAD PENMY LMQ LAC PENMT J MS* S.LY ISZ PENMC LAC* PENMC A-174

JMS* =C.CB TAD PENMX LMQ LAC PENMT JMS* =S.LX LAC PENMT LMQ LAC PENSNK JMS* =S.T $DC * CLA JMP PENMI A-175

* COUNT ATTRIBUTE POSITION IN LEVEL * CALLING SEQUENCEt * JMS PENCNT * ---- (RETURN) * AC CONTENT ON ENTRY * POINTER TO OWNER LEVEL * MQ CONTENT ON ENTRY: * POINTER TO ATTRIBUTE WHOSE POSITION IS TO BE DETERMINED * AC CONTENT ON RETURNt POSITION OF ATTRIBUTE IN LEVEL RELATIVE TO LAST ATTRIBUTE PENCNT $DC 0 DAC PENCT LACQ DAC PENCA DZM PENCC LAC PENCT SKP PENC CLA ISZ PENCC JMS ATTR JMP PENC2 SAD PENCA SKP JMP PENCI LAC PENCC DAC PENCCS iSZ PENCC JMP PENCI PENC2 LAC PENCCS CMA TAD PENCC JMP* PENCNT A-176

* READ ALL NECESSARY LEVEL ADDRESSES * CALLING SEQUENCEs * JMS PENLVL * --- (RETURN) PENLVL $DC 0 LAC =PENLSW DAC PENLP DZM PENLSW LAC =10 DAC PENLT JMS* =D 0 JiP *+5 DAC* PENLP. LAC PENLSW SAD LVLDGM ISZ PENLP CLC TAD PENLT S MA JMP *-12 DZM* PENLP ISZ PENLP LAC PENLP SAD =LVLOUT+4 JMP* PENLVL JMP *-5 PENLSW $DC 0 LVLFRG $DC 0 LVLSYM $DC 0 LVLPRT $DC 0 LVLOUT $DC 0 LVLEAF $DC 0 $DS 2 A-177

* COLLECT GARBAGE * CALLING SEQUENCE: * JMS CORGRB * --- (RETURN) CORGRB $DC 0 DZM CORLI LAC FREE DAC CORL LAC* CORL SPA JMP *+6 CORGI TAD CORL SAD =40000 JMP CORG3 DAC CORL JMP *-7 CMA TAD =1 TAD CORL DAC CORL2 LAC CORL DAC CORL3 ISZ CORL LAC CORLI DAC* CORL LAC CORL3 DAC CORLI LAC CORL2 SAD =40000 JMP COR G3 DAC CORL CORG2 LAC* CORL SMA JMP CORGI TAD* CORLI DAC* CORLI LAC* CORL CMA TAD =1 A-178

TAD CORL SAD =40000 JMP CORG3 DAC CORL JMP CORG2 COR G LAC CORLI DAC CORCHN JMP* CORGRB A-179

* GET CORE BLOCK * CALLING SEQUENCE: * JMS CORGET * - -- (RETURN IF BLOCK NOT AVAILABLE) * -_ —- (RETURN) * AC CONTENT ON ENTRY * SIZE OF DESIRED BLOCK * AC CONTENT ON RETURN: * ADDRESS OF BLOCK CORGET $DC 0 SNA+SPA JMP* CORGET DAC COR2 J MS COR SKP JMP COR3 JMS CORGRB LAC COR2 JMS CORI JMP* CORGET COR3 ISZ CORGET JMP* CORGET COR $DC 0 DAC CORSIZ ISZ CORSIZ LAC C ORCHN DAC CORLI LAC CORCHN SNA J MP* C OR 1 DAC CORL COR 4 LAC* CORL TAD CORSIZ SPA+S NA JMP COR5 ISZ CORL LAC CORL DAC CORLI LAC* CORL A-180

SNA JMP* CORI DAC CORL JMP COR4'OR5 DAC CORTI SAD =- JMP COR 4+4 S NA JMP COR6 LAC CORSIZ DAC* CORL TAD CORL DAC* CORLI DAC CORLI LAC CORTI DAC* CORLI ISZ CORLI COR 7 ISZ CORL LAC* CORL DAC* CORLI LAC CORL ISZ COR I JMP* CORI COR6 LAC* CORL CMA TAD =1 DAC* CORL JMP COR 7 A-181

* FREE ALL AL'LOCATABLE CORE * CALLING SEQUENCE: * JMS CORI NT * -— a (RETURN) CORINT $DC 0 LAC FREE DAC CORCHN TAD =-40000 DAC* CORCHN LAC CORCHN TAD =1 DAC CORT DZM* CORT JMP* CORI NT A- 182

* FREE CORE BLOCK * CALLING SEQUENCE: * JMS CORFRE *.. - (RETURN) * AC CONTENT ON ENTRYt * ADDRESS OF BLOCK TO BE FREED CORFRE $DC 0 DAC CORT LAC CORCHN DAC* CORT LAC CORT TAD =-1 DAC CORCHN LAC* CORCHN C MA TAD =1 DAC* CORCHN JMP* CORFRE A-183

* MOVE A BLOCK OF CORE * CALLING SEQUENCE: * JMS CORMOV * LAC ---- (LAC ADDRESS OF "TO" BLOCK) * LAC ---- (LAC ADDRESS OF "FROM" BLOCK) * - -- (RETURN) * AC CONTENT ON ENTRYt * TWO'S COMPLEMENT OF LENGTH OF BLOCK CORMOV $DC 0 DAC CORCNT XCT* CORMOV DAC CORSNK ISZ CORMOV XCT* CORMOV DAC CORSOU ISZ CORMOV LAC* CORSOU DAC* CORSNK ISZ CORSNK ISZ CORSOU ISZ CORCNT JMP *-5 JMP* CORMOV A-184

1 STORE ZEROS THROUGHOUT CORE BLOCK: CALLING SEQUENC E J JMS CORZRO, LAC ---- (LAC ADDRESS OF CORE BLOCK) C ---- (RETURN) * AC CONTENT ON ENTRYt TWO'S COMPLEMENT OF LENGTH OF BLOCK CORZRO $DC 0 DAC CORCNT XCT* CORZRO DAC CORSNK DZM* CORSNK ISZ CORSNK ISZ CORCNT JMP *-3 JMP* CORZRO A- 185

$TITLE SELMA INITIALIZATION SELMA LAW 633 JIM* =T A LAC =SELTI JMS* =L.T LAC =637475 JMS* =B.T LAW 630 JMS* =T.R LAC =PBT JMS* =P.T JMS * P.E DZM KBDPB LAC =KBDPB DAC KBDPP DZM KBDVSW J MS* =S LH DAC LVLHAL J;MS* =S.TL $DC O DAC LVLSCR LMQ LAC LVLHAL JMS* =:, TI $DC 0 * LAW 500 LMQ LAC LVLSCR JMS* =S LP JMS BUTX $DC SELTI $DC LVLHAL $DC 370 $DC -34 SDC 500 $DC PENEND $DC 0 JMS* =S.TL $DC 0 A-186

DAC LVLBUT LMQ LAC LVLHAL JMSr* =S TI $DC 0 * JMS* =S,TL $DC * DAC LVLDGM LAW 60 LMQ LAC LVLDGM JMIS* =SLP JMS CORINT LAW -400 JMS CORZRO LAC =NAME /PAR DZM PENXL DZM PENYL DZ M NAMDEF+2 DZM BUTN+2 DZM BUTX+2 DZM LVL+2 DZ M CHEWA+2 DZM CHEW+2 DZM COORDS+2 LAC =QAS JlS* =T.S LAC =KBD JMS*. s=T,S LAC -C ON JMS* =TS SKP SKP JMS* =T.P LAC =S0005 JMS QASCM JMS* =T.F SELTI $DC 3 $TEXT "SELMA-3" A-187

SELT2 $DC 6 $TEXT "IRANSLATE* $DC 747576 $TEXT " ON' FREE $DC 36200 BEGINNING OF FREE CORE SEND A-188

UNCLASSIFIED Security Classification DOCUMENT CONTROL DATA - R & 2 SOcuritv Classifiration of title, bod a',t t.- i-: 2:.^.i.. r-..-.. —-.:-t i;e overall reoorr.s class if;dc RIGGINATING ACTIVITY (Corporate author) 2a-. O' SECRITY CASSi FCATION THE UNIVERSITY OF MICHIGAN Unclassified CONCOMP PROJECT i2b. GROUP SELMA: A CONVERSATIONAL SYSTEM FOR THE GRAPHICAL SPECIFICATION MARKOVIAN QUEUEING NETWORKS ESCRIPTIVE NOTES (Type of report and inclusive dates) Technical Report 23 VTHOR(S) (First name, middle initial, last name) JAMES H. JACKSON ErORT DATE..NO. OTTALC... OF PAGES'.b. NG. OF REFS — October, 1969 73 5:ONTRACT OR GRANT NO. Sa. ORIGINATOR'S REPORT NUMBER(S) DA-49-083 OSA 3050 oROJECT NO. Technical Report 23 9b. OTHER REPORT NO(S) (Any other numbers that may be assigned this report) SEL Technical Report 45 DISTRIBUTION STATEMENT Qualified requesters may obtain copies of this report from DDC.;'nL' LEMEN,'TRY NOTES 1'2. SPONSORING MILITARY ACTIVITY Advanced Research Projects Agency ABSTRACT This report discusses the design and use of the Systems Engineering Laboratory's Markovian Analyzer (SELMA) system for a DEC 339 computer display terminal. This system provides interactive graphics support for a program which was developed concurrently for the IBM 360/67 to analyze a class of Markovian queueing networks. Special features of the system include handling of all graphic operations at the terminal and recognition of patterns of motion of the light pen to provide a human-oriented drawing capability. - FORM, 1747 ~ NOV 65 V - 7 3 Security Classification

Unclassified Security Classification 14. 14. LINK A LINK B LINK C KEY WORDS _.__KEY WORDS...._, -ROLE WT ROLE WT.TROLE WT Interactive computer graphics Remote display terminal Network diagrams Queueing models DEC 339 Security Classification

UNIVERSITY OF MICHIGAN 901115 03025 210311111 3 9015 03025 2103