deater / dos33fsprogs

Tools for manipulating Apple II dos33 filesystems
http://www.deater.net/weave/vmwprod/apple/dos33fs.html
Other
142 stars 23 forks source link

Various utils (at least dos33fs-utils and prodos-utils): documentation of options placement is wrong on BSD-ish platforms. #18

Open micahcowan opened 2 years ago

micahcowan commented 2 years ago

The problem is that BSD/traditional Unixes (including Darwin/Mac OS, which impacts me), use a getopt() that, by default, demands that all the options be specified before any non-option arguments.

So, while e.g. dos33 -h gives: Usage: dos33 [-h] [-y] [-x] disk_image COMMAND [options] the reality is that, on my Mac, all of the options to COMMAND must be placed before the disk_image argument in order to be recognized by getopt().

That is, I may not portably type: dos33 -y MY-DISK.DSK BSAVE -a 0x6000 MYBIN but instead: dos33 -y -a 0x6000 MY-DISK.DSK BSAVE MYBIN

Suggested solutions:

  1. you could run getopt() once for 'hyx', and then run it again after moving the argv pointer past the disk_image and COMMAND arguments, so that getopt() "sees" the following options as coming first.
  2. probably easier - I believe most modern BSDish systems can be more relaxed about where options are placed on the command line, either with an appropriate macro #defined, or by calling a differently-named getopt() routine?
jquast commented 1 year ago

Thanks for figuring this one out @micahcowan, I had the same problem, I will see if I can find some special #define as you suggest

jquast commented 1 year ago

I've submitted PR #22 should fix dos33 for BSD (or Mac OSX) users while being compatible with linux, I tested both. If it is accepted I can check elsewhere, like prodos-utils as you suggest.