#include <stdio.h>
#include <stdlib.h>
#include "defines.h"

int FileCodeSplit(FILE *ofp,unchar *fname,unchar *wbuff,size_t wsize,long lmax,unchar *code)
/* 汎用ファイルコード分割出力: ofp<-fname */
/* wbuff : readバッファー , wsize : バッファー=分割サイズ */
// lmax  : 最大出力サイズ（本体＋コード；wsize単位,<0Lなら制御無し）
// code  : 分割サイズ毎出力コード
// return : 0=ok , 1=read open error , 2=read error , 3=write error
{
FILE *fp;
size_t sz;
int ret=0,len;
	if ((fp=fopen(fname,"rb"))==NULL) return(1);
	len=strlen(code);
	do {
		if ((sz=fread(wbuff,1,wsize,fp))==0) break;
		if (lmax>=0L) {
			lmax-=(long)(sz+len);
			if (lmax<0) break;
		}
		if (fwrite(wbuff,sz,1,ofp)==0) {
			ret=3;
			break;
		}
		if (fputs(code,ofp)) { // コード出力
			ret=3;
			break;
		}
	} while (sz==wsize);
	if (ferror(fp)) ret=2;
	fclose(fp);
	return(ret);
}
