|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 44544 (0xae00) Types: TextFile Names: »makelinktx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code └─⟦75ff9bef3⟧ └─⟦this⟧ »makelinktx «
begin <* LAN device make link declarations first level page ... 1... *> boolean repeat_param , test ; integer item_count , action , device_id , dev_id_count , point_int , point_txt , space_int , space_txt , seplength , old_length , buffers , users , modekind , devno , devtype , status , result , links_created , i , j , k ; long reason ; integer array zdescr (1:20); real array outfile , progname , chainname , item , old_item , main , old_main , devname , lan (1:2); zone z_ld (1 , 1, stderror); \f <* LAN device make link parameter scanning page ... 2... *> procedure display_param_synt (z); zone z ; <***********************************************************> <* *> <* The procedure displays on the zone z a parameter syn- *> <* tax survey. *> <* *> <***********************************************************> if progname (1) = real <:makel:> add 'i' and progname (2) = real <:nk:> then write (z, <: ( )1 ( <outfile> = ) makelink, ( )0 ( )* ( ( ( (.<name>.<devno>)* )* )* ) ( ( )1 ( ( (all) )1 ( (.<name> ) ) ) ) ( ( l.<lanno> ) ( ( users.( ) ) ( <type> ( ) ) ) ) ( ( )0 ( ( (one) )0 ( (.<devno>.<name>) ) ) ) ( ( ( (.<devno> )1 )1 )1 ) ( )1 <type> ::= console / printer / 3270in / 3270out / floppy all/one default : all <lanno> ::= number of lan controller default : 1 <name> ::= (<devname> / <devname>.<lan dev>) (.log) <devname> ::= name of external process default : wrk-name <devno> ::= device number of external process default : first free <lan dev> ::= name of lan device obl. for console / printer .log opt. for console :>, "nl", 0) else \f <* LAN device make link parameter scanning page ... 2a... *> write (z, <: ( )1 ( <outfile> = ) makelink, ( )0 ( )* ( ( ( (.<name>.<devno>)* )* )* ) ( ( )1 ( ( (all) )1 ( (.<name> ) ) ) ) ( ( l.<lanno> ) ( ( users.( ) ) ( <type> (.buf.<buffers> ) ) ) ) ( ( )0 ( ( (one) )0 ( (.<devno>.<name>) ) ) ) ( ( ( (.<devno> )1 )1 )1 ) ( )1 <type> ::= console / imc / mailbox / 3270in / 3270out / lanstat / floppy / printer / streamer <buffers> ::= integer, if 0 then default (imc) default : buffer claim all/one default : all <lanno> ::= number of lan controller default : 1 <name> ::= (<devname> / <devname>.<lan dev>) (.log) <devname> ::= name of external process default : wrk-name <devno> ::= device number of external process default : first free <lan dev> ::= name of lan device obl. for console / printer .log opt. for console :>, "nl", 0); \f <* LAN device make link parameter scanning page ... 3... *> procedure prepare_param_scan (item_no); value item_no ; integer item_no ; <***********************************************************> <* *> <* The procedure prepares a sequential scan of the fp pa- *> <* rameters in the fp command stack. *> <* The scan is supposed to be carried out by the procedu- *> <* re scan_param. *> <* The scan is prepared to start in the fp item number *> <* item_no. *> <* The scan is implemented by means of the global variab- *> <* les : *> <* zone_level, item_count and repeat_param *> <* where zone_level is the zone stack level and item_count *> <* is the number of the item in the fp command stack to be *> <* taken next. *> <* *> <* Call: prepare_param_scan (item_no); *> <* *> <* item_no (call value, integer). The item number in the *> <* fp command stack where the parameter scan car- *> <* ried out by scan_param or repeat_param will be *> <* started. *> <* *> <* Function : *> <* item_no is assigned to the global item_count *> <* and the global boolean repeat_param is set false. *> <* *> <***********************************************************> begin item_count := item_no; repeat_param := false; end prepare_param_scan; \f <* LAN device make link parameter scanning page ... 4... *> integer procedure scan_param ( item ); real array item ; <***********************************************************> <* *> <* The procedure either returns the parameter which was la-*> <* test returned or it returns the next parameter governed *> <* by the global boolean repeat_param. *> <* The parameter is coded as an item as for system (4,..) *> <* and is taken from fp command stack *> <* *> <* Call: scan_param ( item ); *> <* *> <* scan_param (return value, integer). Separator < 12 + *> <* length as for system (4, ...). *> <* item (return value, array). An item is returned *> <* in item (1:2) as for system (4, ...). *> <* *> <***********************************************************> begin own integer old_seplength; own real old_param1, old_param2; if repeat_param then begin <*the item id repeated*> scan_param := old_seplength; item (1) := old_param1 ; item (2) := old_param2 ; repeat_param := false; end else begin <*take next item*> old_seplength := system (4, increase (item_count), item); old_param1 := item (1) ; old_param2 := item (2) ; scan_param := old_seplength ; end; end scan_param; \f <* LAN device make link parameter scanning page ... 5... *> procedure param_warning (z, text); zone z ; string text ; <***********************************************************> <* *> <* The procedure writes on the zone z the text : *> <* <:<10>*** <prog name> :> *> <* followed by the text given in text and the current pa- *> <* rameter. *> <* At return, the fp mode bits are : warning.yes *> <* *> <* Call : param_warning (z, text); *> <* *> <* z (call and return value, zone).The name of the *> <* document. Determines further the document, the *> <* buffering and the position of the document. *> <* text (call value, string). The text to be written. *> <* *> <***********************************************************> begin integer seplength; real array item (1:2); repeat_param := true; <*repeat current parameter*> seplength := scan_param (item); write_alarm (z, text); write_param (z, seplength, item); write (z, "nl", 1); errorbits := 2 + errorbits extract 1;; <*add warning.yes*> end param_warning; \f <* LAN device make link parameter scanning page ... 6... *> integer procedure write_alarm (z, text); zone z ; string text ; <***********************************************************> <* *> <* The procedure writes on the zone z the text : *> <* <:<10>_<program name>__<text>__ *> <* and returns the number of characters written. *> <* *> <* call : write_alarm (z, text); *> <* *> <* write_alarm (return value, integer). The number of *> <* characters written. *> <* z (call and return value, zone). The name *> <* of the document. Determines further the *> <* document, the buffering and the position *> <* of the document. *> <* text (call value, string). The text to be *> <* written after the program name. *> <* *> <**********************************************************> begin long array field laf; laf := 0; write (z, "nl", 2); write_alarm := write (z, <:*** :>, prog_name.laf, <: :>, text, <: : :>); end write_alarm; \f <* LAN device make link parameter scanning page ... 7... *> integer procedure write_param (z, seplength, item); value seplength ; zone z ; integer seplength ; real array item ; <***********************************************************> <* *> <* The procedure writes on the zone z the parameter coded *> <* as an item as for system (4, ...), and returns the num- *> <* ber of characters written. *> <* *> <* Call : write_param (z, seplength, item); *> <* *> <* write_param (return parameter, integer). The number *> <* of characters written. *> <* z (call and return value, zone). The name *> <* of the document. Determines further the *> <* document, the buffering and the position *> <* of the document. *> <* seplength (call value, integer). Separator < 12 + *> <* length as for system (4, ...). *> <* item (call value, array). An item in item(1:2) *> <* as for system (4, ...). *> <* *> <***********************************************************> begin integer separator, length, chars; long array field laf; \f <* LAN device make link parameter scanning page ... 8... *> laf := 0; <*fields array to long array*> separator := seplength shift (-12) extract 12; <*2, 4, 6, or 8*> length := seplength extract 12; <*4 or 10, or 10+n*8*> write_param := if seplength = 0 then write (z, <:<end parameter list>:>) else write (z, case (separator//2+1) of ("(", "nul", "sp", "=", "."), 1) + (if length = 4 then write (z, <<d>, round (item(1))) else if length = 10 then write (z, item.laf) else write (z, <:":>, item.laf)); end write_param; \f <* LAN device make link parameter scanning page ... 9..*> integer procedure write_char (z, char); value char ; zone z ; integer char ; <***********************************************************> <* *> <* The procedure writes on the zone z the character with *> <* the iso-value char as a graphical and returns the num- *> <* ber of characters written. *> <* *> <* Call : write_char (z, char); *> <* *> <* write_char (return value, integer). The number of *> <* characters written. *> <* z (call and return value, zone). The name *> <* of the document. Determines further the *> <* document, the buffering and the position *> <* of the document. *> <* char (call value, integer).The character with *> <* iso-value char is written as a graphical. *> <* *> <***********************************************************> begin write_char := if char <= 'sp' then write (z, <<d>, "<", 1, char, ">", 1) else write (z, false add char, 1 ) ; end write_char; \f <* LAN device make link parameter scanning page ... 10... *> integer procedure stack_current_output (file_name); array file_name ; <***********************************************************> <* *> <* The procedure stacks the current output zone, establi- *> <* shing a stack zone chain in the global long array *> <* chain_name, connects the zone to the file file_name and *> <* returns zero. *> <* If the zone cannot be connected to the file, the proce- *> <* dure returns a value > 0 with the zone unstacked again. *> <* *> <* Call : stack_current_output (file_name); *> <* *> <* stack_current_output (return value, integer). The re- *> <* sult of the connection. *> <* file_name (call value, real array). After *> <* stacking the zone is connected to *> <* the file whose name is in *> <* file_name (1:2). *> <* *> <***********************************************************> begin integer result; result := 1 shift 2; <*1<2 <=> 1 segment, temporary is enough*> fp_proc (29, 0, out, chain_name); <*stack c o*> fp_proc (28, result, out, file__name); <*connect *> if result <> 0 then fp_proc (30, 0, out, chain_name); <*unstack *> stack_current_output := result; end stack_current_output; \f <* LAN device make link parameter scanning page ... 11... *> procedure unstack_current_output; <***********************************************************> <* *> <* The procedure unstacks the current output file from the *> <* stack zone chain given in the global long array chain_ *> <* name after having closed it up with an 'em' character *> <* or a 'nl' character and terminated it. *> <* *> <***********************************************************> begin integer char; integer array zdescr (1:20); getzone6 (out, zdescr); char := if zdescr (1) extract 12 = 4 <*bs*> or zdescr (1) extract 12 = 18 <*mt*> then 'em' else 'nl'; fp_proc (34, 0, out, char); <*close up *> fp_proc (79, 0, out, 0); <*terminate*> fp_proc (30, 0, out, chain_name); <*unstack *> end unstack_current_output; \f <* LAN device make link parameter interpretation page ... 12... *> integer procedure type__param (seplength, item); value seplength ; integer seplength ; real array item ; <*********************************************************> <* *> <* The procedure returns the kind of the item given. *> <* *> <* Call : type__param (seplength, item); *> <* *> <* type__param (return value, integer). The kind of the *> <* item : *> <* 0 seplength <><s>, item not below *> <* 1 seplength = <s>, item = console *> <* 2 -"- , -"- imc *> <* 3 -"- , -"- mailbox *> <* 4 -"- , -"- 3270in *> <* 5 -"- , -"- 3270out *> <* 6 -"- , -"- lanstat *> <* 7 -"- , -"- floppy *> <* 8 -"- , -"- printer *> <* 9 -"- , -"- streamer *> <* seplength (call value, integer). Separator < 12 + *> <* length as for system (4, ...). *> <* item (call value, array). An item in *> <* item (1:2) as for system (4, ...). *> <* *> <*********************************************************> \f <* LAN device make link parameter interpretation page ... 13... *> begin integer i, j, space_txt, point_txt; space_txt := 4 shift 12 + 10; point_txt := 8 shift 12 + 10; j := 0; for i := 1 step 1 until (if seplength < space_txt or seplength >= point_txt then 0 else 9) do if item (1) = real ( case i of ( <:conso:> add 'l', <:imc:> , <:mailb:> add 'o', <:3270i:> add 'n', <:3270o:> add 'u', <:lanst:> add 'a', <:flopp:> add 'y', <:print:> add 'e', <:strea:> add 'm') ) and item (2) = real ( case i of ( <:e:> , <::> , <:x:> , <::> , <:t:> , <:t:> , <::> , <:r:> , <:er:> ) ) then begin j := i; i := 9; end; type__param := j; if test then write (out, "nl", 1, "*", 10, <: type_param = :>, case (j + 1) of ( <:unknown:>, <:console:>, <:imc:>, <:mailbox:>, <:3270in:>, <:3270out:>, <:lanstat:>, <:floppy:>, <:printer:>, <:streamer:>), "nl", 1); end type__param; \f <* LAN device make link parameter interpretation page ... 15... *> integer procedure link____param (seplength, item); value seplength ; integer seplength ; array item ; <*********************************************************> <* *> <* The procedure returns the kind of the item given, *> <* using one look ahead. *> <* *> <* Call : link____param (seplength, item); *> <* *> <* link____param (return value, integer). The kind of *> <* the item : *> <* 0 end parameter list *> <* 1 <s>l.<int> *> <* 2 <s>users.<name> *> <* 3 <s><name> and name is <type> *> <* 4 <s><unknown> or .<unknown> *> <* seplength (call value, integer). Separator < 12 *> <* + length as for system (4, ...). *> <* item (call value, array). An item in *> <* item (1:2) as for system (4, ...). *> <* *> <*********************************************************> \f <*make link parameter interpretation page ... 16... *> begin integer i, j, space_txt, point_txt, point_int, next_seplength; real array next_item (1:2); space_txt := 4 shift 12 + 10; point_txt := 8 shift 12 + 10; point_int := 8 shift 12 + 4; next_seplength := scan_param (next_item); repeat_param := true; if type_param (sep_length, item) > 0 then j := 3 else if sep_length = space_txt and item (1) = real <:users:> and next_seplength = point_txt then j := 2 else if sep_length = space_txt and item (1) = real <:l:> and next_seplength = point_int then j := 1 else if seplength shift (-12) > 2 then j := 4 else j := 0; link____param := j; if test then write (out, "nl", 1, "*", 3, <: link_param = :>, case (j + 1) of ( <:<end param list>:>, <:<s>l.<int>:>, <:<s>users.<name>:>, <:<s><type>:>, <:< >unknown:>), "nl", 1); end link_param; \f <* LAN device make link parameter interpretation page ... 17... *> boolean procedure lanname_param (seplength, item); value seplength ; integer seplength ; array item ; <*********************************************************> <* *> <* The procedure returns the kind of the item given, *> <* using one look ahead. *> <* *> <* Call : lanname_param (seplength, item); *> <* *> <* lanname_param (return value, boolean). The kind of *> <* the item : *> <* false not <.><name> *> <* true <.><name> *> <* seplength (call value, integer). Separator < 12 *> <* + length as for system (4, ...). *> <* item (call value, array). An item in *> <* item (1:2) as for system (4, ...). *> <* *> <*********************************************************> \f <*make link parameter interpretation page ... 18... *> begin integer point_txt; point_txt := 8 shift 12 + 10; lan_name_param := seplength >= point_txt; if test then write (out, "nl", 1, "*", 3, <:lan_name_param = :>, if seplength >= point_txt then <:yes:> else <:no:>, "nl", 1); end lan_name_param; \f <* LAN device make link parameter interpretation page ... 19... *> integer procedure dev_no_name_param (seplength, item); value seplength ; integer seplength ; array item ; <*********************************************************> <* *> <* The procedure returns the kind of the item given, *> <* using one look ahead. *> <* *> <* Call : dev_no_name_param (seplength, item); *> <* *> <* dev_no_name_param (return value, boolean). The kind of*> <* the item : *> <* 0 none of below *> <* 1 .buf.<integer> *> <* 2 .<name>.<integer> *> <* 3 .<integer>.<name> *> <* 4 .<name> *> <* 5 .<integer> *> <* seplength (call value, integer). Sep. < 12 *> <* + length as for system (4, ...). *> <* item (call value, array). An item in *> <* item (1:2) as for system (4, ...). *> <* *> <*********************************************************> \f <*make link parameter interpretation page ... 20... *> begin integer j, point_int, point_txt, nextseplength; real array next_item (1:2); point_int := 8 shift 12 + 4; point_txt := 8 shift 12 + 10; next_seplength := scanparam (next_item); repeat_param := true; j := if sep_length >= point_txt and item (1) = real <:buf:> and next_sep_length = point_int then 1 <*.buf.<int>*> else if sep_length >= point_txt and next_sep_length = point_int then 2 <*.name.integer*> else if sep_length = point_int and next_sep_length >= point_txt then 3 <*.integer.name*> else if sep_length >= point_txt then 4 <*.name*> else if sep_length = point_int then 5 <*.integer*> else 0; <*none of above*> dev_no_name_param := j; if test then write (out, "nl", 1, "*", 3, <:dev_no_name_param = :>, case (j + 1) of ( <:unknown:>, <:buf.<integer>:>, <:.<devname>.<devno>:>, <:.<devno>.<devname>:>, <:.<devname>:>, <:.<devno>:>), "nl", 1); end dev_no_name; \f <* LAN device make link program head page ... 21... *> outfile (1) := chain_name (1) := real <::>; <*no outfile, no zone stack*> prepare_param_scan (0); scan_param (outfile); if scan_param (progname) shift (-12) extract 12 <> 6 <*equal*> then begin <*no outfile, progname is next param after program name*> for i := 1, 2 do begin progname (i) := outfile (i); outfile (i) := real <::>; repeat_param := true ; <*progname must be repeated*> end; end <*no outfile*>; if outfile (1) <> real <::> then begin <*stack current out and connect*> result := stack_current_output (outfile); if result <> 0 then begin <*connect not ok*> param_warning (out, <:warning outfile param connect impossible:>); write (out, <: :>, case result of ( <:no resources:>, <:malfunction:>, <:not user, non exist:>, <:convention error:>, <:not allowed:>, <:name format error:>)); end <*connect not ok*>; end <*stack current out and connect*>; \f <* LAN device make link program head page ... 22... *> point_int := 8 shift 12 + 4; point_txt := 8 shift 12 + 10; space_int := 4 shift 12 + 4; space_txt := 4 shift 12 + 10; trapmode := 1 shift 10; <*no end <segs>*> replacechar (8, 0); <*changes last char in write to array to null*> links_created := devtype := 0; movestring (old_main, 1, <::> ); movestring ( main, 1, <:lanmain1:>); <*default*> users := 1; <*all*> <*default*> modekind := users shift 12 + 0 ; open (zld, modekind, main, 0); test := false; seplength := scan_param (item); if seplength = space_txt and item (1) = real <:test:> then begin test := true; seplength := scan_param (item); end; \f <* LAN device make link program page ... 23... *> for action := link_param (seplength, item) while action > 0 do begin <*l.<int>, users.<name>, type>, or unknown*> devtype := 0; <*a new <type> expected*> case action of begin begin <*lan no*> seplength := scan_param (item); if seplength <> point_int then param_warning (out, <: l.<lanno>:>) else begin write (main, <:lanmain:>, <<d>, round item (1)); main (2) := main (2) shift (-8) shift 8; close (zld , true); open (zld , modekind, main, 0); end; seplength := scan_param (item); end <*lan no*>; begin <*users.*> seplength := scan_param (item); if seplength < point_txt then param_warning (out, <: users.<name>:>) else if item (1) <> real <:all:> and item (1) <> real <:one:> then param_warning (out, <: users.(all/one):>) else begin <*users.item accepted*> users := if item (1) = real <:all:> then 1 else 0; modekind := users shift 12 + 0; close (zld, true); open (zld, modekind, main, 0); end <*users.item accepted*>; seplength := scanparam (item); end <*users.*>; \f <* LAN device make link program page ... 24... *> begin <*<type>*> dev_id_count := buffers := 0; devno := -1; <*default*> devname (1) := lan (1) := real <::>; <*default*> devtype := type_param (seplength, item); <*a new <type> read*> seplength := scanparam (item); if dev_no_name_param (seplength, item) = 0 then param_warning (out, <: <type>.(<name>/<integer>):>) else for device_id := dev_no_name_param (seplength, item) while device_id > 0 do begin <*for device_id*> case device_id of begin begin <*.buf.<integer>*> seplength := scanparam (item) ; buffers := item (1); end <*.buf.<integer>*>; begin <*.name.no*> tofrom (devname , item, 8); seplength := scanparam (item) ; devno := item (1); end <*.name.no*>; begin <*.no.name*> devno := item (1); seplength := scanparam (item) ; tofrom (devname , item, 8); end <*.no.name*>; begin <*.name*> devno := -1 ; tofrom (devname , item, 8); end <*.name*>; begin <*.no*> devno := item (1); devname (1) := real<::>; end <*.name*>; end <*case device_id*>; devname (2) := devname (2) shift (-8) shift 8; <*at most 11 chars*> seplength := scanparam (item); if dev__type = 1 <*console *> or dev__type = 8 <*printer *> then begin <*lan name required*> if device_id = 2 <*.<name>.<integer>*> or device_id = 5 <* .<integer>*> then begin <*device_id not proper for lan*> param_warning (out, <: lan device name missing:>); device_id := 0; end else if device_id = 3 <*.<integer>.<name>*> or device_id = 4 <* .<name>*> then begin <*proper device id*> if not lan_name_param (seplength, item) then begin <*lan name not accepted, <type> not accepted*> param_warning (out, <: lan device name missing:>); device_id := 0; <*the device_id skipped*> end <*lan name not accepted, <type> not accepted*> else begin <*lan accepted*> tofrom (lan, item, 8); lan (2) := lan (2) shift (-16) shift 16; <*at most 10 chars*> seplength := scan_param (item); if device_id = 4 <*.<name>.<lan dev>*> and seplength = point_int then begin <*.<integer>*> devno := item (1); seplength := scan_param (item); end; end <*lan accepted*>; end <*proper device id*>; end <*lan name required*>; if device_id > 1 then increase (dev_id_count); \f <* LAN device make link program page ... 25... *> <*lan device link*> if dev__type > 0 and device_id > 1 then begin <*<type> and <device id> accepted*> if old_main (1) <> main (1) or old_main (2) <> main (2) then write (out, "nl", 2, <:main : :>, main, <: : :>, "nl", 1); tofrom (old_main, main, 8); reason := buffers; if ld_link (zld, devno, devname, devtype, lan, reason) then begin <*linked*> links_created := links_created + 1; write (out, <<ddd>, "nl", 1, <: link : :>, true, 12, devname, <:dev.no : :>, devno, <: ---> :>, true, 9, case devtype of ( <:console:>, <:imc:> , <:mailbox:>, <:3270in:>, <:3270out:>, <:lanstat:>, <:floppy:>, <:printer:>, <:streamer:>)); <* if devtype = 2 then write (out, <:buff. : :>, <<dd>, reason shift (-24) extract 8) else write (out, <:index : :>, <<dd>, reason extract 8); *> if devtype = 2 <*imc *> then write (out, <:max : :>, <<ddddd>, true, 11, reason shift (-32), <:buf : :>, <<d>, reason shift (-24) extract 8) else if devtype = 4 <*3270in *> or devtype = 5 <*3270out*> then write (out, <:ix : :>, <<d>, reason extract 8) else \f <* LAN device make link program page ... 26... *> if devtype = 1 or devtype = 8 then begin <*lan device*> zone z1, z2 (128, 1, stderror), z3 (1 , 1, stderror); integer array mess, answ, tail(1:20); integer char, cl_wait; long array field laf; write (out, <:lan : :>, true, 11, lan); open (z2, 8, devname , 0); cl_wait := 30; open (z3, 0, <:clock:>, 0); close (z3, true); repeat getshare6 (z2, mess, 1); mess (4) := 0; <* sense *> setshare6 (z2, mess, 1); monitor (16, z2, 1, answ); monitor (18, z2, 1, answ); if answ (1) <> 0 then begin getshare6 (z3, mess, 1); mess (4) := 0; mess (5) := 3; <* wait in 3.sec *> setshare6 (z3, mess, 1); monitor (16, z3, 1, answ); monitor (18, z3, 1, answ); end else cl_wait := 0; cl_wait := cl_wait-1; until cl_wait <= 0 ; write (out, <:connected : :>, if cl_wait < 0 then "+" else "-", 1); if devtype = 1 and seplength = point_txt and item (1) = real <:log:> then begin <* print s-log *> seplength := scan_param (item); open (z1, 4, <:slogarea:>, 0); <* if devname (1) = long <::> then begin monitor (68) generate name: (z2, 1, tail); laf:= 2; getzone6 (z2, tail); devname (1):= tail.laf (1); devname (2):= tail.laf (2); create_peripheral ( devname, devout); end; *> if monitor (42) lookup entry :(z1, 1, tail) = 0 and tail (1) > 0 and clwait < 0 then begin getzone6 (out, tail); write (out, "nl", 1, "em", 1); stopzone (out, true); if tail (1) extract 12 = 4 or tail (1) extract 12 = 18 then setzone6 (out, tail); repeat read_char (z1, char); out_char (z2, char); until char = 'em'; out_char (z2, 'nl'); setposition (z2, 0, 0); <* getzone6 (out, tail); laf := 2; *> <* change output document to console *> <* tail (1):= 8; *><* kind *> <* tail.laf (1):= devname (1); tail.laf (2):= devname (2); setzone6 (out, tail); *> end; close (z1, true); end; close (z2, true); end <*lan device*>; end <*linked*> \f <* LAN device make link program page ... 27... *> else begin <*not linked*> errorbits := errorbits shift ( -1) shift 1 + 1; <*add alarm*> status := reason shift (-36) extract 12; result := reason shift (-24) extract 12; write (out, "nl", 1, <:no link : :>, true, 12, devname, <:dev.no : :>); if devno < 0 then write (out, <: -:>) else write (out, <<ddd>, devno); write (out, <: +++> :>, true, 9, case devtype of ( <:console:>, <:imc:> , <:mailbox:>, <:3270in:> , <:3270out:>, <:lanstat:>, <:floppy:> , <:printer:>, <:streamer:>)); if status = 0 then begin <*dummy answer*> write (out, "sp", 0, "*", 1); write (out, <: lan/ext:>, case (result - 1) of ( <: not user/not res.:>, <: unintelligible:>, <: malfunction:>, <: does not exist:>)) end <*dummy answer*> \f <* LAN device make link program page ... 28... *> else if status = 4095 then begin <*create peripheral process*> write (out, "sp", 0, "*", 1, case result of ( <: function forbidden:>, <: calling process is not user:>, <: name conflict:>, <: no such device number:>, <: reserved by another process:>, <: name format illegal:>)) end <*create peripheral process*> else begin <*status error*> write (out, "sp", 0, "*", 1, if status = 3 then <: no free external process:> else if status = 4 then <: no free device handler:> else <: unknown status:>); end <*status error*>; end <*not linked*>; end <*<type> accepted*>; end <*for device_id*>; if dev_id_count = 0 then param_warning (out, <: <type>.(<name>/<integer>):>); end <*<type>*>; begin <*unknown parameter*> param_warning (out, <: unknown parameter:>); seplength := scanparam (item); end; end <*case action*>; end <*for action*>; \f <* LAN device make link program page ... 29... *> if item_count <= (if chain_name (1) = real <::> then (if not test then 3 else 4) else (if not test then 4 else 5)) then display_param_synt (out) else write (out, "nl", 2, <:links created : :>, links_created, "nl", 1); close (zld, true); if chain_name (1) <> real <::> then unstack_current_output else begin <*empty current out*> getzone6 (out, zdescr ); write (out, "nl", 1); stopzone (out, true ); if zdescr (1) extract 12 = 4 or zdescr (1) extract 12 = 18 then setzone6 (out, zdescr); end; end; ▶EOF◀