Kompilacja jakiegokolwiek programu na przykladzie podstawowego "magpxx"
za pomoc Free Pascal 2.0.4
=======================================================================

rda programu s spakowane w plikach:
pxe.tgz
news*.tgz

S to pakiety spakowane programem TAR. W rodowisku Windows do ich odpakowania
moe posyy program "7zip".
Naley rozpakowa te pliki w dowolnym (zalecam - pustym) katalogu.
rda dostarczane s w wersji dla Linuksa, aby skompilowa je dla Windows
32 (i386) naley w pliku "lin_prj.pas" ustawi odpowiedni flag kompilacji.
Kompilacja daje si przeprowadzi we FreePascal'u tylko na koncie
administratora, albo z jego uprawnieniami.

Pliki konfigurujace kompilacj to lin_prj.pas i mag_prj.pas. Sa opisane w
srodku.

Kompilacja Linux i386:

fpc -So readscr.pas
fpc df.pas
fpc fpserial.pas
fpc pxengine.pp
fpc -So magpxx.pas

Kompilacja Windows 32 i386:

fpc -So readscr.pas
fpc df.pas
fpc fpserial.pp
fpc pxengine.pp
fpc -So magpxx.pas

---------------------------------------------------------
Przykladowy program z uzyciem frameworka pxengine.pp:

(zaklada klucz podstawowy na paramstr(2) pierwszych pol
tabeli, procedura px0 zatrzyma wykonanie programu przy bledzie
i da stosowny kompunikat)

{$G+,N+,E+}
{$I PX_PRJ}
{$I MAG_PRJ}
{$IFDEF LINUX}
{$M 10485760,0,10485760}
{$ELSE}
{$M 65519,0,204800}
{$ENDIF}
uses dos,crt,
pxengine,pxoute,pxutil,pxutil2,rafiles;

var idx:fieldhandle;fha:fieldhandlearray;z:integer;
begin
test_tmpdir; {sprawdzenie, gdzie jest katalog TMP}
val(paramstr(2),idx,z);if z<>0 then halt(1);
px0(pxsetdefaults(64,1,2,1,50,sortorderintl)); {podawane procedurze
parametry sa tylko dla zachowania zgodnosci z pxengine Borlanda}
px0(pxinit);
px0(pxkeyaddprimary(paramstr(1),idx));
px0(pxexit);
px0(pgexit);
end.


---------------------------------------------------------
Przykladowy program z uzyciem okienek typowych dla MagAD
(wszystkie napisy musza byc robione w standardzie Mazovia,
wiec nalezy stosowac edytor, gdzie mozna wprowdzac dowolne znaki (joe),
albo jakis emulator klawiatury)

{$G+}
{$I PX_PRJ}
{$I MAG_PRJ}
{$IFDEF LINUX}
{$M 10485760,0,10485760}
{$ELSE}
{$M 65519,0,204800}
{$ENDIF}
uses dos,readscr,readscr1;

procedure koniec;far;
begin
ustaw_tryb(3);
end;

begin
exitproc:=@koniec;
if ifcv then begin
ustaw_tryb(3);
tryb:=tryb_ekr;
init_interface;
             end;
komunikat('Kopiowanie zakoczone.',0);
end.
---------------------------------------------------------

Przykladowy program drukujacy dokument (opis typow dokumentow
w opisie programu, opisie baz danyc programu, w tabeli dane_dok_plat).

    I   123 drukdok.pas                           Row 1    Col 1    8:44  Ctrl-K H for help
{
program drukuje dokument z magazynu paramstr(2), typu paramstr(3),
numer paramstr(4), znak paramstr(5), rok paramstr(6)
uzytkownik - Kierownik Systemu
}
 
{$G+,N+,E+}
{$I PX_PRJ}
{$I MAG_PRJ}
{$IFDEF LINUX}
{$M 10485760,0,10485760}
{$ELSE}
{$M 65519,0,204800}
{$ENDIF}
uses dos,crt,
pxengine,str_oper,pxoute,pxutil,pxutil2,rafiles,readscr,readscr1,
net_util,konf_,dcnr,dokum,magpxdat,wydruk0,wydruk;

procedure koniec;far;
begin
pxexit;
pgexit;
ustaw_tryb(3);
end;


var nrd,nr_mag:longint;typd,rok,z:integer;znd,zbior:string;
t:tablehandle;r:recordhandle;
begin
exitproc:=@koniec;
if ifcv then begin
ustaw_tryb(3);
tryb:=tryb_ekr;
init_interface;
             end;
{ustawienie uzytkownika}
u_nr:=0;
u_imi:=#255+'Kierownik';
u_naz:='Systemu';
str(u_nr,zbior);
if length(zbior)>8 then insert('.',zbior,9);
u_katal:='dane\uzytkown\'+zbior;
u_haslo:='';
for z:=1 to 8 do u_upr[z]:=$7FFF;

test_tmpdir; {sprawdzenie, gdzie jest katalog TMP}
czytaj_konf; {odczyt glownego pliku konfiguracyjnego}
podaj_def_ind; {sprawdzenie konfiguracji nazw slownikow typu autor, a zarazem pol danych w 

val(paramstr(2),nr_mag,z);if z<>0 then halt(1);
typd:=mklongver(paramstr(3));
nrd:=mklongver(paramstr(4));
znd:=paramstr(5);
rok:=mklongver(paramstr(6));

px0(pxsetdefaults(64,1,2,1,50,sortorderintl)); {inicjacja framework - polaczenie z baza dan
px0(pxinit); {zerowanie zmiennych framework}
read_diskbdir; {odczyt konfigueacji, gdzie sa miejsca A i B}
kontrdlalfa; {sprawdzenie dlugosci pola indeksu alfanumerycznego, np. ISBN}
czytaj_sterownik(drsc); {odczyt sterownika drukarki}
str(nr_mag,zbior);
if length(zbior)>8 then insert('.',zbior,9);
px0(pxtblopen('dane\'+zbior+'\naglowki',t,0,FALSE)); {przyporzadkowanie
uchytu t tabeli o nazwie przetwarzanej funkcja pxengine.str_makename
na normalna nazwe tabeli, zalozenie sortowania otwieranych kursorow
na klucz glowny, parametr FALSE jest nieistotny}
px0(pxrecbufopen(t,r)); {otwarcie bufora rekordow - uchwyt r dla tabeli o uchwycie t}
nrd:=m_cnr(rok,nrd);{przekodowanie numeru dokumentu na system wewnetrzny - funkcja z modulu
wprow:=typd;
drukdok(t,r,nrd,znd,0,0);{i wreszcie wlasciwy wydruk dokumentu}
px0(pxrecbufclose(r));
px0(pxtblclose(t));
end.
