<div dir="ltr">This is a some parts of the code for implementing \beginspecial and \endspecial<br><br><br>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<br>% [53.1344]
<br>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<br>@x   
<br>@d immediate_code=4 {command modifier for \.{\\immediate}}
<br>@d set_language_code=5 {command modifier for \.{\\setlanguage}}
<br>@y
<br>@d beginspecial_node=6 {|subtype| in whatsits that represent \.{\\beginspecial}}
<br>@d endspecial_node=7 {|subtype| in whatsits that represent \.{\\endspecial}}
<br>@d LR_node=8 {|subtypes| in whatsits that represent \beginL, etc.}
<br>@d immediate_code=9 {command modifier for \.{\\immediate}}
<br>@d set_language_code=10 {command modifier for \.{\\setlanguage}}
<br>@z
<br> @x
<br>@!@:open_out_}{\.{\\openout} primitive@&gt;
<br> @y  
<br>@!@:open_out_}{\.{\\openout} primitive@&gt;
<br> @z<br><br>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<br>% [53.1348]
<br>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<br>@x  open_R_node, eqwrite_node
<br>open_node:@&lt;Implement \.{\\openout}@&gt;;
<br>write_node:@&lt;Implement \.{\\write}@&gt;;
<br>@y
<br>open_node,open_R_node:@&lt;Implement \.{\\openout}@&gt;;
<br>eqwrite_node,write_node:@&lt;Implement \.{\\write}@&gt;;
<br>@z
<br>@x  beginspecial_node, endspecial_node
<br>special_node:@&lt;Implement \.{\\special}@&gt;;
<br>@y
<br>special_node,beginspecial_node,endspecial_node:@&lt;Implement \.{\\special}@&gt;;
<br>@z<br><br>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<br>% [53.1354]
<br>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<br>@x  special_switch
<br>begin new_whatsit(special_node,write_node_size); write_stream(tail):=null;
<br>p:=scan_toks(false,true); write_tokens(tail):=def_ref;
<br>end
<br>@y
<br>begin i := cur_speech; j := cur_direction; k:=cur_chr;
<br>if not eqspcial then begin cur_speech := Lftlang; cur_direction := L_to_R; 
<br>                     end;
<br>new_whatsit(k,write_node_size);
<br>if k = endspecial_node then
<br>     if is_open_SPC then begin
<br>            p := info (SPCsp); pop_SPC;
<br>            write_tokens(tail):=write_stream (p);
<br>            add_token_ref (write_tokens(tail));
<br>          end
<br>     else begin print_err(&quot;Extra \endspecial, ignored&quot;);
<br>      help1(&quot;\endspecial must be match with \beginspecial.&quot;);
<br>      error; write_tokens(tail):=null;
<br>      end
<br>else begin p:=scan_toks(false,true); write_tokens(tail):=def_ref; end;
<br>if k = beginspecial_node then begin
<br>     q:=scan_toks(false,true); write_stream(tail):=def_ref; 
<br>     push_SPC(tail);
<br>    end
<br>else write_stream(tail):=null;
<br>cur_speech := i;  cur_direction := j;
<br>end
<br> <br>@z<br><br>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<br>% [53.1356]
<br>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<br>@x  eqwrite_node
<br>write_node:begin print_write_whatsit(&quot;write&quot;,p);
<br>@y
<br>eqwrite_node,write_node:begin 
<br>    if subtype(p) = eqwrite_node then print_write_whatsit(&quot;eqwrite&quot;,p)
<br>    else print_write_whatsit(&quot;write&quot;,p);
<br>@z
<br>@x  open_R_node, LR_node, beginspecial_node and endspecial_node
<br>othercases print(&quot;whatsit?&quot;)
<br>@y
<br>@&lt;Print LR |whatsit|@&gt;@/
<br>othercases print(&quot;whatsit?&quot;)
<br>@z
<br>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<br>% [53.1357]
<br>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<br>@x  open_R_node
<br>open_node: begin r:=get_node(open_node_size); words:=open_node_size;
<br>@y
<br>open_node,open_R_node:
<br>  begin r:=get_node(open_node_size); words:=open_node_size;
<br>@z
<br>@x  eqwrite_node
<br>write_node,special_node: begin r:=get_node(write_node_size);
<br>@y
<br>eqwrite_node,write_node,special_node,beginspecial_node,endspecial_node:
<br>       begin r:=get_node(write_node_size);
<br>     if subtype(p) = beginspecial_node then add_token_ref (write_stream(p));
<br>@z<br><br>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<br>% [53.1358]
<br>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<br>@x  open_R_node, eqwrite_node, beginspecial_node and endspecial_node
<br>open_node: free_node(p,open_node_size);
<br>write_node,special_node: begin delete_token_ref(write_tokens(p));
<br>@y
<br>open_node,open_R_node: free_node(p,open_node_size);
<br>eqwrite_node,write_node,special_node,beginspecial_node,endspecial_node:
<br>   begin delete_token_ref(write_tokens(p));
<br>    if subtype(p) = beginspecial_node then delete_token_ref(write_stream(p));
<br>@z
<br>@x  LR_node
<br>close_node,language_node: free_node(p,small_node_size);
<br>@y 
<br>close_node,language_node,LR_node: free_node(p,small_node_size);
<br>@z<br>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<br>% [53.1373]
<br>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<br>@x  open_R_node, eqwrite_node
<br>open_node,write_node,close_node:@&lt;Do some work that has been queued up
<br>  for \.{\\write}@&gt;;
<br>special_node:special_out(p);
<br>@y
<br>open_node,open_R_node,write_node,eqwrite_node,close_node:
<br>  @&lt;Do some work that has been queued up for \.{\\write}@&gt;;
<br>beginspecial_node,endspecial_node,special_node:special_out(p);
<br>@z<br></div>