Lgi
About
LGI is a GUI framework for abstracting out all the operating system dependencies that you can produce portable code. It handles all the graphical interface functions, threading and semaphores, network connectivity and lots of other bits and peices to help build small, fast and reliable applications.

The strengths of LGI is that it's a small enough library that one person can understand it all. Also it's not too much of a burden on an application, both in increased download time and memory footprint. LGI at the moment compresses to about 300kb, which while not insignificant is quite a bit smaller than the other options.

Ultimately however size is a secondary consideration to the core feature of LGI and that is portability. Currently 3 serious ports exist: Win32, Mac and Linux. There is also a legacy BeOS port which is unsupported.

I have completed some basic documentation (available online here) for the library, and there are a number of example apps with source code available from this site as well.

Related Information:

Version: v3.02 [Stable]
Version: v3.01 [Stable]
Version: v3.00 [Stable]
Version: v2.20 [Stable]
Version: v2.10 [Stable]
Version: v2.00 [Stable]
Version: v1.99 [Stable]
Ports Status
  • Win32 (98[se]/ME/NT/2K/XP)
    This is the most stable and featured port, as it's the native plaform. Well DOS was technically the first platform, but there is no code left from those days. Everything works in Windows, and it's the fastest due to the speed of the Win32 Graphical Subsystem being miles ahead of Linux or BeOS. Sure other parts of Windows "Suck(TM)" but graphically it's king. It should run on Win95 as well, but some things won't work as advertised. I longer support or test on Win95 and I barely support Win98 or ME.
  • Linux (>=2.4)
    This is the 2nd best platform for LGI, it's pretty rock solid these days and has almost all the features of the Win32 port. There are a few things missing here and there but it's 95%. It's definately not optimal speed wise but I don't have time to tinker with better ways of doing things. It does work quite well.
  • Mac OS X (>=10.3.9)
    The newest port of Lgi, most things are working but there are less used areas that need implementing or fixing. The GUI code is fairly complete and solid, although some more optimization is needed. Threads, sockets etc all work too.
  • Cygwin
    I ported the win32 code to gcc/cygwin and there is working makefiles. The code isn't extensively tested but the IDE runs ok when built under Cygwin, YMMV. The underlying Win32 code is very good, so there would only be problems that Cygwin/GCC introduced. Also works under MingW.
  • BeOS (Zeta)
    This is an old old port from the r5 days that I recently updated to work on Zeta for v2. Most of the basic functionality works to put windows on the screen. But lots of little quirks still exist or things arent implemented. However that said some of the design concepts for Lgi came straight out of BeOS, so that BeOS port often is the "cleanest" of the implementations, having a direct mapping to the native API instead of convoluted hacks to make things work. Currently the BeOS port doesn't run very well on Zeta, there is some problem with locks getting stuck in really weird places. I consider this port deprecated at the moment.
Features

Building LGI
  • Download the latest source, unpack somewhere.
  • For full graphics and charset support download (or check you already have) iconv, libpng, zlib and libjpeg; then add their include paths to your compilers include paths. Or find the defineds in Lgi.h for the various libraries and set them to 0.
  • To build:
    • Win32: Load Lgi/Lgi.dsp into Visual C++ and build it.
    • Linux: make -f Lgi/Makefile.linux
    • Cygwin: make -f Lgi/Makefile.win32
    • Mac: Open Lgi.xcode in XCode and run the build command.
  • Adding build folders so the OS can find the shared libraries:
    • For Windows add these to your path:
      • Lgi/Debug
      • Lgi/Release
      • Lgi/Gel/Debug
      • Lgi/Gel/Release
    • For Cygwin add these to your path:
      • Lgi/DebugX
      • Lgi/ReleaseX
      • Lgi/Gel/DebugX
      • Lgi/Gel/ReleaseX
      On Linux, create symlinks in /usr/lib to the files:
      • Lgi/DebugX/liblgid.so
      • Lgi/ReleaseX/liblgi.so
      • Lgi/Gel/DebugX/liblgiskind.so
      • Lgi/Gel/ReleaseX/liblgiskin.so
  • Find and build an application. I suggest i.Ftp as a good starting point. However the documentation will help you get started from scratch if you want to do it that way.
Any problems, just email me.
M$ VC++ 6 Tip
Add this to your Common/MsDev98/Bin/AUTOEXP.DAT file to show various LGI types inline:
; LGI types
GRegion =x1=<x1> y1=<y1> x2=<x2> y2=<y2>
GMessage =msg=<Msg,wm> a=<a> b=<b>
GDateTime =<_Year>/<_Month>/<_Day> <_Hours>:<_Minutes>:<_Seconds>
History:
3.02 [Stable]
Download: Sources + Docs [Common, 1899K, 4/10/2007]

Changes:
  • [Win32] Fixed enumerated font names not being converted from native cp properly.
  • Updated scripting language to have proper scoping of variables, better expression evaluation and infix/postfix/prefix operator support.
  • Fixed font selection dialog showing weird preview text on display bit depth other than 32.
  • [Win32] Changed keyboard handling to not use WM_CHAR, which is corrupted in some cases (Vista, Romanian etc).
3.01 [Stable]
Download: Source + Docs Zip [Common, 2982K, 20/6/2007]
3.00 [Stable]
Download: Source + Docs Zip [Common, 2928K, 1/5/2007]
2.30 [Stable]
2.20 [Stable]
Download: Lgi-20060502 [Common, 2827K, 2/5/2006]
Download: Lgi-20060418 [Common, 2686K, 18/4/2006]
Download: Lgi-20051026 [Common, 2730K, 26/10/2005]
2.10 [Stable]
Download: Source+Docs [Common, 2842K, 27/7/2005]
2.00 [Stable]
Download: Source+Docs [Common, 3896K, 26/10/2004]
1.99 [Stable]
Download: Source+Docs [Common, 2609K, 6/5/2004]
1.98 [Stable]
1.97 [Stable]
1.96 [Stable]
1.95 [Unstable]
1.90 [Stable]
1.85 [Stable]
1.80 [Stable]
1.70 [Stable]
1.66 [Stable]
1.65 [Stable]
1.60 [Stable]
1.51 [Stable]
1.50 [Unstable]
1.45 [Stable]
1.40 [Stable]
1.31 [Stable]
1.30 [Stable]