diff options
Diffstat (limited to 'Build/source/libs/freetype/freetype-1.5/test/arch/os2/gfs_os2.c')
-rw-r--r-- | Build/source/libs/freetype/freetype-1.5/test/arch/os2/gfs_os2.c | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/Build/source/libs/freetype/freetype-1.5/test/arch/os2/gfs_os2.c b/Build/source/libs/freetype/freetype-1.5/test/arch/os2/gfs_os2.c new file mode 100644 index 00000000000..954cf1b06ae --- /dev/null +++ b/Build/source/libs/freetype/freetype-1.5/test/arch/os2/gfs_os2.c @@ -0,0 +1,219 @@ +/******************************************************************* + * + * gfs_os2.c graphics utility fullscreen OS/2 driver. 1.0 + * + * This is the driver for fullscreen OS/2 display, used by the + * graphics utility of the FreeType test suite. + * + * Copyright 1996-2000 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used + * modified and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + ******************************************************************/ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#define INCL_SUB +#include <os2.h> + +#ifdef __EMX__ +#include <os2thunk.h> +#endif + +#if defined(__EMX__)||defined(__IBMC__) +#include <conio.h> /* for getch */ + extern _read_kbd(); /* to avoid an ANSI warning during compilation */ +#endif + +#include "gdriver.h" +#include "gevents.h" +#include "gmain.h" + + + typedef struct _Translator + { + char key; + GEvent event_class; + int event_info; + } Translator; + +#define NUM_Translators 20 + + static const Translator trans[NUM_Translators] = + { + { (char)27, event_Quit, 0 }, + { 'q', event_Quit, 0 }, + + { 'x', event_Rotate_Glyph, -1 }, + { 'c', event_Rotate_Glyph, 1 }, + { 'v', event_Rotate_Glyph, -16 }, + { 'b', event_Rotate_Glyph, 16 }, + + { '{', event_Change_Glyph, -10000 }, + { '}', event_Change_Glyph, 10000 }, + { '(', event_Change_Glyph, -1000 }, + { ')', event_Change_Glyph, 1000 }, + { '9', event_Change_Glyph, -100 }, + { '0', event_Change_Glyph, 100 }, + { 'i', event_Change_Glyph, -10 }, + { 'o', event_Change_Glyph, 10 }, + { 'k', event_Change_Glyph, -1 }, + { 'l', event_Change_Glyph, 1 }, + + { '+', event_Scale_Glyph, 10 }, + { '-', event_Scale_Glyph, -10 }, + { 'u', event_Scale_Glyph, 1 }, + { 'j', event_Scale_Glyph, -1 } + }; + + + static VIOMODEINFO OrgMode; + static long VioBufOfs; + + + /* BIOS video modes */ + + static VIOMODEINFO VioMode_640x480x16 = + { + sizeof ( VIOMODEINFO ), + VGMT_OTHER + VGMT_GRAPHICS, + COLORS_16, + 80, + 35, + 640, + 480 + }; + + static VIOMODEINFO VioMode_320x200x256 = + { + sizeof ( VIOMODEINFO ), + VGMT_OTHER + VGMT_GRAPHICS, + 8, + 40, + 25, + 320, + 200 + }; + + static VIOPHYSBUF VioBuf = + { + (void*)0xA0000L, + 64*1024 + }; + + + /* Restores screen to its original state */ + + int Driver_Restore_Mode() + { + VioSetMode( &OrgMode, 0 ); + return 1; + } + + + /* Sets graphics mode */ + + int Driver_Set_Graphics( int mode ) + { + int rc; + + + OrgMode.cb = sizeof ( VIOMODEINFO ); + VioGetMode( &OrgMode, 0 ); + + switch ( mode ) + { + case Graphics_Mode_Mono: + rc = VioSetMode( &VioMode_640x480x16, 0 ); + vio_ScanLineWidth = 80; + vio_Width = 640; + vio_Height = 480; + break; + + case Graphics_Mode_Gray: + rc = VioSetMode( &VioMode_320x200x256, 0 ); + vio_ScanLineWidth = 320; + vio_Width = 320; + vio_Height = 200; + + /* default gray_palette takes the gray levels of the standard VGA */ + /* 256 colors mode */ + + gray_palette[0] = 0; + gray_palette[1] = 23; + gray_palette[2] = 27; + gray_palette[3] = 29; + gray_palette[4] = 31; + break; + + default: + rc = -1; + break; + } + + if ( rc ) return 0; /* failure */ + + if ( VioGetPhysBuf( &VioBuf, 0 ) ) return 0; /* Could not access VRAM */ + + VioBufOfs = (long)MAKEP( VioBuf.asel[0], 0 ); + + memset( (void*)VioBufOfs, 0, 64 * 1024 ); + + Vio = (char*)VioBufOfs; + + return 1; /* success */ + } + + + int Driver_Display_Bitmap( char* buffer, int line, int col ) + { + int y; + char* target; + + target = Vio + ( line - 1 ) * vio_ScanLineWidth; + + for ( y = 0; y < line; y++ ) + { + memcpy( target, buffer, col ); + target -= vio_ScanLineWidth; + buffer += col; + } + + return 1; /* success */ + } + + + void Get_Event( TEvent* event ) + { + int i; + char c; + + + c = getch(); + + for ( i = 0; i < NUM_Translators; i++ ) + { + if ( c == trans[i].key ) + { + event->what = trans[i].event_class; + event->info = trans[i].event_info; + return; + } + } + + /* unrecognized keystroke */ + + event->what = event_Keyboard; + event->info = (int)c; + return; + } + + +/* End */ |