123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487 |
- {
- $Id$
- This file is part of the Free Pascal run time library.
- Copyright (c) 1993,98 by Florian Klaempfl
- member of the Free Pascal development team
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- { This is the install program for the DOS version of Free Pascal }
- {$A+,B-,D+,E+,F-,G-,I-,L+,N-,O-,P-,Q+,R+,S+,T-,V-,X+,Y+}
- {$M 16384,0,16384}
- program install;
- uses
- app,dialogs,views,objects,menus,drivers,strings,msgbox,dos;
- var
- binpath,startpath : string;
- successfull : boolean;
- const
- version = '0';
- release = '99'
- patchlevel = '6';
- filenr = version+release+patchlevel;
- doc_version = '101';
- procedure uppervar(var s : string);
- var
- i : integer;
- begin
- for i:=1 to length(s) do
- s[i]:=upcase(s[i]);
- end;
- function file_exists(const f : string;const path : string) : boolean;
- begin
- file_exists:=fsearch(f,path)<>'';
- end;
- procedure do_install(const s : string);
- begin
- if not(file_exists(s+'.ZIP',startpath)) then
- begin
- messagebox('File: '+s+' missed for the selected installation. '+
- 'Installation doesn''t becomes complete',nil,mferror+mfokbutton);
- halt(1);
- end;
- swapvectors;
- exec(startpath+'\UNZIP.EXE','-qq -o '+startpath+'\'+s);
- swapvectors;
- if doserror<>0 then
- begin
- messagebox('Error when extracting. Disk full?',nil,mferror+mfokbutton);
- halt(1);
- end;
- end;
- function createdir(const s : string) : boolean;
- var
- result : longint;
- begin
- chdir(s);
- if ioresult=0 then
- begin
- {$ifdef german}
- result:=messagebox('Das Installationsverzeichnis existiert schon. '+
- 'Soll ein neues Installationsverzeichnis angegeben werden?',nil,
- mferror+mfyesbutton+mfnobutton);
- {$else}
- result:=messagebox('The installation directory exists already. '+
- 'Do want to enter a new installation directory ?',nil,
- mferror+mfyesbutton+mfnobutton);
- {$endif}
- createdir:=result=cmyes;
- exit;
- end;
- mkdir(s);
- if ioresult<>0 then
- begin
- {$ifdef german}
- messagebox('Das Installationsverzeichnis konnte nicht angelegt werden',
- @s,mferror+mfokbutton);
- {$else}
- messagebox('The installation directory couldn''t be created',
- @s,mferror+mfokbutton);
- {$endif}
- createdir:=true;
- exit;
- end;
- createdir:=false;
- end;
- procedure changedir(const s : string);
- begin
- chdir(s);
- if ioresult<>0 then
- begin
- {$ifdef german}
- messagebox('Fehler beim Wechseln in das Installationsverzeichnis. '+
- 'Installationsprogramm wird beendet',@s,mferror+mfokbutton);
- {$else}
- messagebox('Error when changing directory ',@s,mferror+mfokbutton);
- {$endif}
- halt(1);
- end;
- end;
- const
- cmstart = 1000;
- type
- pinstalldialog = ^tinstalldialog;
- tinstalldialog = object(tdialog)
- constructor init;
- end;
- tapp = object(tapplication)
- procedure initmenubar;virtual;
- procedure handleevent(var event : tevent);virtual;
- end;
- function diskspace(const zipfile : string) : string;
- var
- clustersize : longint;
- f : file;
- begin
- diskspace:='';
- end;
- var
- mask_components : longint;
- constructor tinstalldialog.init;
- var
- r : trect;
- line : integer;
- p,f : pview;
- s : string;
- const breite = 76;
- hoehe = 20;
- x1 = (80-breite) div 2;
- y1 = (23-hoehe) div 2;
- x2 = x1+breite;
- y2 = y1+hoehe;
- begin
- r.assign(x1,y1,x2,y2);
- {$ifdef german}
- inherited init(r,'Installieren');
- {$else}
- inherited init(r,'Install');
- {$endif}
- line:=2;
- r.assign(3,line+1,28,line+2);
- p:=new(pinputline,init(r,79));
- f:=p;
- s:='C:\PP';
- p^.setdata(s);
- insert(p);
- r.assign(3,line,8,line+1);
- insert(new(plabel,init(r,'~P~ath',p)));
- insert(p);
- inc(line,3);
- r.assign(3,line+1,breite-3,line+11);
- p:=new(pcheckboxes,init(r,
- newsitem('~B~asic system (required)'+diskspace('BASEDOS.ZIP'),
- newsitem('GNU ~L~inker and GNU Assembler (required)'+diskspace('GNUASLD.ZIP'),
- newsitem('D~e~mos'+diskspace('DEMO.ZIP'),
- newsitem('GNU ~D~ebugger'+diskspace('GDB.ZIP'),
- newsitem('GNU ~U~tilities (required to recompile run time library)'+diskspace('GNUUTILS.ZIP'),
- newsitem('Documentation (~H~TML)'+diskspace('DOCS.ZIP'),
- newsitem('Documentation (~P~ostscript)'+diskspace('DOC100PS.ZIP'),
- newsitem('~R~un time library sources'+diskspace('RL09900S.ZIP'),
- newsitem('~C~ompiler sources'+diskspace('PP09900S.ZIP'),
- newsitem('Documentation sources (La~T~eX)'+diskspace('DOC100S.ZIP'),
- nil
- ))))))))))));
- pcluster(p)^.enablemask:=mask_components;
- insert(p);
- r.assign(3,line,14,line+1);
- insert(new(plabel,init(r,'~C~omponents',p)));
- inc(line,12);
- { Free Vision
- r.assign(3,line+1,breite-3,line+3);
- p:=new(pcheckboxes,init(r,
- newsitem('~B~asic system',
- newsitem('~D~ocumentation',
- newsitem('S~a~mples',
- newsitem('~S~ources',
- nil
- ))))));
- pcluster(p)^.enablemask:=mask_freevision;
- insert(p);
- r.assign(3,line,15,line+1);
- insert(new(plabel,init(r,'~F~ree Vision',p)));
- inc(line,4);
- }
- r.assign((breite div 2)-14,line,(breite div 2)-4,line+2);
- insert(new(pbutton,init(r,'~O~k',cmok,bfdefault)));
- r.assign((breite div 2)+4,line,(breite div 2)+14,line+2);
- insert(new(pbutton,init(r,'~C~ancel',cmcancel,bfnormal)));
- f^.select;
- end;
- procedure tapp.handleevent(var event : tevent);
- var
- p : pinstalldialog;
- p2 : pdialog;
- p3 : pstatictext;
- r : trect;
- c : word;
- t : text;
- installdata : record
- path : string[79];
- components : word;
- end;
- f : file;
- label
- insertdisk1,insertdisk2,newpath;
- begin
- inherited handleevent(event);
- if event.what=evcommand then
- if event.command=cmstart then
- begin
- clearevent(event);
- installdata.path:='C:\PP';
- installdata.components:=0;
- mask_components:=$0;
- { searching files }
- if file_exists('BASEDOS.ZIP',startpath) then
- inc(mask_components,1);
- if file_exists('GNUASLD.ZIP',startpath) then
- inc(mask_components,2);
- if file_exists('DEMO.ZIP',startpath) then
- inc(mask_components,4);
- if file_exists('GDB.ZIP',startpath) then
- inc(mask_components,8);
- if file_exists('GNUUTILS.ZIP',startpath) then
- inc(mask_components,16);
- if file_exists('DOCS.ZIP',startpath) then
- inc(mask_components,32);
- if file_exists('DOC+doc_version+PS.ZIP',startpath) then
- inc(mask_components,64);
- if file_exists('RL'+filenr+'S.ZIP',startpath) then
- inc(mask_components,128);
- if file_exists('PP'+filenr+'S.ZIP',startpath) then
- inc(mask_components,256);
- if file_exists('DOC+doc_version+S.ZIP',startpath) then
- inc(mask_components,512);
- while true do
- begin
- newpath:
- p:=new(pinstalldialog,init);
- { default settings }
- c:=executedialog(p,@installdata);
- if c=cmok then
- begin
- if installdata.path[length(installdata.path)]='\' then
- dec(byte(installdata.path[0]));
- uppervar(installdata.path);
- binpath:=installdata.path+'\BIN';
- if createdir(installdata.path) then
- goto newpath;
- changedir(installdata.path);
- {$ifdef unused_code}
- assign(t,'SET_PP.BAT');
- rewrite(t);
- if ioresult<>0 then
- {$ifdef german}
- messagebox('Datei SET_PP.BAT konnte nicht erstellt werden',nil,mfokbutton+mferror)
- {$else}
- messagebox('File SET_PP.BAT can''t be created',nil,mfokbutton+mferror)
- {$endif}
- else
- begin
- { never used:
- writeln(t,'SET LINUXUNITS='+installdata.path+'\LINUXUNITS');
- writeln(t,'SET PPBIN='+installdata.path+'\BIN');
- writeln(t,'SET PASLIB='+installdata.path+'\LIB');
- writeln(t,'SET OS2UNITS='+installdata.path+'\OS2UNITS');
- writeln(t,'SET DOSUNITS='+installdata.path+'\DOSUNITS;'+installdata.path+'\BIN');
- }
- writeln('REM This file may contain nothing else');
- write(t,'SET GO32=');
- {$ifdef german}
- if messagebox('Wollen Sie den Coprozessoremulator verwenden?',
- nil,mfyesbutton+mfnobutton)=cmyes then
- write(t,'emu '+installdata.path+'\DRIVERS\EMU387');
- {$else}
- if messagebox('Install math coprocessor emulation?',
- nil,mfyesbutton+mfnobutton)=cmyes then
- write(t,'emu '+installdata.path+'\DRIVERS\EMU387');
- {$endif}
- writeln(t);
- close(t);
- end;
- {$endif unused_code}
- if getenv('UNZIP')<>'' then
- begin
- {$ifdef german}
- messagebox('Die Umgebungsvariable UNZIP sollte'#13+
- 'nicht gesetzt sein',nil,mfokbutton+mfinformation)
- {$else}
- messagebox('The enviroment variable UNZIP shouldn''t be set',nil,
- mfokbutton+mfinformation)
- {$endif}
- end;
- r.assign(20,7,60,16);
- p2:=new(pdialog,init(r,'Information'));
- r.assign(6,4,38,5);
- {$ifdef german}
- p3:=new(pstatictext,init(r,'Dateien werden entpackt ...'));
- {$else}
- p3:=new(pstatictext,init(r,'Extracting files ...'));
- {$endif}
- p2^.insert(p3);
- desktop^.insert(p2);
- if (installdata.components and 1)<>0 then
- do_install('BASEDOS');
- if (installdata.components and 2)<>0 then
- do_install('GNUASLD');
- if (installdata.components and 4)<>0 then
- do_install('DEMO');
- if (installdata.components and 8)<>0 then
- do_install('GDB');
- if (installdata.components and 16)<>0 then
- do_install('GNUUTILS');
- if (installdata.components and 32)<>0 then
- do_install('DOCS');
- if (installdata.components and 64)<>0 then
- do_install('DOC+doc_version+PS');
- if (installdata.components and 128)<>0 then
- do_install('RL'+filenr+'S');
- if (installdata.components and 256)<>0 then
- do_install('PP'+filenr+'S');
- if (installdata.components and 512)<>0 then
- do_install('DOC+doc_version+S');
- assign(t,'BIN\PPC386.CFG');
- rewrite(t);
- writeln(t,'-l');
- writeln(t,'#section GO32V1');
- writeln(t,'-Up',installdata.path+'\RTL\DOS\GO32V1');
- writeln(t,'#section GO32V2');
- writeln(t,'-Up',installdata.path+'\RTL\DOS\GO32V2');
- close(t);
- desktop^.delete(p2);
- dispose(p2,done);
- {$ifdef german}
- messagebox('Installation erfolgreich abgeschlossen',nil,mfinformation+mfokbutton);
- {$else}
- messagebox('Installation successfull',nil,mfinformation+mfokbutton);
- {$endif}
- event.what:=evcommand;
- event.command:=cmquit;
- successfull:=true;
- handleevent(event);
- end;
- break;
- end;
- end;
- end;
- procedure tapp.initmenubar;
- var
- r : trect;
- begin
- getextent(r);
- r.b.y:=r.a.y+1;
- {$ifdef german}
- menubar:=new(pmenubar,init(r,newmenu(
- newsubmenu('~I~nstallation',hcnocontext,newmenu(
- newitem('~S~tart','',kbnokey,cmstart,hcnocontext,
- newline(
- newitem('~B~eenden','Alt+X',kbaltx,cmquit,hcnocontext,
- nil)))
- ),
- nil))));
- {$else}
- menubar:=new(pmenubar,init(r,newmenu(
- newsubmenu('~I~nstallation',hcnocontext,newmenu(
- newitem('~S~tart','',kbnokey,cmstart,hcnocontext,
- newline(
- newitem('~E~xit','Alt+X',kbaltx,cmquit,hcnocontext,
- nil)))
- ),
- nil))));
- {$endif}
- end;
- var
- installapp : tapp;
- oldexitproc : pointer;
- procedure myexitproc;far;
- begin
- exitproc:=oldexitproc;
- end;
- var
- b : byte;
- begin
- getdir(0,startpath);
- {
- startpath:=paramstr(0);
- for b:=length(startpath) downto 1 do
- if startpath[b]='\' then
- begin
- startpath[0]:=chr(b-1);
- break;
- end;
- }
- oldexitproc:=exitproc;
- exitproc:=@myexitproc;
- successfull:=false;
- installapp.init;
- installapp.run;
- installapp.done;
- if successfull then
- begin
- writeln('Extend your PATH variable with');
- writeln(binpath);
- writeln;
- writeln('To compile files enter PPC386 [file]');
- end;
- end.
- {
- $Log$
- Revision 1.2 1998-04-07 22:47:57 florian
- + version/release/patch numbers as string added
- }
|