Files
lba1-classic/LIB386/LIB_SVGA/S_TEXT.C

190 lines
4.8 KiB
C

#include "\projet\lib386\lib_sys\adeline.h"
#include "\projet\lib386\lib_sys\lib_sys.h"
#include "\projet\lib386\lib_svga\lib_svga.h"
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include <ctype.h>
/*--------------------------------------------------------------------------*/
/* (c) Adeline 1993 */
/*--------------------------------------------------------------------------*/
/*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*
ΓûÇΓûÇΓûêΓûÇΓûÇ ΓûêΓûÇΓûÇΓûÇΓûÇ ΓûÇΓûä ΓûäΓûÇ ΓûÇΓûÇΓûêΓûÇΓûÇ
ΓûêΓûê ΓûêΓûêΓûÇΓûÇ ΓûäΓûÇΓûä ΓûêΓûê
ΓûÇΓûÇ ΓûÇΓûÇΓûÇΓûÇΓûÇ ΓûÇ ΓûÇ ΓûÇΓûÇ
*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
/*ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ*/
void Text( WORD x,WORD y,char *msk, ... )
{
// ULONG *pt = (ULONG *)&str_in ;
WORD l ;
char c ;
char str[256] ;
char tempo[34] ;
char *str_out = str ;
char *ptr ;
WORD flagflip = 0 ;
va_list ap;
if( (y < ClipYmin)
OR (y > ClipYmax-7)
OR (x > ClipXmax) ) return ;
l = 0 ;
va_start(ap, msk);
*str_out = 0 ;
while( (c=*msk++) != 0 )
{
if( c == '%' )
{
switch( toupper(*msk++) )
{
case 'C': /* char */
tempo[0] = va_arg(ap,char);
tempo[1] = 0 ;
strcat(str_out, tempo ) ;
l++ ;
break ;
case 'S': /* string */
ptr = va_arg(ap,char*) ;
strcat(str_out, ptr) ;
l += strlen(ptr) ;
break ;
case 'B': /* byte */
strcat(str_out, ltoa( va_arg(ap, UBYTE), tempo, 10 )) ;
l += strlen( tempo ) ;
break ;
case 'D': /* decimal */
strcat(str_out, ltoa( va_arg(ap, int), tempo, 10 )) ;
l += strlen( tempo ) ;
break ;
case 'L': /* long decimal */
strcat(str_out, ltoa( va_arg(ap, int), tempo, 10 )) ;
l += strlen( tempo ) ;
break ;
case 'U': /* unsigned decimal */
strcat(str_out, ultoa( va_arg(ap, unsigned), tempo, 10 )) ;
l += strlen( tempo ) ;
break ;
case 'P': /* pointeur hexa */
strcat(str_out, ultoa( va_arg(ap, unsigned), tempo, 16 )) ;
l += strlen( tempo ) ;
break ;
case 'F':
flagflip = 1 ;
break ;
default:
return ;
}
}
else
{
str[l] = c ;
l++ ;
str[l] = 0 ;
}
}
ptr = str ;
if( x + l*8 - 1 > ClipXmax )
{
ptr[ (ClipXmax-x)/8 ] = 0 ;
}
if( x < ClipXmin )
{
ptr += (ClipXmin-x)/8 ;
x += ClipXmin-x ;
}
AffString( x, y, ptr ) ;
if( flagflip )
{
CopyBlockPhys( x,y, x+strlen(ptr)*8-1, y+7 ) ;
}
va_end(ap);
}
#ifdef OLD_VERSION
void Text( WORD x,WORD y,char *msk, ULONG str_in )
{
ULONG *pt = (ULONG *)&str_in ;
WORD l ;
char c ;
char str[256] ;
char tempo[34] ;
char *str_out = str ;
void *ptr ;
*str_out = 0 ;
while( (c=*msk++) != 0 )
{
if( c == '%' )
{
switch( toupper(*msk++) )
{
case 'C': /* char */
tempo[0] = *(char *)pt;
tempo[1] = 0 ;
strcat(str_out, tempo ) ;
break ;
case 'S': /* string */
strcat(str_out, *(char **)pt) ;
break ;
case 'B': /* byte */
strcat(str_out, ltoa( *(UBYTE *)pt, tempo, 10 )) ;
break ;
case 'D': /* decimal */
strcat(str_out, ltoa( *pt, tempo, 10 )) ;
break ;
case 'L': /* long decimal */
strcat(str_out, ltoa( *pt, tempo, 10 )) ;
break ;
case 'U': /* unsigned decimal */
strcat(str_out, ultoa( *pt, tempo, 10 )) ;
break ;
case 'P': /* pointeur hexa */
strcat(str_out, ltoa( *pt, tempo, 16 )) ;
break ;
default:
return ;
}
pt++;
}
else
{
l = strlen( str ) ;
str[l] = c ;
str[l+1] = 0 ;
}
}
AffString( x, y, str ) ;
}
#endif