W 1 Release 3 (16. Feb. 96) =========================== There you are, next version, next luck. This time without limitations of windows and rectangles, but with clipping, better pattern support and some more speed-ups instead. Sorry, I'm seriously out of time, so the docs may not be what you expect them to be, but better this version now than again wait two weeks, right? server/lib: - added two more functions to the SCREEN struct: getblock and putblock to copy data between a BM_PACKEDMONO bitmap and whatever screen format is active. this way all block requests are forced to work on BM_PACKEDMONO bitmaps, i.e. monochrome bit data (big-endian) padded to 32 pixels, but now it also works for the direct8 driver - W_TOP windows changed: there can always be only one of them at a time and only if the client is running local (IP-addr == 0) and only if the client has the same UID as the server. this way nobody can make nasty things with wgone and alike. really nobody??? - only top level windows get solid frames when entered, childs (second or deeper level windows) will be left unchanged, but nevertheless they may get events and/or input - if you press the right mouse button on a window which already is on top it will then be moved to the bottom instead - the lib was busy polling when waiting for a return paket under != MiNT, fixed - w_[d][p]poly() for drawing convex polygons of at least 3 and at most 64 points implemented (graphic routines by Kay) - implemented W_CONTAINER windows, see wbuttons. these are windows which have no bitmap (and thus save a lot of memory) and may/should be used when you only need some kind of container to put in some child windows - yet more optimizations for bitblk() and vscroll() in the packed pixel driver - do not w_beep() when catching console output in wterm, this will cause an endless loop - w_readimg() from wsetbg and wpuzzle is now part of Wlib - grouped together similar calls in the lib and the server, this saves quite some code and thus makes both of them a bit smaller - implemented W_CLOSE and W_ICON gadgets, see wbuttons and/or wterm (Kay & me). W_SIZE is still missing - the time, you know... - the libgraph.a now uses `global' pointers to GCONTEXT structs (`gc0') as well as clipping rectangles (`clip0' and `clip1'). this way you don't need to pass these pointers at all (should save a lot of time for the generic functions) - w_printstring() can now print strings of arbitrary length, splitting them in several chunks of 63 chars each - new button concept based on new windows concept (w_createButton()). buttons are now merely like normal windows (with borders) i.e. they are window pointers and can be drawn to. to hide or show a button without remembering the coordinates there're wrapper routines. w_queryevent() still behaves the same on buttons. - graphic calls now do proper clipping (Kay) - w_setpattern() changed for new pattern scheme - integrated a new pattern scheme by Eero (this also involved that he changed the dashed functions as well as writing some new ones). patterns are now a 16x16 bitmap instead of a 16 bit linemask - the create calls now also pass the libs window pointer to the server so that it can return that one in events rather than a handle; this makes some things a bit easier inside the lib - new window opening mode: EV_ACTIVE. you'll then get EVENT_ACTIVE/INACTIVE events when the window is entered or left by the mouse cursor. see wbuttons for example - when opening a window at user selectable coordinates, use 'UNDEF' (-32768) instead of -1 as windows may now perpectly legally be opened at that position - w_createChild(): new call to create a child for a window. the child is a fully independent window with all possible features, except that it won't get a solid frame when entered by the mouse - this applies to top level windows only (to avoid confusing flickering :) - new window and rectangle handling by Kay: windows can now have logical childs which always lay above the parent. child windows are always clipped to the work area of their parent. childs will be moved with their parents. `topping' moves a window to the head of it's parent child list only, not to the head of the global list. in fact everything should be like you've always wanted it :) ah well, and there's no limit on windows and rectangles anymore. (in fact I had already done the unlimited window stuff and was about to do the same for the recs when Kay gave me a program to demonstrate some code which would deal with both of them, so I took that one :) - can now switch virtual consoles under Linux68k (at last...) - cpyrgt as external program to avoid tfork() problems under MiNT (Kay) - a lot of direct8 enhancements (original version was really braindead), but even with some both easy and efficient speedups the Sparc2's CG6 is a bit slower than the TT when scrolling. well, the TT (mono) can move up to 32 Pixels with one memaccess, whereas the CG6-Sparc can only do 4, so it would have to be 8 times faster than the TT, and it doesn't seem to be... :( - an awful :) lot of bugfixes by an awful ;) lot of people programs: - want: a 'mathematical game' simulating an ant (Eero) - wreversi: my very old and very dumb program to experiment with complete game trees. it's slow, it's stupid and deterministic, but as long as anyone writes something better I'll nevertheless include it - wstatus now displays the number of open/total windows for either the complete system or a particular client, but no rectangle count anymore - wpuzzle: new game by Jens Kilian (jensk@hpbeo82.bbn.hp.com) and Simon Kagedal (?), "Inspired by an X client program" - wbuttons: demo program for new button management, W_CONTAINER windows and gadget stuff like W_CLOSE and W_ICON - wcpyrgt: copyright program to replace the server internal startup window (I was told forking that off could cause problems under MiNT) man: - rewritten all manpages for nroff (finally) diffs: - wearth: re-added at least some option parsing (Kay) and changed it to output via w_putblock (me) others: - some preliminary support for netbsd@amiga (Frank Wille), only graphic initialization so far, keyboard and mouse don't work yet. keyboard is probably easy to fix, but the mouse may be non-sun-compatible :( W 1 Release 2 (20. Dec. 95) =========================== last minute changes: - I've decided to keep distributing the termcap entry - in case you should need it you'll again find it in the root dir of this package - changed cpyrgt.c to draw the logo on a direct8 driver too Again lots of things have changed, just take a look at the items below. The most important things are that socket transfer and backing-up of (partially) hidden windows is a lot quicker now. Other items involved great changes in the programs, like the preparation for better fonts or clipping. Fonts, windows and the server reply for w_init() are now pointers - that involved changes in every program. Also new is the ability to trace calls to the Wlib - this has already helped me a lot in debugging. And then it now runs under Linux68k (officially supported) and SunOs 4.1.4 on a Sparc2 with CG6 graphics (unofficial)! server/lib: - w_bitblk2(): new call to bitblk between two windows - w_strlen(): new call to calculate the length of a string in pixels for a given (proportional?) font - w_fontinfo(): removed, the new way is to load the font and get all the information you want out of the fontpointer - many beta-testing fixes by Kay and Eero - w_trace(): new call to print some diagnostics for each call to the Wlib, will only work if the lib was compiled with -DTRACE (default) - windows now have a 'dirty area' when in background. this way we only need to update that area after all client calls are served instead of the whole window after each call - that's quite a bit faster (idea by Eero) - graphic drivers are a bit more abstract and reside in a special directory, this involves that there's again only one server which includes all the drivers it needs for this machine - this only costs a few kb... - fonts now use a WFONT pointer instead of an integer handle and are - so to say - shamelessly stolen from X11 by the X-Consortium (take a look into the fonts subdirectory if you want to know how I've done it). the server now manages them in a per-client basis instead of a per-window basis and is prepared for proportional fonts - windows now use a WWIN pointer instead of an integer handle. this way the lib can store some information about the window to do (a so far only minimal implemented) clipping or other things to avoid socket transfer if the calls would have no effect anyway. clipping so far means completely discarding a call if it's partially outside the window - new style of server internal menu commands (they begin with a '@' and there are two of them: @exit and @refresh) plus a better SIGCHLD routine by Ulrich Kuehn (uk), kuehn@math.uni-muenster.de caution: refresh will need an additional compile-time option that is not yet implemented! - w_beep(): new (small) call to do a beep. most programs started may not be able to directly write this to the screen, so why not let the server do it? this involves that the xconout2 device should better not catch it... - use hton/ntoh whereever needed, so there's a slight chance that it will run over networks other than MiNTNet - w_create(): takes new parameter W_NOMOUSE if the mouse should be disabled while this window is open, used by wsaver and wgone - w_flush(): new call to flush the librarys buffer of outgoing calls, which enhances executing speed of `quick' calls a lot because it avoids socket overhead. the buffer will be flushed automatically if a call expects a return code or if you ask for an event, otherwise it's your task to call w_flush() whenever you want output to be done immediately - now binds to any AF_INET socket it can resolve as local, so you should have at least the loopback interface set up. since this is the default if you load sockdev.xdd this should hardly fail... :) - an awful lot of other things... programs: - wlife: rewritten to work on variable sized fields, supports geometry option - wclock: improved by Eero - wload: rewritten - wterm: an awful lot of fixes and changes, partially by Kay Roemer, most important ones include that it now sets TERM and TERMINFO and thus doesn't need an /etc/termcap entry any longer - at least not on my setup - wgone: rewritten games: - wsolitaire: new program by Eero Tamminen - wmines: new program by Eero Tamminen (puujalka@modeemi.cs.tut.fi) others: - rehacked makefiles so that they should now finally fit to more setups, for MiNT the KGMD setup is recommended, for Linux68k anything will do - still no sign of nroff-ed manpages, but I at least try to keep the ascii versions up-to-date... :) remaining problems: - under Linux68k V0.9.13 I had problems with signal handlers aborting and thus garbling the socket communication (even lead to server crashes), under V1.2.13pl4 these problems seem to have gone? - F_BOLD is for the moment not supported as fonts again only contain one bitmap. there are bold fonts, and even italic ones, but these come in seperate font files. wterm is not yet prepared for these! :( W 1 Release 1 (30. December 1994) ================================= despite of minor bug fixes and small improvements the big new feature of this release is that it now implements a real client <-> server concept using sockets! for me it makes dealing with client requests a bit more difficult as data might come in chunks not regarding message boundaries at all, but it's much cleaner and saver. the ugly hacks to recover from clients being aborted during a W operation are no longer needed. for you it means that the basic requirements are now implemented to run W programs over a MiNTNet network, but support is not yet official as I can't test it. other architectures are not yet directly supported as most parts don't yet deal with host/network byte order problems and some parts still use MiNT specific calls, but I'm on my way eliminating them. this may make the stuff a bit bigger and slower (as socket communication already does make it a bit slower), but it should now be quite easy to port it to a SunOS machine, at least one with a monochrome graphic adaptor, which is *precisely* what I'm currently after... ;) server/lib: - w_vscroll(): new call to replace w_scrollup() and w_scrolldown, having these two really was a waste - w_getblock(): semantic and syntax changed to something which seems to be more logical to me - now displays the non-active windows with a different border, this way you can easily see which window the mouse is above - fixed a server bug in dealing with mouse button events, now everything *should* (???) be treated as you'd expect it - introduced `gadget' events, there's only one so far: GADGET_EXIT which is send by the server if a client should terminate - library now has names which are a bit more UNiX compatible so you should completely erase (or backup?) a previous installation - w_queryevent(): semantic has changed non-transparently! sorry about that but it must happen due to portability reasons - new calls: w_setpattern() and w_dbox() for dashed graphics, other calls will follow soon - w_create() now takes several new values for its third argument: EV_KEYS and/or EV_MOUSE to preselect the type of events the clients will expect (note that a GADGET event must always be expected!) and W_NOBORDER if the window shouldn't have a border (which makes the use of W_TITLE impossible) - w_scanconsole() deleted from the lib as it's now obsolete, the xconout2.xdd device driver now does this work programs: - wload: now supports at least the position part of the geometry option - wperfmon: new program to replace wspeed, this one seems better to me, even if it doesn't yet try to eliminate socket overhead in time measurements - wsaver now takes the place of the screen saver as an external program and has two different modules - lots of changes due to socket communication, all clients must expect and respect GADGET_EXIT events now - wterm: doesn't any longer support LINES/COLUMNS environment variables but TIOCGWINSZ instead. I've finally realized that some of *my* programs were broken - wstatus: completely rewritten, now displays different information - minor changes: fixed all clients to preselect events others: - in fact the socket communication involved so many changes that you should probably look into *ALL* manpages... :) W 0 Release 8 (4. November 1994) ================================ server/lib: - now reads a ~/.wconfig file for menu customization and other things, again, see manpage for more - mouse routines now use graphic operations similar to the bitblk call. the result is that the server shouldn't any longer suck any free cpu time it can get if you move the mouse a lot - changed the way mouse button release events are handled, they now only go to the window where the button was pressed, see manpage for w_query- event() for more details. this also resulted in some changes in the button routines, they should be transparent to the user, but you may take a look at wapfel.c as a demo - now the client creates its pipe for events, not the server, this fixes a bug which occured when a client deleted all its windows and later wanted to create one again: in this case the server already destroyed the pipe and so the client couldn't create the window - implemented some patches by Kay Roemer (roemer@informatik.uni-frankfurt.de) which make the bitblk and scrollroutines a *bit* faster. at least that's what he said. in fact bitblk is up to 3 times faster now... :) - fixed a bug in the `color' versions of graph_hline, sorry for that... ;) programs: - wapfel: applied some major speedup patches by Kay Roemer (roemer@ informatik.uni-frankfurt.de) and changed the way how to select a rectangle to zoom into - wspeed now uses a different method to measure the speed - wterm: now does its output in string chunks rather than char-by-char, this doesn't speed up anything now, but probably later in a socket version. also you can now pass any number of arguments to started programs others: - included some diffs for GNU-Plot 3.5 to make it display output in a W window! look at the `gnuplot' subdirectory :) - again changed the archive layout. there're now seperate `make' and `make install' procedures. both a wmono and a wcolor server will be compiled, which you can start with startw. note also that you must be `root' to compile/install the package because wterm will need it plus the usual manpage updates... doesn't anyone want to rewrite them for nroff? W 0 Release 7 (1. October 1994) =============================== wserver: - argl! the server created only one pipe per client regardless of how many windows it opened, but it didn't ever close it later! :( - added the possibility that mouse button releases also get reported as events to clients. there're currently some problems left, so your program should care about release events it didn't expect because there wasn't a previous press event - upper left corner now is a `nono' area for the screensaver, maybe it'll later also changes its shape to indicate so - fixed another bug in the code for drawing of lines, was this the last one? - implemented code to finally really load external fonts, allthough there're not yet any supplied. see README.fonts for how to create such fonts - changed the names of some macro constants because they now seem to be more logical to me. take a look at wlib.h - switched to an - as I think - nicer screen saver - implemented w_circle and w_pcircle - can now print underlined text - changed the way screen locking and mouse hiding works. they now use a bitmask orientated global variable. this limits the number of windows to 32, but first it makes screen locking and mouse hiding easier and safer, and then 32 windows should be enough :) - the -DMONOCHROME server now uses 32 bit access for some routines which enhances them again quite a bit :) - implemented funcionality to catch output done to /dev/console. it's a bit tricky and dangerous too: do *NEVER* think about killing the server with SIGKILL!!! if it won't be able to deinstall the xconout handler it uses to catch the output the system will crash completely - done a better hack for the lock-bug. the server should now be able to recover from both a client being aborted or suspended while it is in a w-function - again lots of internal changes library: - defined W_UNDERLINE for text output style - changed the way scan_geometry works, see the manpage for more info - new call: w_scanconsole() to read data that has been buffered from the console. it only works if you call it on a window which was created with W_CONSOLE. look at wterm.c for how to do it programs: - wspeed: completely rewritten so that it now fits on a ST-HIGH screen and checks for all possible alignments. speed calculations will still only work on a TT in TT-TIGH because that's what I compare them to, but at least you can now see what it does in all graphic modes - wterm now uses both LINES/COLUMNS environment variables and struct winsize ioctl to report the window wize to clients (as suggested by benni), supports W_UNDERLINE for wterm terminal type, fully supports the geometry option and can catch console output when started with -c - wclock now fully supports the geometry option and has a much smarter display: updates every seconds and doesn't any longer always clear the entire window - wfontdemo: new program, prints a short string in every available font - weyes: new program, guess what it does :) - wload: new program from benni@phil15.uni-sb.de, sorry, but there was a small bug in it... ;) - wbiff now display a nicer graphic (benni@phil15.uni-sb.de) - walert: delete from distribution because it's obsolete, use wterm -c instead others: - again changed the makefile layout so that now finally the source can be in a completely independend directory - updated the wterm termcap entry - updated quite some manpages and/or written new ones - all parts must now be compiled without -mbaserel. sorry, but I've had severe problems with the signal handlers when running -mbaserel, don't know how to cope with this, but without -mbaserel it works W 0 Release 6 (11. September 1994) ================================== wserver: - added a quick hack to be able to resume work after the screen was locked due to a client crashing/terminating while being in a `W' function. if you press CTRL-ALT-C or send the server a SIGINT it'll decrement glob_locked by one in the hope to clear what the no longer existing client has left - ok, I've finally come to verify that it's true that GCC's optimizer likes 32 bit variables more than 16 bit ones. :) this immediately makes its way into another speedup - more and more routines now use the bitfield emulation, which makes the non-word-aligned parts up to 15% quicker, but the aligned ones a bit slower (2-3%). hope that won't disturb you. :) I think this is almost maximum speed for 68000'er. maybe R7 or R8 will finally contain 68020 code, which will probably the final (major) speedup. - fixed a bug in the w_querymousepos routine: it didn't check if the mouse was in a window, but outside of the work area - fixed a bug in w_close, sometimes the contents of other windows were destroyed - implemented two new functions: w_getblock and w_setblock to read or write images from or into the window - the biggest font, wsys32x64, is no longer supplied because it was only a memory consuming magnification of wsys16x32 and probably not good for any- thing. but the others do now support a W_BOLD option! as a side effect, printchar is again 6-7% faster, looks like this is the limit for pure 68000 code - client pipes are now organized in a per-client form and no longer in a per-window form. this allows one client to open several windows but to use only one pipe, and therefore allows a greater number of open windows. this also involves a change in w_queryevent() - fixed a bug in the code for background drawing of lines - implemented functionality to lock the screen for wgone - windows can now have a title bar if you give the W_TITLE flag to the w_create call. this also makes clicking on the border of a window a bit easier :-) - now has got a simple screen saver function which gets activated if no key is pressed, the mouse isn't moved and no window creating/deleting/ opening/closing/moving operation is performed for a specified time. - added some checks so that you can now savely draw in windows which aren't actually open - lots of internal changes... library: - implemented w_getblock and w_setblock. definition of BITMAP is now part of the library - changed the way w_queryevent() works: WEVENT now has got a field where the handle of the window in which an event occured is reported - deleted w_querywinpipe() from the lib because it's obsolete programs: - wterm: now sets LINES and COLUMNS to the size you've selected. the termcap entry doesn't define them any more - changed the way wsetbg works to w_setblock - wterm: now uses it's own termcap type, which is mainly identical to VT52 but has extensions for bold mode, look at the file in etc - new program: wgone. locks the screen until you enter your password. the server now needs KR's portlib to compile, because of the crypt() function. you can of course also use the original libusers library from SRU - changed wterm so that it uses a title bar games: (hey, new group! :) - first game: wlife, nothing very optimized at all, but just try it! :) it should show you how to deal with buttons and such things others: - again changed the archive layout and the Makefiles, hope it's now easy to compile the whole thing in one bang - done a lot of work at the manpages, they're complete now, I think, but probably not very detailed yet... and full of bugs... but better than nothing :) W 0 Release 5 (20. August '94) ------------------------------ wserver: - changed the way fonts are stored. the new way is a bit slower, but will save quite some memory for non-byte-aligned fonts later - hopefully fixed the bug which sometimes locked the thing. looks like I don't know what `volatile' means. the secret is not to use it, but to not use it! - uses a new bitblk routine, which is 50-100% faster (depending on the size of the area to move), so a lot of parts are quicker now - the menu routine used to save all unhidden windows before displaying the items and was therefore slow. now it only saves that windows which will be overlapped and is therefore faster - implemented W_MOVE and W_TOP flags for w_create() to determine if the window really should be moveable or should always stay on top - give some more information in `wstatus' output - fixed a bug in the routine for determining the window of a mouse click - speed up line drawing algorithm by 40% - lots of minor changes and bugfixes library: - changed the way w_queryevent() works: it now uses Fselect(3) with timeouts and you can give it pointers to bitmasks of other filehandles to watch out for, just the way you do it with Fselect - implemented W_MOVE and W_TOP flags programs: - wterm: now has got a `visual bell' - wterm couldn't ping if started from the ~/.wrc because the output was redirected to /dev/null: now fixed - new program: wbiff, guess what it makes... :-) - new program: walert, to catch MiNT's alert output - wterm now supports an option to select the terminal size - deleted wmenu from the distribution, as wapfel is a far better example for how to use buttons and mouse events others: - some more manpages written W 0 Release 4 (10. August '94) ------------------------------ wserver: - now automatically closes orphaned windows - now respects hidden parts of windows, for the price of a big loss of speed, but still: hamdulliah! - now reads a ~/.wrc file at startup and executes all commands in it. since this is the preferred way to customize the startup procedure and you can start anything you want using the menu later, there is no default action any longer - now has got a menu. you'll get it if you press the left mouse button on the background - added a check so that only that user is allowed to run wclients who initially started the server - lots of small changes and reorganizations library: - started implementing clickable buttons, look at wapfel.c for an example programs: - wapfel: major rehack to implement buttons to zoom into picture - wsetbg: can now load any monochrome IMG picture, centering or clipping it if it's necessary - wterm: fixed a bug in the VT52 ESC-J code - wterm: fixed a bug in the wrap code - wterm: read tty pipe for greater chunks, if possible, and use the time gain for a quicker update of the cursor, which can even blink if you like it. all in all it's now 20% faster :-) others: - deleted background picture from the distribution, because you should now be able to load any IMG picture W 0 Release 3 (1. August '94) ----------------------------- wserver: - moved code to read a background picture from server to an external program, I think it's better this way - all routines now also draw into the specific window bitmap, so if you now move a window, it won't be empty then. you can also let two windows overlap, in which case the screen will be messed, but as soon as you move them apart everything will be ok again. you should even be able to close a window and open it again without losing its contents - speed up text output by 12% - moved mouse intersecting code from the graph_*() functions to the w_*() functions in order to get a smaller graph code to have a better chance to optimize it later in pure assembler - implemented functionality of reporting mouse button events as well as keyboard events - fixed a bug: when deleting a window, also delete the server pipe, otherwise the next window which gets this handle won't be able to create a pipe... library: - implemented new call: w_queryevent() programs: - two new programs: wmenu and wstatus, one for showing you how to use the event function, and the other for giving you some debug output - yet another new program: wsetbg, to load the background picture from /usr/w/background.raw, maybe this will load any IMG picture in future others: - changed Makefile layout - updated the `manpages' W 0 Release 2 (21. July '94) ---------------------------- wserver: - can now only be started at console - switched to MiNTs internal mouse driver, it's quite slower and needs more complicate handling, but allows us to distinguish between button presses and releases, which immediately makes its way into a different handling of window moves - added two routines for scrolling in one bitmap with word aligned copy if possible, they are *much* faster than the `old' bitblk routine - slightly improved routines for text output programs: - new program: wapfel, just for fun - fixed a small bug in wterm's VT52 emulation - wterm now makes entries in /etc/utmp, can select fonts and shells to start - wterm now uses the new scrolling routines instead of the bitblk routine, this improves scrolling speed by a factor of 10 others: - started something which could end up one time in a set of manpages W 0 Release 1 (July 94) ----------------------- - speed up printchar() routines by 45% and bitblk() routines by 6%, using the same trick, but why is the result so different? - added a compiling option MONOCHROME which should make some arithmetics obsolete, pity it doesn't have any effect... :-( - completed VT52 emulation in wterm - wserver now can print invers text, wterm immediately uses it - keyboard input no longer goes to the top window - which still isn't that easy to be recognized at all - but the one the mouse is above instead - added a nice copyright info... :) W 0 Release 0 (July 94) ----------------------- - initial (non-public) version, really not worth to be called ready at all.. ;)