minor build fixes (when features disabled) and merge in Udo's EnhancedDR changes

git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/branches/UNSTABLE@1097 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
Kenneth J Davis 2005-01-22 20:45:13 +00:00
parent 3acc1e41de
commit 4a2ad74a44

119
sys/sys.c
View File

@ -26,11 +26,26 @@
***************************************************************/ ***************************************************************/
#define DEBUG #define DEBUG /* to display extra information */
/* #define DDEBUG */ /* #define DDEBUG */ /* to enable display of sector dumps */
#define WITHOEMCOMPATBS /* include support for OEM MS/PC DOS 3.??-6.x */ #define WITHOEMCOMPATBS /* include support for OEM MS/PC DOS 3.??-6.x */
#define FDCONFIG /* include support to configure FD kernel */
/* #define DRSYS */ /* SYS for Enhanced DR-DOS (OpenDOS enhancement Project) */
#define SYS_VERSION "v3.5a" #define SYS_VERSION "v3.5b"
#define SYS_NAME "FreeDOS System Installer "
#ifdef DRSYS /* set displayed name & drop FD kernel config */
#undef SYS_NAME
#define SYS_NAME "Enhanced DR-DOS System Installer "
#ifdef FDCONFIG
#undef FDCONFIG
#endif
#ifdef WITHOEMCOMPATBS
#undef WITHOEMCOMPATBS
#endif
#endif
#include <stdlib.h> #include <stdlib.h>
#include <dos.h> #include <dos.h>
@ -263,7 +278,9 @@ struct VerifyBootSectorSize {
/* (Watcom has a nice warning for this, by the way) */ /* (Watcom has a nice warning for this, by the way) */
}; };
#ifdef FDCONFIG
int FDKrnConfigMain(int argc, char **argv); int FDKrnConfigMain(int argc, char **argv);
#endif
/* FreeDOS sys, we default to our kernel and load segment, but /* FreeDOS sys, we default to our kernel and load segment, but
if not found (or explicitly given) support OEM DOS variants if not found (or explicitly given) support OEM DOS variants
@ -280,33 +297,56 @@ typedef struct DOSBootFiles {
BOOL stdbs; /* use FD boot sector (T) or oem compat one (F) */ BOOL stdbs; /* use FD boot sector (T) or oem compat one (F) */
LONG minsize; /* smallest dos file can be and be valid, 0=existance optional */ LONG minsize; /* smallest dos file can be and be valid, 0=existance optional */
} DOSBootFiles; } DOSBootFiles;
#define FREEDOS_FILES { "KERNEL.SYS", NULL, 0x60, 1, 0 },
DOSBootFiles bootFiles[] = { DOSBootFiles bootFiles[] = {
/* Note: This order is the order OEM:AUTO uses to determine DOS flavor. */ /* Note: This order is the order OEM:AUTO uses to determine DOS flavor. */
/* FreeDOS */ { "KERNEL.SYS", NULL, 0x60, 1, 0 }, #ifndef DRSYS
/* FreeDOS */ FREEDOS_FILES
#endif
/* DR-DOS */ { "DRBIO.SYS", "DRDOS.SYS", 0x70, 1, 1 },
/* DR-DOS */ { "IBMBIO.COM", "IBMDOS.COM", 0x70, 1, 1 }, /* DR-DOS */ { "IBMBIO.COM", "IBMDOS.COM", 0x70, 1, 1 },
#ifdef DRSYS
/* FreeDOS */ FREEDOS_FILES
#endif
#ifdef WITHOEMCOMPATBS #ifdef WITHOEMCOMPATBS
/* PC-DOS */ { "IBMBIO.COM", "IBMDOS.COM", 0x70, 0, 6138 }, /* pre v7 DR ??? */ /* PC-DOS */ { "IBMBIO.COM", "IBMDOS.COM", 0x70, 0, 6138 }, /* pre v7 DR ??? */
/* MS-DOS */ { "IO.SYS", "MSDOS.SYS", 0x70, 0, 10240 }, /* MS-DOS */ { "IO.SYS", "MSDOS.SYS", 0x70, 0, 10240 },
/* W9x-DOS */ { "IO.SYS", "MSDOS.SYS", 0x70, 0, 0},
#endif #endif
/* W9x-DOS */ { "IO.SYS", "MSDOS.SYS", 0x70, 1, 0},
}; };
#define DOSFLAVORS (sizeof(bootFiles) / sizeof(*bootFiles)) #define DOSFLAVORS (sizeof(bootFiles) / sizeof(*bootFiles))
/* associate friendly name with index into bootFiles array */
#define OEM_AUTO (-1) /* attempt to guess DOS on source drive */ #define OEM_AUTO (-1) /* attempt to guess DOS on source drive */
#ifndef DRSYS
#define OEM_FD 0 /* standard FreeDOS mode */ #define OEM_FD 0 /* standard FreeDOS mode */
#define OEM_DR 1 /* use FreeDOS boot sector, but OEM names */ #define OEM_EDR 1 /* use FreeDOS boot sector, but OEM names */
#define OEM_PC 2 /* use PC-DOS compatible boot sector and names */ #define OEM_DR 2 /* FD boot sector,(Enhanced) DR-DOS names */
#define OEM_MS 3 /* use PC-DOS compatible BS with MS names */ #else
#define OEM_W9x 4 /* use FreeDOS boot sector but with MS names */ #define OEM_FD 2 /* standard FreeDOS mode */
#define OEM_EDR 0 /* use FreeDOS boot sector, but OEM names */
#define OEM_DR 1 /* FD boot sector,(Enhanced) DR-DOS names */
#endif
#ifdef WITHOEMCOMPATBS
#define OEM_PC 3 /* use PC-DOS compatible boot sector and names */
#define OEM_MS 4 /* use PC-DOS compatible BS with MS names */
#define OEM_W9x 5 /* use PC-DOS compatible BS with MS names */
#endif
CONST char * msgDOS[DOSFLAVORS] = { CONST char * msgDOS[DOSFLAVORS] = { /* order should match above items */
"\n", /* In standard FreeDOS mode, don't print anything special */ "\n", /* In standard FreeDOS/EnhancedDR mode, don't print anything special */
#ifndef DRSYS
"Enhanced DR DOS (OpenDOS Enhancement Project) mode\n",
#endif
"DR DOS (OpenDOS Enhancement Project) mode\n", "DR DOS (OpenDOS Enhancement Project) mode\n",
#ifdef DRSYS
"\n", /* FreeDOS mode so don't print anything special */
#endif
#ifdef WITHOEMCOMPATBS #ifdef WITHOEMCOMPATBS
"PC-DOS compatibility mode\n", "PC-DOS compatibility mode\n",
"MS-DOS compatibility mode\n", "MS-DOS compatibility mode\n",
#endif
"Win9x DOS compatibility mode\n", "Win9x DOS compatibility mode\n",
#endif
}; };
typedef struct SYSOptions { typedef struct SYSOptions {
@ -324,7 +364,6 @@ typedef struct SYSOptions {
BYTE *fnCmd; /* optional override to cmd interpreter filename (src & dest) */ BYTE *fnCmd; /* optional override to cmd interpreter filename (src & dest) */
} SYSOptions; } SYSOptions;
void dumpBS(const char *, int); void dumpBS(const char *, int);
void restoreBS(const char *, int); void restoreBS(const char *, int);
void put_boot(SYSOptions *opts); void put_boot(SYSOptions *opts);
@ -336,7 +375,7 @@ void showHelpAndExit(void)
printf( printf(
"Usage: \n" "Usage: \n"
"%s [source] drive: [bootsect] [{option}]\n" "%s [source] drive: [bootsect] [{option}]\n"
" source = A:,B:,C:\\KERNEL\\BIN\\,etc., or current directory if not given\n" " source = A:,B:,C:\\DOS\\,etc., or current directory if not given\n"
" drive = A,B,etc.\n" " drive = A,B,etc.\n"
" bootsect = name of 512-byte boot sector file image for drive:\n" " bootsect = name of 512-byte boot sector file image for drive:\n"
" to write to *instead* of real boot sector\n" " to write to *instead* of real boot sector\n"
@ -345,18 +384,26 @@ void showHelpAndExit(void)
" /BOOTONLY: do *not* copy kernel / shell, only update boot sector or image\n" " /BOOTONLY: do *not* copy kernel / shell, only update boot sector or image\n"
" /OEM : indicates boot sector, filenames, and load segment to use\n" " /OEM : indicates boot sector, filenames, and load segment to use\n"
" /OEM:FD use FreeDOS compatible settings\n" " /OEM:FD use FreeDOS compatible settings\n"
" /OEM:DR use DR DOS 7+ compatible settings (same as /OEM)\n" " /OEM:EDR use Enhanced DR DOS 7+ compatible settings\n"
" /OEM:DR use DR DOS 7+ compatible settings\n"
#ifdef WITHOEMCOMPATBS #ifdef WITHOEMCOMPATBS
" /OEM:PC use PC-DOS compatible settings\n" " /OEM:PC use PC-DOS compatible settings\n"
" /OEM:MS use MS-DOS compatible settings\n" " /OEM:MS use MS-DOS compatible settings\n"
#endif
" /OEM:W9x use MS Win9x DOS compatible settings\n" " /OEM:W9x use MS Win9x DOS compatible settings\n"
" default is /OEM:AUTO, select DOS based on existing files\n" #endif
" /K name : name of kernel to use in boot sector instead of KERNEL.SYS\n" " default is /OEM[:AUTO], select DOS based on existing files\n"
" /L segm : hex load segment to use in boot sector instead of 60\n" " /K name : name of kernel to use in boot sector instead of %s\n"
" /L segm : hex load segment to use in boot sector instead of %02x\n"
" /B btdrv : hex BIOS # of boot drive set in bs, 0=A:, 80=1st hd,...\n" " /B btdrv : hex BIOS # of boot drive set in bs, 0=A:, 80=1st hd,...\n"
" /FORCEDRV: force use of drive # set in bs instead of BIOS boot value\n" " /FORCEDRV: force use of drive # set in bs instead of BIOS boot value\n"
"%s CONFIG /help\n", pgm, pgm #ifdef FDCONFIG
"%s CONFIG /help\n"
#endif
/*SYS, KERNEL.SYS/DRBIO.SYS 0x60/0x70*/
, pgm, bootFiles[0].kernel, bootFiles[0].loadseg
#ifdef FDCONFIG
, pgm
#endif
); );
exit(1); exit(1);
} }
@ -406,12 +453,14 @@ void initOptions(int argc, char *argv[], SYSOptions *opts)
{ {
argp += 3; argp += 3;
if (!*argp) if (!*argp)
opts->flavor = OEM_DR; opts->flavor = OEM_AUTO;
else if (*argp == ':') else if (*argp == ':')
{ {
argp++; /* point to DR/PC/MS that follows */ argp++; /* point to DR/PC/MS that follows */
if (memicmp(argp, "AUTO", 4) == 0) if (memicmp(argp, "AUTO", 4) == 0)
opts->flavor = OEM_AUTO; opts->flavor = OEM_AUTO;
else if (memicmp(argp, "EDR", 3) == 0)
opts->flavor = OEM_EDR;
else if (memicmp(argp, "DR", 2) == 0) else if (memicmp(argp, "DR", 2) == 0)
opts->flavor = OEM_DR; opts->flavor = OEM_DR;
#ifdef WITHOEMCOMPATBS #ifdef WITHOEMCOMPATBS
@ -419,11 +468,16 @@ void initOptions(int argc, char *argv[], SYSOptions *opts)
opts->flavor = OEM_PC; opts->flavor = OEM_PC;
else if (memicmp(argp, "MS", 2) == 0) else if (memicmp(argp, "MS", 2) == 0)
opts->flavor = OEM_MS; opts->flavor = OEM_MS;
#endif
else if (memicmp(argp, "W9", 2) == 0) else if (memicmp(argp, "W9", 2) == 0)
opts->flavor = OEM_W9x; opts->flavor = OEM_W9x;
else /* if (memicmp(argp, "FD", 2) == 0) */ #endif
else if (memicmp(argp, "FD", 2) == 0)
opts->flavor = OEM_FD; opts->flavor = OEM_FD;
else
{
printf("%s: unknown OEM qualifier %s\n", pgm, argp);
showHelpAndExit();
}
} }
else else
{ {
@ -607,7 +661,12 @@ void initOptions(int argc, char *argv[], SYSOptions *opts)
} }
/* if unable to determine DOS, assume FreeDOS */ /* if unable to determine DOS, assume FreeDOS */
if (opts->flavor == OEM_AUTO) opts->flavor = OEM_FD; if (opts->flavor == OEM_AUTO) opts->flavor =
#ifdef DRSYS
OEM_EDR;
#else
OEM_FD;
#endif
printf(msgDOS[opts->flavor]); printf(msgDOS[opts->flavor]);
@ -681,12 +740,14 @@ int main(int argc, char **argv)
SYSOptions opts; /* boot options and other flags */ SYSOptions opts; /* boot options and other flags */
BYTE srcFile[SYS_MAXPATH]; /* full path+name of [kernel] file [to copy] */ BYTE srcFile[SYS_MAXPATH]; /* full path+name of [kernel] file [to copy] */
printf("FreeDOS System Installer " SYS_VERSION ", " __DATE__ "\n"); printf(SYS_NAME SYS_VERSION ", " __DATE__ "\n");
#ifdef FDCONFIG
if (argc > 1 && memicmp(argv[1], "CONFIG", 6) == 0) if (argc > 1 && memicmp(argv[1], "CONFIG", 6) == 0)
{ {
exit(FDKrnConfigMain(argc, argv)); exit(FDKrnConfigMain(argc, argv));
} }
#endif
initOptions(argc, argv, &opts); initOptions(argc, argv, &opts);
@ -1245,13 +1306,17 @@ void put_boot(SYSOptions *opts)
correct_bpb((struct bootsectortype *)(default_bpb + 7 - 11), bs); correct_bpb((struct bootsectortype *)(default_bpb + 7 - 11), bs);
if (opts->kernel.stdbs) if (opts->kernel.stdbs)
{ {
memcpy(newboot, (fs == FAT16) ? fat16com : fat12com, SEC_SIZE); memcpy(newboot, (fs == FAT16) ? fat16com : fat12com, SEC_SIZE);
} }
else else
{ {
#ifdef WITHOEMCOMPATBS
printf("Using OEM (PC/MS-DOS) compatible boot sector.\n"); printf("Using OEM (PC/MS-DOS) compatible boot sector.\n");
memcpy(newboot, (fs == FAT16) ? oemfat16 : oemfat12, SEC_SIZE); memcpy(newboot, (fs == FAT16) ? oemfat16 : oemfat12, SEC_SIZE);
#else
printf("Internal Error: no OEM compatible boot sector!\n");
#endif
} }
} }