mirror of
https://github.com/FDOS/kernel.git
synced 2025-07-24 06:14:29 +02:00
config: build master environment during FDCONFIG.SYS processing
lDebug wants to access the environment while executing as a device driver. Instead of building it in a variable then copying it to 68h:0 after FDCONFIG.SYS processing, just build it there to begin with.
This commit is contained in:
parent
afe7fbe068
commit
3d1ba0d486
@ -286,7 +286,6 @@ pascal_return:
|
|||||||
|
|
||||||
; fstrcpy (void FAR*dest, void FAR *src);
|
; fstrcpy (void FAR*dest, void FAR *src);
|
||||||
|
|
||||||
%ifndef _INIT
|
|
||||||
global FSTRCPY
|
global FSTRCPY
|
||||||
FSTRCPY:
|
FSTRCPY:
|
||||||
call pascal_setup
|
call pascal_setup
|
||||||
@ -301,7 +300,6 @@ arg {dest,4}, {src,4}
|
|||||||
mov bl,8
|
mov bl,8
|
||||||
|
|
||||||
jmp short dostrcpy
|
jmp short dostrcpy
|
||||||
%endif
|
|
||||||
|
|
||||||
;******
|
;******
|
||||||
global STRCPY
|
global STRCPY
|
||||||
@ -570,10 +568,6 @@ strncmp_retzero:
|
|||||||
strncmp_done:
|
strncmp_done:
|
||||||
lahf
|
lahf
|
||||||
ror ah,1
|
ror ah,1
|
||||||
%ifdef _INIT
|
|
||||||
strncmp_done2: jmp short pascal_return
|
|
||||||
%else
|
|
||||||
strncmp_done2: jmp pascal_return
|
strncmp_done2: jmp pascal_return
|
||||||
%endif
|
|
||||||
|
|
||||||
%endif
|
%endif
|
||||||
|
@ -127,8 +127,7 @@ size_t ebda_size BSS_INIT(0);
|
|||||||
|
|
||||||
static UBYTE ErrorAlreadyPrinted[128] BSS_INIT({0});
|
static UBYTE ErrorAlreadyPrinted[128] BSS_INIT({0});
|
||||||
|
|
||||||
char master_env[128] BSS_INIT({0});
|
static char FAR *envp = master_env;
|
||||||
static char *envp = master_env;
|
|
||||||
|
|
||||||
struct config Config = {
|
struct config Config = {
|
||||||
0,
|
0,
|
||||||
@ -2416,8 +2415,15 @@ RestartInput:
|
|||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
/* export the current selected config menu */
|
/* export the current selected config menu */
|
||||||
sprintf(envp, "CONFIG=%c", MenuSelected+'0');
|
{
|
||||||
envp += 9;
|
char buffer[10];
|
||||||
|
int len;
|
||||||
|
sprintf(buffer, "CONFIG=%c", MenuSelected+'0');
|
||||||
|
len = strlen(buffer);
|
||||||
|
fstrcpy(envp, buffer);
|
||||||
|
envp += len + 1;
|
||||||
|
*envp = 0;
|
||||||
|
}
|
||||||
if (MenuColor != -1)
|
if (MenuColor != -1)
|
||||||
ClearScreen(0x7);
|
ClearScreen(0x7);
|
||||||
}
|
}
|
||||||
@ -2745,8 +2751,9 @@ STATIC VOID CmdSet(BYTE *pLine)
|
|||||||
size = strlen(szBuf);
|
size = strlen(szBuf);
|
||||||
if (size < master_env + sizeof(master_env) - envp - 1)
|
if (size < master_env + sizeof(master_env) - envp - 1)
|
||||||
{ /* must end with two consequtive zeros */
|
{ /* must end with two consequtive zeros */
|
||||||
strcpy(envp, szBuf);
|
fstrcpy(envp, szBuf);
|
||||||
envp += size + 1; /* add next variables starting at the second zero */
|
envp += size + 1; /* add next variables starting at the second zero */
|
||||||
|
*envp = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
printf("Master environment is full - can't add \"%s\"\n", szBuf);
|
printf("Master environment is full - can't add \"%s\"\n", szBuf);
|
||||||
|
@ -57,6 +57,7 @@ extern struct _KernelConfig InitKernelConfig;
|
|||||||
#define memset init_memset
|
#define memset init_memset
|
||||||
#define strchr init_strchr
|
#define strchr init_strchr
|
||||||
#define strcpy init_strcpy
|
#define strcpy init_strcpy
|
||||||
|
#define fstrcpy init_fstrcpy
|
||||||
#define strlen init_strlen
|
#define strlen init_strlen
|
||||||
#define fstrlen init_fstrlen
|
#define fstrlen init_fstrlen
|
||||||
#endif
|
#endif
|
||||||
@ -75,6 +76,7 @@ int ASMPASCAL fmemcmp(const void FAR *m1, const void FAR *m2, size_t n);
|
|||||||
VOID ASMPASCAL memcpy( void *d, const void *s, size_t n);
|
VOID ASMPASCAL memcpy( void *d, const void *s, size_t n);
|
||||||
VOID ASMPASCAL fmemcpy( void FAR *d, const void FAR *s, size_t n);
|
VOID ASMPASCAL fmemcpy( void FAR *d, const void FAR *s, size_t n);
|
||||||
VOID ASMPASCAL strcpy(char *d, const char *s);
|
VOID ASMPASCAL strcpy(char *d, const char *s);
|
||||||
|
VOID ASMPASCAL fstrcpy(char FAR *d, const char FAR *s);
|
||||||
size_t ASMPASCAL strlen(const char *s);
|
size_t ASMPASCAL strlen(const char *s);
|
||||||
size_t ASMPASCAL fstrlen(const char FAR *s);
|
size_t ASMPASCAL fstrlen(const char FAR *s);
|
||||||
char * ASMPASCAL strchr(const char *s, int ch);
|
char * ASMPASCAL strchr(const char *s, int ch);
|
||||||
@ -90,6 +92,7 @@ char * ASMPASCAL strchr(const char *s, int ch);
|
|||||||
#pragma aux (pascal_ax) memcmp modify nomemory
|
#pragma aux (pascal_ax) memcmp modify nomemory
|
||||||
#pragma aux (pascal_ax) fmemcmp modify nomemory
|
#pragma aux (pascal_ax) fmemcmp modify nomemory
|
||||||
#pragma aux (pascal_ax) strcpy
|
#pragma aux (pascal_ax) strcpy
|
||||||
|
#pragma aux (pascal_ax) fstrcpy
|
||||||
#pragma aux (pascal_ax) strlen modify nomemory
|
#pragma aux (pascal_ax) strlen modify nomemory
|
||||||
#pragma aux (pascal_ax) fstrlen modify nomemory
|
#pragma aux (pascal_ax) fstrlen modify nomemory
|
||||||
#pragma aux (pascal) strchr modify exact [ax dx] nomemory
|
#pragma aux (pascal) strchr modify exact [ax dx] nomemory
|
||||||
@ -251,7 +254,7 @@ extern BYTE ASM _ib_start[], ASM _ib_end[], ASM _init_end[];
|
|||||||
extern UWORD ram_top; /* How much ram in Kbytes */
|
extern UWORD ram_top; /* How much ram in Kbytes */
|
||||||
extern char singleStep;
|
extern char singleStep;
|
||||||
extern char SkipAllConfig;
|
extern char SkipAllConfig;
|
||||||
extern char master_env[128];
|
extern char FAR ASM master_env[128];
|
||||||
|
|
||||||
extern struct lol FAR *LoL;
|
extern struct lol FAR *LoL;
|
||||||
|
|
||||||
|
@ -134,6 +134,8 @@ entry_common:
|
|||||||
|
|
||||||
beyond_entry: times 256-(beyond_entry-entry) db 0
|
beyond_entry: times 256-(beyond_entry-entry) db 0
|
||||||
; scratch area for data (DOS_PSP)
|
; scratch area for data (DOS_PSP)
|
||||||
|
_master_env equ $ - 128
|
||||||
|
global _master_env
|
||||||
|
|
||||||
segment INIT_TEXT
|
segment INIT_TEXT
|
||||||
|
|
||||||
|
@ -148,6 +148,7 @@ SECTIONS
|
|||||||
_init_memcpy = INIT_MEMCPY;
|
_init_memcpy = INIT_MEMCPY;
|
||||||
_init_fmemcpy = INIT_FMEMCPY;
|
_init_fmemcpy = INIT_FMEMCPY;
|
||||||
_init_strcpy = INIT_STRCPY;
|
_init_strcpy = INIT_STRCPY;
|
||||||
|
_init_fstrcpy = INIT_FSTRCPY;
|
||||||
_init_strlen = INIT_STRLEN;
|
_init_strlen = INIT_STRLEN;
|
||||||
_init_strchr = INIT_STRCHR;
|
_init_strchr = INIT_STRCHR;
|
||||||
_UMB_get_largest = UMB_GET_LARGEST;
|
_UMB_get_largest = UMB_GET_LARGEST;
|
||||||
|
@ -466,8 +466,7 @@ STATIC void kernel()
|
|||||||
CommandTail Cmd;
|
CommandTail Cmd;
|
||||||
|
|
||||||
if (master_env[0] == '\0') /* some shells panic on empty master env. */
|
if (master_env[0] == '\0') /* some shells panic on empty master env. */
|
||||||
strcpy(master_env, "PATH=.");
|
fmemcpy(master_env, "PATH=.\0\0", sizeof("PATH=.\0\0"));
|
||||||
fmemcpy(MK_FP(DOS_PSP + 8, 0), master_env, sizeof(master_env));
|
|
||||||
|
|
||||||
/* process 0 */
|
/* process 0 */
|
||||||
/* Execute command.com from the drive we just booted from */
|
/* Execute command.com from the drive we just booted from */
|
||||||
|
@ -68,7 +68,7 @@ ifeq ($(LOADSEG)0, 0)
|
|||||||
LOADSEG=0x60
|
LOADSEG=0x60
|
||||||
endif
|
endif
|
||||||
|
|
||||||
INITPATCH=ia16-elf-objcopy --redefine-sym ___umodsi3=_init_umodsi3 --redefine-sym ___udivsi3=_init_udivsi3 --redefine-sym ___ashlsi3=_init_ashlsi3 --redefine-sym ___lshrsi3=_init_lshrsi3 --redefine-sym _printf=_init_printf --redefine-sym _sprintf=_init_sprintf --redefine-sym _execrh=_init_execrh --redefine-sym _memcpy=_init_memcpy --redefine-sym _fmemcpy=_init_fmemcpy --redefine-sym _fmemset=_init_fmemset --redefine-sym _fmemcmp=_init_fmemcmp --redefine-sym _memcmp=_init_memcmp --redefine-sym _memset=_init_memset --redefine-sym _strchr=_init_strchr --redefine-sym _strcpy=_init_strcpy --redefine-sym _strlen=_init_strlen --redefine-sym _fstrlen=_init_fstrlen --redefine-sym _open=_init_DosOpen
|
INITPATCH=ia16-elf-objcopy --redefine-sym ___umodsi3=_init_umodsi3 --redefine-sym ___udivsi3=_init_udivsi3 --redefine-sym ___ashlsi3=_init_ashlsi3 --redefine-sym ___lshrsi3=_init_lshrsi3 --redefine-sym _printf=_init_printf --redefine-sym _sprintf=_init_sprintf --redefine-sym _execrh=_init_execrh --redefine-sym _memcpy=_init_memcpy --redefine-sym _fmemcpy=_init_fmemcpy --redefine-sym _fmemset=_init_fmemset --redefine-sym _fmemcmp=_init_fmemcmp --redefine-sym _memcmp=_init_memcmp --redefine-sym _memset=_init_memset --redefine-sym _strchr=_init_strchr --redefine-sym _strcpy=_init_strcpy --redefine-sym _fstrcpy=_init_fstrcpy --redefine-sym _strlen=_init_strlen --redefine-sym _fstrlen=_init_fstrlen --redefine-sym _open=_init_DosOpen
|
||||||
CLDEF=1
|
CLDEF=1
|
||||||
CLT=gcc -Wall -DDOSC_TIME_H -I../hdr -o $@
|
CLT=gcc -Wall -DDOSC_TIME_H -I../hdr -o $@
|
||||||
CLC=$(CLT)
|
CLC=$(CLT)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user