/* * History: * * 90/12/16 1.0 rosenkra - initial release (posted to c.s.atari.st) * * 91/1/7 1.1 rosenkra - change -i to -r * - change -q to -i * - started to add -q (quantize), not complete * - fix bug with zero'ed accumulation arrays * which was being done with every call to * rasterize * - add histogram for each rgb value (eliminate * the "intensity order" histogram, too) * - make UseNTSC global * - fix scan_CM (bug in gemlib read) * - make default -s of 40 * - histogram now impacted by -N (NTSC) * - add -f option * 91/2/25 1.2 rosenkra - add -b option * - -i does not print color map. use -i -i * 91/6/3 3.0 rosenkra - major rewrite using "flicker" * - really interactive only now * - ReadGIF now single entry point * - flicker is single entry point * - does lots of image processing (menu) * including size, blur, brighten, log scale, * contrast expansion, median filter * 91/6/3 3.2 rosenkra - add convolutions * - release to usenet * 91/6/6 3.3 rosenkra - add cut, rotate, mirror * - add flicker file write (*.fl) * 91/6/9 3.4 rosenkra - fix some bugs in file write, median, log * scale, etc * - enlarge/shrink by direction * - cut can work beyond screen size * - add support for .pi1 and .pi2 files * 91/6/13 3.5 rosenkra - point coord selection by crosshairs * - add zoom (2x) * - add histogram on screen in flicker screen * - add copy orig<-->new * **** **** Development continued by Johan Klockars (d8klojo@dtek.chalmers.se) **** * 92/11/09 4.0 Klockars - support for GCC, Lattice C and Turbo C added * - changed to dynamic memory allocation * - less memory used now * - fixed and enhanced clipping * - improved speed in cmaptoint * - file loading speeded up (especially floppy) * 92/12/14 4.1 Klockars - added quick preview using half tone matrix * - cleaned up code to eliminate warnings * - zoom function fixed * - removed slow flickering * - some improvements in the flicker routines * - no assembly linea functions anymore * - memory problem from v4.0 fixed * - pipe operation support begun (MiNT) * - JPEG support by Frank M”hle added * - mgif.c split into three files (command, info) * - convolution works now (it never did before) * - command.c rewritten for array of rasters * - some rewrites to use memset and memcpy * - improved information screen (what) * - speedups in histogram code * - NTSC colour conversion is now default * - command line switches for buffer size added * 93/05/14 4.2 Klockars - GIF89 support added using code by Howard Chu * - lots of rewrites to use movemem for speed * - vertical and horizontal shearing added * - vertical and horizontal scaleing added * - rotation to any angle added * - support for overscan etc by Howard Chu * - changes to make windowed use possible * - now works in any (?) bit plane mode * - no wait for key on start up default * - flag for wait on key on start up added * - .fl format handles aspect ratios 1:1, 2:1 * - don't allocate any buffers when inquire * - permit wildcards for files (not .fl) * - terrible bug in PI1 read code fixed * - rewrite of PI? code for enhanced speed * - correct colour setting in Falcon modes * - quick view in the Falcon true colour mode * - upgraded to JPEG code v 4a * - first attempt at Falcon true colour dither * - improved and centralized key handling * - use only one screen when in true colour * - changed stderr to stdout in most places * - dithering improved by table lookup * - improved cross hair implementation * 93/07/07 4.3 Klockars - GIF decoding speeded up very much * - more speedup due to better interlace handling * - drawing speedup by doing F-S line by line * - TARGA/PPM read supported * - NonTC greyscale support added with switch * - Hold at end switch added * - tell memory handler when raster[1] is freed * - improved memory allocation error handling * - changed help screen * - gif loader now closes files correctly * - name and version info moved to global.c * - IJG gif loader used when small new image * - better i/o handling in command.c * - better checks for image size in process.c * - colour support for jpeg:s added * - source/destination instead of original/new * - support for more than two image buffers added * - general colour support started * - better handling of differently sized buffers * - mapped and direct colour in true colour mode * - slide show option added * - 24 bit jpeg, targa and ppm read * - demap of gifs added * - lots of changes in command.c and process.c * - several files split * - repeat and test commands added * - tempfile bug fixed * - fast gif loading even with small second buffer * - better buffer size defaults * - RGB mode for operations * - colour dithering in true colour mode * - TT support added * - non-malloc jmemtos to remove reallocation errors * - colour dithering in 16/256 colour using IJG code * - ST colour support added * - changes to use buffer struct * - changes to use options struct * - Lattice C and Turbo C fixes * 93/09/21 4.4 Klockars - GEM interface added * - lots of changes to incorporate GUI * - lots of fixes and improvements to GUI * - lots of file splits and new files * - separate check and allocate screen * - destination buffer save/load added * - GIF, PPM and targa save added * - made start with no args equivalent to -gem * - fast assembly 8 bit chunky to planar conversion * - progress window for write, jpeg read and quantize * - relative positions for cut etc * - even faster chunky to planar * - some small fixes in display code * - buffers in alternate ram if single screen * - assembly optimizations for '030 GIF decode * - assembly optimizations for normal GIF decode * - total rewrite of menu handling code * - centering of images added * - skipping of conversion to grey added * - colour dither in 16/256 colours added * - all dither matrices read from file * - optimized assembly code for 256 colour dither * - small bug fix in chunky to planar routine * - test buffer creation from menu added * - menu option for ordered dither * - probably fixed odd address buffer problem * - switches from command line and/or file * - fixes in draw select logic * - switches from environment and program file * - menu option for display after load * - show and flicker draw fixes * - support for GEMView dither matrices * - oil paint effect from xv added * - rewrites in command parsing code * - assembly for 16 colour 24 bit with and w/o dither * - bias added to convolutions for emboss etc * - clip (0-255) disable added for convolutions * - a few bugs in the convolution dialog fixed * - smarter progress report window update * - even more optimization of GIF decode * - assembly for 16 colour mapped display with dither * - selectable number of colours for quantize * - assembly greyscale drawing * - mouse controlled zoom/cut * - improved support for alternate RAM * - use quick chunky to planar when FS-dithering * - assembly FS-dither * - assembly chunky to single plane * - flicker draw speeded up * - some bug fixes in load/save code * - lmin/lmax added * - image subtract added * - loading of AIM .IM files supported * - lots of GUI changes * - popup menu functionality added * - two times median filter speed up * - GUI fixes and updates * - popups implemented as dialog class * - general keyboard short-cuts added * - save dialog popup actually used * - new graphics mode representation * - zoom/cut select code cleaned up * - zoom/cut scroll around added * - old bug in monochrome ordered dither fixed * - many more old bugs fixed * - wildcard .FL load added * - file load on startup for GEM version added * - some new switches added * - improved checks for alternate memory * - totally mouse controlled zoom/cut * - click continue/end for .FL show added * - .FL load from GUI implemented * - convolution dialog behaves correctly again * - support for self-loading .FL files added * - IMG load added * - some option dialog changes * - scrollable normal view added * - a number of small bugs fixed * - switch for fit to screen on load added * - various new switches added * - a couple of simple new dialogs used * - switches etc for aspect correction * - more error alert boxes * - faster greyscale loading of Targa and PPM * - better handling of startup memory allocation * - write IMG added * - use free space in buffers instead of malloc * - minor memory leakages patched up * - switch for debugging added * - full dialog functionality for IMG save * - F-S dithering for IMG save added * - some minor bug fixes * - some VDI support for 256 colours implemented * - memory alignment problems on draw fixed * - border function added * - extended commands for text interface * - general image combine function added * - support for UNDO added * - time delay for slide show added * - switch for TT grey mode added * - various improvements * - image type change added * - local colour maps * - better handling of image types when processing * - real logarithms for log scale * - all point operations done by redistribution * MGIF 5.00 is now the official name, this is after all a _major_ update * - more drawing types stoppable * - a couple of more switches * - full VDI draw support for 8 bit modes * - default setting in program file implemented * - improved coordinate showing for cut/zoom * - a little MultiAES awareness added * - smarter buffer handling for GIF load * - in place (but slower) deinterlace * - switch for GIF decoder select added * - pixelize function added * - startup dialog improved * - switch for busy bee added * - screen size on load for non-GUI mode * - load control code cleaned up a bit * - some slide-show cleanups * - slide-show loop, random and script file added * - (X)IMG load bugs for < '020 fixed * - switch for stable flicker under MiNT added * - various crash problems eliminated * - save from destination now possible * - smarter buffer handling for image loading * - JPEGD use for non-mapped (not distributed) * - more user defined for border, blur and oil * - various bug fixes * - various minor improvements * * 95/12/21 MGIF 5.00 finally released! */ MGIF v5.01 (released 960312) ---------------------------- 960208 - A DSP routine capable of both convolutions and median filtering (3x3 squares) was added. Speedup of about ten and five times respectively! 960312 - Some minor fixes regarding mouse and text cursor visibility. The DSP code loader now behaves better. MGIF v5.10 ---------- 960408 - Smooth downscaling (weighted averaging) implemented. Reasonably fast and with very good results. MGIF now checks for 16 colour palettes when drawing in colour. No more ordered dither when it isn't necessary. Bug in quantize setup fixed. 960601 - The new scale dialog finally implemented. No longer any need for the halve/double functions. Option to draw automatically after image processing added. A few minor bugs fixed. 960602 - Smooth upscaling (linear interpolation) added. As nice and quick as the downscaling. 960604 - Smooth rotation added (more fixed point interpolation...). Really nice looking and quite fast. Gamma correction finally added. Strange that only one person ever requested this... 960609 - Some (all?)problems with the smooth rotation fixed. Loosened up the restrictions regarding rotation. It's now possible to rotate up to 45 degrees in place. Slightly better handling of error reports under the GUI. Three component (RGB) operation improved. Zoom, scale, rotate (<=45) etc now works fine in RGB mode. Extra startup alert for beta releases added. 960623 - The fastest (AFAIK) Atari GIF decoder is now even faster! From 10% to 300% faster on my tests, depending on the image. Highest speedup is for images with large single colour areas. JPEGD support is now enabled (I've talked to Brainstorm people). This has not been extensively tested, but seems to work fine. Finally _really_ fast JPEG unpacking on ordinary Falcons. 960626 - Image tileing added. An image is replicated to fill up a larger rectangle. Image tileize added. Creates a perfect (edges match) tile by mirroring. Some bugs fixed. 960706 - Cursor coordinate showing for cut/zoom in GUI mode improved. Alternate now toggles the coordinates on and off. 960710 - All graf_mkstate() calls have been replaced by evnt_multi(). Hopefully, this will fix the problems with Warp9. It also means that MGIF will never busy wait for the mouse. Whenever MGIF checks for a mouse click, a keypress is also OK. Cursor keys (and some other) can now be used for cut/zoom. These were easy to add when using evnt_multi(). 960713 - A couple of bugs concerning buffer allocation found and fixed. There should no longer be any danger using -p0 and -p1. A small bug in the JPEGD interface routines fixed. Only a third of the space is now needed to load in grey mode. Slightly better error handling for the JPEGD interface. The slow decoder does not have to be run as well on error. 960722 - The MGIF sources are now subject to the GNU GPL. Any and all GPL sources can now be used freely in MGIF! MGIF source distribution now follows slightly different rules. F. M. Quintero's GIMP bump map plugin has been 'MGIFified'. This is the first addition made possible by the GPL status. Really marvelous 3D effects are possible with this! A primitive text command (extended commands) dialog was added. Mostly for testing stuff which hasn't got a dialog yet. 960723 - Convolution filter support enhanced to handle 5x5 kernels. Useful somtimes, but takes about three times as long as 3x3. Using the Falcon DSP, the difference is only about 1.5 times. Convolution kernels can now be loaded from files. No need to type in specialized kernels every time. 960726 - Horizontal and vertical blur added. If nothing else, it can be used to create nice effects. Pixel spread added. Randomly displaces all pixels by a specified amount. Variable pixel noise added. Binary and additive noise can be applied to an image. Only a specified percentage of the pixels are changed. 960805 - Some new dialogs and menu items added. The new processing functions are now easily accessible. A bug in the 'Oil paint' function was fixed. It's now possible to use more than 64 'buckets'. 960806 - A way around the Warp9 bug (mouse 'crash') is now available. The -wrp switch will turn off all uses of appl_tplay(). 960808 - A progress bar window can now be shown for several functions. A way to see how far along MGIF is, but it is a bit slower. A bug that could cause lmin/lmax to crash has been removed. Vertical blur to a separate buffer is now much faster. 960810 - The command and error handling changed/improved a bit. A couple of minor GUI glitches cleared up. A very bad bug in IMG save fixed. 960811 - A bunch of minor fixes and improvements. 960816 - Greyscale loading of JPEGs now uses JPEGD better. Greyscale load is now faster than 24 bit as it should be. Error handling and reporting improved. 960912 - There's now a way around the popup fails under any multiAES. A new switch was added to allow MGIF to cheat a little. 970224 - Motion blur capability added. Needs to be 'combined' with original to take effect. Progress report update frequency can now be selected. 970226 - All dialogs put in windows! Less than two hours work and a couple of hundred bytes... Now, why didn't I add this before?!? (This also makes the popup fix obsolete.) 970301 - Any number of dialogs can now be open simultaneously. Looks very nice and with some changes to the dialogs themselves it should also be very useful. 970420 - Text entry is now possible if NVDI 3 or later is available. Font and size are freely selectable. 970429 - The 'value entering' dialog has finally been killed off. For the time being, separate dialogs are used. Background operation of buttons now works as it should. Clicking (with the right button down) clips correctly. 970505 - Keyboard input in background windows is now possible. Optionally, input can go to the window under the pointer. 970506 - Loading and saving of files is finally possible from text mode. This was done as part of some internal clean up. The VA_START protocol is now supported. Files dragged into an MGIF window be for example Freedom will be automatically loaded. It`s also possible to use MGIF as a resident image viewer, 'callable' from other programs. 970512 - Debugging output can now be sent to a file. No longer any need for all the screen clutter. MGIF will now use fsel_input() for old TOSes. Naturally, you can tell it to use .._ex.. anyway (Freedom etc). 970518 - Extended contrast expansion operation. A range of colours at top and bottom can now be removed. 970519 - Combine can now deal with images of different sizes. Move around a box representing the smaller image to fit it nicely into the larger one. 970520 - A nice text entry dialog is finally implemented. The name of the current font is displayed using itself. 970630 - A grey level reduction (step) function was added. Convert image, without dithering, to any number of levels. The number of abort checks done during drawing is now selectable. Mostly a side effect of some bug fixes. Probably not useful. 970705 - An unfiltered lense function (by Eero Tamminen) added. Yet another special effect... Timing information can now be had with a special switch. The old way (using -dbg) produced too much irrelevant data. Scripted batch mode operation is now possible. Any 'extended' commands may be executed from a script file. Load/save can be done explicitly or via command line wilcards. ***** Comments ***** The level change and lense functions are not yet integrated into the GUI. This means that there are no dialogs where you can easily set parameters. However, like for (almost) all other functions in MGIF, it's possible to get at the functions via the text interface. When running MGIF as a TTP, this is done via the 'x' (extended) command, and in the GUI there is a menu item called 'text command'. The command names are 'levels' and 'lense'. In text mode, MGIF will give small explanations for the parameters it needs, but in the GUI dialog you have to give them all on the second line, separated with commas. (The new batch mode reads commands like this from a file.) 'Levels' only takes one argument, the number of grey levels to convert to. 'Lense' wants to know the X- and Y-coordinates of the center of the lense, the radius and the (positive or negative) strength (in tenths). Examples of how it can look in the dialog: Command: levels Command: lense Parameters: 40 Parameters: 100,100,50,-5