Annotation of mstools/win32s/setup/iniupd/iniupd.c, revision 1.1

1.1     ! root        1: #define MAXBUF 256
        !             2: #define MAXPATH 64
        !             3: 
        !             4: #include <assert.h>
        !             5: #include <dos.h>
        !             6: #include <io.h>
        !             7: #include <stdio.h>
        !             8: #include <string.h>
        !             9: #include <stdlib.h>
        !            10: #include <windows.h>
        !            11: 
        !            12: #include "iniupd.h"
        !            13: 
        !            14: #define FALSE 0
        !            15: #define TRUE 1
        !            16: 
        !            17: FILE *fpSysIni;
        !            18: FILE *fpSysPre;
        !            19: char *psz1;
        !            20: char *psz2;
        !            21: char *psz3;
        !            22: char rgchBuf[MAXBUF];
        !            23: char szTmpBuf[MAXBUF];
        !            24: char szSysIni[MAXBUF];
        !            25: char szSysOld[MAXBUF];
        !            26: char szTempFile[MAXBUF];
        !            27: char *szWinPath;
        !            28: char *szVxdPath;
        !            29: 
        !            30: BOOL my_strnicmp( char *szStr1, char *szStr2, int count);
        !            31: VOID stcpyf2n(char FAR *in, char *out);
        !            32: 
        !            33: /****************************************************************************
        !            34:    FUNCTION: LibMain(HANDLE, WORD, WORD, LPSTR)
        !            35: 
        !            36:    PURPOSE:  Is called by LibEntry.  LibEntry is called by Windows when
        !            37:             the DLL is loaded.  The LibEntry routine is provided in
        !            38:             the LIBENTRY.OBJ in the SDK Link Libraries disk.  (The
        !            39:             source LIBENTRY.ASM is also provided.)  
        !            40: 
        !            41:             LibEntry initializes the DLL's heap, if a HEAPSIZE value is
        !            42:             specified in the DLL's DEF file.  Then LibEntry calls
        !            43:             LibMain.  The LibMain function below satisfies that call.
        !            44:             
        !            45:             The LibMain function should perform additional initialization
        !            46:             tasks required by the DLL.  In this example, no initialization
        !            47:             tasks are required.  LibMain should return a value of 1 if
        !            48:             the initialization is successful.
        !            49:           
        !            50: *******************************************************************************/
        !            51: int FAR PASCAL LibMain(hModule, wDataSeg, cbHeapSize, lpszCmdLine)
        !            52: HANDLE  hModule;
        !            53: WORD    wDataSeg;
        !            54: WORD    cbHeapSize;
        !            55: LPSTR   lpszCmdLine;
        !            56: {
        !            57:     return 1;
        !            58: }
        !            59: 
        !            60: /****************************************************************************
        !            61:    
        !            62:    FUNCTION: BOOL my_strnicmp(char *szStr1, char *szStr2, int count )         
        !            63: 
        !            64:    PURPOSE:  my_strnicmp is the same as the strnicmp function.  Strnicmp
        !            65:             was not used because the linker could not find it in the library.
        !            66: 
        !            67:             TRUE is returned if the first "count" characters of szStr1 are 
        !            68:             the same as szStr2.  FALSE is returned otherwise.
        !            69:           
        !            70: *******************************************************************************/
        !            71: 
        !            72: BOOL my_strnicmp(char *szStr1, char *szStr2, int count )
        !            73: {
        !            74:        int i;
        !            75: 
        !            76:        for (i = 0; i < count; i++)    
        !            77:        {
        !            78:                if (toupper(szStr1[i]) != toupper(szStr2[i]))
        !            79:                        return FALSE;
        !            80:        }
        !            81:        return TRUE;
        !            82: }
        !            83: 
        !            84: /****************************************************************************
        !            85:    
        !            86:    FUNCTION: VOID strcpyf2n(char FAR *in, char *out )         
        !            87: 
        !            88:    PURPOSE:  strcpyf2n copyies the contents of the far string in to the 
        !            89:             near string out. Memory must be allocated for out for the
        !            90:             full string length including the terminatined '\0'
        !            91:           
        !            92: *******************************************************************************/
        !            93: 
        !            94: VOID strcpyf2n (char FAR *in, char *out)
        !            95: {
        !            96:        while (*out++ = *in++);
        !            97: }
        !            98: 
        !            99: /****************************************************************************
        !           100:     FUNCTION:  WEP(int)
        !           101: 
        !           102:     PURPOSE:  Performs cleanup tasks when the DLL is unloaded.  WEP() is
        !           103:              called automatically by Windows when the DLL is unloaded (no
        !           104:              remaining tasks still have the DLL loaded).  It is strongly
        !           105:              recommended that a DLL have a WEP() function, even if it does
        !           106:              nothing but returns success (1), as in this example.
        !           107: 
        !           108: *******************************************************************************/
        !           109: int FAR PASCAL WEP (bSystemExit)
        !           110: int bSystemExit;
        !           111: {
        !           112:     return(1);
        !           113: }
        !           114: 
        !           115: 
        !           116: 
        !           117: /****************************************************************************
        !           118: ****************************************************************************/
        !           119: 
        !           120: BOOL FAR PASCAL MakeSystemIni(LPSTR lpszWinPath, LPSTR lpszVxdPath)
        !           121: {
        !           122: unsigned char fDevAdded = FALSE;
        !           123: 
        !           124:     //Using Windows as DPMI provider ...
        !           125: 
        !           126:     szWinPath = (char *) malloc (lstrlen(lpszWinPath)+1);
        !           127:     szVxdPath = (char *) malloc (lstrlen(lpszVxdPath)+1);
        !           128: 
        !           129:     strcpyf2n(lpszWinPath, szWinPath);
        !           130:     strcpyf2n(lpszVxdPath, szVxdPath);
        !           131: 
        !           132:     szSysIni[0] = '\0';
        !           133:     strcat(strcpy(szSysIni, szWinPath), "SYSTEM.INI");
        !           134: 
        !           135:     szTempFile[0] = '\0';
        !           136:     strcat(strcpy(szTempFile, szWinPath), "$win32s$.tmp" );
        !           137: 
        !           138:     if ((fpSysIni = fopen(szSysIni, "r")) == NULL)
        !           139:     {
        !           140:        wsprintf(szTmpBuf, "%s cannot be opened for read from %s.  Setup is unable to make modifications.", szSysIni, szWinPath);
        !           141:        MessageBox((HWND)NULL, szTmpBuf, "Setup Message", MB_OK | MB_ICONEXCLAMATION);
        !           142:        return(FALSE);
        !           143:     }
        !           144: 
        !           145:     strcat(strcpy(szSysOld, szWinPath), "SYSTEM.OLD");
        !           146:     if ((fpSysPre = fopen(szSysOld, "wt")) == NULL)
        !           147:     {
        !           148:        sprintf(szTmpBuf, "%s cannot be opened for write.  Setup is unable to make modifications.", szSysOld);
        !           149:        MessageBox((HWND)NULL, szTmpBuf, "Setup Message", MB_OK | MB_ICONEXCLAMATION);
        !           150:        fclose(fpSysIni);
        !           151:        return(FALSE);
        !           152:     }
        !           153:     
        !           154:     while (fgets(rgchBuf, MAXBUF, fpSysIni))
        !           155:     {
        !           156:        fputs(rgchBuf, fpSysPre);
        !           157:        if (my_strnicmp(rgchBuf, "[386Enh]", 8)==TRUE)
        !           158:        {
        !           159:            // only add to the [386Enh] section.
        !           160:            if (fDevAdded == FALSE)
        !           161:            {
        !           162:                fputs("device=", fpSysPre);
        !           163:                fputs(szVxdPath, fpSysPre);
        !           164:                fputc('\n', fpSysPre);
        !           165:                fDevAdded = TRUE;
        !           166:            }
        !           167:            do 
        !           168:            {
        !           169:                if (!(psz1 = fgets(rgchBuf, MAXBUF, fpSysIni)))
        !           170:                    break;
        !           171:                if (my_strnicmp(rgchBuf, "device", 6) == FALSE)
        !           172:                    fputs(rgchBuf, fpSysPre);
        !           173:                else 
        !           174:                {
        !           175:                    if ((psz2 = strchr(psz1, '=')) != NULL)
        !           176:                    {
        !           177:                        if ( ((psz3 = strchr(psz2, szVxdPath[0])) != NULL) &&
        !           178:                             (my_strnicmp(psz3, szVxdPath, strlen(szVxdPath)) == TRUE) )
        !           179:                            continue;
        !           180:                        else
        !           181:                            fputs(rgchBuf, fpSysPre);
        !           182:                    }
        !           183:                    else
        !           184:                        fputs(rgchBuf, fpSysPre);
        !           185:                }
        !           186:            } while (*psz1 != '[');
        !           187:        }
        !           188:     }
        !           189: 
        !           190:     fclose(fpSysIni);
        !           191:     fclose(fpSysPre);
        !           192: 
        !           193: // Rename o' rama
        !           194:     rename( szSysIni, szTempFile );
        !           195:     rename( szSysOld, szSysIni );
        !           196:     rename( szTempFile, szSysOld );
        !           197: 
        !           198: /*    PostMessage(NULL, STF_SHL_INTERP, 0, 0L); */
        !           199:     return(TRUE);
        !           200: }
        !           201: /*
        !           202: */
        !           203: 
        !           204: BOOL FAR PASCAL RestartWindows( LPSTR lpszOleCliPath )
        !           205: {
        !           206:     // Guarantee that OleCli.Dll is locked.  This will result
        !           207:     // in setup doing appriate reboot via ExitExecRestart()
        !           208:     LoadLibrary ( lpszOleCliPath );
        !           209:     return(TRUE);
        !           210: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.