/***************************************************************************/
// "Меркурий"-"Правда" - open source переводчик
// распространяется в соответсвии с лицензией GNU v 2.0
//
// Всяко-разные отображалки
//
// t_Edit2 отображение первичного массива слов
// t_ViewAntwort отображение вариантов перевода
// t_Edit3 отображение структуры фразы
// t_EditPart редактор частей речи
// t_EditForm редактор грамматических форм
// t_EditForm1 редактор грамматических форм (вспомогательный)
// t_SlowoView отображение массива словарей
// t_SlowoView1 отображение грамматических форм, присутствующих в словаре
//
// Анисимов Д.В. сегодня
/***************************************************************************/
# include <string.h>
# include <mylib.h>
# include <slowo2.h>
# include <video.h>
# include <color.h>
# include <face.h>
# include "core.h"
# include "edit2.h"
# include "debug.h"
# include "path.h"
# include "word.h"
extern t_Debug Debug ;
extern t_Path Path ;
extern t_AddWord AddWord ;
extern t_Slowo2 *SlowoT ;
extern short *i_FormatT
;
/***************************************************************************/
// абстрактный класс списка //
/***************************************************************************/
t_SelectWin :: t_SelectWin( void ) : t_Win( )
{
restart();
}
/***************************************************************************/
t_SelectWin :: ~t_SelectWin( void )
{ ; }
/***************************************************************************/
void t_SelectWin :: restart( void )
{
Begin = 0 ;
Begin_X = 0 ;
PY = 0 ;
}
/***************************************************************************/
void t_SelectWin :: begin( void ){ ; }
void t_SelectWin :: end ( void ){ ; }
/***************************************************************************/
e_WinMsg t_SelectWin :: loop( void )
{
short sx,sy ;
short ZZ,key1,key2 ;
static short sx1,sy1 ;
s_get_size( sx1,sy1 );
begin();
while( 1 )
{
s_get_size( sx,sy );
if( sx!=sx1 || sy!=sy1 )
{ sx1=sx ; sy1=sy ; return WM_RESIZE ; }
paint( );
s_getch( &key1,&key2 ) ;
ZZ=s_shiftstatus();
if( 1==hot_key( ZZ,key1,key2 ) ) continue ;
//if( 0!=(ZZ&(S_Shift_L|S_Shift_R)) )
{ switch( key2 )
{ // -------------- переход в другие окна ------------
case S_key_F2 : end(); return WM_FIRST ;
case S_key_F3 : return WM_SRC ;
case S_key_F4 : return WM_DST ;
case S_key_F5 : end(); return WM_DEBUG ;
case S_key_F6 : end(); return WM_PATH ;
}
}
switch( key1 )
{ case S_key_Esc : end(); return WM_ESC ;
case 0:
{ switch( key2 )
{
case S_key_Up :
if( PY>0 ) PY-- ;
if( PY<Begin ) Begin=PY ;
break ;
case S_key_Down :
if( PY<MaxY-1 ) PY++ ;
if( size_y<PY-Begin ) Begin=PY-size_y ;
break ;
case S_key_Left : if( 0<Begin_X ) Begin_X-- ; break ;
case S_key_Right : if( Begin_X<80 ) Begin_X++ ; break ;
case S_key_Home : PY=0 ; break ;
case S_key_End : PY=MaxY-1 ; break ;
case S_key_PgUp :
PY=max(0,PY-=size_y-1 );
if( size_y<PY-Begin ) Begin=PY-size_y ;
break ;
case S_key_PgDn :
PY=min( MaxY,PY+=size_y-1 );
if( size_y<PY-Begin ) Begin=PY-size_y ;
break ;
case S_key_F10 : end(); return WM_ESC ;
}
}
}
}
}
/***************************************************************************/
void t_SelectWin :: paint( void )
{ short i ;
t_Win::paint();
s_rame2_F( y1-1, x1-1, y2+1, x2+1, 0x0f );
s_text_yxf( y1-1,x1+3 ,name_Color, Name );
paint_begin( );
for( i=0 ; i<=size_y ; i++ )
paint1( i, Begin+i==PY );
}
/***************************************************************************/
void t_SelectWin :: paint_begin( void )
{ ; }
/***************************************************************************/
void t_SelectWin :: paint1( short i, char current )
{ ; }
/***************************************************************************/
char t_SelectWin :: hot_key( short SS, short key1, short key2 )
{ return 0 ;
}
/***************************************************************************/
// отображение первичного массива слов //
/***************************************************************************/
t_Edit2 :: t_Edit2( void ) : t_Win( )
{
restart();
}
/***************************************************************************/
void t_Edit2 :: restart( void )
{
Begin = 0 ;
Begin_X = 0 ;
PY = 0 ;
Reg = 0 ;
}
/***************************************************************************/
void t_Edit2 :: paint( void )
{ short i ;
t_Win::paint();
s_rame2_F( y1-1, x1-1, y2+1, x2+1, 0x0f );
s_text_yxf( y1-1,x1+3 ,name_Color, Name );
if( Reg==0 )
{ for( i=0 ; i<=size_y ; i++ )
paint1( i, Begin+i==PY );
}
else
{ short p1,p2 ;
p1=min( pos1,PY );
p2=max( pos1,PY );
for( i=0 ; i<=size_y ; i++ )
paint1( i, p1<=Begin+i && Begin+i<=p2 );
}
}
/***************************************************************************/
void t_Edit2 :: paint1( short i, char current )
{ short p1,p2 ;
short i_struct ;
char *Str,*Str1 ;
char c ;
t_ItemList &From =Core.from( );
MaxY = From.j ;
if( MaxY<=Begin+i ) return ;
p1=size_x/4 ;
p2=size_x/2 ;
if( current ) c=0x70 ; else c=0x07 ;
Str=emptystr( size_x-2 );
s_text_yxf( y1+i,x1+1 ,c, Str );
Str=From[Begin+i].Str ;
s_text_yxf( y1+i,x1+1 ,c, Str );
if( From[Begin+i].exist==0 )
i_struct=-1 ;
else i_struct=Core.struct_of_word( Begin+i );
//if( 1<Core.From[Begin+i].Tag.j )
// s_text_yxf( y1+i,x1+p2-2,c,"*" );
Str1=Perevod.translate_word_s( Str, i_struct );
if( i_struct<0 )
{ // ------- слово не перевелось ---------
if( Begin+i==PY ) c=0x7c ; else c=0x0c ;
s_text_yxf( y1+i,x1+p1,c,Str1 );
s_text_yxf( y1+i,x1+p2,c,"?не знаю?" );
}
else
{ s_text_yxf( y1+i,x1+p1,c,Str1 );
s_text_yxf( y1+i,x1+p2,c,Grammar[i_struct].From.Name );
}
}
/***************************************************************************/
e_WinMsg t_Edit2 :: loop( void )
{
short sx,sy ;
short ZZ,key1,key2 ;
static short sx1=80,sy1=25 ;
while( 1 )
{
s_get_size( sx,sy );
if( sx!=sx1 || sy!=sy1 )
{ sx1=sx ; sy1=sy ; return WM_RESIZE ; }
paint( );
s_getch( &key1,&key2 ) ;
ZZ=s_shiftstatus();
if( 1==hot_key( ZZ,key1,key2 ) ) continue ;
//if( 0!=(ZZ&(S_Shift_L|S_Shift_R)) )
{ switch( key2 )
{ // -------------- переход в другие окна ------------
case S_key_F2 : /* end(); */ return WM_FIRST ;
case S_key_F3 : return WM_SRC ;
case S_key_F4 : return WM_DST ;
case S_key_F5 : /* end(); */ return WM_DEBUG ;
case S_key_F6 : /* end(); */ return WM_PATH ;
}
}
switch( key1 )
{ case S_key_Esc : /* end(); */ return WM_ESC ;
case ' ' : Reg=!Reg ; pos1=PY ; break ;
case 0:
{ switch( key2 )
{
case S_key_Ins :
{ short i,p1,p2 ;
char Str[200]="" ;
if( Reg==0 ) pos1=PY ;
p1=min( pos1,PY );
p2=max( pos1,PY );
t_ItemList &From =Core.from( );
for( i=p1 ; i<=p2 ; i++ )
{ strcat( Str,From[Begin+i].Str );
if( i<p2 ) strcat( Str," " );
}
AddWord.make_str( Str );
AddWord.loop( );
break ;
}
case S_key_Up :
if( PY>0 ) PY-- ;
if( PY<Begin ) Begin=PY ;
break ;
case S_key_Down :
if( PY<MaxY-1 ) PY++ ;
if( size_y<PY-Begin ) Begin=PY-size_y ;
break ;
case S_key_Left : if( 0<Begin_X ) Begin_X-- ; break ;
case S_key_Right : if( Begin_X<80 ) Begin_X++ ; break ;
case S_key_Home : PY=0 ; break ;
case S_key_End : PY=MaxY-1 ; break ;
case S_key_PgUp :
PY=max(0,PY-=size_y-1 );
if( size_y<PY-Begin ) Begin=PY-size_y ;
break ;
case S_key_PgDn :
PY=min( MaxY,PY+=size_y-1 );
if( size_y<PY-Begin ) Begin=PY-size_y ;
break ;
case S_key_F10 : /* end(); */ return WM_ESC ;
}
}
}
}
}
/***************************************************************************/
char t_Edit2 :: hot_key( short SS, short key1, short key2 )
{
switch( key1 )
{ case S_key_Enter :
{ t_EditPart EditPart( PY );
s_save( y1, x1, y2, x2 );
EditPart.set_name("Выбор части речи");
EditPart.set_pos( x1, y1, x2, y2 );
EditPart.loop( );
s_restore( );
}
break ;
case 0 :
if( key2==S_key_F1 )
Window_help( (void *)"first.html") ;
return 0 ;
default : return 0 ;
}
return 1 ;
}
/***************************************************************************/
// Отображение структуры фразы //
/***************************************************************************/
t_Edit3 :: t_Edit3( char _Halb ) : t_SelectWin( )
{
Halb=_Halb ;
Reg=0 ;
max_level=0 ;
}
/***************************************************************************/
void t_Edit3 :: begin( void )
{
long i ;
t_rWord DC ;
t_Variants *VV ;
t_Form Form0 ;
if( 0==Core.fn_word() ) return ;
Vision1.j=0 ;
DC=Debug.Current ;
if( Core.fn_word()<=DC.i_word ) return ;
VV=Core.variants( DC.i_word,DC.i_struct );
if( VV->Variant.j<=DC.i_variant ) return ;
Form0=VV->Variant[DC.i_variant].Form ;
Core.antwort().make( DC.i_word,DC.i_struct,DC.i_variant,Form0 ) ;
pAnt=&Core.antwort() ;
if( Halb==0 ) make_vision( &Vision1, &pAnt->tree1(),0 );
else make_vision( &Vision1, &pAnt->tree2(),0 );
for( max_level=i=0 ; i<Vision1.j ; i++ )
if( max_level<Vision1.list[i].level )
max_level=Vision1.list[i].level ;
}
/***************************************************************************/
void t_Edit3 :: end( void )
{ short i ;
i=Debug.stack[0].i_variant ;
if( i<0 || Core.n_antwort()<=i ) i=0 ;
Core.antwort().del() ;
}
/***************************************************************************/
void t_Edit3 :: paint_begin( void )
{
;
}
/***************************************************************************/
void t_Edit3 :: make_vision( t_VisionList *Vision, t_TreeList *Tree, long i_tree )
{ long i ;
t_Tree *T ;
t_Vision V ;
static short sp=0 ;
if( i_tree<0 || Tree->j<=i_tree ) return ;
if( i_tree==0 ) { Vision->j=0 ; sp=0 ; }
T=&Tree->list[i_tree] ;
sp++ ;
V.i_tree=i_tree ;
V.level =sp ;
Vision->add( V );
if( IF_SELECT( T->type ) )
make_vision( Vision, Tree, T->down );
if( IF_STRUCT( T->type ) )
for( i=0 ; i<T->n_down ; i++ )
make_vision( Vision, Tree, T->down+i );
sp-- ;
}
/***************************************************************************/
void t_Edit3 :: paint1( short i, char current )
{
short i1,i_tree,z ;
char c,*s1,*s2,Str[200] ;
t_Tree *T ;
t_Struct *S ;
t_TreeList *Tree ;
t_VisionList *Vision=&Vision1 ;
short p1,p2 ;
p1=y1+size_y/2 ; p2=x1+size_x/2 ;
if( 0==Core.fn_word() || Core.variants( 0,i_main_struct )->Variant.j==0 )
{ // ----------- Синтаксический разбор не произведен ----------
s_rame2_F( p1-1,p2-19,p1+1,p2+19,0x70 );
s_text_yxf( p1,p2-18 ,0x70, "Синтаксический разбор не произведен" );
return ;
}
strcpy( Str,emptystr(199) );
if( Halb==0 )
Tree =&pAnt->tree1() ;
else Tree =&pAnt->tree2() ;
MaxY =Vision->j ;
if( current ) c=0x70 ; else c=0x07 ;
// --------- начепятать имя структуры --------------
if( MaxY<=Begin+i || Vision->j<=Begin+i ) return ;
i_tree=Vision->list[Begin+i].i_tree ;
T=Tree->list + i_tree ;
if( T->type==TCONST )
s1="@0";
else
if( T->type==TCONST1 )
s1="@1";
else
if( T->type==TWORD0 )
s1="@00";
else
{ if( Halb==0 ) S=&Grammar[T->i_struct].From ;
else S=&Grammar[T->i_struct].To ;
s1=S->Name ;
}
strncpy( Str+3*Vision->list[Begin+i].level,s1,strlen(s1) );
// --------- напечатать само слово ----------------
if( T->type==TWORD || T->type==TCONST || T->type==TCONST1 )
{ // в случае с TCONST1 - неряшливость
if( Halb==1 ) s2=pAnt->tree2()[i_tree].Str ;
else s2=Core.from()[pAnt->tree1()[i_tree].i_word].Str ;
strncpy( Str+3*max_level+20,s2,strlen(s2) );
}
// --------- начепятать параметры ------------------
if( 0<=T->i_struct )
{
for( i1=0,z=3*max_level+40 ; i1<S->Param.j ; i1++ )
{ if( T->Form.value[i1]<0 ) s1="@0" ; // НеЗадан
else
{ short i2,i3 ;
i2 = S->Param[i1].param ;
i3 = T->Form.value[i1] ;
if( Halb==0 )
{ if( i3<0 || Grammar.from().Param[i2].Value.j<=i3 )
s1="ошибка" ;
else s1=Grammar.from().Param[i2].Value[i3].Name ;
}
else
{ if( i3<0 || Grammar.to().Param[i2].Value.j<=i3 )
s1="ошибка" ;
else s1=Grammar.to().Param[i2].Value[i3].Name ;
}
}
strncpy( Str+z,s1,strlen(s1) );
z+=strlen(s1)+1 ;
}
}
Str[Begin_X+size_x-2]=0 ;
s_text_yxf( y1+i,x1+1,c, emptystr(size_x-1) );
s_text_yxf( y1+i,x1+1,c,Str+Begin_X );
// -------- опознать ситуацию, когда слова нет в грамматическом словаре ----
if( Halb==1 && 0<=T->i_struct )
{ if( T->type==TWORD )
{ short xx,l ;
strcpy( Str,pAnt->tree2()[i_tree].Str1 );
s2=Str ;
l=strlen(s2);
if( Str[l-1]==' ' ) Str[l-1]=0 ;
i1=i_FormatT[T->i_struct] ;
if( 0<=i1 )
{ if( 0>SlowoT[i1].word_exist( Str ) )
{ xx=3*max_level+20-Begin_X ;
if( xx<0 )
{
if( l<=-xx ) Str[0]=0 ;
else s2=Str-xx ;
xx=0 ;
}
s_text_yxf( y1+i,x1+1+xx,0x0e,s2 );
}
}
}
}
}
/***************************************************************************/
char t_Edit3 :: hot_key( short SS, short key1, short key2 )
{
switch( key1 )
{ case S_key_Enter :
{ t_EditForm EditForm( PY,Halb );
s_save( y1, x1, y2, x2 );
EditForm.set_name( "Форма слова" );
EditForm.set_pos( x1, y1, x2, y2 );
EditForm.loop( );
s_restore( );
}
break ;
case 0 :
if( key2==S_key_F1 )
Window_help( (void *)"src.html") ;
return 0 ;
default : return 0 ;
}
return 1 ;
}
/***************************************************************************/
// редактор частей речи //
/***************************************************************************/
t_EditPart :: t_EditPart( short i_word )
{ short i,i1,j ;
e_Type t ;
t_Variants *VV ;
for( i=j=0 ; i<Grammar.n_trans() ; i++ )
{ t=Grammar[i].From.type ;
if( t!=TWORD && t!=TSTRUCT1 && t!=TSTRUCT2 ) continue ;
VV=Core.variants( i_word, i );
for( i1=0 ; i1<VV->Variant.j ; i1++ )
{ if( 99<=j ) break ;
Tag[j].i_struct=i ;
Tag[j].i_slowo =VV->Variant[i1].i_slowo ;
Tag[j].i_slowo1=VV->Variant[i1].i_slowo1 ;
Tag[j].Form =VV->Variant[i1].Form ;
j++ ;
}
}
Word= Core.from()[i_word].Str ;
MaxY=j ;
for( i=0 ; i<MaxY ; i++ )
present[i]=0 ;
}
/* ----------------------------------------------------------------------- */
void t_EditPart :: paint1( short i, char current )
{ short i1,z ;
short i_struct ;
char c,*s1,*Str1,Str[200] ;
t_Struct *S ;
if( current ) c=0x70 ; else c=0x07 ;
s1=emptystr( size_x );
s_text_yxf( y1+i,x1+1 ,c, s1 );
// --------- начепятать имя структуры --------------
if( MaxY<=Begin+i ) return ;
strcpy( Str,emptystr(size_x-1) );
i_struct=Tag[Begin+i].i_struct ;
S=&Grammar[i_struct].From ;
s1=S->Name ;
strncpy( Str+3,s1,strlen(s1) );
if( present[Begin+i]==1 ) Str[1]='*' ; else Str[1]=' ' ;
//Str1=Perevod.translate_word_s( Word, i_struct );
Str1=Perevod.translate_word_i( Word, Tag[Begin+i].i_slowo,Tag[Begin+i].i_slowo1 );
strncpy( Str+20,Str1,strlen(Str1) );
// --------- начепятать параметры ------------------
for( i1=0,z=40 ; i1<S->Param.j ; i1++ )
{ if( Tag[Begin+i].Form.value[i1]<0 ) s1="@0" ; //НеЗадан
else
{ short i2,i3 ;
i2 = S->Param[i1].param ;
i3 = Tag[Begin+i].Form.value[i1] ;
s1 = Grammar.from().Param[i2].Value[i3].Name ;
}
strncpy( Str+z,s1,strlen(s1) );
z+=strlen(s1)+1 ;
}
Str[size_x]=0 ;
s_text_yxf( y1+i,x1+1,c,Str );
}
/***************************************************************************/
char t_EditPart :: hot_key( short SS, short key1, short key2 )
{
if( key1==0 && key2==S_key_F1 )
Window_help( (void *)"first.html") ;
return 0 ;
}
/***************************************************************************/
/* редактор грамматических форм */
/***************************************************************************/
t_EditForm :: t_EditForm( short i_tree, char Halb )
{ t_Tree *T ;
t_TreeList *Tree ;
if( Halb==0 )
{ Tree =&Core.antwort().tree1() ;
T =&Tree->list[i_tree] ;
SParam=&Grammar[T->i_struct].From.Param ;
LParam=&Grammar.from().Param ;
}
else
{ Tree =&Core.antwort().tree2() ;
T =&Tree->list[i_tree] ;
SParam=&Grammar[T->i_struct].To.Param ;
LParam=&Grammar.to().Param ;
}
MaxY=SParam->j ;
value=T->Form.value ;
}
/***************************************************************************/
void t_EditForm :: paint1( short i, char current )
{ char c,*s1,*s2,*s3,Str[200] ;
if( current ) c=0x70 ; else c=0x07 ;
s1=emptystr( size_x );
s_text_yxf( y1+i,x1+1 ,c, s1 );
if( MaxY<=Begin+i ) return ;
t_Param *P1=&LParam->list[SParam->list[i].param] ;
s2=P1->Name ;
if( value[i]<0 ) s3="@0" ;
else s3=P1->Value[value[i]].Name ;
sprintf( Str,"%10s %10s",s2,s3 );
s_text_yxf( y1+i,x1+1 ,c, Str );
}
/***************************************************************************/
char t_EditForm :: hot_key( short SS, short key1, short key2 )
{
switch( key1 )
{
case S_key_Enter :
{ t_Param *P1=&LParam->list[SParam->list[PY].param] ;
t_EditForm1 EditForm1( P1,&value[PY] );
s_save( y1, x1, y2, x2 );
s_rame2_F( y1, x1, y2, x2, 0x0f );
s_text_yxf( y1, x1+3, name_Color, "Задание параметра" );
EditForm1.set_pos( x1, y1, x2, y2 );
EditForm1.loop( );
s_restore( );
}
break ;
default : return 0 ;
}
return 1 ;
}
/***************************************************************************/
// редактор грамматических форм (вспомогательный) //
/***************************************************************************/
t_EditForm1 :: t_EditForm1( t_Param *_Param, char *_Value )
{ Param = _Param ;
Value = _Value ;
PY = *Value ;
MaxY=Param->Value.j ;
}
/***************************************************************************/
void t_EditForm1 :: paint1( short i, char current )
{ char c,*s1 ;
if( current ) c=0x70 ; else c=0x07 ;
s1=emptystr( size_x );
s_text_yxf( y1+i,x1+1 ,c, s1 );
if( MaxY<=Begin+i ) return ;
s_text_yxf( y1+i,x1+3 ,c, Param->Value[Begin+i].Name );
}
/***************************************************************************/
char t_EditForm1 :: hot_key( short SS, short key1, short key2 )
{
switch( key1 )
{
case S_key_Enter :
*Value=PY ;
break ;
default : return 0 ;
}
return 1 ;
}
/***************************************************************************/
// отображение массива словарей //
/***************************************************************************/
t_SlowoView :: t_SlowoView( void )
{
n_From=Grammar.from().Format.j ;
MaxY =n_From+Grammar.to().Format.j ;
}
/***************************************************************************/
void t_SlowoView :: paint_begin( void )
{
n_From=Grammar.from().Format.j ;
MaxY =n_From+Grammar.to().Format.j ;
s_text_yxf( y1-1,x1+3 ,name_Color, "Грамматические словари" );
}
/***************************************************************************/
void t_SlowoView :: paint1( short i, char current )
{ char c,*s1,*s2,Str[100] ;
short i_part ;
if( current ) c=0x70 ; else c=0x07 ;
s1=emptystr( size_x );
s_text_yxf( y1+i,x1+1 ,c, s1 );
if( MaxY<=Begin+i ) return ;
if( i<n_From )
{
s1 =Grammar.from().Format[i].Name ;
i_part=Grammar.from().Format[i].i_part ;
s2 =Grammar.from().Part[i_part].Name ;
sprintf( Str,"Источник : %-10s %-20s",s1,s2 );
}
else
{ strcpy( Str,"Приемник : " );
s1 =Grammar.to().Format[i-n_From].Name ;
i_part=Grammar.to().Format[i-n_From].i_part ;
s2 =Grammar.to().Part[i_part].Name ;
sprintf( Str,"Приемник : %-10s %-20s",s1,s2 );
}
Str[Begin_X+size_x]=0 ;
s_text_yxf( y1+i,x1+3 ,c, Str );
}
/***************************************************************************/
char t_SlowoView :: hot_key( short SS, short key1, short key2 )
{
switch( key1 )
{
case S_key_Enter :
{ t_Format *F ;
if( PY<n_From ) F=&Grammar.from().Format[PY] ;
else F=&Grammar.to().Format[PY-n_From] ;
t_SlowoView1 SV( PY );
s_save( y1, x1, y2, x2 );
s_rame2_F( y1, x1, y2, x2, 0x0f );
//s_text_yxf( y1, x1+3, name_Color,"Присутствующие формы" );
SV.set_pos( x1, y1+1, x2, y2 );
SV.loop( );
s_restore( );
}
break ;
default : return 0 ;
}
return 1 ;
}
/***************************************************************************/
// отображение грамматических форм, присутствующих в словаре //
/***************************************************************************/
t_SlowoView1 :: t_SlowoView1( short SS )
{
short n_From=Grammar.from().Format.j ;
if( SS<n_From )
{ Format=&Grammar.from().Format[SS] ;
Part =&Grammar.from().Part[Format->i_part] ;
Param =&Grammar.from().Param ;
}
else
{ Format=&Grammar.to().Format[SS-n_From] ;
Part =&Grammar.to().Part[Format->i_part] ;
Param =&Grammar.to().Param ;
}
MaxY=Format->Record.j ;
}
/***************************************************************************/
void t_SlowoView1 :: paint_begin( void )
{ char *s,Str[200]="",Str1[50] ;
short i ;
for( i=0 ; i<Part->Param.j ; i++ )
{ if( Part->Param[i].Dir==1 ) continue ;
s=Param->list[Part->Param[i].param].Name ;
sprintf( Str1," %-10s",s );
strcat( Str,Str1 );
}
Str[Begin_X+size_x-7]=0 ;
s_text_yxf( y1-1,x1+7 ,0x0f, Str+Begin_X );
sprintf( Str,"%s( %s )",Format->Name,Part->Name );
s_text_yxf( y1-2,x1+2, name_Color,Str );
}
/***************************************************************************/
void t_SlowoView1 :: paint1( short _i, char current )
{ char c,*s,Str[200]="",Str1[20] ;
short i,i1,v ;
t_Param *P ;
if( current ) c=0x70 ; else c=0x07 ;
s=emptystr( size_x );
s_text_yxf( y1+_i,x1+1 ,c, s );
if( MaxY<=Begin+_i ) return ;
i=Begin+_i ;
sprintf( Str," %-3d",i );
for( i1=0 ; i1<Part->Param.j ; i1++ )
{ if( Part->Param[i1].Dir==1 ) continue ;
P=&Param->list[Part->Param[i1].param] ;
v=Format->Record[i].value[i1] ;
if( v<0 ) s="@0" ;
else s=P->Value[ v ].Name ;
sprintf( Str1," %-10s",s );
strcat( Str,Str1 );
}
Str[Begin_X+size_x-2]=0 ;
s_text_yxf( y1+_i,x1+3 ,c, Str+Begin_X );
}
DEFINE_LIST_BTYPE( t_Vision, t_VisionList )