From 5214472bf75c367a3a754ed7af8c368e677820f4 Mon Sep 17 00:00:00 2001 From: Bart Oldeman Date: Tue, 24 Feb 2004 00:25:56 +0000 Subject: [PATCH] Use asmsupt string and mem functions for the init code too. git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@787 6ac86273-5f31-0410-b378-82cca8765d1b --- kernel/asmsupt.asm | 35 +++++++++++++++++++++++++++++++++-- kernel/config.c | 20 ++++++-------------- kernel/init-mod.h | 28 ++++++++++++++++++++-------- kernel/inithma.c | 11 ----------- kernel/main.c | 31 ++----------------------------- kernel/makefile | 6 +++++- kernel/prf.c | 2 +- 7 files changed, 67 insertions(+), 66 deletions(-) diff --git a/kernel/asmsupt.asm b/kernel/asmsupt.asm index 1b3b2bf..0b6765c 100644 --- a/kernel/asmsupt.asm +++ b/kernel/asmsupt.asm @@ -36,7 +36,33 @@ %include "segs.inc" -segment HMA_TEXT +%ifdef _INIT + + segment INIT_TEXT + %define FMEMCPYBACK INIT_FMEMCPYBACK + %define MEMCPY INIT_MEMCPY + %define FMEMCPY INIT_FMEMCPY + %define MEMSET INIT_MEMSET + %define FMEMSET INIT_FMEMSET + %define STRCPY INIT_STRCPY + %define FSTRCPY INIT_FSTRCPY + %define STRLEN INIT_STRLEN + %define FSTRLEN INIT_FSTRLEN + %define FMEMCHR INIT_FMEMCHR + %define FSTRCHR INIT_FSTRCHR + %define STRCHR INIT_STRCHR + %define FSTRCMP INIT_FSTRCMP + %define STRCMP INIT_STRCMP + %define FSTRNCMP INIT_FSTRNCMP + %define STRNCMP INIT_STRNCMP + %define FMEMCMP INIT_FMEMCMP + %define MEMCMP INIT_MEMCMP + +%else + + segment HMA_TEXT + +%endif ;********************************************************************* ; this implements some of the common string handling functions @@ -225,7 +251,7 @@ pascal_return: ; fstrcpy (void FAR*dest, void FAR *src); - +%ifndef _INIT global FSTRCPY FSTRCPY: call pascal_setup @@ -239,6 +265,7 @@ FSTRCPY: mov bl,8 jmp short dostrcpy +%endif ;****** global STRCPY @@ -294,6 +321,8 @@ dostrlen: jmp short pascal_return +%ifndef _INIT + ;************************************************************ ; strchr (BYTE *src , int ch); @@ -366,6 +395,8 @@ FMEMCHR: mov ax, di jmp short strchr_found1 +%endif + ;********************************************************************** %if 0 nix pascal - still untested diff --git a/kernel/config.c b/kernel/config.c index 64b74b1..419d35c 100644 --- a/kernel/config.c +++ b/kernel/config.c @@ -1047,17 +1047,17 @@ STATIC VOID Dosmem(BYTE * pLine) for (pTmp = szBuf;;) { - if (fmemcmp(pTmp, "UMB", 3) == 0) + if (memcmp(pTmp, "UMB", 3) == 0) { UMBwanted = TRUE; pTmp += 3; } - if (fmemcmp(pTmp, "HIGH", 4) == 0) + if (memcmp(pTmp, "HIGH", 4) == 0) { HMAState = HMA_REQ; pTmp += 4; } -/* if (fmemcmp(pTmp, "CLAIMINIT",9) == 0) { INITDataSegmentClaimed = 0; pTmp += 9; }*/ +/* if (memcmp(pTmp, "CLAIMINIT",9) == 0) { INITDataSegmentClaimed = 0; pTmp += 9; }*/ pTmp = skipwh(pTmp); if (*pTmp != ',') @@ -1083,7 +1083,7 @@ STATIC VOID DosData(BYTE * pLine) pLine = GetStringArg(pLine, szBuf); strupr(szBuf); - if (fmemcmp(szBuf, "UMB", 3) == 0) + if (memcmp(szBuf, "UMB", 3) == 0) Config.cfgDosDataUmb = TRUE; } @@ -1705,14 +1705,6 @@ STATIC VOID mumcb_init(UCOUNT seg, UWORD size) } #endif -static size_t strlen(const char *s) -{ - size_t n = 0; - while (*s++) - n++; - return n; -} - char *strcat(register char * d, register const char * s) { strcpy(d + strlen(d), s); @@ -1894,7 +1886,7 @@ STATIC VOID CfgMenu(BYTE * pLine) (change struct at top of file if you want more...) */ if (nLen > MENULINEMAX-1) nLen = MENULINEMAX-1; - fmemcpy(MenuStruct[nIndex].Text, pLine, nLen); + memcpy(MenuStruct[nIndex].Text, pLine, nLen); MenuStruct[nIndex].Text[nLen] = 0; /* nullTerminate */ } nMenuLine++; @@ -2576,7 +2568,7 @@ STATIC VOID _CmdInstall(BYTE * pLine,int mode) CfgFailure(pLine); return; } - fmemcpy(InstallCommands[numInstallCmds].buffer,pLine,127); + memcpy(InstallCommands[numInstallCmds].buffer,pLine,127); InstallCommands[numInstallCmds].buffer[127] = 0; InstallCommands[numInstallCmds].mode = mode; numInstallCmds++; diff --git a/kernel/init-mod.h b/kernel/init-mod.h index 51c6af9..4b9b1d5 100644 --- a/kernel/init-mod.h +++ b/kernel/init-mod.h @@ -35,23 +35,35 @@ extern struct _KernelConfig InitKernelConfig; #define printf init_printf #define sprintf init_sprintf #define execrh init_execrh +#define memcpy init_memcpy #define fmemcpy init_fmemcpy #define fmemset init_fmemset #define fmemcmp init_fmemcmp -#define memset init_memset -#define strcpy init_strcpy -WORD ASMCFUNC execrh(request FAR *, struct dhdr FAR *); -void fmemcpy(void far *d, const void far *s, unsigned n); -void fmemset(void far *s, int ch, unsigned n); -void memset(void *s, int ch, unsigned n); -void strcpy(char *dest, const char *src); +#define memcmp init_memcmp +#define memset init_memset +#define strcpy init_strcpy +#define strlen init_strlen +#define fstrlen init_fstrlen +/* execrh.asm */ +WORD ASMCFUNC execrh(request FAR *, struct dhdr FAR *); + +/* asmsupt.asm */ +VOID ASMPASCAL memset( void *s, int ch, size_t n); +VOID ASMPASCAL fmemset( void FAR *s, int ch, size_t n); +int ASMPASCAL memcmp(const void *m1, const void *m2, size_t n); +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 fmemcpy( void FAR *d, const void FAR *s, size_t n); +VOID ASMPASCAL strcpy(char *d, const char *s); +size_t ASMPASCAL strlen(const char *s); +size_t ASMPASCAL fstrlen(const char FAR *s); + #undef LINESIZE #define LINESIZE KBD_MAXLENGTH /*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)) diff --git a/kernel/inithma.c b/kernel/inithma.c index 73aef6e..b943cac 100644 --- a/kernel/inithma.c +++ b/kernel/inithma.c @@ -113,17 +113,6 @@ VOID hdump(BYTE FAR * p) #define KeyboardShiftState() (*(BYTE FAR *)(MK_FP(0x40,0x17))) -/* of course, this should go to ASMSUPT */ -int fmemcmp(BYTE far * s1, BYTE FAR * s2, unsigned len) -{ - for (; len; s1++, s2++, --len) - { - if (*s1 - *s2) - return *s1 - *s2; - } - return 0; -} - /* this tests, if the HMA area can be enabled. if so, it simply leaves it on diff --git a/kernel/main.c b/kernel/main.c index f4ed9bc..a909c3f 100644 --- a/kernel/main.c +++ b/kernel/main.c @@ -70,33 +70,6 @@ struct lol FAR *LoL; struct lol FAR *LoL = &DATASTART; #endif -/* little functions - could be ASM but does not really matter in this context */ -void memset(void *s, int c, unsigned n) -{ - char *t = s; - while(n--) *t++ = c; -} - -void fmemset(void far *s, int c, unsigned n) -{ - char far *t = s; - while(n--) *t++ = c; -} - -void strcpy(char *dest, const char *src) -{ - while(*src) - *dest++ = *src++; - *dest = '\0'; -} - -void fmemcpy(void far *dest, const void far *src, unsigned n) -{ - char far *d = dest; - const char far *s = src; - while(n--) *d++ = *s++; -} - VOID ASMCFUNC FreeDOSmain(void) { unsigned char drv; @@ -375,7 +348,7 @@ STATIC void kernel() /* process 0 */ /* Execute command.com /P from the drive we just booted from */ memset(Cmd.ctBuffer, 0, sizeof(Cmd.ctBuffer)); - fmemcpy(Cmd.ctBuffer, Config.cfgInitTail, sizeof(Config.cfgInitTail)); + memcpy(Cmd.ctBuffer, Config.cfgInitTail, sizeof(Config.cfgInitTail)); for (Cmd.ctCount = 0; Cmd.ctCount < sizeof(Cmd.ctBuffer); Cmd.ctCount++) if (Cmd.ctBuffer[Cmd.ctCount] == '\r') @@ -406,7 +379,7 @@ STATIC void kernel() for (q = &Cmd.ctBuffer[Cmd.ctCount - 1]; q >= p; q--) q[3] = q[0]; - fmemcpy(p, insertString, 3); + memcpy(p, insertString, 3); Cmd.ctCount += 3; break; diff --git a/kernel/makefile b/kernel/makefile index 352dab1..37d424d 100644 --- a/kernel/makefile +++ b/kernel/makefile @@ -40,7 +40,7 @@ error.obj OBJS4=break.obj dosfns.obj fatdir.obj fatfs.obj fattab.obj fcbfns.obj \ inthndlr.obj OBJS5=ioctl.obj dosnames.obj memmgr.obj task.obj newstuff.obj nls.obj network.obj -OBJS6=prf.obj misc.obj strings.obj syspack.obj lfnapi.obj +OBJS6=prf.obj misc.obj strings.obj syspack.obj lfnapi.obj iasmsupt.obj OBJS7=main.obj config.obj initoem.obj inithma.obj dyninit.obj iprf.obj \ initdisk.obj initclk.obj OBJS = $(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4) $(OBJS5) $(OBJS6) $(OBJS7) @@ -220,6 +220,10 @@ initclk.obj: initclk.c $(INITHEADERS) $(HEADERS) $(CONFIGURATION) $(CC) $(INITCFLAGS) $*.c $(INITPATCH) $*.obj +#the string functions for INIT_TEXT +iasmsupt.obj: asmsupt.asm $(CONFIGURATION) + $(NASM) -D$(COMPILER) -D_INIT $(NASMFLAGS) -f obj -o iasmsupt.obj asmsupt.asm + #the printf for INIT_TEXT - yet another special case, this file includes prf.c iprf.obj: iprf.c prf.c $(HDR)portab.h $(CONFIGURATION) $(CC) $(INITCFLAGS) $*.c diff --git a/kernel/prf.c b/kernel/prf.c index ce25a37..453a0a1 100644 --- a/kernel/prf.c +++ b/kernel/prf.c @@ -136,7 +136,7 @@ int CDECL printf(CONST BYTE * fmt, ...); /* The following is user supplied and must match the following prototype */ VOID cso(COUNT); -#if defined(FORSYS) || defined(_INIT) +#if defined(FORSYS) COUNT fstrlen(BYTE FAR * s) /* don't want globals.h, sorry */ { int i = 0;