1
0
mirror of https://github.com/FDOS/kernel.git synced 2025-04-08 17:15:17 +02:00

Move externs to header files; sft init cleanup (+3 files need to be low)

git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@623 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
Bart Oldeman 2003-06-20 19:54:18 +00:00
parent 5bffd69d1d
commit c5c7128a02
8 changed files with 116 additions and 196 deletions

@ -29,9 +29,7 @@
#include "portab.h"
#include "init-mod.h"
#include "init-dat.h"
#include "dyndata.h"
#include "lol.h"
#ifdef VERSION_STRINGS
static BYTE *RcsId =
@ -45,27 +43,6 @@ static BYTE *RcsId =
#endif
#define para2far(seg) ((mcb FAR *)MK_FP((seg), 0))
/*
These are the far variables from the DOS data segment that we need here. The
init procedure uses a different default DS data segment, which is discarded
after use. I hope to clean this up to use the DOS List of List and Swappable
Data Area obtained via INT21.
-- Bart
*/
extern struct dhdr
DOSTEXTFAR ASM blk_dev; /* Block device (Disk) driver */
extern struct buffer FAR *DOSFAR firstAvailableBuf; /* first 'available' buffer */
extern struct lol ASM DOSFAR DATASTART;
struct lol FAR *LoL = &DATASTART;
extern BYTE DOSFAR _HMATextAvailable, /* first byte of available CODE area */
FAR _HMATextStart[], /* first byte of HMAable CODE area */
FAR _HMATextEnd[], DOSFAR ASM break_ena, /* break enabled flag */
DOSFAR _InitTextStart, /* first available byte of ram */
DOSFAR ReturnAnyDosVersionExpected;
UWORD umb_start = 0, UMB_top = 0;
UWORD ram_top = 0; /* How much ram in Kbytes */
@ -273,22 +250,17 @@ void PreConfig(void)
#ifdef DEBUG
{
extern BYTE FAR ASM internal_data[];
printf("SDA located at 0x%p\n", internal_data);
}
#endif
/* Begin by initializing our system buffers */
/* the dms_scratch buffer is statically allocated
in the DSK module */
/* dma_scratch = (BYTE FAR *) KernelAllocDma(BUFFERSIZE); */
/* DebugPrintf(("Preliminary DMA scratchpad allocated at 0x%p\n",dma_scratch));*/
/* buffers = (struct buffer FAR *)
KernelAlloc(Config.cfgBuffers * sizeof(struct buffer)); */
#ifdef DEBUG
/* printf("Preliminary %d buffers allocated at 0x%p\n", Config.cfgBuffers, buffers);*/
#endif
LoL->DPBp =
DynAlloc("DPBp", blk_dev.dh_name[0], sizeof(struct dpb));
/* Initialize the file table */
/* f_nodes = (f_node_ptr)
KernelAlloc(Config.cfgFiles * sizeof(struct f_node));*/
@ -305,19 +277,13 @@ void PreConfig(void)
config_init_buffers(Config.cfgBuffers);
LoL->sfthead->sftt_next =
KernelAlloc(sizeof(sftheader) + (Config.cfgFiles - 5) * sizeof(sft), 'F', 0);
LoL->sfthead->sftt_next->sftt_next = (sfttbl FAR *) - 1;
LoL->sfthead->sftt_next->sftt_count = Config.cfgFiles - 5;
LoL->CDSp = KernelAlloc(sizeof(struct cds) * LoL->lastdrive, 'L', 0);
LoL->DPBp = KernelAlloc(blk_dev.dh_name[0] * sizeof(struct dpb), 'E', 0);
#ifdef DEBUG
printf("Preliminary:\n f_node 0x%x", LoL->f_nodes);
/* printf(" FCB table 0x%p\n",LoL->FCBp);*/
printf(" sft table 0x%p\n", LoL->sfthead->sftt_next);
printf(" sft table 0x%p\n", LoL->sfthead);
printf(" CDS table 0x%p\n", LoL->CDSp);
printf(" DPB table 0x%p\n", LoL->DPBp);
#endif
@ -355,13 +321,17 @@ void PreConfig2(void)
mcb_init(LoL->first_mcb, ram_top * 64 - LoL->first_mcb - 1);
if (UmbState == 2)
umb_init();
LoL->sfthead->sftt_next = KernelAlloc(sizeof(sftheader) + 3 * sizeof(sft), 'F', 0);
LoL->sfthead->sftt_next->sftt_next = (sfttbl FAR *) - 1;
LoL->sfthead->sftt_next->sftt_count = 3;
}
/* Do third pass initialization. */
/* Also, run config.sys to load drivers. */
void PostConfig(void)
{
struct dpb FAR *old_dpbp;
sfttbl FAR *sp;
/* We could just have loaded FDXMS or HIMEM */
if (HMAState == HMA_REQ && MoveKernelToHMA())
@ -374,8 +344,6 @@ void PostConfig(void)
Config.cfgStacksHigh = TRUE;
}
/* close all (device) files */
/* compute lastdrive ... */
LoL->lastdrive = Config.cfgLastdrive;
if (LoL->lastdrive < LoL->nblkdev)
@ -395,19 +363,15 @@ void PostConfig(void)
/* LoL->FCBp = (sfttbl FAR *)&FcbSft; */
/* LoL->FCBp = KernelAlloc(sizeof(sftheader)
+ Config.cfgFiles * sizeof(sft)); */
LoL->sfthead->sftt_next = (sfttbl FAR *)
KernelAlloc(sizeof(sftheader) + (Config.cfgFiles - 5) * sizeof(sft), 'F',
sp = LoL->sfthead->sftt_next;
sp = sp->sftt_next = (sfttbl FAR *)
KernelAlloc(sizeof(sftheader) + (Config.cfgFiles - 8) * sizeof(sft), 'F',
Config.cfgFilesHigh);
LoL->sfthead->sftt_next->sftt_next = (sfttbl FAR *) - 1;
LoL->sfthead->sftt_next->sftt_count = Config.cfgFiles - 5;
sp->sftt_next = (sfttbl FAR *) - 1;
sp->sftt_count = Config.cfgFiles - 8;
LoL->CDSp = KernelAlloc(sizeof(struct cds) * LoL->lastdrive, 'L', Config.cfgLastdriveHigh);
old_dpbp = LoL->DPBp;
LoL->DPBp = KernelAlloc(blk_dev.dh_name[0] * sizeof(struct dpb), 'E',
Config.cfgDosDataUmb);
fmemcpy(LoL->DPBp, old_dpbp, blk_dev.dh_name[0] * sizeof(struct dpb));
#ifdef DEBUG
printf("Final: \n f_node 0x%x\n", LoL->f_nodes);
/* printf(" FCB table 0x%p\n",LoL->FCBp);*/
@ -951,8 +915,6 @@ STATIC VOID Dosmem(BYTE * pLine)
BYTE *pTmp;
BYTE UMBwanted = FALSE;
/* extern BYTE FAR INITDataSegmentClaimed; */
pLine = GetStringArg(pLine, szBuf);
for (pTmp = szBuf; *pTmp != '\0'; pTmp++)
@ -997,8 +959,6 @@ STATIC VOID DosData(BYTE * pLine)
{
BYTE *pTmp;
/* extern BYTE FAR INITDataSegmentClaimed; */
pLine = GetStringArg(pLine, szBuf);
for (pTmp = szBuf; *pTmp != '\0'; pTmp++)
@ -1018,7 +978,6 @@ STATIC VOID CfgSwitchar(BYTE * pLine)
STATIC VOID CfgSwitches(BYTE * pLine)
{
extern unsigned char FAR kbdType;
pLine = skipwh(pLine);
if (commands[0].pass == 0) {
if ('=' != *pLine)
@ -1201,8 +1160,6 @@ STATIC VOID CfgBreak(BYTE * pLine)
STATIC VOID Numlock(BYTE * pLine)
{
extern VOID ASMCFUNC keycheck(void);
/* Format: NUMLOCK = (ON | OFF) */
BYTE FAR *keyflags = (BYTE FAR *) MK_FP(0x40, 0x17);
@ -1861,38 +1818,12 @@ STATIC VOID CfgMenuDefault(BYTE * pLine)
}
}
/*********************************************************************************
National specific things.
this handles only Date/Time/Currency, and NOT codepage things.
Some may consider this a hack, but I like to see 24 Hour support. tom.
*********************************************************************************/
struct CountrySpecificInfo {
short CountryID; /* = W1 W437 # Country ID & Codepage */
short CodePage;
short DateFormat; /* Date format: 0/1/2: U.S.A./Europe/Japan */
char CurrencyString[5]; /* '$' ,'EUR' */
char ThousandSeparator[2]; /* ',' # Thousand's separator */
char DecimalPoint[2]; /* '.' # Decimal point */
char DateSeparator[2]; /* '-' */
char TimeSeparator[2]; /* ':' */
char CurrencyFormat; /* = 0 # Currency format (bit array)
0Fh BYTE currency format
bit 2 = set if currency symbol replaces decimal point
bit 1 = number of spaces between value and currency symbol
bit 0 = 0 if currency symbol precedes value
1 if currency symbol follows value
*/
char CurrencyPrecision; /* = 2 # Currency precision */
char TimeFormat; /* = 0 # time format: 0/1: 12/24 houres */
};
#define _DATE_MDY 0 /* mm/dd/yy */
#define _DATE_DMY 1 /* dd.mm.yy */
#define _DATE_YMD 2 /* yy/mm/dd */
@ -2299,18 +2230,6 @@ struct CountrySpecificInfo specificCountriesSupported[] = {
Aitor Santamar­a Merino (SP)
*/
extern struct {
char ThisIsAConstantOne;
short TableSize;
struct CountrySpecificInfo C;
} FAR nlsCountryInfoHardcoded;
STATIC int LoadCountryInfoHardCoded(char *filename, COUNT ctryCode, COUNT codePage)
{
int i;
@ -2440,7 +2359,6 @@ VOID DoInstall(void)
{
int i;
iregs r;
extern BYTE ASM _init_end[];
unsigned short installMemory;

@ -38,7 +38,6 @@ additionally:
#include "portab.h"
#include "init-mod.h"
#include "dyndata.h"
#include "lol.h"
#if defined(DEBUG)
#define DebugPrintf(x) printf x

@ -20,6 +20,9 @@
#include "nls.h"
#include "buffer.h"
#include "dcb.h"
#include "lol.h"
#include "init-dat.h"
#include "kconfig.h"
extern struct _KernelConfig InitKernelConfig;
@ -49,6 +52,7 @@ void strcpy(char *dest, const char *src);
/*inithma.c*/
extern BYTE DosLoadedInHMA;
int fmemcmp(BYTE far * s1, BYTE FAR * s2, unsigned len);
void MoveKernel(unsigned NewKernelSegment);
#define setvec(n, isr) (void)(*(intvec FAR *)MK_FP(0,4 * (n)) = (isr))
@ -122,6 +126,7 @@ COUNT ASMCFUNC Umb_Test(void);
COUNT ASMCFUNC UMB_get_largest(UCOUNT * seg, UCOUNT * size);
BYTE * GetStringArg(BYTE * pLine, BYTE * pszString);
void DoInstall(void);
UWORD GetBiosKey(int timeout);
/* diskinit.c */
COUNT dsk_init(VOID);
@ -185,10 +190,83 @@ VOID init_fatal(BYTE * err_msg);
WORD CDECL init_printf(CONST BYTE * fmt, ...);
WORD CDECL init_sprintf(BYTE * buff, CONST BYTE * fmt, ...);
void MoveKernel(unsigned NewKernelSegment);
/* initclk.c */
extern void Init_clk_driver(void);
extern UWORD HMAFree; /* first byte in HMA not yet used */
extern unsigned CurrentKernelSegment;
extern struct _KernelConfig FAR ASM LowKernelConfig;
extern WORD days[2][13];
extern BYTE FAR *lpOldTop;
extern BYTE FAR *lpTop;
extern BYTE ASM _ib_start[], ASM _ib_end[], ASM _init_end[];
extern UWORD ram_top; /* How much ram in Kbytes */
extern char MenuSelected;
extern unsigned Menus;
extern char singleStep;
extern char SkipAllConfig;
extern struct lol FAR *LoL;
extern struct dhdr DOSTEXTFAR ASM blk_dev; /* Block device (Disk) driver */
extern struct buffer FAR *DOSFAR firstAvailableBuf; /* first 'available' buffer */
extern struct lol ASM DOSFAR DATASTART;
extern BYTE DOSFAR ASM _HMATextAvailable, /* first byte of available CODE area */
FAR ASM _HMATextStart[], /* first byte of HMAable CODE area */
FAR ASM _HMATextEnd[], DOSFAR ASM break_ena, /* break enabled flag */
DOSFAR _InitTextStart, /* first available byte of ram */
DOSFAR ReturnAnyDosVersionExpected;
extern BYTE FAR ASM internal_data[];
extern unsigned char FAR kbdType;
extern struct {
char ThisIsAConstantOne;
short TableSize;
struct CountrySpecificInfo C;
} FAR nlsCountryInfoHardcoded;
/*
data shared between DSK.C and INITDISK.C
*/
extern UWORD DOSFAR LBA_WRITE_VERIFY;
/* floppy parameter table, at 70:xxxx */
extern unsigned char DOSTEXTFAR ASM int1e_table[0xe];
struct RelocationTable {
UBYTE jmpFar;
UWORD jmpOffset;
UWORD jmpSegment;
UBYTE callNear;
UWORD callOffset;
};
struct RelocatedEntry {
UBYTE callNear;
UWORD callOffset;
UBYTE jmpFar;
UWORD jmpOffset;
UWORD jmpSegment;
};
extern struct RelocationTable
DOSTEXTFAR ASM _HMARelocationTableStart[],
DOSTEXTFAR ASM _HMARelocationTableEnd[];
extern void FAR *DOSTEXTFAR ASM XMSDriverAddress;
extern VOID ASMCFUNC FAR _EnableA20(VOID);
extern VOID ASMCFUNC FAR _DisableA20(VOID);
extern void FAR * ASMCFUNC DetectXMSDriver(VOID);
extern int ASMCFUNC init_call_XMScall(void FAR * driverAddress, UWORD ax,
UWORD dx);
#if defined(WATCOM) && 0
ULONG ASMCFUNC FAR MULULUS(ULONG mul1, UWORD mul2); /* MULtiply ULong by UShort */
@ -197,5 +275,3 @@ ULONG ASMCFUNC FAR DIVULUS(ULONG mul1, UWORD mul2); /* DIVide ULong by UShor
ULONG ASMCFUNC FAR DIVMODULUS(ULONG mul1, UWORD mul2, UWORD * rem); /* DIVide ULong by UShort */
#endif
extern struct lol FAR *LoL;

@ -28,8 +28,6 @@
#include "portab.h"
#include "init-mod.h"
#include "init-dat.h"
#include "lol.h"
#ifdef VERSION_STRINGS
static char *RcsId =

@ -26,9 +26,7 @@
#include "portab.h"
#include "init-mod.h"
#include "init-dat.h"
#include "dyndata.h"
#include "lol.h"
#ifdef VERSION_STRINGS
static BYTE *dskRcsId =
"$Id$";
@ -37,15 +35,6 @@ static BYTE *dskRcsId =
UBYTE InitDiskTransferBuffer[SEC_SIZE];
COUNT nUnits;
/*
data shared between DSK.C and INITDISK.C
*/
extern UWORD DOSFAR LBA_WRITE_VERIFY;
/* floppy parameter table, at 70:xxxx */
extern unsigned char DOSTEXTFAR ASM int1e_table[0xe];
/*
* Rev 1.0 13 May 2001 tom ehlert
* Initial revision.

@ -65,12 +65,6 @@
#include "portab.h"
#include "init-mod.h"
#include "init-dat.h"
#include "lol.h"
extern BYTE FAR ASM _HMATextAvailable, /* first byte of available CODE area */
FAR ASM _HMATextStart[], /* first byte of HMAable CODE area */
FAR ASM _HMATextEnd[]; /* and the last byte of it */
#ifdef VERSION_STRINGS
static BYTE *RcsId =
@ -81,13 +75,6 @@ BYTE DosLoadedInHMA = FALSE; /* set to TRUE if loaded HIGH */
BYTE HMAclaimed = FALSE; /* set to TRUE if claimed from HIMEM */
UWORD HMAFree = 0; /* first byte in HMA not yet used */
extern void FAR *DOSTEXTFAR ASM XMSDriverAddress;
VOID ASMCFUNC FAR _EnableA20(VOID);
VOID ASMCFUNC FAR _DisableA20(VOID);
void FAR * ASMCFUNC DetectXMSDriver(VOID);
int ASMCFUNC init_call_XMScall(void FAR * driverAddress, UWORD ax,
UWORD dx);
STATIC void InstallVDISK(void);
#ifdef DEBUG
@ -109,8 +96,6 @@ void int3()
#define HMAInitPrintf(x)
#endif
void MoveKernel(unsigned NewKernelSegment);
#ifdef DEBUG
VOID hdump(BYTE FAR * p)
{
@ -381,24 +366,6 @@ void MoveKernel(unsigned NewKernelSegment)
style table
*/
struct RelocationTable {
UBYTE jmpFar;
UWORD jmpOffset;
UWORD jmpSegment;
UBYTE callNear;
UWORD callOffset;
};
struct RelocatedEntry {
UBYTE callNear;
UWORD callOffset;
UBYTE jmpFar;
UWORD jmpOffset;
UWORD jmpSegment;
};
extern struct RelocationTable
DOSTEXTFAR ASM _HMARelocationTableStart[],
DOSTEXTFAR ASM _HMARelocationTableEnd[];
struct RelocationTable FAR *rp, rtemp;
/* verify, that all entries are valid */

@ -29,7 +29,6 @@
#include "portab.h"
#include "init-mod.h"
#include "lol.h"
#ifdef VERSION_STRINGS
static BYTE *RcsId =

@ -30,44 +30,20 @@
#include "portab.h"
#include "init-mod.h"
#include "dyndata.h"
#include "init-dat.h"
#include "lol.h"
char copyright[] =
"(C) Copyright 1995-2003 Pasquale J. Villani and The FreeDOS Project.\n"
"All Rights Reserved. This is free software and comes with ABSOLUTELY NO\n"
"WARRANTY; you can redistribute it and/or modify it under the terms of the\n"
"GNU General Public License as published by the Free Software Foundation;\n"
"either version 2, or (at your option) any later version.\n";
/*
These are the far variables from the DOS data segment that we need here. The
init procedure uses a different default DS data segment, which is discarded
after use. I hope to clean this up to use the DOS List of List and Swappable
Data Area obtained via INT21.
-- Bart
*/
extern struct dhdr ASM DOSTEXTFAR con_dev, /* console device drive */
DOSTEXTFAR ASM clk_dev, /* Clock device driver */
DOSTEXTFAR ASM blk_dev; /* Block device (Disk) driver */
extern BYTE FAR ASM _HMATextEnd[];
extern struct _KernelConfig FAR ASM LowKernelConfig;
#ifdef VERSION_STRINGS
static BYTE *mainRcsId =
"$Id$";
#endif
struct _KernelConfig InitKernelConfig = { "", 0, 0, 0, 0, 0, 0, 0 };
static char copyright[] =
"(C) Copyright 1995-2003 Pasquale J. Villani and The FreeDOS Project.\n"
"All Rights Reserved. This is free software and comes with ABSOLUTELY NO\n"
"WARRANTY; you can redistribute it and/or modify it under the terms of the\n"
"GNU General Public License as published by the Free Software Foundation;\n"
"either version 2, or (at your option) any later version.\n";
extern WORD days[2][13];
extern BYTE FAR *lpOldTop;
extern BYTE FAR *lpTop;
extern BYTE ASM _ib_start[], ASM _ib_end[], ASM _init_end[];
extern UWORD ram_top; /* How much ram in Kbytes */
struct _KernelConfig InitKernelConfig = { "", 0, 0, 0, 0, 0, 0, 0 };
STATIC VOID InitIO(void);
@ -77,9 +53,7 @@ STATIC VOID signon(VOID);
STATIC VOID kernel(VOID);
STATIC VOID FsConfig(VOID);
STATIC VOID InitPrinters(VOID);
void CheckContinueBootFromHarddisk(void);
extern void Init_clk_driver(void);
STATIC void CheckContinueBootFromHarddisk(void);
#ifdef _MSC_VER
BYTE _acrtused = 0;
@ -93,6 +67,8 @@ __segment DosTextSeg = 0;
#endif
struct lol FAR *LoL = &DATASTART;
/* little functions - could be ASM but does not really matter in this context */
void memset(void *s, int c, unsigned n)
{
@ -269,6 +245,7 @@ STATIC void init_kernel(void)
/* and process CONFIG.SYS one last time for device drivers */
DoConfig(2);
/* Close all (device) files */
for (i = 0; i < LoL->lastdrive; i++)
close(i);
@ -278,7 +255,7 @@ STATIC void init_kernel(void)
/* Init the file system one more time */
FsConfig();
configDone();
InitializeAllBPBs();
@ -286,10 +263,8 @@ STATIC void init_kernel(void)
STATIC VOID FsConfig(VOID)
{
REG COUNT i;
struct dpb FAR *dpb;
dpb = LoL->DPBp;
struct dpb FAR *dpb = LoL->DPBp;
int i;
/* Initialize the current directory structures */
for (i = 0; i < LoL->lastdrive; i++)
@ -380,9 +355,6 @@ STATIC void kernel()
CommandTail Cmd;
int rc;
extern char MenuSelected;
extern unsigned Menus;
BYTE master_env[32];
char *masterenv_ptr = master_env;
@ -415,8 +387,6 @@ STATIC void kernel()
if (Cmd.ctCount < sizeof(Cmd.ctBuffer) - 3)
{
extern int singleStep;
extern int SkipAllConfig;
char *insertString = NULL;
if (singleStep)
@ -581,10 +551,16 @@ BOOL init_device(struct dhdr FAR * dhp, char *cmdLine, COUNT mode,
STATIC void InitIO(void)
{
struct dhdr far *device = &LoL->nul_dev;
/* Initialize driver chain */
setvec(0x29, int29_handler); /* Requires Fast Con Driver */
init_device(&con_dev, NULL, NULL, lpTop);
init_device(&clk_dev, NULL, NULL, lpTop);
device = &LoL->nul_dev;
do {
init_device(device, NULL, NULL, lpTop);
device = device->dh_next;
}
while (FP_OFF(device) != 0xffff);
}
/* issue an internal error message */
@ -630,8 +606,6 @@ STATIC VOID InitPrinters(VOID)
booted from HD
*/
extern UWORD GetBiosKey(int timeout);
EmulatedDriveStatus(int drive,char statusOnly)
{
iregs r;
@ -650,7 +624,7 @@ EmulatedDriveStatus(int drive,char statusOnly)
return TRUE;
}
void CheckContinueBootFromHarddisk(void)
STATIC void CheckContinueBootFromHarddisk(void)
{
char *bootedFrom = "Floppy/CD";
iregs r;