Hi Jerome, for clarification: I was referring to the specific case where your tools are used as a part of the install process of FreeDOS :-)
In your given "pick a file and unzip" example, it would be possible to do alternative tricks like: VASK-PRO /F *.zip "Pick a file to unzip" "unzip $F" The proposed VASK-PRO tool would display a file picker (another option could select a directory picker) for all files called "*.zip" together with the question text in the next option. Once the user picks a file (if the user aborts, VASK-PRO just exists) then the command "unzip THATFILENAME" will be invoked. Voila, a solution without SET /P and without pipelines :-) My question was: Which variables do you set using the SET /P trick and is it really necessary to have them in environment variables? Could you use the values in other ways (as in the above example)? Or would it be sufficient to have a small RAM storage area to keep status of your tools? An obvious example would be the cursor case: VCURSORX /PUSH /SET=full could store the current cursor size in a V-specific RAM area and change the cursor to full block size. VCURSORX /POP /CLEAN could restore the cursor size from that RAM area (if none found, do nothing) and deallocate the RAM area as far as cursor data is concerned. Of course it is not necessary to make a real stack here, probably a single cursor size storage slot will be enough. Other variations of the same idea will apply to other uses of your tools for the installer. My question is: Are there installer actions which REQUIRE some SET /P support and if no SET /P is available, what is lost? > The only tools that will require set /p support for any usable functionality > will be vask (when I get around to making it) and vmath. There are advanced > functions in vcursor, vfdutil, vgotoxy, vmode, vstr and vchoice that can be > taken advantage of when set /p works. But, for the most part they are > not needed or required to accomplish most things. > > Let’s take vchoice for example. You can fairly easily have a area that > vchoice will use for selection. It will by default output your choice > as an exit code (errorlevel). No set /p required. > > However, if lets say you have displayed 20 file names, your batch file does > not > know what the filenames are since you basically are just listing a > directories > contents. You want the user to pick one. If you knew what the names were, > you could use 20 “if errorlevel n” instructions to set an environment variable > you want to pass as an archive name to the zip utility. If you use the /Q > option > on vchoice that text will be sent to STDOUT. So, you could use basically > 1 line to achieve something that is not really possible otherwise. Just, > by doing “vchoice /Q | set /p ZARC=“ > > But, like I said this is an advanced function and would not be needed most > of the time. > > Another example is vfdutil. You can go directly to a drive and path of a > filename. changing the current drive and directory by using “vfdutil /c/p > %SOMETHING%”. You can simply change the active directory to do thisk :-) As there is directory stack support (PUSHD, POPD...) in FreeCOM command.com, things get even more convenient. Same example, without SET /P usage: pushd VFDUTIL /PATH /GO-THERE dir *.* > x:\filelist.txt popd Note that I explicitly store the resulting file list in X:, which in my example could be a small ramdisk. If the user later has to pick a file from that list and unzip it, the example near the beginning of my mail can be combined with this to do everything WITHOUT ramdisk. On the other hand, if you plan to unzip a file, you probably unzip it to the drive where you install DOS, so you can simply use that drive for temporary storage of the file list as well... :-) > vfdutil /p %SOMETHING% | set /p FPATH=“ > dir %FPATH%\*.* >FILELIST.TXT Regarding mathematical and cursor processing: Are you sure that you have to do this with several tools which have to communicate using a memory area or environment variables? How about doing ALL steps for a single cursor move inside a SINGLE call to one of your tools? This could be for example: VCURSORX /GOTO $WIDTH/2-10 $HEIGHT/2-3 In my example, VCURSORX supports width and height look-ups and some basic math calculations itself, avoiding the need to pass on data. Cheers, Eric ------------------------------------------------------------------------------ _______________________________________________ Freedos-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/freedos-devel
