
Stuff that I might do some day...

- switch the TCP stack to use picoTCP
    --> or (better?) make FDNPKG a 16-bit application and use real-mode Watt32
DONE

- make it possible to install sources for a package that was installed without sources
    --> store sources separately (*.zib + *.zis instead of a single *.zip)
DONE WITH REINSTALL AND INSTALL WITH SOURCES

- for a given on-disk file, make it possible to check if it belongs to a package
I'll discuss this with FreeDOS people what this means

- (?) look for %DOSDIR%\PACKAGES\%PKGNAME%\REMOVE.BAT and INSTALL.BAT scripts
I'll discuss this with FreeDOS people what this means

- optimize db-related operations (creating db, loading it from file), to speed up the process
    --> or move this to server-side? but what about from-disk installs then? could use same format as today, reading directly from disk instead of compiling a database aggregate
This is a 1.0 feature I should implement this soon, but I am afraid of breaking it.

- look for FDNPKG.CFG first in current EXE dir instead of in %DOSDIR%/BIN (but %FDNPKG.CFG% should still have priority over everything else)
DONE!

- add a way to install a specific version of a package without relying on the latest version autodetection (fdnpkg install pkgname/0.50)
again This is a 1.0 feature I should implement this soon, but I am afraid of breaking it. but I can try with this one!
    cannot be done need work on repo/server side (possible! just need fdrepo updated)

- when the connection to network fails, we should continue with what we have (looks like wattcp is calling exit() if it fails to get an IP via DHCP?)
I dont think this can't be implemented. Because it would not have any package files! You can (re)install packages via locally on a disk! :D



- Implement modification-date version finding
    --> Needs server repo side and the making of index16.gz file son server which has this additional info! :D


- force install!
    --> prompt sent to force install a file if it exists
DONE

- multipackage install!!! >:3
    --> now we getting into big leagues!! :D program should work as "fdnpkg16 reinstall fdnpkg16 fdnpkg" xD
DONE!

- implement errorlevels
    easy todo just need to talk to others about what numbers for where.




- additional todo thanks to willi! :D
1. /? "Press any key except Q to continue" This works, but is unusual for me, as in most cases it shows the options twice and nerves the user. I would do it as follows:
        "Press S to show the short options" (otherwise it exits)
        and from short options:
        "Press L to show the long options" (otherwise it also exits)
        Additional you could offer the options /S and /L to show the short or long options at once. (option=action) Maybe in one line "/S /L" show short / long help" to save             space in the help section.
2.  Update: It would be great to offer a "downgrade" (to one program version earlier) sometimes. For any reason (new program does not work, user does not like new      version etc. Something like remove program and install an older version. See 3.
3.  the repositories at Shidel, your site (not tested) and ibiblio have directories, e.g. repositories/1.3 or  (1.4) or  (latest)/index.html.
So it should be easy to replace 1.4 by latest in fdnpkg16.cfg with a variable and offer the latest folder too (via an additional option/action). This would make it very comfortable to download, e.g. the inofficial kernel. Just an idea. Something like "Update repository"LATEST" kernel".
4. I noticed, that if you have a typo at the options (actions), it reports no error message ("xyz does not exist) but simply exits which maybe a little confusing for newbies.
5. dumpcfg shows a long list. Could you add a pause after each side (something like: | more)?
    DONE

This are only proposals, think about them. I am not angry when you say: this does not work for this or that reason or something like this.

Willi


> 1. Great!
yeah i will implement this feature soon
> 2. yes, it will be problematic and hard to realize something like a downgrade.  I understand, when downloading it later, this will become complex
this one is very hard to implement. as in it will introduce a bunch of bugs
> 3. replacing the fdnpkg16.xyz file is a chance, but uncomfortable. Only people that know that there are different folders for download would have the
> idea to change it. So a small option to change the download section would be nice.
this is not so easy either. i should mention it in the help me
> 4. Simply type "fdnpkg16 dumpcfga" or "dumpcf" (instead of dumpcfg") - and the program gives no error message but directly jumpes back to help.
if there is a typo it dose this on purpose.. to mention to user the help.
> 5. a simple pause after each side would be enough.
i think i can implement this too








experimental dev cleanup todo for dev branch
  it's mostly clean up of old code i made because the project is a little messy where i worked at.
  this is ok it works fine i just need to fix things

clean up old network code not used. like mtcp usage to remove dependancies         --eventually
optimize things for 8088/8086
  database operations
  just over all reduce disk access where unessessary!

eventually get WATT32 guys to fix WATT32 memory leak in some functions!






Will implement these impovements.
From Jerome:

As I see it, there are a couple issues with FDNPKG16 that need addressed:

1) Case-less filename comparison when checking the TO-BE-INSTALLED files against the NOW-INSTALLED files in the relevant %DOSDIR%\PACKAGES\*.LST database file.
    FIXED
2) Do not update the CACHE when the online scan fails.
    DONE on next compile as of 5/13/2026
3) A simple check for sufficient memory and not just repeated failures would be nice. Or at least, stop when the first critical memory related error occurs.

    DONE

4) FDNPKG seems to get stuck if (1=NO) was selected. Re-launching with any option, it downloaded the gDOSLFNh package again and exited. Had to manually delete the cache.
    fixed (i did not do much just add the y/n feature
5) a Zero byte LST file causes FDNPKG to just exit without any messages. Unable to remove, update or install a package.
    should be able to handle this with a remove command or reinstall command


Some possible improvements:

6) While 1 & 2 are acceptable responses to the NO/YES question (except for my broken keyboard), permitting the language equivalent of N/Y/NO/YES (caseless) would be nice.
    fixed and DONE 1 for no 2 for yes
7) Possibly add an option to gaborth as well.
    hard todo as httpget.exe is a seperate program called by a batch script. and it agressively calls it.
8) If not installed, maybe offer to save the download for later.
    DONE

9) Maybe provide a command line option to gonlyh download the updates and not install them.
    DONE

10) There is one other thing to check in FDNPKG16 that was an issue in FDNPKG regarding gfile existsh problems. A long while back (I think maybe FreeDOS 1.2), there was a typo in the logic that created the environment variable data used by FDINST at OS install time. It resulted in an extra space in the file names in the LST file. Those entries looked something like gC:\FreeDOS \bin\xcopy.exeh. FDNPKG and FDINST would see these as conflicts and refuse to update those packages. However, both of those programs had no problem performing a gremoveh then greinstallh when the extra space was present. That OS installer issue was resolved a long time ago. But, it is something a user could do by accident when updating environment variables or the config file related to FDNPKG16. It would be good to check that FDNPKG16 does not suffer from the same "extra spaceh pathname issue.
    I need more info on this




So, other than the error level issue always being zero, that stuff looks good.
But, I did run several other tests and found some things that should be improved.

1) running gfdnpkg16 /dl picklesh, says it did not find a picklesh package. However, it created a 8 byte zip file called gpickles.ziph
    DONE!

2) running gfdnpkg16 /duh, started the process of downloading the available updates. However, I pressed gCTRL+Ch while it was downloading FDISK. It reported that it had a gCRC errorh and gAborted the installationh. However, it saved the partial package as gFDISK.ZIPh and continued downloading additional packages.
    i cannot fix this with how it is set up currently

   It should not save (or it should delete) the broken downloaded package. Also, it should prompt to gAbort, Retry or Continueh when an error occurs.

3) after downloading those packages and deleting the broken fdisk.zip file. Simply running gfdnpkg16 update *.ziph returns that gpackage *.zip is not installedh. It would be nicer to support wild-cards when referencing local files.
    I dont want to implement this because of the remove system if you fdnpkg16 rm * freedos will be uninstalled..

4) when running gfdnpkg16 /duh, if a zip file exists locally, it is still downloaded.
   However, the newly downloaded zip file is discarded and does not replace the file on disk.
   Also, there are no messages that the download was discarded.

   It would be better to first check if there is a conflicting file already on the local hard drive.
   Then prompt to overwrite or skip downloading that zip file.



5) Known issue, regarding case-less file name comparisons when checking packages for conflicting files on hard disk.
    fixed

You have made a lot of progress with this updated version.









In Open Watcom C, break_off() will turn off ctrl+c and ctrl+brk
checking, but only during normal execution. It does not block ctrl+c
or ctrl+brk during keyboard input, such as with getch()

For example, this will prevent ctrl+c during the delay() function:

#include <stdlib.h> /* break_on, break_off */

  break_off();
  puts("wait 2 seconds..");
  delay(2000);
  puts("Ok");


To block ctrl+c and ctrl+brk during input, you should use
signal(SIGINT,SIG_IGN) instead. This sets the SIGINT signal to be
ignored. For example, this prevents ctrl+c when reading keyboard
input:

#include <signal.h> /* signal */

  signal(SIGINT, SIG_IGN);
  do {
    key = getch();
    if (key == 0) { getch(); }
    printf("%d\n", key);
  } while ((key != 27) && (key != 'q') && (key != 'Q'));



























I had a few minutes to test out the new/improved features.
It has improved a lot over previous versions.
I did not notice any major issues with the new changes.
However, there were some things which I think could improve user experience.

1) When using /DL (download package) or /DU (download updates), it first downloads the package. Then, if a file already exists with the same name, it prompts to Overwrite. I think it would be better to check for the conflicting file name before downloading. That way, if the user does not want to overwrite the local file, they do not waste time downloading it. Sometimes, these files are pretty big and can take several minutes for a download to complete.
    this works if u press 1 or n for no

2) It would be nice to provide the option to gAborth, when a conflicting file name already exists.
    DONE
    just gotta update translations

3) When downloading a package or available updates, it shows the message gAn update was foundc Update in progressh. It should really say gDownload in progressh or since the next line says gDownloadingch, that gUpdate in progressh could simply be removed when just downloading.
    i cant easily update those strings there is like 30 translation files. sigh
    ill see what i can do about that then
    done

4) After downloading a package and wanting to update it, the command to do this could be a little confusing to the end user. For example, the was an update to DOSLFN. After it was downloaded, a user may thing running gfdnpkg16 update doslfn.ziph would update it. But, that will issue an error message that gDOSLFN.ZIP is not installed". So, they may then try to run gfdnpkg16 install doslfn.ziph which shows the error gDOSLFN is already installed! You may want to use eupdatef action.h
This may confuse a user who does not know about the RI option to reinstall a package.
    done

5) After downloading all of the updates, it would be nice be able to update them all at once. While they could be done one at a time, if it has been a while since the packages were updated, there can be a lot of them. For example, this machine had 13 updates. It can be tedious to do one at a time. Using something like gfdnpkg16 ri *.ziph would be awesome when there are a couple dozen packages to (re)install or update.
    i wont implement wild cards for the remove function because this can ruin the install of freedos
    also u can just do fdnpkg16 up

:-)
:3
