contrib/OWB: add correct SDL dependency, fix compilers used
[AROS-Contrib.git] / freetype1 / contrib / win32 / driver32.c
blob6e04ace333caad820df0e4f7b2787495ecfa61c6
1 /*********************************************************/
2 /* Test program driver for freetype on Win32 Platform */
3 /* CopyRight(left) G. Ramat 1998 (gcramat@radiostudio.it)*/
4 /* */
5 /*********************************************************/
7 #include <setjmp.h>
8 #include <stdarg.h>
9 #include <stdio.h>
10 #include <string.h>
12 #include <windows.h>
14 #include "freetype.h"
15 #include "gdriver.h"
17 HANDLE evgetevent,evdriverdisplaybitmap,this_wnd,main_thread,listbox,bitmap;
18 TEvent evevent;
19 char message_32[256];
20 char *ev_buffer;
21 jmp_buf Env;
22 long TTMemory_Allocated = 0; // just to have a clean link with ftdump
23 // save last rendered image Data
24 int save_lines,save_cols,exit_code;
25 char *save_buffer;
26 extern int vio_Width,vio_Height,vio_ScanLineWidth;
27 extern TT_Raster_Map Bit;
28 HDC hdc,memdc;
29 HBITMAP hbm,hbm1;
31 //________________________________________________________________________________
32 void Get_Event(TEvent *event)
34 WaitForSingleObject(evgetevent,INFINITE); // wait for completion
35 *event=evevent; //set by message handler before posting waited upon event
36 return;
39 int Driver_Set_Graphics( int mode )
40 { RECT rect;
41 GetClientRect(bitmap,&rect);
42 vio_Width=rect.right-rect.left;
43 vio_Height = rect.bottom-rect.top;
44 vio_ScanLineWidth=vio_Width;
45 return 1;
48 int Driver_Restore_Mode()
49 {return 1;}
51 int Driver_Display_Bitmap( char* buffer, int lines, int cols )
53 long rc;
54 int i;
55 char *top,*bottom;
56 HANDLE rgdi;
57 RECT rect;
58 char *w_buffer;
59 // bitmap=listbox;
60 hdc=GetDC(bitmap);
61 memdc=CreateCompatibleDC(hdc);
62 GetClientRect(bitmap,&rect);
63 //hbm=CreateCompatibleBitmap(hdc,lines,cols);
64 // need to set upside down bitmap .
65 if (buffer != save_buffer) //new buffer
67 if (save_buffer!=NULL)
68 free(save_buffer);
69 save_buffer=(char *)malloc(Bit.size);
70 memcpy(save_buffer,buffer,Bit.size);
72 w_buffer=malloc(Bit.size); // hope it succeeds
73 top=buffer;
74 bottom=w_buffer+Bit.size-cols;
75 for(i=0;i<Bit.size;i+=cols)
77 memcpy(bottom,top,cols);
78 top+=cols;
79 bottom-=cols;
81 save_lines=lines;
82 save_cols=cols;
83 hbm=CreateBitmap(vio_Width,vio_Height,1,1,w_buffer);
84 rgdi=SelectObject(memdc,hbm);
85 // rc=SetBitmapBits(hbm,Bit.size,buffer); //redundant
86 rc=StretchBlt(hdc,0,0,rect.right,rect.bottom,memdc,0,0,rect.right,rect.bottom,MERGECOPY);
87 ReleaseDC(bitmap,hdc);
88 DeleteObject(memdc);
89 rc=UpdateWindow(bitmap);
90 return 1;
94 int call_test_program(int (*program)(int,char**),int argc,char **argv)
95 {int rc;
96 // prepare return address ( for exit)
97 if(0==setjmp(Env)) //env set : call prog
98 rc=program(argc,argv);
99 return rc;
102 void force_exit(int code)
103 { char *p=NULL;
104 longjmp(Env,code);
105 //disable piping