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

#include <iocslib.h>
#include "defines.h"
#include "rs232c.h"

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

int ComInps0(unchar buff[],long otm,long itm,int acks)
/* RS-232C文字列受信（時間切れリトライなし）*/
/* buff:受信バッファー , itm:受信待ち時間（２バイト目以降）, otm:ACK/NAK送信時間 */
/* acks:NAK送り回数 */
/* リターン値：0=入力なし , >0=EOSを含めそのバイト数入力 , <0=エラー */
{
int i=0,c,ret,ack=-1;
unchar sum;
	buff[0]=0;
	if (ISNS232C()) {
		do {
			if (acks>0 && (++ack)>acks) return(TRYERR);
			/* Receive message */
			sum=0;
			i=0;
			do {
				ret=ComInWait(itm);
				if (ret==2) return(BERR);
				if (ret) return(IERR);
				c=INP232C();
				buff[i++]=c;
				sum+=c;
			} while (c!=0);
			
			/* Receive Check Sum */
			ret=ComInWait(itm);
			if (ret==2) return(BERR);
			if (ret) return(IERR);
			sum-=INP232C();
			
			/* Send ACK/NAK */
			ret=ComOutWait(otm);
			if (ret==2) return(BERR);
			if (ret) return(OERR);
			OUT232C(sum==0? ACK:NAK);
		} while (sum && acks>=0); /* 一致するとsum==0となるから */
		/*printsn("-->",buff);*/
	}
	return(i);
}

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