Jump to content
Muxe Inc Forums

AngelsHolocaust

Members
  • Content count

    651
  • Joined

  • Last visited

Posts posted by AngelsHolocaust


  1. Hi Basil.

     

    Mo  Tu  We  Th  Fr  Sa  Su
    28  29  30  31   1   2   3 │ 53 
    4   5   6   7    8   9  10 │  1

     

    I have compared this to 2 German paper calendars at work and a few

    on the internet.

     

    Also read here:

    http://www.merlyn.demon.co.uk/weekinfo.htm#WkNo

    The first Week of a Year is Number 01, which is :-

    defined as being the week which contains the first Thursday of the Calendar year; which implies that it is also

     

    The last Week of a Year, Number 52 or 53, therefore is :-

    the week which contains the last Thursday of the Calendar year;

     

    I am pretty sure that the calculation is correct.

    Please recheck this with a few calendars where you live.

     

    Thank you,

    Stefan / AH


  2. Hi!

     

    What about utf-8 support?

    Have not worked on it yet.

     

    Whatsnew TODO section:

    SCREEN / VIDEO MODES

    + LNX: UTF-8 (unicode) screen draw support (VK LFS)

     

    I won't give any time frame or similar.

    It will be done when it's done and you will read it in the posted news.

     

    Sorry for not being able to give positive feedback.

     

    it work great! big thanks!

    Do you mean NDN on Windows 64-Bit systems?

    Sorry, I was not specific enough: NDN reportedly didn't run on (some?)

    64-Bit Linux distributions and I hope that the ELF fixes fixed this issue...

     

    Stefan / AH


  3. Hi everyone,

     

    long time no see! :)

    I hope you all had a good year 2010 until now.

     

    As you can judge from the not much advanced build counter there have not been much compiles of NDN

    since it's last release. Main reason for this (see the news) is PE2ELF:

    NDN for Linux should now work again on old (more strict?) kernels.

    I also hope that it now works on 64-Bit systems

     

    Besides that I've (hopefully) fixed the remaining file execution bugs

    that I've introduced with the last releases!

     

    Whatsnew:

    ─════┤ v2.31.5309 DPMI32/WINDOWS/LINUX 22.03.10 ├═══════════════════════════─
    CONFIGURATION FILES
    [*] NDN.QDR/W32: added more Windows directories
    [*] NDN.HGL: the Pascal FILES line was extended with regex pattern >PROGRAM|UNIT<
    [+] HGROUPS.INI: Added *.mts;*.m2ts
    
    TARGET OS/VIRTUAL PASCAL COMPATIBILITIES:
    [-] W32/WinNT+: Window titles did not handle kyrillic correctly {G} [A]
         -> wintitle.SetTitle() now correctly checks for WindowsNT
    [-] LNX: PE2ELF didn't create fully working ELF executables - failed
         on older LINUX distributions like RedHat Linux 7.3 (Kernel 2.4.18-3) [A] (Akser)
         -> Rewrote PE2ELF (did cost me most of the time since the last release!)
    
    TURBOVISION: VIEWS/DIALOGS/MENUS/OBJECTS/MESSAGES/DESKTOP
    [*] Inputlines: English <-> Russian only worked on marked data [N]
         -> dialogs.TInputLine.HandleEvent() now uses whole data if nothing is selected
    [-] Clipboard insert into hexline crashed NDN [A]
         -> dialogs.TInputLine.HandleEvent() destroyed the contents of
            drivers.TEvent.InfoLong
         -> replaced dialogs.TInputLine.LastCommandWas with IsHexLineEvent
         -> added drivers.TEvent.InfoDetail
    
    DNEXEC/EXTERNAL VIEWER,EDITOR/EXECUTE EXT/LOCAL,GLOBAL MENUS
    [-] W32/D32: Extensions from %PathExt% environment variable were ignored [A] (Dandv)
         -> moved dnexec.Executables to filetype (private) and added wrapper functions
            (Add|Get|Is)ExecutableExt()
         -> dnexec._ExecString().CheckWhatParams() now uses filetype.IsExecutable()
         -> fileio.SearchPathEnv() uses GetExecutableExt()
    [-] W32/D32: Executing file in same dir without extension failed with
         'Command "." not found..." [A] (Rugxulo, Marcos Favero Florence de Barros)
         -> fileio.SearchPathEnv() used "/" instead of "\" in ".\<file>",
            now using SysPathSep()
    [-] LNX: non-ELF executables were randomly executed [A]
         -> filetype.IsExecutable() didn't provide an ASCIIZ to stat()
    
    INFO PANEL
    [-] Resizing the window shows renadom colors and bad strings (Slavik)
         Hangup on FTP-VFS [A]
         -> infopane.TDiskInfo.Draw() used shr 1 instead of div 2 which led
            to bad results for string length calculations
    
    SCREEN / VIDEO MODES
    [-] Video mode setup: Mode 1/2 were not saved to .ini on exit [A]
         -> dnutil.TDnApplication.HandleCommand()ChScreenMode() didn't notify
            the configuration change in startup.ConfigModified

     

    Download: http://ndn.muxe.com/download/

     

    See you soon again I hope,

    Stefan / AH


  4. Hi RayeR and Dan.

     

    Wow, seems that you had fixed compatability issues of DOS DPMI version under Win2k/XP. Now it starts up fast and work smooth without any short hangs. Calling commandline batches from ndn.ext works fine too. So thank you for the xmass gift :)

    p.s. where can I get source of winoldapp.dll? I'd like to try make own VDD in mingw32 so just for inspiration. I didn't find many tutorials covering a VDDs...

    EDIT well I missed that, bottom of DL page...

    Nice to hear that it works for you. I feared that it would end up in more problems on other

    systems that I tried to solve with it.

     

    Hey AH, thanks for the Xmas version!

    That directory is ?%UserProfile%\Eigene Dateien\ :)

    Lol, yes!

    I just added the english version of the path: ?%UserProfile%\My Documents\

    Unfortunately there's no direct environment shortcut to this directory, as many programs

    open that directory by default.

     

    Bye,

    Stefan / AH

     


  5. Hi friends.

     

    This release does not contain as much updates as I wanted it to have.

    After all, it does contain some nice updates though.

    Real life kept me busy, but it's getting "better". :)

     

    I especially want to point out to NDNOLDAP, which mainly I wrote out of

    interest for the "technology" of virtual device drivers.

    The sources can be downloaded from the download page.

     

    Whatsnew:

    ─════┤ v2.31.5222 DPMI32/WINDOWS/LINUX 12.12.09 ├═══════════════════════════─
    [*] W32: dnos.CheckOS() didn't set opWin for WinNT+ OS's, D32 did
    [+] added filetype unit and moved several functions there:
         dnexec.(Win32Program|GUIProgram)(), fileio.(IsElf|IsExecutable)()
         -> removed flpanelx.ExecFile_Rights, improved IsExecutable()
            to read the UNIX rights from the current filerec in panel
            or from the file on disk
    [!] Exceptions were always unknown / unhandled
         -> drivers4.InitDrivers() sets system.ExceptObjProc to nil
    
    CONFIGURATION FILES
    [*] NDN.EXT/DW32: added Borland DLL to c,cpp[], NASM to asm[]
    [*] NDN.MNU: added Winamp example
    [*] NDN.QDR/W32: added more Windows directories
    [*] NDN.HGL: updated the keywords for assembler files (Slava),
         added RegKeyWords[1-8] to the *.HGL syntax definition
    [*] NDN.HGL: added standard TabSize (commented) and OptimalFill Off
         to several definitions
    [*] New default option: File Manager.Setup.[X] Don't quote LFN, clipboard
         -> added commands.fm2DontQuoteClip to startup.FMSetup.Options2
    
    DNEXEC/EXTERNAL VIEWER,EDITOR/EXECUTE EXT/LOCAL,GLOBAL MENUS
    [-] Detection of WIN32 GUI executables didn't work anymore [A]
         -> dnexec._ExecString() didn't handle the file extension correctly
    [-] Exec file search priority order was still not correct [A] (Dandv)
         -> fileio.SearchPathEnv() now doesn't use dos.FSearch() anymore,
            which scans all directories for one filename instead of scanning
            each directory for all filenames
    [*] NDN.EXT/External user menu boxes didn't use desktops > 25 lines
         -> usermenu.ExecUserMenu() now uses menus.THugeMenuBox.InitAdv() to create
            the menu box
    [-] EXEC/WNT: Executed filename had an trailing space (see "echo %0") [A]
         -> dnexec._ExecString().CheckWhatParams() didn't trim whitespace before
            enclosing in '"'
    [*] D32/W32: Execution improvment if a program is no executable
         -> dnexec._ExecString().CheckWhatParams() allows non-executables
            to be started asynchronously like windos GUI applications;
            this automatically starts the associated Windows program
         -> dnexec._ExecFile() allows non-executables to be executed in
            Windows if there's no association in ndn.ext
         -> W32: Note that bat/cmd files cannot be started asynchronously
            for some reason (CreateProcess + Detached_Process):
            can someone help here?
    
    WOA/WINOLDAP (D32/NT)
    [+] Wrote a WinOldAp replacement for Windows NT+ Operating Systems, supporting
         PROTECTED and REAL MODE calls, usable in DPMI programs
         -> added winoldap.pas, winoldif.pas, ntvdmif.pas to extsrc\winoldap.dll
    [+] Supports: MS Windows WinOldAP Clipboard, MS Windows95 Window Title
    [*] D32/NT: Window title functions are no longer disabled
         -> removed WinNT checks from wintitle.(Set|Get|Init|Done)Title()
    [+] Added "Release Current Virtual Machine Time-Slice" (Int 2F/AX=1680h)
         -> added winoldif.WoaReleaseVmTimeSlice() using windows.Sleep(5)
    
    KEYBOARD
    [+] Added Ctrl-';' {C}
         -> added commands.kbCtrlSemiColon, extended drivers.MyKeyShiftCodes[]
            and driversMyKeyScanCodes[]
    
    TURBOVISION: VIEWS/DIALOGS/MENUS/OBJECTS/MESSAGES/DESKTOP
    [*] removed this as it's not helpful
         [*] Inputlines [LEFT/RIGHT]: Pass the event on to the next view if at the
             beginning or the end of the inputline
             -> Modified dialogs.TInputLine.HandleEvent().kb(Left|Right)
    [-] Huge menu boxes now correctly center [A]
         -> menus.THugeMenuBox.InitAdv() now uses Options.ofCentered to center
            the view (see W32.Context menu)
    [-] Clicking on help buttons didn't work {C}
         -> dnutil.TDnApplication.HandleCommand().cmHelp didn't handle
            Event.InfoWord correctly
    [+] Added reverse word/sentence operation {C}
         -> added stringsx.Reverse(Str|Buf)(), modified stringsx.FormatStrCase()
         -> added kbSemiColon to dialogs.TInputLine.HandleEvent()
    [*] MENUS: When copying strings to clipboard the hotkey '~'s are removed
         -> added drivers3.CStr2Str(), used in menus.TMenuView.Execute().kbCtrlIns
    [-] Non resizable views could be resized with mouse after [CTRL-F5] (Slava) [A]
         -> views.TView.DragView() didn't check whether move or grow were allowed,
            now checking the mode parameter
    
    EDITOR
    [+] Added reverse word/sentence operation {C}
         -> added commands.cmReverse(Block|String|Word)
         -> modified microed6.EditorHandleEvent() and micro_3.EdChangeCase(),
            micro_3.EdChangeBlockCase()
    
    DBF VIEWER
    [*] removed Day_in_month: array now use timedate.DaysInMonth {G}
    [-] fix foxpro's DateTime field {G} (Zaimskih)
         correct Edit Field with TimeDate value
    [-] fix display integer fields {G}
    [-] fix search in all fields {G}
    [+] add Alt-F7 hotkey = SearchReverse {G}
    [-] Fix incorrect show last modified date {G}
    
    LANGUAGES
    [*] Russian: updates/translations to the resources and online help {G}
    
    FILE PANEL
    [!] Context Menu:
         * crash when opening '..' and too many files in dir (HUNTER) [A]
           -> contextm.c didn't provide the LPITEMIDLIST itself but a reference to it
         * crashes on menu exit: drivers@493, views@1421, ... [A]
           - menus.THugeMenuBox.Init() didn't handle long title strings
           - contextm.p_OpenWinMenuInTV() inserted menu but didn't remove it
         * One of the above also fixed the usage of OleFlushClipboard(), which makes
           it possible to copy files via the context menus
    
    LANGUAGES / RESOURCES (RCP) / HELP (TVHC)
    [-] Screen saver setup title was missing characters [A] {C}
         -> last string in ndn.dlg was not correctly saved
         -> rstrings.TIdxMaker.Done() used a bad loop start value: 0 instead of 1
    
    GAMES
    [-] Piton and Tetris will pause when the user screen [ALT-F5] is on [NC] {C}
         -> game_(pit|tet).TGameView(P).Update() checks for usermenu.UserScreenIsOn

     

    Download: http://ndn.muxe.com/download/

     

    I wish everyone of you a Merry Christmans and a Happy New Year.

    See you again in January 2010.

     

    All the best,

    Stefan / AH


  6. Hi Dan,

     

    I know that there are issues.

     

    I think about using built in CRC sums to compare files (perfect for all modern archivers).

    Extracting files is the last consequence of course.

     

    For this I want to implement a new file access layer which should abstract the deletion or file

    copy handling from the actual accessed VFS.

    With this FTP and ARC should work out of the box with all existing features of NDN.

    Probably won't be trivial, but it's pretty important to me.

     

    Btw, I am working on a new release for this week,

    sorry for another long delay...

     

    Stefan / AH


  7. A bang can be simply a compilation failure, or even a fully working port at

    an initial glance (with problems showing later). If you have this a couple of times over the

    7-8 years that the dosport is unmaintained and only provisionally/minimally fixed in an hurry

    just before a release, at a certain point the chance on this is bigger than that it will simply work.

    (and of course you don't notice the things that simply keep working, we are already talking about the exceptions to that here.)

    Ok, I didn't think of BANG like you did.

     

    And that is the bitrot bit. The first change is not the problem, the strain of many changes and

    quick fixes over years is. If you have one problem only, you can quickly binary search to the

    cause and resolve it. If you encounter many problems just before a release, often the causal

    bond between what happened cannot be found so easily.

    I do understand, your Unicode bit from down below is a good argument for this.

    Still I claim that bitrot can be prevented or minimized by carefully planing and updating APIs.

     

    Keep in mind we are talking about 25000 commits from 20-30 persons in 3/4 million of lines of code,

    many of which are quite sensitive.

    We've been talking about big projects all the time...

     

    This works perfectly indeed. But only in frozen systems that are minorly bugfixed. Not in actively developed systems. Currently

    FPC is gearing up to do unicode, and have modes where the default string type is unicode. For DOS there is more work to do than

    for other systems, and a lot of existing code needs to be checked for unicode cleanness, who is going to do it?

    You probably expected the next answer from me:

    "The ones that implement a feature that has such an impact on the program."

    If a target does not support unicode or not yet, make sure it doesn't "bang".

    If possible make "fall through" code available that will handle these cases without touching the target system that may be in the

    need of a rewrite to support the new feature.

     

    Of course, if developers do not see or value the whole project (i.e. each target) then the target or project is lost...

     

    I think this is unfair. I don't like the choices they have made either, but they are from a different culture, and there actually were damn

    good reasons for them at the time.

    Attributing them to laziness just shows you know nothing of the topic or culture.

    Who is being unfair now?

    The fact that NDN works quite well on GNU/Linux proves that I know more about "them", whatever "topic" and "their culture" than you imply that I know of.

     

    I do think *nix development, specially the free ones hasvea tendency to be too evolutionary, and not phase the evolution properly. This is

    an opensource disease. But like many open source disease, all are responsible, since there is simply nobody to be found wanting to do

    that work.

    Yes, that's another thing that I'd like to my bitrot list from my last post:

    - Project can be left and unmaintained at any time, no matter if finished or not, since it's open source and someone else can pick it up

    An entertaining site on this: http://linuxhaters.blogspot.com/

     

    And there is a parallel here with Virtual Pascal. Most of its users have been ostriches too long too, and now must face the whole transition in one

    short time, or give up. And that is painful, very painful, and much more painful than needed, but it is their own fault. They have known that there was

    a fair chance that VP was doomed since at least 2003.

    There's no good moment to replace a complete development system. This is a choice of all or nothing.

     

    NDN: you'll have to go to a new compiler first,

    ...then I should port everything to C/C++ to solve all future problems and make all target operating systems possible.

     

    and that was what this thread was originally about.

    True.

     

    Anyway, I have a 2.4.0 to get out. I hope to have a RC ready this year.

    Good luck.

     


  8. Hi Marco!

    I wanted to end this thread, but I found a few arguments that I had to answer to. :)

     

    The OS code plugs into the generic part of the RTL, that is updated/extended etc. Some OS dependant

    part doesn't contain proper initialization for the new part and BANG.

    So, shouldn't the updated RTL be able to handle the fact that not all targets will

    be on the same level? At least there should be no BANG. :)

     

    That is something from the software development education ivory tower.

    True.

     

    Even though it's true, no abstraction that models something real world is ever perfect, specially when large enough.

    The abstractions are occasionally adapted, and not every adaption or extension of the abstraction is entirely without code changes in platform dependant code.

    (e.g. due to initializations). Typical reasons are OSes and architectures getting added or mutate,

    increased Delphi compatibility (which can

    be surprising lowlevel), which require a (slightly) different or wider abstraction.

    Agreed - I just think that all these reasons should not render a port useless, even if it's not at

    the same level as the most popular ports.

     

    Moreover, how do you know that the abstraction really saved you without testing it, and you haven't violated it? And then we

    were back to the fact that those platforms (OS/2 and Dos) are only stressed around releases and not

    continuously during.

    That's true too of course, if you break or change an abstraction layer that already worked...

     

    In the FreeBSD/Linux kernel project, they have a word for what happens with unmaintained code that is not validated as the code

    around it changes: BITROT.

    My favourite topic... Bitrot is especially true for Linux and FreeBSD where the "developers" behave like this:

    - Source code is the best documentation

    - No need to keep APIs or constants "constant" because the source code is available and can be recompiled on any system anytime

    - Writing APIs or drivers for freaks not end users

     

    But let's not continue too much on this...

     

     

    Then it is a bad boss. Productivity and risk management arguments should appeal to a boss. Is your boss an ex-salesperson? :-)

    Mine isn't. :P

    No productivity at all while the months that will be spent without producing any new value, i.e. feature improvments or corrections.

    The risk of breaking existing functionality, esp. in large and/or complex projects. Even more in "dangerous" software projects that

    involve machines f.ex.

     

    And the problem with the customers is why you try to explain that in the first place? They don't have enough context to understand it anyway. Just do the migration and change a few colors. Done.

    The customer might be interested in the reasons for why he get's a software update.

    If his system or machine won't work afterwards you might have to explain why.

     

    Seriously, enough with the BOFH talk, if this were universially true, why aren't we doing our accountancy records like the Flintstones did? Carving them in stone? It works in principle, and you never have to account for a migration to a new technology. Right! productivity goes down the drain.

    High productivity can be interpreted in several ways:

    - concerning NDN: many releases with new features and bug fixes each year, introducing less to no new bugs per release, maybe even adding a new OS target someday

    - concerning my company: selling many machines each year, with hardly any stop times, producing a lot of material the customer can sell

     

    Stefan / AH


  9. Hi Dan!

     

    The cursor = TAB feature is pretty old already.

    You maybe never realized it until now? :)

     

    In the last release I only changed the behaviour of start and end of the inputlines.

    But I found out that this "feature" is not intuitive and I decided to remove it again

    for the next release.

     

    See you,

    Stefan / AH


  10. Hi Dan,

     

    I am glad that you like it. :P

    The reason behind this is that when I was adopting the DN driveline feature to LINUX

    I needed to show information on where the actual drive letter points to.

     

    Right now that line doesn't make much sense for DOS/WINDOWS.

     

    But imagine that this line would show the UNC path of the selected drive letter.

    Or any other substitution for a drive letter.

     

    So, sooner or later this field will show something useful.

    For standard drives it could show the current path.

     

    Have a nice weekend,

    Stefan / AH


  11. Hi Dan.

     

    I know of the problem:

    [-] Smart histories: don't draw over the inputline, draw over window boundaries

     

    First of all, it's a Turbo Vision limitation not to be able to draw over the boundaries of the

    owner of any TV object. This requires me to lift that limit without breaking anything.

     

    Second, you may close the history window with ALT or CTRL, or turn off the feature

    if you don't need it. :P

     

    Selecting with CURSOR KEYS additionally to (SHIFT-)TAB was a user wish, which I thought

    is not that bad. Should it be optional?

     

    Stefan / AH

     

    PS: I fixed the git priority bug


  12. Hi Dan,

     

    the date of release is correct.

    I have finished the work on NDN on the 31.8.

    But when I tested the LINUX version I found a few severe problems that took

    me some days to get fixed. So I had to release NDN on the 12th...

     

    The LINUX compile environment does not auto update the date and version

    count, therefore the version count and compile date stood still.

     

    Does it show exactly the same behaviour as before?

    Or has it changed?

     

    Stefan / AH


  13. Hi everyone.

     

    I planned to go through the complete todo list from the beginning to the end

    and fix everything possible for this release, BUT that is impossible to be finished

    within just a few weeks or months... :)

     

    So I decided to release it now that I am about 1/3 or 1/4 through the todo list.

    There are quite some nice fixes and enhancements.

    See for yourself...

     

    Whatsnew:

    ─════┤ v2.31.4712 DPMI32/WINDOWS/LINUX 31.08.09 ├═══════════════════════════─
    [!] added contact information to doc\licence.txt
    [*] Moved advance0.xlt* to keymap
    [*] W32: the german SFX stub was replaced by the current english one (Dandv)
    
    MOUSE
    [+] W32: implemented drivers.SetMouseCursor() (doesn't work in full screen mode)
    [+] New mouse option: Put mouse cursor on the default button
         -> added dialogs.TDialog.SetState() which sets the mouse cursor
         -> added commands.omsMoveDefaultButton to mouse setup and made it default
    [-] W32: Mouse cursor was always set to 0x0 on startup when
         Options.Configuration.Interface setup.Store mouse position was enabled [V]
         -> vpsysw32.SysTVUpdateMouseWhere() was not implemented
         -> removed drivers.Mouse[XY]
         -> idlers.CallExternalSaver(), dnutil.TDNApplication.RetrieveDesktop()
            and TDNApplication.SaveDesktop() use drivers.MouseWhere instead of Mouse[XY]
    [*] W32/LNX: Option "Store mouse position" is not default anymore
         -> modified startup.InterfaceData.Options
    [-] LNX/W32: Executing a file showed the character under the software mouse
         cursor on the console output window [A]
         -> drivers.DoneEvents() now calls drivers.HideMouse()
    [-] D32: fixed bugs in mouse X/Y calculation [V] {C}
         -> Modified vpsysd32.SysTVGetMouseEvent(), mouse_eventhandler(), and
            SysTVInitMouse()
    
    TURBOVISION: VIEWS/DIALOGS/MENUS/OBJECTS/MESSAGES/DESKTOP
    [*] cleaned up/corrected the clean up process of NDN
         views:
         - Added TGroup.HasView() to check if a view exists in a group
           -> TGroup.IndexOf() returns -1 if nothing found;
              modified TView.PutPeerViewPtr(), TGroup.PutSubViewPtr()
         - collections Update(Prior|Views) now only delete items on clean up,
           not free them; modified RegisterTo(Prior|BackGround)
         dnutil:
         - TDNApplication.SaveDesktop() checks if dnapp.MenuBar is nil
         cmdline:
         - added TCommandLine.Done(), which sets dnapp.CommandLine to nil
         dnapp:
         - TApplication.Done() now uses objects.FreeObject() instead of Dispose()
         - ExecExit() resets QuitForced to false
         - TProgram.Done() now only calls inherited Done() and sets the public
           variables Desktop, StatusLine, MenuBar nil
         - moved drivers4.InitDrivers().InitSysError() call to TApplication.Init()
         - added groupsfm.DoneGroups() and filescol.DoneTempGroups() to
           TApplication.Done()
    [*] improved the initialization process of the TUI
         -> moved the Insert() and GrowTo() calls for dnapp.(MenuBar|StatusLine)
            from dnapp.TProgram.Init() into dnapp.TProgram.Init(MenuBar|StatusLine)
         -> moved the Insert() call for dnapp.Desktop from dnapp.TProgram.Init()
            into dnapp.TProgram.InitDesktop
         -> Inheriting objects can safely call above functions without a double
            object insertion or object overwrite
    [+] Inputlines: support for the QuickDir list window
         -> dialogs.TInputLine.HandleEvent(): added command handling for
            cmQuickChange* and kbAltShift0 for sending cmListOfDirs;
            kbAlt[1-9] now sends cmQuickChange*
    [*] Inputlines [LEFT/RIGHT]: Pass the event on to the next view if at the
         beginning or the end of the inputline
         -> Modified dialogs.TInputLine.HandleEvent().kb(Left|Right)
    [+] Dialogs: the current/total count of all list boxes will now be shown in
         the window's subtitle frame
         -> views.TListViewer.UpdateSubTitle() now also checks for TDialog, not only
            TWindow
    [+] Added collect.TCollection.AtSwap() function
    [+] Added Load()/Store()/Done() for future extentions to hideview.TStdWindow
    [+] uniwin.TUniWindow now inherits from hideview.TStdWindow
    [-] Recalculation of standard window's bounds on screen mode change didn't work
         correctly until zoomed [NC]
         -> removed *another* old non working "fix" in views.TView.CalcBounds().Grow()
            that caused wrong calcuation of standard windows like viewer or editor
            (missing frame lines); this fix was probably added to fix the file panel
            display (visible command line), but I can't be sure due to russian comments
         -> all possible desktop windows (file panel, viewer, editor...) now use
            hideview.TStdWindow, which modifies the standard TWindow GrowMode flags
            to the wanted behaviour
         -> windows with negative starting coordinates now will keep them
    [-] Name completion/Inputline: after adding new string the old data was marked [A]
         -> Modified dialogs.TInputLine.HandleEvent() so now the added data is marked
            only if data was actually changed
         -> Corrected dialogs.TInputLine.SetState() to not marking it's data if
            an overlay window is closing (ASCII-Table, Name completion)
    [-] Edit/View: moving Find window changed the window caption (Slavik) [DNOC]
         -> views.TWindow.Draw() called wintitle.SetTitle(), removed that call
            and TWindow.Draw() since no other code was left
         -> this also fixed "Copy Dialog + Tree Dialog title blinking" (Slava)
    [-] Resizing windows to the lower X-limit (f.ex. Help) showed bad title cuts:
         '-- Help --' '-- ... --' '...Help ' [A] (Slavik)
         -> stringsx.Cut() did not handle lower length edge cases correctly
    [+] Move/Resize: added mouse support (Slavik)
         -> modified views.TView.DragView()
    [-] Move/Resize: Message boxes didn't support left/right movement (Slavik) [NC]
         -> main3.MyApp.GetEvent() replaced kb(Left|Right) with kb(ShiftTab|Tab) for
            all message boxes when message.MsgActive was true; commented the code
            since it seems unnecessary/redundant
    [+] added objects.TPoint.(Copy|Add)() functions, objects.TRect now uses more
         of the TPoint functions internally
    [*] HexLine: Improved the HexLine behaviour
         non hex character will be sent to the corresponding inputline
         -> modified dialogs.THexLine.HandleEvent() character handling
         left/right within hex char didn't unselect
         left/right on line limits should tab
         -> modified dialogs.THexLine.HandleEvent().kb(Left|Right)
         select all didn't work
         -> dialogs.THexLine.HandleEvent() now sends all evCommand events to the
            inputline
         inputline was not selected anymore when entering the corresponding HexLine
         -> dialogs.THexLine.SetState() correctly handles the inputline on focus change
         ASCII table input deleted all data and only one character input was possible
         -> modified dialogs.THexLine.SetState() and TInputLine.SetState()
    [*] Improved the fatal error message boxes
         -> modified drivers6.ReportFatalError()
    [+] Copy menu items to clipboard
         -> added commands.cmPutInClipboard menus.TMenuView.Execute()
    
    LANGUAGES
    [*] English: Changed all visible hotkey references [ALT+CTRL...] into [CTRL+ALT]
    [*] W32/LNX: auto language switch w/o restart by hand;
                  restarting NDN now does a full restart
         -> dnutil.TDnApplication.HandleCommand().ChangeLanguage(),
            setups.(MiscMultiSetup|SystemSetup)() now call cmReset
         -> dnexec._ExecString() restarts NDN if reset is required via cmReset
         -> main.RunMainProgram() restarts NDN if dnapp.NeedReset is true
         -> added dnapp.TProgram.(Resume|Suspend)(), used for en/disabling
            OS dependant functionality; used in dnexec._ExecString() and
            dnapp.TApplication.(Init|Done)()
         -> removed 'echo ' from *.dnl.dlRestart
    [-] LNX: restart didn't work [A]
         -> vpsyslnx.SysGetTTYName() didn't correctly save TTY name for new calls
         -> vpsyslnx.OpenVCS() didn't work with multiple calls
         -> vpsyslnx.KbdTerminalThread() init/done handling was not correct
         -> x11.Done() didn't lock the X11 data
    [*] The language resources archive now contains all target executables
    [-] Russian: Windows hotkeys ([CTRL+C/V...]) didn't work (dimases) [N]
         -> Loading dlAltTable into drivers3.AltCodes1 in drivers3.InitDrivers3()
            didn't correctly check boundaries and overwrote drivers3.ForceWordStarKeys
         -> Russian language uses 37 characters in dlAltTable, modified AltCodes1 and
            GetAltChar()
         -> WordStarChars and AltCodes1 were moved into the implementation section
    
    FILE PANEL
    [*] Removed all stringsx.DisposeStr() on flpanelx.CurFile(Active|Passive)[S]:
         dnexec._ExecDOScommand(), dnutil.TDnApplication.HandleCommand().cmReset,
    
    EDITOR
    [-] Ruler on right mouse button was disabled [A]
         -> accidentely commented the code in micro_3.EdHandleMouse()
    
    EDITOR/VIEWER/DBVIEWER/WKZVIEWER(Spreadsheet)
    [+] Marking with mouse + [SHIFT] before marking: copy data to clipboard on
         button release, append data to clipboard if holding [SHIFT] on button
         release
         -> modified micro_3.EdHandleMouse(), added CopyBlock boolean variable
         -> modified fviewer.TFileViewer.HandleEvent(), added DoCopyBlock boolean variable
    
    SCREEN/VIDEOMODES
    [*] D32: Improved video code
         -> SetCrtMode() by replacing single VGA calls by adding
            a VGA call table and using the sm* constants instead of absolute values
         -> DoneVideoModes() now uses FreeObject()
         -> InitVideoModes() resets VESA_Found
    [-] adding/using mode 175x83 actually was 80x43 (hmskrecik) [A]
         -> added video.CreateNewVideoMode(), which unifies the creation of
            new video modes added at runtime and uses a new video mode
            id routine which does not create conflicting ids
            (see 175x83 = 80x43 = $02FF)
         -> merged video.GetVideoModeNumbyMode() into GetVideoModebyMode()
         -> dnutil.TDnApplication.HandleCommand().ChScreenMode() now returns
            better error information if an invalid or already existing mode
            was entered for addition to the list
    [*] moved drivers.TCursorInfo|PreNDNCursor to video
    [-] W32: Cursor set to 0x0 in certain cases:
         Start a console that changes the window size twice: 80x300->80x25->80x30
         80x300 is the standard window buffer size for Windows XP consoles
         -> Because of the second video mode change and a call to video.UpdateScreen()
            the default values of drivers.Cursor[XY] were used = 0x0; solved this by
            using the same default values for drivers.OldCur[XY] and Cursor[XY]
    [*] moved main.SysTVDoneCursor() to video.DoneVideo()
    
    SCREEN GRABBER
    [-] Mark with mouse: starting point X/Y changed -1 if (X/Y < starting point) [NC]
         -> usermenu.TGrabber.HandleEvent() correctly sets the starting point if
            moving back over it
    
    COMMANDLINE
    [+] Added event command to insert a command line string
         -> restructured cmdline.TCommandLine.HandleEvent() and added cmInsertLine
            handling
    
    HISTORIES
    [+] Added drop and edit commands to the view/edit/dir histories
         -> modified histries.(Edit|View|Cmd|Dir)HistoryMenu() to
            accept the drop commands (cmYes)
         -> "Delete record" and "Kill" were renamed to "Delete"
         -> Cleaned up the source code
         -> Renamed histries.TTHistList.ItemStr() to GetItemPtr() and
            added TTHistList.SetItemPtr()
         -> modified histries.TTHistList.HandleEvent().cmOk to use
            [GS]etItemPtr()
    
    COLORS / PALETTES
    [*] Added new palette file apometrn.pal (Rodrigo Cesar Banhara / Apometron)
    
    SYNTAX HIGHLIGHT
    [+] added RTF to, improved PERL and PHP in NDN.hgl (Dandv)
    
    DNEXEC/EXTERNAL VIEWER,EDITOR/EXECUTE EXT/LOCAL,GLOBAL MENUS
    [-] NDN.EXT/D32/NT: executing EXT files may exceed the max commandline length of
         128 which resulted in loading a new command interpreter, which requires
         "exit" to continue with NDN [A] (RayeR)
         -> simplified the names of temporary files from xndn<num>x.* to z<num>.*
            to save command line space in advance0, unified the name generation
            in main2.InvalidateTempDir()
         -> modified dizfiles.ReplaceDIZ(), dnutil3.ClearSwap(),
            dnexe._RunOS2Command() and usermenu.QuickExecExternal() to use the new
            temporary file naming scheme
         -> improved the execution command generation in dnexec._ExecString()
         -> Removed dnexec.ExecExtraEnv
         -> modified fileio.CalcTmpFName() by making the ID parameter optional
    [-] Exec file search messed up the file search extension/path order [A] (Dandv)
         -> improved fileio.SearchPathEnv() to scan paths with a fixed extension
            order and to optionally return the extension of the found file
         -> dnexec.Executables was changed from a #0 to a ';' separated list
            with dots in front of each extension and the order of extensions was
            corrected to match the behaviour of DOS and WINDOWS;
            added fileio.IsExecutable() which handles the comparison
    [-] NDN.EXT: single lined extension commands appeared 2 times on the console
         screen; http://forums.muxe.com/index.php?showtopic=3210 (Crimso/Dandv) [A]
         -> dnexec._ExecFile() printed single lined commands
    
    FILE PANEL
    [-] Advanced filter [ALT-DEL]: hiding wildcards didn't work anymore [A]
         -> complete code of fltools.CM_AdvancedFilter() was rewritten, improved
            and simplified
         -> Hide-Masks were added to the panel filter with a space "- *.*"
         -> Extensions > 3 were not handled correctly if multiple masks were
            selected
         -> stringsx.Replace() didn't return any information
         -> the dialog window will not close and reopen anymore on show/hide;
            code now uses views.TView.EventCallbackHandler()
    
    CONFIGURATION FILES
    [*] LNX: Changed Configuration.System Setup.Temporary Dir "%TEMP%" to "/tmp/"
         -> changed startup.SystemData.Temp default data
         -> improved the temp dir handling in main2.InvalidateTempDir()
    [-] D32/W32: Former %TEMP temp dir strings are not supported anymore [A]
         -> main2.InvalidateTempDir() corrects bad env strings
         change of the temp dir in Options.Configuration.System Setup was not
         noticed until restart
         -> setups.SystemSetup() resets if the temp strings has changed
         prevented execution of NDN.EXT entries
         -> main2.InvalidateTempDir() didn't reset the advance0.Swp* strings
         -> added error messages dnexec._SearchExt() if it fails
    [!] Enabled following options on default (startup.pas)
         * Options.File Manager.Setup:
           Restore Temporary Files, [ALT-F1/F2] Show VFS, Show Driveline info window
         * Options.Configuration.Interface Setup
           Allow multiple help windows
         * Options.Configuration.Mouse Setup
           Track in menus
         * Options.Configuration.Editor Setup
           New file loading
    
    ARCHIVES
    [-] Extract to "<path>" didn't work [A]
         -> archiver.UnarchiveFiles() didn't handle ""
    
    ASCII TABLE
    [+] Added CTRL cursor keys that move 2 chars left/right and 5 chars up/down {C}
         -> added kbCtrl(Left|Right|Up|Down) and shortcurt function SetCursorPos()
            to asciitab.TTable.HandleEvent()
    
    CALCULATOR
    [-] Fixed numeral system for negative numbers {C} (Slavik)
         -> calc.NumeralSystem() didn't handle negative values
    [+] Added functions: GCD, LCM, BIT {C}
    
    HEADER VIEWER
    [+] Added CauseWay 3P executables {C}

     

    Get it here: http://ndn.muxe.com/download/

     

    All the best,

    Stefan / AH

×