Define I386 and I186 more cleanly.

Add (UWORD) casts to silence the compiler.
Optimize (head*sector) to secs_per_cyl
Add BORLANDC to compiler list and simplify startup printf to one message.
#pragma enable_message(130) for Watcom C causes it to behave a little more
like Borland in terms of warnings.


git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@776 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
Bart Oldeman 2004-02-07 18:16:27 +00:00
parent 0e0abcd685
commit de444743cc
4 changed files with 40 additions and 27 deletions

View File

@ -81,10 +81,6 @@ static unsigned short __inline SS(void)
asm mov ax, ss;
}
#if defined(M_I286) /* /G3 doesn't set M_I386, but sets M_I286 TE */
#define I386
#endif
#elif defined(__WATCOMC__) /* don't know a better way */
#define I86
@ -96,8 +92,10 @@ static unsigned short __inline SS(void)
#define _SS SS()
unsigned short SS(void);
#pragma aux SS = "mov dx,ss" value [dx];
/* enable Possible loss of precision warning for compatibility with Borland */
#pragma enable_message(130)
#if _M_IX86 >= 300
#if _M_IX86 >= 300 || defined(M_I386)
#define I386
#endif
@ -114,6 +112,14 @@ unsigned short SS(void);
We might even deal with a pre-ANSI compiler. This will certainly not compile.
#endif
#ifdef I86
#if _M_IX86 >= 300 || defined(M_I386)
#define I386
#elif _M_IX86 >= 100 || defined(M_I286)
#define I186
#endif
#endif
#ifdef MC68K
#define far /* No far type */
#define interrupt /* No interrupt type */

View File

@ -387,7 +387,8 @@ STATIC WORD getbpb(ddt * pddt)
{
ULONG count;
bpb *pbpbarray = &pddt->ddt_bpb;
WORD head, /*track, */ sector, ret;
unsigned secs_per_cyl;
WORD ret;
/* pddt->ddt_descflags |= DF_NOACCESS;
* disabled for now - problems with FORMAT ?? */
@ -455,21 +456,22 @@ STATIC WORD getbpb(ddt * pddt)
count =
pbpbarray->bpb_nsize == 0 ?
pbpbarray->bpb_huge : pbpbarray->bpb_nsize;
head = pbpbarray->bpb_nheads;
sector = pbpbarray->bpb_nsecs;
secs_per_cyl = pbpbarray->bpb_nheads * pbpbarray->bpb_nsecs;
if (head == 0 || sector == 0)
if (secs_per_cyl == 0)
{
tmark(pddt);
return failure(E_FAILURE);
}
pddt->ddt_ncyl = (count + head * sector - 1) / (head * sector);
/* this field is problematic for partitions > 65535 cylinders,
in general > 512 GiB. However: we are not using it ourselves. */
pddt->ddt_ncyl = (UWORD)((count + (secs_per_cyl - 1)) / secs_per_cyl);
tmark(pddt);
#ifdef DSK_DEBUG
printf("BPB_NSECS = %04x\n", sector);
printf("BPB_NHEADS = %04x\n", head);
printf("BPB_NSECS = %04x\n", pbpbarray->bpb_nsecs);
printf("BPB_NHEADS = %04x\n", pbpbarray->bpb_nheads);
printf("BPB_HIDDEN = %08lx\n", pbpbarray->bpb_hidden);
printf("BPB_HUGE = %08lx\n", pbpbarray->bpb_huge);
#endif
@ -891,7 +893,7 @@ STATIC int LBA_to_CHS(ULONG LBA_address, struct CHS *chs, const ddt * pddt)
return 1;
}
chs->Cylinder = LBA_address;
chs->Cylinder = (UWORD)LBA_address;
chs->Head = hsrem / pbpb->bpb_nsecs;
chs->Sector = hsrem % pbpb->bpb_nsecs + 1;
return 0;

View File

@ -332,29 +332,33 @@ STATIC VOID signon()
{
printf("\r%S", MK_FP(FP_SEG(LoL), FP_OFF(LoL->os_release)));
printf("Kernel compatibility %d.%d", MAJOR_RELEASE, MINOR_RELEASE);
printf("Kernel compatibility %d.%d - ", MAJOR_RELEASE, MINOR_RELEASE);
#if defined(__TURBOC__)
printf(" - TURBOC");
printf(
#if defined(__BORLANDC__)
"BORLANDC"
#elif defined(__TURBOC__)
"TURBOC"
#elif defined(_MSC_VER)
printf(" - MSC");
"MSC"
#elif defined(__WATCOMC__)
printf(" - WATCOMC");
"WATCOMC"
#elif defined(__GNUC__)
printf(" - GNUC"); /* this is hypothetical only */
"GNUC" /* this is hypothetical only */
#else
#error Unknown compiler
generate some bullshit error here, as the compiler should be known
#endif
#if defined (I386)
printf(" - 80386 CPU required");
" - 80386 CPU required"
#elif defined (I186)
printf(" - 80186 CPU required");
" - 80186 CPU required"
#endif
#ifdef WITHFAT32
printf(" - FAT32 support");
" - FAT32 support"
#endif
printf("\n\n%S", (void FAR *)copyright);
"\n\n%S", (void FAR *)copyright);
}
STATIC void kernel()

View File

@ -89,7 +89,7 @@ int DosMkTmp(BYTE FAR * pathname, UWORD attr)
unsigned long tmp = randvar++;
int i;
for(i = 7; i >= 0; tmp >>= 4, i--)
ptmp[i] = (tmp & 0xf) + 'A';
ptmp[i] = ((char)tmp & 0xf) + 'A';
/* DOS versions: > 5: characters A - P
< 5: hex digits */
@ -602,10 +602,11 @@ COUNT truename(const char FAR * src, char * dest, COUNT mode)
}
/* nothing found => continue normally */
}
if ((mode & CDS_MODE_CHECK_DEV_PATH) && (result & IS_DEVICE) &&
!(result & IS_NETWORK) && dest[2] != '/' && !dir_exists(dest))
if ((mode & CDS_MODE_CHECK_DEV_PATH) &&
((result & (IS_DEVICE|IS_NETWORK)) == IS_DEVICE) &&
dest[2] != '/' && !dir_exists(dest))
return DE_PATHNOTFND;
tn_printf(("Physical path: \"%s\"\n", dest));
return result;
}