Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 39 → Rev 40

/shark/trunk/oslib/xlib/x1.c
63,7 → 63,7
/* function __CHK to detect it! The compiler place it whenever */
/* it calls a function to detect overflow */
 
DWORD _stkbase;
DWORD _stkbase;
DWORD _stktop;
 
/* This is some extra stuff we need to compile with argument */
72,7 → 72,11
typedef char *charp;
charp _argv[100];
 
extern void main(int argc, char *argv[]);
#ifndef MAIN
#define MAIN main
#endif
 
extern void MAIN(int argc,char *argv[]);
extern void bios_save(void);
extern void bios_restore(void);
 
83,93 → 87,54
}
 
 
struct multiboot_info *mbi_address(void)
struct multiboot_info * mbi_address(void)
{
/* This is declared in [wc32/gnu]\x0.[asm/s] */
extern struct multiboot_info *mbi;
/* This is declared in [wc32/gnu]\x0.[asm/s] */
extern struct multiboot_info *mbi;
 
return (mbi);
return (mbi);
}
 
#ifndef __NOH4__
 
void __kernel_init__(struct multiboot_info *m);
 
void _startup(void)
{
struct multiboot_info *mbi = mbi_address();
register int i = 0;
struct multiboot_info *mbi = mbi_address();
char *cmdline = (char *)(mbi->cmdline);
 
bios_save();
 
/* Call init procedure using standard C convention */
/* Remember you cannot call any console I/O function */
/* if you do not call bios_save() */
 
#ifdef __DUMP_MEM__
message("X/MEM : %u\n", mbi->mem_upper);
message("DOS/MEM : %u\n", mbi->mem_lower);
message("x_bios Size : %u\n", sizeof(X_BIOSCALL));
message("mbi Size : %u\n", sizeof(struct multiboot_info));
message("Cmdline : %s\n", mbi->cmdline);
/* message("Argc : %u",_argc);
message("Argv[0] : %s / %s\n",_argv[0]);
message("Argv[1] : %s\n",_argv[1]);
message("Argv[2] : %s\n",_argv[2]);
message("Argv[3] : %s\n",_argv[3]); */
#endif
 
__kernel_init__(mbi);
 
bios_restore();
}
 
#else
void _startup(void)
{
register int i = 0;
struct multiboot_info *mbi = mbi_address();
char *cmdline = (char *) (mbi->cmdline);
 
if (!(mbi->flags & MB_INFO_MEMORY)) {
cputs
("X/Runtime library error!!! Unable to find memory information!\n");
l1_exit(-1);
if (!(mbi->flags & MB_INFO_MEMORY)) {
cputs("X/Runtime library error!!! Unable to find memory information!\n");
l1_exit(-1);
}
if (mbi->flags & MB_INFO_CMDLINE) {
/* Build parameter list, up to 100 parms... */
while (cmdline[i] != 0) {
_argv[_argc] = &(cmdline[i]);
while (cmdline[i] != ' ' && cmdline[i] != 0) i++;
if (cmdline[i] == ' ') {
cmdline[i] = 0; i++; _argc++;
}
}
 
if (mbi->flags & MB_INFO_CMDLINE) {
/* Build parameter list, up to 100 parms... */
while (cmdline[i] != 0) {
_argv[_argc] = &(cmdline[i]);
while (cmdline[i] != ' ' && cmdline[i] != 0)
i++;
if (cmdline[i] == ' ') {
cmdline[i] = 0;
i++;
_argc++;
}
}
_argc++;
}
 
bios_save();
/* Call main procedure using standard C convention */
/* Remember you cannot call any console I/O function */
/* if you do not call bios_save() */
 
_argc++;
}
bios_save();
/* Call main procedure using standard C convention */
/* Remember you cannot call any console I/O function */
/* if you do not call bios_save() */
#ifdef __DUMP_MEM__
message("X/MEM : %u\n", mbi->mem_upper);
message("DOS/MEM : %u\n", mbi->mem_lower);
message("x_bios Size : %u\n", sizeof(X_BIOSCALL));
message("mbi Size : %u\n", sizeof(struct multiboot_info));
message("Cmdline : %s\n", mbi->cmdline);
message("Argc : %u", _argc);
message("Argv[0] : %s / %s\n", _argv[0]);
message("Argv[1] : %s\n", _argv[1]);
message("Argv[2] : %s\n", _argv[2]);
message("Argv[3] : %s\n", _argv[3]);
message("X/MEM : %u\n",mbi->mem_upper);
message("DOS/MEM : %u\n",mbi->mem_lower);
message("x_bios Size : %u\n",sizeof(X_BIOSCALL));
message("mbi Size : %u\n",sizeof(struct multiboot_info));
message("Cmdline : %s\n",mbi->cmdline);
message("Argc : %u",_argc);
message("Argv[0] : %s / %s\n",_argv[0]);
message("Argv[1] : %s\n",_argv[1]);
message("Argv[2] : %s\n",_argv[2]);
message("Argv[3] : %s\n",_argv[3]);
#endif
main(_argc, _argv);
bios_restore();
MAIN(_argc,_argv);
bios_restore();
}
 
#endif