mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2026-02-04 11:54:41 +01:00
* install updated to support w32 and dos and config file
This commit is contained in:
parent
cc3f66783c
commit
4e0d2d84bb
195
install/install.dos
Normal file
195
install/install.dos
Normal file
@ -0,0 +1,195 @@
|
||||
#
|
||||
# Go32 Install file
|
||||
#
|
||||
title=Free Pascal Compiler for Go32v2
|
||||
version=0.99.8
|
||||
|
||||
basepath=c:\pp
|
||||
binsub=\bin
|
||||
ppc386=ppc386
|
||||
|
||||
package=basego32.zip,~B~asic system for Go32v2 (required)
|
||||
package=asldgo32.zip,GNU ~L~inker and GNU Assembler for Go32v2 (required)
|
||||
package=gdbgo32.zip,GNU ~D~ebugger for Go32v2
|
||||
package=gnuutils.zip,GNU ~U~tilities (required to recompile run time library)
|
||||
package=demo.zip,D~e~mos
|
||||
package=docs.zip,Documentation (~H~TML)
|
||||
package=doc110ps.zip,Documentation (~P~ostscript)
|
||||
package=rl0998s.zip,~R~un time library sources
|
||||
package=pp0998s.zip,~C~ompiler sources
|
||||
package=doc110s.zip,Documentation sources (La~T~eX)
|
||||
|
||||
cfgfile=ppc386.cfg
|
||||
defaultcfg=
|
||||
#
|
||||
# Example ppc386.cfg for Free Pascal Compiler Version 0.99.8
|
||||
#
|
||||
|
||||
# ----------------------
|
||||
# Defines (preprocessor)
|
||||
# ----------------------
|
||||
|
||||
#
|
||||
# nested #IFNDEF, #IFDEF, #ENDIF, #ELSE, #DEFINE, #UNDEF are allowed
|
||||
#
|
||||
# -d is the same as #DEFINE
|
||||
# -u is the same as #UNDEF
|
||||
#
|
||||
|
||||
# When not m68k is defined at the commandline, define i386
|
||||
#IFNDEF m68k
|
||||
#DEFINE i386
|
||||
#ENDIF
|
||||
|
||||
#
|
||||
# Some examples (for switches see below, and the -? helppages)
|
||||
#
|
||||
# Try compiling with the -dRELEASE or -dDEBUG on the commandline
|
||||
#
|
||||
|
||||
# For a release compile with optimizes and strip debuginfo
|
||||
#IFDEF RELEASE
|
||||
-OG2p2
|
||||
-Xs
|
||||
#WRITE Compiling Release Version
|
||||
#ENDIF
|
||||
|
||||
# For a debug version compile with debuginfo and all codegeneration checks on
|
||||
#IFDEF DEBUG
|
||||
-g
|
||||
-Crtoi
|
||||
#WRITE Compiling Debug Version
|
||||
#ENDIF
|
||||
|
||||
# ----------------
|
||||
# Parsing switches
|
||||
# ----------------
|
||||
|
||||
# All assembler blocks are intel styled by default
|
||||
#-Rintel
|
||||
|
||||
# All assembler blocks are AT&T styled by default
|
||||
#-Ratt
|
||||
|
||||
# Semantic checking
|
||||
# -S2 switch some Delphi 2 extension on
|
||||
# -Sc supports operators like C (*=,+=,/= and -=)
|
||||
# -Sg allows LABEL and GOTO
|
||||
# -Si support C++ stlyed INLINE
|
||||
# -Sm support macros like C (global)
|
||||
# -So tries to be TP/BP 7.0 compatible
|
||||
# -Ss constructor name must be init (destructor must be done)
|
||||
# -St allows static keyword in objects
|
||||
# -Sv allow CVAR variable directive
|
||||
|
||||
# Allow goto, inline, C-operators, CVar directive
|
||||
-Sgicv
|
||||
|
||||
# ---------------
|
||||
# Code generation
|
||||
# ---------------
|
||||
|
||||
# Uncomment the next line if you always want static/dynamic units by default
|
||||
# (can be overruled with -CD, -CS at the commandline)
|
||||
#-CS
|
||||
#-CD
|
||||
|
||||
# Set the default heapsize to 8Mb
|
||||
#-Ch8000000
|
||||
|
||||
# Set default codegeneration checks (iocheck, overflow, range, stack)
|
||||
#-Ci
|
||||
#-Co
|
||||
#-Cr
|
||||
#-Ct
|
||||
|
||||
# Optimizer switches
|
||||
# -Og generate smaller code
|
||||
# -OG generate faster code (default)
|
||||
# -Or keep certain variables in registers (still BUGGY!!!)
|
||||
# -Ou enable uncertain optimizations (see docs)
|
||||
# -O1 level 1 optimizations (quick optimizations)
|
||||
# -O2 level 2 optimizations (-O1 + slower optimizations)
|
||||
# -O3 level 3 optimizations (same as -O2u)
|
||||
# -Op target processor
|
||||
# -Op1 set target processor to 386/486
|
||||
# -Op2 set target processor to Pentium/PentiumMMX (tm)
|
||||
# -Op3 set target processor to PPro/PII/c6x86/K6 (tm)
|
||||
|
||||
# Optimize always for Size and Pentium
|
||||
#-OG2p2
|
||||
|
||||
|
||||
# -----------------------
|
||||
# Set Filenames and Paths
|
||||
# -----------------------
|
||||
|
||||
# Slashes are also allowed under dos
|
||||
|
||||
# path to the messagefile, not necessary anymore but can be used to override
|
||||
# the default language
|
||||
#-Fr$1/bin/errore.msg
|
||||
#-Fr$1/bin/errorn.msg
|
||||
|
||||
# path to the gcclib
|
||||
#-Fg$1/lib
|
||||
|
||||
# searchpath for includefiles
|
||||
#-Fi$1/inc;$1/rtl/inc
|
||||
|
||||
# searchpath for units (does the same as -Up)
|
||||
#IFDEF Go32V1
|
||||
-Fu$1/rtl/dos/go32v1
|
||||
#ENDIF
|
||||
#IFDEF Go32V2
|
||||
-Fu$1/rtl/dos/go32v2
|
||||
#ENDIF
|
||||
#IFDEF Win32
|
||||
-Fu$1/rtl/dos/win32
|
||||
#ENDIF
|
||||
|
||||
# searchpath for libraries
|
||||
#-Fl$1/lib
|
||||
#-Fl/lib;/usr/lib
|
||||
|
||||
|
||||
# -------------
|
||||
# Linking
|
||||
# -------------
|
||||
|
||||
# generate always debugging information for GDB (slows down the compiling
|
||||
# process)
|
||||
#-g
|
||||
|
||||
# always pass an option to the linker
|
||||
#-k-s
|
||||
|
||||
# Always strip debuginfo from the executable
|
||||
#-Xs
|
||||
|
||||
|
||||
# -------------
|
||||
# Miscellaneous
|
||||
# -------------
|
||||
|
||||
# Write always a nice FPC logo ;)
|
||||
-l
|
||||
|
||||
# Verbosity
|
||||
# e : Show errors (default) d : Show debug info
|
||||
# w : Show warnings u : Show used files
|
||||
# n : Show notes t : Show tried files
|
||||
# h : Show hints m : Show defined macros
|
||||
# i : Show general info p : Show compiled procedures
|
||||
# l : Show linenumbers c : Show conditionals
|
||||
# a : Show everything 0 : Show nothing (except errors)
|
||||
|
||||
# Display Info, Warnings, Notes and Hints
|
||||
-viwnh
|
||||
# If you don't want so much verbosity use
|
||||
#-vw
|
||||
|
||||
#
|
||||
# That's all folks
|
||||
#
|
||||
endcfg
|
||||
@ -14,53 +14,110 @@
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
{$A+,B-,D+,E+,F-,G-,I-,L+,N-,O-,P-,Q+,R+,S+,T-,V-,X+,Y+}
|
||||
program install;
|
||||
|
||||
uses
|
||||
app,dialogs,views,objects,menus,drivers,strings,msgbox,dos,unzip,ziptypes;
|
||||
|
||||
var
|
||||
binpath,startpath : string;
|
||||
successfull : boolean;
|
||||
|
||||
const
|
||||
version = '0';
|
||||
release = '99';
|
||||
patchlevel = '8';
|
||||
maxpackages=20;
|
||||
maxdefcfgs=200;
|
||||
|
||||
filenr = version+release+patchlevel;
|
||||
cfgfile='install.dat';
|
||||
|
||||
doc_version = '110';
|
||||
type
|
||||
tpackage=record
|
||||
name : string[60];
|
||||
zip : string[12];
|
||||
end;
|
||||
|
||||
cfgrec=record
|
||||
title : string[80];
|
||||
version : string[20];
|
||||
basepath : string[80];
|
||||
binsub : string[12];
|
||||
ppc386 : string[12];
|
||||
packages : longint;
|
||||
package : array[1..maxpackages] of tpackage;
|
||||
defcfgfile : string[12];
|
||||
defcfgs : longint;
|
||||
defcfg : array[1..maxdefcfgs] of pstring;
|
||||
end;
|
||||
|
||||
datarec=record
|
||||
basepath : string[80];
|
||||
mask : word;
|
||||
end;
|
||||
|
||||
var
|
||||
startpath : string;
|
||||
successfull : boolean;
|
||||
cfg : cfgrec;
|
||||
data : datarec;
|
||||
|
||||
{*****************************************************************************
|
||||
Helpers
|
||||
*****************************************************************************}
|
||||
|
||||
procedure uppervar(var s : string);
|
||||
|
||||
var
|
||||
i : integer;
|
||||
|
||||
function packagemask(i:longint):longint;
|
||||
begin
|
||||
for i:=1 to length(s) do
|
||||
s[i]:=upcase(s[i]);
|
||||
packagemask:=1 shl (i-1);
|
||||
end;
|
||||
|
||||
function file_exists(const f : string;const path : string) : boolean;
|
||||
|
||||
function upper(const s : string):string;
|
||||
var
|
||||
i : integer;
|
||||
begin
|
||||
for i:=1 to length(s) do
|
||||
if s[i] in ['a'..'z'] then
|
||||
upper[i]:=chr(ord(s[i])-32)
|
||||
else
|
||||
upper[i]:=s[i];
|
||||
upper[0]:=s[0];
|
||||
end;
|
||||
|
||||
|
||||
function lower(const s : string):string;
|
||||
var
|
||||
i : integer;
|
||||
begin
|
||||
for i:=1 to length(s) do
|
||||
if s[i] in ['A'..'Z'] then
|
||||
lower[i]:=chr(ord(s[i])+32)
|
||||
else
|
||||
lower[i]:=s[i];
|
||||
lower[0]:=s[0];
|
||||
end;
|
||||
|
||||
|
||||
procedure Replace(var s:string;const s1,s2:string);
|
||||
var
|
||||
i : longint;
|
||||
begin
|
||||
repeat
|
||||
i:=pos(s1,s);
|
||||
if i>0 then
|
||||
begin
|
||||
Delete(s,i,length(s1));
|
||||
Insert(s2,s,i);
|
||||
end;
|
||||
until i=0;
|
||||
end;
|
||||
|
||||
|
||||
function file_exists(const f : string;const path : string) : boolean;
|
||||
begin
|
||||
file_exists:=fsearch(f,path)<>'';
|
||||
end;
|
||||
|
||||
|
||||
function diskspace(const path,zipfile : string) : string;
|
||||
function diskspace(const zipfile : string) : string;
|
||||
var
|
||||
compressed,uncompressed : longint;
|
||||
s : string;
|
||||
begin
|
||||
s:=path+zipfile+#0;
|
||||
s:=zipfile+#0;
|
||||
uncompressed:=UnzipSize(@s[1],compressed);
|
||||
uncompressed:=uncompressed shr 10;
|
||||
str(uncompressed,s);
|
||||
@ -68,43 +125,164 @@ program install;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
function createdir(const s : string) : boolean;
|
||||
|
||||
function createdir(var s : string) : boolean;
|
||||
var
|
||||
result : longint;
|
||||
|
||||
result : longint;
|
||||
dir : searchrec;
|
||||
params : array[0..0] of pointer;
|
||||
begin
|
||||
chdir(s);
|
||||
if ioresult=0 then
|
||||
if s[length(s)]='\' then
|
||||
dec(s[0]);
|
||||
s:=lower(s);
|
||||
FindFirst(s,$ff,dir);
|
||||
if doserror=0 then
|
||||
begin
|
||||
result:=messagebox('The installation directory exists already. '+
|
||||
'Do want to enter a new installation directory ?',nil,
|
||||
mferror+mfyesbutton+mfnobutton);
|
||||
createdir:=result=cmyes;
|
||||
createdir:=(result=cmNo);
|
||||
exit;
|
||||
end;
|
||||
mkdir(s);
|
||||
{$I-}
|
||||
mkdir(s);
|
||||
{$I+}
|
||||
if ioresult<>0 then
|
||||
begin
|
||||
messagebox('The installation directory couldn''t be created',
|
||||
@s,mferror+mfokbutton);
|
||||
createdir:=true;
|
||||
params[0]:=@s;
|
||||
messagebox('The installation directory %s couldn''t be created',
|
||||
@params,mferror+mfokbutton);
|
||||
createdir:=false;
|
||||
exit;
|
||||
end;
|
||||
createdir:=false;
|
||||
createdir:=true;
|
||||
end;
|
||||
|
||||
|
||||
procedure changedir(const s : string);
|
||||
{*****************************************************************************
|
||||
Writing of ppc386.cfg
|
||||
*****************************************************************************}
|
||||
|
||||
procedure writedefcfg(const fn:string);
|
||||
var
|
||||
t : text;
|
||||
i : longint;
|
||||
s : string;
|
||||
dir : searchrec;
|
||||
params : array[0..0] of pointer;
|
||||
begin
|
||||
chdir(s);
|
||||
if ioresult<>0 then
|
||||
findfirst(fn,$ff,dir);
|
||||
if doserror=0 then
|
||||
begin
|
||||
params[0]:=@fn;
|
||||
MessageBox('Config file %s already exists, default config not written',@params,mfinformation+mfokbutton);
|
||||
exit;
|
||||
end;
|
||||
assign(t,fn);
|
||||
{$I-}
|
||||
rewrite(t);
|
||||
{$I+}
|
||||
if ioresult<>0 then
|
||||
begin
|
||||
params[0]:=@fn;
|
||||
MessageBox('Can''t create %s, default config not written',@params,mfinformation+mfokbutton);
|
||||
exit;
|
||||
end;
|
||||
for i:=1to cfg.defcfgs do
|
||||
if assigned(cfg.defcfg[i]) then
|
||||
begin
|
||||
messagebox('Error when changing directory ',@s,mferror+mfokbutton);
|
||||
halt(1);
|
||||
end;
|
||||
s:=cfg.defcfg[i]^;
|
||||
Replace(s,'$1',data.basepath);
|
||||
writeln(t,s);
|
||||
end
|
||||
else
|
||||
writeln(t,'');
|
||||
close(t);
|
||||
end;
|
||||
|
||||
|
||||
{*****************************************************************************
|
||||
Cfg Read
|
||||
*****************************************************************************}
|
||||
|
||||
procedure readcfg(const fn:string);
|
||||
var
|
||||
t : text;
|
||||
i,j,
|
||||
line : longint;
|
||||
item,
|
||||
s : string;
|
||||
begin
|
||||
assign(t,fn);
|
||||
{$I-}
|
||||
reset(t);
|
||||
{$I+}
|
||||
if ioresult<>0 then
|
||||
begin
|
||||
writeln('error: ',fn,' not found!');
|
||||
halt(1);
|
||||
end;
|
||||
line:=0;
|
||||
while not eof(t) do
|
||||
begin
|
||||
readln(t,s);
|
||||
inc(line);
|
||||
if (s<>'') and not(s[1] in ['#',';']) then
|
||||
begin
|
||||
i:=pos('=',s);
|
||||
if i>0 then
|
||||
begin
|
||||
item:=upper(Copy(s,1,i-1));
|
||||
delete(s,1,i);
|
||||
if item='VERSION' then
|
||||
cfg.version:=s
|
||||
else
|
||||
if item='TITLE' then
|
||||
cfg.title:=s
|
||||
else
|
||||
if item='BASEPATH' then
|
||||
cfg.basepath:=s
|
||||
else
|
||||
if item='PPC386' then
|
||||
cfg.ppc386:=s
|
||||
else
|
||||
if item='BINSUB' then
|
||||
cfg.binsub:=s
|
||||
else
|
||||
if item='CFGFILE' then
|
||||
cfg.defcfgfile:=s
|
||||
else
|
||||
if item='DEFAULTCFG' then
|
||||
begin
|
||||
repeat
|
||||
readln(t,s);
|
||||
if upper(s)='ENDCFG' then
|
||||
break;
|
||||
if cfg.defcfgs<maxdefcfgs then
|
||||
begin
|
||||
inc(cfg.defcfgs);
|
||||
cfg.defcfg[cfg.defcfgs]:=newstr(s);
|
||||
end;
|
||||
until false;
|
||||
end
|
||||
else
|
||||
if item='PACKAGE' then
|
||||
begin
|
||||
j:=pos(',',s);
|
||||
if (j>0) and (cfg.packages<maxpackages) then
|
||||
begin
|
||||
inc(cfg.packages);
|
||||
cfg.package[cfg.packages].zip:=copy(s,1,j-1);
|
||||
cfg.package[cfg.packages].name:=copy(s,j+1,255);
|
||||
end;
|
||||
end
|
||||
else
|
||||
writeln('error in confg, unknown item "',item,'" skipping line ',line);
|
||||
end
|
||||
else
|
||||
writeln('error in confg, skipping line ',line);
|
||||
end;
|
||||
end;
|
||||
close(t);
|
||||
end;
|
||||
|
||||
|
||||
@ -117,9 +295,10 @@ program install;
|
||||
tunzipdialog=object(tdialog)
|
||||
filetext : pstatictext;
|
||||
constructor Init(var Bounds: TRect; ATitle: TTitleStr);
|
||||
procedure do_unzip(s:string);
|
||||
procedure do_unzip(s,topath:string);
|
||||
end;
|
||||
|
||||
|
||||
constructor tunzipdialog.init;
|
||||
var
|
||||
r : trect;
|
||||
@ -131,11 +310,10 @@ program install;
|
||||
end;
|
||||
|
||||
|
||||
procedure tunzipdialog.do_unzip(s : string);
|
||||
procedure tunzipdialog.do_unzip(s,topath : string);
|
||||
var
|
||||
fn,dir,wild : string;
|
||||
begin
|
||||
s:=s+'.ZIP';
|
||||
Disposestr(filetext^.text);
|
||||
filetext^.Text:=NewStr('File: '+s);
|
||||
filetext^.drawview;
|
||||
@ -146,7 +324,7 @@ program install;
|
||||
halt(1);
|
||||
end;
|
||||
fn:=startpath+'\'+s+#0;
|
||||
dir:='.'#0;
|
||||
dir:=topath+#0;
|
||||
wild:='*.*'#0;
|
||||
FileUnzipEx(@fn[1],@dir[1],@wild[1]);
|
||||
if doserror<>0 then
|
||||
@ -166,78 +344,75 @@ program install;
|
||||
tinstalldialog = object(tdialog)
|
||||
constructor init;
|
||||
end;
|
||||
var
|
||||
mask_components : longint;
|
||||
|
||||
|
||||
constructor tinstalldialog.init;
|
||||
var
|
||||
r : trect;
|
||||
line : integer;
|
||||
mask_components : longint;
|
||||
i,line : integer;
|
||||
items : psitem;
|
||||
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;
|
||||
const
|
||||
width = 76;
|
||||
height = 20;
|
||||
x1 = (79-width) div 2;
|
||||
y1 = (23-height) div 2;
|
||||
x2 = x1+width;
|
||||
y2 = y1+height;
|
||||
|
||||
begin
|
||||
r.assign(x1,y1,x2,y2);
|
||||
inherited init(r,'Install');
|
||||
inherited init(r,cfg.title+' Installation');
|
||||
|
||||
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);
|
||||
r.assign(3,line+1,28,line+2);
|
||||
|
||||
f:=new(pinputline,init(r,80));
|
||||
insert(f);
|
||||
|
||||
{ walk packages reverse and insert a newsitem for each, and set the mask }
|
||||
items:=nil;
|
||||
mask_components:=0;
|
||||
for i:=cfg.packages downto 1 do
|
||||
begin
|
||||
if file_exists(cfg.package[i].zip,startpath) then
|
||||
begin
|
||||
items:=newsitem(cfg.package[i].name+diskspace(startpath+'\'+cfg.package[i].zip),items);
|
||||
mask_components:=mask_components or packagemask(i);
|
||||
end
|
||||
else
|
||||
begin
|
||||
items:=newsitem(cfg.package[i].name,items);
|
||||
end;
|
||||
end;
|
||||
|
||||
{ If no component found abort }
|
||||
if mask_components=0 then
|
||||
begin
|
||||
messagebox('No components found to install, aborting.',nil,mferror+mfokbutton);
|
||||
halt(1);
|
||||
end;
|
||||
|
||||
inc(line,3);
|
||||
r.assign(3,line+1,breite-3,line+11);
|
||||
p:=new(pcheckboxes,init(r,
|
||||
newsitem('~B~asic system (required)'+diskspace(startpath,'BASEDOS.ZIP'),
|
||||
newsitem('GNU ~L~inker and GNU Assembler (required)'+diskspace(startpath,'GNUASLD.ZIP'),
|
||||
newsitem('D~e~mos'+diskspace(startpath,'DEMO.ZIP'),
|
||||
newsitem('GNU ~D~ebugger'+diskspace(startpath,'GDB.ZIP'),
|
||||
newsitem('GNU ~U~tilities (required to recompile run time library)'+diskspace(startpath,'GNUUTILS.ZIP'),
|
||||
newsitem('Documentation (~H~TML)'+diskspace(startpath,'DOCS.ZIP'),
|
||||
newsitem('Documentation (~P~ostscript)'+diskspace(startpath,'DOC'+doc_version+'PS.ZIP'),
|
||||
newsitem('~R~un time library sources'+diskspace(startpath,'RL'+filenr+'S.ZIP'),
|
||||
newsitem('~C~ompiler sources'+diskspace(startpath,'PP'+filenr+'S.ZIP'),
|
||||
newsitem('Documentation sources (La~T~eX)'+diskspace(startpath,'DOC'+doc_version+'.ZIP'),
|
||||
nil
|
||||
))))))))))));
|
||||
r.assign(3,line,14,line+1);
|
||||
insert(new(plabel,init(r,'~C~omponents',p)));
|
||||
r.assign(3,line+1,width-3,line+cfg.packages+1);
|
||||
p:=new(pcheckboxes,init(r,items));
|
||||
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);
|
||||
inc(line,cfg.packages+2);
|
||||
r.assign((width div 2)-14,line,(width 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);
|
||||
r.assign((width div 2)+4,line,(width div 2)+14,line+2);
|
||||
insert(new(pbutton,init(r,'~C~ancel',cmcancel,bfnormal)));
|
||||
|
||||
f^.select;
|
||||
end;
|
||||
|
||||
@ -259,134 +434,72 @@ program install;
|
||||
|
||||
procedure tapp.do_installdialog;
|
||||
var
|
||||
p : pinstalldialog;
|
||||
p2 : punzipdialog;
|
||||
p3 : pstatictext;
|
||||
r : trect;
|
||||
c : word;
|
||||
t : text;
|
||||
installdata : record
|
||||
path : string[79];
|
||||
components : word;
|
||||
end;
|
||||
f : file;
|
||||
label
|
||||
newpath;
|
||||
p : pinstalldialog;
|
||||
p2 : punzipdialog;
|
||||
p3 : pstatictext;
|
||||
r : trect;
|
||||
result,
|
||||
c : word;
|
||||
i : longint;
|
||||
begin
|
||||
installdata.path:='C:\PP';
|
||||
installdata.components:=0;
|
||||
data.basepath:=cfg.basepath;
|
||||
data.mask:=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
|
||||
repeat
|
||||
p:=new(pinstalldialog,init);
|
||||
{ default settings }
|
||||
c:=executedialog(p,@data);
|
||||
if (c=cmok) then
|
||||
begin
|
||||
if (data.mask>0) 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);
|
||||
|
||||
r.assign(20,7,60,16);
|
||||
p2:=new(punzipdialog,init(r,'Extracting files'));
|
||||
desktop^.insert(p2);
|
||||
|
||||
if (installdata.components and 1)<>0 then
|
||||
p2^.do_unzip('BASEDOS');
|
||||
|
||||
if (installdata.components and 2)<>0 then
|
||||
p2^.do_unzip('GNUASLD');
|
||||
|
||||
if (installdata.components and 4)<>0 then
|
||||
p2^.do_unzip('DEMO');
|
||||
|
||||
if (installdata.components and 8)<>0 then
|
||||
p2^.do_unzip('GDB');
|
||||
|
||||
if (installdata.components and 16)<>0 then
|
||||
p2^.do_unzip('GNUUTILS');
|
||||
|
||||
if (installdata.components and 32)<>0 then
|
||||
p2^.do_unzip('DOCS');
|
||||
|
||||
if (installdata.components and 64)<>0 then
|
||||
p2^.do_unzip('DOC+doc_version+PS');
|
||||
|
||||
if (installdata.components and 128)<>0 then
|
||||
p2^.do_unzip('RL'+filenr+'S');
|
||||
|
||||
if (installdata.components and 256)<>0 then
|
||||
p2^.do_unzip('PP'+filenr+'S');
|
||||
|
||||
if (installdata.components and 512)<>0 then
|
||||
p2^.do_unzip('DOC+doc_version+S');
|
||||
|
||||
assign(t,'BIN\PPC386.CFG');
|
||||
rewrite(t);
|
||||
writeln(t,'-l');
|
||||
writeln(t,'#ifdef GO32V1');
|
||||
writeln(t,'-Up',installdata.path+'\RTL\DOS\GO32V1');
|
||||
writeln(t,'#endif GO32V1');
|
||||
writeln(t,'#ifdef GO32V2');
|
||||
writeln(t,'-Up',installdata.path+'\RTL\DOS\GO32V2');
|
||||
writeln(t,'#endif GO32V2');
|
||||
writeln(t,'#ifdef Win32');
|
||||
writeln(t,'-Up',installdata.path+'\RTL\WIN32');
|
||||
writeln(t,'#endif Win32');
|
||||
close(t);
|
||||
|
||||
desktop^.delete(p2);
|
||||
dispose(p2,done);
|
||||
messagebox('Installation successfull',nil,mfinformation+mfokbutton);
|
||||
successfull:=true;
|
||||
if createdir(data.basepath) then
|
||||
break;
|
||||
end
|
||||
else
|
||||
begin
|
||||
result:=messagebox('No components selected.'#13#13'Abort installation?',nil,
|
||||
mferror+mfyesbutton+mfnobutton);
|
||||
if result=cmYes then
|
||||
exit;
|
||||
end;
|
||||
break;
|
||||
end;
|
||||
end
|
||||
else
|
||||
exit;
|
||||
until false;
|
||||
|
||||
r.assign(20,7,60,16);
|
||||
p2:=new(punzipdialog,init(r,'Extracting files'));
|
||||
desktop^.insert(p2);
|
||||
for i:=1to cfg.packages do
|
||||
begin
|
||||
if data.mask and packagemask(i)<>0 then
|
||||
p2^.do_unzip(cfg.package[i].zip,data.basepath);
|
||||
end;
|
||||
desktop^.delete(p2);
|
||||
dispose(p2,done);
|
||||
|
||||
writedefcfg(data.basepath+cfg.binsub+'\'+cfg.defcfgfile);
|
||||
|
||||
messagebox('Installation successfull',nil,mfinformation+mfokbutton);
|
||||
successfull:=true;
|
||||
end;
|
||||
|
||||
|
||||
procedure tapp.initmenubar;
|
||||
var
|
||||
r : trect;
|
||||
begin
|
||||
getextent(r);
|
||||
r.b.y:=r.a.y+1;
|
||||
menubar:=new(pmenubar,init(r,newmenu(
|
||||
newsubmenu('~F~ree Pascal '+cfg.version,hcnocontext,newmenu(nil
|
||||
),
|
||||
nil))));
|
||||
end;
|
||||
|
||||
|
||||
procedure tapp.handleevent(var event : tevent);
|
||||
|
||||
label
|
||||
insertdisk1,insertdisk2,newpath;
|
||||
|
||||
begin
|
||||
inherited handleevent(event);
|
||||
if event.what=evcommand then
|
||||
@ -403,43 +516,33 @@ program install;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure tapp.initmenubar;
|
||||
var
|
||||
r : trect;
|
||||
begin
|
||||
getextent(r);
|
||||
r.b.y:=r.a.y+1;
|
||||
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))));
|
||||
end;
|
||||
|
||||
|
||||
var
|
||||
installapp : tapp;
|
||||
begin
|
||||
getdir(0,startpath);
|
||||
successfull:=false;
|
||||
|
||||
readcfg(cfgfile);
|
||||
|
||||
installapp.init;
|
||||
installapp.do_installdialog;
|
||||
installapp.done;
|
||||
|
||||
if successfull then
|
||||
begin
|
||||
writeln('Extend your PATH variable with');
|
||||
writeln(binpath);
|
||||
writeln('Extend your PATH variable with ''',data.basepath+cfg.binsub+'''');
|
||||
writeln;
|
||||
writeln('To compile files enter ''',cfg.ppc386,' [file]''');
|
||||
writeln;
|
||||
writeln('To compile files enter PPC386 [file]');
|
||||
chdir(startpath);
|
||||
end;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.4 1998-09-10 10:50:49 florian
|
||||
Revision 1.5 1998-09-15 12:06:06 peter
|
||||
* install updated to support w32 and dos and config file
|
||||
|
||||
Revision 1.4 1998/09/10 10:50:49 florian
|
||||
* DOS install program updated
|
||||
|
||||
Revision 1.3 1998/09/09 13:39:58 peter
|
||||
|
||||
195
install/install.w32
Normal file
195
install/install.w32
Normal file
@ -0,0 +1,195 @@
|
||||
#
|
||||
# Win32 Install file
|
||||
#
|
||||
title=Free Pascal Compiler for Win32
|
||||
version=0.99.8
|
||||
|
||||
basepath=c:\ppw
|
||||
binsub=\bin
|
||||
ppc386=ppw
|
||||
|
||||
package=basew32.zip,~B~asic system for Win32 (required)
|
||||
package=asldw32.zip,GNU ~L~inker and GNU Assembler for Win32 (required)
|
||||
package=gdbw32.zip,GNU ~D~ebugger for Win32
|
||||
package=gnuutils.zip,GNU ~U~tilities (required to recompile run time library)
|
||||
package=demo.zip,D~e~mos
|
||||
package=docs.zip,Documentation (~H~TML)
|
||||
package=doc110ps.zip,Documentation (~P~ostscript)
|
||||
package=rl0998s.zip,~R~un time library sources
|
||||
package=pp0998s.zip,~C~ompiler sources
|
||||
package=doc110s.zip,Documentation sources (La~T~eX)
|
||||
|
||||
cfgfile=ppc386.cfg
|
||||
defaultcfg=
|
||||
#
|
||||
# Example ppc386.cfg for Free Pascal Compiler Version 0.99.8
|
||||
#
|
||||
|
||||
# ----------------------
|
||||
# Defines (preprocessor)
|
||||
# ----------------------
|
||||
|
||||
#
|
||||
# nested #IFNDEF, #IFDEF, #ENDIF, #ELSE, #DEFINE, #UNDEF are allowed
|
||||
#
|
||||
# -d is the same as #DEFINE
|
||||
# -u is the same as #UNDEF
|
||||
#
|
||||
|
||||
# When not m68k is defined at the commandline, define i386
|
||||
#IFNDEF m68k
|
||||
#DEFINE i386
|
||||
#ENDIF
|
||||
|
||||
#
|
||||
# Some examples (for switches see below, and the -? helppages)
|
||||
#
|
||||
# Try compiling with the -dRELEASE or -dDEBUG on the commandline
|
||||
#
|
||||
|
||||
# For a release compile with optimizes and strip debuginfo
|
||||
#IFDEF RELEASE
|
||||
-OG2p2
|
||||
-Xs
|
||||
#WRITE Compiling Release Version
|
||||
#ENDIF
|
||||
|
||||
# For a debug version compile with debuginfo and all codegeneration checks on
|
||||
#IFDEF DEBUG
|
||||
-g
|
||||
-Crtoi
|
||||
#WRITE Compiling Debug Version
|
||||
#ENDIF
|
||||
|
||||
# ----------------
|
||||
# Parsing switches
|
||||
# ----------------
|
||||
|
||||
# All assembler blocks are intel styled by default
|
||||
#-Rintel
|
||||
|
||||
# All assembler blocks are AT&T styled by default
|
||||
#-Ratt
|
||||
|
||||
# Semantic checking
|
||||
# -S2 switch some Delphi 2 extension on
|
||||
# -Sc supports operators like C (*=,+=,/= and -=)
|
||||
# -Sg allows LABEL and GOTO
|
||||
# -Si support C++ stlyed INLINE
|
||||
# -Sm support macros like C (global)
|
||||
# -So tries to be TP/BP 7.0 compatible
|
||||
# -Ss constructor name must be init (destructor must be done)
|
||||
# -St allows static keyword in objects
|
||||
# -Sv allow CVAR variable directive
|
||||
|
||||
# Allow goto, inline, C-operators, CVar directive
|
||||
-Sgicv
|
||||
|
||||
# ---------------
|
||||
# Code generation
|
||||
# ---------------
|
||||
|
||||
# Uncomment the next line if you always want static/dynamic units by default
|
||||
# (can be overruled with -CD, -CS at the commandline)
|
||||
#-CS
|
||||
#-CD
|
||||
|
||||
# Set the default heapsize to 8Mb
|
||||
#-Ch8000000
|
||||
|
||||
# Set default codegeneration checks (iocheck, overflow, range, stack)
|
||||
#-Ci
|
||||
#-Co
|
||||
#-Cr
|
||||
#-Ct
|
||||
|
||||
# Optimizer switches
|
||||
# -Og generate smaller code
|
||||
# -OG generate faster code (default)
|
||||
# -Or keep certain variables in registers (still BUGGY!!!)
|
||||
# -Ou enable uncertain optimizations (see docs)
|
||||
# -O1 level 1 optimizations (quick optimizations)
|
||||
# -O2 level 2 optimizations (-O1 + slower optimizations)
|
||||
# -O3 level 3 optimizations (same as -O2u)
|
||||
# -Op target processor
|
||||
# -Op1 set target processor to 386/486
|
||||
# -Op2 set target processor to Pentium/PentiumMMX (tm)
|
||||
# -Op3 set target processor to PPro/PII/c6x86/K6 (tm)
|
||||
|
||||
# Optimize always for Size and Pentium
|
||||
#-OG2p2
|
||||
|
||||
|
||||
# -----------------------
|
||||
# Set Filenames and Paths
|
||||
# -----------------------
|
||||
|
||||
# Slashes are also allowed under dos
|
||||
|
||||
# path to the messagefile, not necessary anymore but can be used to override
|
||||
# the default language
|
||||
#-Fr$1/bin/errore.msg
|
||||
#-Fr$1/bin/errorn.msg
|
||||
|
||||
# path to the gcclib
|
||||
#-Fg$1/lib
|
||||
|
||||
# searchpath for includefiles
|
||||
#-Fi$1/inc;$1/rtl/inc
|
||||
|
||||
# searchpath for units (does the same as -Up)
|
||||
#IFDEF Go32V1
|
||||
-Fu$1/rtl/dos/go32v1
|
||||
#ENDIF
|
||||
#IFDEF Go32V2
|
||||
-Fu$1/rtl/dos/go32v2
|
||||
#ENDIF
|
||||
#IFDEF Win32
|
||||
-Fu$1/rtl/dos/win32
|
||||
#ENDIF
|
||||
|
||||
# searchpath for libraries
|
||||
#-Fl$1/lib
|
||||
#-Fl/lib;/usr/lib
|
||||
|
||||
|
||||
# -------------
|
||||
# Linking
|
||||
# -------------
|
||||
|
||||
# generate always debugging information for GDB (slows down the compiling
|
||||
# process)
|
||||
#-g
|
||||
|
||||
# always pass an option to the linker
|
||||
#-k-s
|
||||
|
||||
# Always strip debuginfo from the executable
|
||||
#-Xs
|
||||
|
||||
|
||||
# -------------
|
||||
# Miscellaneous
|
||||
# -------------
|
||||
|
||||
# Write always a nice FPC logo ;)
|
||||
-l
|
||||
|
||||
# Verbosity
|
||||
# e : Show errors (default) d : Show debug info
|
||||
# w : Show warnings u : Show used files
|
||||
# n : Show notes t : Show tried files
|
||||
# h : Show hints m : Show defined macros
|
||||
# i : Show general info p : Show compiled procedures
|
||||
# l : Show linenumbers c : Show conditionals
|
||||
# a : Show everything 0 : Show nothing (except errors)
|
||||
|
||||
# Display Info, Warnings, Notes and Hints
|
||||
-viwnh
|
||||
# If you don't want so much verbosity use
|
||||
#-vw
|
||||
|
||||
#
|
||||
# That's all folks
|
||||
#
|
||||
endcfg
|
||||
@ -363,7 +363,7 @@ VAR slide : pchar; {Sliding dictionary for unzipping}
|
||||
dlghandle : word; {optional: handle of a cancel and "%-done"-dialog}
|
||||
dlgnotify : integer; {notification code to tell dialog how far the decompression is}
|
||||
|
||||
VAR w : word; {Current Position in slide}
|
||||
VAR w : longint; {Current Position in slide}
|
||||
b : longint; {Bit Buffer}
|
||||
k : byte; {Bits in bit buffer}
|
||||
infile, {handle to zipfile}
|
||||
@ -506,8 +506,8 @@ CONST crc_32_tab : ARRAY [ 0..255 ] of longint =
|
||||
|
||||
{*********************************** CRC Checking ********************************}
|
||||
|
||||
PROCEDURE UpdateCRC ( VAR s : iobuf;len : integer );
|
||||
VAR i : integer;
|
||||
PROCEDURE UpdateCRC ( VAR s : iobuf;len : word );
|
||||
VAR i : word;
|
||||
BEGIN
|
||||
{$ifndef assembler}
|
||||
FOR i := 0 TO Pred ( len ) DO BEGIN
|
||||
@ -1032,7 +1032,7 @@ END;
|
||||
FUNCTION inflate_codes ( tl, td : phuftlist;bl, bd : integer ) : integer;
|
||||
VAR
|
||||
n, d, e1, {length and index for copy}
|
||||
ml, md : word; {masks for bl and bd bits}
|
||||
ml, md : longint; {masks for bl and bd bits}
|
||||
t : phuft; {pointer to table entry}
|
||||
e : byte; {table entry flag/number of extra bits}
|
||||
|
||||
@ -1100,7 +1100,7 @@ BEGIN
|
||||
ELSE e1 := WSIZE -w;
|
||||
IF e1 > n THEN e1 := n;
|
||||
dec ( n, e1 );
|
||||
IF ( w -d >= e1 ) THEN BEGIN
|
||||
IF ( longint(w) -d >= e1 ) THEN BEGIN
|
||||
move ( slide [ d ], slide [ w ], e1 );
|
||||
inc ( w, e1 );
|
||||
inc ( d, e1 );
|
||||
|
||||
Loading…
Reference in New Issue
Block a user