/*****************************************************************************/
/* カットファイル表示 */
/*****************************************************************************/

#include <stdio.h>
#include <string.h>
#include "defines.h"
#include "aiggraph.h"
#include "abuff.h"

/* SUPER()を使うため、GCD -OS すること */

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

int cut_disp(FILE *fp,int fnonclr,int fofmem,int fheaddisp)
{
int wx,wa,y,wy,i,ssp;
unchar head[48+4],*buff,bbuff[256];
unsint *gram=(unsint *)GRAM;
	/* ファイル先頭へ戻す：ヘッダー確認のため読み出されているから */
	rewind(fp);
	
	/* ヘッダー文字列＋画像幅データ */
	if (fread(head,48+4,1,fp)==0) return(1);
	if (memcmp(head,"CUT_V1.0",8)) return(2); /* CUTでない */
	
	/* 画面設定 */
	if (!fnonclr || CRTMOD(-1)!=16) screen(2,0,1,1); /* 768*512(1024*1024) 16colors */
	
	/* 画像幅 */
	wx=*(unsint *)&head[48];
	wa=((wx+7)/8+7)/8; /* 圧縮フラグバイト数（全行で同じ）*/
	wy=*(unsint *)&head[50];
	
	/* 最初の行の１つ前の行＝全部０のライン */
	for (i=0;i<(wx+7)/8;i++) bbuff[i]=0;
	
	/* 読み込みバッファー確保 */
	if (!fofmem) {
		y=filelength(fileno(fp))-(48+4);
		if (y<=0) return(2);
		buff=newmalloc(y);
	} else buff=NULL;
	
	/* 表示 */
	if (buff!=NULL) { /* 全部読み込めるバッファーがとれる時 */
		unchar *buff2;
		if (fread(buff,y,1,fp)==0) { /* 一気に読み込む */
			free(buff);
			return(1);
		}
		buff2=buff; /* buffを変更するので退避しておく */
		ssp=SUPER(0);
		for (y=0;y<wy;y++) {
			buff=cut1disp(buff,wx,wa,gram,bbuff);
			gram+=1024; /* next line top */
		}
		if (ssp>=0) SUPER(ssp);
		free(buff2);
	} else { /* 一気に読み込むバッファーがとれない時 */
		unchar line[256]; /* １行のデータは２５６バイト以下だから */
		
		ssp=SUPER(0);
		for (y=0;y<wy;y++) {
			/* １行分のデータ読み込み */
			if ((i=fgetc(fp))==-1) {
				if (ssp>=0) SUPER(ssp);
				return(1);
			}
			line[0]=i;
			if (i!=0x01) {
				if (fread(&line[1],i-1,1,fp)==0) {
					if (ssp>=0) SUPER(ssp);
					return(1);
				}
			}
			cut1disp(line,wx,wa,gram,bbuff);
			gram+=1024; /* next line top */
		}
		if (ssp>=0) SUPER(ssp);
	}
	if (fheaddisp) {
		B_LOCATE(0,(y+15)/16);
		for (i=0;i<47;i++) B_PUTC(head[i]); /* ヘッダー文字列表示 */
	}
	return(0);
}

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