/* New-Getline : open */

#include <stdio.h>
#include "deftype.h"
#include "getline.h"
#include "abuff.h"

int OpenGetline(_GETLNDT *gdt,int bsize,int lmax,int mode)
/* getline使用開始処理 */
/* bsize=ヒストリーサイズ */
/* lmax =入力バイト数：ANK=1、全角,1/2角,1/4角=2で数える */
/* mode =1/2,1/4角文字を使うえるかどうか 0=not , 1=ok */
{
unchar *mal;
	/* １行入力長さ数：文字数ではlmax(全てANK)〜lmax/2(全て２バイト文字) */
	if (lmax<2) lmax=2; /* 2bytes以上 */
	
	/* ヒストリーバッファー確保 */
	/* エラーになる確率が比較的高い大きいワークエリア確保を先に行う */
	mal=newmalloc(bsize);
	if (mal==NULL) return(-1); /* error */
	gdt->history=mal;
	*mal=0; /* not use symbol */
	
	/* 内部バッファー確保（３本分）*/
	mal=newmalloc((lmax+1)*sizeof(unsint)*3);
	if (mal==NULL) {
		free(gdt->history);
		return(-1); /* error */
	}
	gdt->buffer=(unsint *)mal;
	
	/* 初期化 */
	gdt->wp=gdt->rp=gdt->top=gdt->fhist=0;
	gdt->finit=gdt->rhist=gdt->fcheck=1;
	gdt->f24=mode;
	/* サイズ記録 */
	gdt->lmax=lmax;
	gdt->bsize=bsize;
	
	return(0);
}
