---------------------------AmigaOS 3.2 project ----------------------- Changes for release 47.1 (30.12.2018) - Increased the default stacksize for CON:, RAW:, PRT:, SER:, PAR:, RAM: and the FFS. - Forgot to pass the file system task in a2 in ExAll(). - The dos.library includes come now from the system includes and no longer from a private directory. This makes it easier to keep them consistent. - added the new tag SYS_CmdStream to SystemTagList() which delivers the command input as a stream, not as a string. Changes for release 47.2 (23.3.2019) - The BCPL-inherited functions FWrite() and FRead() were terribly slow as they went through the low-level I/O byte per byte. Both functions attempt now to read entire blocks of bytes, and even more so, now attempt to burst, i.e. go directly down to the "virtual file system" of the dos.library. Changes for release 47.3 (21.4.2019) - PrintFault() prints now over pr_CES if it is non-NULL such that error output can be redirected with *> as it should. - This release now finally supports NP_Error and NP_CloseError, unlike V40, which claimed to support it, but in fact did not. To stay compatible with V40, the default for NP_Error is NULL, *NOT* Open("NIL:",...), and the default for NP_CloseError is FALSE, not TRUE. The process flag itself is identical to Os 4.0. - Fixed compiler warnings (typecasts, unitialized variables) - SYS_Async now also works for System() calls with a NULL command or SYS_CmdStream. This can (and should) be used as a replacement for NewCLI. For that, supply SYS_Async=TRUE, SYS_CmdStream = Open("S:Startup-Sequence",...), SYS_Input = Open("CON:",...) and SYS_Output=0, and you get a new shell. - System() has a number of failure cases. In case creating a new process failed, System() erroneously also released an input stream supplied by Run (though run releases it itself) and erraneously also released SYS_CmdStream on error. The streams are, however, only adopted by the child shell in the success case. - NP_Name was ignored by System(). Instead, the new process always received the name "Background CLI". Fixed. - With this release cli_init_newcli() becomes obsolete and will be removed in future releases. - System() now only prints its "magic information" strings as a service for run only if pr_COS is non-zero. - Adds the V50 functions PutErrStr(), GetCurrentDir(), ErrorOutput() and SelectErrorOutput(). - Reserved slots for multiple other V50 functions. Changes for release 47.4 (29.04.2019) - Added VolumeRequestHook() library call to enable relaying DOS Volume mount requests to external programs ("AssignWedge") - Updated makefile to generate dos_lib.fd from dos_lib.sfd - Makefile said VERSION := 40, changed to 47 Changes for release 47.5 (09.05.2019) - CliInitRun() may have had an MuForce hit of the original creating process had no CLI but provided an Output channel. - In case allocating a new process failed, CreateNewProc() erraneously tried to FreeVec() the seg-array of the not-yet available process, but this segarray is not created by AllocVec, hence the result was a memory corruption. - In case the dos.library finds the bootstrap module, it will start this instead of the shell, and it does not attempt to find any other modules then. Creating the runtime environment is then up to bootstrap. Changes for release 47.6 (10.06.2019) - When patching in a default stack size for a file system, the dos.library init code did not take care of the different units the stack size is measured in. It is in LONGs for BCPL style handlers, but in BYTEs for C-style handlers. Since the default was "512" (whatever unit), this caused very tight limits for C-style handlers. This got fixed. Changes for release 47.7 (11.06.2019) - When mounting handlers, the handler segment is now scanned for the magic $STACK cookie, and the stack size is adjusted accordingly. - Recompiled with registerized parameters for string functions. Changes for release 47.8 (21.06.2019) - Obsoleted CliInitNewCli() and CliInit(). Both functions end now in a dead-end alert as they are no longer implemented. The shell startup mechanism depends now solely on CliInitRun(). - The dos.library init code no longer falls back to the legacy init method, it requires now system-startup to take over. - Quite like the previous releases, newshell (or a System() call that implements newshell) no longer prints the CLI number of the shell that was just created. Changes for release 47.9 (26.06.2019) - The dos.library startup code no longer mounts the boot point mounts from expansion. This is now handed over to system-startup. - The dos requesters no longer use intuitionbase from the GlobVec but open it. This allows easier relocation of Intuition. Changes for release 47.10 (29.08.2019) - In case WFPrintf receives an invalid argument to the template, it is now substituted by a question mark instead of just printing nonsense. Changes for release 47.11 (01.09.2019) - The BCPL IO functions were further improved by inlining some of the common code for put and get. Changes for release 47.12 (26.09.2019) - The dos.library Abort handler is now register-transparent and returns with the user selected registers and parts of the supervisor stack frame into the exec exception handler, which is usually the ROMWack. Changes for release 47.13 (29.09.2019) - The maximum size of the stack frame to be copied in case of an exception is now 256 bytes for unknown or corrupt stack frames. - Invalid task names are now printed as . Changes for release 47.14 (09.10.2019) - Mounting a BCPL-style handler (there are not many left, though) leaked 20 bytes of memory when the handler exited as the emulated BCPL library forgot to add the memory of the seglist to the list of allocated task memory. Changes for release 47.15 (27.10.2019) - Extended the ExtendedCommandLineInterface structure by a back pointer to ease identification. Changes for release 47.16 (13.11.2019) - Recompiled for the longer ExtendedCommandLineInterface. Changes for release 47.17 (26.11.2019) - The object code(sic!) that is used by Lock() and many other LVOs ensures now long-word alignment of its stack. - Removed some dead code and obsolete files from the source. - Extended ReadArgs() to make use of the new function. - Added the DoShellMethod() function to request functionality from the shell such as to perform TAB expansion. Changes for release 47.18 (1.12.2019) - Enlarged the eCLI structure again to make it a bit more extensible. Changes for release 47.19 (22.12.2019) - SetVar() clears now the e protection bit of the variable it set. - In case a variable path included //, SetVar() would have run into an endless loop and the ultimately crashes due to running out of stack. Changes for release 47.20 (28.12.2019) - Added tags SYS_InName, SYS_CmdName and SYS_OutName to System() to open a stream in the context of the shell and not in the context of the caller. - System() could still leak resources in case it opened one of its streams itself but a later stream open failed. - When deleting an environment variable, the dos.library leaves now an unreadable dummy file in ENV: behind, such that RAM: does not attempt to replace it from a saved copy from ENVARC: again. The shell primitives $?var and $var work correctly with this construction. In how far shell scripts are affected still remains to be seen. - Improved the autodocs for System() by quite a bit. Changes for release 47.21 (26.1.2020) - Failures to read a long word within LoadSeg() and friends did not return a usable failure code. Changes for release 47.22 (22.12.2020) - Added an experimental buffered implemention of the *Printf family of functions, which is significantly faster. It is not enabled by default, but will replace the original implementation if the preprocessor symbol USE_BUFFERED_PRINTF is defined in bcplio.c and io.asm and both files are recompiled. Code size cost is 12B. Some A3000 030@25Mhz benchmarks where plain strings are printed to NIL: - Iter: Number of iterations of the test - Len: Length of the string used as input to the function - Printf: Runtime for original Printf() in seconds - PrintBuf: Runtime for buffered Printf() in seconds - RawDoFmt: Runtime for underlaying RawDoFmt() - Printf-RDF: Runtime minus RawDoFmt() runtime for original Printf() - PrintBuf-RDF: Runtime minus RawDoFmt() runtime for buffered Printf() - Ratio: Ratio between original and buffered Printf(), using Printf-RDF/PrintBuf-RDF. Iter Len Printf PrintBuf RawDoFmt Printf-RDF PrintBuf-RDF Ratio 160 625 3.312 1.661 1.049 2.263 0.612 3.697 800 125 3.524 1.829 1.248 2.276 0.581 3.917 4000 25 4.497 2.880 2.048 2.449 0.832 2.943 20000 5 9.649 8.067 6.237 3.412 1.830 1.864 100000 1 35.430 34.545 27.050 8.380 7.495 1.118 Changes for release 47.23 (2.1.2021) - Permanently enabled the buffered implemention of the *Printf family of functions.