Ignore:
Timestamp:
Sep 15, 2001, 11:47:44 AM (24 years ago)
Author:
sandervl
Message:

restored old version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/crtdll/crtdll_main.c

    r6645 r6712  
    1 /* $Id: crtdll_main.c,v 1.2 2001-09-05 12:14:24 bird Exp $ */
    21/*
    32 * The C RunTime DLL
    4  *
     3 * 
    54 * Implements C run-time functionality as known from UNIX.
    65 *
     
    1413Unresolved issues Uwe Bonnes 970904:
    1514- tested with ftp://ftp.remcomp.com/pub/remcomp/lcc-win32.zip, a C-Compiler
    16         for Win32, based on lcc, from Jacob Navia
     15                for Win32, based on lcc, from Jacob Navia
    1716UB 000416:
    1817- probably not thread safe
    1918*/
    2019
    21 /* NOTE: This file also implements the wcs* functions. They _ARE_ in
     20/* NOTE: This file also implements the wcs* functions. They _ARE_ in 
    2221 * the newer Linux libcs, but use 4 byte wide characters, so are unusable,
    2322 * since we need 2 byte wide characters. - Marcus Meissner, 981031
     
    6463UINT CRTDLL_winminor_dll;     /* CRTDLL.330 */
    6564UINT CRTDLL_winver_dll;       /* CRTDLL.331 */
    66 INT  CRTDLL_doserrno = 0;
     65INT  CRTDLL_doserrno = 0; 
    6766INT  CRTDLL_errno = 0;
    6867const INT  CRTDLL__sys_nerr = 43;
     
    7877 *                  CRTDLL_MainInit  (CRTDLL.init)
    7978 */
    80 
     79 
    8180BOOL WINAPI CRTDLL_Init(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
    8281{
    8382  FS_OS2
    84 
     83   
    8584    // call i/o initializer in file.c
    86     if (fdwReason == DLL_PROCESS_ATTACH)
     85    if (fdwReason == DLL_PROCESS_ATTACH) 
    8786    {
    8887      __CRTDLL__init_io();
    8988    }
    90 
     89   
    9190  /*
    9291    PH 2000/11/21 this code doesn't look very useful
    93 
     92   
    9493    if (fdwReason == DLL_PROCESS_ATTACH) {
    9594      _fdopen(0,"r");
     
    104103      }
    105104  */
    106 
     105 
    107106  FS_WIN32
    108107  return TRUE;
     
    177176        char *cmdline;
    178177        char  **xargv;
    179     int xargc,end,last_arg,afterlastspace;
    180     DWORD   version;
    181 
    182     TRACE("(%p,%p,%p,%ld).\n",
    183         argc,argv,environ,flag
    184     );
    185 
    186     if (CRTDLL_acmdln_dll != NULL)
    187         HeapFree(GetProcessHeap(), 0, CRTDLL_acmdln_dll);
    188 
    189     CRTDLL_acmdln_dll = cmdline = CRTDLL__strdup( GetCommandLineA() );
    190     TRACE("got '%s'\n", cmdline);
    191 
    192     version = GetVersion();
    193     CRTDLL_osver_dll       = version >> 16;
    194     CRTDLL_winminor_dll    = version & 0xFF;
    195     CRTDLL_winmajor_dll    = (version>>8) & 0xFF;
    196     CRTDLL_baseversion_dll = version >> 16;
    197     CRTDLL_winver_dll      = ((version >> 8) & 0xFF) + ((version & 0xFF) << 8);
    198     CRTDLL_baseminor_dll   = (version >> 16) & 0xFF;
    199     CRTDLL_basemajor_dll   = (version >> 24) & 0xFF;
    200     CRTDLL_osversion_dll   = version & 0xFFFF;
    201     CRTDLL_osminor_dll     = version & 0xFF;
    202     CRTDLL_osmajor_dll     = (version>>8) & 0xFF;
    203 
    204     /* missing threading init */
    205 
    206     end=0;last_arg=0;xargv=NULL;xargc=0;afterlastspace=0;
    207     while (1)
    208     {
    209         if ((cmdline[end]==' ') || (cmdline[end]=='\0'))
    210         {
    211         if (cmdline[end]=='\0')
    212             last_arg=1;
    213         else
    214             cmdline[end]='\0';
    215         /* alloc xargc + NULL entry */
    216             xargv=(char**)HeapReAlloc( GetProcessHeap(), 0, xargv,
    217                                      sizeof(char*)*(xargc+1));
    218         if (strlen(cmdline+afterlastspace))
    219         {
    220             xargv[xargc] = CRTDLL__strdup(cmdline+afterlastspace);
    221             xargc++;
     178        int     xargc,end,last_arg,afterlastspace;
     179        DWORD   version;
     180
     181        TRACE("(%p,%p,%p,%ld).\n",
     182                argc,argv,environ,flag
     183        );
     184
     185        if (CRTDLL_acmdln_dll != NULL)
     186                HeapFree(GetProcessHeap(), 0, CRTDLL_acmdln_dll);
     187
     188        CRTDLL_acmdln_dll = cmdline = CRTDLL__strdup( GetCommandLineA() );
     189        TRACE("got '%s'\n", cmdline);
     190
     191        version = GetVersion();
     192        CRTDLL_osver_dll       = version >> 16;
     193        CRTDLL_winminor_dll    = version & 0xFF;
     194        CRTDLL_winmajor_dll    = (version>>8) & 0xFF;
     195        CRTDLL_baseversion_dll = version >> 16;
     196        CRTDLL_winver_dll      = ((version >> 8) & 0xFF) + ((version & 0xFF) << 8);
     197        CRTDLL_baseminor_dll   = (version >> 16) & 0xFF;
     198        CRTDLL_basemajor_dll   = (version >> 24) & 0xFF;
     199        CRTDLL_osversion_dll   = version & 0xFFFF;
     200        CRTDLL_osminor_dll     = version & 0xFF;
     201        CRTDLL_osmajor_dll     = (version>>8) & 0xFF;
     202
     203        /* missing threading init */
     204
     205        end=0;last_arg=0;xargv=NULL;xargc=0;afterlastspace=0;
     206        while (1)
     207        {
     208            if ((cmdline[end]==' ') || (cmdline[end]=='\0'))
     209            {
     210                if (cmdline[end]=='\0')
     211                    last_arg=1;
     212                else
     213                    cmdline[end]='\0';
     214                /* alloc xargc + NULL entry */
     215                        xargv=(char**)HeapReAlloc( GetProcessHeap(), 0, xargv,
     216                                             sizeof(char*)*(xargc+1));
     217                if (strlen(cmdline+afterlastspace))
     218                {
     219                    xargv[xargc] = CRTDLL__strdup(cmdline+afterlastspace);
     220                    xargc++;
    222221                    if (!last_arg) /* need to seek to the next arg ? */
    223             {
    224             end++;
    225             while (cmdline[end]==' ')
    226                 end++;
    227     }
    228             afterlastspace=end;
    229         }
    230         else
    231         {
    232             xargv[xargc] = NULL; /* the last entry is NULL */
    233             break;
    234         }
    235         }
    236         else
    237         end++;
    238     }
    239     CRTDLL_argc_dll = xargc;
    240     *argc       = xargc;
    241     CRTDLL_argv_dll = xargv;
    242     *argv       = xargv;
    243 
    244     TRACE("found %d arguments\n",
    245         CRTDLL_argc_dll);
    246     CRTDLL_environ_dll = *environ = GetEnvironmentStringsA();
    247     return environ;
     222                    {
     223                        end++;
     224                        while (cmdline[end]==' ')
     225                            end++;
     226        }
     227                    afterlastspace=end;
     228                }
     229                else
     230                {
     231                    xargv[xargc] = NULL; /* the last entry is NULL */
     232                    break;
     233                }
     234            }
     235            else
     236                end++;
     237        }
     238        CRTDLL_argc_dll = xargc;
     239        *argc           = xargc;
     240        CRTDLL_argv_dll = xargv;
     241        *argv           = xargv;
     242
     243        TRACE("found %d arguments\n",
     244                CRTDLL_argc_dll);
     245        CRTDLL_environ_dll = *environ = GetEnvironmentStringsA();
     246        return environ;
    248247}
    249248
     
    254253DWORD CDECL CRTDLL__initterm(_INITTERMFUN *start,_INITTERMFUN *end)
    255254{
    256     _INITTERMFUN    *current;
    257 
    258     TRACE("(%p,%p)\n",start,end);
    259     current=start;
    260     while (current<end) {
    261         if (*current) (*current)();
    262         current++;
    263     }
    264     return 0;
     255        _INITTERMFUN    *current;
     256
     257        TRACE("(%p,%p)\n",start,end);
     258        current=start;
     259        while (current<end) {
     260                if (*current) (*current)();
     261                current++;
     262        }
     263        return 0;
    265264}
    266265
     
    310309INT CDECL CRTDLL_rand()
    311310{
    312     return (rand() & CRTDLL_RAND_MAX);
     311    return (rand() & CRTDLL_RAND_MAX); 
    313312}
    314313
     
    320319{
    321320  // return (_rotl(value, shift));
    322 
     321 
    323322    shift &= 31;
    324323    return (x << shift) | (x >> (32-shift));
     
    332331{
    333332  // return (_lrotl(value, shift));
    334 
     333 
    335334    shift &= 31;
    336335    return (x << shift) | (x >> (32-shift));
     
    344343{
    345344  // return (_lrotr(value, shift));
    346 
     345 
    347346    shift &= 0x1f;
    348347    return (x >> shift) | (x << (32-shift));
     
    356355{
    357356  // return (_rotr(value, shift));
    358 
     357 
    359358    shift &= 0x1f;
    360359    return (x >> shift) | (x << (32-shift));
     
    368367{
    369368  // return (vswprintf(s, t, format, arg));
    370 
     369 
    371370    return wvsprintfW( buffer, spec, args );
    372371}
     
    389388{
    390389  return (setlocale(category, locale));
    391 
     390 
    392391  /*
    393392    LPSTR categorystr;
     
    438437{
    439438  // return (_fullpath(buf, path, size));
    440 
     439 
    441440  if (!buf)
    442441  {
     
    456455{
    457456  // _splitpath( path, drive, dir, fname, ext);
    458 
     457 
    459458  /* drive includes :
    460459     directory includes leading and trailing (forward and backward slashes)
     
    520519{
    521520  // _makepath(path, drive, dir, fname, ext);
    522 
     521 
    523522    char ch;
    524523    TRACE("CRTDLL__makepath got %s %s %s %s\n", drive, directory,
     
    568567{
    569568  // return (_errno());
    570 
     569 
    571570  return &CRTDLL_errno;
    572571}
     
    575574/*********************************************************************
    576575 *                  __doserrno       (CRTDLL.26)
    577  *
     576 * 
    578577 * Return the address of the DOS errno (holding the last OS error).
    579578 * @@@PH Note: veeeery strange ...
     
    584583{
    585584  // return (__doserrno());
    586 
     585 
    587586  return &CRTDLL_doserrno;
    588587}
     
    602601{
    603602  // return (_strerror((char*)s));
    604 
     603 
    605604  static char strerrbuff[256];
    606605  sprintf(strerrbuff,"%s: %s\n",err,CRTDLL_strerror(CRTDLL_errno));
     
    617616{
    618617  // perror( s );
    619 
     618 
    620619  char *err_str = CRTDLL_strerror(CRTDLL_errno);
    621620  CRTDLL_fprintf(CRTDLL_stderr,"%s: %s\n",err,err_str);
    622621  CRTDLL_free(err_str);
    623622}
    624 
     623 
    625624
    626625/*********************************************************************
     
    632631 * The caller does not own the string returned.
    633632 */
    634 extern char *strerror(int errnum);
     633extern char *strerror(int errnum); 
    635634
    636635LPSTR CDECL CRTDLL_strerror (INT err)
     
    646645{
    647646  //return (signal(sig, ptr));
    648 
     647 
    649648  FIXME("(%d %p):stub.\n", sig, ptr);
    650649  return (void*)-1;
     
    668667{
    669668  // return (getenv(name));
    670 
     669 
    671670     LPSTR environ = GetEnvironmentStringsA();
    672671     LPSTR pp,pos = NULL;
     
    675674     for (pp = environ; (*pp); pp = pp + strlen(pp) +1)
    676675       {
    677     pos =strchr(pp,'=');
    678     if (pos)
    679        length = pos -pp;
    680     else
    681        length = strlen(pp);
    682     if (!strncmp(pp,name,length)) break;
     676        pos =strchr(pp,'=');
     677        if (pos)
     678           length = pos -pp;
     679        else
     680           length = strlen(pp);
     681        if (!strncmp(pp,name,length)) break;
    683682       }
    684      if ((pp)&& (pos))
     683     if ((pp)&& (pos)) 
    685684       {
    686     pp = pos+1;
    687     TRACE("got %s\n",pp);
     685        pp = pos+1;
     686        TRACE("got %s\n",pp);
    688687       }
    689688     FreeEnvironmentStringsA( environ );
     
    696695 */
    697696INT CDECL CRTDLL__except_handler2 (
    698     PEXCEPTION_RECORD rec,
    699     PEXCEPTION_FRAME frame,
    700     PCONTEXT context,
    701     PEXCEPTION_FRAME  *dispatcher)
    702 {
    703     FIXME ("exception %lx flags=%lx at %p handler=%p %p %p stub\n",
    704     rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionAddress,
    705     frame->Handler, context, dispatcher);
    706     return ExceptionContinueSearch;
     697        PEXCEPTION_RECORD rec,
     698        PEXCEPTION_FRAME frame,
     699        PCONTEXT context,
     700        PEXCEPTION_FRAME  *dispatcher)
     701{
     702        FIXME ("exception %lx flags=%lx at %p handler=%p %p %p stub\n",
     703        rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionAddress,
     704        frame->Handler, context, dispatcher);
     705        return ExceptionContinueSearch;
    707706}
    708707
     
    725724{
    726725  // return (_toascii(c));
    727 
     726 
    728727  return c & 0x7f;
    729728}
     
    755754{
    756755  // return (_iscsym(c));
    757 
     756 
    758757  return (isalnum(c) || c == '_');
    759758}
     
    774773{
    775774  // return (_iscsymf(c));
    776 
     775 
    777776  return (isalpha(c) || c == '_');
    778777}
     
    847846    {
    848847      if (cf((LPVOID*)match, (LPVOID*)pStart) == 0)
    849     return pStart; /* found */
     848        return pStart; /* found */
    850849      pStart += elem_size;
    851850    } while (--size);
     
    915914{
    916915  // return (_toupper(n));
    917 
     916 
    918917  return toupper(c);
    919918}
     
    926925{
    927926  // return (_tolower(n));
    928 
     927 
    929928  return tolower(c);
    930929}
     
    947946{
    948947  // return (_cabs(c));
    949 
     948 
    950949  return sqrt(c.real * c.real + c.imaginary * c.imaginary);
    951950}
     
    10071006 *
    10081007 * Reset the state of the floating point processor.
    1009  *
     1008 * 
    10101009 * PARAMS
    10111010 *   None.
Note: See TracChangeset for help on using the changeset viewer.