Ndos/4Dos batch file utils

You can download the following code samples in zipped form as

The following are the details for the three files included below, and in the zipfile. Note that these are not necessarily the only or even the best ways to write these batch files. In fact, they may not even work properly on your system. With this in mind, I'd really appreciate anyone telling me how any of them could be improved.

VAL.BTM        60 15/04/95    1:09
Evaluates simple mathematical expressions. Check the section on perl for a more powerful version. Basically, just a command-line call to the %@eval[] function.

!!.BTM       3364 15/01/96   15:57
Acts (usually) like the '!!' shell command, duplicating the last command. Useful only for unix fanatics who can't get used to hitting the up arrow (try bash?), or for coding tips on Ndos programming.

DRIVES.BTM   1358 15/01/96   15:57
Gives as much information about all connected drives as can be obtained from batch commands. Tells you whether they are local, removable, etc (Though CD-ROMs have rather unexected values here), how much space is available, etc.


@REM A simple command line calculator. @echo %@eval[%&]


@echo off :: A very rough-and-ready version of the Unix !! function. :: Does not allow changes to arguments, but will allow extra arguments. :: Uses the variable CMDLINE to store the command in. :: NOTE: The ::-style comment should never be used within nested commands. :: Create a name for the temporary file. :namefile if not "%temp"="" ( set file=%@unique[%temp] if not "%file"="" goto initialise ) if not "%ndostemp"="" ( set file=%@unique[%ndostemp] if not "%file"="" goto initialise ) if not "%tmp"="" ( set file=%@unique[%tmp] if not "%file"="" goto initialise ) set file=%@unique[.] if "%file"="" goto nofile goto initialise :: Do other initialisation. :initialise history > %file if not exist %file goto nofile set count=1 goto loop :: The main loop. :loop :: Number of lines from beginning of file. set line=%@eval[%@lines[%file]-%count] :: Check for end of command history. if %line LT 0 goto nocmds :: Read command on current line. set cmdline=%@line[%file, %line] >& NUL unset line >& NUL :: Check for environment space. if "%cmdline"=="" goto noenv :: See if command was '!!'. If so, note arguments & do next command. if "%@substr[%cmdline, 0, 2]"=="!!" ( REM Copy arguments, removing trailing space. set n=%@eval[%@len[%@substr[%cmdline, 3]]-1] set moreargs=%@substr[%cmdline, 3, n] %moreargs unset n REM Point to next command in list & loop. set count=%@eval[%count+1] goto loop ) :: Might not get the chance to clean up if command messes up. gosub cleanup :: Make sure the spacing is OK, then output. if "%moreargs"=="" ( echo %cmdline %& call %cmdline %& goto end ) echo %cmdline %moreargs %& call %cmdline %moreargs %& goto end :: Error handling routines. :nocmds echo. echo Out of history space in !!. The original command has been lost. echo You may wish to allocate more history memory in the ndos.ini file. goto FindNdosIni :noenv echo. echo Out of environment space in !!, so unable to find the original echo command reffered to. echo You may wish to allocate more environment space in the ndos.ini file. goto FindNdosIni :FindNdosIni if not "%@search[ndos.ini]"=="" ( echo. echo An ndos.ini file which may be suitable has been located at: echo %@search[ndos.ini] ) echo. echo You may preffer to type the command in again, or use the up arrow. gosub cleanup goto end :nofile echo. echo Fatal error in creating temporary file. echo. echo Before using the !! utility, you must set the environment variable echo TEMP to point to a drive you have write permission on, with at least echo a few kilobytes free, and make sure you have some environment space echo free as well. echo. echo You can do this in the %_boot:\autoexec.bat file. echo. echo You may preffer to type the command in again, or use the up arrow. gosub cleanup goto end :cleanup :: unset everything bar cmdline. del %file >& NUL unset file >& NUL unset moreargs >& NUL unset count >& NUL return :end


@echo off REM A program to tell you which drives you have and what they are. REM See also which.btm. cls rem This nasty hack is for getting MORE to work on the program. rem More can be bypassed by using the -p flag. rem if "%1"=="" ( call %0 -P | more ^ goto end ) rem if "%1"=="-P" goto begin rem if "%1"=="/P" goto begin rem goto help :begin cls echo %_time, %_dow, %_date. echo Boot disk is %_boot. Last disk is %_lastdisk. echo Currently in %_cwds. echo. set DRV=A :drvtest if "%@upper[%DRV]" GT "%_lastdisk" goto :end if "%@ready[%DRV:]"="1" goto ready echo Drive %DRV: is NOT ready. set DRV=%@char[%@eval[%@ascii[%DRV]+1]] echo. goto drvtest :ready echo Drive %DRV: (%@label[%drv%:]) is ready. echo Total space: %@disktotal[%drv%:,b] bytes (%@disktotal[%drv%:,K]k). echo Used space : %@diskused[%drv%:,b] bytes (%@diskused[%drv%:,K]k). echo Free space : %@diskfree[%drv%:,b] bytes (%@diskfree[%drv%:,K]k). echos Drive is if %@removable[%drv%:]==1 echos removable and if %@remote[%drv%:]==0 echo local. if %@remote[%drv%:]==1 echo remote. set DRV=%@char[%@eval[%@ascii[%DRV]+1]] echo. goto drvtest :help echo This program is intended to display all the drive information. echo Syntax: "%0 [-p]" echo -p disables paging :end unset DRV >& NUL
return to index