#include <setjmp.h>
#include <ctype.h>
#include <string.h>

#include "extern.h"

extern jmp_buf env;

rsin(flg)     /* receive sentence from RS232C  RS232C->*rsent */

int flg;      /* エコーバック禁止フラグ  1..禁止 0..エコーバック  */

        {int i = 0 , ix = 0, ibuff, ch = 0, ch1, j;
         
         kanji = 0;
         
         t_mset(WAIT_TIME);
                   
         while(1)
             {if ( ! chkcd() ) longjmp(env,1); /* con ｼﾞｮｳﾀｲ ﾃﾞ ﾅｹﾚﾊﾞ ﾓﾄﾞﾙ */
              if ( t_itrpt() )
                 { 
				   linecut();
                   longjmp(env,2);     }
                                             /* ﾀｲﾑ･ｱｳﾄ ｼｮﾘ */

              while( rshit() ) 
                  {  
		     ch = rsbread();
               
		     if ( ch == '\b' )
					{ 
					  if ( i )
					 	{ if ( ! flg )  
							{ putchar('\b'); rsbwrite('\b',1);
					  		  putchar(' ');  rsbwrite(' ',1);
							  putchar('\b'); rsbwrite('\b',1);
							}
				 	      i--;
						}
					  j = i - 1;
					  if ( i )    /* 漢字バックスペース考慮 90.11.30 */
					 	{ ch = *(rsent + i); ch1 = *(rsent + j);
						  if ( iskanji(ch1) && iskanji2(ch) )
							{
						  	 if ( ! flg )
								{ putchar('\b'); rsbwrite('\b',1);
					  		  	  putchar(' ');  rsbwrite(' ',1);
							  	  putchar('\b'); rsbwrite('\b',1);
								}
				 	      	 i--;
							}
						}
					  continue;
					}

                     if ( ch != '\r' && ch != '\t' && iscntrl(ch) )
                        { continue; }
                                          
                      if (kanji == 0 && iskanji(ch) )  kanji = 1;
                                /* ｶﾝｼﾞ ﾆｭｳﾘｮｸ ﾊﾝﾀﾞﾝ */
                       
                      *(rsent + i) = ch;
					  if ( ! flg ) rsbwrite(ch,1);
					  if ( ch == '\r' ) { *(rsent + i) = '\n';
										  rsbwrite('\n',1); }


                      if ( moniflg ) putchar(ch);

                      i++; 
                      if ( ch == 0x0d || i > 255 )    break;
                  }
            if ( ch == 0x0d )  { addlf(ch); break; }
            if ( i > 255 ) break;
           }           
         *(rsent + i) = NULL;
	return(0);
       }

