| /* |
| * GraphApp - Cross-Platform Graphics Programming Library. |
| * |
| * File: init.c -- library initialisation code. |
| * Platform: Windows Version: 2.23 Date: 1997/09/09 |
| * |
| * Version: 1.00 Changes: Original version by Lachlan Patrick. |
| * Version: 2.00 Changes: New object class system. |
| * Version: 2.20 Changes: Added EasyWin support in Borland C. |
| * Version: 2.22 Changes: Now main doesn't use environ pointer. |
| */ |
| |
| /* Copyright (C) 1993-1998 Lachlan Patrick |
| |
| This file is part of GraphApp, a cross-platform C graphics library. |
| |
| GraphApp is free software; you can redistribute it and/or modify it |
| under the terms of the GNU Library General Public License. |
| GraphApp is distributed in the hope that it will be useful, but |
| WITHOUT ANY WARRANTY. |
| |
| See the file COPYLIB.TXT for details. |
| */ |
| |
| #include "internal.h" |
| |
| /* |
| * Windows implementation globals. |
| */ |
| |
| PROTECTED char * app_name = "GraphApp"; |
| PROTECTED int app_initialised = 0; |
| PROTECTED HANDLE this_instance = NULL; |
| PROTECTED HANDLE prev_instance = NULL; |
| |
| /* |
| * Functions defined in this file. |
| */ |
| static void setappname(char *title); |
| static void getappname(HANDLE Instance); |
| |
| int initapp(int argc, char **argv); |
| void exitapp(void); |
| void gabeep(void); |
| |
| /* |
| * Initialise application. Returns zero on failure. |
| */ |
| int initapp(int argc, char **argv) |
| { |
| if (! app_initialised) |
| { |
| app_initialised = 1; |
| init_objects(); |
| init_events(); |
| init_fonts(); |
| init_cursors(); |
| init_contexts(); |
| init_menus(); |
| } |
| return (argc < 1) ? 1 : argc; |
| } |
| |
| /* |
| * This function releases all GDI objects. |
| */ |
| PROTECTED |
| void app_cleanup(void) |
| { |
| if (app_initialised) { |
| app_initialised = 0; |
| finish_contexts(); |
| finish_objects(); |
| finish_events(); |
| } |
| } |
| |
| /* |
| * Standard quit application function. |
| * This function releases all GDI objects and terminates the program. |
| * It can be called at any time from within a program, or at the end, |
| * or else it will be called if all windows are closed. |
| */ |
| void exitapp(void) |
| { |
| app_cleanup(); |
| active_windows = 0; |
| exit(0); |
| } |
| |
| /* |
| * Run an application program: |
| */ |
| int execapp(char *app) |
| { |
| #ifdef __MSDOS__ |
| if (WinExec(app, SW_SHOW) < 32) |
| return 0; |
| #else |
| if (system(app) != 0) |
| return 0; |
| #endif |
| return 1; |
| } |
| |
| |
| |
| /* |
| * Play error sound |
| */ |
| void gabeep(void) |
| { |
| MessageBeep(MB_ICONASTERISK); |
| } |
| |
| /* |
| * Take a name like "PROG.EXE" and set app_name to be "Prog". |
| */ |
| static void setappname(char *title) |
| { |
| int len; |
| char c; |
| |
| if (title[0] == '\0') |
| return; |
| for (len=1; (c=title[len]) != '\0'; len++) |
| title[len] = tolower(c); |
| if ((len-=4)<0) |
| len = 0; |
| if (! string_diff(title+len, ".exe")) |
| title[len] = '\0'; |
| |
| app_name = new_string(title); |
| } |
| |
| /* |
| * Find out what the application is called. |
| */ |
| static void getappname(HANDLE Instance) |
| { |
| char exename[MAX_PATH]; |
| char title[MAX_PATH]; |
| |
| /* find out executable name */ |
| GetModuleFileName(Instance, exename, sizeof(exename)); |
| GetFileTitle(exename, title, sizeof(title)); |
| setappname(title); |
| } |
| |
| |
| /* |
| * The main Windows entry point is the WinMain function. |
| */ |
| |
| |
| |
| void startgraphapp(HINSTANCE Instance, HINSTANCE PrevInstance, int CmdShow) |
| { |
| /* |
| * Save some variables for later. |
| */ |
| this_instance = Instance; |
| /* prev_instance = PrevInstance; is always NULL */ |
| |
| /* |
| * Initialise the graphical interface. |
| */ |
| initapp(0, NULL); |
| getappname(Instance); |
| } |
| |