UNIVERSITY OF ILLINOIS LIBRARY AT UR3ANA-CHAMPAIGN. ENGINEERING NOTICE: Return or renew all Library Materials! The Minimum Fee for each Lost Book is $50.00. 1111 f\ O innn The person charging this materiaris responsible for its return to the library from which it was withdrawn on or before the Latest Date stajjiSJclk below. Theft, mutilation, and underlining of books bw nitons for discipli- nary actien and may *esuK In dr«h1i»sa1 wftnThWjniversity. To renew call Telephone Center, 333-8400 UNIVERSITY OF ILLINOIS LIBRARY AT URBANA-CHAMPAIGN _ ENGINEERING LIBRARY U^vt^ UNIVERSITY OF ILLINOIS , , o c-7 URBANA, ILLINOIS / E ROM The person charging this material is re- sponsible for its return to the library from which it was withdrawn on or before the Latest Date stamped below. Theft, mutilation, and underlining of books are reasons for disciplinary action and may result in dismissal from the University. UNIVERSITY OF ILLINOIS LIBRARY AT URBANA-CHAMPAIGN P n ' ~ 1 9G2 M iAk X W9J2 - L161 — O-1096 CAC Document Number 252 CCTC-WAD Document Number 7523 Intelligent Terminal Software Flowcharts Deborah S. Brown Betty Kasprzycki John R. Mullen David A. Willcox Prepared for the Command and Control Technical Center WWMCCS ADP Directorate Defense Communication Agency Washington, D.C. under contract DCA100-76-C-0088 Center for Advanced Computation University of Illinois at Urbana-Champaign Urbana, Illinois 61801 October 31, 1977 >/ Approved for release: /CmAMqu ( I fJfjfA^i^ /Ja?mes F. Bailey, Principal Investigator Digitized by the Internet Archive in 2012 with funding from University of Illinois Urbana-Champaign http://archive.org/details/intelligenttermi252brow INTRODUCTION ORGANIZATION This document contains Nassi-Schneiderman flow charts for the software comprising the operating system and standard support package for the Intelligent Terminal operating system. Readers should refer to the Intelligent Terminal Programmer's Manual (CCTC-WAD document //7616) for a description of how these routines interact, and for descriptions of the proper usage of these routines. The flow charts on the following pages are arranged alphabetically by routine name. In most cases there is one chart for each routine. However, some charts are too complex to be presented legibly on a single page. In each of these cases, one or more sections of the chart have been broken out and placed on a following page. If a notation such as "See ph_driver: read_type" appears in a chart, then a sub-chart labeled "ph_driver: read_type" will appear on one of the immediately following pages. There are two implementations of the Intelligent Terminal software. One of these runs on a Digital Equipment Corporation LSI-11 minicomputer, and the other runs on Honeywell Level 6 minicomputers. Most routines are identical in the two implementations. A few routines are implemented differently on the two machines, primarily due to fundamental differences in the structure of the hardware base. Each of these routines has two charts, one for the LSI-11 version and one for the Level 6 implementation. NASSI-SHNEIDERMAN DIAGRAMS The diagramming technique developed by I. Nassi and B. Shneiderraan (cf. SIGPLAN Notices, August 1973) provides four basic visual structures corresponding to the four basic constructs of a program: 1. process, 2. decision, 3. multi-case decision, and 4. iteration. The Nassi-Shneiderman visual structures corresponding to these program constructs are described below. Process A process (meaning any computation) is represented by a box as follows: compute The box is usually named, or some English phrase or some equa- tion is written in the box to indicate the nature of the process or compu- tation. The box may represent any process or computation, from the whole of an operating system to a single statement of the kind "a = b + c". An empty box represents the null process: "do nothing". Decision The two most common decisions are represented by the if statement and the if... else statement. These two decisions are represented as follows 1. if statement: 2. if ... else statement: compute compute Multi-case Decision The representation of a multi-case decision is a simple extension of the previous visual structure for representing simple decisions: Case 1 Case 2 Case. . . Case N Default compute compute compute compute compute Iteration The two most common forms of iteration are those with a top test and those with a bottom test. These two forms of iteration are represented as follows: 1. top test: loop compute bottom test: compute lc op Combination The visual structures presented above may be combined to any degree to represent a computational structure, e.g.: alloc(size) For every used entry in CORETAB. Is the size of this entry reater than or equal to size? YES Remember the address of this entry, Move the beginning of the entry to after this piece. Decrement the size of the entry by the size of the piece being allocated. Is size of entry now 0? YES Delete this empty entry by copying rest of CORETAB up one slot. Return the remembered address, Return -1. area lite(xl,yl,x2,y2,mode) Is this a lite or an erase' LITE ERASE Do while there are at least 16 dots high to lite Light a row 16 dots high using put Do while there are at least 16 dots high to erase Erase a row of dots 16 dots high using erase Is there still a partial row to do Lite or erase the last partial row using put or erase NOTE: This version of area lite is specific to the LSI-11 IT. area lite Write an appropriately formatted message to the Z80 panel controller. HOTE: This veraion of area lite ia specific to the L6 IT. blk_alloc(drv) Por every word In the free up Are any of the bits In this word of the free- HO ^^^«ep not set? Set this bit to I. blk » nuaber of block corresponding to this bit. Is blk out of range, or did leroing »0 ^-N^Mock fall? YES Return (-1). Return (blk). Return (-1). blk free(drv, blk) NO X. blk « 0? - ' YES Return (0). """ Is drv valid? NO —• _ y^ YES Return (-1) Reset the bit in the free map for drive drv that corresponds to block blk. Return (0). block () Save incoming registers. Update stack ptr and environment linkage registers. Store environment linkage and return address registers in stack base. Stack overflow or destroyed guardword? NO frst block: while (READY_Q is empty) Wait for entry on READY_Q. Dequeue id of next process, and store it in ME. Put return address from stack base in a register. Restore other registers from environment linkage section. Return to new process. buflu(«v, bill, o, tisi-rbuf, 1, fen) 10 clear io() Do for each device. YES Is thla device In use? NO Do n times where n Is the number of elements In the requestor queue. Deq one value from requestor queue. Is the requestor just deq'd this process? NO Re-queue the element. Close the device. NOTE: This version of cleario is specific to the LSI 11 IT. clear io() Do for each device. — _^^^ Is this device in use? YES " >^N0 Do ii times where n is the number of elements In the requestor queue. Deq one value from requestor queue. ** Is the requestor just deq'd this process? NO " ■ -__ >4es Re-queue the element. ~ ■ _ Is this process the owner of the device? YES Sm Close the device. NOTE: This version of cleario Is specific to the Level 6 IT. 11 elose(devlce_ld, istatua) Write a flush message to the handler process. Pee the request semaphore. Write a close message to the handler process. Pee the request semaphore. Flag device as being ownerless. Do for each disk entry In DEV TAB Set atatus for return from that returned from handler process close request, Is "catastrophic" bit on In status? NO YES Return error Indication. Return with no error indication. 12 cmp (a, b, length) 13 crcntc(nam«, atac ptr) Update uaerflb for file to indicate length and out-of-date directory information. Return (Id) Temporarily terminate name at end of name of containing directory Open the containing directory and store results in id. Seek in directory to beginning of empty directory. Create a directory entry structure by copying the file name into it and setting the flaga and lengths to Indicate a zero length new file. Allocate a disk block to use as index block. Ik creep(stack_size, proc, pann, priority) Get pointer to the bottom of the stack. Store parm in the last word of the stack. Set up a register save area just above the bottom of the stack; put dummy values in the stack and environment regs; make it look like the process was called by suicide, and zero all the other regs. Set up the stack base: set the guardwork, priority and stack size; point the B7 entry at the register save area at the bottom of the stack, point the B5 entry at the main procedure for the process. Put the new process on the READY Q. Return the value returned by alloc. NOTE: This version of creep is specific to the Level 6. 15 cvb(ptr, length, value ptr) Value - 0. Doea the string to be converted atart with a minus sign? Reaet the neg flag. Set the neg flag. Skip the minus sign. Decrease the length by 1 For every character that is a digit, up to length chars value - the previous value multiplied by the base and the value corresponding to the next digit of the string. delete (filename, status) 16 Open the file. Did open succeed? NO ■ ■ /yes Return error. Send a delete request to device handler. Pee the request semaphore. Set status from that returned by device handler. *"*"— "-^^^^^^ Catestrophlc bit on in status? ^ — """ YES "*"""■ ^ ^^ - """"""~" NO Return error. Return success. 17 determine (name) 18 deq(q_ptr) Remove the oldest element from the queue. Cet the value from that element, Return element to the list of free elements. Did this empty the queue? NO Mark queue head as empty. Restore initial processor priority. Return (value) 19 dir open(ev, fib, index b) Inic file info block for file. Read directory entry for file. X^ Did read fail or is this not a file? — — ***"**" N0 \ ^ " YES Put impossible values in file info block. Return (-1). Finiah opening directory. Position read/write pointer after directory's entry for itself. Return (0). dlaablo lo(chan) Send stopio channel control to indicated channel. Return results of this. 20 u 41 > U ki ■ •H 3 A kl i-4 1 k 1 «— I = 01 -4 k, a o 1 « *j I U. o) e 1 * CO -H 1 "° u o a ki c - ki -H U CO u 01 ^v 01 01 3 •-* kl ^V. ■ H y^ U U H g »*4 0) "H CO U / ** 01 *- ^V c/3 js cj a 1 ^ f 01 1 *""* 0) 4-1 0) ■a ih > •V CO -»«**^ *«\ f * 4) a 1-1 ^*^^^^^ c 1 "° SK ki B ki O CO o ki c - N^ e 01 ki t\ U CO 0) 41 3 £ B. X ^v. a) i-t u cj J CO ^v kl kl rH RJ kl 1 ft c ■H • k> JZ 41 3 \ .-4 C- >*. <4-l .-4 \ T3 10 ^*>^^ co x cj a 1 3 1 —t Ifcl 3 «-> 1-1 »4- _^^^^ <-l 3 a ^^" ^'^ J< 01 V a o S w ki o o a kl kl ki c - • ik4 01 ki t4 ki CO 1*4 01 01 3 «J "4-1 01 ^*. 01 H U w 3 4J ^-^ U ii H 4 c4 J3 ■H ^V- 01 -H CO kl •o ki c- ^v W JS O CO 41 •J 1-1 H » lte er 's le. 3 ~l 3 T3 CO _-»««"^ 1H 4-1 ^^^ kl CO -H 3 3 X-. 1 0) a .-1 3 a u E ki kl O CO 01 ki ki a) kl C 0) u-i 3 ki -H 01 CO CO ■O >w n - • 4J *J CO >v kl kl ki eg e • 01 >v 01 -H 01 TJ 1H kl ki <^ ^v CO J3 .-1 49 41 ki 0) 13 « fa (0 --« u-i T4 v CO ^v 01 CO ki • a o- 1* O >v 4-1 kl 01 CO 4) •o **4 (—4 ^^^ 0) -H CO 3 • u ki u 01 cj c- >. CO .£> 3 kl CO c 01 41 c 41 « M a CO 01 « u a > o ■M i 21 enable io(chan, dev) ^^""""^^^.^^^Is this an output channel? t _ — — "~~~^ NO ^^^ ^ YES In_out - 0. In out " 1. Addr - starting address In MLCP of the CCP for this channel. Flag - results of sending first byte of addr to the appropriate LCT byte. ** Flag Indicates error? y'YES Flag - results of sending second byte of addr to the appropriate LCT byte. Flag Indicates error? y'YES Flag • results of sending start lo channel control word to the channel. Return (flag). 22 enq(q_ptr, value) ^^^^^^ Is there a free queue element? NO ^ N, " ,,, ^»^^^ ^ t00 ^ 00 ^'^ YES Call error. Become non-interruptable. Remove a queue element from the free list. Store value In the element. ^^^^^ Is the queue empty? NO ^*^**^,^^^ ^ t ^ ^ "^ YES Add the queue element to the end of the queue element list. Make the queue list. a one-element Point the queue head at the new element. Restore initial processor priority. 23 *uq_RQ(proc_ld, priority) ^^**«*^^^ Is there a free queue element? NO ^^^ ^^0^" 000 ^' YES Call error. Make us non-lnterruptable. Remove a queue element from the free list. Store proc_id in the value field of the element. 'Is the READY_Q empty' ^^^""^ YES Find first entry in READY Q whose priority value is less than priority. Hake the queue a 1-element list. Insert new element Just before the old element. Point READY_Q at new element. ^^ Did this add new element at end ^ <- **""""'^ >w of list? ^ ^ * ^ NO >w ^ )0t ^^ 000 ^' YES Point READY Q at new element. Restore initial processor priority. 2k entry Compute the high end of usable memory, Set up the stack registers. Put address of high end of memory onto stack. Jump to start up. erase ( x> y, vector, count, flag) Compute any shifting req uired to do addressing on 16-dot boundaries. ,, la it a single vector written many times? ™ YES — » >_______^ """""•^^^^^ Is shifting required? ^-~~~~~'^^ Rsrv_pnl. "" — — ~Js_shlf ting required? ^^ Write top part of vector. Write out the vector. Copy vectors into local buffer and write out 18 at a time, shifting to write lower parts of vectors. Write bottom part of vector. Copy vectors into local buffer and write out 18 at a time, shifting to write upper parts of vectors (or all of vectors). Rls_pnl. NOTE: This version of erase is specific to the Level 6 IT. 25 \ V ' w \ \ 4> \ j-^ \ & •H \ £.' \ £ \ £s 4-? \ a \ a5 \ 3 I \ O \ T< \ a3 \ V P \ +5 \ c \ h-« o 1 ■H \ O TJ \ O \ i> 1 \ a. Ih ■4 *"• \ c- J eg c \ K rS \ V o -p 1 * O 0) / JC * ' I •P *- 1 G ■,-■• to p \ 4-> i) •H / CD a; ^. \ K CJ 2 / a.' c w \ cy > °* 1 ^; 05 11 \ c 0) / m 1 — t 1 M / w z cy I! W) / a ctf V •H 1 a) c / a ,c to 1 +5 •H / fd •P aJ \ a5 -P / Cm / "nJ - Q 1 •H / _,_? f- T> CO 1 a? p O -P 0) CO / - n cu to H / h > Tl aJ 1 O to 0) fi 1 4.3 . — ■ w h O •g o« a) / H •d 0) Cm t— i cS M cy w -p / •H / O a5 H bfl a P M CD c * CO / V, c C •H -P (V M / & s — aJ a, Cm h •p •H o M o3 X .C Cm (V CO CO H > O 0, Cm H O rH u P O 0) j •» CO -p O 0) Cu -P +3 CO CV & a c c •H J> p 3 cy 3 U / w »s o a) II / u Cy cy cu E H w / ^ to ca ^ a) 0) 05 a) aJ i-i e 1 w -P %, H c cy 0) •H 1 &> 05 W W H x: c -P / ^ -d -p a5 CU P 0) C -p 3 CU 2 3 O Cu V E -P o V £ error (err no) Become non-lnterrupCable. Print an error message, depending on the value of err_no. halt(). fclose(ev, fib) Flush the In memory Index block for the file. Has the file gotten bigger? Update directory to Indicate new size. Flush the ln_memory data buffer. Mark ev and fib as unused, Return (0). 27 fdelete(ev, fib) Flush lnuemory copy of file's Index block. Did flueh fall, or Is thle the root directory? Return(-l). Mark all blocks used by the file as free. Restore lnjnetnory copy of freereap. Return(-l). Mark index block for file as free. Flag - false. Flag - results of opening directory containing file. Flag - results of seeking to directory entry for file. Mark directory entry on disk for file as empty Restore inmemory copy of freenap. Return(-l), Clean up inmemory data buffer. 28 first block Jump into the middle of block - to the point where it picks up a process from the ready queue. 29 fltr and *h_ptr. 38 halt Do forever Execute a HLT Instruction. Return Co caller. NOTE: The procedure will never return by Itself. The user will have to externally change the PC to get out of the HLT - loop. l_freemap(drv) lnit_ccb(chan, buf, buf_slze, cntrl) Flag - results of doing lold to set up buffer. ^*^ Flag Indicates error? NO ^V. _———"" """" YES Flag - results of sending cntrl to CCB control word. Return(flag). 39 get_token(buf_ptr, tok_ptr, della_ptr) Get index of first char in buf chat Is not a delimiter, and store it In count For every char In buffer, starting with first delimiter For every char in delimiter string Char in buffer « char in delimiter? NO YES Terminate outermost for loop, Copy character from buffer to token. Increment count, Null terminate token buffer. Return count of characters in token and count of delimiter characters scanned at beginning. ko init drlve(drv) Set up dib entry for drive to Indicate that drive is open. Open root directory of drive. Read entry in root directory describing itself. Read freemap for disk. Did either of the reads fail? Indicate disk, is off line, Return (-1) Return (0). ill inlt_ flb(fib. index b. off) Assign appropr late values to elements of file information block. Return (0). io init() Put the address of each device's handler's input queue into DEV TAB. Do for each device Put the address of this device's request semaphore into the request block for this device. Init pnl() Call Z80 LD to get a pointer to the Z80 microcode Set up so that writes go to all remote display heads Write the microcode to the Z80 panel controller Free the space occupied by the microcode in the Level 6 memory. Initialize the Z80's internal variables. 42 index(ln atr, of str) lth of - length of "of" string. Point pi at ln_string and p2 at of_str. For every character In "in" string Does char in "in" string « char in "of" string? YES Is next char of "of" string ending null? NO Increment pi. Return (-1). YES Point pi and p3 into "in" string, where match would start to end here. Compare the characters pointed at by p2 and pi, ending when they differ, or when hit end of "of" string. Did all chars match? NO YES pi - P 3. p2 • beginning of of_str. Return Index into in_string of beginning of match. h3 b driver () K>TE: ThU vtr»lon of kb_driver 1* specific to the LSI 11 IT. hk kb driver NOTE: Thla version of kb driver 1* apeclflc to the Level 6. 1+5 kb driver: data typo* YES _ Is the keyboard open? NO In there a saved u p read? """ Ring bell. Put Input character Into user'a buffer. ^**""""*^l s there apace In buffer? / YES ""^-^^^ /NO Vee user'a semaphore. Reset "saved read' flag. Put the character Into the buffer. YES Are wc echoing? ^r - X NO Print the character using put ascll. This Is not s procedure. It Is one case In kb_drlver. kb driver: flush_type Empty the Input buffer. ^""^"""■»»»_ >ii> ^ Is a read pending? YES -^^_^^ jf NO Sat data length to zero and reject the saved read request. Vee the user's semaphore. NOTE: This Is not a procedure. It Is one case In kb driver. kb_driver: resd_type* Is the buffer empty? ^ "" "" "" NO ' ___^- ' " YES Compute length to give the user. Save the read request. Copy characters Into user's buffer. Vee user's semaphore. •This Is not a procedure. It Is one case In kb_drlver. kb_drlver: set mode type Switch on type of setmode. •cho_on set_xy echooff ^~~*^. / defsult Sat "echoing" flag on. Set "echoing" flag off. Set "reject request" In request block. Set x - y coordinates. Vee user's semaphore. 46 klll(proc_id) ^^m^^ Does Id indicate a valid process? ^^^ NO ^ s ^» s> ^ ^0**^ YES Return(-l). Set the guardword to indicate that the process should be killed the next time it is scheduled. Return(O). Id cs() Isthis charset resident in the display head? Rsrv_pnl . Allocate space for the effector table as "variable" number 3. Write the effector table. Allocate space for the characters as "variable" number 2, Write the characters (the bytes of each word must be swaped before writing them). Flag the current character set as the currently loaded alternate. RIs pnl. Write out a new charset descriptor (specifying the size of the characters and which "variables" to use for the effector and character tables). ld_page() Has the page been changed since last time we were here^^ YES /NO Format a page descriptor for the Z80. Write it out. 4 T ldlv(hl, lo, d) Copy the pa ir (hi, lo) to reglaters RO and Rl. Do a double word divide on (RO, Rl) by d. quotient. NOTE: This version of ldiv is specific to the LSI 11 IT. ldiv(hi, lo, d) Copy the pair (hi, lo) to registers R6 and R7. Do a double word divide or > (R6, R7) by d. Return the quotient. NOTE: This version of ldiv is specific to the L6 IT. kS ln_xpand(out. In, pi, p2, p3, . . .) Length - 0. Nextparm - address of first parameter (pi). While there Is still something in the input format specification Copy the char from the input buffer to the output buffer. ptr ■ parm_xpand (pointer to format specifier, and next_parm, and skipped) . Move the input buffer over one character. Increment in pointer by skipped, Increment length by one. Copy the string pointed to by ptr into the output buffer, and incre- ment length by the length of this string. Null terminate the output string. Increment length to include the trailing null. Return length. h9 lrea(hl, lo, d) Copy the pa lr (hi, lo) to registers RO and Rl. Do a double word divide on (RO, RD by d. Return the remainder. NOTE: This version of lrem is specific to the LSI 11 IT. lrea(hi, lo, d) Copy the pa ir (hi , lo) to register: i R6 and R7. Do a double word dlvis ion on (R6, R7) by d • Return the remain der. NOTE: This version of lrem Is specific to the L6 IT. 50 mfps() Return Che value of Che PSW. NOTE: This version of mfps is specific Co Che LSI 11 IT. ■fps() Pick up Che syscem status word. Decode the currenc level number from it. ^*^«i« Sn ^ Is chis level greacer Chan ^"** s «> 1> ^ able level for Che L6? NO ^-V^^ the non-interrupt-,^***^ ^00^^ YES lev - Che non-inCerruptable status word for LSI 11. lev - 0. Return (lev). NOTE: This version of mfps is specific to the L6 IT. 51 ■k_page(p ptr, left, bottom, width, height) Copy parameters to corresponding positions in structure pointed to by p_ptr. itps(prio) "— "-— ^•.^^^ Does prio have the LSI 11 non-lnterruptable ~~~~~ bit set? Pick up the hardware status word. Do a LEV that will leave the activity bit set for the current level, and switch us to be working at the non- lnterruptable level. Decode the current level. ^**'*««« Vsi ^ Are we currently interupt- ^^^^ ^**--^^ able? ^-^ NO ^*^v^ |||| ^ ^**^ YES Do a LEV that resets the activity bit for the non-interruptable level and schedules the next ready level. Leave us at our current level. NOTE: This version of mtps is specific to the L6 IT. itps(prlo) Copy prio into the PSV. NOTE: This version of mtps Is specific to the LSI 11 IT. open(name, flag iatatus) 52 Determine (name) , NO Is device name ok? Return error. Does some other process own this device? YES Did the caller ask to wait for the device? Pee the requestor semaphore. Make this process owner of the device. NO NO Vee any outstanding pee's on the delvce semaphore. Send a flush request to the handler process. Pee the devtce semaphore. Send an open request to the handler process. Pee the device semaphore. Set status for caller from status returned from device handler for open request. Close the device. Return error. Return success. 53 41 w a e >-■* • pH u b 9 U 4) q 41 4) > 3 41 3 a 2 u M V ■w f w a. — I IN 41 IM 3 IM 41 • e o £ X X t- w 41 41 »« u 41 00 «- 4J X P N 3 41 "J - IM • W a. **-i a an X 41 " a 1 e O X 3 v4 X • — 3 5"o U C,X M • 41 41 h-> c u £2 41 a U 4J a u a X -o u ■ 3 X ^* s "^_ o " E- M u CD ^"»»w. Z O q M -H O X M 1 TJ ^ 4J ^^ « 3 B 41 CL U 4J 9 4J • a c 4i c b O • a -h 4i 41 X a u u o S e 4* ■ ^r ^ >. 6) CL 03 « O 3 41 O 3 c 41 • > -/^ W 3 C o c e ■• ft. — I U -H a c u a -■ x *H M u U M 41 IM «l "3 iH 4-1 X 4> U u 4) 3 41 S oo o C **-« X ■ e *l H u u x 9 n C 41 C X ss >. 09 ■-4 41 X 41 SS X Ji h X Q a. u hi w M > 4J o o o U w S V 4J e o « M t-j — -i *u M w OJ «w x • O.TJ 3 4) i •* 41 41 8 01 £ w ? E w 41 ji e *■ u a m - •H 4) 3 0) a U *4 4 «u i/j > 4J •m X a. as c n 41 t-H 4J a. r^ jl £ 2 41 pause () Enqueue this process on the READY Q. Call block (). Return. pathname (your, dir) Remember where your string begins. Compare characters In your and dlr strings up to the end of dir and as long as the two strings match. Did the strings differ before the end of the dir string, or did the comparison end pointing at something other than a NUL or delimiter in your string? Return pointer to beginning of your string. Return pointer to your stlrng where comparison ended. 55 pee(sem) Become non- interrupt able. Decrement the count for this semaphore. ^^^ Is count less than 0? ^0****^ NO ^S,. ^ ^***~**' YES Enqueue this process on the queue for Chls semaphore. Call blockO. Restore initial priority. peek (device_id , (status) Is d evice id out of range? YES " " " - _ ^^NO Return error. ■ . Does this process own the NO ■ — ■ device? ^/YES Return error. Send peek request to device handler. Pee the request semaphore. , . _^^ Set status from that returned by handler process for peek request. "" Is "catastrophic" bit on in status? NO Return error. 56 1 u ■ •*-> 9 .o *-* 1 01 01 • DC e > « 01 at a ■ 01 • 1 / 5 IT. u 01 / *- 01 b 1 "> 1 u 1 *" / 4 / T > a a / ° / c 1 / * 1 ■ 1 -c 1 W >s 4 c V e — • e ha * ■D V <0 1 w to / — . 3 II o 1 4 1 *> tj w 1 ^ — • *- * g « w 1 -c* L hi •c c-t 0| (Q a, ^ a c * - -o -a a c ■ 1 « 5u b 0> u *■> e • > «4 a * U ■ 0) 3 O" V o 01 3 353 Set wr amount transm S « « > U ■ « c/l u 01 9 A- 1 H / h. • 1 > 4 1 * / _ w 1 ; (»J»P :a»Ajap qd »»s) • j • 3 ■ 3 3 J. 11 (adX]~q«nxj jaAijp~qd a»s) 01 ite amount i In our Including ig null if Is not 0) T) 3 •-! — * ig > CD 0* - w 01 c X- UJ « »j x- \ w o « X tz c — X TJ — ■ X 2 5 OS c hi ■ V 3 • er ■ 6 3 a. e 0) 3 B O U CO 01 3 o* V u Calcula of datd buf f er , tral] lr buffer empty. c ~< — •: U ■ m c _^> U) & u 1 01 » U 41 U « 41 hi > a • • ■ "O c Of (adXi~3JTJ« :jaA[jp~~qd »»$) w Ih* V > u ■ • m u • i • 3 1* c a n 6 M 1 M c 1 / ° (adXj - *aoj :> j3A[jp~qd »«s) > m 1 41 y 1 •o 41 > • at m u c 0) a (»dAj — uado j»A[jp~qd »»s) S a i 57 adX; *;»p :^a/.;jp nd »»s ad/^Uar-tj: JSA-jjp qd aas C B C V I ad/1% p«3j:u9A;jcp t,d as.- ft) ft) 58 ph_driver: data* While there is a pending read, and there is more data in our buffer. Copy the next character from our buffer into the reader's. Put a null after char just copied. Increment the reader's count of data in the buffer. Is the buffer full, or was the last char copied a newline? YES Vee reading process, Set saved read to 0. Increment the next character index by 1, module our buffer size. ♦This is not a procedure. It is one case in ph_driver. ph_driver: close_type* \ ^Js the phone available? — NO \. ^ YES Flag » results of disabling phone input. ^vls phone not available, or is flag set? NO N. . " YES Set catastrophic and reject req bits in caller's status word. Vee requesting semaphore. *This is not a procedure. It is one case in ph_driver and is specific to the Level 6 IT. 59 ph driver: flush type* Stop any current output operation Eapty the input buffer " ■ — _ Is there a saved read? y/m Reject the saved read ' - Is there a saved write? YES " ' ■ -^________^ ^€ Reject the saved write. — , Is the phone line down? Sm Set error flag in request block. Vee user's semaphore. ♦NOTE: This is not a procedure. It is one case in ph_driver, and is specific to the LSI-11 IT. 6o ph_drlver: flushtype* Beset PH_next and PH free to 0. Set lo error flag to false. Set aborted bit In reader's status word. Vee reading process. Reset saved read to 0. Flag - results of disabling output. Flag - results of getting status word for CCB Just completed. Flag • results of getting count of characters not sent. Set the writer's data count to the nuaber of characters sent. Set aborted bit In writer's status word. Vee writing process. Reset active write to 0. Vee requesting process. •This Is not a procedure. It Is one case In ph_drlver and is specific to the Level 6 IT. 61 ph_driver: open_type* Flag - results of resecting CCB list for phone input For each buffer used by phrint, as long as flag ■■ 0. Flag ■ results of initializing CCB to use this buffer. Reset buffer index used by phrint. Flag ■ results of enabling input for phone Set catestrophic and reject request bits in user's status word. Vee requesting process. •This is not a procedure. It is one case in ph_driver and is specific to the Level 6 IT. 62 63 ph_driver: status_change* Complement th * phone available flag, Set catastrophic and aborted bits in reader's status. Vee reading process. Set saved read to 0. Turn off output Input status for CCB just completed, Input number of chars not transmitted, Set catestrophic and aborted bits in writer's status. Set writer's data_len to count of chars actually sent Vee writing process. Reset active write to 0. *This is not a procedure. It is one case in ph_driver and is specific to the Level 6 IT. Gh 0) a >-4 u at > J a \ " \ „ \ w \ ^ \ ^^ 4-1 3 a CO 3 1 3 4J O c- 1 CQ o 4-1 1 at 1 4J CO 4J CO 1 •o 00 / CO o> / CO c CO / 3 4-1 / 01 1 «fl CO rH 1 <4H 1 o at 1 CO I CO 1 w g 4J W ^H 1 >4 o CO 1 00 / >> fH ca CJ CJ M 1 CQ co / • CJ * H I 4-1 V CO 1 CJ 1+4 1 3 a c ■H 1 4-1 CO / 4-1 •H fH 1 3 M 1 3 CO 1 a o PQ 1 4-1 4-1 CJ J 3* 0) •H CJ / o c o ■fl u I c J= ai 0) 1 cd a c- | OS 1 4-1 a> f 00 00 at ,,l • u 1 e c CO 4-1 u 1 •H •H CJ 4-1 00 1 iH 4-1 00 0) °1 c ■H / «3 •H • l-i CO CO • o 1~> at .* 13 I 4-1 t- 4-> <4-l M iH C • 1 •H CU CO o UQ 01 !-) 1 C <4-4 at CO 4-1 c • a at 1 •H <4-( m •H CO 1 c 1 3 CU CO CO «M C I *4h 43 VM u 4J at 0) O (0 1 o o ■H CJ CJ e» 1 4J J2 1 CO - M «H o a> 1 •H ca a I CO 01 *. JS M i-H U u 1 4J U 4-1 rH o. a. -° 1 S iH CO 1 r-i 0) .-1 43 at o 1-1 00 iH 1 at CO O 1 z CO .H, J Z CO i-t •H 4-1 c •H 1 > a) jr at cc CD •H 4-1 CO •H m 1 •H w a. 1 S-i u P CO CJ CO t-l > l 4-1 1 > (0 4J r-l to 1 CJ «0 ll 1 II H CO c 4-1 CQ a CO CJ 0) 60 I 00 00 3 at c 4-1 CO 1 CO CO a 4J CU o 0) iH 1 »H .-t at at at 0) jC CO fo 1 PL. u* c OS w > a I o 08 > 7 CO A O / 2 z 01 J= o 4-1 O CJ CU a CO 73 c CO u 01 > a at co CO CJ cu e o 0) Id 3 •a at CJ o u a. co o H CO \0 oo at T! > ex 65 phriocO Get Che status for the CCB that just completed. Does status indicate change in the data set status? NO YES Send status_change message to phone process. Return. For every character in our data buffer Initialize a new CCB using the buffer Just emptied. Increment our buffer index by 1 modulo the number of buffers we have NOTE: This version of phrint Is specific to the Level 6 IT. 66 phxintO Input status for CCB that just finished. Input CCB range to get count of characters not transmitted and store in global PH count. ~^______^ CCB status indicates an error? ^^^-~~"~~^ NO " — -~^__^^ ^ —" "" YES Send message to phone process that the write has finished. Send message to phone process that the write failed. NOTE: This version of phxint is specific to the Level 6 IT. 67 01 <4H 3 •o 1 J2 n V) eg ii \ o Id U kl \ z D. \. 3 > ki kl c^- OJ -C i-i 01 C rH ■H J3 CO o c >" Make the processo Interrup « ■ 3 CO ft. 1 I 00 01 * " 1 O & I ^^ 4) 1 1 oc • N— ' c 1 l-l / CO 01 ki 41 r4 • ra 1 a 1 •-I c a JS c c o. e 01 / w U-l -i-l 4J 41 ki a l v. 3 J= i-i / UJ ki 3 M 41 D kl u u / *" Ol CO 41 4) CO kl 1 41 •a l-l a <0 / r-l tn 3 o / kl JO • 0) 4J l-i •° / a. CO 41 k. o. U >^ 1 3 u kl • 3 01 41 1 hi a 01 4) O hi u "* / hi 3 rH ki •u u c 01 kl a 41 •H * / 4-1 ki E j: rH kl 1 c • 41 a 1) c c IB / ■H O. kl o CO S •H l-H I 3 C 6 4 c 01 •H « a u 41 l-l -* CO ki kl eg a> r-l o E ■a rH > -H CD 41 CO CO 41 ■H 0) -* as 41 e kl U 01 hi CO 41 ki CO u u u S U a <0 C ee o ki. l-l / C/J <0 01 kl 01 c a c u m u a / U -H C <*-l -H a Vm jC ki CO > •o 01 hi 01 kl ai <0 -* *-» 3 .* ■H (1 l-l u. 01 (fl 01 a) c« 01 >' U 1) <4-l ce: r , CO hi £ 3 ft. '- ■H U) V ■ . OS -n 68 pp_write() (code, buffer, count) Rsrv_pnl . Do for each display head. Turn off "must wale" for thla head. Is thla panel selected? YES Do "forever" Read display head interrupt level. Disable Interrupts. Is a kb or tp read in progress from this head? YES NO Set flag to make interrupt routine wake us up. Enable interrupts Attempt to start the write. While read still in progress Null. Enable inter- rupts to cp. Pause. Pee the head's semaphore. Do until success Read panel status. Set flag so inter- rupt routine will wake us up . Turn on "must wait" flag for this head. Enable interrupts to cp. Break. Do for each display head that has "must wait" flag set. CE Rls pnl. Pee the head's semaphore. NO 69 print f (format, pi, p2,. Start a pointer at first character of format string. Do while there are atill characters In the format string. Is the next character in the format a 'Z'? NO YES Call put_ascii to print the character. Use parm_xpand to expand the next parameter. Increment format string pointer past the character. Increment format string pointer past format descriptor. Do for each character in the expanded string Use put_ascli to print the character. NOTE: This version of prlntf is specific to the LSI 11 IT. prlntf (fmt, pi, p2 ) Set s to point to this character In the format string. Print the string from s up to here, using putstring. Advance to next format string character. Use parm expand to expand the next parameter. Print expanded parameter. Advance past format in format string. "s" » null. NOTE: This version of prlntf is specific to the Level 6 IT. 70 put (x, y, vector, count, flag) Compute any shifting required to do addressing on 16-dot boundaries. ** T ° it a single vector written many times? .. "" YES ' " ■ , — ' ^"^^--^^^^^ Is shifting required? ^ TES -^^^ ^^^-"-^ no Rsrv pnl. " Is shifting required? / YES " ""-"-— -^_ /N° Write top part of vector. Write out the vector. Copy vectors into local buffer and write out 18 at a time, shifting to write lower parts of vectors. Write bottom part of vector. Copy vectors into local buffer and write out 18 at at a time, shifting to write upper parts of vectors (or all of vectors). Rls pnl. NOTE: This version of put is specific to the Level 6 IT. put (X , Y, vector, count, flag) Compute amount of shirting required to do the puts on 16-dot boundrles Set up panel registers for write Do count times "*""" — «^^^ Is it a put of a single vector? ^ """""""^ Yes " " — — - *«^__^ ^ — " No data = vector data = next word pointed at by vector ' " Is shifting required? yS Put lower part of vector "data" on the screen Put upper part (or all of) vector "data on the screen Increment the X panel address NOTE: This version of put is specific to the LSI- 11 IT. 71 72 73 putstring (buffer. count) Ld_page . Ld cs. Write the string. putchar(x, y. ch) Get a pointer to the vectors for this character In the current character set. Use put to VT ite the vectors. NOTE: This version of putchar is specific to the LSI 11 IT. putdot Write an appropriately formatted message to the Z80 panel controller. NOTE: This version of putdot is specific to the L6 IT. putdot (X,Y,3iode) Set panel registers to write or erase the dot at X,Y. NOTE: This version of putdot is specific to the LSI-11 IT. lh putlinet'Xa, Ya, Xr, Yr, mode) NOTE: This version of putline is specific to the LSI 11 IT. putline Write an appropriately formatted message to the Z80 panel controller. NOTE: This version of putline is specific to the L6 IT. lb read(device_id, buf_ptr, length, (status) Does this process own the device? YES Return error. Send read request to device handler. Pee the request semaphore. Set status from that returned by handler process for read request. Is "catastrophic" bit on in status? YES NO Return error. Return success. read_q(q_ptr) Pee the semaphore for this queue. Deq an element from this queue. Return the value returned by deq. 76 reatart_io(chan, it_ld) Offset - in_out * the number of LCT bytes per channel. Ptr - the address of the LCT bytes for this channel In the initial MLCP image. Flag - false. For every LCT byte for this channel Write this byte to the corresponding LCT byte for this channel. Flag • true. Break. Flag - results of enabling lo on this channel, Return (flag). 77 ringbelK) NOTE: This version of ringbell is specific to the LSI11 IT. ring bellO Write an appropriately formatted message to the Z80 panel controller. NOTE: This version of ringbell is specific to the L6 IT. T 8 Rls pnl() rsrv pnl() NO This process owns the panels? y'YES pee (pp_access). pp_owner ■ ME. Increment pp_res_level. 79 s_read(drive, lector, buffer) Compute bus address of disk. Compute physical track and sector number for the sector. Do up the maximum number of retries Loop forever Try to do an IOLD to load the buffer address and size Into the Interface Have we exceeded the maximum number of attempts? YES Return error. Write track and sector numbers to the interface. Start a seek. Do until status is read Try to read disk status (success implies that the seek is done). Do until status is read Try to read disk status (success implies that read is done). n*"TE: This version of s read Is specif!-- to *-h» I,e\-el 6 IT. NO Nll'IK: l,l|,j *"' rr ' ' "" '•' •■ r. 1. 1 Is *).,.. | r 1 . 1,. Mi,- I.Sl II II 81 •_wrlte(drtve, sector, buffer) Computer bus address of disk. Compute physical track and sector number for the sector. Do up to the maximum number of retries. Loop forever Try to do an IOLD to load the buffer address and size into the interface. Have we exceeded maximum number of attempts. YES Return error. Write track and sector numbers to the Interface. Start a seek. Do until status Is read: Try to read disk status (success Implies that the seek Is done). Do until status Is read: Try to read disk status (success Imp lies that the write Is done). HOTE: Thl • version of s_wrlte Is specific to the Level 6 IT. wr lt«'(Jr lw, Hi-iiiir, biitHT) Drv » drive number less than 11. Trk • number of track containing sector. Sect ■ number of sector on track. For the maximum number of attempts: Send drv and sect numbers to disk. Walt for the disk to be ready. Set disk's address. Send track number and write command to disk. Walt for the disk to be ready. Swab (l he il.it. i ri'.id). Return (0). K.-iurn (-1). Mini. ii, i„ „.. r „|„„ ,,i Hwrll.- Is Miifiilii I • I In- LSI II IT. 83 save free(drv) Is drive number (drv) out of range? Return(-l) Write the injnemory copy of freemap to disk. Return results of write. screen clear Write an appropriately formatted message to the Z80 panel controller. NOTE: This version of screen_clear is specific to the L6 IT. screen clear() Set panel control register to clear the screen. NOTE: This version of screen clear is specific to the LSI-11 IT. 84 s crunch(ptr, size, num) For size times *ptr - *(ptr + num). Increment ptr. seek(4evice_id, length, type) 85 set_charset(cs) CS ID - CS •et_cur8or(x,y) Convert x and y from character to dot coordinates. Assign values to curs_x and curs_y. NOTE: This version of set_cursor is specific to the LSI-11 IT. •et_cursor (x_addr, yaddr) Convert parameters to dot offsets. Write offsets to display head controller. NOTE: This version of set_cursor Is specific to the Level 6 IT. 86 ••«._•:. v (env_ptr) Sec_charaet. S«t_cursor. Set_page . YES _^^ Is this the Level 6 version? NO Set_pnl. ••t_s»de(devlce_ld, buf_ptr, length, istatus) - — ■ ___ Is devlce_ld out of range? YES . ^X'NO Return error. " — — — ________^^^ Does this process own the device? NO ' — . .X^ES Return error. Send set mode request to device handler. Set status from that returned by handler process for set node request. " Is "catastrophic" bit on In status? Return error. 87 •etpage (pageptr) Move parameters from the new page descriptor to the "current" one. """*■—— ^^^^^ Is this the Level 6 version? / YES ""^""*~'~ — *^^ / »^^^^ / NO Set the "nev page" flag. startupO Size ■ maximum address of available memory. Zero memory from the end of the program to the end of memory. Set up CORETAB to indicate all of free memory. Clear the panel. Allocate space for the free queue elements. Initialize the list of free queue elements. Set the default page, character set, and cursor position to use for plasma panel printing. Set up the READYQ as empty. Create all the processes specified in PROCTAB. Initialize the I/O system. Call first block. NOTE: This version of startup is specific to the LSI 11 IT. 88 startup fhigh^ Set up C0F.ETA5 to indicate all of memory. Allocate spaje for the Cr@e queue. Initialize the list of free queue elements. Disable interrupts from all of the remote display heads. Set up READY Q as empty. Initialize the remote display heads. Set default page, character set, and sursor position far plasma panel printing. Create all processes specified in FROCTAB. Load the MLCP. Initialize the I/O system. Enable interrupts from all remote display heads. _ Call first block. NOTE: This version of startup is specific to the Level 6 IT. 89 str num(num, base, place) ^V^ Is base valid (i.e., greater than 1 and ^V^ less than 16)? NO >w ^ ^ YES Put a »*' in place. next ■ quotient of unsigned division of nun by base. \ next ! * 0? ^^^** NO \ ^^t^ * 00 * YES Recursively call str num with parameters next, base, and place. next ■ remainder of unsigned division of num by base. Convert next to the ASCII character representing its value, and put that char where indicated by *place. Increment *place by one character. 90 suicide () Clean up any pending I/O . issocla ted v 1th this process. Return the process' stack to the pool of free memory. Do a process switch. tiod(token, separator) Get_cur8or. Get_page_size. Compute length of token string. Compute length of separator string. — * — ta (length of token string) + (length of separator string) more than the/ __ space left on this line? / YES ' — -_. / NO Print a newline using printf. Print the token and separator strings using printf. ■ 91 t<*_prtn,(d«ll„, .ep.rator. text. panna) »- t^, find Mr.t P a r a^£ ^=I- : - , , | ■ - YES 92 01 a u H s 93 tp_driver: data_type* YES — ________ > ^^^^ Is the touch panel open? y^w YES """ Is there a read saved up? "* ■ """ NO Copy the touch Into the user a buffer. "^^--.^^Is there space in buffer? f NO Vee user's semaphore. Reset "read pending" flag. Copy the touch into the internal buffer. 1 *This is not a procedure. It is one case in tp driver. tp_driver: read type* Is there data available? ^ "" YES " „ NO Compute number of touches to give to user. Save the read request. Copy touches into user's buffer. Vee user's semaphore. ♦This is not a procedure. It is one case in tp driver. 9U 95 tt activate(t) For every slot in tt_current Is this slot empty? tt current (slot) - t, Display the target, Return(slot) Return (-1) YES 96 tt_arranger(ltat, nua, valuea, labels, c», flag*, area, t width, t height, mode) Copy valuea in area to left, bottom, width, and height. Max_p«r_rov • sax number of targeta t_wldth dota wide that will fit In one torn. 1 • height of final block of targets. Move bottom up by half of difference between 1 and available area. height • 1. 1 * width of row of targets. Move left over by half the difference between 1 and available area. width - i. y ■ height of area. For nun descriptions Move y down the height of one target. Move x back to 0. la this the last row and are we centering horlzontall Cet width of this row. Move left over by h.ilf the difference between this width and wl'llh of .irii. Create a target at x+left, y+hottom having the attributes specified In parameters. Move x over one target width. 97 tt cleanupO For every slot in tt_current Delete the target pointed to by the entry in that slot. tt_create(t, x, y, width, height, value, label, cs, flag) Copy the parameters into the appropriate fields of the target structure. Reset the in use flag. "~" - — ^^^stflags set so that the target would appear on no remote *"** — -^.^^ display heads? YES " ^^^ / NO Set tflags so the target will appear on head 0, only. NOTE: This version of tt create is specific to the Level 6 IT. tt create(t, x, y, width, height, value, label, cs, flag) Copy the parameters into the appropriate fields of the target structure. Reset the in use flag. NOTE: This version of tt create is specific to the LSI-11 IT. 98 tt deactlvate(slot) Erase the target Identified by slot. Delete the target. Return the results of erasing and delet Ing. tt_delete(slot) """"■--—-— ^^Does slot Indicate an active target? NO ■*-* — ^^^^ v' YES Return (-1). Turn off In use flag in target indicated by slot. Zero tt current (slot). Return (0). tt flash(slot) *" «^^^_^ Does slot indicate an active target? NO "* — ■ yr YES Return (-1). NO Is this target flashable? YES Lite all the dots in the target. Erase then all. Display the target. Return (0). 99 \ *f> \ *" 1 > c^- M • M U m u « > nH kl u « * c ■ • 1 ^ ki * 1 at 01 w 1 c •« • 1 a u v I a o •* X Tl oi a 4J 01 •M ■ •a ■ 01 40 u m 00 O a c •a — * 01 ■ ex 01 01 • & u X * 1 ■ 10 4J £ *>■• c ■o V >> CO & ■ nN ■o 01 X > 4J «l 00 kl CO 01 kl 5 SO c > as 01 kl 01 00 ki 10 01 ■ c 01 u CO a CO 01 X s 00 c > CO 01 41 01 oc M CO W 01 X kl e X 3 ■ b 01 ki u CO M (0 w ■ 00 u ■ 44 01 00 w ■ II a at 4J a ki ti X u k> CO ki 01 e C o u kl UN 01 kl 01 00 kl CO w 01 X kl 01 00 kl 01 CO kl ea X g UN 01 e «-N 5 at JZ u c 3 01 00 CO a j w o 4J O NN kl CO X to 01 c e co kl u ■ at JZ t* 01 m IM bo 4> O 3 1 I a 01 o 01 CO X CO <*-. •2 c oe 5 X a Ho| O 3 a 01 kl X 01 o z V O M rH N 4J •H C 01 u JZ *H ■M IN kl CO X a. 3 CO > U IM CO o c M o i *-j e O IM ■H kl u u 4J ti B 01 01 at o 3 «Q a OB X 01 CO kl JD 01 ki *- £ M u 01 kl c M c x •VI c o 01 01 O w > V o 10 o u b X CO ea h <— 1 u (B 3 a. o 00 a X X a o at <9 W w X kl u kl CO x 4J 4-> 0) u u 01 ■o 00 u to e 4 oc c ■H X kl IM c 3 •H V J 01 o 3 u Lj 1 , *-» ■ M In kl e CO CO 01 N •a e c at a **N U X i 3 c S". <0 V w ot 41 w / u a. X CO h ■ol JZ 1 t C « / H In 1 w c X u CO X a p c tol o ■H *"* / c 01 01 <0 •n 01 01 at at , t 1 e 3 SL a i w / o / Z 2 X a 9 e oj M to 10 u M kl 01 V) 1 01 C/> X kl kl 01 X 4J kl 01 X nN 1 r JZ •j at U3 A* o b< o « e ■ s e In 3 M 01 M , * s e 100 ttlabel(slot) Return (-1), Does slot indicate an active target? t ■ pointer to target structure for target. Is this a target that should not be labeled? NO Return (0), Remember current printing environment. Set x and y to coordinates of lower left corner of target, leaving white space Inside border. Set width and height to the size of the target, leaving white space inside the edges. Set the charset to the one for the target. Get the size of characters in this charset. Modify x and width to center a maximum line of characters within the target. Set the printing page to be this area within the target. Position the cursor at the top of the page. Tok_print the label. Restore the printing environment. Return (0). NOTE: This version of tt_label is specific to the LSI-11 IT. 101 tt_llte(slot, mode) Get the coordinates of the lower left corner of the target In x and y. Get the size of the target in width and height. Area_lite(x, y, x + width -1, y + height -1, mode), Return (0) NOTE: This version of tt_lite is specific to the LSI-11 IT. tt_lite(slot, mode) • "" Does slot indicate an active target? ^S^ YES Return (-1). ^S^ Is this a flashable target? Get the coordinates of the lower left corner of the target in x and i- Get the size of the target in width and height. Rsrv_pul. Get_pul (&pul). Use set_pnl to set from tflags the set of display heads to write on. Area_lite (x, y, x+width -1, y+height -1, mode). Set pnl (pnl). Rls pnl. Return (0). This version of tt_lite is specific to the Level 6. 102 tt mark(slot, mode) "" Does slot indicate an active target? YES Return (-1). ^"■~"—- — »^^^^ Is this a markable target? NO "" .^^ jT YES Return (0) . Get coordinates of lower right corner of target, offset to be inside boarder, in x2, yl. Get coordinate of left edge of mark in xl. Get coordinate of top edge of mark in y2. Area lite (xl, yl, x2, y2, ). Return (0). NOTE: This version cvf tt mark is specific to the LSI 11 IT. m . 103 * | .■- S» tt_mark(slot, mode) Does slot indicate an active target? ^ YES Return (-1). ■ Is this a markable target? NO ■ ^ ^YES Return (0). Get coordinates of lower right corner of target, offset to be inside border, in x2, yl. Get coordinate of left edge of mark in xl. Get coordinate of top edge of mark in y2. Rsrv_pnl. Get_pnl(&pnl). Use set_pnl to set from tflags the set of remote display heads to be written on. Area_lite(xl, yl, x2, y2, mode). Set_pnl(pnl). Return (0). NOTE: This version of ttmark is specific to the Level 6 IT. 104 ttjsove(t, newx, new_y) Set tx and ty entries in target structure t to nevjc and new^y. tt_outline(slot, node) Cet coordinates of lover left corner of target in xl and yl, Get coordinates of upper right corner of target in x2 and y2. Hove xl, yl, x2, and y2 to the inside of the target to leave white space around it. Use putllne to display or erase the four lines connecting (xl, yl) to (xl, y2) to (x2, y2) to (x2, yl) and back. Return (0). NOTE: This version of tt_outllne is specific to the LSI-11 IT. 105 tt_out line (slot , mode) Return (-1), Does slot Indicate an active target? t ■ tt current (slot). Get coordinates of lower left corner of target in xl and yl. Get coordinates of upper right corner of target in x2 and y2. Hove xl, x2, and y2 to the inside of the target to leave white space around it. Rsrv_pnl. Use get_pnl to save the set of currently selected remote display heads. Use set_pnl to set the set of selected heads to those specified in tflags. Use pucline to display or erase the four lines connecting (xl, yl) to (xl,y2) to (x2, y2) to (x2, yl) and back. Use set_pnl to put the set of selected heads back. Rla_pnl. Return (0) . NOTE: This version of tt outline is specific to the Level 6 IT. io6 tt_read (touch) Flush input from the touch panel. While (true) Read the coordinates of a touch. tx - the x coordinate, in dots. ty ■ the y coordinate, in dots. For every slot in tt current Does this slot describe an active target located on the .display head from which this touch came? Flash this target. Return (slot). NOTE: This version of tt read is specific to the Level 6 IT. 107 CC read (touch) Flush input from the touch panel. While (true) Read the coordinates of a touch. tx » the x coordinate, in dots. ty - the y coordinate, in dots. For every slot in tt current. NOTE: This version of ttread is specific to the LSI 11 IT. tt_relabel(t, str, value, mode) ^"""•^w^^ Is t an index into tt current? ^ tat ****** NO "^^^^^^ ^ -^ YES Use t as target pointer. Get pointer to target structure to be relabeled. Change tlabel and tvalue fields of target structure to be str and value. 108 tttelect lon«(toueh, max num ti-hs, num. ovrfl, v/tlues, (lots) 109 vee(sem) Become non- interrupt able . ^V^ Is the count for this semaphore less^^^*"^^ ^V than 0? ^ 0l0 0i» 0000 ^ NO >. ^^ 00* 0000 ^ YES Dequeue the process waiting on this semaphore. Add that process to the READY Q. Increment the count for this semaphore. Restore the initial interruptable status. verify(sl, s2) Count - 0. For every character in si string For every character in s2. ^^>^ Does this char in s2 match the ^^^ ^"V^current char in si? ^^^ NO ^S^^ ^^^ YES GO TO OK. Return(count) . Peturn (count) Or'.: Inirer.ent, ccunt Rett jm (-1 ). 110 vlpproc NOTE: This version of vlpproc Is specific to the LSI II IT. Ill vip_proc: vlp read* -~"~""~~— — _____ Is this a read request and another read Is alre.idy pending? YES " " __ <** NO Reject the new read request. B.eak. ~~ "~ ~~" ~ - ~— Is the buffer ?mpcy T _/ NO YES Save a pointer to this request block as a pending read. Break. While there are still input characters and the user's buffer is not exhausted. Copy a character into the user's buffer. ■ Was the character an ETX? Jr NO TES — Break. Hull terminate the user's buffer. Vea the user's semaphore. •This is not a procedure. It Is one case in vipproc. vlp_proc : vip_wr i t e * Vee user's request. Set flag Indicating no write pending. Break. Construct an output messa.gu, using as much data from the current write request as will fit In the output buffer. — — — — — — — — Set buffer pointer and count for the output interrupt handler. Set flag for Input Interrupt processor indicating that an output message is available. •This la not a procedure. It la one case in vlp_proc. 112 • ^ 4 u u w • s w 4 1» 4 U « 3 « 3 W 4 i-l O" V •O 4 4 b • OC ►. i e *•• t* fcl U *H 4 b \ ° e e 4 »• 4 1 z ^4 1 Jt a u e «* 4 w 4 " 6 4X334 • £ 4 *h 1 ' J / ° U £ £ 4 J* w 4 4 U 4 3 U 3 |J w b «J b O" C 4 O" c 3 k u / ■* Jl U £ • 1 4 4 • "S 1 *""'*"«»^ O B 4 ,. V 9 u J 4 "-«»? ■ w i b w / 4 X *D X u W n 4 U 3 / * > / 4 X w 3 • « 5 4 •I U « W e V J i- 1 2 / w 1 « > 4 4 X •/ « • >• as 4 4 M CD UBS 4 4 w b W ■n T> k- B •« 3 > 4 4 W / a a •C / 4 4 y I ti f ■^ 1 >> w i 4 • *4 J! / 4 4 ; G s b 3 ^^^^ u ^"»^> OS -rj ■ 4 4 4 • j< b e U O s ■o <~- / 8 it" u 4 4 4 / ■H X • "1 ■H ■ W 4 b > / 4 / 4 4/ J< 4J (Q — £ u 00 a > W 1 * 1 Z/ o 4 4 CU 3 w s • f * hi QQ CS £ 3 1 * ° l c I ■* 1 3 4 C U 1) •H 4 3 i-l H b 4 I a 4- 1 *4 4 O. • ■ a ■ I > •1 3 *> 4 .. a. 0. o ^> u ■o a a f> -4->. £ 4 "vS 1 4 J 3 3 -^d i •a m lb 11 a > 4 ■O 1 4 4 4 u 1 £ 4 « • 4 C U 3 e • <9 u 4 H •*4 TJ 3 4 C ib H c ° U 3 4 60 ■< 4 u • or 4 a. -< 3 U £ J a. 3 4 c " b b ■ 4 1 **- b ? u > 3 £ a > Sec line flag to false. e c b u • £ W M a 8 b ■M 1 ^ 1 >■ « ■ 4) 4 U. w 3 e^ 3 3 u 3 J ' i b 4 b 4 4 3 w b 4 a > • 4 « a. 4 >> (A w V 4 b 3 *■* >M U T3 3 u A U 3 a ■a c • M • t u • > « b O • 4 V OS o s > w e • a IP >, v. s^^ * " NO Inp_atate - stat_ wait. * ""-.^^ Input - EOT? ^^^f-"""^ YES ^^"^-^^ ^^-^ NO Inp state ■ got trans. Inp state - error flush. I.e. transmission received ok. I.e. transmission received In error. •This Is not a procedure. It Is one case In vlprlnt. bcc wait • Is the Input character equal to the longitudinal parity check character?. MO YES Inp_state ■ error_flush. Inpstate - SOH EOT wait. •This la not a procedure. It Is one case in vlprlnt. SOH EOT wait* YES Input - SOH? " N^ ^^~~~~~~^ NO Inp_state adr_walt. --»*^^ Input - EOT? YES — -^^ /no Inp_atate - got_trans. I.e. transmission received ok. Initialize longitudinal parity check charactei r. •This la not a procedure. It Is one case In vlprlnt. 119 atat wait* Update longitudinal p« rlty check. YES ""-^^^ Input » null? Input_type ■ 3. ^"**^^^ t ^ Input - ACK? YES ****"»-^^^ _____ ' NO I.e. this la an Input taxt message. Input_type - 1. """""""■"•^^ Input - NAK? ^^0**^* YES ^***^-^.^^ ^^"^ NO Inp_atate - STXwalt. I.e. this is an ACK message. Input type • 2. Inp_atate » error_fluah. Inp state » null_STX_ wait. i.e. this Is a NAK mes- sage. Inp_atate - null_STX_wait. Transmission is In error. •This la not a procedure. It la one caae in viprlnt. east rav * Update longitudinal parity check. ^^"-^^^ Would thia character overflow the buffer? ^__ — _——""" TES ^ , ^^-^^^^ ^_________ — — NO Inp_etate - error_fluah. Insert the character into the input buffer. ^*v Was it an ETX? ^_____ NO ^S. ' YES Inp state - bec wait. •This la not a procedure. It la one case in viprlnt. 120 vipxlntO ^...^^^ Are there characters left to send? ^ — ■ ■"""""""" Send the next character. Disable the transmitter and set up for receiving. vrlte(device id, &status) Send write request to device handler. Pee the request semaphore. Set status from that returned by handler process for write request. la "catastrophic" bit on in status? YES Return error. Return success. NO vrite_q(q_ptr, value) Enqueue value on queue, Vee the semaphore associated with this queue. xopen(fib, lndexb, o, slot) Assign appropriate values into file index block. Return (0) 121 Z80 lnt 122 zero blk(ev, blk) Plush this ev structure's buffer. Zero the buffer. For each sector in the block Write out one sector's worth of zeros zero_sim(dl , d2, o, userbuf, 1, fen) ^^ Is either 1 or o out of range, or does buffer >. cross a block boundary, or is fen not PFAn? — NO \^ „__-. ■ YES Return (-1). Fill user's buffer with O's. Return (0). UNCLASSIFIED SECURITY CLASSIFICATION OF THIS PACE (Whin Data Entered) REPORT DOCUMENTATION PAGE READ INSTRUCTIONS BEFORE COMPLETING FORM '■ JJ?RO?L T NUMBER ™ . - _ - CAC Document Number 252 CCTC-WAD Document Number 7523 2. GOVT ACCESSION NO 3. RECIPIENT'S CATALOG NUMBER 4. TlTLt (and Subtitle) Intelligent Terminal Software Flowcharts S. TYPE OF REPORT * PERIOD COVERED Research 6. PERFORMING ORG. REPORT NUMBER CAC #252 7. AUTHORS.) Deborah S. Brown Betty Kasprzycki John R. Mullen David A. Willcox S. CONTRACT OR GRANT NUMBER(«) DCA100-76-C-0088 9. PERFORMING ORGANIZATION NAME AND ADDRESS Center for Advanced Computation University of Illinois Urbana, Illinois 61801 10. PROGRAM ELEMENT. PROJECT, TASK AREA 4 WORK UNIT NUMBERS It. CONTROLLING OFFICE NAME AND ADDRESS Command and Control Technical Center 11440 Isaac Newton Square, North Reston, Virginia 22090 12. REPORT DATE October 31, 1977 13. NUMBER OF PAGES 14. MONITORING AGENCY NAME ft ADDRESSf// dllterent from Controlling Olflcei 15. SECURITY CLASS, (ol this report) UNCLASSIFIED 15a. DECLASSIFI CATION/ DOWN GRADING SCHEDULE 16. DISTRIBUTION STATEMENT (ol this Report) Copies may be obtained from the address in 11 above. 17. DISTRIBUTION STATEMENT (ol the abstract entered In Block 20. II dllterent Irom Report) No restriction on distribution. 18. SUPPLEMENTARY NOTES None 19. KEY WORDS (Continue on reverse aide II necessary and Identity by block number) Intelligent Terminal Man-Machine Interface 20. ABSTRACT (Continue on reverse side II necessary and Identity by block number) This document contains Nassi-Shneiderman flowcharts for the Intelligent Terminal system described in CAC document number 236 (CCTC-WAD Document Number 7516), "Intelligent Terminal Programmer's Manual." DO t JAN 73 1473 EDITION OF I NOV 65 IS OBSOLETE UNCLASSIFIED SECURITY CLASSIFICATION OF THIS PAGE (Whan Data Entered) m4