This question is more about DOS in general than specifically about FreeDOS.  
But, there are enough experienced and creative users around FreeDOS that 
someone may be able to help me come up with a solution.

I have a large set of DOS environments I use for testing.  Basically, I have a 
bunch of different versions of DOS that I can boot to (MS-DOS, PC-DOS, FreeDOS, 
DR-DOS, from versions 3.0 to the latest of each).  DOS versions 1 & 2 were so 
lackluster that I don't bother even testing with them.  I have a copy of the 
commercial program called System Commander which allows me to install and boot 
all these different versions of DOS from a single partition on a hard drive.  I 
know there are other ways to accomplish the same feat, but I bought a copy of 
System Commander a long time ago so that is what I use.

I have all these DOS's installed on a Virtual hard drive so that I can run them 
in different Virtual Machines with different types of CPUs (from the lowly 8088 
all the way up to modern CPUs).  Again, this is a test environment so that as I 
write programs I can verify they work whenever and wherever they're supposed to.

On the Virtual hard drive part of what System Commander does as you boot is 
"restore" the hidden boot files (IO.SYS & MSDOS.SYS for MS-DOS, IBMBIO.COM & 
IBMDOS.COM for PC- and DR-DOS, or KERNEL.SYS for FreeDOS), along with the 
COMMAND.COM, CONFIG.SYS, and AUTOEXEC.BAT files so that the virtual machine 
boots with the correct test environment.

The problem is that the older versions of DOS don't work exactly like the newer 
versions, particularly when it comes to batch files.  For example, prior to DOS 
version 3.3 you couldn't CALL one batch file from another, and also prior to 
DOS version 3.3 you couldn't use the @ symbol at the beginning of a line in a 
batch file to hide the output of the line (sort of similar to what happens with 
the ECHO OFF you normally put at the beginning of batch files but the @ symbol 
only works for a single line instead of the entire batch file like ECHO OFF 
does).

So, I have a relatively short AUTOEXEC.BAT file set up for each OS I boot, 
which is unique to each OS.  The main thing this small AUTOEXEC.BAT does is set 
up some environment variables to identify the OS that booted which can be used 
later in other batch files.  At the end of the "simple" AUTOEXEC.BAT file, I 
then jump to a "master" AUTOEXEC.BAT file that is common to all the booted 
DOS's.  Because each version of DOS is a little different, the "master" 
AUTOEXEC.BAT file needs to do some "IF-THEN" scenarios based on which version 
of DOS is running.  I want the overall environment to be pretty much the same 
(as much as I can, anyway) no matter which DOS is running.  Having a "master" 
AUTOEXEC.BAT file lets me make most of my changes in one common place instead 
of needing to do the same thing a bunch of different times for each DOS version.

One problem I haven't figured out how to handle correctly is the ECHO OFF vs 
@ECHO OFF issue.  In older versions of MS- and PC-DOS (prior to version 3.3), 
and all versions of DR-DOS, the "@ECHO OFF" command does not work at the 
beginning of batch files.  You need to use a simple "ECHO OFF" instead.  If 
they see an "@ECHO OFF" they display an "unknown command" error (it tries to 
find an executable files called "@ECHO").  I'm trying to figure out a way for 
all the "common" batch files (all batch files other than the small AUTOEXEC.BAT 
file) to detect whether they can put the "@" at the beginning of the line or 
not to keep the screen from getting unnecessarily cluttered and confusing.  I 
cannot figure out a way to do this.  I'll go through some of the things I've 
tried (to no avail -- the all put "unnecessary stuff on the screen).

I've tried creating an ECHO environment variable.  With older versions of DOS:

  SET ECHO=ECHO OFF

and with newer versions of DOS:

  SET ECHO=@ECHO OFF

then at the beginning of all batch files I put a:

  %ECHO%

That works with older versions of DOS but not newer versions.  With newer 
versions, it sees the "%" at the beginning of the line instead of the "@" and 
looks for an executable file called "@ECHO" instead of seeing the "@" as the 
"hide this line" character.

Another option would be to create an actual @ECHO.BAT file and always put an 
@ECHO as the first line of all batch files, but that won't work either.  The 
"@ECHO OFF" line will show up on the screen (which is what I'm trying to 
avoid), and in addition you must CALL the @ECHO.BAT file instead of just 
running it.  And you can't use CALL in older version of DOS.

I've also thought of trying to use aliases/macros with ANSI or DOSKEY (or 
clones of those) but that won't work either.  ANSI will only create 
aliases/macros for single characters (not entire words like ECHO or @ECHO), and 
DOSKEY (or a clone) macros only work at the 
command-line and not in batch files.  Something like aliases in FreeDOS or 4DOS 
might work (I'm not sure), but that defeats the purpose of the testing which 
requires "native" DOS versions.

I'm stumped.  Right new it seems as if my only viable option is to always use 
"ECHO OFF" instead of "@ECHO OFF" and just live with the cluttered screens in 
later versions of DOS even though they could be avoided if I wasn't trying to 
boot so many old DOS's on the same machine.

I realize this is a minor issues in the grand scheme of things, but would still 
like to figure out a solution if there is one.  It's also  interesting when you 
experiment with the different DOS's to see what kinds of compatibility issues 
there are.  I've found DR-DOS isn't nearly as compatible with MS-DOS as it's 
supposed to be.  I've also heard/read that MS-DOS and PC-DOS were for all 
practical purposes exactly the same up through version 6.1, but I've found that 
not to be true either.  From a compatibility perspective, FreeDOS is actually 
pretty good (not perfect, but definitely better than DR-DOS).

Anyway, any other ideas on how to resolve the ECHO/@ECHO issue?


_______________________________________________
Freedos-user mailing list
Freedos-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freedos-user

Reply via email to