*** 125org\INSTALL.PAS	Wed Nov 03 01:20:00 1999
--- 125\INSTALL.PAS	Wed Nov 17 00:00:00 1999
***************
*** 237,258 ****
  end;
  
  procedure TInstallForm.StartInstalling;
- {$IFDEF WIN32}
  type
    PRegisterFilesListRec = ^TRegisterFilesListRec;
    TRegisterFilesListRec = record
      Filename: String;
      TypeLib: Boolean;
    end;
- {$ENDIF}
  var
    UninstallRegistered: Boolean;
    UninstallExeFilename, UninstallDataFilename, UninstallMsgFilename,
      RegSvrExeFilename: String;
    UninstallExeCreated, UninstallDataCreated, UninstallMsgCreated: Boolean;
-   {$IFDEF WIN32}
    RegisterFilesList: TList;
-   {$ENDIF}
  
    {$IFDEF WIN32}
    function RegisterUninstallInfo: Boolean;
--- 237,254 ----
***************
*** 549,558 ****
      DecompressData: TDecompressExtraData;
      Adler32: Longint;
      DeleteFlags: Longint;
      {$IFDEF WIN32}
      CurFileDate, ExistingFileDate, CurFileDate2: TFileTime;
      LastError: DWORD;
-     RegisterRec: PRegisterFilesListRec;
      {$ELSE}
      CurFileDate, ExistingFileDate: Longint;
      {$ENDIF}
--- 545,554 ----
      DecompressData: TDecompressExtraData;
      Adler32: Longint;
      DeleteFlags: Longint;
+     RegisterRec: PRegisterFilesListRec;
      {$IFDEF WIN32}
      CurFileDate, ExistingFileDate, CurFileDate2: TFileTime;
      LastError: DWORD;
      {$ELSE}
      CurFileDate, ExistingFileDate: Longint;
      {$ENDIF}
***************
*** 894,903 ****
                 {$IFDEF WIN32} and not(foSharedFile in CurFile^.Options) {$ENDIF} then begin
                if DestFileAlreadyExisted then
                  DeleteFlags := DeleteFlags or utDeleteFile_ExistedBeforeInstall;
-               {$IFDEF WIN32}
                if foRegisterServer in CurFile^.Options then
                  DeleteFlags := DeleteFlags or utDeleteFile_Registered;
-               {$ENDIF}
                UndoChanges.Add (utDeleteFile, [DestFile, TempFile,
                  StrPas(CurFile^.InstallFontName), ShortFontFilename], DeleteFlags);
              end;
--- 890,897 ----
***************
*** 906,912 ****
              UninstallExeCreated := True;
  
          Skip:
-           {$IFDEF WIN32}
            { If foRegisterServer or foRegisterTypeLib is in Options, add the
              file to RegisterFilesList for registering later }
            if (foRegisterServer in CurFile^.Options) or
--- 900,905 ----
***************
*** 918,923 ****
--- 911,917 ----
              RegisterFilesList.Add (RegisterRec);
            end;
  
+           {$IFDEF WIN32}
            { If foSharedFile is in Options, increment the reference count in the
              registry for the file (supported by Win95/NT 4 only) }
            if (foSharedFile in CurFile^.Options) and UsingWindows4 then begin
***************
*** 1356,1363 ****
      end;
    end;
  
-   {$IFDEF WIN32}
    procedure RegisterFiles;
      procedure RegisterServer (const Filename: String);
      var
        NeedToRetry: Boolean;
--- 1350,1357 ----
      end;
    end;
  
    procedure RegisterFiles;
+   {$IFDEF WIN32}
      procedure RegisterServer (const Filename: String);
      var
        NeedToRetry: Boolean;
***************
*** 1514,1536 ****
          end;
        until not NeedToRetry;
      end;
    var
      I: Integer;
    begin
      if not NeedsRestart then
        for I := 0 to RegisterFilesList.Count-1 do begin
          with PRegisterFilesListRec(RegisterFilesList[I])^ do
            if not TypeLib then
              RegisterServer (PRegisterFilesListRec(RegisterFilesList[I])^.Filename)
            else
              RegisterTLib (PRegisterFilesListRec(RegisterFilesList[I])^.Filename);
        end
!     else
        { When a restart is needed, all "regserver" & "regtypelib" files will get
          registered on the next logon }
        RegisterServersOnRestart;
-   end;
    {$ENDIF}
  
    procedure ProcessInstallDeleteEntries;
    var
--- 1508,1613 ----
          end;
        until not NeedToRetry;
      end;
+   {$ELSE}
+   {16bit DLL/OCX WXgo^ VB4.0t stkit416.dll 𗘗p}
+   procedure RegisterServer (const Filename: String);
+   type
+     TDLLSelfRegister = function(DLLName: PChar):Integer;
+   const
+     FAIL_OLE    = 2;
+     FAIL_LOAD   = 3;
+     FAIL_ENTRY  = 4;
+     FAIL_REG    = 5;
+   var
+     pchFilename: PChar;
+     NeedToRetry: Boolean;
+     LibHandle: THandle;
+     LastError: DWORD;
+     RegisterServerProc: TDLLSelfRegister;
+     RegisterStep: (rsLoadLibrary, rsGetProcAddress, rsRegisterServer, rsSuccessful);
+     RegisterCode: Integer;
+     RegisterMsg: String;
+     SaveCursor: HCURSOR;
+     SaveErrorMode: UINT;
+   begin
+     repeat
+       NeedToRetry := False;
+       RegisterStep := rsLoadLibrary;
+       RegisterCode := 0;
+       LastError := 0;
+       try
+         {SaveCursor := SetCursor(LoadCursor(0, IDC_WAIT));}  { show the 'hourglass' cursor }
+         {SaveErrorMode := SetErrorMode(SEM_NOOPENFILEERRORBOX);}
+         try
+           LibHandle := LoadLibrary(PChar('stkit416.dll'));
+           if LibHandle = 0 then
+             {LastError := GetLastError}
+           else begin
+             try
+               RegisterStep := rsGetProcAddress;
+               @RegisterServerProc := GetProcAddress(LibHandle, 'DLLSelfRegister');
+               if Assigned(@RegisterServerProc) then begin
+                 RegisterStep := rsRegisterServer;
+                 pchFilename := StrAlloc(Length(Filename) + 1);
+                 StrPCopy(pchFilename, Filename);
+                 RegisterCode := RegisterServerProc(pchFilename);
+                 StrDispose(pchFilename);
+                 if RegisterCode = 0 then
+                   RegisterStep := rsSuccessful;
+               end;
+             finally
+               FreeLibrary (LibHandle);
+             end;
+           end;
+         finally
+ {
+           SetErrorMode (SaveErrorMode);
+           SetCursor (SaveCursor);
+ }
+         end;
+       except
+         { ignore any exceptions... }
+       end;
+       if RegisterStep <> rsSuccessful then begin
+         case RegisterStep of
+           rsLoadLibrary: RegisterMsg := FmtSetupMessage(msgErrorFunctionFailed,
+             ['LoadLibrary', IntToStr(LastError)]);
+           rsGetProcAddress: RegisterMsg := StrPas(SetupMessages[msgErrorRegisterServerMissingExport]);
+           rsRegisterServer: RegisterMsg := FmtSetupMessage(msgErrorFunctionFailed,
+             ['DllRegisterServer', IntToHexStr8(RegisterCode)]);
+         end;
+         if not AbortRetryIgnoreMsgBox(Filename + SNewLine2 +
+            FmtSetupMessage1(msgErrorRegisterServer, AddPeriod(RegisterMsg)),
+            StrPas(SetupMessages[msgFileAbortRetryIgnore2])) then
+           NeedToRetry := True;
+       end;
+     until not NeedToRetry;
+   end;
+   {$ENDIF}
    var
      I: Integer;
    begin
      if not NeedsRestart then
        for I := 0 to RegisterFilesList.Count-1 do begin
          with PRegisterFilesListRec(RegisterFilesList[I])^ do
+           {$IFDEF WIN32}
            if not TypeLib then
              RegisterServer (PRegisterFilesListRec(RegisterFilesList[I])^.Filename)
            else
              RegisterTLib (PRegisterFilesListRec(RegisterFilesList[I])^.Filename);
+           {$ELSE}
+           if not TypeLib then
+             RegisterServer (PRegisterFilesListRec(RegisterFilesList[I])^.Filename);
+           {$ENDIF}
        end
!     else begin
!       {$IFDEF WIN32}
        { When a restart is needed, all "regserver" & "regtypelib" files will get
          registered on the next logon }
        RegisterServersOnRestart;
        {$ENDIF}
+     end;
+   end;
  
    procedure ProcessInstallDeleteEntries;
    var
***************
*** 1658,1667 ****
    UninstallMsgCreated := False;
    UndoChangesCleared := False;
    try
-     {$IFDEF WIN32}
      RegisterFilesList := TList.Create;
      try
-     {$ENDIF}
        { Process InstallDelete entries, if any }
        ProcessInstallDeleteEntries;
        ProcessEvents;
--- 1735,1742 ----
***************
*** 1715,1727 ****
        end;
  
        { Register files, if any }
-       {$IFDEF WIN32}
        if RegisterFilesList.Count <> 0 then begin
          SetStatusLabelText (msgStatusRegisterFiles);
          RegisterFiles;
          ProcessEvents;
        end;
-       {$ENDIF}
  
        { Save uninstall information. After uninstall info is saved, you cannot
          make any more modifications to the user's system. Any additional
--- 1790,1800 ----
***************
*** 1744,1756 ****
        DisableCloseQuery := True;
        Close;
        PostMessage (MainForm.Handle, WM_SETUPNEXTSTEP, 0, 0);
-     {$IFDEF WIN32}
      finally
        for I := RegisterFilesList.Count-1 downto 0 do
          Dispose (PRegisterFilesListRec(RegisterFilesList[I]));
        RegisterFilesList.Free;
      end;
-     {$ENDIF}
    except
      on E: Exception do begin
        { Show error message, if any }
--- 1817,1827 ----
