/**********************************************************************/


filename myreport namepipe '\pipe\report' server;                                       


/**********************************************************************/


filename finances namepipe '\pipe\money.dat' client;
                                          

/**********************************************************************/


filename orders namepipe '\pipe\lunch\orders' server;                                                  


/**********************************************************************/


filename myreport namepipe '\\fastpc\pipe\report' client;


/**********************************************************************/


filename central namepipe '\pipe\report' server;                                      


/**********************************************************************/


   /* named pipe server code                               */
data prices;                   
   input item price;           
   cards;                      
10 10.4                        
20 13.87                       
30 9.52                        
40 18.77                       
50 20.38                       
;                              

filename main namepipe '\pipe\orders' server 
         retry=60;                                        
data trans;                                               
   infile main;                                           
   input item quan;                                       
   set prices;                                            
   where item=item;                                       
   tax=1.05;                                              
   total=quan*price*tax;                                  
   file main;                                             
   put total;                                             
run;                                                      


/**********************************************************************/


   /* named pipe client code                               */                             
filename sales namepipe '\\prices\pipe\orders'                   
         client retry=30;                                   
data a;                                                     
   length acct item quan $5;                                
   if _n_=1 then                                            
      do;                                                   
         window Entry color=black rows=15                   
            #2 @3 'Account Number - ' c=cyan acct c=cyan    
            #4 @3 'Item Number    - ' c=cyan item c=cyan    
            #6 @3 'Quantity       - ' c=cyan quan c=cyan    
            #8 @10 'Type END on command line when finished.'
                   c=yellow;                                
         window Total color=black irow=16 rows=9            
            #2 @3 'The total for this order is  '           
                  c=yellow total dollar8.2 c=yellow;        
      end;                                                  
   do while(upcase(_cmd_) ne 'END');   
      display entry;                                        
      infile sales truncover missover;                      
      file sales;                                           
      if item in ('10','20','30','40','50')  then           
         do;                                                
            put item quan;                                  
            input total;                                    
            display total noinput;                          
            output;                                         
            item='';                                        
            quan='';                          
            acct='';                          
         end;   /* item check do loop                      */       
      else  _msg_ = 'Not a valid Item number';
   end;   /* _cmd_ ne END do loop                          */            
   stop;                                      
run;                                          
title 'Information for all orders taken';     
proc print;                                   
run;                                          


/**********************************************************************/


   /* named pipe server code                               */                                  
filename in namepipe '\pipe\code' server retry=-1                                
         eofconnect;                                             
filename myout namepipe '\pipe\results' server retry=60                                                         
         eofconnect;                                             
filename mylog namepipe '\pipe\loginfo' server retry=60                                                         
         eofconnect;                                             
options mtrace mprint source source2;                            
%include in;                                                     


/**********************************************************************/


   /* code for AFTER.SAS                                   */                                      
data _null_;                                                     
   file print;                                                   
   x=time();                                
   y=date();                                
   put 'Job Completed - ' y mmddyy. x time.;
run;                                        
dm 'log; file mylog replace;';              
dm 'output; file myout replace;';           
dm 'clear output; clear log;';              


/**********************************************************************/


   /* named pipe client code                               */                                   
filename in namepipe '\\fast486\pipe\code' 
         client retry=-1;
filename my out namepipe '\\fast486\pipe\results'                               
         client retry=100;                                        
filename mylog namepipe '\\fast486\pipe\loginfo'              
         client retry=100;                                        
filename after 'after.sas';                                       
%keydef 'F12'                                                     
        "inc after;file in replace;undo;top;note log;             
        inc mylog;note results;inc out";                          


/**********************************************************************/


   /* named pipe client code                               */                       
filename bids namepipe '\\baseball\pipe\offer'   
         client retry=-1;                             
filename reply namepipe '\\baseball\pipe\reply'   
         client retry=-1;                             
data baseball;                                        
   length action $4 player $17 yr 4 type $7;          
   window offers color=black rows=15                  
      #2 @3 'Offer' @20 'Player' @41 'Yr' @53 'Type'  
         @62 'Price' c=yellow                         
      #4 @3 action protect=yes  @21 player protect=yes
         @40 yr protect=yes @52 type protect=yes              
         @61 price PROTECT=YES                                
      #7 @3 'Type ACCEPT or REJECT on the command line to     
            respond to offer.' c=yellow                       
      #8 @3 'Type END on command line when finished.'         
            c=yellow;                                         
   infile bids;                                               
   file reply;                                                
   input action $ fname $ lname $ yr type $ price;            
   player=trim(fname) || ' ' || lname;                        
   do until(upcase(_cmd_) eq 'END');                          
      display offers;                                         
      select (upcase(_cmd_));                                 
         when ('ACCEPT')                                      
            do;                                               
               put 'ACCEPTED';                                
               output;                                        
               infile bids;                                   
               input action $ fname $ lname $ yr type $ price;
               player=trim(fname) || ' ' || lname;            
            end;                                              
         when ('REJECT')                                      
            do;                                               
               put 'REJECTED';                                
               output;                                        
               infile bids;                                   
               input action $ fname $ lname $ yr type $ price;
               player=trim(fname) || ' ' || lname;            
            end;                                              
         when ('END') stop;                                   
         otherwise                                            
            do;                                               
               _msg_='You must enter ACCEPT, REJECT, or END.';
            end;                                              
         end;                                                 
      end;                                                    
      stop;                                                   
   run;                                                       


/**********************************************************************/


INIT:                                                         
   rc=filename('offer','\pipe\offer','namepipe',
      'server retry=60');                                     
   if rc=0 then link errmsg;                                  
   else                                                       
      do;                                                     
         fid1=fopen('offer','o');                             
         if fid1=0 then link errmsg;                          
      end;                                                    
   rc=filename('reply','\pipe\reply','namepipe',
      'server retry=60');                                     
   if rc=0 then link errmsg;                                  
   else                                                       
      do;                                                     
         fid2=fopen('reply','s');                             
         if fid2=0 then link errmsg;                          
      end;                                                    
   rc=libname('baseball','e:\baseball\price\list');                          
   prices=open('baseball.becket','i');                        
   if not prices then link errmsg;                            
   call set(prices);                                          
   call setrow(0,1,'n','y');                                  
return;                                                       

MAIN:                                                  
   select(choice);                                     
      when ('BUY')  link write;                        
      when ('SELL')  link write;                       
      when('QUIT') call execcmd('End');                
      otherwise                                        
         do;                                           
            choice='';                                 
            refresh;                                   
         end;                                          
   end;                                                
return;                                                

TERM:                                                  
   rc=fclose(fid1);                                    
   rc=fclose(fid2);                                    
   if prices then rclose=close(prices);                
return;                                                

GETROW:                                                
   if fetchobs(prices,_currow_)<0 then call endtable();
return;                                                

PUTROW:                                                
   row=_currow_  ;                                     
   rc=select(row);                                     
   cursor player;                                      
return;                                                

WRITE:                                                 
   rcfetch=fetchobs(prices,row);              
   order=choice||' ' ||player||' ' ||yr||' '||
         type||' '||price;                    
   rc=fput(fid1,order);                       
   rc=fwrite(fid1);                           
   choice='';                                 
   rc=unselect(_currow_);                     
   rc=fread(fid2);                            
   rc=fget(fid2,answer,200);                  
   reply='The offer for '|| player||' at '||  
         price||' is '||answer;               
   rc=unselect(row);                          
   refresh;                                   
return;                                       

ERRMSG:                                       
   msg=sysmsg();                              
   put msg;                                   
   _status_='H';                              
return;                                       


/**********************************************************************/