2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
11 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
15 #pragma off (unreferenced)
16 static char rcsid[] = "$Id: winapp.c,v 1.1.1.1 2001-01-19 03:30:15 bradleyb Exp $";
17 #pragma on (unreferenced)
21 #define WIN32_LEAN_AND_MEAN
30 static HWND hWAppWnd = 0;
31 static HINSTANCE hWAppInstance = 0;
34 void SetLibraryWinInfo(HWND hWnd, HINSTANCE hInstance)
37 hWAppInstance = hInstance;
41 HWND GetLibraryWindow(void)
47 HINSTANCE GetLibraryWinInstance(void)
55 static BOOL ConInit=FALSE;
56 static HANDLE ConStdOut;
57 static HANDLE ConStdIn;
62 ConStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
63 ConStdIn = GetStdHandle(STD_INPUT_HANDLE);
73 void cprintf(char *text, ...)
81 va_start(args, text );
82 vsprintf(buffer,text,args);
84 WriteConsole(ConStdOut, buffer, strlen(buffer), &size, NULL);
93 ReadConsole(ConStdIn, buffer, sizeof(TCHAR), &chread, NULL);
94 return (int)buffer[0];
100 static FILE *LogFile=NULL;
102 void loginit(char *name)
106 LogFile = fopen(name, "wt");
108 MessageBox(NULL, "Unable to create descentw.log!", "Descent II Beta Error", MB_OK);
112 fprintf(LogFile, "%s begins.\n--------------------------------------\n\n",name);
119 if (!LogFile) return;
121 fprintf(LogFile, "\n-----------------------------------------\nlog ends.\n");
129 void logentry(char *format, ...)
134 if (!LogFile) return;
136 va_start(args, format );
137 vsprintf(buffer, format ,args);
139 mprintf((0, "%s", buffer));
140 fprintf(LogFile, "%s", buffer);
147 unsigned int GetFreeDiskSpace()
149 DWORD sec_per_cluster,
154 if (!GetDiskFreeSpace(
159 &total_clusters)) return 0x7fffffff;
161 return (uint)(free_clusters * sec_per_cluster * bytes_per_sec);
165 // Clipboarding functions
167 HBITMAP win95_screen_shot()
171 HBITMAP screen_bitmap;
174 //@@ hdcscreen = CreateDC("DISPLAY", NULL, NULL, NULL);
175 IDirectDrawSurface_GetDC(dd_grd_screencanv->lpdds, &hdcscreen);
176 hdccapture = CreateCompatibleDC(hdcscreen);
178 screen_bitmap = CreateCompatibleBitmap(hdcscreen, GRMODEINFO(w), GRMODEINFO(h));
180 if (!screen_bitmap) {
181 DeleteDC(hdccapture);
182 IDirectDrawSurface_ReleaseDC(dd_grd_screencanv->lpdds, hdcscreen);
183 //@@ DeleteDC(hdcscreen);
187 old_bitmap = SelectObject(hdccapture, screen_bitmap);
189 DeleteObject(screen_bitmap);
190 DeleteDC(hdccapture);
191 IDirectDrawSurface_ReleaseDC(dd_grd_screencanv->lpdds, hdcscreen);
192 //@@ DeleteDC(hdcscreen);
196 if (!BitBlt(hdccapture, 0,0,GRMODEINFO(w), GRMODEINFO(h), hdcscreen, 0, 0,
198 SelectObject(hdccapture, old_bitmap);
199 DeleteObject(screen_bitmap);
200 DeleteDC(hdccapture);
201 IDirectDrawSurface_ReleaseDC(dd_grd_screencanv->lpdds, hdcscreen);
202 //@@ DeleteDC(hdcscreen);
206 screen_bitmap = SelectObject(hdccapture, old_bitmap);
207 DeleteDC(hdccapture);
209 IDirectDrawSurface_ReleaseDC(dd_grd_screencanv->lpdds, hdcscreen);
210 //@@ DeleteDC(hdcscreen);
212 return screen_bitmap;
216 HANDLE win95_dib_from_bitmap(HBITMAP hbm)
221 BITMAPINFOHEADER *pbi;
228 GetObject(hbm, sizeof(bm), &bm);
230 memset(&bi, 0, sizeof(bi));
232 bi.biSize = sizeof(BITMAPINFOHEADER);
233 bi.biWidth = bm.bmWidth;
234 bi.biHeight = bm.bmHeight;
236 bi.biBitCount = bm.bmPlanes * bm.bmBitsPixel;
237 bi.biCompression = BI_RGB;
239 hMem = GlobalAlloc(GHND, bi.biSize + 256 * sizeof(RGBQUAD));
241 mprintf((1, "WINAPP: Unable to allocate memory for DIB.\n"));
245 pbi = (BITMAPINFOHEADER *)GlobalLock(hMem);
248 hRes = IDirectDrawSurface_GetDC(dd_grd_screencanv->lpdds, &hdc);
251 mprintf((1, "WINAPP: Unable to get GDI DC for DIB creation.\n"));
254 GetDIBits(hdc, hbm, 0, bi.biHeight, NULL, (BITMAPINFO *)pbi, DIB_RGB_COLORS);
258 if (!bi.biSizeImage) {
259 bi.biSizeImage = bi.biWidth * bi.biHeight;
262 hX = GlobalReAlloc(hMem, bi.biSize + 256*sizeof(RGBQUAD) + bi.biSizeImage,0);
265 IDirectDrawSurface_ReleaseDC(dd_grd_screencanv->lpdds, hdc);
266 mprintf((1, "WINAPP: Unable to reallocate mem for DIB.\n"));
271 pbi = GlobalLock(hMem);
273 if (!GetDIBits(hdc, hbm, 0,
275 (LPSTR)pbi + pbi->biSize + 256*sizeof(RGBQUAD),
276 (BITMAPINFO *)pbi, DIB_RGB_COLORS)) {
279 IDirectDrawSurface_ReleaseDC(dd_grd_screencanv->lpdds, hdc);
280 mprintf((1, "WINAPP: GetDIBits was unable to get needed info.\n"));
285 IDirectDrawSurface_ReleaseDC(dd_grd_screencanv->lpdds, hdc);
287 rgbp = (RGBQUAD *)(((LPSTR)pbi + pbi->biSize));
289 gr_palette_read(grpal);
290 for (i = 0; i < 256; i++)
292 rgbp[i].rgbRed = grpal[i*3]<<2;
293 rgbp[i].rgbGreen = grpal[i*3+1]<<2;
294 rgbp[i].rgbBlue = grpal[i*3+2]<<2;
295 rgbp[i].rgbReserved = 0;