Since 0.3.6: *MISC* o When the "Popup selected windows" option is turned on or the qualifier is held while selecting a window the window will now be moved to front no mather where in the window you click. In previous windows only the window boarders would bring it to front. When "Popup selected windows" is not selected you will still have to double-click the window boarders or click the "toggle depth" boarder-button to bring a window to front. This is to make it possible to double-click controls inside a window without moving it to front. o More (and more human readable) memory usage info from the "sysinfo" utility. Also added a -l option that will make it enter a loop that repeadatly clear the terminal and refresh the system information much like the "top" utility. o Changed the window size limits to mean right/bottom border rather than with/height in pixels to make it more consistent with the rest of the API. o Major optimizations in all image translator plugin. Greatly improves the speed and responsiveness of ABrowse during page loading. o Optimized the image loader in ABrowse further speeding up page loading. o Windows now get selected no mather what mouse button was used (previous versions only selected when clicking with the left button). This solves a few problems for aplications using right-click popup menues. o Various optimizations in the TCP/IP stack. Both to reduce the CPU usage but most importantly there has been a lot of tuning of the timer code who dramatically increase the performance on high-latency connections. o Changed/fixed the locking cheeme in the ELF executable/DLL loader to improve the concurrency of the loader. o New system for handling installation of UNIX/POSIX command line applications and library packages ported to AtheOS. In UNIX most binaries are installed into /usr/bin/* or /usr/local/bin/* so the shell have an easy job finding them. Similarily all libraries are installed into /usr/lib/* or /usr/local/lib/* and the same goes for header-files, man-pages, info-files, etc etc. The problem with this approach is that it becomes very hard to remove one "package" since it has been blended in with several dozen's other packages. In AtheOS each package are installed into a separate directory containing it's own bin, lib, man, etc etc directories. This makes it easy to maintain a package (unpack it and it's installed, delete the directory and it's uninstalled) but it makes it hard for the shell to find all the executables since they are spread over a lot of directories. In earlier versions this was handled by a script that updated the various search path environment variables to include all the application directories. This was not an optimal solution since the environment was growing rather large and searching the long search-paths had a bit higher overhead than just looking in a couple of directories. It also required all shells to be restarted in order to update their internal environment. The new system works by having a separate directory (/atheos/autolnk) with bin, lib, man, etc etc subdirectories inside that the "package manager" (pkgmanager) will fill with symlinks pointing into the corresponding directory inside all the package directories. So /atheos/autolnk/bin/ will contain symlinks that point into /usr/gcc/bin/*, /usr/make/bin/* and so on. Thus the only entry that need to be in the $PATH environment variable is /atheos/autolnk/bin/. pkgmanager can also search through /atheos/autolnk/* and remove all symlinks pointing to a given package to clean up before uninstalling it. If the "package" need to do some additional configuration it can include a "pkgsetup.sh" script or executable at the top-level of the package directory and pkgmanager will execute this script after building the symlink mirros. Similarily it can include a "pkgcleanup.sh" script or executable that will be executed after the symlinks have been removed again during uninstall. o The buffers used by the kernel debugger and for kernel debugging output has been redesigned to much better utilize the buffer-space. This means that normally all the kernel-output generated during bootup will make it to the /var/log/kernel.log file and that it is less likely that log-data will be lost during extream load or when large amounts of output is generated. o More API documentation. *NEW FEATURES* o Added a GetTabCount() member to os::TabView. o Support for mouse-wheel. Catalin Climov submitted a patch to the PS2 driver adding IntelliMouse wheel support. o Generic support for mouse-wheel in the GUI toolkit and specific support in various GUI controls like os::Scrollbar, os::Spinner, os::TextView, and os::ListView. o Support for mouse-wheel in ABrowse and ATerm. o Support for non-square views and windows by allowing applications to specify an optional clipping region that will be used to define the shape of the view or window. Still to low performance to be usefull for things like large round windows but can be used to make iregulary shaped views. o New os::MenuItem derved class that render a separator line. o New members in os::TextView for deleting ranges of text and inserting text at a specific position without "manually" moving the cursor and selecting ranges. o Support for adding restrictive clipping regions to views. The application can now pass a clipping region to a view to restrict what areas that will be affected by the various rendering commands. This can be used to reduce flickering and in some cases to speed up complex rendering operations. It can also be useful to clip text rendering to a predefined area since it is hard to predict how much space a string will cover on-screen. o New API for getting a file-descriptor to any of the ELF images loaded by a process aswell as to the directory where the executable was loaded from. This makes it very easy to get to the image files to load resources from them and it also makes it easy to make an application "position indepentent" since it is possible to open data files with paths that are relative to the directory where the executable is located. Now applications that need extra data files can store the executable and all the data files in a directory or directory-tree and the application can find it's data files no matter where the user move the directory since it will always open the data files relative to where the executable are. o A new function named get_image_id() that returns the image-ID of the DLL or executable containing the calling function. This is ueseful in conjunction with the API for getting a file-descriptor for a image file. This makes it possible for a DLL to easily find it's own DLL ID in order to load resources embedded in the DLL. The function will use the address of the caller to determine which image it lives in. o New constructors and SetTo() members in the various highlevel filesystem classes that accept open file descriptors. o The various highlevel filesystem classes will now automatically expand paths starting with "~/" with the current users home directory and will open paths starting with "^/" relative the the directory where the applications executable is located independent of the applications current-working-directory. o New classes for reading and creating resources within executable and DLL images aswell as a command line tool for adding, listing, and extracting resources embedded in executables and DLL's. o New class for parsing command line options. The class greatly simplify parsing command line options in CLI programs. It can also help the application printing a "--help" screen by automatically generating a help-screen for the command-line option by intelligently formatting the page to be easily readable with the current terminal width. o New regular expression searching class. The class help you to do regexp searches and matches on strings and support extracting sub-expression results in the form of sub-strings or by using the resulting substrings to expand a template string. o Support for TCP keepalive packages in the TCP/IP stack. Earlier versions didn't send or replied to keepalive packages so idle connections used to be cut by the peer after a couple of hours. o Support for disabling kernel debug output to a serial port. It is now possible to disable the serial output entirely by setting the baud rate to 0. It is also possible to change the baud rate and serial-port used at run-time with kernel-debugger commands from a local debug terminal. Note that the default baudrate has now been changed from 115200 to 0 so the serial output is disabled by default. To enable it again you can add "debug_baudrate=115200" to the kernel-line in "/boot/boot/grub/menu.lst" (or to temporarily enable it you can run the kernel-debugger localy with "dbterm -l" and set the baudrate with the "dbspeed" command). *BUG FIXES* o Fixed a render bug in the CPU monitor. o Fixed a bug in os::Font causing the size to be wrong when set to 10.0. o Fixed a bug in os::TextView causing glyphs to be rendered to high so the top of some glyphs was cut in some fonts. o Fixed a bug in os::TabView::DeleteTab(). When deleting the currently selected "tab" the view associated with the new selection sometimes got hidden. o Removed a memory leak from the os::TextView class. o Fixed a bug in the handling of double precision floating point values in the os::Variant class. Older versions rounded all double values to it's integer value before returning it. o Fixed a bug in the PS2 mouse driver that often caused a total lockup of the GUI. o Removed some memory leaks in the GIF and JPEG image translator aswell as the image loader in ABrowse. o Fixed a crash-bug in the ABrowse image scaling. o Fixed a bug in the history-system in ABrowse. The history was not properly updated when following links to anchor points within the same page. o Fixed some bugs in the ABrowse HTTP loader that caused premature aborting of a page-loading to leak memory and mix the content of the aborted page and the next loaded page. Since 0.3.5: o Fixed some bugs in the escape-code parsing in the ATerm terminal emulator. o Fixed a race condition in AFS potentially leaving files with link-count of 0 in the FS if a file/directory are attempted to deleted and moved simultanously by two different threads. o Fixed a race condition in the kernel potentially causing the parent process to segfault during a fork(). o Removed sevaral memory leaks from the kernel. o Optimized the event system in the TCP/IP stack. o Fixed a double-free bug trigged in the kernel when reaching the maximum number of file descriptors. o Fixed a bug in ABrowse causing it to constantly reloading webpages using dropdown menues for page navigating. o ABrowse now handle relative HTTP redirections. o Fixed a bug in the find_packages.sh script causing it to not correctly set the MANPATH variable. o os::TextView no longer forget to reset the mouse pointer when deleted while the I-beam cursor is active. o os::TextView no longer screw up tab-navigation when selected with the mouse. o Fixed a race condition in the os::Menu class. o Fixed a few render bugs in the software mouse pointer. o Reverted to the BIOS when setting up screenmodes on Matrox G100 gfx cards. The native mode-setting does not seem to work for this card. o Updated the nVidia driver to the latest version from Joseph Artsimovich. This fixes a bug causing PCI cards to not be detected unless they appear last in the PCI list and solves a problem with the mouse-pointer sometimes being invisible or garbled (by disabling it and fallback to SW pointer until the real problem is solved). o Made uname() ask the kernel for version information rather than returning hardcoded values from libc. Since 0.3.4: *MISC* o New web browser! AtheOS have finally got a high quality graphical web browser. I have ported the HTML parser/renderer used in Konqueror (KHTML) to AtheOS and written a web browser based on that renderer. The result is a very decent web browser. KHTML have support for both CSS and javascript and so have the AtheOS web browser. The port is not 100% complete but the vaste majority of features are supported by now. Many thanks to the KHTML team at KDE for making KHTML! It's a great piece of software. o Plugin based data translation kit. The kit is not finished yet and will probably change quite a bit in the furture, but it is included now as it is used by the new web browser to load images. o The desktop manager will not display a login prompt if started as non-root. o Added an ViewScrolled() hook to the os::View class that can be overloaded to be notified when the content of the view is scrolled. o os::Looper threads inherits the name from the looper. o Appserver window threads inherits the name from the window title. o Major overhaul of the os::ListView class: o Added support for variable-height rows (each element can have different height). o More flexibility when inserting rows. o List view elements can be made non-selectable. o The right edge of the last column is "glued" to the right edge of the view and the with of the column content is evaluated when adjusting horizontal scroll-bar. o It is possible to disable the column-header (useful when using it as a single-column listview). o Fixed some bugs regarding the horizontal scrolling. o Lot's of optimizing. The listview is now much more efficient in the handling of selection ranges and repainting. o Major overhaul of the os::TextView class: o Gives the application much more control over the content of the editor, it's cursor position, and selection regions. o Set/get function for the cursor position. o Members for programmed selecting areas of text. o Members for retrieving of the selection boundaries. o Character count limiting. o It is possible to intercept raw keyboard and mouse events by overloading the os::TextView class (didn't work before since all user input was handled entirely by a child of the os::TextView). o Much more flexible event system where many new conditions generate events (cursor moved, focus lost, enter pressed in single line editor, max-size reached, max-size left, etc etc). The application have full control over what events it wants the view to generate. o Much less "flickering" when repainting. o Updated the scrollbar class. Added arrow buttons and changed the rendering a bit. Also made the know jump "one page" when click beside it. o Added a "variant" class to the toolkit. The os::Variant is a container that can hold most basic types (like bool, int, float, etc etc) and some higher level objects (like strings, points, rectangles, colors, etc etc). The variant class is used as the "value" of the os::Control class to make it easy to support a wide range of GUI controls through the os::Control interface. The os::Control and os::Invoker classes is also sligtly changed with various new virtual "hook" members to make it simpler for inherited classes to keep track of changes made to the control by the application. o Easier file-browsing in the standard file-requester. o Upgraded "tar" to Version 1.13.19 o Suport for a wide range of nVidia cards added through a video driver submitted by Joseph Artsimovich. o Swedish keymap submited by Tord Jansson. o German keymap submited by Daniel Popescu. *BUG FIXES* o Fixed a bug in the lock_mem_area() kernel function. It sometimes failed to map all pages in the locked area to physical memory. This could lead to a system-crash in low-memory situations. o Fixed a kernel-crash bug trigged if a valid pagfault could not be served due to running out of memory or due to an IO error. o More robust handling of invalid messages sendt to the appserver. This makes it much less likely that a broken/malicious application will crash the appserver and bring down the GUI. o Fixed a bug in the relocation of executables and DLL's. The bug caused the GCC exception tables to be invalid and often made it impossible to catch C++ exceptions. o Fixed a bug in the script building the distribution archive. The old script faile to copy the SUID bit on executables thus rendering utilities like "su" unusable. o Made some changes to the disk-geometry detection in the BIOS disk device and relaxed some of the validation in the FAT filesystem (seems like many volumes have a total-size that reach 1 cylinder outside the partition). This might solve some of the problems people have had mounting a FAT partition to get to the base tarball. Since 0.3.3: *MISC* o Segmentation faults are now handled by sending SIGSEGV to the faulty thread rather than simply terminating it. o Changed the mount and unmount utilities to accept paths with trailing slashes. *BUG FIXES* o Fixed various bugs in the AFS filesystem driver. The AFS filesystem does not handle failed memory allocations and will spin forever retrying the allocation if the system run out of memory. I have now given the FS a full overhaul including a rewrite of the transaction-system to be able to safely back out of all operation if an error should occure in the middle of a journaled transaction. The new FS is also better optimized than before. I have read through the FS source line-by-line looking for bugs and fixing everything that looked suspicious but since so much have been changed I want to test the new FS over a longer periode of time than permitted before this release before releasing it. I have however back-ported the most important bug-fixes to the old FS and included that driver instead. o Removed some races in the realtime-clock handling. o Changed the serial-mode from 8n1 to 7n2 when communicating with the serial mouse. This should hopefully make the mouse driver work with Logitech serial mouses (Thanks to Linus Almstrom for pointing out what the problem was). o Swapped the device names of COM1 and COM2. They have been confused in previous releases. o Fixed a bug in the handling of global contructors and destructors. In some cases global contructors in a module was called more than once. This caused among other things the main-thread in the application-server to lock-up (making it impossible to start new GUI applications) when reloading plugins (for example when changing the preferred window-decorator). o The paint-message sendt to all views after changing the screen mode could previously request the full size of the view to be repainted even if the visible size was restricted by it's parent. This caused the ListView class to send an enormous amount of render commands to the application server which was buffered up and could end up consuming all memory and causing a system lockup. The update rectangle is now clipped to the parent view to solve this problem. o The accelerated gfx drivers is now included on the install boot floppies. Since those where missing from the previous disk-set it was impossible to install AtheOS on a machine with a S3 Virge video card (since it don't support Vesa20). o Added search paths to the "jed" editor and the various inetutils like "telnet" and "ftp". In previous releases there was no path to those binaries until the "/system/config/find_packages.sh" shell script had been executed. o Fixed the screen-shot support. The appserver that was included with the 0.3.3 release was compiled without screenshot support. Since 0.3.2: *NEW FEATURES* o New very efficient API for Thread Local Storage (TLD). o Thread safe "errno" variable. Each thread now have their own "errno" variable to make it possible to reliably check the error code returned by syscalls in multi threaded applications. This is implemented using the new TLD API and is almost as efficient as the old "global" errno. o New higlevel filesystem API. There is now a new set of C++ classes building a more highlevel FS API than the raw POSIX functions. There is also a few new syscalls primarily ment to be used internally by these classes but that can be used directly by applications aswell. The most important is "based_open()" that works like "open()" but with the additional capability of accepting a "temporary" working directory from wich the path passed in should be relative. o Node watching. This makes it possible for applications to monitor changes in the filesystem like files being created and deleted aswell as changes to individual files and directories like file-size changes, date-stamp changes and attributes being added, removed or modified. o The desktop manager use node-watching to keep the content of directory browsers current. o It is now possible to disable multi-selection and automatic sorting in the os::ListView. o Support for reordering/disabling of columns in os::ListView. o Better notification system to allow views to track changes made to the text-font. o Reference counting on the os::Font object to make it possible to share font objects between views. o The controlling PTY for a process can be opened through "/dev/tty". *MISC* o Optimized the clipping list handling in the application server. The GUI can now handle a lot more windows/views before a noticable slowdown when moving windows around occure. o Renamed some of the structures associated with the os::Font class. o Various improvement's in ATerm (the terminal emulator). o Various improvements in the CPU and memory usage meter's o Moved semaphores into "process-local" namespace-space. Earlier all semaphore ID's was globally accessible and was both a security problem and a technical problem especially during fork() since the new process continued referring to the old semaphores. It is still possible to greate global semaphores by passing an extra flag to create_semaphore(). o More documentation. *BUG FIXES* o Fixed a few small bugs in the AFS attribute system. o Fixed a deadlock in the os::Bitmap class. o Fixed a lot of bugs in the os::View::ScrollRect() member. The previous version proved to be rather broken and corrupted the moved rectangles when the scrolled area was partly covered by other windows. It also had a race-condition that could cause the appserver to crash. o Fixed a few bugs in the os::ListView selection system. o Fixed a few race conditions in the kernel. o Made STL and GCC exception-handling thread-safe. I implemented this in the EGCS compiler before but it appeared that the modifications got lost during the transition to GCC-2.95.2. Since 0.3.1: *NEW FEATURES* o Implemented the FIONREAD ioctl() command to TCP-sockets, pipes, and PTY's. o Support for logical partitions in the partition editor. o Support for renaming device-nodes from within device drivers. *MISC* o Better error handling in the screen-mode selection system in the appserver. The application server will now search for a functional screen-mode if the selected one can't be set. Earlier versions always felt back to 640x480 16bpp and caused the boot-floppies to fail if that mode was not available. This seems to be the last obstacle in running AtheOS under VMWare and several people have now anounced sucessfull AtheOS installation under VMWare. o Configurable default attributes in ATerm. The fg/bg color and other display attributes can now be set through a command line option or the ATERM_ATTR environment variable. o Modified the internal kernel->driver ioctl() interface to allow device drivers to know whether ioctl() was called from the kernel itself or from user-space. This was necessary to make it possible for drivers to validate pointers received from user-space whithout denying the kernel to pass inn kernel-addresses. o Started to document the kernel-driver API. Since 0.3.0a: *NEW FEATURES* o Most of the GUI components now can be disabled (grayed out) when they are inoperable. o The os::TextView control now send a notification message when the control loose focus to allow the application to learn when the user is done editing even if he don't hit the enter key. o A selection can now be made in the os::DropDownMenu by click-drag-release the mouse. Earlier two clicks was requiered. One to open the menu and then another to do the selection. o Exported a few thread safe IO functions from the kernel. This have the same semantics as read()/write()readv()/writev() but are postifxed "_pos" (ie. read_pos()) and take a file position from where to read/write so multiple threads can access the same file descriptor without being concerned about someone else moving the current file-position. o Implemented readv() and writev() in the kernel (they have been emulated in libc in earlier versions). o Added a "-kernel" option to GCC to make it easyer to set it up for building kernel-drivers. If "-kernel" is given it will automatically define __KERNEL__ and it will link the driver against the kernel instead of libc. *MISC* o AtheOS now have it's own partition-editor. It is a GUI tool that will be part of the installer that will eventually be used to install AtheOS. I screwed up when implementing support for logical partitions and must now redesign the GUI quite a bit but I have disabled support for logical partition and included the partition editor anyway since primary partitions works ok. o The appserver now support Vesa20 cards where the frame-buffer is not page-aligned (to be able to boot under VMWare). o The kernel takes two new boot parameters making it possible to restrict the available user address-space and allow AtheOS to be booted under VMWare. *BUG FIXES* o C++ exception handling now function correctly in code that has been loaded dynamically (through load_library()). This should hopefully solve the problems with the S3 Virge driver sometime crashing the application server when it probed for the card without finding it (it then throw an exception that due to the exception-handling problems was not catched). o Logical partitions are now interpreted correctly by the kernel. o The BIOS disk device now detects if the BIOS can not read/write across cylinder-boundaries even when using LBA mode and will then start truncating all accesses to fit within the starting cylinder. o The AFS filesystem now clears the two first sectors of the partition when formatting to avoid having the FS wrongly detected as the FS-type that lived on the partition before it was formatted to AFS. Since 0.3.0: *NEW FEATURES* o Added support for embeding of stage1.5 bootloader into the "bootloader area" of AFS, FFS, ReiserFS, etc etc. o Added support for logical partitions. o os::Button, os::TextView, os::Spinner can now be disabled or "grayed out". o It is now possible to force the min/max preferred width of os::StringView (like os::TextView and os::DropDownMenu) to a preset number of characters. *MISC* o Modified the BIOS disk block-device to only list one node per disk. Earlier two nodes was added, one for LBA access and one for CSH access. The reason was that some BIOS's report that they has LBA support without actualy having it making autodetection impossible. Now AtheOS attempts to autodetect but can be forced to use a particular mode on each disk through the kernel parameters. o Attempt to solve problems with IO errors when writing a large number of sectors by falling back to write 1 sector at a time whenever an error occure. This is just a temporary solution till the real cause is found. *BUG FIXES* o Window no longer resize to 1 pixel larger that set by os::Window::SetSizeLimits(). o os::Font::GetStringLength() sometimes included the last "partial" character even when "bIncludeLast" was false. o os::Spinner::GetPreferredSize() based the preferred width on the current height rather than the preferred height. This caused preferred width to change when the layout system initialized the height and caused some bad depenency problems in the layout code. Since 0.2.1: *NEW FEATURES* o Ported GRUB to AtheOS (or was it the other way around? :) and modified the kernel to be multiboot complient so it can be booted with GRUB. The port include a read-only version of AFS so it is possible to boot AtheOS directly of a native partition whithout the need to make ugly kernel block-list's for the boot-loader like for example with LILO. o Moved the BIOS block-device and the AFS filesystem out of the kernel since they can now be loaded separatly by the bootloader. o Changed the layout of AFS to make space for a boot-block and a boot-loader area. The new FS-driver is backward compatible with old filesystems but old kernels will not be able to mount new filesystems. o Optimized the layout of block-runs in AFS to reduce fragmentation and improve the user-data to meta-data ratio aswell as increase the maximum filesize. This does not affect the way the FS is read so there is no compatibility issues involved. o Fixed a bug in AFS that caused block-allocations to fail in some cases even if sufficient space was available on a heavily fragmented disk. o Added a hook for probing of filesystems in the FS API and implemented autoprobing of FS-type in mount(). The autoprobe functionality is also exported to user-space so applications can check if there is a FS driver for a given block-device or FS-image file installed on the machine whithout actually mounting it. o Implemented an API for retrieving mount-points of currently mounted filesystems and API's for retrieving various information like disk-label and size/usage of a mounted filesystem. Also modified the GNU fileutils "df" tool to use those API's to display usage info on mounted filesystems. o New API used by fs-drivers to initiate access to the block cache that will keep track of which devices/inodes are used for backing of other FS's. It is therefore now able to fail and return an apropriate error code if someone attempts to mount a device twice. o Implemented API's for retrieving information about message ports existing in the system and a tool (ls_ports) for listing various information about message ports. o Extended the semaphore-info API and wrote a tool (ls_sema) for listing various information about existing semaphores. o Rewrote the ELF loader in the kernel to remove some section alignment restrictions from the previous loader. This means that the executables is a bit smaller and that AtheOS can now use the standard linker-scripts from the GNU linker. The new ELF loader should also be more robust against broken executables. o Added support for floppy drives to the BIOS block-device. This should *really* be replaced with real floppy driver since it stop scheduling for *way* to long when calling into the BIOS for reading tracks of a floppy. o Implemented a RAM filesystem and various tools to aid making boot-floppies. The filesystem can initialize itself from a image-file on another FS or from a boot-module loaded by the boot-loader. The various tools can create a disk-image, split a compressed disk-image to spread it across multiple floppies and a program that can be used as the "init" script and will bootstap the system from a set of floppy disks. *MISC* o Reorganized the source-tree. The new tree is more hierarchial built and with makefiles in all directories that will build the current directory and all subdirectories. *BUG FIXES* o Fixed a critical bug in the initialization code that caused the kernel to dereference a NULL pointer and hang/crash if the memory-size was not 4MB aligned. o Allocates the BIOS disk-device IO buffers on a properly aligned address. o Fixed a bug in the BIOS block-device causing it to read/write sectors across cylinder boundaries and then fail on some BIOS'es o Fixed a bug causing the kernel to dereference a NULL pointer and hang if the memory-size was not 4MB aligned. o Fixed a few bugs in the os::LayoutView class causing child views to (in some cases) be smaller than it's max-preferred size even when more space was available. Since 0.2.0: *NEW FEATURES* o Added a Slider controll to the GUI tool-kit. o Added a progress-bar controll to the GUI tool-kit o Added a Labeled Frame controll for grouping of other components. o New layout system. The GUI toolkit now have a "semi-advanced" layout kit for making dynamic GUI's. The layout system greatly simplify writing font-sensitive apps and making windows relayout when resized. The layout-kit is still a bit "experimental" and will change a bit over the next few releases. o The os::Window class now support size-constraints. o It is now possible to set various alignment rules on a windows size and position. Useful for example when rendering text to make the window "snap" to the font-size. ATerm and Emacs is rewritten to take advantage of this. o The window flags can now be changed on-the-fly. o The view::GetMouse() now send a request to the appserver so it will get the most recent value even if the event loop is not running. o Added an API for setting the mouse-pointer position. o The os::Spinner control now wrap the mouse when hitting the top or bottom border of the screen to make it easier to make large changes to the value. o Added API's for setting the mouse-pointer image. ATerm, Emacs and the TextView control now set a I-beam pointer when above the text area, and the appserver change the mouse-pointer whenever the cursor is abow any of the resize-edges/corners of a window to indicate that it is possible to resize and in what direction it can be resized. o Configurable fonts. Added support for font configuration in the appserver and libgui and fixed up the font panel in the GUI preferrence utility to work with the configuration system. o Rescan button in the font configuration panel for rescanning of the font directory when installing/removing fonts without having to restart the application server. o Full support for UTF8 unicode text. o Kernel timers. Device drivers kan now register a callback that will be called once after a given periode of time or periodically at a given frequency. *NEW DRIVERS* o AtheOS now support the RealTek RTL8129/8139 ethernet cards. o Native FAT filesystem. This is a reqular AtheOS filesystem that access the partition through the block-cache instead of calling DOS functions like the old FAT FS. It is therefor *much* more efficient and it supports long filenames without the use of mapping tables. It also remove the last dependency on DOS. *MISC* o French keymap (Submitted by Herve PARISSI). o Rewrote the GUI Preferrence utility to use the new layout system. o Upgraded to FreeType 2.0 beta 8. This version have "autohinting" that greatly improve the quality of fonts that are missing hinting. o A few new API functions letting applications take advantage of tuned font sizes embedded in truetype fonts and to learn what sizes are available in a bitmap font. o Added support in the appserver for bitmap fonts through FreeType. o Rewrote the AFS filesystem to use memory areas instead of kmalloc()'ed buffers in the journal. It then avoid allocating large contigous ranges of physical memory, and thus greatly reduce the risk of running out of memory due to fragmentation. o Optimized the way blocks are flushed to gain more journal space in the AFS filesystem. This reduce the pauses caused whenever the FS run out of journal-space during meta-data intensive operations and has to force out some blocks in order to finish old transactions. o The first 4KB page is unmapped to catch NULL-pointer dereferences in the kernel. o Much better argument validation in system calls to avoid buggy/malicious programs crashing the kernel. *BUG FIXES* o The window title-bar no longer disapear when disabling one or more of the title-bar buttons. o Fixed some render-bugs in the drag-and-drop system. o Fixed a bug in the TCP/IP stack causing it to send wrong MSS. o Fixed a few NULL-pointer dereferences in the kernel (submittet by Jesper Hansen) o Fixed yet another deadlock bug in the block-cache. Since 0.1.4b: *MISC* o Renamed the members in the os::Rect class (MinX/MinY/MaxX/MaxY to left/top/right/bottom) o Renamed the members in the os::Point class (X/Y to x/y) o Renamed the os::Point2 to os::Point o Changed all coordinates from "int" to "float". o Added integer-versions of os::Rect and os::Point (Named IRect and IPoint) o Made the os::Rect::Width() and os::Rect::Height() return (right-left)/(bottom-top) rather than (right-left+1)/(bottom-top+1). os::Window::ResizeTo() and os::View::ResizeTo() is changed accordingly. o Fixed various members of os:: classes to take const references to objects like os::Point and os::Rect rather than a copy of the object o Replaces a few "const char*" to "const std::string&" and a few "char*" to std::string in the GUI classes. o Rewrote a few GUI components and the window-decorators to produce less flickering when resized. o Optimized the backdrop rendering in the desktop-manager. o Added a new appserver interface class for setting various preferences, the class is named os::AppserverConfig. o Support for moving windows to front when selected, without double-clicking the border or click on the "depth" button. o get_thread_id(name) now actualy search for the name if not NULL unlike the previous versions where it always returned the callers thread ID. It still return the ID of the calling-thread if name is NULL. o Various cleanup and small optimizations in the kernel. *BUG FIXES* o Fixed Emacs shutdown-sequnce so it manage to save it's window size and position. o Fixed a starvation problem where a high-priority network-thread started spinning when out of memory, blocking out any threads that might be able to get more mem by shrincing the disk-cache. Since 0.1.4: *NEW FEATURES* o Support for ISA DMA in the kernel. o Implemented chroot() o Implemented sync() o Fixed the user-attributes functions in AFS. o Changed exec() and load_library() to use the DLL_PATH environment variable when searching for DLL's *MISC* o Optimized the block-cache memory utilization. The 0.1.4 version wasted almost 50% of the RAM it used, the current version is down to 1-2% overhead. It also solved a problem with the 0.1.4 kernel getting the kernel-heap fragmented and ended up running out of usable RAM. Another benefit with the new cache is that it lives in a spearate memory area and is not interleaved with kmalloc()'ed memory so a random buffer-overflow bug in the kernel is less lightly to trash the cache and cause disk-corruption. *BUG FIXES* o Fixed a lot of dead-lock bugs in the VM/cache system. o Fixed a bug in select() on TCP-sockets. select() whould not wait for data to be ready for reading on a non-blocking socket. o Fixed a bug in the TCP send() function causing EWOULDBLOCK to be returned even if there was free space in the buffer of a non-blocking socket. o Fixed a bug in the TCP/IP stack causing recv() to block even if the receive buffer was empty and the other end had closed the socket. Since 0.1.3: *NEW SOFTWARE* o The Python programming language. o RSync *NEW FEATURES* o Rewrote the block cache to be dynamically resized to better utilize available memory. o Changed the readahead scheeme to better handle cases where blocks are fetched lineary but backwards. o Redesigned the locking scheeme in the block-cache to allow threads to lookup old blocks while new blocks are being loaded and to allow loopback mounting of filesystem. o The memory monitor displays total cache size and dirty cache size. o Added readv()/writev() functions to the filesystem and device-driver interface o Added support for select() to the device-driver interface o Ethernet drivers can be replaced at runtime (without rebooting). o Changed slashes to back-slashes when accessing the underlying FS in DOSFAT. o Extended the screen mode API to make it possible to set the refresh rate and display size/position. o The Matrox GFX driver support hardware pointer on Millenium cards and supports adjusting refresh-rate on Gxxx cards. o Fixed a few bugs in the S3-Virge driver and added support for adjustable refresh-rate. o The screen-mode configureation is properly saved. o The color configuration is properly saved. o Added a GetIdleTime() member to os::Application to make it possible to query the time since last input event (For screensavers, etc) o The bmview utility can now view png bitmaps o os::TextView automaticly add scrollbars when needed. o Editing in os::TextView can be undone (-) o Optimized os::TextView and reduced the flickering when inserting text. o Added a "numeric only" flag to os::TextView o os::DropDownMenu can be canceled by hitting outside the selection box o Reduced the flickering in the os::DropDownMenu o Improved mouse handling in os::DropDownMenu and os::Menu o Menus (regular and dropdown) no longer cause the active window to loose it's "focus highlighting" o The os::Spinner view now accept input from the edit-box o Better optimized os::Message o Hotkeys for terminating applications and closing windows. o API to iterate the contents of an os::Message o API to delete individual elements in an os::Message *BUG FIXES* o Initiate the TLD pointers on childs of a forked process. o Fixed a bug in the "#! interpreter" handling in execve() o Fixed a bug in os::Slider. o Fixed a bug in the appserver config file parsing that made it fail to load the color configuration. o The "ALT-Tab" window selction menu is now centered on all screen modes o os::Menu::GetItemAt( int nIndex ) always returned NULL. o Fixed a bug in the appserver crashing it when a "active" window on a "non-active" desktop was closed. o get_thread_id() does no longer crash when called from a forked process. Since 0.1.2: *NEW SOFTWARE* o Port of the QMail mail-server. o New port of Bind (with named, and all other binaries/libraries). *NEW FEATURES* o Unix style named pipes (mkfifo()) o File record-locking (flock()) o Loadable network drivers. o Added various ioctl() methods for configuring network interfaces. *MISC* o Major speedup on normal pipes (created with the pipe() syscall). o Major cleanup of the network stack, mainly the ARP protocol to allow more than one active ethernet interface. o Support for non-blocking UDP-sockets. o Almost total rewrite of the IP routing. o Major cleanup of the PTY filesystem. It now handle -d properly. o Various cleanup in the different API's used by device-drivers and file-systems. *BUG FIXES* o Fixed a bug in the Vesa2.0 and S3-virge video driver. The bug caused the memory-area used to access the frame-buffer to be unaligned (not on a 4K boundary), and made the appserver miss the frame-buffer with up-to 2048 bytes. o Added checks in create_area() and clone_area() to detect attempt to create areas on a not page-aligned address, and fail if so. o Fixed some memory leaks in the kernel. Since 0.1.1: *NEW FEATURES* o Support for partition's on hard disk's. It is now possible to create a AFS filesystem on a partition. no need to set aside a whole harddrive. o get_system_info() will now fill out every members of the SystemInfo_s structure. o A new plugin API in the appserver making it possible to replace the window border-decoration. o Configurable keybord settings (keymap and timing). o Configurable default colors used in the GUI. o New preference program to configure the the GUI apperance and keyboard settings. o The View class now remember it's "hidden" state so it is safe to call Show() before it is added to a window. o A new Start() member in the Window class making it possible to start the message loop without making the window visible. o New GUI control: There is now a TabView available in the GUI toolkit. o Added Invalidate( bool bRecursive ) and Invalidate( const Rect& cRect, bool bRecursive ) members to the view class. o The appserver now respects the WND_NOT_RESIZABLE flags for windows. o TextView can now be set in read-only mode. It will then stop handling mouse and keyboard input, and pass those events back to it's parent. o Read only mode for the DropDownMenu. When set in read-only mode, the menu will be opened when the user click in the edit box. o Various improvements and bug-fixes in the high-level message passing system. It is now possible to do syncronous send/reply communication with the Message and Messenger classes. It is also possible to use the Messenger class to pass Message objects without involving a Looper. *MISC* o Redesigned large parts of the libgui.so/appserver message protocol to make it easier to add new appserver interfaces. The changes do not affect the external API's. o More API classes have been documented. o Documentation of the coding-style used in AtheOS. *BUG FIXES* o Fixed a bug in the Vesa20 video driver that scrolled the display vertically, making it wrap. o Removed a race condition in the Window constructor and destructor. o Bugfix in the NE2000 driver. It used a bad index when looking up the vendor name of a PCI card. o Fixed a bug in the kernel making it crash when disabling SMP. o Rewrote the quit message handling in the Looper class to avoid some deadlocks. o Verious bugfixes/improvements in the TextView class.