Newsgroup: it.comp.os.linux.development
Titolo: Libreria per la unit Graph di FreePascal

Ho cercato di usare la unit graph del free pascal ma nella procedura InitGraph
non so cosa specificare come terzo parametro (path delle librerie da
utilizzzare). Qualcuno mi sa aiutare? Mi hanno parlato di svgalib ma dove le
trovo? E il file che deve richiamare č una unit compilata?
Grazie


Ciao,
svgalib la trovi al solito su freshmeat o su linuxberg (vedi il post
periodico con gli indirizzi utili). E' comunque assai probabile che te
l'abbia installata automaticamente la tua distribuzione e se no che tu
la possa trovare sul cd della stessa.
Una volta che svgalib è a posto (a proposito, non è una unit specifica
di freepascal, è una libreria grafica generica per svga in modo console,
cioè che non richiede X), in freepascal basta fare come in TP, cioè
qualcosa tipo:
        { Inizializza la grafica }
        gd := 0;
        gm := G1024x768x256;
        InitGraph(gd, gm, '');
        if GraphResult <> grOK then Halt(1);
        MaxX := GetMaxX;
        MAXY := GetMaxY;
        ClearViewport;
	{ eccetera eccetera }
In altre parole, del terzo parametro non frega niente a nessuno.
Dimenticavo, attenzione che per usare svgalib occorre essere root
o che il programma che la usa giri coi privilegi di root.
-- 
Ciao ciao.
                                                       +++ Giuseppe


Grazie, 
io in TP7 ho scritto (e funziona!)
	GraphDriver:=Detect; 
	GraphMode :=0; 
	InitGraph(GraphDriver,GraphMode,'c:\tp\bgi\'); 
	ErrorCode:=GraphResult; 
	if ErrorCode<>grOK then 
		begin 
		writeln('errore grafico ',grapherrormsg(ErrorCode)); 
		halt; 
		end; 
Cioč la directory (delle bgi invece che delle svga) gliel'ho data ma la mode
l'ho ottenuta con Detect. Si puň fare anche con FreePascal?
Ciao
	Lorenzo  

	Lorenzo  
Sì: sotto freepascal Detect e zero sono la stessa cosa. Almeno, così dice la
documentazione ed il comportamento di un programmino di prova lo conferma:
mettendo 0 oppure detect funziona esattamente allo stesso modo, andando nel
modo video con più risoluzione e più colori disponibile (nel mio caso, con
SVGALIB configurata nel modo VESA, 1152x864x32k).
Una cosa che invece non mi torna tra documentazione e funzionamento reale è
che la doc dice che mettendo in gd un numero diverso da zero e in gm il
modo voluto dovrebbe andare nel modo richiesto... Le poche prove che ho
fatto mi hanno pero' sempre ritornato errore (boh). Per settare il modo
voluto occorre dare esplicitamente una SetGraphMode() come mostrato sotto.
Program ProvaGR;
uses Graph;
var GraphDriver, GraphMode, MaxX, MaxY, MaxC, ErrCode: integer;
begin
	GraphDriver := Detect;
	GraphMode := 0;
	InitGraph(GraphDriver, GraphMode, '');
	ErrCode := GraphResult;
	if ErrCode <> grOK then begin
		writeln('errore grafico ',grapherrormsg(ErrCode));
		halt;
	end;
	SetGraphMode(G1024x768x32k);
	MaxX := GetMaxX;
	MaxY := GetMaxY;
	MaxC := GetMaxColor;
	WriteLn('Modo video: ',MaxX,'x',MaxY,'x',MaxC);
	ClearViewport;
	SetColor($7c00); { questo è il rosso }
	Line(0,0,MaxX,MaxY);
	Line(0,MaxY,MaxX,0);
	readln;
end.
Un'altra cosa che ho scoperto (e non sono riuscito sinora a trovare menzionata
nella documentazione, forse perchè ritenuta ovvia) è che le costanti di colore
(Red, Green, ecc.) non vanno, occorre specificare a manina il colore come
numero. Del resto è abbastanza logico, anche in TP7 mi pare sia lo stesso se
si usano i modi VESA.
Ultima cosa, la documentazione dice che il famoso path in InitGraph serve solo
se si usano i font della BGI del TP, nel qual caso deve puntare alla directory
dove si trovano gli stessi.
Ah, tutto questo con la versione 0.99.14 di fpc e SVGALIB 1.4.0 su una Mandrake
7.0 .


Ciao ciao.
Ciao
	Lorenzo

In effetti anche senza specificare il percorso trova la svgalib però all'avvio
del programma scrive
Oak driver: unknown chipset (id=0)
Using VGA driver
e quando va a eseguire initgraph, appare
svgalib: Signal 11: Segmentation fault received
Runtime error 216
Cosa posso fare?
 

Cosa posso fare?
vi /etc/vga/libvga.config
-- 
ciao, | [Per rispondere togli "toglimi" dal mio indirizzo.]
Marco | * The Internet is full. Go away.  -- Joel Furr *
      | (Ri)scoprire fidonet: 
http://bbs.mi.linux.it

>Ultima cosa, la documentazione dice che il famoso path in InitGraph serve solo

Ti consiglio di aggiornare almeno freepascal, libc permettendo. Nella
versione 0.99.12 le ultime mancanze della libreria grafica sono state
risolte (ad es. nella 0.99.12 non funzionava il fill, pieno o con
pattern, quindi procedure tipo FilleEllipse, ecc. erano inusabili). Per
il resto, ti ha già risposto Marco D'Itri: devi editare il file
/etc/vga/libvga.config abilitando la riga corrispondente alla tua scheda
video nella sezione "Chipset type". Nella 1.4.0 sono previsti i chipset
Oak 037/067/067.
Se proprio la tua scheda video non è supportata da svgalib, perchè usa
un chipset diverso da quelli indicati, prova a configurarla, come ho
fatto io, come VESA generica, abiltando la riga corrispondente nel file
di configurazione già citato.
Il fatto che non vedi niente può essere causato semplicemente dal fatto
che in quell'esempio setto il colore delle linee tracciate in una
maniera che va bene per un modo a 32K colori, ma non per uno a 16.
Prima comunque di preoccuparti di questo, vedi di far riconoscere
correttamente la tua scheda a SVGALIB.
