home *** CD-ROM | disk | FTP | other *** search
/ Mega Top 1 / os2_top1.zip / os2_top1 / APPS / PROG / PASCAL / SPEED2 / SRC / INSTALL / INSTALL.PAS next >
Encoding:
Pascal/Delphi Source File  |  1994-10-06  |  18.9 KB  |  985 lines

  1. PROGRAM test;
  2. {$M 32768}
  3.  
  4. USES PmDialog,DOS,PmObject,CRT,PmTypes;
  5.  
  6.  
  7. RESOURCE INSTALL;
  8.  
  9. TYPE
  10.      TDirectories=RECORD
  11.                         BinDir,LibDir,OutDir,PrjDir,LibSrcDir,
  12.                         LastDir:String;
  13.      END;
  14.  
  15.      TCompOpt=RECORD
  16.                     CodeGen:LONGWORD;
  17.                     Syntax:LONGWORD;
  18.                     Runtime:LONGWORD;
  19.                     Action:LONGWORD;
  20.                     Conditional:String;
  21.                     Parameter:STRING;
  22.       END;
  23.  
  24.       TLinkOpt=RECORD
  25.                      Data:LONGWORD;
  26.                      Code:LONGWORD;
  27.                      EdOpt:LONGWORD;
  28.                      PrefSize:LONGWORD;
  29.                      PrefAuto:LONGWORD;
  30.                      Language:BOOLEAN;
  31.                      Debug:LONGWORD;
  32.                END;
  33.  
  34.       TMemorySizes=RECORD
  35.                         Stack:LONGWORD;
  36.                         SystemHeap:LONGWORD;
  37.                         ExtraHeap:LONGWORD;
  38.                    END;
  39.  
  40.      TPrj=RECORD
  41.                id:BYTE;
  42.                PrjName:STRING[248];
  43.                PrjSource:STRING[248];
  44.                PrjMain:STRING[248];
  45.                PrjRemark:STRING[248];
  46.                Directories:TDirectories;
  47.                PrimFile:STRING[248];
  48.                CompOpt:TCompOpt;
  49.                LinkOpt:TLinkOpt;
  50.                MemorySizes:TMemorySizes;
  51.      END;
  52.  
  53.      PSamples=^TSamples;
  54.      TSamples=RECORD
  55.                     Name:String;
  56.                     Next:PSamples;
  57.               END;
  58.  
  59. VAR Samples:PSamples;
  60.  
  61.  
  62. VAR
  63.    InstallDir,SourceDir:STRING;
  64.    InstallOpt:WORD;
  65.    InstallDlg:HWND;
  66.    InstallTID:LONGWORD;
  67.    Akt:String;
  68.    received:BOOLEAN;
  69.    idrive:CHAR;
  70.    InstallLanguage:BOOLEAN;
  71.  
  72. IMPORTS
  73.       FUNCTION WinCreateObject(ulFlags:LONGWORD;Location,SetupString,Title,
  74.                                ClassName:PSZ):LONGWORD:       PMWP index 281;
  75.       FUNCTION WinProcessDlg(hwndDlg:HWND):LONGWORD:          PMWIN index 796;
  76.       FUNCTION WinPostMsg(mp2,mp1:POINTER;
  77.                           msg:LONGWORD;
  78.                           _hwnd:HWND):LONGWORD:               PMWIN index 919;
  79.       FUNCTION DosCreateThread(Stack,Flags:LONGWORD;Para:POINTER;
  80.                                 Adr:POINTER;VAR tid:LONGWORD):
  81.                                  LONGWORD:                    DOSCALLS index 311;
  82.       PROCEDURE DosKillThread(Tid:LONGWORD):                  DOSCALLS index 111;
  83.       FUNCTION WinDestroyWindow(_hwnd:HWND):
  84.                                 LONGWORD:                     PMWIN index 728;
  85.       FUNCTION DosCopy(option:LONGWORD;
  86.                        Dest,Source:PSZ):LONGWORD:             DOSCALLS index 258;
  87.       PROCEDURE WinSetDlgItemtext(t:PString;item:LONGWORD;Dlg:HWND):
  88.                                                               PMWIN    index 859;
  89.       FUNCTION WinGetPs(Win:HWND):HPS:                        PMWIN index 757;
  90.       FUNCTION WinReleasePs(ps:HPS):LONGWORD:                 PMWIN index 848;
  91.       FUNCTION WinDrawBorder(flCmd,clrBack,ClrFore,cy,cx:LONGWORD;
  92.                               VAR rec:RECTL;hp:HPS):LONGWORD: PMWIN index 731;
  93.       FUNCTION WinDefDlgProc(Para2,Para1:POINTER;msg:LONGWORD;hwnddlg:HWND):
  94.                              LONGWORD:    PMWIn index 910;
  95.       FUNCTION WinMessageBox(flStyle:LONGWORD;
  96.                                idWindow:LONGWORD;
  97.                                pszCaption:PSZ;
  98.                                pszText:PSZ;
  99.                                hwndOwner:HWND;
  100.                                hwndParent:HWND):LONGWORD:        PMWIN index 789;
  101.       FUNCTION WinSendMsg(MPARAM2,MPARAM1:POINTER;
  102.                             msg:LONGWORD;
  103.                             _hwnd:HWND):POINTER:                 PMWIN index 920;
  104. END;
  105.  
  106. TYPE TInstallDialog=OBJECT(TDialog)
  107.                 CONSTRUCTOR Init(Parent,Owner:HWND;hmod:HModule;idDlg:LONGWORD;
  108.                                  pCreateParams:Pointer);
  109.                 DESTRUCTOR Done;
  110.                 FUNCTION DialogHandleEvent(Dlg:HWND;msg:LONGWORD;
  111.                                            Para1,Para2:LONGWORD;VAR Handled:BOOLEAN):
  112.                                            LONGWORD:VIRTUAL;
  113.      END;
  114.  
  115. TYPE TWaitDialog=OBJECT(TDialog)
  116.                 CONSTRUCTOR Init(Parent,Owner:HWND;hmod:HModule;idDlg:LONGWORD;
  117.                                  pCreateParams:Pointer);
  118.                 DESTRUCTOR Done;
  119.                 FUNCTION DialogHandleEvent(Dlg:HWND;msg:LONGWORD;
  120.                                            Para1,Para2:LONGWORD;VAR Handled:BOOLEAN):
  121.                                            LONGWORD:VIRTUAL;
  122.      END;
  123.  
  124.  
  125.  
  126.  
  127. CONSTRUCTOR TInstallDialog.Init(Parent,Owner:HWND;hmod:HModule;idDlg:LONGWORD;
  128.                                 pCreateParams:Pointer);
  129. BEGIN
  130.      Inherited.Init(Parent,Owner,hmod,idDlg,pCreateParams);
  131. END;
  132.  
  133. DESTRUCTOR TInstallDialog.Done;
  134. BEGIN
  135. END;
  136.  
  137. FUNCTION TInstallDialog.DialogHandleEvent(Dlg:HWND;msg:LONGWORD;
  138.                      Para1,Para2:LONGWORD;VAR Handled:BOOLEAN):LONGWORD;
  139. VAR
  140.    r:LONGWORD;
  141.    H:BOOLEAN;
  142.    command:WORD;
  143.    t:BYTE;
  144. BEGIN
  145.      r:=Inherited.DialogHandleEvent(Dlg,msg,para1,para2,Handled);
  146.      H:=TRUE;
  147.      CASE msg OF
  148.          WM_INITDLG:
  149.          BEGIN
  150.               SettextLimit(Dlg,1018,128);  {Install dir}
  151.               SettextLimit(Dlg,1019,128);  {Source dir}
  152.  
  153.               SetCheckBoxState(Dlg,1013,1);
  154.               SetCheckBoxState(Dlg,1014,1);
  155.               SetCheckBoxState(Dlg,1015,1);
  156.               SetCheckBoxState(Dlg,1016,1);
  157.               SetCheckBoxState(Dlg,1030,1);
  158.  
  159.               IF InstallLanguage=TRUE THEN {German}
  160.                 SetRadioButtonState(Dlg,1040,1)
  161.               ELSE SetRadioButtonState(Dlg,1041,1);
  162.          END;
  163.          WM_COMMAND:
  164.          BEGIN
  165.               command:=Word(Para1);
  166.               CASE command OF
  167.                  1019: {Install}
  168.                  BEGIN
  169.                       DialogGetText(Dlg,1018,InstallDir,250);
  170.                       IF InstallDir[length(InstallDir)]='\' THEN
  171.                        dec(InstallDir[0]);
  172.                       FOR t:=1 to length(installdir) do
  173.                        InstallDir[t]:=upcase(installdir[t]);
  174.  
  175.                       DialogGetText(Dlg,1019,SourceDir,250);
  176.                       IF SourceDir[length(SourceDir)]='\' THEN
  177.                        dec(SourceDir[0]);
  178.                       FOR t:=1 to length(sourcedir) do
  179.                        SourceDir[t]:=upcase(sourcedir[t]);
  180.                       idrive:=SourceDir[1];
  181.  
  182.                       InstallOpt:=0;
  183.                       IF GetCheckBoxState(Dlg,1013)<>0 THEN
  184.                           InstallOpt:=InstallOpt OR 1;
  185.                       IF GetCheckBoxState(Dlg,1014)<>0 THEN
  186.                           InstallOpt:=InstallOpt OR 2;
  187.                       IF GetCheckBoxState(Dlg,1015)<>0 THEN
  188.                           InstallOpt:=InstallOpt OR 4;
  189.                       IF GetCheckBoxState(Dlg,1016)<>0 THEN
  190.                           InstallOpt:=InstallOpt OR 8;
  191.                       IF GetCheckBoxState(Dlg,1030)<>0 THEN
  192.                           InstallOpt:=InstallOpt OR 16;
  193.                       IF GetRadioButtonState(Dlg,1040)<>0 THEN
  194.                           InstallLanguage:=TRUE {German}
  195.                       ELSE InstallLanguage:=FALSE; {English}
  196.                  END;
  197.               END; {case}
  198.               H:=FALSE; {Handled by PM}
  199.          END;
  200.          ELSE H:=FALSE;
  201.      END; {case}
  202.  
  203.      Handled:=H;
  204.      DialogHandleEvent:=r;
  205.  
  206. END;
  207.  
  208. CONSTRUCTOR TWaitDialog.Init(Parent,Owner:HWND;hmod:HModule;idDlg:LONGWORD;
  209.                                 pCreateParams:Pointer);
  210. BEGIN
  211.      Inherited.Init(Parent,Owner,hmod,idDlg,pCreateParams);
  212. END;
  213.  
  214. DESTRUCTOR TWaitDialog.Done;
  215. BEGIN
  216. END;
  217.  
  218. CONST
  219.      WM_ChangeAkt=$1001;
  220.      WM_NextDisk =$1002;
  221.  
  222. FUNCTION TWaitDialog.DialogHandleEvent(Dlg:HWND;msg:LONGWORD;
  223.                      Para1,Para2:LONGWORD;VAR Handled:BOOLEAN):LONGWORD;
  224. VAR
  225.    r:LONGWORD;
  226.    H:BOOLEAN;
  227.    command:WORD;
  228.    hp:HPS;
  229.    rec:RECTL;
  230.    f:file;
  231. LABEL l;
  232. BEGIN
  233.      r:=0;
  234.      H:=TRUE;
  235.      CASE msg OF
  236.        WM_PAINT:
  237.        BEGIN
  238.             r:=WinDefDlgProc(POINTER(para2),POINTER(para1),msg,Dlg);
  239.             hp:=WinGetPs(Dlg);
  240.             Rec.xLeft:= 10;
  241.             Rec.yBottom:= 50;
  242.             Rec.xRight:= 265;
  243.             Rec.yTop:= 120;
  244.             WinDrawBorder($800,CLR_WHITE,CLR_DARKGRAY,1,1,rec,hp);
  245.             WinReleasePs(hp); {Canvas Handle free}
  246.        END;
  247.        WM_ChangeAkt:
  248.        BEGIN
  249.             WinSetDlgItemtext(akt,1018,Dlg);
  250.             received:=TRUE;
  251.        END;
  252.        WM_NextDisk:
  253.        BEGIN
  254.             command:=WORD(Para1);
  255. l:
  256.             Messagebox('Please insert next disk ('+tostr(command)+
  257.                        ') into drive '+idrive+' !');
  258.             assign(f,sourcedir+'\disc'+tostr(command)+'.dsk');
  259.             reset(f,1);
  260.             IF ioresult<>0 THEN goto l;
  261.             close(f);
  262.             received:=TRUE;
  263.        END;
  264.        ELSE H:=FALSE;
  265.      END; {case}
  266.  
  267.      Handled:=H;
  268.      DialogHandleEvent:=r;
  269. END;
  270.  
  271. VAR
  272.    Loc,Setup,Title,Class:String;
  273.    ob:LONGWORD;
  274.    InstallDialog:TInstallDialog;
  275.    result:LONGWORD;
  276.  
  277. PROCEDURE SendMsg(msg,para1,para2:LONGWORD);
  278. BEGIN
  279.      received:=FALSE;
  280.      WinPostMsg(POINTER(Para2),POINTER(Para1),msg,InstallDlg);
  281.      REPEAT
  282.      UNTIL received=TRUE;
  283. END;
  284.  
  285. PROCEDURE NewSampleEntry(s:STRING);
  286. VAR Dummy:PSamples;
  287. BEGIN
  288.      dec(s[0],4);
  289.      IF Samples=NIL THEN
  290.      BEGIN
  291.           New(Samples);
  292.           Dummy:=Samples;
  293.      END
  294.      ELSE
  295.      BEGIN
  296.           Dummy:=Samples;
  297.           WHILE Dummy^.next<>NIL DO dummy:=dummy^.Next;
  298.           New(Dummy^.Next);
  299.           Dummy:=Dummy^.Next;
  300.      END;
  301.      Dummy^.Name:=s;
  302.      Dummy^.Next:=NIL;
  303. END;
  304.  
  305.  
  306. PROCEDURE UpdateProjects;
  307. VAR f:file;
  308.     s,s1,s2:string;
  309.     Search:TSearchRec;
  310.     PrjData:TPrj;
  311.     t:word;
  312. Label l,l1,l2,l3;
  313. BEGIN
  314.      FindFirst(InstallDir+'\PRJ\*.PRJ',Archive,Search);
  315.      WHILE DosError=0 DO
  316.      BEGIN
  317.           s:=Search.Name;
  318. l:
  319.           IF s<>'DEFAULT.PRJ' THEN NewSampleEntry(s);
  320.           assign(f,InstallDir+'\PRJ\'+s);
  321.           reset(f,1);
  322.           IF ioresult=0 THEN
  323.           BEGIN
  324.                BlockRead(f,PrjData,sizeof(TPrj));
  325.                IF ioresult<>0 THEN goto l1;
  326.                close(f);
  327.  
  328.                PrjData.LinkOpt.Language:=InstallLanguage;
  329.                PrjData.Directories.BinDir:=InstallDir;
  330.                PrjData.Directories.OutDir:=InstallDir+'\OUTPUT';
  331.                PrjData.Directories.LibDir:=InstallDir+'\LIB';
  332.                PrjData.Directories.PrjDir:=InstallDir+'\PRJ';
  333.                PrjData.Directories.LibSrcDir:=InstallDir+'\SRC\LIB';
  334.                PrjData.Directories.LastDir:=InstallDir+'\DEMOS';
  335.  
  336.                s2:=PrjData.PrjSource;
  337.                IF s2<>'' THEN
  338.                BEGIN
  339.                     s1:='';
  340.                     FOR t:=length(s2) downto 1 DO
  341.                     BEGIN
  342.                          IF s2[t]='\' THEN goto l3;
  343.                          s1:=s2[t]+s1;
  344.                     END;
  345.  
  346.                     goto l2;
  347. l3:
  348.                     IF s<>'DEFAULT.PRJ' THEN s2:=InstallDir+'\SAMPLES\'+s1
  349.                     ELSE s2:=InstallDir+'\'+s1;
  350.                     PrjData.PrjSource:=s2;
  351.                     IF PrjData.PrjMain<>'' THEN
  352.                       PrjData.PrimFile:=s2+'\'+PrjData.PrjMain;
  353. l2:
  354.                END;
  355.  
  356.                assign(f,InstallDir+'\PRJ\'+s);
  357.                rewrite(f,1);
  358.                BlockWrite(f,PrjData,sizeof(TPrj));
  359. l1:
  360.                close(F);
  361.           END;
  362.           FindNext(Search);
  363.      END;
  364. END;
  365.  
  366. PROCEDURE ProcessInstall;
  367. VAR p:POINTER;
  368.     l:LONGWORD;
  369.     dest,source:STRING;
  370. label ll,err,succ;
  371. BEGIN
  372.      {****************Disc #1******************************}
  373.      IF InstallOpt AND 1=1 THEN  {Binaries}
  374.      BEGIN
  375.           Akt:='Binaries';
  376.           SendMsg(WM_ChangeAkt,0,0);
  377.           Dest:=InstallDir;
  378.           Source:=SourceDir+'\BIN';
  379.           l:=DosCopy(1,Dest,Source);
  380.           IF l<>0 THEN goto err;
  381.  
  382.           Akt:='Projects';
  383.           SendMsg(WM_ChangeAkt,0,0);
  384.           Dest:=InstallDir+'\PRJ';
  385.           Source:=SourceDir+'\PRJ';
  386.           l:=DosCopy(1,Dest,Source);
  387.           IF l<>0 THEN goto err;
  388.      END;
  389.  
  390.      IF InstallOpt AND 2=2 THEN  {Sources}
  391.      BEGIN
  392.           Akt:='Sources';
  393.           SendMsg(WM_ChangeAkt,0,0);
  394.           Dest:=InstallDir+'\SRC';
  395.           Source:=SourceDir+'\SRC';
  396.           l:=DosCopy(1,Dest,Source);
  397.           IF l<>0 THEN goto err;
  398.      END;
  399.  
  400.      {****************Disc #2******************************}
  401.      SendMsg(WM_NextDisk,2,0);
  402.  
  403.      IF InstallOpt AND 1=1 THEN  {Binaries}
  404.      BEGIN
  405.           Akt:='Binaries';
  406.           SendMsg(WM_ChangeAkt,0,0);
  407.           Dest:=InstallDir;
  408.           Source:=SourceDir+'\BIN';
  409.           l:=DosCopy(1,Dest,Source);
  410.           IF l<>0 THEN goto err;
  411.      END;
  412.  
  413.      IF InstallOpt AND 16=16 THEN {Documentation}
  414.      BEGIN
  415.           Akt:='Documentation';
  416.           SendMsg(WM_ChangeAkt,0,0);
  417.           Dest:=InstallDir+'\DOC';
  418.           Source:=SourceDir+'\DOC';
  419.           l:=DosCopy(1,Dest,Source);
  420.           IF l<>0 THEN goto err;
  421.      END;
  422.  
  423.      {****************Disc #3******************************}
  424.      SendMsg(WM_NextDisk,3,0);
  425.  
  426.      IF InstallOpt AND 4=4 THEN {Libraries files}
  427.      BEGIN
  428.           Akt:='Libraries';
  429.           SendMsg(WM_ChangeAkt,0,0);
  430.           Dest:=InstallDir+'\LIB';
  431.           Source:=SourceDir+'\LIB';
  432.           l:=DosCopy(1,Dest,Source);
  433.           IF l<>0 THEN goto err;
  434.      END;
  435.  
  436.      IF InstallOpt AND 8=8 THEN {sample files}
  437.      BEGIN
  438.           Akt:='Samples';
  439.           SendMsg(WM_ChangeAkt,0,0);
  440.           Dest:=InstallDir+'\SAMPLES';
  441.           Source:=SourceDir+'\SAMPLES';
  442.           l:=DosCopy(1,Dest,Source);
  443.           IF l<>0 THEN goto err;
  444.      END;
  445.  
  446.      {****************Disc #4******************************}
  447.      SendMsg(WM_NextDisk,4,0);
  448.  
  449.      IF InstallOpt AND 1=1 THEN  {Binaries}
  450.      BEGIN
  451.           Akt:='Binaries';
  452.           SendMsg(WM_ChangeAkt,0,0);
  453.           Dest:=InstallDir;
  454.           Source:=SourceDir+'\BIN';
  455.           l:=DosCopy(1,Dest,Source);
  456.           IF l<>0 THEN goto err;
  457.      END;
  458.  
  459.      MkDir(InstallDir+'\OUTPUT');
  460.  
  461.      UpdateProjects;
  462.  
  463.      l:=1000;
  464.      goto succ;
  465. err:
  466.      l:=1001;
  467. succ:
  468.      p:=POINTER(l);
  469.      WinPostMsg(NIL,p,WM_COMMAND,InstallDlg); {Delete dialog window}
  470. ll:
  471.      goto ll;
  472. END;
  473.  
  474. FUNCTION Install:BOOLEAN;
  475. VAR
  476.    WaitDialog:TWaitDialog;
  477.    r:LONGWORD;
  478. BEGIN
  479.      IF InstallLanguage=TRUE THEN WaitDialog.Init(HWND_DESKTOP,0,0,1004,NIL)
  480.      ELSE WaitDialog.Init(HWND_DESKTOP,0,0,1001,NIL);
  481.      WaitDialog.GetDlg(InstallDlg);
  482.  
  483.      DosCreateThread(32768,2,NIL,@ProcessInstall,InstallTid);
  484.      r:=WinProcessDlg(InstallDlg);  {Process the dialog}
  485.  
  486.      DosKillThread(InstallTid);  {Kill the parent thread}
  487.  
  488.      WinDestroyWindow(InstallDlg);
  489.      {The program will return to here if main program is terminated}
  490.      WaitDialog.Done;
  491.  
  492.      IF r=1000 THEN Install:=TRUE
  493.      ELSE
  494.      BEGIN
  495.           beep(1200,200);
  496.           Install:=FALSE;
  497.      END;
  498. END;
  499.  
  500. PROCEDURE CreateInstallDir(s:STRING);
  501. VAR t:BYTE;
  502.     s1,s2:STRING;
  503.     Drive:CHAR;
  504. LABEL l,l1;
  505. BEGIN
  506.      IF length(s)<3 THEN goto l;
  507.      IF s[2]<>':' THEN
  508.      BEGIN
  509. l:
  510.           ErrorBox(MB_ICONHAND,'Destination directory invalid'+#13+
  511.                                'Specify full pathname !');
  512.           exit; {Error during install}
  513.      END;
  514.      IF s[3]<>'\' THEN goto l;
  515.      Drive:=s[1];
  516.      Delete(s,1,3);
  517.      s1:=Drive+':';
  518. l1:
  519.      IF s<>'' THEN
  520.      BEGIN
  521.           t:=pos('\',s);
  522.           IF t<>0 THEN
  523.           BEGIN
  524.                s2:=copy(s,1,t);
  525.                delete(s,1,t);
  526.                IF s2[length(s2)]='\' THEN dec(s2[0]);
  527.                s1:=s1+'\'+s2;
  528.                MkDir(s1);
  529.                goto l1;
  530.           END
  531.           ELSE
  532.           BEGIN
  533.                s1:=s1+'\'+s;
  534.                MkDir(s1);
  535.           END;
  536.      END;
  537. END;
  538.  
  539. VAR
  540.    LicenseDialog:TDialog;
  541.  
  542. BEGIN
  543.      InstallLanguage:=TRUE;  {German}
  544.      InstallDialog.Init(HWND_DESKTOP,0,0,1000,NIL);
  545.      InstallDialog.ExecDialog(result);
  546.      InstallDialog.Done;
  547.      IF result<>1019 THEN exit; {Install canceled}
  548.  
  549.      IF InstallLanguage=TRUE THEN LicenseDialog.Init(HWND_DESKTOP,0,0,1003,NIL)
  550.      ELSE LicenseDialog.Init(HWND_DESKTOP,0,0,1002,NIL);
  551.      LicenseDialog.ExecDialog(result);
  552.      LicenseDialog.Done;
  553.      IF result<>1019 THEN exit; {Install canceled}
  554.  
  555.      CreateInstallDir(InstallDir);
  556.  
  557.      IF not Install THEN
  558.      BEGIN
  559.           ErrorBox(MB_ICONHAND,'Installation not completed !');
  560.           exit; {Error during install}
  561.      END;
  562.  
  563.      Loc:='<WP_DESKTOP>';
  564.      Setup:='OBJECTID=<SPEED-Pascal/2 Folder>;';
  565.      Setup:=Setup+'ICONFILE='+InstallDir+'\SPEED.ICO';
  566.      Title:='SPEED-Pascal/2';
  567.      Class:='WPFolder';
  568.      ob:=WinCreateObject(1,Loc,Setup,Title,Class);
  569.  
  570.      Loc:='<SPEED-Pascal/2 Folder>';
  571.      Setup:='ICONFILE='+InstallDir+'\SPEED.ICO;';
  572.      Setup:=Setup+'EXENAME='+InstallDir+'\SPEED.EXE';
  573.      Title:='SPEED IDE';
  574.      Class:='WPProgram';
  575.      ob:=WinCreateObject(1,Loc,Setup,Title,Class);
  576.  
  577.      Loc:='<SPEED-Pascal/2 Folder>';
  578.      Setup:='ICONFILE='+InstallDir+'\RESEDIT.ICO;';
  579.      Setup:=Setup+'EXENAME='+InstallDir+'\RESEDIT.EXE';
  580.      Title:='SPEED-Resource Editor';
  581.      Class:='WPProgram';
  582.      ob:=WinCreateObject(1,Loc,Setup,Title,Class);
  583.  
  584.      Loc:='<SPEED-Pascal/2 Folder>';
  585.      Setup:='OBJECTID=<SPEED-Pascal/2 Samples>;';
  586.      Setup:=Setup+'ICONFILE='+InstallDir+'\SAMPLES.ICO';
  587.      Title:='Samples';
  588.      Class:='WPFolder';
  589.      ob:=WinCreateObject(1,Loc,Setup,Title,Class);
  590.  
  591.      WHILE Samples<>NIL DO
  592.      BEGIN
  593.           Loc:='<SPEED-Pascal/2 Samples>';
  594.           Setup:='ICONFILE='+InstallDir+'\SAMPLES\'+Samples^.Name+'\'+
  595.                  Samples^.Name+'.ICO;';
  596.           Setup:=Setup+'EXENAME='+InstallDir+'\SAMPLES\'+Samples^.Name+'\'+
  597.                        Samples^.name+'.EXE';
  598.           Title:=Samples^.Name;
  599.           Class:='WPProgram';
  600.           ob:=WinCreateObject(1,Loc,Setup,Title,Class);
  601.  
  602.           Samples:=Samples^.Next;
  603.      END;
  604.  
  605.      Messagebox('Installation of Speed-Pascal/2 completed !');
  606. END.
  607.  
  608.  
  609.  
  610.  
  611.  
  612.  
  613.  
  614.  
  615.  
  616.  
  617.  
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.  
  668.  
  669.  
  670.  
  671.  
  672.  
  673.  
  674.  
  675.  
  676.  
  677.  
  678.  
  679.  
  680.  
  681.  
  682.  
  683.  
  684.  
  685.  
  686.  
  687.  
  688.  
  689.  
  690.  
  691.  
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.  
  731.  
  732.  
  733.  
  734.  
  735.  
  736.  
  737.  
  738.  
  739.  
  740.  
  741.  
  742.  
  743.  
  744.  
  745.  
  746.  
  747.  
  748.  
  749.  
  750.  
  751.  
  752.  
  753.  
  754.  
  755.  
  756.  
  757.  
  758.  
  759.  
  760.  
  761.  
  762.  
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.  
  799.  
  800.  
  801.  
  802.  
  803.  
  804.  
  805.  
  806.  
  807.  
  808.  
  809.  
  810.  
  811.  
  812.  
  813.  
  814.  
  815.  
  816.  
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.  
  866.  
  867.  
  868.  
  869.  
  870.  
  871.  
  872.  
  873.  
  874.  
  875.  
  876.  
  877.  
  878.  
  879.  
  880.  
  881.  
  882.  
  883.  
  884.  
  885.  
  886.  
  887.  
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898.  
  899.  
  900.  
  901.  
  902.  
  903.  
  904.  
  905.  
  906.  
  907.  
  908.  
  909.  
  910.  
  911.  
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.  
  932.  
  933.  
  934.  
  935.  
  936.  
  937.  
  938.  
  939.  
  940.  
  941.  
  942.  
  943.  
  944.  
  945.  
  946.  
  947.  
  948.  
  949.  
  950.  
  951.  
  952.  
  953.  
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  
  960.  
  961.  
  962.  
  963.  
  964.  
  965.  
  966.  
  967.  
  968.  
  969.  
  970.  
  971.  
  972.  
  973.  
  974.  
  975.  
  976.  
  977.