Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Abbiamo provato per molti giorni il nuovo Z Fold7 di Samsung, un prodotto davvero interessante e costruito nei minimi dettagli. Rispetto al predecessore, cambiano parecchie cose, facendo un salto generazionale importante. Sarà lui il pieghevole di riferimento? Ecco la nostra recensione completa.
The Edge of Fate è Destiny 2.5. E questo è un problema
The Edge of Fate è Destiny 2.5. E questo è un problema
Bungie riesce a costruire una delle campagne più coinvolgenti della serie e introduce cambiamenti profondi al sistema di gioco, tra nuove stat e tier dell’equipaggiamento. Ma con risorse limitate e scelte discutibili, il vero salto evolutivo resta solo un’occasione mancata
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
AMD ha aggiornato l'offerta di CPU HEDT con i Ryzen Threadripper 9000 basati su architettura Zen 5. In questo articolo vediamo come si comportano i modelli con 64 e 32 core 9980X e 9970X. Venduti allo stesso prezzo dei predecessori e compatibili con il medesimo socket, le nuove proposte si candidano a essere ottimi compagni per chi è in cerca di potenza dei calcolo e tante linee PCI Express per workstation grafiche e destinate all'AI.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-01-2010, 19:48   #1
domenico88
Senior Member
 
L'Avatar di domenico88
 
Iscritto dal: Dec 2009
Messaggi: 1056
[C]Scrivere un make file

Ciao a tutti....non bastonatemi per il tipo del linguaggio tra parentesi...ma non sapevo che mettere....

Mi date delle dritte su come capire e scrivere il makefile
Codice:
CC=/usr/bin/gcc
OGGETTI=  main.o command.o display.o insert.o 

pippo : main.o command.o display.o insert.o
	 ${CC}   -o    $@     ${OGGETTI} 
main.o : main.c defs.h
	 ${CC}   -c     $?  
command.o : command.c defs.h command.h
	 ${CC}   -c     $?
display.o : display.c defs.h buffer.h
	 ${CC}   -c     $?
insert.o : insert.c defs.h buffer.h
	 ${CC}   -c     $?
clean :
	rm pippo ${OGGETTI}
Es su questo makefile Le macro interne sono
$@ = il target corrente e quale sarebbe??
$? = FIle di dipendenza che sono più recenti del target corrente

grazie per l'attenzione...
domenico88 è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2010, 22:12   #2
Teo@Unix
Senior Member
 
L'Avatar di Teo@Unix
 
Iscritto dal: Mar 2009
Messaggi: 753
Ciao,
il makefile non è altro che uno script, quindi un file dove metti le istruzioni che dovresti riscriverti tutte le volte che vuoi compilare ecc...
ma questo mi sembra che già lo hai capito.

Da quel che ho visto si tratta di uno script interpretabile da una shell Unix.

Forse quel ti confonde sono "$@" e "$?"...

Il primo, nei sistemi Unix rappresenta un array di stringhe che contiene tutti gli argomenti che seguono un comando shell... (uno per stringa) nel tuo caso se digito make FileElf A B C ...

nello script "$@" è un array di stringhe e se lo stampo ottengo:
FileElf
A
B
C

quindi la prima riga:
${CC} -o <argomenti passati> ${OGGETTI}


Il secondo, contiene un intero il cui valore dipende dall'esito del comando precedente.... 0 se il comando precedente è stato eseguito con successo.
O un numero intero positivo che specifica il tipo di errore se il comando ha fallito

Quote:
Originariamente inviato da domenico88 Guarda i messaggi
$? = FIle di dipendenza che sono più recenti del target corrente
però qui non ho capito a cosa servirebbe....
o magari mi sfugge ora guardandolo velocemente....
Teo@Unix è offline   Rispondi citando il messaggio o parte di esso
Old 09-01-2010, 12:45   #3
domenico88
Senior Member
 
L'Avatar di domenico88
 
Iscritto dal: Dec 2009
Messaggi: 1056
Quote:
il makefile non è altro che uno script, quindi un file dove metti le istruzioni che dovresti riscriverti tutte le volte che vuoi compilare ecc...
ma questo mi sembra che già lo hai capito.
uhm insomma...cioè serve per non compilare e ricompilare tutti i sorgenti uno per volta?
Non mi è molto chiaro..

Da quel che ho visto si tratta di uno script interpretabile da una shell Unix.

Quote:
Forse quel ti confonde sono "$@" e "$?"...

Il primo, nei sistemi Unix rappresenta un array di stringhe che contiene tutti gli argomenti che seguono un comando shell... (uno per stringa) nel tuo caso se digito make FileElf A B C ...


Mica sai dove posso trovare qualche esempio di make file???
domenico88 è offline   Rispondi citando il messaggio o parte di esso
Old 09-01-2010, 13:27   #4
Teo@Unix
Senior Member
 
L'Avatar di Teo@Unix
 
Iscritto dal: Mar 2009
Messaggi: 753
Quote:
Originariamente inviato da domenico88 Guarda i messaggi


Mica sai dove posso trovare qualche esempio di make file???
Ok, scusa...

ecco alcuni link dove puoi trovare esempi e spiegazioni...
http://www.pluto.it/files/journal/pj9811/makefile.html
http://programmazione.html.it/guide/...ed-i-makefile/


cmq ti assicuro che non è molto complicato come sembra. Magari inizia con alcuni esempi semplici... tipo questo:

Codice:
# Compiler gcc version 4.3.3

CC = gcc
SOURCES = firstdump.c fd_functiones.c IPopt.c TCPopt.c
LIB = pcap
PARAM = -g -v -static

EXUTABLE = FirstDump



all:
	$(CC) $(PARAM) $(SOURCES) -l$(LIB) -o $(EXUTABLE)
	
clean:	
	rm -f $(EXUTABLE)
	
clean_all:
	rm -f $(EXUTABLE) *.o* *~ *.gch
	
compile_source_only:
	$(CC) $(PARAM) -c $(SOURCES)
	
link:
	$(CC) $(PARAM) firstdump.o -l$(LIB) -o $(EXUTABLE)
come vedi, prima ho dichiarato una serie di variabili, che contengono sorgenti librerie, parametri e tutto quello che potrebbe servirmi per la compilazione...

Puoi così crearti delle stringhe etichettate che eseguiranno le operazioni. Quando incontri il simbolo "$" significa che la variabile posta di seguito deve essere interpretata per il suo contenuto, così la stringa "$(PARAM)" per la shell sarà: "-g -v -static". Dovrebbe esserti chiaro quindi che quando esegui "make etichetta". La shell andrà a cercarsi le operazioni etichettate con etichetta e le eseguirà.
Se dai solo "make" di default viene cercata l'etichetta "all". Difatti molti programmi sotto linux si compilano proprio con "make" seguito da "all", o solo "make"

Per esempio nel makefile che ti ho postato, se do "make clean"
la shell eseguirà:
rm -f $(EXUTABLE)
ovvero:
rm -f FirstDump
ripulendo la soluzione del programma.
Teo@Unix è offline   Rispondi citando il messaggio o parte di esso
Old 09-01-2010, 14:02   #5
khelidan1980
Senior Member
 
L'Avatar di khelidan1980
 
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
Quote:
Originariamente inviato da domenico88 Guarda i messaggi
uhm insomma...cioè serve per non compilare e ricompilare tutti i sorgenti uno per volta?
Non mi è molto chiaro..
Mi sfugge una cosa, ti sei messo a scrivere un make file senza sapere a cosa serva un make file?
__________________
Khelidan
khelidan1980 è offline   Rispondi citando il messaggio o parte di esso
Old 09-01-2010, 15:11   #6
domenico88
Senior Member
 
L'Avatar di domenico88
 
Iscritto dal: Dec 2009
Messaggi: 1056
Quote:
Originariamente inviato da khelidan1980 Guarda i messaggi
Mi sfugge una cosa, ti sei messo a scrivere un make file senza sapere a cosa serva un make file?
No no no... quello che ho postato io era un esempio scritto sulle mie slide dell'uni...
domenico88 è offline   Rispondi citando il messaggio o parte di esso
Old 09-01-2010, 15:17   #7
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Quote:
Originariamente inviato da domenico88 Guarda i messaggi
No no no... quello che ho postato io era un esempio scritto sulle mie slide dell'uni...
Per che esame, se posso chiedere?
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 09-01-2010, 15:23   #8
domenico88
Senior Member
 
L'Avatar di domenico88
 
Iscritto dal: Dec 2009
Messaggi: 1056
Comeeee non puoi chiedere!

Devo fare un esame di Algoritmi e strutture dati, che contiene anche un modulo di ambienti di programmazione...tipo scrivere un makefile per il programma assegnato, scope statico e dinamico, conversioni in floating point , creazione di librerie(che ancora non ho fatto! ) ecc...

cmq ora mi metto un pò e vediamo di capirlo...
domenico88 è offline   Rispondi citando il messaggio o parte di esso
Old 09-01-2010, 16:19   #9
domenico88
Senior Member
 
L'Avatar di domenico88
 
Iscritto dal: Dec 2009
Messaggi: 1056
Quote:
Originariamente inviato da Teo@Unix Guarda i messaggi

Codice:
# Compiler gcc version 4.3.3

CC = gcc
SOURCES = firstdump.c fd_functiones.c IPopt.c TCPopt.c
LIB = pcap
PARAM = -g -v -static

EXUTABLE = FirstDump



all:
	$(CC) $(PARAM) $(SOURCES) -l$(LIB) -o $(EXUTABLE)
	
clean:	
	rm -f $(EXUTABLE)
	
clean_all:
	rm -f $(EXUTABLE) *.o* *~ *.gch
	
compile_source_only:
	$(CC) $(PARAM) -c $(SOURCES)
	
link:
	$(CC) $(PARAM) firstdump.o -l$(LIB) -o $(EXUTABLE)
come vedi, prima ho dichiarato una serie di variabili, che contengono sorgenti librerie, parametri e tutto quello che potrebbe servirmi per la compilazione...

Puoi così crearti delle stringhe etichettate che eseguiranno le operazioni. Quando incontri il simbolo "$" significa che la variabile posta di seguito deve essere interpretata per il suo contenuto, così la stringa "$(PARAM)" per la shell sarà: "-g -v -static". Dovrebbe esserti chiaro quindi che quando esegui "make etichetta". La shell andrà a cercarsi le operazioni etichettate con etichetta e le eseguirà.
Se dai solo "make" di default viene cercata l'etichetta "all". Difatti molti programmi sotto linux si compilano proprio con "make" seguito da "all", o solo "make"

Per esempio nel makefile che ti ho postato, se do "make clean"
la shell eseguirà:
rm -f $(EXUTABLE)
ovvero:
rm -f FirstDump
ripulendo la soluzione del programma.
grazie teo sei stato gentilissimo...


Cmq delle cose non mi sono chiare....Tipo la shell?Non so che cosa sia...

Cmq per il resto...
PARAM = -g -v -static ad esempio
-g -v -static che cosè?

nel clean
rm -f $(EXUTABLE)
cosa significa?

Dopo la Variabile $(LIB) c'è -o cosa significa?

Scusa per tutte ste domande ma ho le idee un pò cofuse su queste cose...
ciao
domenico88 è offline   Rispondi citando il messaggio o parte di esso
Old 09-01-2010, 16:50   #10
Teo@Unix
Senior Member
 
L'Avatar di Teo@Unix
 
Iscritto dal: Mar 2009
Messaggi: 753
Quote:
Originariamente inviato da domenico88 Guarda i messaggi
Cmq delle cose non mi sono chiare....Tipo la shell?Non so che cosa sia...
La "shell" è come il "promt dei comandi" di win nei sistemi Unix,Linux e derivati.
Quote:
PARAM = -g -v -static ad esempio
-g -v -static che cosè?
questi sono delle opzioni che passo al compilatore.
"-g" specifica a gcc di includere le informazioni di debug nell'eseguibile. Questo mi permetterà di poter fare il debug del programma.
"-v" significa "verbose" ovvero l'ouput del compilatore sarà più dettagliato (diciamo che se non vuoi vedere tutto quello che fa il compilatore non serve)
"-static" indica di linkare le librerie in modo statico. E' importante se vuoi utilizzare il programma in altri pc senza portarti dietro le librerie. Tutte le funzioni delle librerie saranno già incluse nel file eseguibile e non si avranno problemi di dipendenza.

Quote:
rm -f $(EXUTABLE)
cosa significa?
è un comando Unix che significa cancella in modo forzato se è necessario i file specificati dall'etichetta (saranno gli eseguibili...)

Quote:
Dopo la Variabile $(LIB) c'è -o cosa significa?
... ...mi vien da pensare che non hai mai compilato quindi...
"-o" specifica che deve essere eseguita anche la fase di link finale e l'eseguibile deve essere creato con il nome che segue. Nell'esempio il nome sarà "FirsDump" specificato da "EXUTABLE". Ma ora dovrebbe esserti chiaro.

Ultima modifica di Teo@Unix : 09-01-2010 alle 16:52.
Teo@Unix è offline   Rispondi citando il messaggio o parte di esso
Old 09-01-2010, 19:06   #11
domenico88
Senior Member
 
L'Avatar di domenico88
 
Iscritto dal: Dec 2009
Messaggi: 1056
grazie grazie chiarissimo
Ma ci sono delle limitazioni se non ho mai compilato???
Come dovrei fare?
domenico88 è offline   Rispondi citando il messaggio o parte di esso
Old 09-01-2010, 19:27   #12
domenico88
Senior Member
 
L'Avatar di domenico88
 
Iscritto dal: Dec 2009
Messaggi: 1056
Non ho capito una cosa essenzialmente...
Quando ad esempio ho un file sorgente prova.c per compilarlo con l'aggiuta di opzioni specifiche come devo fare???
domenico88 è offline   Rispondi citando il messaggio o parte di esso
Old 09-01-2010, 20:51   #13
Teo@Unix
Senior Member
 
L'Avatar di Teo@Unix
 
Iscritto dal: Mar 2009
Messaggi: 753
no non c'è proprio nessuna limitazione se non hai mai compilato....

però dovresti fare un pò di pratica.... prima di scrivere makefile,
questi diventano molto utili solo quando il programma è complesso ed hai più moduli da assemblare.

se hai un sorgente per esempio "prova.c" e ammettiamo anche il suo header "prova.h", per creare il programma eseguibile occorre procedere così:

innanzi tutto se nel file .c vi è la definizione #include "prova.h"
possiamo considerare anche solo il file .c ( questa è la situazione più comune, il file .h basta che si trova nella stessa directory o dove dice la direttiva include... )

dalla shell Linux:
:~$ gcc prova.c -v -g prova.c -o prova

dove come ho detto, -v aumenta il livello di dettagli (facoltativo)
-g include info per il debug (a mio parere è molto utile quindi)
-o indica di creare il programma eseguibile di nome prova

sempre nella shell per provare il tuo programma darai

:~$ ./prova

quindi a questo livello il makefile non serve a molto...

ammettiamo tu abbia 20 file sorgente .c ...... scrivendoti il makefile i comandi completi di compilazione li scriverai una volta ....

Se lavori su Linux (che è l'ideale per capire) ti conviene studiarti un pò la shell Linux.... in modo che sai muoverti nel sistema.... e dare i comandi.
Teo@Unix è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2010, 13:43   #14
domenico88
Senior Member
 
L'Avatar di domenico88
 
Iscritto dal: Dec 2009
Messaggi: 1056
ciao raga mi riallaccio ad un 3d precedente....allora ho scritto un makefile per il seguente esercizio....


devo scrivere un makefile con
un target main utilizzato per generare l'eseguibile con nome prova1 a partire dai file : bool.h list.h list.c info.h info.c prova1.c

main è il target richiamato quando viene invocato make senza parametri
La compilazione deve essere effettuata con il compilatore gcc in modo da visualizzare tutti i warning e con il livello di ottimizzazione 3

poi usare il target clean per eliminare tutti i file oggetto generati precedentemente

allora io l'ho fatto così

Codice:
#Makefile per prova1

CC = gcc
CFLAGS = -wall -g
OPTIMIZE = -03
OBJECTS = prova1.o list.o info.o

all: main

main:
          $(CC) $(CFLAGS) $(OPTIMIZE) $(OBJECTS) -o prova1
prova1.o: list.h

list.o: list.h
info.o: info.h bool.h

clean:
          rm prova1 $(OBJECTS)
per Teo....dammi un consiglio su questo make

Grazie a tutti per l'attenzione
domenico88 è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2010, 15:41   #15
Teo@Unix
Senior Member
 
L'Avatar di Teo@Unix
 
Iscritto dal: Mar 2009
Messaggi: 753
Quote:
Originariamente inviato da domenico88 Guarda i messaggi
Codice:
#Makefile per prova1

CC = gcc
CFLAGS = -wall -g
OPTIMIZE = -03
OBJECTS = prova1.o list.o info.o

all: main

main:
          $(CC) $(CFLAGS) $(OPTIMIZE) $(OBJECTS) -o prova1
prova1.o: list.h

list.o: list.h
info.o: info.h bool.h

clean:
          rm prova1 $(OBJECTS)
per Teo....dammi un consiglio su questo make
i parametri mi sembrano ok, non so perchè utilizzi i file oggetto, non è più semplice usare i .c e non considerare gli header?
Quote:
innanzi tutto se nel file .c vi è la definizione #include "prova.h"
possiamo considerare anche solo il file .c ( questa è la situazione più comune, il file .h basta che si trova nella stessa directory o dove dice la direttiva include... )
..cioè io farei come ho fatto nell'esempio che ti ho postato, così ho anche la possibilità di non eseguire la fase di link... però vedì tu ...

metterei poi una variabile "SOURCES" dove indicherò i moduli .c e anche per l'eseguibile "EXUTABLE"

quindi clean: mi verrebbe da farlo cosi:
"rm -f $(EXUTABLE) *.o* *~ *.gch"

nel makefile devi ridurre al minimo tutti i riferimenti diretti, allora avrai un make file veramente utile)
alla fine il principio di un makefile è proprio questo; che faccia il suo sporco lavoro e che ci dia il meno da fare possibile nel caso cambiamo qualcosa nel progetto.

potresti aggiungere anche variabili vuote, nella prima parte potresti dichiarare ad esempio "LIB", che in questo caso lasci nulla, ma che includerai come variabile dentro le procedure.
potrebbe servire poi quando al programma vengono aggiunte librerie... ed eviti di dover poi andare a cercare tutti i posti dove serviva indicarle, facendoti risparmiare fatica e tempo... (questo era solo per dire come procedere in generale)
Teo@Unix è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2010, 16:05   #16
domenico88
Senior Member
 
L'Avatar di domenico88
 
Iscritto dal: Dec 2009
Messaggi: 1056
Grazie

Quindi invece di inizializzare una variabile OBJECTS potrei direttamente farlo con i sorgenti e togliere gli header quindi
SOURCES = prova1.c info.c list.c

e il clean farlo così:
rm -f $(EXUTABLE) *.o* *~ *.gch*
ma che differenza c'è senza quei parametri dopo l'exutable?
domenico88 è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2010, 16:17   #17
Teo@Unix
Senior Member
 
L'Avatar di Teo@Unix
 
Iscritto dal: Mar 2009
Messaggi: 753
si, tra l'altro, ora che guardo il tuo esempio, non funzionerebbe perchè gli header non contengono e non devono contenere la dichiarazione #include "file.c" ....

nel makefile e nella compilazione in generale, i file header devi "dimenticarli"

i parametri *.o *~* *.gch
servono per rimuovere a prescindere dal nome tutti i file oggetto (.o), file di backup (finale con ~ ) e gch. Ho utilizzato le espressioni regolari (regexp)... semmai dacci un occhio, cmq a scopo di non mettere troppa carne al fuoco posticiperei le regexp.
Teo@Unix è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2010, 16:46   #18
domenico88
Senior Member
 
L'Avatar di domenico88
 
Iscritto dal: Dec 2009
Messaggi: 1056
quindi potrei farlo così:
Codice:
CC = gcc
OPTIMIZE = -03
CFLAGS = -wall -g
LIB =
SOURCES = prova1.c info.c list.c
EXUTABLE = prova1

all: main

main:
     $(CC) $(CFLAGS) $(OPTIMIZE) $(SOURCES) -o $(EXUTABLE)

clean:
      rm -f $(EXUTABLE) *.o* *~ *.gch*
Quindi gli header vengono trovati automaticamente a partire dai .c?
domenico88 è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2010, 17:34   #19
Teo@Unix
Senior Member
 
L'Avatar di Teo@Unix
 
Iscritto dal: Mar 2009
Messaggi: 753
Quote:
Originariamente inviato da domenico88 Guarda i messaggi
quindi potrei farlo così:
Codice:
CC = gcc
OPTIMIZE = -03
CFLAGS = -wall -g
LIB =
SOURCES = prova1.c info.c list.c
EXUTABLE = prova1

all: main

main:
     $(CC) $(CFLAGS) $(OPTIMIZE) $(SOURCES) -o $(EXUTABLE)

clean:
      rm -f $(EXUTABLE) *.o* *~ *.gch*
Quindi gli header vengono trovati automaticamente a partire dai .c?
Se i file .c contengono #include "header.h"; assolutamente si.

Direi che va bene, in futuro se hai necessità di aggiungere librerie o moduli dovrebbe esserti sufficiente andare a toccare solo le variabili all'inizio.
In questo semplice caso non ti darebbe questo gran vantaggio, ma nel caso di progetti complessi, si.

P.S.
per il clean .gch non deve finnire con un'altro asterisco, basta: *.gch

Ultima modifica di Teo@Unix : 12-01-2010 alle 17:36.
Teo@Unix è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy Z Fold7: un grande salto generazionale Recensione Samsung Galaxy Z Fold7: un grande sal...
The Edge of Fate è Destiny 2.5. E questo è un problema The Edge of Fate è Destiny 2.5. E questo ...
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello Ryzen Threadripper 9980X e 9970X alla prova: AMD...
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale Acer TravelMate P4 14: tanta sostanza per l'uten...
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
SpaceX Starship: Ship 37 ha eseguito due...
Sharkoon punta sui case a basso costo, m...
La tua rete Wi-Fi fa pena? Questi FRITZ!...
Amazon, un weekend di fuoco per gli scon...
Ancora 3 smartwatch Amazfit in forte sco...
Sharkoon A60 RGB: dissipatore ad aria du...
HONOR 400 Pro a prezzo bomba su Amazon: ...
Offerte da non perdere: robot aspirapolv...
Apple Watch e Galaxy Watch ai minimi sto...
Il rover NASA Perseverance ha ''raccolto...
NASA e ISRO hanno lanciato il satellite ...
Switch 2 ha venduto 5,82 milioni di cons...
Assassin's Creed Black Flag Remake: le m...
Cosa ci fa una Xiaomi SU7 Ultra alle por...
Promo AliExpress Choice Day: prezzi stra...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:55.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v