unsigned char far *CurrentPos( void ); unsigned char far *ScrPtr( int x, int y ); void RestoreCurPos( unsigned char far *s ); void ScrollUp( int x, int y, int xx, int yy, int n ); void Beep( void ); #define VIDMODE *(unsigned char far *) 0x00449lu #define MONOSEG 0xb0000000L #define COLOR 0xb8000000L #define VIDSEG (unsigned char far *)((7 == VIDMODE) ? MONOSEG : COLOR ) #define BELL 7 #define TAB 9 void SayA( unsigned char attrib, register char *cp ) { unsigned char far *scptr = CurrentPos(); unsigned char far *scend = ScrPtr( 80, 25 ); while (*cp) { switch( *cp ) { case '\n': scptr = (unsigned char far *) ((long) scptr + (long) 160 ); case '\r': scptr = (unsigned char far *) ( ( ( (long) scptr - (long) VIDSEG ) / (long) 160 ) * (long) 160 + (long) VIDSEG ); cp++; break; case BELL: Beep(); cp++; break; case TAB: scptr = (unsigned char far *) ( (long) scptr / 16 * 16 ); cp++; break; default: *scptr++ = *cp++; *scptr++ = attrib; break; } if ( scptr > scend ) { ScrollUp( 1, 1, 80, 25, 1 ); scptr -= 160; } } RestoreCurPos( scptr ); }