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.
17 #define WIN32_LEAN_AND_MEAN
26 static HWND hWAppWnd = 0;
27 static HINSTANCE hWAppInstance = 0;
30 void SetLibraryWinInfo(HWND hWnd, HINSTANCE hInstance)
33 hWAppInstance = hInstance;
37 HWND GetLibraryWindow(void)
43 HINSTANCE GetLibraryWinInstance(void)
51 static BOOL ConInit=FALSE;
52 static HANDLE ConStdOut;
53 static HANDLE ConStdIn;
58 ConStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
59 ConStdIn = GetStdHandle(STD_INPUT_HANDLE);
69 void cprintf(char *text, ...)
77 va_start(args, text );
78 vsprintf(buffer,text,args);
80 WriteConsole(ConStdOut, buffer, strlen(buffer), &size, NULL);
89 ReadConsole(ConStdIn, buffer, sizeof(TCHAR), &chread, NULL);
90 return (int)buffer[0];
96 static FILE *LogFile=NULL;
98 void loginit(char *name)
102 LogFile = fopen(name, "wt");
104 MessageBox(NULL, "Unable to create descentw.log!", "Descent II Beta Error", MB_OK);
108 fprintf(LogFile, "%s begins.\n--------------------------------------\n\n",name);
115 if (!LogFile) return;
117 fprintf(LogFile, "\n-----------------------------------------\nlog ends.\n");
125 void logentry(char *format, ...)
130 if (!LogFile) return;
132 va_start(args, format );
133 vsprintf(buffer, format ,args);
135 mprintf((0, "%s", buffer));
136 fprintf(LogFile, "%s", buffer);
143 unsigned int GetFreeDiskSpace()
145 DWORD sec_per_cluster,
150 if (!GetDiskFreeSpace(
155 &total_clusters)) return 0x7fffffff;
157 return (uint)(free_clusters * sec_per_cluster * bytes_per_sec);
161 // Clipboarding functions
163 HBITMAP win95_screen_shot()
167 HBITMAP screen_bitmap;
170 //@@ hdcscreen = CreateDC("DISPLAY", NULL, NULL, NULL);
171 IDirectDrawSurface_GetDC(dd_grd_screencanv->lpdds, &hdcscreen);
172 hdccapture = CreateCompatibleDC(hdcscreen);
174 screen_bitmap = CreateCompatibleBitmap(hdcscreen, GRMODEINFO(w), GRMODEINFO(h));
176 if (!screen_bitmap) {
177 DeleteDC(hdccapture);
178 IDirectDrawSurface_ReleaseDC(dd_grd_screencanv->lpdds, hdcscreen);
179 //@@ DeleteDC(hdcscreen);
183 old_bitmap = SelectObject(hdccapture, screen_bitmap);
185 DeleteObject(screen_bitmap);
186 DeleteDC(hdccapture);
187 IDirectDrawSurface_ReleaseDC(dd_grd_screencanv->lpdds, hdcscreen);
188 //@@ DeleteDC(hdcscreen);
192 if (!BitBlt(hdccapture, 0,0,GRMODEINFO(w), GRMODEINFO(h), hdcscreen, 0, 0,
194 SelectObject(hdccapture, old_bitmap);
195 DeleteObject(screen_bitmap);
196 DeleteDC(hdccapture);
197 IDirectDrawSurface_ReleaseDC(dd_grd_screencanv->lpdds, hdcscreen);
198 //@@ DeleteDC(hdcscreen);
202 screen_bitmap = SelectObject(hdccapture, old_bitmap);
203 DeleteDC(hdccapture);
205 IDirectDrawSurface_ReleaseDC(dd_grd_screencanv->lpdds, hdcscreen);
206 //@@ DeleteDC(hdcscreen);
208 return screen_bitmap;
212 HANDLE win95_dib_from_bitmap(HBITMAP hbm)
217 BITMAPINFOHEADER *pbi;
224 GetObject(hbm, sizeof(bm), &bm);
226 memset(&bi, 0, sizeof(bi));
228 bi.biSize = sizeof(BITMAPINFOHEADER);
229 bi.biWidth = bm.bmWidth;
230 bi.biHeight = bm.bmHeight;
232 bi.biBitCount = bm.bmPlanes * bm.bmBitsPixel;
233 bi.biCompression = BI_RGB;
235 hMem = GlobalAlloc(GHND, bi.biSize + 256 * sizeof(RGBQUAD));
237 mprintf((1, "WINAPP: Unable to allocate memory for DIB.\n"));
241 pbi = (BITMAPINFOHEADER *)GlobalLock(hMem);
244 hRes = IDirectDrawSurface_GetDC(dd_grd_screencanv->lpdds, &hdc);
247 mprintf((1, "WINAPP: Unable to get GDI DC for DIB creation.\n"));
250 GetDIBits(hdc, hbm, 0, bi.biHeight, NULL, (BITMAPINFO *)pbi, DIB_RGB_COLORS);
254 if (!bi.biSizeImage) {
255 bi.biSizeImage = bi.biWidth * bi.biHeight;
258 hX = GlobalReAlloc(hMem, bi.biSize + 256*sizeof(RGBQUAD) + bi.biSizeImage,0);
261 IDirectDrawSurface_ReleaseDC(dd_grd_screencanv->lpdds, hdc);
262 mprintf((1, "WINAPP: Unable to reallocate mem for DIB.\n"));
267 pbi = GlobalLock(hMem);
269 if (!GetDIBits(hdc, hbm, 0,
271 (LPSTR)pbi + pbi->biSize + 256*sizeof(RGBQUAD),
272 (BITMAPINFO *)pbi, DIB_RGB_COLORS)) {
275 IDirectDrawSurface_ReleaseDC(dd_grd_screencanv->lpdds, hdc);
276 mprintf((1, "WINAPP: GetDIBits was unable to get needed info.\n"));
281 IDirectDrawSurface_ReleaseDC(dd_grd_screencanv->lpdds, hdc);
283 rgbp = (RGBQUAD *)(((LPSTR)pbi + pbi->biSize));
285 gr_palette_read(grpal);
286 for (i = 0; i < 256; i++)
288 rgbp[i].rgbRed = grpal[i*3]<<2;
289 rgbp[i].rgbGreen = grpal[i*3+1]<<2;
290 rgbp[i].rgbBlue = grpal[i*3+2]<<2;
291 rgbp[i].rgbReserved = 0;