From: Turgut Hakki Ozdemir (extronus@bigfoot.com)
Date: Tue 16 Jan 2001 - 09:26:44 IST
zELAm, I'm working on a game-sdk for myself (I'm unsure but i may release it later) I have two important goals for that lib. A very clean API and High level portability. An application developed using this library under Linux must be compiled another os (eg windows) without changing one line of code. This library is a layer between the OS and developer. (Think it is a virtual operating system :)) To achieve the goal of that portability level i've made the library very modular manner. With an exception of some basic functions like error handlers, module loader, network manger etc.. (I call them as kernel) all code of the library is dynamic (Drivers) and the application is able to load/unload and load again them runtime. A schema of the library can be drawed like this (Kernel) | (Console) (This and below are modules!) | +----------+--------------+----------------+ | | | | (Graphics) (Sound) (Non-Keyboard Input) (More) (Display) (Voice) (Mouse) (2d) (Music) (Joystick) (3d) etc.. etc... etc... Now I'm coming to svgalib related part. As i said before the library sets a level between OS and Developer. Our application will never need to know where it is running. :) Under Linux there is two "Environments" for games. First is the Console and second is the X-Window System. The ConsoleSystem is exist for handling keyboard input, managing VT/Window switching, and doing some kind of "housing" for remaining modules. For example: SvgalibDisplayModule runs under Linux/Console ConsoleModule and X-Display module runs under X-Console module. There is some problems with SVGALIB under "Linux/Console" environment due the nature of both libraries. My library (I call it Ghargharhannath) is able to handle all the important signals (SIGSEGV, SIGFPE, SIGPIPE etc...) and convert them internal errors or signals. The ConsoleModule for "Linux/Console" currently does VT switching, etc work perfectly. The problems are : * VT Switching battle! * Glued signal handlers! * Detonation of atexit() bomb! * Lacking of a windows port! (Please don't kill me! 90 percent of gamers uses windows theese days :)) By the nature of Ghargharhannath, ConsoleModule gets rid of VT switching problem automatically (Shortly by installing VT switch signals and handlers after initializing Svgalib) But I don't know how it is legal... (It looks like working fine) Signal handlers: I must prevent svgalib from handling some signals. If they handled by svgalib first i cannot stop some unwanted results from occuring. I've tried to do that like this in SvgalibDisplayModule: SaveCurrentHandlers(); PreInitializeSvgaLib() {vga_init(); etc..} RestoreHandlers(); OpenDisplay() {vga_setmode(GRAPH); etc..} RestoreHandlers(); GoBackground(vga_setmode(TEXT); etc..} RestoreHandlers(); GoForeground(vga_setmode(GRAPH); etc..} RestoreHandlers(); bablalbalal.... In theory, this must work! But it isn't looks too much stable. When i raise SIGSEGV, SIGPIPE etc.. the result is like there is no signal handlers installed at all! ---Like this!--- int main() { raise(SIGSEGV); } ---------------- How can i prevent svgalib from installing handlers or how can i clear them? Finally the atexit(); bomb! :) Here i must prevent svgalib from installing atexit(); function. Since the module which svgalib linked with is dynamic. (svgalibdisplay.mod.so) During the initialization of svgalib, it installs that handler with application's atexit(); queue but when application closes display, Ghargharhannath unloads display module (and svgalib) from memory. :)) This causes a pretty "Segmentation fault" message after programs exit :) I know it's not too much important and it looks like a joke more than a real one but it's a REAL segv... Please help me. Under linux, i have started with svgalib (It's my first) and i don't want to drop svgalib support... ps: It's 5.30 here in Turkiye currently (Do not look message time it's wrong) and ..gulp!..gulp! a few minutes b... gulp! earthquake... ! gulp! tv says it is 4.2 gulp! a few kilometers from me! gulp! help! gulp! still shaking me! gulp! fear! gulp! eXtronuS ... svgaquakegulp! ------------------------------------------------------------------ Unsubscribe: To: listbot@svgalib.org Body: unsubscribe linux-svgalib
This archive was generated by hypermail 2.1.4 : Wed 21 Jan 2004 - 22:10:23 IST