! The project team felt that the objectives could not be met with a traditional design approach. Structured analysis with real-time extensions and structured design provided an effective alternative. ! • • • • '(2 / /$1 #$2"1(!$2 3'$ 42$ .% 2314"341$# - +82(2 6(3' 1$ +9 3(,$ $73$-2(.-2 -# 2314"341$# #$2(&- (- 3'$ 1$#$2(&- .% 3'$ 3$1,(- + -# 2$1( + /1(-3$1 #1(5$1 %.1 3'$ ( ./$1 3(-& 2823$, .- 3'$ ".,/43$1 2823$, '$ 1$#$2(&- /1.)9 $"3 .!)$"3(5$2 6$1$ 3. (-3 (- 3'$ "411$-3 !+."* ,.#$ /$1%.1, -"$ 3'$ , (,.#$ .% # 3 31 -2%$1 %.1 3$1,(- + (2 3. 31 -2%$1 "' 1 "3$12 (- !+."*2 .% # 3 ,/1.5$ 31 -2 "3(.- /1."$22(-& /$1%.1, -"$ .(-#42318923 -# 1# !$-"', 1*2 !8 3. 3'1.4&' 3. 1$#4"3(.- (- 3'$ 3$1,(- + #1(5$1 / 3' +$-&3'2 (-3 (- 3'$ "411$-3 +$5$+ .% %4-"3(.- +(38 1.#4"$ '(&'904 +(38 24//.13 !+$ -# , (-3 (- !+$ /1.#4"3 '$ /1.)$"3 3$ , %$+3 6$ ".4+# -.3 "'($5$ 3'$2$ &. +2 6(3' 3'$ 3'$-9"411$-3 #$5$+./,$-3 3$"'-(04$2 !)$"39.1($-3$# ,$3'.#2 6$1$ 14+$# .43 !$" 42$ .% 3'$ /$1%.1, -"$ 1$04(1$9 ,$-32 $ $+$"3$# 3. 42$ 2314"341$# - +82(2 6(3' 1$ +93(,$ $73$-2(.-2 -# 2314"341$# #$2(&- 61(3$ ".-" 3 /1."$#41$ /1."$22$2 61(3$2 1$"$(5$# %1., 3'$ 3$1,(- + 23.1 &$ , - &$1 -# 2$-#2 3'$, 3. 3'$ 3$1,(- + -# 2$1( + /1(-3$1 #$5("$ , - &$1 (3 /1.5(#$2 % 23$1 61(3$ / 3' %.1 3$1,(- +2 '$ 3$1,(- + -# 2$1( + /1(-3$1 #$5("$ , - &$1 ".,,4-(" 3$2 1$ # 61(3$ -# ".-31.+ (-%.1, 3(.3. 3'$ # 3 ".,,4-(" 3(.- -# 3$1,(- + ".-31.++$1 3'1.4&' 3'$ 5$23 $5("$ .-31.+ 1.3.".+ '$ +.6$1 (-3$19 % "$ .% 3'(2 /1.3.".+ (2 3'$ %+.6 ".-31.+ , - &$1 '$ %+.6 ".-31.+ , - &$1 /1.5(#$2 1$+( !+$ 31 -2/.13 !$36$$- 3'$ -# 3'$ !8 (,/+$,$-3(-& 31 -2/.13 /1.3.".+ " ++$# 3'$ 5$23 +.6 .-31.+ 1.3.".+ '$ 23.1 &$ , - &9 $12 -# % 23 61(3$ ".-" 3 /1."$#41$ 1$ (-5.*$# !8 /1."$9 #41$ " ++2 '$ (-3$1% "$ !$36$$- 3'$ .3'$1 ,.#4+$2 (- 3'$ #1(5$1 -# 3'$ ./$1 3(-& 2823$, (2 ,$22 &$9! 2$# 5( ( /.132 File System Storage Managers '$ .1(&(- + #1(5$1 6 2 ! 2$# .- 3'$ 3$1,(- + #1(5$1 .% 3'$ ./$1 3(-& 2823$, 41(-& (32 #$2(&- 2/$"(%(9 " 3(.- .% 3'$ 3$1,(- + -# /1(-3$1 24!2823$, 6 2 4-"+$ 1 -# +$# 3. , -8 /1.!+$,2 (-"$ 3'$ .1(&(- + #1(5$1 ' # ##$# , -8 %$ 341$2 2(-"$ (32 %(123 1$+$ 2$ (3 6 2 (,/.13 -3 3. ' 5$ ".,/+$3$ 2/$"(%(" 3(.- .% 3'$ 24!2823$, 3. ,$$3 3'$ /1.)9 $"3 &. +2 314"341$# - +82(2 /1.5(#$# 3'(2 '$ .1(&(- + #1(5$1 ".-2(232 .% 2$5$- ,.#4+$2 3' 3 ' -#+$ 3'$ !$36$$- 3'$ %(+$ 2823$, 3'$ ( ./$1 3(-& 2823$, -# 3'$ # 3 ".,,4-(" 3(.- -# 3$1,(- + ".-31.++$1 (& '$1$ 1$ 36. 23.1 &$ , - &$12 '$ 3$1,(9 - + 23.1 &$ , - &$1 /1.5(#$2 3'$ (-3$1% "$ !$36$$- %(+$ 2823$, 1$ # -# 61(3$ (-31(-2(" " ++2 -# 3'$ 3$1,(- + +.&(" + #$5("$ , - &$1 .1 % 23 61(3$ ".-" 3 /1."$#41$ '$ 2$1( + /1(-3$1 23.1 &$ , - &$1 /1.5(#$2 3'$ (-3$1% "$ !$36$$ %(+$ 2823$, 61(3$ (-31(-2(" " ++2 -# 3'$ 2$1( + /1(-3$1 +.&(" + #$5("$ , - &$1 (&'9+$5$+ (2 3'$ .+# / 3' !$9 36$$- 3'$ %(+$ 2823$, -# 3'$ +.&(" + #$5("$ , - &$12 3 &$-$1 ++8 ' -#+$2 -.-91$ #61(3$ ".-31.+2 ./$-2 "+.2$2 '$1$ 1$ 36. +.&(" + #$5("$ , - &$12 .-$ %.1 3$19 ,(- +2 -# .-$ %.1 2$1( + /1(-3$12 '$ +.&(" + #$5("$ , - &9 $12 31 -2%$1 # 3 !$36$$- 3'$ 42$1 23 "* -# 3'$ # 3 ".,9 ,4-(" 3(.- !4%%$12 %.1 1$ #2 61(3$2 -# ".-31.+2 '$ % 23 4&423 $6+$339 "* 1# .41- + High-Level I/O Logical Device Managers Fast Write Concat Terminal and Serial Printer Device Manager Flow Control Manager LAN Driver Fig. 1. 1(&(- + #1(5$1 1"'(3$"341$ File System Storage Manager High-Level I/O Fast I/O Manager (Process Stack) Deferred I/O Manager Logical Layer Inbound I/O Manager Logical Layer Logical Layer Device Control Layer (ADCP) Transport Layer (AFCP) Device Control Layer (ADCP) Transport Layer (AFCP) Device Control Layer (ADCP) Transport Layer (AFCP) &,"*#1 "#$#00#" 0#/3#121 $0-+ 2&# $12 +,%#0 ," 0#/3#121 2&2 0# +"# 2&0-3%& 2&# 9-*" &'%&:*#4#* .2& 13!& 1 -.#, !*-1# ," .0##+.2'4# 50'2#1 &# ', -3," +,%#0 *1- &1 +#11%#: 1#" ',2#0$!# 2 0#!#'4#1 ', -3," .!)#21 $0-+ 2&# "0'4#0 $ 2&# .!)#2 '1 0#.*7 2- , 0#/3#12 2&# ', -3," +,%#0 1#,"1 +#1: 1%# 2- #'2&#0 2&# $12 +,%#0 -0 2&# "#$#00#" +,: %#0 "#.#,"',% -, 5&'!& -$ 2&# 25- ','2'2#" 2&# 0#/3#12 2 *1- &,"*#1 17,!&0-,-31 #4#,21 &#0# 51 1-+# !-,!#0, 2&2 1203!230#" ,*71'1 ," 1203!: 230#" "#1'%, "-!3+#,21 5-3*" ,-2 $'2 ',2- "-!3+#,21 .0-: "3!#" 7 2&# .0-"3!2 *'$# !7!*# '2& -30 0#!#,2*7 0#4'1#" *'$# !7!*# 2&'1 230,#" -32 2- ,-2 # , '113# 30 1-$250# .0-"3!2 *'$# !7!*# !-,2',1 2&# $-**-5',% .&1#1 ," .0-"3!#1 2&# $-**-5',% * "-!3+#,21 Phase LAN Driver Method 0-.-1* ,4#12'%2'-, ADCP = Avesta Device Control Protocol AFCP = Avesta Flow Control Protocol Fig. 2. #"#1'%,#" "0'4#0 0!&'2#!230# &# ,#5 0#"#1'%,#" "0'4#0 !-,1'121 -$ 2&0## +-"3*#1 5'2& 2&0## *7#01 ', #!& +-"3*# '% &# 2&0## *7#01 0# *-%'!* "#4'!# ," 20,1.-02 &# *-%'!* *7#0 !/3'0#1 2&# 0#1-30!#1 ,##"#" 2- !-+.*#2# 2&# 0#/3#12 ," 20,1$#01 2&# "2 $0-+ 2- 2&# 31#0 12!) ',2- -32 -$ "2 !-++3: ,'!2'-, 3$$#0 &# "#4'!# *7#0 &,"*#1 2&# 4#12 #4'!# -,20-* 0-2-!-* 5&'!& '1 2&# +#!&,'1+ 2- !-++3,'!2# 5'2& 2&# &# 20,1.-02 *7#0 '+.*#+#,21 2&# 4#12 *-5 -,20-* 0-2-!-* 20,1.-02 .0-2-!-* ," ',2#0$!#1 5'2& 2&# "0'4#0 &# 2&0## +-"3*#1 ', 2&# 0#"#1'%,#" "0'4#0 0# 2&# $12 +,%#0 2&# "#$#00#" +,%#0 ," 2&# ', -3," +,%#0 &# $12 +,%#0 '1 ',4-)#" 7 2&# $'*# 1712#+ 5'2& .0-!#"30# !** 2 &,"*#1 2&# +-12 !-++-,*7 #6#: !32#" 0#"1 50'2#1 ," 2#0+',* !-,20-*1 #% !&,%# 1.##" .0'27 #2! 2 22#+.21 2- .0-!#11 #!& 0#/3#12 2!-+.*#2'-, $ '2 !,,-2 !-+.*#2# 2&# .0-!#11',% #!31# -$ 2&# *!) -$ 1-+# 0#1-30!# 2&# $12 +,%#0 5'** *-!) 3,2'* 2&# 0#1-30!# '1 4'* *# $ 2&# !,,-2 # *-!)#" '# '2 '1 ,-:5'2 2&#, 2&# $12 +,%#0 1#,"1 2&# 2- 2&# "#$#00#" +,%#0 $ 2&# 0#/3#12 !,,-2 # !-+.*#2#" #!31# 2&# 95',"-5 '1 !*-1#" 2 2&# 20,1.-02 *#4#* 2&# 0#/3#12 '1 *1- 1#,2 2- 2&# "#$#00#" +,%#0 &# "#$#00#" +,%#0 &1 +#11%#: 1#" ',2#0$!# 2 ,4#12'%2'-, #.-02 #4#*-.+#,2 .#!'$7 #1'%, 2& 20!# 32'*'27 20!#1 -$ 2&# -0'%',* "0'4#0 5#0# ,*78#" 2- "#2#0+',# %--" -..-023,'2'#1 $-0 .2& 0#"3!2'-, &# 0#"#: 1'%, 0!&'2#!230# 2&#, ',!-0.-02#" 2&# #12 0#"3!2'-, '"#1 &# .#0$-0+,!# '+.0-4#+#,2 '1 %',#" $0-+ 120#+*',',% 2&# .2& $-0 2&# +-12 !-++-, 2&0-3%& 2&# 31# -$ "'0#!2 .0-!#"30# !**1 ," $0-+ "#1'%, #+.&1'8',% #$$'!'#,2 -.#02'-, Document 203!230#" ,*71'1 203!230#" #1'%, ,2#%02'-,#12 62#0,* .#!'$'!2'-, ,2#0,* .#!'$'!2'-, ,2#0,* #1'%, #12 *, 3..-02 '1!-,2',3,!# &# #62#0,* 1.#!'$'!2'-, "-!3+#,2 "#1!0' #1 2&# #,4'0-,: +#,2 ', 5&'!& 2&# .0-"3!2 -.#02#1 2&# $3,!2'-,* !. '*': 2'#1 -$ 2&# .0-"3!2 ," 2&# "#2'*1 -$ 2&# .0-"3!21 31#0 ',2#0$!# &# ',2#0,* 1.#!'$'!2'-, "#1!0' #1 2&# ',2#0,* 0#/3'0#+#,21 -$ 2&# 1712#+ ," 2&# ',2#0,* ',2#0$!#1 #: 25##, 2&# 1712#+ !-+.-,#,21 &# ',2#0,* "#1'%, !-,2',1 2&# !-+.*#2# "#2'*#" "#1!0'.2'-, -$ 2&# *%-0'2&+1 ," "2 1203!230#1 2- # 31#" ', 2&# '+.*#+#,22'-, -$ 2&# .0-"3!2 &# 2#12 .*, -32*',#1 2&# 27.#1 -$ 2#121 2- # 31#" 2- %30: ,2## 2&# /3*'27 -$ 2&# $','1&#" .0-"3!2 3.-, 0#*#1# $0-+ 2&# * &#0# 0# $-30 %0-3.1 -$ .#-.*# 5&- ,##" 20',',% ', 1203!: 230#" ,*71'1 "#4#*-.+#,2 #,%',##01 ',1.#!2-01 -,*',# ," -$$*',# 13..-02 #,%',##01 ," +',2#,,!# #,%',##01 0',',% ', 1203!230#" "#1'%, $-0 2&# ,-,"#4#*-.+#,2 #,%': ,##01 '1 ,-2 ,#!#1107 &# 1203!230#" "#1'%, "-!3+#,2 !-+.-,#,21 0# #17 2- !-+.0#&#," &# .0-(#!2 2#+ 2--) !*11 ', 1203!230#" ,*71'1 5'2& 0#*:2'+# #62#,1'-,1 ," 1203!230#" "#1'%, 2 2&# 1202 -$ 2&# .0-(#!2 "30',% 2&# ',4#1: 2'%2'-, .&1# 2 5-3*" &4# ##, &#*.$3* 2- &4# &" 2&# 20',',% ," 1-+# #6.#0'#,!# 5'2& 2&# +#2&-" #$-0# 2&# 1202 -$ 2&# .0-(#!2 &# 1203!230#" ,*71'1 20',',% $-0 2&# ,-,"#4#*-.+#,2 #,%',##01 51 "#4#*-.#" 7 2&# .0-(#!2 *#" "30',% 2&# 1203!230#" ,*71'1 .&1# #$-0# ',1.#!2'-, -$ 2&# ',2#0,* 1.#!'$'!2'-, 3%312 #5*#22:!)0" -30,* 2.3.2;4 FIOM_complete_IO <bad_status> logical_IO_reply logical_IO_reply handle_ disconnect finish_write .4 .9 .7 device_TC_reply logical_IO_info logical_IO_info logical_IO_info device_preempt_ write_reply FIOM_device_IO_reply classify_ logical_ reply abort_notify device_write_reply finish_TC QIO_done disconnect_notification logical_IO_reply read_data TIO_CB .8 FIOM_logical_reply logical_IO_info FIOM_ logical_ s1 completion_ controls s2 FIOM_ logical_ cmpl_ SEM logical_IO_reply unused_buffer FIOM_ logical_ cmpl_ PAT logical_IO_info logical_IO_info logical_IO_reply finish_read do_abort finish_QIO .3 .10 .5 device_read_reply abort_notify logical_IO_reply QIO_done read_data Data Flow Control Flow Fig. 3. * #&- ($ *(+*+( %#/) ) ) * +) & *&&#) *& '(&+ )*(+*+( )/)*$ +%* &%# )' * &% )*(+*+( )' * &% ) ) ( *& ( % +%()*% *% * #)) # *.*+# +%1 * &%# )' * &% +) * ) (' # % &%* %) $%/ )$## )' * &%) )/)*$ ) (&"% %*& )$## +%(1 )*%# ' ) *&&#) & )*(+*+( %#/) ) % *&( 0 %*& , +%* &%) () % '(&!* +) % .*%) &% & )*(+*+( %#/) ) &( (#1* $ )/)*$) % )*(+*+( %#/) ) '(&))) ( %'%%*#/ *1*( 1 ( % % % *#/ )* '(&)) - ## *(%)&($ * * -% * * ) '()%* #1* $ .*%) &%) * +) & &%*(&# %&($* &% ##&- * )/)*$ *& *" &*( *&() &( &% * &%) %*& &%) (* &% &( %# % &( )# % '(&)) Function Tool Partition the Requirements Describe Logic and Policy Show the Flow of Control Describe Control Processing Track and Evaluate Interfaces Data Flow Diagrams Process Specifications Control Flow Diagrams† Control Specifications† Data Dictionary * #&- ($) )&- * $!&( &$'&) * &% & +%* &% % * %*() $&% * ' ) / )&- * #&- & * %&* &%*(&# * ) * )/)*$ (&$ * * '& %* & , - (&)) )' * &%) &+$%* * %*(%#) & * '( $ * , * #&- ($ '(&))) % ( &(&+) -/ *(&+ * +) & )*(+*+( %# ) ) &% *#) &( ) &% *() / )( * (+#) & * *(%)&($* &% % * '&# / %&* * $'#$%** &% &%*(&# † Real-time extensions ++)* -#**1"( &+(%# #&- ($) )( * )$ (*( )* ) % (#* &%1 ) ') ) * #&- ($) .'* ** */ # - * &%1 *(&## % * )/)*$ / )&- * #&- & &%*(&# % * )/)*$ &%*(&# )' * &% &%,(*) %'+* &%*(&# ) %#) %*& &+*'+* &%*(&# ) %#) &( %*& '(&)) &%*(&#) * ) *-& (&#) &% *& )&- &- &%*(&# ) '(&)) % * &*( *& )&- &- '(&))) ( &%*(&## * ,* &( * ,* * * &%(/ ) % &(( # )* & * % &%*(&# #&- %$) % * % &%*(&# )*&( %$) % * ( % * &%) * #&- ($) % &%*(&# #& ($) % &$ % *&*( %*& &% ($ ) % ##+)*(* * &$'&%%*) & )*(+*+( %#/1 ) ) - * (#1* $ .*%) &%) ) &$ %* &% * #&- ($ % &%*(&# #&- ($ )&# ((&-) ( * #&-) * (&"% ((&-) ( &%*(&# #&-) * )&# ,(* # () ( )** $*( .) % * (#) ( '(&))) finish_read '(&)) *(%)&($) * device_read_reply % 1 *&( ** ( * ) (/ % * read_data +( & * %'+* / * +)( * #&-) %*& * logical_IO_reply * #&+) % %&($* &% (&$ logical_IO_info ( +( #&-) &+* unused_buffer * #&- * * &%(/ %*( ) &( * * #&-) ( †† device_read_reply (data flow) = *read reply from device layer to *logical layer. Contains read status, *length, and data pointer. * * * status + length + data_pointer †† Here the asterisks indicate comments, the square brackets indicate a choice of one of the enclosed items, the vertical bar means OR, and the plus sign means AND. TC means terminal control, QIO is quiesce I/O (flush outstanding input/output and wait for completion), RID means request identification number, and TIO is terminal I/O. FIOM_device_IO_reply (data flow) = [ device_read_reply | device_write_reply | device_TC_reply | device_preempt_write_reply ] NAME: 2.3.2.3;3 TITLE: finish_read INPUT/OUTPUT: read_data : data_in device_read_reply : data_in unused_buffer : data_out logical_IO_info : data_inout logical_IO_reply : data_out FIOM_logical_reply (control flow) = [ logical_read_reply | logical_write_reply | logical_TC_reply | logical_QIO_reply | logical_disconnect | logical_abort ] logical_IO_info (data flow) = BODY: transfer data (if any) to destination, doing backspace processing and freeing unused buffers during the transfer; send logical_IO_reply with status from device_read_reply or read_data msg; FIOM_IO_pending + FIOM_IO_wait_port + DIOM_IO_pending + logical_RID_pending + logical_abort_RID_pending Fig. 4. *(++ +)"","(' (* )*(++ finish_read &,*"0 " (' ' + ,!, ,! finish_read )*(++ "+ ,"2 ., /!' ,! FIOM_logical_reply "+ logical_read_reply ' ,! +,, "+ read_pending &),1 (0+ "'", **(* ('","('+ logical_io_reply (data flow) = [ logical_read_reply | logical_QIO_reply | logical_TC_reply ] read_data (data flow) = buffer_ID + read_status ! )*(++ +)"","(' (* finish_read " +*"+ !(/ , "+ ,*'+(*& (',*(% "'(*&,"(' "+ %",,% ,*"$2 "* ,( -'*+,' (* 0&)% ,! FIOM_device_IO_reply "+ ,*'+(*& "',( (',*(% %(/ FIOM_logical_reply 1 ,! classify_logical_reply )*(++ +!(/' "' " ! (',*(% %(/ ',*+ ,! +,, .', &,*"0 FIOM_logical_cmpl_SEM ! +,, .', &,*"0 !+ &&(*1 ,!, "+ ", *&&*+ ,! +,, ( ,! +, &' * *(& ,! FIOM_logical_cmpl_SEM .', -*"' ,! "'.+," ,"(' )!+ ,! ,& ('+"* ". "*', *!",,-*+ ! "'% *!",,-* "+ *"' .*2 +"(' ( (' ( ,!& , ,! +,*, ( ,! .%()&', )!+ / ' ,( +,*, ,! +)"","(' ( ,! +1+,& "' ,! *!",,-* ,*&"' ,! !' + ,!, /* ' "' ,! +-))(*, &(-%+ ' ()*,"' +1+,& ' -), ,! "'.+," ,"(' *)(*, ,*&"'"' ,! !' + / ' *(& ,! " ()*,"' +1+,& % ' ,! )*(#, ,!, !'% ,! *".* ('" -*,"(' &(-%+ /(-% !. & &(* +'+ "' ,! +" ' )!+ ' '(, ,! +)"","(' )!+ -, ", (-% '(, /", -',"% ,!' 2.3.2-s1;4 FIOM_logical_cmpl_SEM event state FIOM_logical_reply = “logical_read_reply” FIOM_logical_reply = “logical_write_reply” FIOM_logical_reply = “logical_TC_reply” FIOM_logical_reply = “logical_QIO_reply” FIOM_logical_reply = “logical_disconnect” FIOM_logical_reply = “logical_abort” closed open_pending idle read_pending finish_read/ idle finish_write/ idle do_disconnect/ close_pending do_abort/ idle finish_write/ idle do_disconnect/ close_pending do_abort/ idle do_disconnect/ close_pending do_abort/ idle do_disconnect/ close_pending do_abort/ idle finish_QIO/ idle QIO_pending TC_pending finish_TC/ idle close_pending close_timer_running Note: If an entry is blank, it is an “impossible” condition which should not be encountered due to subqueue restraints, etc. If the condition is hit, error code (not shown) will take appropriate action. Fig. 5. ,, .', &,*"0 - -+, /%,,2$* (-*'% TermDSM NDM timers NDM_reply NDM_req reset_req NDM_ powerfail_ event timer_req timer_event_msg WSCM WSC_reply file_system SM_reply WSC_req SM_req IEEE_9823_ packet Redesigned Driver got_msg ports LAN_Driver IEEE_9822_ packet reset_req HLIO_reply HLIO HLIO_req start_ dev_ rec BMGR_reply BMGR_req BMGR_ reply_ msg disconnect signal_ notify_ event DTSM console_ msg OS_calls BMGR " 01/1"! 01/2 12/"! +)60&0 20&+$ 1%" #/$*"+11&,+ 1" %8 +&.2" %&0 1" %+&.2" 0")" 10 0"1 ,# &+-210 +! ,21-210 +! /"1"0 #/$*"+1 *,!") ,# -/, "00"0 1%1 1/+0#,/* 1%1 0"1 ,# !1 %" ,*-,0&1" *,!") &0 /"1"! 6 $/,2-&+$ 1%" #/$*"+10 " 1/&"! 1, (""- 1%" 0601"* 0-" &#& 1&,+ 0"-/1" #/,* 1%" / %&1" 12/" " /,(" 1%" 0601"* &+1, -/10 0"! ,+ 1%" 16-" ,# ,/ "5*-)" ,+" #/$*"+1 *,!")"! 1%" /"! -1% 1 0-" &#&"! 4%1 %--"+"! 4&1% /"! /".2"010 1%1 4"/" -/, "00"! ,*-)"1")6 4&1%,21 ), (&+$ #,/ /"8 0,2/ " /"! /".2"010 1%1 ), ("! #,/ /"0,2/ " 02 % 0 !1 ,** 2##"/ +! /"! /".2"010 1%1 ,2)! +,1 " -/,8 "00"! " 20" ,# ) ( ,# /"0,2/ " 21 ,2)! +,1 ), ( +,84&1 /"! %" )01 16-" ,# /"! /".2"01 ,2)! +,1 " -/, "00"! &+ -/, "!2/" )) "+3&/,+*"+1 21 +""!"! 1, " %+!)"! &+ *"00$"80"! "+3&/,+*"+1 !"#"//"! *+$"/ 0, 1%1 1%" 20"/ -/, "00 ,2)! ,+1&+2" /2++&+$ "3"+ 1%,2$% 1%" /"! /".2"01 %! +,1 ""+ ,*-)"1")6 -/, "00"! 1 " *" &+ /"0&+$)6 )"/ 4%"+ 4" 1/&"! 1, 1&" 1%" 01/2 8 12/"! +)60&0 #/$*"+10 1,$"1%"/ 1%1 +,1 1(&+$ 1%" / %&8 1" 12/" &+1, ,+0&!"/1&,+ 40 -/,)"* %" $,) ,# 1%" /"!"0&$+ 40 1, &*-/,3" 1%" -"/#,/*+ " 4%&)" *&+1&+&+$ 1%" 0*" )"3") ,# #2+ 1&,+)&16 " %! -12/"! 1%" #2+ 8 1&,+)&16 ,# 1%" !/&3"/ &+ ,2/ #/$*"+10 0"! ,+ 16-" ,# ,4"3"/ " % #/$*"+1 ,+1&+"! #01 -1%0 #01 &+ 1"/*0 ,# +2*"/ ,# &+01/2 1&,+091%" #01 -1% ,2)! ), ( ,+ /"0,2/ " +! 0),4"/ -1%0 /".2&/"! 1%" *"00$"80"! &+1"/# " 4%& % &0 *2 % 0),4"/ 1%+ -/, "!2/" )) &+1"/8 # " 1 40 !&##& 2)1 1, #&$2/" ,21 %,4 1, ,*&+" )) 1%" #01 -1%0 4%& % 4"/" 0-/"! ,21 /,00 *+6 #/$*"+10 %&0 &0 4%"/" ,+" *',/ !&##& 2)16 4&1% 01/2 12/"! +)60&0 /,0"9%,4 1, /")1" 1%" #2+ 1&,+) 0-" &#& 1&,+ 1, 1%" / %&8 1" 12/" %" / %&1" 12/" %! ""+ 0")" 1"! 0 1%" "01 46 1, %&"3" 1%" -"/#,/*+ " $,)0 " #")1 1%1 1, /"1" 1%" 0-" &#& 1&,+ 4&1%,21 ,+0&!"/1&,+ ,# 1%" / %&1" 12/" 4,2)! *(" 1%" !"0&$+ -%0" *,/" !&##& 2)1 " 01,--"! 01/2 12/"! +)60&0 4,/( #,/ 4%&)" +! ,+ "+1/1"! ,+ ,*-)"1&+$ 1%" / %&1" 12/" 1)"6 +! &/%& %")-"! 20 /"0,)3" 1%" / %&1" 12/"83"/02080-" &#& 1&,+ !&)"** 2$201 "4)"118 (/! ,2/+) Fig. 6. ,+1"51 !&$/* &"4&+$ 1%" 0601"* #/,* 1%" !1 -,&+1 ,# 3&"4 //&"! ,3"/ &+1, ,2/ -/))") / %&1" 12/" !&0 200&,+0 1 ,+" -,&+1 4" -%60& ))6 0&*2)1"! !1 #),4&+$ 1%/,2$% 1%" !/&3"/ 20&+$ -"+0 +! "/0"/0 0 !1 +! -",-)" 0 *,!2)"0 %&0 %")-"! 20 3&02)&7" 1%" &+1"/# " ,-"/1&,+ +! -/,)"*0 1%1 /&0" #/,* *&5"! -/, "!2/) +! *"00$"80"! "+3&/,+*"+1 ,/ ,*-)"5 /"0 4" 20"! "5&01&+$ ,!" 4%"/"3"/ -,00&)" 1, !"/&3" !" &0&,+ 1/""0 +! 011" 1/+0&1&,+ !&$/*0 0 4" " *" *,/" ,*#,/1)" 4&1% 01/2 12/"! +)60&0 4" 4"/" )" 1, 00&$+ 4,/( 1, " % *"*"/ 1"/&) 40 /"3&"4"! +! !&0 200"! 1 -/,'" 1 *""1&+$0 +" 0-" 1 ,# 01/2 12/"! +)60&0 &0 1%" &1"/1&3" +12/" ,# 1%" *"1%,! +" *("0 #&/01 -00 1 1%" !1 #),4 !&$/* +! 1%"+ !&0 /!0 ,/ /"3&0"0 &1 2+1&) 01&0#&"! + " 4" #")1 01&0#&"! 4&1% ,2/ / %&1" 12/" 4" 0"1 0&!" ,2/ ,)! 01/2 8 12/"! +)60&0 4,/( +! 01/1"! $&+ %&0 1&*" ,2/ -8 -/, % 40 1, 20" 01/2 12/"! +)60&0 1, 0-" &#6 1%" 0601"* $&3"+ 1%" / %&1" 12/" &+01"! ,# 0-" &#6&+$ 1%" 0601"* &+!"8 -"+!"+1 ,# 1%" / %&1" 12/" " #")1 1%&0 40 +" "00/6 1, *""1 ,2/ -"/#,/*+ " $,)0 +! 1, %")- )/&#6 1%" &+1"/# "0 %"/" "#,/" 4" 0"! 1%" 0-" &#& 1&,+ ,+ 1%" 16-" ,# 1%&0 1&*" 4" 0"! 1%" 0-" &#& 1&,+ ,+ #01 )" 1, ,*8 -)"1" 4&1%&+ 1%" !/&3"/ !"#"//"! +""!0 ,-"/1&+$ 0601"* %")- 1, ,*-)"1" ,/ &+,2+! -1%0 0&+$ 1%" !1 &+1"/8 3&"4&+$ 1" %+&.2" 4" 01/1"! 4&1% 1%" ,+1"51 !&$/* &$ +! 1%" )"3") +! !&$/*0 &$0 +! %" )"3") !&$/* %0 1%/"" -/, "00"0 DIOM FIOM +! IIOM 4%& % *(" 2- 1%" /"!"0&$+"! !/&3"/ %" )"3") !&$/*0 ,# 4%& % &$ &0 + "5*-)" %3" -/, "00 #,/ " % )6"/ ,# 1%" / %&1" 12/" +! 0,*" $"+"/) 21&)&16 -/, "00"0 #1"/ 1%"0" !&$/*0 4"/" !,+" 4" /,(" 1%" 4,/( 2- 6 -/,8 "00 " 4"/" )" 1, 20" *+6 ,# 1%" !&$/*0 #/,* 1%" "/)&"/ 01/2 12/"! +)60&0 4,/( %"+ /"3&"4&+$ !1 #),4 !&$/*0 +! -/, "00 0-" &#& 8 1&,+0 &002"0 .2"01&,+0 +! -/,)"*0 4"/" "06 1, !"1" 1 %"6 1"+!"! 1, 01+! ,21 ,+ 1%" !&$/*0 1 40 "06 1, 0"" &# !1 40 *&00&+$ ,/ 4/,+$ ,/ %!+1 ""+ &+&1&)&7"! ,/ "5*-)" &+ 1%" finish_read -/, "00 0-" &#& 1&,+ &$ timer_req HLIO_req NDM_req HLIO_reply timer_ event_ msg NDM_ reply IEEE_8023_ packet BMGR_ reply_ msg reset_req WSC_req BMGR_reply BMGR_req WSC_reply got_msg DIOM 1 open_ status read_data flow_ control_ event powerfail_ event deferred_ AFCP_ packet QIO_done IDY_done console_msg s2_available timer_req available_ buffer deferred_ IO_req BMGR_req BMGR_ reply IIOM disconnect_notification disconnect s1_available signal_notify_ event 3 s2_available available_ buffer start_dev_ rec s2_available abort_notify timer_req IEEE_ 8023_ packet QIO_done IEEE_8023_ packet SM_req FIOM SM_reply NDM_rec NDM_ powerfail_ event disconnect_notification 2 BMGR_reply_msg read_data BMGR_req deferred_AFCP_packet BMGR_reply WSC_reply IEEE_8023_ WSC_req packet available_buffer Fig. 7. ) -) #-# )$ *&. % + +) $!&) $&,#* + *+ $%) FIOM + )) $%) DIOM % + %1 &,% $%) IIOM unused_buffer .* + #&. &,+ & + ')&** ,+ + ,) .*%+ ) % + )*+ )+ & + *' + &% "'+ # *+ & **,* % (,*+ &%* % + ) )*&#,+ &%* ,)1 % + *+),+,) %#0* * ')&** $&%+ &) + /+)%# *' + &% .* , . *+&'' *+),+,) %#0* * .&)" % &%%+)+ &% .) +1 % + /+)%# *' + &% &,$%+ , & + .* +"% )&$ / *+ % &,$%+* * % &,) ,'') % #&.) %+)* %+ % +&'1#-# *+),+,) %#0* * )$* * .) ,* +& +)$ % %+)* % +& #' % + *,''&)+ % &')+ % *0*+$ %* ++ + ) -) )(, ) ) %##0 . %&+ - % %+)%# *' + &% % &,) '#%* &.-) + %+)%# * % .* '')&') + &) + *+),+,) * % ,+ %&+ + %#0* * % . % &1 ,$%+ &) + *+),+,) %#0* * .&)" )&) . *'# + + * % ') & %+& +.& ') &* % % %+)%# *' + &% &,$%+ %+)%# *' + &% &%+ % ,,*+ .#++1") &,)%# 2;32 FIOM BMGR_ reply_ msg get_s2_for_ buffers .12 s2_info TIO_CB BMGR_reply_msg TIO_CB ldev_buffer_info s2_available s1_available ldev_buffer_info <printer> SM_req BMGR_reply available_buffer BMGR_req s2_info available_buffer <printer> SM_reply <free_buf> BMGR_req handle_ printer_ requests free_buffer get_buffers .8 .11 block_FIOM free_s2_ and_block deferred_IO_req .1 logical_IO_req printer_status_info VFC_info num_buffers_needed unused_buffer logical_IO_reply FIOM_ logical_ level TIO_CB .3 <terminal> SM_req logical_ IO_reply logical_ IO_req s2_info <terminal> SM_reply s2_available didnt_get_buffers io_started FIOM_ device_ control timer_req FIOM_ device_ IO_reply .4 FIOM_session_req deferred_ IO_req disconnect_ notification QIO_ done read_data FIOM_ session block_FIOM WSC_reply abort_notify WSC_req .5 handle_ terminal_ requests transport_req get_s2_for_ events .7 deferred_ IO_req buffer_IDs blockable FIOM_device_ IO_req semaphore_info semaphore_info .10 s1_available FIOM_ transport .9 s2_available abort_notify QIO_done .6 read_data IEEE_ 8023_ packet timer_req disconnect_notification deferred_ AFCP_ packet Fig. 8. FIOM %/% " +& +" "'-+(.-"(' (.- -! ('-1- " +& ' ,+")5 -"(', ( -! "'-+, ! +,- ( -! (.&'- 0, '+5 - .,"' &0(+$ ,(-0+ -((% (+ ,-+.-.+ '%2,", ' ,-+.-.+ ," ' +(& + !'(%( ", ' - %(0 " +&, '+%%2 4% +" !- (+ 0+(' (& +( '(.+ , ' "'+, -( -!+(0 02 " +&, ,/+% -"&, ! ., ( ,-+.-.+ '%2,", -( ,)"2 ,2,-& '-.+%%2 +",, -! *.,-"(', -!- ' -( ',0+ (.- -! )+(.- 0 ! -( ( "- %% (/+ "' 0 0(.% !/ +,(%/ -! +!"--.+5/+,.,5,-+.-.+5'%2,", )+(%& +%"+ ' '(- -+" -( ( ,-+.-.+ '%2,", 0"-!(.- (',"+"' -! +!"--.+ ( -! ,2,-& " '(- ., -! ))+(! (.-%"' 2 -%2 ' "+!" .- 0 " ., ,(&-!"' +%- -( "- !+ ", "' %"' -0' (',"+"' -! . .,- 0%--5$+ (.+'% +!"--.+ ' "'%."' ," ' "' -! ,)""-"(' 5 ., -!", 0, +," ' ' )+(+&' 0, "&)(+-'- 0 ! %+2 '%23 -! (+" "'% +"/+ -( "' ())(+-.5 '"-", (+ ,!(+-'"' -! )-! %' -!, !, ())(+-.'"-", ' -( "'(+)(+- "'-( -! ," ' "'- $'(0 !(0 -( ( -!- - -! ," ' )!, " -!2 0+'- "'%. "' -! ,)""-"(' , 0%% ,( 0 ).- -! +!"--.+ "' -! -() %/%, ( -! ,)""-"(' ,- &' + ++ &' + "'(.' &' + ,!(.% !/ ,)'- &(+ -"& $)"' -! - "-"('+2 '-+", .) -( - %% -!+(. ! -! )+(#- -! %$ ( --'5 -"(' )" -( - "'"-"(', 0, &#(+ "%"' ! - ', -( "' , -! " +&, ' )+(,, ,)""5 -"(', + +- - "-"('+2 '-+", -!- 0+ +%- -( - ,-+.-.+, "' -! (+" "'% +"/+ 0+ ,2 (0/+ 0 " '(- %02, -2) "' -! (&)%- "'"-"(', " '((.&'- '0 - "-"('+2 '-+", +" (+(.,%2 ' -!", FIOM_SC;3 FIOM_SC FIOM FIOM_main FIOM_handle_ terminal_reqs UT_get_s1 UT_get_s2 UT_free_ semaphores FIOM_handle_ printer_reqs TP_setup_t_ write_info FIOM_route_ replies FIOM_ logical_ level 0$' -" '-#+ - #-#('+2 0(.% "/ %,( )%'' -#& (+ -" #'-+'% ,)# #-#(' #-, #',)-#(', ' -" +0(+$ #' -" ,".% ,#!' #, -" )+(,, ( -+', (+&#'! -" ,)# #-#(' ( 0"- &.,- (' #'-( -" )%' ( "(0 #- 0#%% (' %,,#% ,#!' )+(., '++-#/ (.&'- 0#-" ,(& !+)"#, - ,-+-, 0#-" -" )+(.+% "+-+#,-#, ' (+4 &-#(' #, ( -' +)- -"+(.!"(.- -" ,#!' (.&'- ' -" (.&'- #, !'+%%2 '(- ,)# # '(.!" "#, +,.%-, #' ,(& ,#!' #&)+(/#,-#(' .+#'! #&)%&'--#(' -+.-.+ ,#!' #'-+(., ,-+.-.+ ' !+)"#, #'-( -" ,#!' )+(,, -( () 0#-" -" %+!',, ( -" ,2,-& " !(% ( ,-+.-.+ ,#!' #, "#!"%2 &#'-#'% (&)+4 "',#% ' ,#%2 -,- -()4(0' ,#!' " ,2,-& #, )+-#-#(' #'-( (&)(''-, 0"#" #'-+- -( "#/ -" .'-#('%#-2 ( -" ,2,-& ( +- -" ,-+.-.+ ,#!' -" - %(0 #!+& )+(4 ,,, + !+(.) #'-( )+(,,, -"- % 0#-" #').-, % 0#-" (.-).-, -+', (+& #').-, #'-( (.-).-, (+ "'% -+',4 -#(', -0' #').-, ' (.-).-, (.%, + -"' +- +(& -", !+(.), /%.-#(' ' + #'&'- -"4 '#*.,5%% (",#(' (.)%#'! ' )$!#'!5 (&4 )%- -" .#%#'! ( -" (.&'-, " ,-+.-.+ "+- ,#!' #-#('+2 ' &(.% ,)# #-#(', + -" (.4 &'-, )+(. -"+(.!" -"#, )+(,, ,-+.-.+ "+,"(0, -" ,# (&)(''-, &(.%, ' -"#+ #'-+ , #' -()4(0' !+)"#% &''+ " ,#!' #-#('+2 4 #', -" #'-+ , - .,, ,#&#%+ %'!.! -( -" - #4 -#('+2 ( ,-+.-.+ '%2,#, " &(.% ,)# #-#(', #' -" )+(.+% )+- ( -" ,#!' ' -" ,*.' ( #'-+-#(', " &(.% ,)# #-#(' ,+#, 0"- )+( -" ,)# #-#(' #, #'! ,-#, # 0"- -" &(.% ', -( (&&.'#- ' "(0 #- )+ (+&, -" .'-#(' &(4 .% ,)# #-#(' #, 0+#--' #' ,-+.-.+ '!%#," , #4 ,#(' -+ (+ -% (+ , ,-- -+',#-#(' #!+& FIOM_start_ printer_ requests TP_setup_p_w rite_info TP_printer_ status Fig. 9. FIOM ,-+.-.+ "+- #! ,"(0, -" #+,- ,-+.-.+ "+- (+ -" ,- &'!+ "+ + &#' &(.% ,(& .-#%#-2 &(.%, ! UT_get_s1 ' /#4,)# # &(.%, ! FIOM_handle_ terminal_reqs 0"#" /'-.%%2 % -( -" FIOM_logical_level module #! #, -" &(.% ,)# #-#(' (+ -" ,- &'!+ &(.% FIOM - ,"(0, -" ,*.' #' 0"#" -" (-"+ &(.%, + %% ,#!' #-#('+2 '-+#, %(($ ,#&4 #%+ -( - #-#('+2 '-+#, ' 0 " #'#," -" #'-+'% ,)# #-#(' #- 0, .'4 %+ "(0 -( +#/ -" ,-+.-.+ ,#!' +(& #- # (' -" (%%(0#'! ))+(" " ,-+.-.+ '%2,#, )+(,, 0, -.+' #'-( &(.% "#++"#% ,-+.-.+ 0, 4 /%() (+ " %/% 2 3)+(&(-#'! (,, (+ 3"#+#'! (,, &(.% 0"' ',,+2 (&)+#'! -" ,- &'4 !+ - %(0 #!+& #! 0#-" -" ,- &'!+ ,-+.-.+ "+- #! (' ' , -"- -" FIOM_main &(4 .% #, 3"#+ , (,, +- -( "'% ,&)"(+, ' -( %% -" FIOM_handle_terminal_reqs ' FIOM_handle_printer_reqs &(.%,† "' -" +(.!" + -, ( -" ,-+.-.+ "+-, 0+ +2 -"2 0+ '-+ #'-( -" &0(+$ -((% " -& -"' -+&#' 0"- " &(.% (, ' $'(0, " '1,-) 0, -( 0%$ -"+(.!" -" ,#!' ' ,.+ #- 0(+$, "#, #'/(%/ -+#'! " -"+(.!" -" ,#!' -( ,.+ † Note: Some of the process names are capitalized or spelled differently in Figs. 8, 9, 10, and 11 and in the text of this paper. Some names did change between the structured analysis document and the structured design document. In the module specification, Fig. 10, the engineer chose to capitalize the function codes, request types, and procedures called. In Fig. 11, the names are capitalized because the coding convention that was followed capitalized procedure calls. The MPE/iX operating system is case insensitive, so the differences are insignificant. .!.,- 0%--4$+ (.+'% NAME: FIOM_main;2 TITLE: FIOM_main PARAMETERS: SM_CB SM_arg_list return_status LOCALS: request status GLOBALS: BODY: ***************************************************************************** Calling parms: SM_CB –– pointer to SM control block SM_arg_list –– pointer to storage manager arguments ***************************************************************************** TIO_CB := SM_CB^.fwrt_cb; * used to be fast write control block * case SM_arg_list^.sm_generic_parms.func_code of SM_READ_FN: request := READ_REQ; SM_WRITE_FN: request := WRITE_REQ; SM_CONTROL_FN: if (SM_arg_list^.sm_control_parms_t.* terminal control * <> TC_QUIESCE_IO) request := TC_REQ; else request := QIO_REQ; SM_DEVCONTROL_FN: request := TC_REQ; end; * since this is the FIOM, and FIOM only handles waited I/O, always block * if necessary to get semaphores. * * status := UT_GET_S1 (FIOM, TRUE); if (status <> TRUE) * error, log and exit *; status := UT_GET_S2 (FIOM, TRUE); if (status <> TRUE) * error, log and exit *; if (TIO_CB^.device_type = * terminal *) status := FIOM_HANDLE_TERMINAL_REQS (request, SM_arg_list); else status := FIOM_HANDLE_PRINTER_REQS (request, SM_arg_list); return_status := MAP_TO_OS_STATUS (status); UT_FREE_SEMAPHORES; Fig. 10. FIOM "$)! '%($# (( ( &( #$&"($# +' *!! ($ ( "$)!' # (( ( "$)!' +& $# ( &( (#' )&# ( #(& %&$'' "$)!' +& $!!%' +# ( +' &'$#! #$( $ ") *!)($# $ ( #(&' ( $)%!# $& $'$# )' $ ! $ (" #(&#! '# $)"#( $#(# $#!, "+$& '(&)()& &(' # "$)! '%($#' (& ( #(&#! '# +' #'%( # ( &+$& $"%!( + +$& $# ## ( %&$)& !&($#' ( '(&)()&' '$(+& $#)&($# ! '(&)()& # $# '(#&' "$)! '%($#' +& ( '' $& ( '! %&$)&' $# +' "#!, "((& $ $#*&(# %')$$ ($ '! ' ( $)(& !$ $ ( '( "#& "$)! $"%&# (' ($ ( '( "#& "$)! '%($# $# # ' $+ !$'!, &!( (, & $ ' "$& (! ($ ( "$)! '%($# &"+$& !'$ !!)'(&(' %&$!" + +( "$)! '%($#' "#, $ (" ))'( +!((- & $)&#! 1664 1664 1664 1664 1664 1664 1664 1664 691.000 691.000 691.000 691.000 691.000 691.000 691.000 691.000 2 begin { tio_fiom } 2 2 try 2 begin { Try section } 2 2 tio_cb := tio_cb_ptr_type( fiom_cb_ptr ); 2 2 l_index := 0; 1664 1664 1664 1664 1664 1665 1666 1667 1667 1668 1668 1668 1668 1669 1669 1669 1669 1669 1670 1671 1672 1673 1674 1675 1676 1676 1677 1677 1677 1677 1677 1677 1677 1677 1678 1678 1679 1680 1681 1682 1683 1684 1684 1685 1685 1685 1685 1685 1685 1685 1686 1686 1687 1687 1687 1687 1687 1687 1687 1687 1688 1688 1688 1688 1689 1690 1691 1692 1693 1694 1694 1695 1695 1695 1695 1695 1695 1695 1695 1695 691.000 691.000 691.000 692.000 693.000 694.000 695.000 696.000 697.000 698.000 699.000 700.000 701.000 702.000 703.000 704.000 705.000 706.000 707.000 708.000 709.000 710.000 711.000 712.000 713.000 714.000 715.000 716.000 717.000 718.000 719.000 720.000 721.000 722.000 723.000 724.000 725.000 726.000 727.000 728.000 729.000 730.000 731.000 732.000 733.000 734.000 735.000 736.000 737.000 738.000 739.000 740.000 741.000 742.000 743.000 744.000 745.000 746.000 747.000 748.000 749.000 750.000 751.000 752.000 753.000 754.000 755.000 756.000 757.000 758.000 759.000 760.000 761.000 762.000 763.000 764.000 765.000 766.000 767.000 768.000 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 1 1 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 1 0 {––––––––––––––––––––––––––––––––––––––––––––––––– } { The FIOM only handles blocked IO, always block } { if necessary to obtain semaphores } {––––––––––––––––––––––––––––––––––––––––––––––––– } if ( CUT_GET_S1 (tio_cb, Fiom) ) then if ( CUT_GET_S2 (tio_cb, Fiom) ) then if ( not (tio_cb^.device_type.printer) ) then { terminal } status := FIOM_HANDLE_TERMINAL_REQUESTS ( sm_arg_list_ptr_t(arg_list)) else { printer } status := FIOM_HANDLE_PRINTER_REQUESTS ( psm_parm_ptr_t(arg_list)) else begin {**** LOG S2 error ****} status := Bad_status; l_tio_status.int_status.status_code := Internal_err; l_tio_status.int_status.layer := Main_layer; l_tio_status.int_status.proc_number := Pn_tio_fiom; l_tio_status.int_status.location := 0; l_tio_status.int_status.llio_flag := False; l_tio_status.ext_status_hpe := status; CUT_LOGMSG ( tio_cb, l_tio_status, Main_layer, Fiom ); end else begin status := Bad_status; {**** LOG S1 error ****} l_tio_status.int_status.status_code := Internal_err; l_tio_status.int_status.layer := Main_layer; l_tio_status.int_status.proc_number := Pn_tio_fiom; l_tio_status.int_status.location := 1; l_tio_status.int_status.llio_flag := False; l_tio_status.ext_status_hpe := status; CUT_LOGMSG ( tio_cb, l_tio_status, Main_layer, Fiom ); end; CUT_FREE_S2 (tio_cb); CUT_FREE_S1 (tio_cb); end; { Try section } recover begin { Recover section } case ESCAPECODE of 0:; otherwise begin l_tio_status.int_status.status_code := External_err; l_tio_status.int_status.layer := Main_layer; l_tio_status.int_status.proc_number := Pn_tio_fiom; l_tio_status.int_status.location := 2; l_tio_status.int_status.llio_flag := False; l_tio_status.ext_status_hpe := hpe_status(ESCAPECODE); CUT_LOGMSG ( tio_cb, l_tio_status, Main_layer, Fiom ); end; end; end; { Recover section } end; { tio_fiom } Fig. 11. FIOM $ :(5( 722 &2'(>/,.( +( &$6( 67$7(0(17 ,6 $1 811(&(66$5< /(9(/ 2) '(7$,/ $1' ,6 $&78$//< 127 &$55,(' 7+528*+ ,172 7+( &2'( 6,1&( 7+( arg_list ,6 3$66(' 72 7+( HANDLE 352&('85(6 1$/<6,6 2) 7+( &2'( 6+2:6 $ 5('8&7,21 ,1 &2'( 6,=( &203$5(' 72 7+( 25,*,1$/ '5,9(5 +( 5('8&7,21 &20(6 )520 7+( 5(86( 2) 352&('85(6 $6 $ 5(68/7 2) 6758&785(' '(6,*1 $1' )520 $ 6758&785( 7+$7 $//2:6 &20021 5287,1(6 72 %( 6+$5(' %(7:((1 7+( DIOM FIOM $1' IIOM 02'8/(6 ,167($' 2) 5(48,5> ,1* 21( &23< 3(5 02'8/( 1 7+( 25,*,1$/ '5,9(5 7+(5( :$6 $ /2*,&$/ '(9,&( 0$1$*(5 )25 7(50,1$/6 $1' 21( )25 6(5,$/ 35,17> (56 1 7+( 5('(6,*1(' '5,9(5 7+( )$67 0$1$*(5 $1' '()> (55(' 0$1$*(5 $5( $%/( 72 +$1'/( %27+ 7(50,1$/6 $1' 6(5,$/ 35,17(56 1 *(1(5$/ 127 (128*+ $77(17,21 :$6 3$,' 72 '(),1,1* '(6,*1 ',&7,21$5< (175,(6 25 '$7$ 6758&785(6 758&785(' '(6,*1 $''(' 7+( 1(;7 /(9(/ 2) '(7$,/ 72 7+( '(6,*1 )520 7+( 63(&,),&$7,21 7 :$6 ($6< 72 '(9(/23 7+( '(6,*1 )520 7+( 63(&,),&$7,21 21&( :( +$' 285 $3352$&+ !( 2&&$6,21$//< &5($7(' 02'8/( 63(&,),&$7,216 7+$7 $5( 722 08&+ /,.( &2'( 2'8/( 63(&,),&$> 7,216 $5( 127 0($17 72 +$1'/( 7+( 60$// '(7$,/6 7+$7 $5( %(67 68,7(' 72 &2',1* %87 72 '(),1( +2: 7+( )81&7,21 ,6 3(5> )250(' ) 722 08&+ $77(17,21 ,6 3$,' 72 &2'(>/,.( '(7$,/6 /(66 ,6 3$,' 72 +2: 7+( 63(&,),&$7,21 ,6 72 %( ,03/(0(17(' ) :( +$' 72 '2 ,7 $// 29(5 $*$,1 :( :28/' +$9( 3$,' 025( $77(17,21 72 7+( ,17(5)$&(6 $1' %(77(5 '(),1(' 7+( '$7$ 3$66> ,1* %(7:((1 02'8/(6 ,1&( :( :(5( 86,1* $ /27 2) (;,67,1* ,17(5)$&(6 :( ',' 127 387 7+( 7,0( ,172 7+( '$7$ 25 '(6,*1 ',&7,21$5,(6 +,6 0($17 7+$7 7+( '$7$ (/(0(176 :(5( 3225/< '(),1(' 6,1&( :( 7(1'(' 72 $6680( 7+$7 (9(5<21( .1(: +2: 7+( '$7$ :$6 '(),1(' !( :28/' $/62 +$9( '(9(/23(' $ 02'8/( 63(&,),&$7,21 67$1'$5' 72 &5($7( &216,67(1&< $1' $92,' 9$5,$7,216 ,1 7+( '(*5(( 2) &2'(>/,.( 1*/,6+ ,1 7+( ,17(51$/ '(6,*1 +( ,17(51$/ 63(&,),&$7,21 5(48,5(' 620( %$6,& 6758&785(' $1$/<6,6 75$,1,1* )25 7+( ,163(&7,216 +,6 :$6 %(&$86( 2) 7+( *5$3+,&$/ 1$785( 2) 7+( ',$*5$06 $1' 7+( '(&,6,21 6758&785(6 +( ,17(51$/ '(6,*1 6758&785(' '(6,*1 '2&80(17 :$6 ($6,(5 72 81'(567$1' 6,1&( ,7 &216,67(' 2) 6758&785( &+$576 36(8'2> &2'( $1' '$7$ '(6&5,37,216 163(&7,216 :(5( '21( %< $ '(37+ :$/. 7+528*+ 7+( 352&(66(6 $1' +(1&( &21&(175$7(' 21 $5&+,7(&785$/ /(9(/6 $6 23326(' 72 ,17(5)$&(6 %(7:((1 /(9(/6 +( ,163(&7,216 ',' $1 (;&(//(17 -2% 2) &+(&.,1* )25 )81&7,21$/,7< $1' '(6,*1 )/$:6 %87 :(5( :($. ,1 7+( $5($ 2) ,17(5)$&( &+(&.,1* +( 25,*,1$/ '5,9(5 ,17(51$/ '(6,*1 '2&80(176 :(5( 1$55$7,9( :,7+ 620( 67$7( 75$16,7,21 ',$*5$06 +(< :(5( 08&+ 6+257(5 7+$1 7+( ,17(51$/ 63(&,),&$7,21 $1' ,17(51$/ '(6,*1 &5($7(' :,7+ 6758&785(' 0(7+2'6 $67 5(9,(:6 2) 352-(&7 '2&80(17$> 7,21 (;7(51$/ 63(&,),&$7,21 ,17(51$/ 63(&,),&$7,21 ,17(51$/ '(6,*1 722. 3/$&( $7 21( >72> >+285 0((7,1* 3(5 '2&8> 0(17 ,1&( 7+( 6758&785(' '2&80(176 :(5( /$5*(5 $1' &21> 7$,1(' 025( '(7$,/ ,7 722. $%287 (1*,1((5>+2856 72 ,1> 63(&7 25 5(9,(: 7+(0 +( 3$57,&,3$176 )(/7 7+$7 7+( 5(9,(:6 2) 7+( ,17(51$/ 63(&,),&$7,21 $1' ,17(51$/ '(6,*1 6758&785(' $1$/<6,6 $1' 6758&785(' '(6,*1 '2&80(176 :(5( 9(5< 9$/8> $%/( +( 0$7(5,$/ :$6 08&+ ($6,(5 72 ,163(&7 )25 &203/(7(> 1(66 &255(&71(66 $1' )81&7,21$/,7< 7+$1 7+( 1$55$7,9( ,17(5> 1$/ 63(&,),&$7,21 $1' ,17(51$/ '(6,*1 '2&80(176 +(5( ,6 $ &21&(51 7+$7 86,1* 6758&785(' $1$/<6,6 $1' 6758&> 785(' '(6,*1 +$6 $ /$5*( ,03$&7 21 7+( 6&+('8/( +( 1(*$> 7,9( ,03$&7 2) 6758&785(' $1$/<6,6 $1' 6758&785(' '(6,*1 21 285 6&+('8/( &216,67(' 2) 75$,1,1* 7,0( 7:2 :((.6 7,0( 63(17 %(&20,1* )$0,/,$5 :,7+ 6758&785(' $1$/<6,6 21( 0217+ 2) ,17(50,77(17 6758&785(' $1$/<6,6 $1' /21*(5 ,163(&7,216 326,7,9( 5(68/7 2) 86,1* 6758&785(' $1$/<6,6 $1' 6758&785(' '(6,*1 ,6 7+$7 ($&+ 67(3 ,6 $ 352*5(66,21 )520 7+( /$67 $&+ '2&80(17 ,6 %8,/7 21 7+( 35(9,286 '2&80(17 81/,.( 7+( &/$6> 6,&$/ '(6,*1 ,1 :+,&+ ($&+ '2&80(17 ,6 127 62 &/26(/< 7,(' 72 ($5/,(5 21(6 +( ())257 5(48,5(' $7 ($&+ 3+$6( :$6 /(66 7+$1 7+( 21( %()25( $1' :$6 0$,1/< ',5(&7(' $7 $'',1* 025( '(7$,/6 +( 326,7,9( ,03$&7 2) 6758&785(' $1$/<6,6 $1' 6758&> 785(' '(6,*1 21 7+( 6&+('8/( :$6 6+257(5 7(67 &<&/(6 215(> *5(66,21 7(676 :(5( 3$66(' $+($' 2) 6&+('8/( +( 5('(6,*1 352-(&7 ,03529(' %/2&. 02'( 3(5)250$1&( $1' $&+,(9(' $ *5($7(5 7+$1 5('8&7,21 ,1 7+( 7(50,1$/ '5,9(5 3$7+ /(1*7+ +( &2'( 3$66(' $// )81&7,21$/ 7(676 ,1&/8',1* >+285 $1' >+285 1215(*5(66,21 7(676 2) 7+( 7(67,1* (55256 :(5( &2',1* (55256 +( 0$-25,7< 2) 7+( 5(0$,1,1* '()(&76 :(5( )281' ,1 $5($6 7+$7 :(5( .12:1 72 %( :($. )520 7+( '(6,*1 $1' ,163(&7,21 3+$6(6 +( (1*,1((56 9$/> 8(' /($51,1* 6758&785(' 0(7+2'6 $1' 722/6 %27+ )25 7+( 48$/> ,7< $1' &203/(7(1(66 2) 7+( '(6,*1 $1' 7+( $&48,5(' 6.,// 6(7 +( 352-(&7 7($0 %(/,(9(6 7+$7 7+( '(6,*1 2) 7+( 1(: ," 7(50,1$/ $1' 6(5,$/ 35,17(5 '5,9(5 :28/' 127 +$9( %((1 $&&203/,6+(' ,1 7+( 6$0( $02817 2) 7,0( :,7+ 7+( 6$0( $02817 2) 7+2528*+1(66 %< 7+( 75$',7,21$/ '(6,*1 7(&+1,48(6 :28/' /,.( 72 7+$1. 7+( 352-(&7 (1*,1((56?()) $1'/( 21 8&. $55< !+,7( $1' 5,. (66?)25 7+(,5 +$5' :25. $1' 7($0 63,5,7 :,7+ 63(&,$/ 7+$1.6 72 ()) )25 +,6 +(/3 :,7+ 7+( ),*85(6 )25 7+,6 3$3(5 7 :$6 $ 3/($685( 72 :25. :,7+ 7+(0 $6 352-(&7 /($' (1*,1((5 !,7+287 7+(0 7+,6 3$3(5 21 285 68&> &(66 :,7+ 6758&785(' $1$/<6,6 $1' 6758&785(' '(6,*1 :28/' 127 +$9( %((1 3266,%/( :28/' $/62 /,.( 72 7+$1. 7+( 352-(&7 0$1$*(5 (/(67( 266 )25 +(5 :,//,1*1(66 72 75< 620(7+,1* 1(: $1' )25 +(5 6833257 $1' 7+( ,163(&7256 5(9,(:(56 $1' 02'(5$7256 )25 7+(,5 08&+ $335(&,$7(' 7,0( $1' ())257 ($5&2 !"!" % % ! ! 5(1> 7,&(>$// 1& $*(>21(6 ! " ! !"!" % ! #285'21 1& !$ # "! % " ! (:/(77>$&.$5' 35,/ (5&./,1* !"!" % & !"!" & & ! $7/(< $1' ,5%+$, !! & % ! & ! 256(7 286( 8*867 (:/(77>$&.$5' 2851$/