/*
 *  システム行への書き込みﾌﾟﾛｸﾞﾗﾑ 1991 HIROSHI-NAKAMURA
 *
 *  使用法 SYSLINE ﾒｯｾｰｼﾞ 属性(0ｶﾗ63) 表示開始桁(1ｶﾗ79) 表示行(1ｶﾗ25)
 *
 *  ﾒｯｾｰｼﾞ 任意の文字列｡ただし空白は使えません｡
 *  属性   0=黒 1=青 2=赤 3=紫 4=緑 5=水色 6=黄 7=白 及び 8=反転 32=高輝度
 *         色 + 反転 + 高輝度 の合計数値で指定します｡  
 *  桁･行  画面左上を1行1桁として指定します｡省略時はｼｽﾃﾑ行左端｡
 */
#include    <string.h>
#include    <dos.h>
#include    <jctype.h>
#include    <jstring.h>
#include    <memory.h>

struct  SREGS   *segregs,*sregs  ;

printv(str,attr,x,y)     /* VRAM書き込み */
unsigned char str[];     /* 文字列 */
char attr ;              /* 属性 */
int  x,y;                /* 桁､行 */
{
	int         len,i,code ;
	static      unsigned  pos =0 ;
	char        kan[2],attrib[2],pek[2];
	unsigned    vramseg1=0xc800,vramseg2=0xca00 ;
	
	if (x < 0 || x >= 80 || y < 0 || y >= 25 )
		return(-1);

	pos = (y * 80 + x) * 2;
	len = strlen(str);
	for (i=0;i<len;i++){
		if( iskanji(str[i]) && iskanji2(str[i+1]) ){ /* 漢字 */
			code = (int)jmstojis( str[i++]*0x100 +str[i+1] ) ;
			kan[0]= ( code >> 8 );
			kan[1]=  code & 0x00ff ;
			attrib[0]=attr|0x0040 ;
			poke (vramseg1,pos+1,attrib,1) ;
			attrib[0]=attr ;
			poke (vramseg1,pos+3,attrib,1) ;
			poke (vramseg2,pos,kan,2) ;
			pos +=4 ;
		}
		else{
			if(str[i] =='\\' && str[i+1]=='n' ){
				pos = (pos / 80 + 1) *80;
				i++ ;
			}
			else if( str[i]=='\n' ){
				pos = (pos / 80 + 1) * 80 ;
			}
			else{
				peek (vramseg1,pos-1,pek,1) ;
				/*if((x%2) && (pek[0] & 0x40)){
					poke(vramseg1,pos-2," ",1);
					poke(vramseg1,pos-1,attrib,1);
				}*/
				kan[0]= str[i] ;
				kan[1]=   0 ;
				attrib[0]= attr ;
				poke (vramseg1,pos,kan,1) ;
				poke (vramseg1,pos+1,attrib,1) ;
				pos +=2 ;
			}
		}
	}
	return(len);
}
poke(seg,off,buff,siz)   /* ﾒﾓﾘ書き込み */
int  seg;                    
int  off;
char *buff ;
unsigned siz;
{
	struct SREGS	s;

	segread(&s);
	movedata(s.ds,(int)buff,seg,off,siz);
	
	return(0);
}

peek(sseg,soff,dbuff,size)
int sseg;
int soff;
char *dbuff ;
unsigned size;
{
struct SREGS	s;

	segread(&s);
	movedata(sseg,soff,s.ds,(int)dbuff,size);
	
	return(0);
}


