'   F U N C T I O N   A N D   S U B R O U T I N E    S T A T E M E N T   A N D   B O D Y


main,-s      .fun       <fun                 .i "\r\n" .i 
             .sub       <sub                 .i "\r\n" .i

sub          .idf      ..=f."" =fun          +.fun2                  'nothing to return - nothing to recognize
fun          .idf      ..=f."" ..~f.token    +.fun2 

             .fun2    "function $ ".=header   :                            'somewhere between this and header
                                                                           '\n output; cannot find this; 
                                                                           'have to use variable header;
             '-------------------------------
             'initiating first function round
             '- - - - - - - - - - - - - - - -  
             =round1,fun,header                :
             ..=gloVars.variables              : 
             ..=variables.f                    : '$variables will accomulate local vars. and is unchanged 
                                                 'during second round;
             ..=header_pos.pos                 : 'assumed that pos is pointed to (, :, or line end separator;
                                                 'during second round parsing will resume from this position;
             .+fb                              : function body stream
             '-------------------------------  
             >header  
                                                                                     '* _c_ extension has been added;
                                                                                     'it can be changed here;                       
header        (         (                    >we                                     'f(   f(x,   f(x,y, - case I; this syntax: 
              .t        ()                   =body         +                         'to allow to ignore param. list
                                                                                     'sin(x)(y) must be eliminated;
header,we     )         )                    <body                                   'f(); f(s,);    
              ,         ,                                                            'f(,x);       
header,e      ,         ,                    =we                                     'case I
              )         )                    <body                                   'f(x);

body         .t         {                    =-s,ws       .i   :
             "$global " .i

round1,fun,-s .endfun   "global \$$global ".=global."\n".", \$"              :       'replace \n with comma and "$";
                        "$global \n".=global.", \$\n".";"                    :       'remove trailing comma and "$";
                        "$global ".=global."global \$\n".""                  :       'delete empty list of globals;
                        ..=pos.header_pos   <2,fun,header .-fb .i            :
                        "$header " 

fun,-s       .endfun      ..=variables.gloVars  ..=gloVars."" ..=global.""             :
             <          +.return     .i } .i  =main,-s,ws   .i      

ws           .exitfun   <                        +.return     +.tfull    
-            .return     "\$$f ;".=x."\$;".""    :            'add $ and ; to non-empty only
                         "$x ".=x."\n;".""       :            'remove \n and ";";
                         "return $x ;"      .i                'print with ";";