mirror of
https://github.com/FDOS/kernel.git
synced 2025-07-23 13:54:30 +02:00
See history.txt for overview: put kernel 2022beo1 into CVS
git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@164 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
parent
ec7800bfa3
commit
f22376eec8
9
config.m
9
config.m
@ -20,6 +20,8 @@ NASM=nasm
|
|||||||
#LIBPATH=$(COMPILERPATH)\lib
|
#LIBPATH=$(COMPILERPATH)\lib
|
||||||
#CLIB=$(COMPILERPATH)\lib\cs.lib
|
#CLIB=$(COMPILERPATH)\lib\cs.lib
|
||||||
#INCLUDEPATH=$(COMPILERPATH)\include
|
#INCLUDEPATH=$(COMPILERPATH)\include
|
||||||
|
#MATH_EXTRACT=*LDIV *LLSH *LURSH *LXMUL *LRSH *SPUSH *SCOPY
|
||||||
|
#MATH_INSERT=+LDIV +LLSH +LURSH +LXMUL +LRSH +SPUSH +SCOPY
|
||||||
|
|
||||||
|
|
||||||
# Use these for Turbo C 3.0
|
# Use these for Turbo C 3.0
|
||||||
@ -31,6 +33,8 @@ NASM=nasm
|
|||||||
#LIBPATH=$(COMPILERPATH)\lib
|
#LIBPATH=$(COMPILERPATH)\lib
|
||||||
#CLIB=$(COMPILERPATH)\lib\cs.lib
|
#CLIB=$(COMPILERPATH)\lib\cs.lib
|
||||||
#INCLUDEPATH=$(COMPILERPATH)\include
|
#INCLUDEPATH=$(COMPILERPATH)\include
|
||||||
|
#MATH_EXTRACT=*H_LDIV *H_LLSH *H_LURSH *N_LXMUL *F_LXMUL *H_LRSH *H_SPUSH *N_SCOPY
|
||||||
|
#MATH_INSERT=+H_LDIV +H_LLSH +H_LURSH +N_LXMUL +F_LXMUL +H_LRSH +H_SPUSH +N_SCOPY
|
||||||
|
|
||||||
|
|
||||||
# Use these for Borland C++
|
# Use these for Borland C++
|
||||||
@ -42,12 +46,17 @@ NASM=nasm
|
|||||||
#LIBPATH=$(COMPILERPATH)\lib
|
#LIBPATH=$(COMPILERPATH)\lib
|
||||||
#CLIB=$(COMPILERPATH)\lib\cs.lib
|
#CLIB=$(COMPILERPATH)\lib\cs.lib
|
||||||
#INCLUDEPATH=$(COMPILERPATH)\include
|
#INCLUDEPATH=$(COMPILERPATH)\include
|
||||||
|
#MATH_EXTRACT=*H_LDIV *H_LLSH *H_LURSH *N_LXMUL *F_LXMUL *H_LRSH *H_SPUSH *N_SCOPY
|
||||||
|
#MATH_INSERT=+H_LDIV +H_LLSH +H_LURSH +N_LXMUL +F_LXMUL +H_LRSH +H_SPUSH +N_SCOPY
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# $Id$
|
# $Id$
|
||||||
#
|
#
|
||||||
# $Log$
|
# $Log$
|
||||||
|
# Revision 1.4 2001/03/19 04:50:56 bartoldeman
|
||||||
|
# See history.txt for overview: put kernel 2022beo1 into CVS
|
||||||
|
#
|
||||||
# Revision 1.3 2000/05/25 20:56:19 jimtabor
|
# Revision 1.3 2000/05/25 20:56:19 jimtabor
|
||||||
# Fixed project history
|
# Fixed project history
|
||||||
#
|
#
|
||||||
|
@ -1,3 +1,19 @@
|
|||||||
|
2001 Mar 08 - Build 2022
|
||||||
|
-------- Bart Oldeman (bart.oldeman@bristol.ac.uk)
|
||||||
|
+ Fixes MCB chain corruption fix (thanks Tom Ehlert and Martin Stromberg)
|
||||||
|
Redirector fixes (CDROMs and DOSEmu lredir'ed drives appear to work fine now)
|
||||||
|
UMB fixes
|
||||||
|
Various recodings (dsk.c, prf.c, portab.h) to make kernel
|
||||||
|
object footprint 3k smaller (Tom Ehlert)
|
||||||
|
Fix handling of very long path names (Tom Ehlert)
|
||||||
|
FindFirst/FindNext fixes (Tom Ehlert)
|
||||||
|
Configuration for libm.mak is in config.mak (Martin Stromberg)
|
||||||
|
NLS fix to include pointer to CharMapSrvc. Note: these are
|
||||||
|
changes to automatically generated .asm files, but the
|
||||||
|
generator (GRAB_UNF.EXE) is missing. (thanks Tom Ehlert)
|
||||||
|
DosSelectDrv fix (Martin Stromberg)
|
||||||
|
config.c always converts to upper case and handles dos=umb correctly
|
||||||
|
|
||||||
2000 Dec 15 - Build 2022
|
2000 Dec 15 - Build 2022
|
||||||
-------- James Tabor (jimtabor@infohwy.com)
|
-------- James Tabor (jimtabor@infohwy.com)
|
||||||
+ Fixes Added Patches from Bart Oldeman (Bart.Oldeman@bristol.ac.uk)
|
+ Fixes Added Patches from Bart Oldeman (Bart.Oldeman@bristol.ac.uk)
|
||||||
|
10
hdr/portab.h
10
hdr/portab.h
@ -36,6 +36,12 @@ static char *portab_hRcsId = "$Id$";
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log$
|
* $Log$
|
||||||
|
* Revision 1.5 2001/03/19 04:50:56 bartoldeman
|
||||||
|
* See history.txt for overview: put kernel 2022beo1 into CVS
|
||||||
|
*
|
||||||
|
* Revision 1.5 2001/03/08 21:15:00 bartoldeman
|
||||||
|
* Fixes for MK_FP and friends from Tom Ehlert; reduces kernel by 1.5k.
|
||||||
|
*
|
||||||
* Revision 1.4 2000/08/06 04:18:21 jimtabor
|
* Revision 1.4 2000/08/06 04:18:21 jimtabor
|
||||||
* See history.txt
|
* See history.txt
|
||||||
*
|
*
|
||||||
@ -201,8 +207,8 @@ typedef signed long LONG;
|
|||||||
/* General far pointer macros */
|
/* General far pointer macros */
|
||||||
#ifdef I86
|
#ifdef I86
|
||||||
#ifndef MK_FP
|
#ifndef MK_FP
|
||||||
#define MK_FP(seg,ofs) ((VOID far *)(((LONG)(seg)<<16)|(UWORD)(ofs)))
|
#define MK_FP(seg,ofs) ((VOID far *)(((ULONG)(seg)<<16)|(UWORD)(ofs)))
|
||||||
#define FP_SEG(fp) ((UWORD)((LONG)(VOID FAR *)(fp)>>16))
|
#define FP_SEG(fp) ((UWORD)((ULONG)(VOID FAR *)(fp)>>16))
|
||||||
#define FP_OFF(fp) ((UWORD)(fp))
|
#define FP_OFF(fp) ((UWORD)(fp))
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -39,6 +39,12 @@ static BYTE *RcsId = "$Id$";
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log$
|
* $Log$
|
||||||
|
* Revision 1.9 2001/03/19 04:50:56 bartoldeman
|
||||||
|
* See history.txt for overview: put kernel 2022beo1 into CVS
|
||||||
|
*
|
||||||
|
* Revision 1.9 2001/03/08 21:15:00 bartoldeman
|
||||||
|
* Fixed handling of "DOS=UMB", use toupper instead of tolower consistently.
|
||||||
|
*
|
||||||
* Revision 1.8 2000/08/07 22:51:34 jimtabor
|
* Revision 1.8 2000/08/07 22:51:34 jimtabor
|
||||||
* Remove unused code
|
* Remove unused code
|
||||||
*
|
*
|
||||||
@ -206,23 +212,23 @@ struct table
|
|||||||
|
|
||||||
static struct table commands[] =
|
static struct table commands[] =
|
||||||
{
|
{
|
||||||
{"break", 1, Break},
|
{"BREAK", 1, Break},
|
||||||
{"buffers", 1, Buffers},
|
{"BUFFERS", 1, Buffers},
|
||||||
{"command", 1, InitPgm},
|
{"COMMAND", 1, InitPgm},
|
||||||
{"country", 1, Country},
|
{"COUNTRY", 1, Country},
|
||||||
{"device", 2, Device},
|
{"DEVICE", 2, Device},
|
||||||
{"devicehigh", 2, DeviceHigh},
|
{"DEVICEHIGH", 2, DeviceHigh},
|
||||||
{"dos", 2, Dosmem},
|
{"DOS", 2, Dosmem},
|
||||||
{"fcbs", 1, Fcbs},
|
{"FCBS", 1, Fcbs},
|
||||||
{"files", 1, Files},
|
{"FILES", 1, Files},
|
||||||
{"lastdrive", 1, Lastdrive},
|
{"LASTDRIVE", 1, Lastdrive},
|
||||||
/* rem is never executed by locking out pass */
|
/* rem is never executed by locking out pass */
|
||||||
{"rem", 0, CfgFailure},
|
{"REM", 0, CfgFailure},
|
||||||
{"shell", 1, InitPgm},
|
{"SHELL", 1, InitPgm},
|
||||||
{"stacks", 1, Stacks},
|
{"STACKS", 1, Stacks},
|
||||||
{"switchar", 1, Switchar},
|
{"SWITCHAR", 1, Switchar},
|
||||||
{"screen", 1, sysScreenMode}, /* JPP */
|
{"SCREEN", 1, sysScreenMode}, /* JPP */
|
||||||
{"version", 1, sysVersion}, /* JPP */
|
{"VERSION", 1, sysVersion}, /* JPP */
|
||||||
/* default action */
|
/* default action */
|
||||||
{"", -1, CfgFailure}
|
{"", -1, CfgFailure}
|
||||||
};
|
};
|
||||||
@ -403,8 +409,8 @@ INIT VOID configDone(VOID)
|
|||||||
if(UmbState == 1)
|
if(UmbState == 1)
|
||||||
{
|
{
|
||||||
|
|
||||||
mumcb_init((mcb FAR *) (MK_FP(0x9fff, 0)),
|
mumcb_init((mcb FAR *) (MK_FP(64*ram_top - 1, 0)),
|
||||||
umb_start - 0x9fff - 1);
|
umb_start - 64*ram_top);
|
||||||
/* Check if any devices were loaded in umb */
|
/* Check if any devices were loaded in umb */
|
||||||
if(umb_start != FP_SEG(upBase) ){
|
if(umb_start != FP_SEG(upBase) ){
|
||||||
/* make last block normal with SC for the devices */
|
/* make last block normal with SC for the devices */
|
||||||
@ -535,9 +541,9 @@ INIT VOID DoConfig(VOID)
|
|||||||
/* Skip leading white space and get verb. */
|
/* Skip leading white space and get verb. */
|
||||||
pLine = scan(pLine, szBuf);
|
pLine = scan(pLine, szBuf);
|
||||||
|
|
||||||
/* Translate the verb to lower case ... */
|
/* Translate the verb to upper case ... */
|
||||||
for (pTmp = szBuf; *pTmp != '\0'; pTmp++)
|
for (pTmp = szBuf; *pTmp != '\0'; pTmp++)
|
||||||
*pTmp = tolower(*pTmp);
|
*pTmp = toupper(*pTmp);
|
||||||
|
|
||||||
/* If the line was blank, skip it. Otherwise, look up */
|
/* If the line was blank, skip it. Otherwise, look up */
|
||||||
/* the verb and execute the appropriate function. */
|
/* the verb and execute the appropriate function. */
|
||||||
@ -715,11 +721,15 @@ INIT static VOID Lastdrive(BYTE * pLine)
|
|||||||
|
|
||||||
INIT static VOID Dosmem(BYTE * pLine)
|
INIT static VOID Dosmem(BYTE * pLine)
|
||||||
{
|
{
|
||||||
|
BYTE *pTmp;
|
||||||
|
|
||||||
if(UmbState == 0){
|
if(UmbState == 0){
|
||||||
uppermem_link = 0;
|
uppermem_link = 0;
|
||||||
uppermem_root = 0;
|
uppermem_root = 0;
|
||||||
GetStringArg(pLine, szBuf);
|
GetStringArg(pLine, szBuf);
|
||||||
UmbState = strcmp(szBuf, "UMB") ? 2 : 0;
|
for (pTmp = szBuf; *pTmp != '\0'; pTmp++)
|
||||||
|
*pTmp = toupper(*pTmp);
|
||||||
|
UmbState = strcmp(szBuf, "UMB") ? 0 : 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -861,7 +871,7 @@ INIT static VOID DeviceHigh(BYTE * pLine)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("UMB's unavalable!\n");
|
printf("UMB's unavailable!\n");
|
||||||
LoadDevice(pLine, ram_top, FALSE);
|
LoadDevice(pLine, ram_top, FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1037,6 +1047,7 @@ INIT BYTE *GetNumber(REG BYTE * pszString, REG COUNT * pnNum)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Yet another change for true portability (WDL) */
|
/* Yet another change for true portability (WDL) */
|
||||||
|
#if 0
|
||||||
INIT COUNT tolower(COUNT c)
|
INIT COUNT tolower(COUNT c)
|
||||||
{
|
{
|
||||||
if (c >= 'A' && c <= 'Z')
|
if (c >= 'A' && c <= 'Z')
|
||||||
@ -1044,6 +1055,7 @@ INIT COUNT tolower(COUNT c)
|
|||||||
else
|
else
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Yet another change for true portability (PJV) */
|
/* Yet another change for true portability (PJV) */
|
||||||
INIT COUNT toupper(COUNT c)
|
INIT COUNT toupper(COUNT c)
|
||||||
|
213
kernel/dsk.c
213
kernel/dsk.c
@ -33,6 +33,12 @@ static BYTE *dskRcsId = "$Id$";
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log$
|
* $Log$
|
||||||
|
* Revision 1.9 2001/03/19 04:50:56 bartoldeman
|
||||||
|
* See history.txt for overview: put kernel 2022beo1 into CVS
|
||||||
|
*
|
||||||
|
* Revision 1.9 2001/03/08 21:15:00 bartoldeman
|
||||||
|
* Space saving fixes from Tom Ehlert
|
||||||
|
*
|
||||||
* Revision 1.8 2000/06/21 18:16:46 jimtabor
|
* Revision 1.8 2000/06/21 18:16:46 jimtabor
|
||||||
* Add UMB code, patch, and code fixes
|
* Add UMB code, patch, and code fixes
|
||||||
*
|
*
|
||||||
@ -181,6 +187,10 @@ static struct FS_info fsarray[NDEV];
|
|||||||
static bpb bpbarray[NDEV]; /* BIOS parameter blocks */
|
static bpb bpbarray[NDEV]; /* BIOS parameter blocks */
|
||||||
static bpb *bpbptrs[NDEV]; /* pointers to bpbs */
|
static bpb *bpbptrs[NDEV]; /* pointers to bpbs */
|
||||||
|
|
||||||
|
/*TE - array access functions */
|
||||||
|
struct media_info *getPMiarray(int dev) { return &miarray[dev];}
|
||||||
|
bpb *getPBpbarray(unsigned dev){ return &bpbarray[dev];}
|
||||||
|
|
||||||
#define N_PART 4 /* number of partitions per
|
#define N_PART 4 /* number of partitions per
|
||||||
table partition */
|
table partition */
|
||||||
|
|
||||||
@ -226,7 +236,7 @@ WORD init(rqptr),
|
|||||||
blk_noerr(rqptr),
|
blk_noerr(rqptr),
|
||||||
blk_nondr(rqptr),
|
blk_nondr(rqptr),
|
||||||
blk_error(rqptr);
|
blk_error(rqptr);
|
||||||
COUNT ltop(WORD *, WORD *, WORD *, COUNT, COUNT, LONG, byteptr);
|
COUNT ltop(WORD *, WORD *, WORD *, COUNT, COUNT, ULONG, byteptr);
|
||||||
WORD dskerr(COUNT);
|
WORD dskerr(COUNT);
|
||||||
COUNT processtable(COUNT ptDrive, BYTE ptHead, UWORD ptCylinder, BYTE ptSector, LONG ptAccuOff);
|
COUNT processtable(COUNT ptDrive, BYTE ptHead, UWORD ptCylinder, BYTE ptSector, LONG ptAccuOff);
|
||||||
#else
|
#else
|
||||||
@ -311,7 +321,8 @@ COUNT processtable(COUNT ptDrive, BYTE ptHead, UWORD ptCylinder,
|
|||||||
LONG peStartSector;
|
LONG peStartSector;
|
||||||
LONG peSectors;
|
LONG peSectors;
|
||||||
}
|
}
|
||||||
temp_part[N_PART];
|
temp_part[N_PART],
|
||||||
|
*ptemp_part; /*TE*/
|
||||||
|
|
||||||
REG retry = N_RETRY;
|
REG retry = N_RETRY;
|
||||||
UBYTE packed_byte,
|
UBYTE packed_byte,
|
||||||
@ -363,49 +374,52 @@ COUNT processtable(COUNT ptDrive, BYTE ptHead, UWORD ptCylinder,
|
|||||||
array and process extended partitions */
|
array and process extended partitions */
|
||||||
for (Part = 0; Part < N_PART && nUnits < NDEV; Part++)
|
for (Part = 0; Part < N_PART && nUnits < NDEV; Part++)
|
||||||
{
|
{
|
||||||
if (temp_part[Part].peFileSystem == FAT12 ||
|
/*TE*/
|
||||||
temp_part[Part].peFileSystem == FAT16SMALL ||
|
ptemp_part = &temp_part[Part];
|
||||||
temp_part[Part].peFileSystem == FAT16LARGE)
|
|
||||||
|
if (ptemp_part->peFileSystem == FAT12 ||
|
||||||
|
ptemp_part->peFileSystem == FAT16SMALL ||
|
||||||
|
ptemp_part->peFileSystem == FAT16LARGE)
|
||||||
{
|
{
|
||||||
miarray[nUnits].mi_offset =
|
miarray[nUnits].mi_offset =
|
||||||
temp_part[Part].peStartSector + ptAccuOff;
|
ptemp_part->peStartSector + ptAccuOff;
|
||||||
miarray[nUnits].mi_drive = ptDrive;
|
miarray[nUnits].mi_drive = ptDrive;
|
||||||
miarray[nUnits].mi_partidx = nPartitions;
|
miarray[nUnits].mi_partidx = nPartitions;
|
||||||
nUnits++;
|
nUnits++;
|
||||||
|
|
||||||
dos_partition[nPartitions].peDrive = ptDrive;
|
dos_partition[nPartitions].peDrive = ptDrive;
|
||||||
dos_partition[nPartitions].peBootable =
|
dos_partition[nPartitions].peBootable =
|
||||||
temp_part[Part].peBootable;
|
ptemp_part->peBootable;
|
||||||
dos_partition[nPartitions].peBeginHead =
|
dos_partition[nPartitions].peBeginHead =
|
||||||
temp_part[Part].peBeginHead;
|
ptemp_part->peBeginHead;
|
||||||
dos_partition[nPartitions].peBeginSector =
|
dos_partition[nPartitions].peBeginSector =
|
||||||
temp_part[Part].peBeginSector;
|
ptemp_part->peBeginSector;
|
||||||
dos_partition[nPartitions].peBeginCylinder =
|
dos_partition[nPartitions].peBeginCylinder =
|
||||||
temp_part[Part].peBeginCylinder;
|
ptemp_part->peBeginCylinder;
|
||||||
dos_partition[nPartitions].peFileSystem =
|
dos_partition[nPartitions].peFileSystem =
|
||||||
temp_part[Part].peFileSystem;
|
ptemp_part->peFileSystem;
|
||||||
dos_partition[nPartitions].peEndHead =
|
dos_partition[nPartitions].peEndHead =
|
||||||
temp_part[Part].peEndHead;
|
ptemp_part->peEndHead;
|
||||||
dos_partition[nPartitions].peEndSector =
|
dos_partition[nPartitions].peEndSector =
|
||||||
temp_part[Part].peEndSector;
|
ptemp_part->peEndSector;
|
||||||
dos_partition[nPartitions].peEndCylinder =
|
dos_partition[nPartitions].peEndCylinder =
|
||||||
temp_part[Part].peEndCylinder;
|
ptemp_part->peEndCylinder;
|
||||||
dos_partition[nPartitions].peStartSector =
|
dos_partition[nPartitions].peStartSector =
|
||||||
temp_part[Part].peStartSector;
|
ptemp_part->peStartSector;
|
||||||
dos_partition[nPartitions].peSectors =
|
dos_partition[nPartitions].peSectors =
|
||||||
temp_part[Part].peSectors;
|
ptemp_part->peSectors;
|
||||||
dos_partition[nPartitions].peAbsStart =
|
dos_partition[nPartitions].peAbsStart =
|
||||||
temp_part[Part].peStartSector + ptAccuOff;
|
ptemp_part->peStartSector + ptAccuOff;
|
||||||
nPartitions++;
|
nPartitions++;
|
||||||
}
|
}
|
||||||
else if (temp_part[Part].peFileSystem == EXTENDED)
|
else if (ptemp_part->peFileSystem == EXTENDED)
|
||||||
{
|
{
|
||||||
/* call again to process extended part table */
|
/* call again to process extended part table */
|
||||||
processtable(ptDrive,
|
processtable(ptDrive,
|
||||||
temp_part[Part].peBeginHead,
|
ptemp_part->peBeginHead,
|
||||||
temp_part[Part].peBeginCylinder,
|
ptemp_part->peBeginCylinder,
|
||||||
temp_part[Part].peBeginSector,
|
ptemp_part->peBeginSector,
|
||||||
temp_part[Part].peStartSector + ptAccuOff);
|
ptemp_part->peStartSector + ptAccuOff);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -429,6 +443,9 @@ static WORD init(rqptr rp)
|
|||||||
COUNT HardDrive,
|
COUNT HardDrive,
|
||||||
nHardDisk,
|
nHardDisk,
|
||||||
Unit;
|
Unit;
|
||||||
|
struct media_info *pmiarray;
|
||||||
|
bpb *pbpbarray;
|
||||||
|
|
||||||
|
|
||||||
/* Reset the drives */
|
/* Reset the drives */
|
||||||
fl_reset(0x80);
|
fl_reset(0x80);
|
||||||
@ -441,26 +458,31 @@ static WORD init(rqptr rp)
|
|||||||
/* Setup media info and BPBs arrays */
|
/* Setup media info and BPBs arrays */
|
||||||
for (Unit = 0; Unit < NDEV; Unit++)
|
for (Unit = 0; Unit < NDEV; Unit++)
|
||||||
{
|
{
|
||||||
miarray[Unit].mi_size = 720l;
|
pmiarray = getPMiarray(Unit);
|
||||||
miarray[Unit].mi_heads = 2;
|
|
||||||
miarray[Unit].mi_cyls = 40;
|
pmiarray->mi_size = 720l;
|
||||||
miarray[Unit].mi_sectors = 9;
|
pmiarray->mi_heads = 2;
|
||||||
miarray[Unit].mi_offset = 0l;
|
pmiarray->mi_cyls = 40;
|
||||||
miarray[Unit].mi_drive = Unit;
|
pmiarray->mi_sectors = 9;
|
||||||
|
pmiarray->mi_offset = 0l;
|
||||||
|
pmiarray->mi_drive = Unit;
|
||||||
|
|
||||||
fsarray[Unit].fs_serialno = 0x12345678;
|
fsarray[Unit].fs_serialno = 0x12345678;
|
||||||
|
|
||||||
|
/*TE*/
|
||||||
|
pbpbarray = getPBpbarray(Unit);
|
||||||
|
|
||||||
bpbarray[Unit].bpb_nbyte = SEC_SIZE;
|
|
||||||
bpbarray[Unit].bpb_nsector = 2;
|
|
||||||
bpbarray[Unit].bpb_nreserved = 1;
|
|
||||||
bpbarray[Unit].bpb_nfat = 2;
|
|
||||||
bpbarray[Unit].bpb_ndirent = 112;
|
|
||||||
bpbarray[Unit].bpb_nsize = 720l;
|
|
||||||
bpbarray[Unit].bpb_mdesc = 0xfd;
|
|
||||||
bpbarray[Unit].bpb_nfsect = 2;
|
|
||||||
|
|
||||||
bpbptrs[Unit] = &bpbarray[Unit];
|
pbpbarray->bpb_nbyte = SEC_SIZE;
|
||||||
|
pbpbarray->bpb_nsector = 2;
|
||||||
|
pbpbarray->bpb_nreserved = 1;
|
||||||
|
pbpbarray->bpb_nfat = 2;
|
||||||
|
pbpbarray->bpb_ndirent = 112;
|
||||||
|
pbpbarray->bpb_nsize = 720l;
|
||||||
|
pbpbarray->bpb_mdesc = 0xfd;
|
||||||
|
pbpbarray->bpb_nfsect = 2;
|
||||||
|
|
||||||
|
bpbptrs[Unit] = pbpbarray;
|
||||||
};
|
};
|
||||||
|
|
||||||
nHardDisk = fl_nrdrives();
|
nHardDisk = fl_nrdrives();
|
||||||
@ -596,25 +618,31 @@ static WORD bldbpb(rqptr rp)
|
|||||||
ULONG count, i;
|
ULONG count, i;
|
||||||
byteptr trans;
|
byteptr trans;
|
||||||
WORD local_word;
|
WORD local_word;
|
||||||
|
/*TE*/
|
||||||
|
bpb *pbpbarray;
|
||||||
|
struct media_info *pmiarray;
|
||||||
|
|
||||||
ret = RWzero( rp, 0);
|
ret = RWzero( rp, 0);
|
||||||
|
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
return (dskerr(ret));
|
return (dskerr(ret));
|
||||||
|
|
||||||
getword(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NBYTE]), &bpbarray[rp->r_unit].bpb_nbyte);
|
/*TE ~ 200 bytes*/
|
||||||
getbyte(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NSECTOR]), &bpbarray[rp->r_unit].bpb_nsector);
|
pbpbarray = getPBpbarray(rp->r_unit);
|
||||||
getword(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NRESERVED]), &bpbarray[rp->r_unit].bpb_nreserved);
|
|
||||||
getbyte(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NFAT]), &bpbarray[rp->r_unit].bpb_nfat);
|
getword(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NBYTE]), &pbpbarray->bpb_nbyte);
|
||||||
getword(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NDIRENT]), &bpbarray[rp->r_unit].bpb_ndirent);
|
getbyte(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NSECTOR]), &pbpbarray->bpb_nsector);
|
||||||
getword(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NSIZE]), &bpbarray[rp->r_unit].bpb_nsize);
|
getword(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NRESERVED]), &pbpbarray->bpb_nreserved);
|
||||||
getword(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NSIZE]), &bpbarray[rp->r_unit].bpb_nsize);
|
getbyte(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NFAT]), &pbpbarray->bpb_nfat);
|
||||||
getbyte(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_MDESC]), &bpbarray[rp->r_unit].bpb_mdesc);
|
getword(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NDIRENT]), &pbpbarray->bpb_ndirent);
|
||||||
getword(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NFSECT]), &bpbarray[rp->r_unit].bpb_nfsect);
|
getword(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NSIZE]), &pbpbarray->bpb_nsize);
|
||||||
getword(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NSECS]), &bpbarray[rp->r_unit].bpb_nsecs);
|
getword(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NSIZE]), &pbpbarray->bpb_nsize);
|
||||||
getword(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NHEADS]), &bpbarray[rp->r_unit].bpb_nheads);
|
getbyte(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_MDESC]), &pbpbarray->bpb_mdesc);
|
||||||
getlong(&((((BYTE *) & buffer.bytes[BT_BPB])[BPB_HIDDEN])), &bpbarray[rp->r_unit].bpb_hidden);
|
getword(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NFSECT]), &pbpbarray->bpb_nfsect);
|
||||||
getlong(&((((BYTE *) & buffer.bytes[BT_BPB])[BPB_HUGE])), &bpbarray[rp->r_unit].bpb_huge);
|
getword(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NSECS]), &pbpbarray->bpb_nsecs);
|
||||||
|
getword(&((((BYTE *) & buffer.bytes[BT_BPB]))[BPB_NHEADS]), &pbpbarray->bpb_nheads);
|
||||||
|
getlong(&((((BYTE *) & buffer.bytes[BT_BPB])[BPB_HIDDEN])), &pbpbarray->bpb_hidden);
|
||||||
|
getlong(&((((BYTE *) & buffer.bytes[BT_BPB])[BPB_HUGE])), &pbpbarray->bpb_huge);
|
||||||
|
|
||||||
/* Needs fat32 offset code */
|
/* Needs fat32 offset code */
|
||||||
|
|
||||||
@ -627,40 +655,43 @@ static WORD bldbpb(rqptr rp)
|
|||||||
|
|
||||||
|
|
||||||
#ifdef DSK_DEBUG
|
#ifdef DSK_DEBUG
|
||||||
printf("BPB_NBYTE = %04x\n", bpbarray[rp->r_unit].bpb_nbyte);
|
printf("BPB_NBYTE = %04x\n", pbpbarray->bpb_nbyte);
|
||||||
printf("BPB_NSECTOR = %02x\n", bpbarray[rp->r_unit].bpb_nsector);
|
printf("BPB_NSECTOR = %02x\n", pbpbarray->bpb_nsector);
|
||||||
printf("BPB_NRESERVED = %04x\n", bpbarray[rp->r_unit].bpb_nreserved);
|
printf("BPB_NRESERVED = %04x\n", pbpbarray->bpb_nreserved);
|
||||||
printf("BPB_NFAT = %02x\n", bpbarray[rp->r_unit].bpb_nfat);
|
printf("BPB_NFAT = %02x\n", pbpbarray->bpb_nfat);
|
||||||
printf("BPB_NDIRENT = %04x\n", bpbarray[rp->r_unit].bpb_ndirent);
|
printf("BPB_NDIRENT = %04x\n", pbpbarray->bpb_ndirent);
|
||||||
printf("BPB_NSIZE = %04x\n", bpbarray[rp->r_unit].bpb_nsize);
|
printf("BPB_NSIZE = %04x\n", pbpbarray->bpb_nsize);
|
||||||
printf("BPB_MDESC = %02x\n", bpbarray[rp->r_unit].bpb_mdesc);
|
printf("BPB_MDESC = %02x\n", pbpbarray->bpb_mdesc);
|
||||||
printf("BPB_NFSECT = %04x\n", bpbarray[rp->r_unit].bpb_nfsect);
|
printf("BPB_NFSECT = %04x\n", pbpbarray->bpb_nfsect);
|
||||||
#endif
|
#endif
|
||||||
rp->r_bpptr = &bpbarray[rp->r_unit];
|
rp->r_bpptr = pbpbarray;
|
||||||
count = miarray[rp->r_unit].mi_size =
|
|
||||||
bpbarray[rp->r_unit].bpb_nsize == 0 ?
|
pmiarray = getPMiarray(rp->r_unit);
|
||||||
bpbarray[rp->r_unit].bpb_huge :
|
|
||||||
bpbarray[rp->r_unit].bpb_nsize;
|
count = pmiarray->mi_size =
|
||||||
getword((&(((BYTE *) & buffer.bytes[BT_BPB])[BPB_NHEADS])), &miarray[rp->r_unit].mi_heads);
|
pbpbarray->bpb_nsize == 0 ?
|
||||||
head = miarray[rp->r_unit].mi_heads;
|
pbpbarray->bpb_huge :
|
||||||
getword((&(((BYTE *) & buffer.bytes[BT_BPB])[BPB_NSECS])), &miarray[rp->r_unit].mi_sectors);
|
pbpbarray->bpb_nsize;
|
||||||
if (miarray[rp->r_unit].mi_size == 0)
|
getword((&(((BYTE *) & buffer.bytes[BT_BPB])[BPB_NHEADS])), &pmiarray->mi_heads);
|
||||||
getlong(&((((BYTE *) & buffer.bytes[BT_BPB])[BPB_HUGE])), &miarray[rp->r_unit].mi_size);
|
head = pmiarray->mi_heads;
|
||||||
sector = miarray[rp->r_unit].mi_sectors;
|
getword((&(((BYTE *) & buffer.bytes[BT_BPB])[BPB_NSECS])), &pmiarray->mi_sectors);
|
||||||
|
if (pmiarray->mi_size == 0)
|
||||||
|
getlong(&((((BYTE *) & buffer.bytes[BT_BPB])[BPB_HUGE])), &pmiarray->mi_size);
|
||||||
|
sector = pmiarray->mi_sectors;
|
||||||
|
|
||||||
if (head == 0 || sector == 0)
|
if (head == 0 || sector == 0)
|
||||||
{
|
{
|
||||||
tmark();
|
tmark();
|
||||||
return failure(E_FAILURE);
|
return failure(E_FAILURE);
|
||||||
}
|
}
|
||||||
miarray[rp->r_unit].mi_cyls = count / (head * sector);
|
pmiarray->mi_cyls = count / (head * sector);
|
||||||
tmark();
|
tmark();
|
||||||
|
|
||||||
#ifdef DSK_DEBUG
|
#ifdef DSK_DEBUG
|
||||||
printf("BPB_NSECS = %04x\n", sector);
|
printf("BPB_NSECS = %04x\n", sector);
|
||||||
printf("BPB_NHEADS = %04x\n", head);
|
printf("BPB_NHEADS = %04x\n", head);
|
||||||
printf("BPB_HIDDEN = %08lx\n", bpbarray[rp->r_unit].bpb_hidden);
|
printf("BPB_HIDDEN = %08lx\n", pbpbarray->bpb_hidden);
|
||||||
printf("BPB_HUGE = %08lx\n", bpbarray[rp->r_unit].bpb_huge);
|
printf("BPB_HUGE = %08lx\n", pbpbarray->bpb_huge);
|
||||||
#endif
|
#endif
|
||||||
return S_DONE;
|
return S_DONE;
|
||||||
}
|
}
|
||||||
@ -893,29 +924,39 @@ static WORD dskerr(COUNT code)
|
|||||||
/* */
|
/* */
|
||||||
/* Do logical block number to physical head/track/sector mapping */
|
/* Do logical block number to physical head/track/sector mapping */
|
||||||
/* */
|
/* */
|
||||||
static COUNT ltop(WORD * trackp, WORD * sectorp, WORD * headp, REG COUNT unit, COUNT count, LONG strt_sect, byteptr strt_addr)
|
static COUNT ltop(WORD * trackp, WORD * sectorp, WORD * headp, COUNT unit, COUNT count, ULONG strt_sect, byteptr strt_addr)
|
||||||
{
|
{
|
||||||
#ifdef I86
|
#ifdef I86
|
||||||
ULONG ltemp;
|
UWORD utemp;
|
||||||
#endif
|
#endif
|
||||||
REG ls,
|
REG struct media_info *pmiarray;
|
||||||
ps;
|
|
||||||
|
|
||||||
#ifdef I86
|
#ifdef I86
|
||||||
|
/*TE*/
|
||||||
/* Adjust for segmented architecture */
|
/* Adjust for segmented architecture */
|
||||||
ltemp = (((ULONG) mk_segment(strt_addr) << 4) + mk_offset(strt_addr)) & 0xffff;
|
utemp = (((UWORD) mk_segment(strt_addr) << 4) + mk_offset(strt_addr));
|
||||||
/* Test for 64K boundary crossing and return count large */
|
/* Test for 64K boundary crossing and return count large */
|
||||||
/* enough not to exceed the threshold. */
|
/* enough not to exceed the threshold. */
|
||||||
count = (((ltemp + SEC_SIZE * count) & 0xffff0000l) != 0l)
|
|
||||||
? (0xffffl - ltemp) / SEC_SIZE
|
#define SEC_SHIFT 9 /* = 0x200 = 512 */
|
||||||
: count;
|
|
||||||
|
utemp >>= SEC_SHIFT;
|
||||||
|
|
||||||
|
if (count > (0xffff >> SEC_SHIFT) - utemp)
|
||||||
|
{
|
||||||
|
count = (0xffff >> SEC_SHIFT) - utemp;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
*trackp = strt_sect / (miarray[unit].mi_heads * miarray[unit].mi_sectors);
|
/*TE*/
|
||||||
*sectorp = strt_sect % miarray[unit].mi_sectors + 1;
|
pmiarray = getPMiarray(unit);
|
||||||
*headp = (strt_sect % (miarray[unit].mi_sectors * miarray[unit].mi_heads))
|
|
||||||
/ miarray[unit].mi_sectors;
|
*trackp = strt_sect / (pmiarray->mi_heads * pmiarray->mi_sectors);
|
||||||
if (*sectorp + count > miarray[unit].mi_sectors + 1)
|
*sectorp = strt_sect % pmiarray->mi_sectors + 1;
|
||||||
count = miarray[unit].mi_sectors + 1 - *sectorp;
|
*headp = (strt_sect % (pmiarray->mi_sectors * pmiarray->mi_heads))
|
||||||
|
/ pmiarray->mi_sectors;
|
||||||
|
if (*sectorp + count > pmiarray->mi_sectors + 1)
|
||||||
|
count = pmiarray->mi_sectors + 1 - *sectorp;
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,12 @@ static BYTE *fatdirRcsId = "$Id$";
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log$
|
* $Log$
|
||||||
|
* Revision 1.10 2001/03/19 04:50:56 bartoldeman
|
||||||
|
* See history.txt for overview: put kernel 2022beo1 into CVS
|
||||||
|
*
|
||||||
|
* Revision 1.10 2001/03/08 21:00:00 bartoldeman
|
||||||
|
* Fix handling of very long path names (Tom Ehlert)
|
||||||
|
*
|
||||||
* Revision 1.9 2000/08/06 05:50:17 jimtabor
|
* Revision 1.9 2000/08/06 05:50:17 jimtabor
|
||||||
* Add new files and update cvs with patches and changes
|
* Add new files and update cvs with patches and changes
|
||||||
*
|
*
|
||||||
@ -583,7 +589,9 @@ COUNT dos_findfirst(UCOUNT attr, BYTE FAR * name)
|
|||||||
local_ext[FEXT_SIZE + 1],
|
local_ext[FEXT_SIZE + 1],
|
||||||
Tname[65];
|
Tname[65];
|
||||||
|
|
||||||
fscopy(name, (BYTE FAR *)&Tname);
|
fsncopy(name, (BYTE FAR *)&Tname, sizeof(Tname));
|
||||||
|
Tname[sizeof(Tname)-1]=0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
printf("ff %s", Tname);
|
printf("ff %s", Tname);
|
||||||
*/
|
*/
|
||||||
|
@ -36,6 +36,12 @@ BYTE *RcsId = "$Id$";
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log$
|
* $Log$
|
||||||
|
* Revision 1.9 2001/03/19 04:50:56 bartoldeman
|
||||||
|
* See history.txt for overview: put kernel 2022beo1 into CVS
|
||||||
|
*
|
||||||
|
* Revision 1.9 2001/03/08 21:00:00 bartoldeman
|
||||||
|
* Disabled select_unit() since it's not used
|
||||||
|
*
|
||||||
* Revision 1.8 2000/10/29 23:51:56 jimtabor
|
* Revision 1.8 2000/10/29 23:51:56 jimtabor
|
||||||
* Adding Share Support by Ron Cemer
|
* Adding Share Support by Ron Cemer
|
||||||
*
|
*
|
||||||
@ -2300,6 +2306,7 @@ COUNT xlt_fnp(struct f_node FAR * fnp)
|
|||||||
return fnp - f_nodes;
|
return fnp - f_nodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
struct dhdr FAR *select_unit(COUNT drive)
|
struct dhdr FAR *select_unit(COUNT drive)
|
||||||
{
|
{
|
||||||
/* Just get the header from the dhdr array */
|
/* Just get the header from the dhdr array */
|
||||||
@ -2308,4 +2315,4 @@ struct dhdr FAR *select_unit(COUNT drive)
|
|||||||
return (struct dhdr FAR *)CDSp->cds_table[drive].cdsDpb;
|
return (struct dhdr FAR *)CDSp->cds_table[drive].cdsDpb;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
@ -36,6 +36,12 @@ BYTE *RcsId = "$Id$";
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log$
|
* $Log$
|
||||||
|
* Revision 1.13 2001/03/19 04:50:56 bartoldeman
|
||||||
|
* See history.txt for overview: put kernel 2022beo1 into CVS
|
||||||
|
*
|
||||||
|
* Revision 1.13 2001/03/08 21:00:00 bartoldeman
|
||||||
|
* MCB chain corruption and DosFindNext fix (thanks Martin Stromberg and Tom Ehlert)
|
||||||
|
*
|
||||||
* Revision 1.12 2000/12/16 01:38:35 jimtabor
|
* Revision 1.12 2000/12/16 01:38:35 jimtabor
|
||||||
* Added patches from Bart Oldeman
|
* Added patches from Bart Oldeman
|
||||||
*
|
*
|
||||||
@ -1199,6 +1205,7 @@ dispatch:
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
r->FLAGS &= ~FLG_CARRY;
|
r->FLAGS &= ~FLG_CARRY;
|
||||||
|
r->AX = -SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1305,8 +1312,10 @@ dispatch:
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x03:
|
case 0x03:
|
||||||
DosUmbLink(r->BL);
|
if (uppermem_root) {
|
||||||
break;
|
DosUmbLink(r->BL);
|
||||||
|
break;
|
||||||
|
} /* else fall through */
|
||||||
|
|
||||||
default:
|
default:
|
||||||
goto error_invalid;
|
goto error_invalid;
|
||||||
|
@ -28,6 +28,12 @@
|
|||||||
; $Id$
|
; $Id$
|
||||||
;
|
;
|
||||||
; $Log$
|
; $Log$
|
||||||
|
; Revision 1.6 2001/03/19 04:50:56 bartoldeman
|
||||||
|
; See history.txt for overview: put kernel 2022beo1 into CVS
|
||||||
|
;
|
||||||
|
; Revision 1.6 2001/03/08 21:15:00 bartoldeman
|
||||||
|
; uppermem_root initialised to 0 (no UMBs).
|
||||||
|
;
|
||||||
; Revision 1.5 2000/08/06 05:50:17 jimtabor
|
; Revision 1.5 2000/08/06 05:50:17 jimtabor
|
||||||
; Add new files and update cvs with patches and changes
|
; Add new files and update cvs with patches and changes
|
||||||
;
|
;
|
||||||
@ -318,7 +324,7 @@ _uppermem_link db 0 ; 0063 upper memory link flag
|
|||||||
global _UMB_top
|
global _UMB_top
|
||||||
_UMB_top dw 0 ; 0064 unknown UMB_top will do for now
|
_UMB_top dw 0 ; 0064 unknown UMB_top will do for now
|
||||||
global _uppermem_root
|
global _uppermem_root
|
||||||
_uppermem_root dw 0FFFFh ; 0066 dmd_upper_root
|
_uppermem_root dw 0 ; 0066 dmd_upper_root
|
||||||
global _umb_start
|
global _umb_start
|
||||||
_umb_start dw 0 ; 0068 para of last mem search
|
_umb_start dw 0 ; 0068 para of last mem search
|
||||||
SysVarEnd:
|
SysVarEnd:
|
||||||
|
@ -5,6 +5,9 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
# $Log$
|
# $Log$
|
||||||
|
# Revision 1.5 2001/03/19 04:50:56 bartoldeman
|
||||||
|
# See history.txt for overview: put kernel 2022beo1 into CVS
|
||||||
|
#
|
||||||
# Revision 1.4 2000/08/06 05:50:17 jimtabor
|
# Revision 1.4 2000/08/06 05:50:17 jimtabor
|
||||||
# Add new files and update cvs with patches and changes
|
# Add new files and update cvs with patches and changes
|
||||||
#
|
#
|
||||||
@ -209,7 +212,7 @@ clean:
|
|||||||
# XXX: This is a very ugly way of linking the kernel, forced upon us by the
|
# XXX: This is a very ugly way of linking the kernel, forced upon us by the
|
||||||
# inability of Turbo `make' 2.0 to perform command line redirection. -- ror4
|
# inability of Turbo `make' 2.0 to perform command line redirection. -- ror4
|
||||||
kernel.exe: $(EXE_dependencies) $(LIBS)
|
kernel.exe: $(EXE_dependencies) $(LIBS)
|
||||||
del kernel.lib
|
$(RM) kernel.lib
|
||||||
$(LIBUTIL) kernel +entry +io +blockio +chario +dosfns +console
|
$(LIBUTIL) kernel +entry +io +blockio +chario +dosfns +console
|
||||||
$(LIBUTIL) kernel +printer +serial +dsk +error +fatdir +fatfs
|
$(LIBUTIL) kernel +printer +serial +dsk +error +fatdir +fatfs
|
||||||
$(LIBUTIL) kernel +fattab +fcbfns +initoem +inthndlr +ioctl +nls_hc
|
$(LIBUTIL) kernel +fattab +fcbfns +initoem +inthndlr +ioctl +nls_hc
|
||||||
@ -218,9 +221,9 @@ kernel.exe: $(EXE_dependencies) $(LIBS)
|
|||||||
$(LIBUTIL) kernel +systime +task +int2f +irqstack +apisupt
|
$(LIBUTIL) kernel +systime +task +int2f +irqstack +apisupt
|
||||||
$(LIBUTIL) kernel +asmsupt +execrh +nlssupt +procsupt +break
|
$(LIBUTIL) kernel +asmsupt +execrh +nlssupt +procsupt +break
|
||||||
$(LIBUTIL) kernel +dosidle
|
$(LIBUTIL) kernel +dosidle
|
||||||
del kernel.bak
|
$(RM) kernel.bak
|
||||||
$(LINK) /m/c/L$(LIBPATH) kernel,kernel,kernel,kernel+$(LIBS);
|
$(LINK) /m/c/L$(LIBPATH) kernel,kernel,kernel,kernel+$(LIBS);
|
||||||
del kernel.lib
|
$(RM) kernel.lib
|
||||||
|
|
||||||
# *Individual File Dependencies*
|
# *Individual File Dependencies*
|
||||||
kernel.obj: kernel.asm segs.inc
|
kernel.obj: kernel.asm segs.inc
|
||||||
|
@ -35,6 +35,12 @@ static BYTE *memmgrRcsId = "$Id$";
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log$
|
* $Log$
|
||||||
|
* Revision 1.8 2001/03/19 04:50:56 bartoldeman
|
||||||
|
* See history.txt for overview: put kernel 2022beo1 into CVS
|
||||||
|
*
|
||||||
|
* Revision 1.8 2001/03/08 21:00:00 bartoldeman
|
||||||
|
* UMB and MCB chain corruption (thanks Martin Stromberg) fixes
|
||||||
|
*
|
||||||
* Revision 1.7 2000/08/07 04:53:54 jimtabor
|
* Revision 1.7 2000/08/07 04:53:54 jimtabor
|
||||||
* Cleanup code
|
* Cleanup code
|
||||||
*
|
*
|
||||||
@ -191,18 +197,19 @@ COUNT DosMemAlloc(UWORD size, COUNT mode, seg FAR * para, UWORD FAR * asize)
|
|||||||
REG mcb FAR *p;
|
REG mcb FAR *p;
|
||||||
mcb FAR *foundSeg;
|
mcb FAR *foundSeg;
|
||||||
mcb FAR *biggestSeg;
|
mcb FAR *biggestSeg;
|
||||||
|
|
||||||
/* Initialize */
|
/* Initialize */
|
||||||
|
|
||||||
|
searchAgain:
|
||||||
|
|
||||||
p = para2far(first_mcb);
|
p = para2far(first_mcb);
|
||||||
|
|
||||||
biggestSeg = foundSeg = NULL;
|
biggestSeg = foundSeg = NULL;
|
||||||
/*
|
/*
|
||||||
Hack to the Umb Region direct for now. Save time and program space.
|
Hack to the Umb Region direct for now. Save time and program space.
|
||||||
*/
|
*/
|
||||||
if((mode & (FIRST_FIT_UO | FIRST_FIT_U)) && uppermem_link) {
|
if((mode != LARGEST) && (mode & (FIRST_FIT_UO | FIRST_FIT_U)) &&
|
||||||
if(uppermem_root)
|
uppermem_link && uppermem_root)
|
||||||
p = para2far(uppermem_root);
|
p = para2far(uppermem_root);
|
||||||
}
|
|
||||||
|
|
||||||
/* Search through memory blocks */
|
/* Search through memory blocks */
|
||||||
FOREVER
|
FOREVER
|
||||||
@ -265,6 +272,11 @@ COUNT DosMemAlloc(UWORD size, COUNT mode, seg FAR * para, UWORD FAR * asize)
|
|||||||
|
|
||||||
if (!foundSeg || !foundSeg->m_size)
|
if (!foundSeg || !foundSeg->m_size)
|
||||||
{ /* no block to fullfill the request */
|
{ /* no block to fullfill the request */
|
||||||
|
if((mode != LARGEST) && (mode & FIRST_FIT_UO) &&
|
||||||
|
uppermem_link && uppermem_root) {
|
||||||
|
mode &= !FIRST_FIT_UO;
|
||||||
|
goto searchAgain;
|
||||||
|
}
|
||||||
if (asize)
|
if (asize)
|
||||||
*asize = biggestSeg ? biggestSeg->m_size : 0;
|
*asize = biggestSeg ? biggestSeg->m_size : 0;
|
||||||
return DE_NOMEM;
|
return DE_NOMEM;
|
||||||
@ -337,7 +349,9 @@ COUNT DosMemLargest(UWORD FAR * size)
|
|||||||
COUNT found;
|
COUNT found;
|
||||||
|
|
||||||
/* Initialize */
|
/* Initialize */
|
||||||
p = para2far(first_mcb);
|
p = ((mem_access_mode & (FIRST_FIT_UO | FIRST_FIT_U)) && uppermem_link && uppermem_root)
|
||||||
|
? para2far(uppermem_root)
|
||||||
|
: para2far(first_mcb);
|
||||||
|
|
||||||
/* Cycle through the whole MCB chain to find the largest unused
|
/* Cycle through the whole MCB chain to find the largest unused
|
||||||
area. Join all unused areas together. */
|
area. Join all unused areas together. */
|
||||||
@ -611,29 +625,28 @@ VOID DosUmbLink(BYTE n)
|
|||||||
{
|
{
|
||||||
REG mcb FAR *p;
|
REG mcb FAR *p;
|
||||||
REG mcb FAR *q;
|
REG mcb FAR *q;
|
||||||
|
mcb FAR *end_of_conv_mem = para2far(ram_top*64-1);
|
||||||
|
|
||||||
if(uppermem_root){
|
q = p = para2far(first_mcb);
|
||||||
|
|
||||||
q = p = para2far(first_mcb);
|
|
||||||
/* like a xor thing! */
|
/* like a xor thing! */
|
||||||
if((uppermem_link == 1) && (n == 0))
|
if((uppermem_link == 1) && (n == 0))
|
||||||
|
{
|
||||||
|
while ( p != end_of_conv_mem )
|
||||||
{
|
{
|
||||||
while ( p != (mcb FAR *) para2far(0x9fff) )
|
if (mcbFree(p))
|
||||||
{
|
joinMCBs(p);
|
||||||
if (mcbFree(p))
|
if (!mcbValid(p))
|
||||||
joinMCBs(p);
|
goto DUL_exit;
|
||||||
if (!mcbValid(p))
|
q = p;
|
||||||
goto DUL_exit;
|
p = nxtMCB(p);
|
||||||
q = p;
|
|
||||||
p = nxtMCB(p);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(q->m_type == MCB_NORMAL)
|
|
||||||
q->m_type = MCB_LAST;
|
|
||||||
uppermem_link = n;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if(q->m_type == MCB_NORMAL)
|
||||||
|
q->m_type = MCB_LAST;
|
||||||
|
uppermem_link = n;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
if((uppermem_link == 0) && (n == 1))
|
if((uppermem_link == 0) && (n == 1))
|
||||||
{
|
{
|
||||||
while( q->m_type != MCB_LAST)
|
while( q->m_type != MCB_LAST)
|
||||||
@ -647,7 +660,6 @@ VOID DosUmbLink(BYTE n)
|
|||||||
q->m_type = MCB_NORMAL;
|
q->m_type = MCB_NORMAL;
|
||||||
uppermem_link = n;
|
uppermem_link = n;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
DUL_exit:
|
DUL_exit:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,9 @@ _nlsCountryInfoHardcoded:
|
|||||||
DB 01ch, 000h, 001h, 000h, 0b5h, 001h, 000h, 000h
|
DB 01ch, 000h, 001h, 000h, 0b5h, 001h, 000h, 000h
|
||||||
DB 024h, 000h, 000h, 000h, 000h, 02ch, 000h, 02eh
|
DB 024h, 000h, 000h, 000h, 000h, 02ch, 000h, 02eh
|
||||||
DB 000h, 02dh, 000h, 03ah, 000h, 000h, 002h, 000h
|
DB 000h, 02dh, 000h, 03ah, 000h, 000h, 002h, 000h
|
||||||
DB 0e8h, 058h, 000h, 000h, 02ch, 000h
|
extern _CharMapSrvc:wrt TGROUP
|
||||||
|
DW _CharMapSrvc, SEG _CharMapSrvc
|
||||||
|
DB 02ch, 000h
|
||||||
GLOBAL _hcTablesStart
|
GLOBAL _hcTablesStart
|
||||||
_hcTablesStart:
|
_hcTablesStart:
|
||||||
GLOBAL _nlsFUpcaseHardcoded
|
GLOBAL _nlsFUpcaseHardcoded
|
||||||
|
@ -30,7 +30,9 @@ _nlsCountryInfoHardcoded:
|
|||||||
DB 01ch, 000h, 031h, 000h, 052h, 003h, 001h, 000h
|
DB 01ch, 000h, 031h, 000h, 052h, 003h, 001h, 000h
|
||||||
DB 044h, 04dh, 000h, 000h, 000h, 02eh, 000h, 02ch
|
DB 044h, 04dh, 000h, 000h, 000h, 02eh, 000h, 02ch
|
||||||
DB 000h, 02eh, 000h, 03ah, 000h, 003h, 002h, 001h
|
DB 000h, 02eh, 000h, 03ah, 000h, 003h, 002h, 001h
|
||||||
DB 0e8h, 058h, 000h, 003h, 03bh, 000h
|
extern _CharMapSrvc:wrt TGROUP
|
||||||
|
DW _CharMapSrvc, SEG _CharMapSrvc
|
||||||
|
DB 03bh, 000h
|
||||||
GLOBAL _hcTablesStart
|
GLOBAL _hcTablesStart
|
||||||
_hcTablesStart:
|
_hcTablesStart:
|
||||||
GLOBAL _nlsFUpcaseHardcoded
|
GLOBAL _nlsFUpcaseHardcoded
|
||||||
|
@ -30,7 +30,9 @@ _nlsCountryInfoHardcoded:
|
|||||||
DB 01ch, 000h, 001h, 000h, 0b5h, 001h, 000h, 000h
|
DB 01ch, 000h, 001h, 000h, 0b5h, 001h, 000h, 000h
|
||||||
DB 024h, 000h, 000h, 000h, 000h, 02ch, 000h, 02eh
|
DB 024h, 000h, 000h, 000h, 000h, 02ch, 000h, 02eh
|
||||||
DB 000h, 02dh, 000h, 03ah, 000h, 000h, 002h, 000h
|
DB 000h, 02dh, 000h, 03ah, 000h, 000h, 002h, 000h
|
||||||
DB 0e8h, 058h, 000h, 000h, 02ch, 000h
|
extern _CharMapSrvc:wrt TGROUP
|
||||||
|
DW _CharMapSrvc, SEG _CharMapSrvc
|
||||||
|
DB 02ch, 000h
|
||||||
GLOBAL _hcTablesStart
|
GLOBAL _hcTablesStart
|
||||||
_hcTablesStart:
|
_hcTablesStart:
|
||||||
GLOBAL _nlsFUpcaseHardcoded
|
GLOBAL _nlsFUpcaseHardcoded
|
||||||
|
@ -29,6 +29,13 @@
|
|||||||
; $Id$
|
; $Id$
|
||||||
;
|
;
|
||||||
; $Log$
|
; $Log$
|
||||||
|
; Revision 1.5 2001/03/19 04:50:56 bartoldeman
|
||||||
|
; See history.txt for overview: put kernel 2022beo1 into CVS
|
||||||
|
;
|
||||||
|
;
|
||||||
|
; Revision 1.5 2001/03/08 21:15:00 bartoldeman
|
||||||
|
; Fixed typo in dosUpChar (Tom Ehlert)
|
||||||
|
;
|
||||||
; Revision 1.4 2000/08/06 05:50:17 jimtabor
|
; Revision 1.4 2000/08/06 05:50:17 jimtabor
|
||||||
; Add new files and update cvs with patches and changes
|
; Add new files and update cvs with patches and changes
|
||||||
;
|
;
|
||||||
@ -82,7 +89,7 @@
|
|||||||
|
|
||||||
segment _TEXT
|
segment _TEXT
|
||||||
global _CharMapSrvc
|
global _CharMapSrvc
|
||||||
extern _upChar:wrt TGROUP
|
extern _DosUpChar:wrt TGROUP
|
||||||
;
|
;
|
||||||
; CharMapSrvc:
|
; CharMapSrvc:
|
||||||
; User callable character mapping service.
|
; User callable character mapping service.
|
||||||
@ -102,7 +109,7 @@ _CharMapSrvc:
|
|||||||
mov ax, DGROUP
|
mov ax, DGROUP
|
||||||
mov ds, ax
|
mov ds, ax
|
||||||
|
|
||||||
call _upChar
|
call _DosUpChar
|
||||||
;add sp, byte 2 // next POP retrieves orig AX
|
;add sp, byte 2 // next POP retrieves orig AX
|
||||||
|
|
||||||
pop bx
|
pop bx
|
||||||
|
387
kernel/prf.c
387
kernel/prf.c
@ -34,6 +34,16 @@ static BYTE *prfRcsId = "$Id$";
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log$
|
* $Log$
|
||||||
|
* Revision 1.4 2001/03/19 04:50:56 bartoldeman
|
||||||
|
* See history.txt for overview: put kernel 2022beo1 into CVS
|
||||||
|
*
|
||||||
|
* Revision 1.4 2001/03/07 10:00:00 tomehlert
|
||||||
|
* recoded for smaller object footprint, added main() for testing+QA
|
||||||
|
*
|
||||||
|
* $Log$
|
||||||
|
* Revision 1.4 2001/03/19 04:50:56 bartoldeman
|
||||||
|
* See history.txt for overview: put kernel 2022beo1 into CVS
|
||||||
|
*
|
||||||
* Revision 1.3 2000/05/25 20:56:21 jimtabor
|
* Revision 1.3 2000/05/25 20:56:21 jimtabor
|
||||||
* Fixed project history
|
* Fixed project history
|
||||||
*
|
*
|
||||||
@ -85,13 +95,11 @@ static BYTE *charp;
|
|||||||
VOID handle_char(COUNT);
|
VOID handle_char(COUNT);
|
||||||
VOID put_console(COUNT);
|
VOID put_console(COUNT);
|
||||||
BYTE *ltob(LONG, BYTE *, COUNT);
|
BYTE *ltob(LONG, BYTE *, COUNT);
|
||||||
static BYTE *itob(COUNT, BYTE *, COUNT);
|
|
||||||
COUNT do_printf(CONST BYTE *, REG BYTE **);
|
COUNT do_printf(CONST BYTE *, REG BYTE **);
|
||||||
#else
|
#else
|
||||||
VOID handle_char();
|
VOID handle_char();
|
||||||
VOID put_console();
|
VOID put_console();
|
||||||
BYTE *ltob();
|
BYTE *ltob();
|
||||||
static BYTE *itob();
|
|
||||||
COUNT do_printf();
|
COUNT do_printf();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -122,35 +130,32 @@ static VOID
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ltob -- convert an long integer to a string in any base (2-16) */
|
/* ltob -- convert an long integer to a string in any base (2-16) */
|
||||||
static BYTE *
|
BYTE *
|
||||||
ltob(LONG n, BYTE * s, COUNT base)
|
ltob(LONG n, BYTE * s, COUNT base)
|
||||||
{
|
{
|
||||||
ULONG u;
|
ULONG u;
|
||||||
REG BYTE *p,
|
BYTE *p, *q;
|
||||||
*q;
|
int c;
|
||||||
REG negative,
|
|
||||||
c;
|
|
||||||
|
|
||||||
if (n < 0 && base == -10)
|
|
||||||
{
|
|
||||||
negative = 1;
|
|
||||||
u = -n;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
negative = 0;
|
|
||||||
u = n;
|
u = n;
|
||||||
}
|
|
||||||
if (base == -10) /* signals signed conversion */
|
if (base == -10) /* signals signed conversion */
|
||||||
|
{
|
||||||
base = 10;
|
base = 10;
|
||||||
|
if (n < 0 )
|
||||||
|
{
|
||||||
|
u = -n;
|
||||||
|
*s++ = '-';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
p = q = s;
|
p = q = s;
|
||||||
do
|
do
|
||||||
{ /* generate digits in reverse order */
|
{ /* generate digits in reverse order */
|
||||||
*p++ = "0123456789abcdef"[u % base];
|
*p++ = "0123456789abcdef"[u % base];
|
||||||
}
|
}
|
||||||
while ((u /= base) > 0);
|
while ((u /= base) > 0);
|
||||||
if (negative)
|
|
||||||
*p++ = '-';
|
|
||||||
*p = '\0'; /* terminate the string */
|
*p = '\0'; /* terminate the string */
|
||||||
while (q < --p)
|
while (q < --p)
|
||||||
{ /* reverse the digits */
|
{ /* reverse the digits */
|
||||||
@ -161,49 +166,9 @@ static BYTE *
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* itob -- convert an long integer to a string in any base (2-16) */
|
|
||||||
static BYTE *
|
|
||||||
itob(COUNT n, BYTE * s, COUNT base)
|
|
||||||
{
|
|
||||||
UWORD u;
|
|
||||||
REG BYTE *p,
|
|
||||||
*q;
|
|
||||||
REG negative,
|
|
||||||
c;
|
|
||||||
|
|
||||||
if (n < 0 && base == -10)
|
#define LEFT 0
|
||||||
{
|
#define RIGHT 1
|
||||||
negative = 1;
|
|
||||||
u = -n;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
negative = 0;
|
|
||||||
u = n;
|
|
||||||
}
|
|
||||||
if (base == -10) /* signals signed conversion */
|
|
||||||
base = 10;
|
|
||||||
p = q = s;
|
|
||||||
do
|
|
||||||
{ /* generate digits in reverse order */
|
|
||||||
*p++ = "0123456789abcdef"[u % base];
|
|
||||||
}
|
|
||||||
while ((u /= base) > 0);
|
|
||||||
if (negative)
|
|
||||||
*p++ = '-';
|
|
||||||
*p = '\0'; /* terminate the string */
|
|
||||||
while (q < --p)
|
|
||||||
{ /* reverse the digits */
|
|
||||||
c = *q;
|
|
||||||
*q++ = *p;
|
|
||||||
*p = c;
|
|
||||||
}
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define NONE 0
|
|
||||||
#define LEFT 1
|
|
||||||
#define RIGHT 2
|
|
||||||
|
|
||||||
/* printf -- short version of printf to conserve space */
|
/* printf -- short version of printf to conserve space */
|
||||||
WORD FAR
|
WORD FAR
|
||||||
@ -214,7 +179,7 @@ WORD FAR
|
|||||||
}
|
}
|
||||||
|
|
||||||
WORD
|
WORD
|
||||||
sprintf(BYTE * buff, CONST BYTE * fmt, BYTE * args)
|
sprintf(BYTE * buff, CONST BYTE * fmt, BYTE * args,...)
|
||||||
{
|
{
|
||||||
WORD ret;
|
WORD ret;
|
||||||
|
|
||||||
@ -224,194 +189,214 @@ sprintf(BYTE * buff, CONST BYTE * fmt, BYTE * args)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static COUNT
|
COUNT
|
||||||
do_printf(CONST BYTE * fmt, REG BYTE ** arg)
|
do_printf(CONST BYTE * fmt, BYTE ** arg)
|
||||||
{
|
{
|
||||||
REG base;
|
int base;
|
||||||
BYTE s[11],
|
BYTE s[11],
|
||||||
*p,
|
*p,
|
||||||
*ltob();
|
*ltob();
|
||||||
BYTE c,
|
int c,
|
||||||
slen,
|
|
||||||
flag,
|
flag,
|
||||||
size,
|
size,
|
||||||
fill;
|
fill;
|
||||||
|
int longarg;
|
||||||
|
long currentArg;
|
||||||
|
|
||||||
flag = NONE;
|
|
||||||
size = 0;
|
|
||||||
while ((c = *fmt++) != '\0')
|
while ((c = *fmt++) != '\0')
|
||||||
{
|
{
|
||||||
if (size == 0 && flag == NONE && c != '%')
|
if (c != '%')
|
||||||
{
|
{
|
||||||
handle_char(c);
|
handle_char(c);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (flag == NONE && *fmt == '0')
|
|
||||||
|
longarg = FALSE;
|
||||||
|
size = 0;
|
||||||
|
flag = RIGHT;
|
||||||
|
fill = ' ';
|
||||||
|
|
||||||
|
if ( *fmt == '-')
|
||||||
|
{
|
||||||
|
flag = LEFT;
|
||||||
|
fmt++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( *fmt == '0')
|
||||||
{
|
{
|
||||||
flag = RIGHT;
|
|
||||||
fill = '0';
|
fill = '0';
|
||||||
|
fmt++;
|
||||||
}
|
}
|
||||||
switch (*fmt)
|
|
||||||
|
while (*fmt >= '0' && *fmt <= '9')
|
||||||
|
{
|
||||||
|
size = size * 10 + (*fmt++ - '0');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (*fmt == 'l')
|
||||||
{
|
{
|
||||||
case '-':
|
longarg = TRUE;
|
||||||
flag = RIGHT;
|
fmt++;
|
||||||
fill = *(fmt + 1) == '0' ? '0' : ' ';
|
|
||||||
continue;
|
|
||||||
|
|
||||||
case '0':
|
|
||||||
case '1':
|
|
||||||
case '2':
|
|
||||||
case '3':
|
|
||||||
case '4':
|
|
||||||
case '5':
|
|
||||||
case '6':
|
|
||||||
case '7':
|
|
||||||
case '8':
|
|
||||||
case '9':
|
|
||||||
if (flag == NONE)
|
|
||||||
flag = LEFT;
|
|
||||||
size = *fmt++ - '0';
|
|
||||||
while ((c = *fmt++) != '\0')
|
|
||||||
{
|
|
||||||
switch (c)
|
|
||||||
{
|
|
||||||
case '0':
|
|
||||||
case '1':
|
|
||||||
case '2':
|
|
||||||
case '3':
|
|
||||||
case '4':
|
|
||||||
case '5':
|
|
||||||
case '6':
|
|
||||||
case '7':
|
|
||||||
case '8':
|
|
||||||
case '9':
|
|
||||||
size = size * 10 + (c - '0');
|
|
||||||
continue;
|
|
||||||
|
|
||||||
default:
|
|
||||||
--fmt;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
switch (c = *fmt++)
|
switch (c = *fmt++)
|
||||||
{
|
{
|
||||||
|
case '\0':
|
||||||
|
return 0;
|
||||||
|
|
||||||
case 'c':
|
case 'c':
|
||||||
handle_char(*(COUNT *) arg++);
|
handle_char(*(COUNT *) arg++);
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
case 's':
|
||||||
|
p = *((BYTE **) arg)++;
|
||||||
|
goto do_outputstring;
|
||||||
|
|
||||||
case 'd':
|
case 'd':
|
||||||
base = -10;
|
|
||||||
goto prt;
|
|
||||||
|
|
||||||
case 'o':
|
|
||||||
base = 8;
|
|
||||||
goto prt;
|
|
||||||
|
|
||||||
case 'u':
|
|
||||||
base = 10;
|
|
||||||
goto prt;
|
|
||||||
|
|
||||||
case 'x':
|
|
||||||
base = 16;
|
|
||||||
|
|
||||||
prt:
|
|
||||||
itob(*((COUNT *) arg)++, s, base);
|
|
||||||
if (flag == RIGHT || flag == LEFT)
|
|
||||||
{
|
|
||||||
for (slen = 0, p = s; *p != '\0'; p++)
|
|
||||||
++slen;
|
|
||||||
}
|
|
||||||
if (flag == RIGHT && slen < size)
|
|
||||||
{
|
|
||||||
WORD i;
|
|
||||||
|
|
||||||
for (i = size - slen; i > 0; i--)
|
|
||||||
handle_char(fill);
|
|
||||||
}
|
|
||||||
for (p = s; *p != '\0'; p++)
|
|
||||||
handle_char(*p);
|
|
||||||
if (flag == LEFT)
|
|
||||||
{
|
|
||||||
WORD i;
|
|
||||||
BYTE sp = ' ';
|
|
||||||
|
|
||||||
for (i = size - slen; i > 0; i--)
|
|
||||||
handle_char(sp);
|
|
||||||
}
|
|
||||||
size = 0;
|
|
||||||
flag = NONE;
|
|
||||||
continue;
|
|
||||||
|
|
||||||
case 'l':
|
|
||||||
switch (c = *fmt++)
|
|
||||||
{
|
|
||||||
case 'd':
|
|
||||||
base = -10;
|
base = -10;
|
||||||
goto lprt;
|
goto lprt;
|
||||||
|
|
||||||
case 'o':
|
case 'o':
|
||||||
base = 8;
|
base = 8;
|
||||||
goto lprt;
|
goto lprt;
|
||||||
|
|
||||||
case 'u':
|
case 'u':
|
||||||
base = 10;
|
base = 10;
|
||||||
goto lprt;
|
goto lprt;
|
||||||
|
|
||||||
case 'x':
|
case 'x':
|
||||||
base = 16;
|
base = 16;
|
||||||
|
|
||||||
lprt:
|
lprt:
|
||||||
ltob(*((LONG *) arg)++, s, base);
|
if (longarg)
|
||||||
if (flag == RIGHT || flag == LEFT)
|
currentArg = *((LONG *) arg)++;
|
||||||
{
|
else
|
||||||
for (slen = 0, p = s; *p != '\0'; p++)
|
if (base < 0) currentArg = *((int*) arg)++;
|
||||||
++slen;
|
else currentArg = *((unsigned int*) arg)++;
|
||||||
}
|
|
||||||
if (flag == RIGHT && slen < size)
|
|
||||||
{
|
ltob(currentArg, s, base);
|
||||||
WORD i;
|
|
||||||
|
|
||||||
for (i = size - slen; i > 0; i--)
|
p = s;
|
||||||
|
do_outputstring:
|
||||||
|
|
||||||
|
size -= strlen(p);
|
||||||
|
|
||||||
|
if (flag == RIGHT )
|
||||||
|
{
|
||||||
|
for ( ; size > 0; size--)
|
||||||
handle_char(fill);
|
handle_char(fill);
|
||||||
}
|
}
|
||||||
for (p = s; *p != '\0'; p++)
|
for (; *p != '\0'; p++)
|
||||||
handle_char(*p);
|
handle_char(*p);
|
||||||
if (flag == LEFT)
|
|
||||||
{
|
|
||||||
WORD i;
|
|
||||||
BYTE sp = ' ';
|
|
||||||
|
|
||||||
for (i = size - slen; i > 0; i--)
|
for ( ; size > 0; size--)
|
||||||
handle_char(sp);
|
handle_char(fill);
|
||||||
}
|
|
||||||
size = 0;
|
|
||||||
flag = NONE;
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
handle_char(c);
|
handle_char(c);
|
||||||
}
|
break;
|
||||||
|
|
||||||
case 's':
|
|
||||||
for (p = *arg; *p != '\0'; p++)
|
|
||||||
{
|
|
||||||
--size;
|
|
||||||
handle_char(*p);
|
|
||||||
}
|
|
||||||
for (; size > 0; size--)
|
|
||||||
handle_char(' ');
|
|
||||||
++arg;
|
|
||||||
size = 0;
|
|
||||||
flag = NONE;
|
|
||||||
continue;
|
|
||||||
|
|
||||||
default:
|
|
||||||
handle_char(c);
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef TEST
|
||||||
|
/*
|
||||||
|
this testprogram verifies that the strings are printed correctly
|
||||||
|
( or the way, I expect them to print)
|
||||||
|
|
||||||
|
compile like (note -DTEST !)
|
||||||
|
|
||||||
|
c:\tc\tcc -DTEST -DI86 -I..\hdr prf.c
|
||||||
|
|
||||||
|
and run. if strings are wrong, the program will wait for the ANYKEY
|
||||||
|
|
||||||
|
*/
|
||||||
|
#include <c:\tc\include\conio.h>
|
||||||
|
void cso(char c) { putch(c); }
|
||||||
|
|
||||||
|
|
||||||
|
struct {
|
||||||
|
char *should;
|
||||||
|
char *format;
|
||||||
|
unsigned lowint;
|
||||||
|
unsigned highint;
|
||||||
|
|
||||||
|
} testarray[] =
|
||||||
|
{
|
||||||
|
{ "hello world", "%s %s", (unsigned)"hello",(unsigned)"world"},
|
||||||
|
{ "hello", "%3s", (unsigned)"hello",0},
|
||||||
|
{ " hello", "%7s", (unsigned)"hello",0},
|
||||||
|
{ "hello ", "%-7s", (unsigned)"hello",0},
|
||||||
|
{ "hello", "%s", (unsigned)"hello",0},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{ "1", "%d", 1, 0},
|
||||||
|
{ "-1", "%d", -1,0},
|
||||||
|
{ "65535", "%u", -1,0},
|
||||||
|
{ "-32768", "%d", 0x8000,0},
|
||||||
|
{ "32767", "%d", 0x7fff,0},
|
||||||
|
{ "-32767", "%d", 0x8001,0},
|
||||||
|
|
||||||
|
{"8000", "%x", 0x8000, 0},
|
||||||
|
{" 1", "%4x", 1, 0},
|
||||||
|
{"0001", "%04x", 1, 0},
|
||||||
|
{"1 ", "%-4x", 1, 0},
|
||||||
|
{"1000", "%-04x", 1, 0},
|
||||||
|
|
||||||
|
{ "1", "%ld", 1, 0},
|
||||||
|
{ "-1", "%ld", -1,-1},
|
||||||
|
{ "65535", "%ld", -1,0},
|
||||||
|
{ "65535", "%u", -1,0},
|
||||||
|
{"8000", "%lx", 0x8000, 0},
|
||||||
|
{"80000000", "%lx", 0,0x8000},
|
||||||
|
{" 1", "%4lx", 1, 0},
|
||||||
|
{"0001", "%04lx", 1, 0},
|
||||||
|
{"1 ", "%-4lx", 1, 0},
|
||||||
|
{"1000", "%-04lx", 1, 0},
|
||||||
|
|
||||||
|
{ "-2147483648", "%ld", 0,0x8000},
|
||||||
|
{ "2147483648", "%lu", 0,0x8000},
|
||||||
|
{ "2147483649", "%lu", 1,0x8000},
|
||||||
|
{ "-2147483647", "%ld", 1,0x8000},
|
||||||
|
{ "32767", "%ld", 0x7fff,0},
|
||||||
|
{ "32769", "%ld", 0x8001,0},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
test(char *should, char *format, unsigned lowint, unsigned highint)
|
||||||
|
{
|
||||||
|
char b[100];
|
||||||
|
|
||||||
|
sprintf(b, format, lowint,highint);
|
||||||
|
|
||||||
|
printf("'%s' = '%s'\n", should, b);
|
||||||
|
|
||||||
|
if (strcmp(b,should)) { printf("\nhit the ANYKEY\n"); getch(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
printf("hello world\n");
|
||||||
|
|
||||||
|
for (i = 0; testarray[i].should; i++)
|
||||||
|
{
|
||||||
|
test(testarray[i].should,testarray[i].format, testarray[i].lowint, testarray[i].highint);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@ -35,6 +35,12 @@ static BYTE *RcsId = "$Id$";
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log$
|
* $Log$
|
||||||
|
* Revision 1.6 2001/03/19 04:50:56 bartoldeman
|
||||||
|
* See history.txt for overview: put kernel 2022beo1 into CVS
|
||||||
|
*
|
||||||
|
* Revision 1.6 2001/03/08 21:00:00 bartoldeman
|
||||||
|
* UMB fixes to DosComLoader
|
||||||
|
*
|
||||||
* Revision 1.5 2000/08/06 05:50:17 jimtabor
|
* Revision 1.5 2000/08/06 05:50:17 jimtabor
|
||||||
* Add new files and update cvs with patches and changes
|
* Add new files and update cvs with patches and changes
|
||||||
*
|
*
|
||||||
@ -246,7 +252,7 @@ COUNT ChildEnv(exec_blk FAR * exp, UWORD * pChildEnvSeg, char far * pathname)
|
|||||||
|
|
||||||
/* allocate enough space for env + path */
|
/* allocate enough space for env + path */
|
||||||
if ((RetCode = DosMemAlloc(long2para(nEnvSize + ENV_KEEPFREE),
|
if ((RetCode = DosMemAlloc(long2para(nEnvSize + ENV_KEEPFREE),
|
||||||
FIRST_FIT, (seg FAR *) pChildEnvSeg,
|
mem_access_mode, (seg FAR *) pChildEnvSeg,
|
||||||
NULL /*(UWORD FAR *) MaxEnvSize ska */ )) < 0)
|
NULL /*(UWORD FAR *) MaxEnvSize ska */ )) < 0)
|
||||||
return RetCode;
|
return RetCode;
|
||||||
pDest = MK_FP(*pChildEnvSeg + 1, 0);
|
pDest = MK_FP(*pChildEnvSeg + 1, 0);
|
||||||
@ -457,12 +463,39 @@ static COUNT DosComLoader(BYTE FAR * namep, exec_blk FAR * exp, COUNT mode)
|
|||||||
{
|
{
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
/* Allocate our memory and pass back any errors */
|
/* Now find out how many paragraphs are available */
|
||||||
if ((rc = DosMemAlloc(0, LARGEST, (seg FAR *) & mem, (UWORD FAR *) & asize)) < 0)
|
if ((rc = DosMemLargest((seg FAR *) & asize)) != SUCCESS)
|
||||||
{
|
{
|
||||||
DosMemFree(env); /* env may be 0 */
|
DosMemFree(env);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
com_size = asize;
|
||||||
|
/* Allocate our memory and pass back any errors */
|
||||||
|
if ((rc = DosMemAlloc((seg) com_size, mem_access_mode, (seg FAR *) & mem
|
||||||
|
,(UWORD FAR *) & asize)) < 0)
|
||||||
|
{
|
||||||
|
if (rc == DE_NOMEM)
|
||||||
|
{
|
||||||
|
if ((rc = DosMemAlloc(0, LARGEST, (seg FAR *) & mem
|
||||||
|
,(UWORD FAR *) & asize)) < 0)
|
||||||
|
{
|
||||||
|
DosMemFree(env);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
/* This should never happen, but ... */
|
||||||
|
if (asize < com_size)
|
||||||
|
{
|
||||||
|
DosMemFree(mem);
|
||||||
|
DosMemFree(env);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DosMemFree(env); /* env may be 0 */
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
}
|
||||||
++mem;
|
++mem;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -675,7 +708,7 @@ static COUNT DosExeLoader(BYTE FAR * namep, exec_blk FAR * exp, COUNT mode)
|
|||||||
/* Allocate our memory and pass back any errors */
|
/* Allocate our memory and pass back any errors */
|
||||||
/* We can still get an error on first fit if the above */
|
/* We can still get an error on first fit if the above */
|
||||||
/* returned size was a bet fit case */
|
/* returned size was a bet fit case */
|
||||||
if ((rc = DosMemAlloc((seg) exe_size, FIRST_FIT, (seg FAR *) & mem
|
if ((rc = DosMemAlloc((seg) exe_size, mem_access_mode, (seg FAR *) & mem
|
||||||
,(UWORD FAR *) & asize)) < 0)
|
,(UWORD FAR *) & asize)) < 0)
|
||||||
{
|
{
|
||||||
if (rc == DE_NOMEM)
|
if (rc == DE_NOMEM)
|
||||||
@ -686,7 +719,7 @@ static COUNT DosExeLoader(BYTE FAR * namep, exec_blk FAR * exp, COUNT mode)
|
|||||||
DosMemFree(env);
|
DosMemFree(env);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
/* This should never happen, but ... */
|
/* This should never happen, but ... */
|
||||||
if (asize < exe_size)
|
if (asize < exe_size)
|
||||||
{
|
{
|
||||||
DosMemFree(mem);
|
DosMemFree(mem);
|
||||||
|
16
lib/libm.mak
16
lib/libm.mak
@ -5,6 +5,12 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
# $Log$
|
# $Log$
|
||||||
|
# Revision 1.4 2001/03/19 04:50:56 bartoldeman
|
||||||
|
# See history.txt for overview: put kernel 2022beo1 into CVS
|
||||||
|
#
|
||||||
|
# Revision 1.4 2001/03/08 21:15:00 bartoldeman
|
||||||
|
# Fix from Martin Stromberg to make this fully configurable from config.mak
|
||||||
|
#
|
||||||
# Revision 1.3 2000/05/25 20:56:22 jimtabor
|
# Revision 1.3 2000/05/25 20:56:22 jimtabor
|
||||||
# Fixed project history
|
# Fixed project history
|
||||||
#
|
#
|
||||||
@ -32,13 +38,9 @@
|
|||||||
|
|
||||||
|
|
||||||
libm.lib: $(CLIB)
|
libm.lib: $(CLIB)
|
||||||
# use these for Turbo 2
|
$(LIBUTIL) $(CLIB) $(MATH_EXTRACT)
|
||||||
$(LIBUTIL) $(CLIB) *LDIV *LLSH *LURSH *LXMUL *LRSH *SPUSH *SCOPY
|
$(LIBUTIL) libm $(MATH_INSERT)
|
||||||
$(LIBUTIL) libm +LDIV +LLSH +LURSH +LXMUL +LRSH +SPUSH +SCOPY
|
$(RM) *.OBJ
|
||||||
# use these for Turbo 3 or better
|
|
||||||
# $(LIBUTIL) $(CLIB) *H_LDIV *H_LLSH *H_LURSH *N_LXMUL *F_LXMUL *H_LRSH *H_SPUSH *N_SCOPY
|
|
||||||
# $(LIBUTIL) libm +H_LDIV +H_LLSH +H_LURSH +N_LXMUL +F_LXMUL +H_LRSH +H_SPUSH +N_SCOPY
|
|
||||||
del *.OBJ
|
|
||||||
|
|
||||||
|
|
||||||
clobber: clean
|
clobber: clean
|
||||||
|
Loading…
x
Reference in New Issue
Block a user