PDA

View Full Version : [C] Unix - colori console && make


iPoster
11-09-2006, 07:35
Salve! Mi trovo a dover programmare un semplice programmino con interfaccia puramente testuale, quindi da far partire dalla console. Mi chiedevo se era possibile evidenziare le richieste e gli errori con colori diversi. Mi sapreste dire come?
Inoltre vorrei, una volta concluso il tutto, creare un pacchetto, cosa mi consigliate tra makefile e makeinstall? Per fare un pacchetto che sia compilato da emerge di Gentoo mi basta un file .c giusto?
Ringraziamenti anticipati per le risposte... :)

trallallero
11-09-2006, 08:06
Salve! Mi trovo a dover programmare un semplice programmino con interfaccia puramente testuale, quindi da far partire dalla console. Mi chiedevo se era possibile evidenziare le richieste e gli errori con colori diversi. Mi sapreste dire come?
Inoltre vorrei, una volta concluso il tutto, creare un pacchetto, cosa mi consigliate tra makefile e makeinstall? Per fare un pacchetto che sia compilato da emerge di Gentoo mi basta un file .c giusto?
Ringraziamenti anticipati per le risposte... :)
Unix ... console .. a colori ??? :rotfl:
Che io sappia no ma puoi (con delle escape sequences) evidenziare con il "bold on" "bold off"
Non conosco Gentoo ma se servono info per il makefile io ci ho lavorato tanto ...

andbin
11-09-2006, 08:10
Salve! Mi trovo a dover programmare un semplice programmino con interfaccia puramente testuale, quindi da far partire dalla console. Mi chiedevo se era possibile evidenziare le richieste e gli errori con colori diversi. Mi sapreste dire come?Puoi usare le sequenze di escape ECMA-48 SGR (vedi <qui> (http://linux.about.com/library/cmd/blcmdl4_console_codes.htm)) che sono supportate nativamente dalla console di Linux.
Esempio:

printf ("\e[31;1mERRORE!\e[0m\n");

Inoltre vorrei, una volta concluso il tutto, creare un pacchetto, cosa mi consigliate tra makefile e makeinstall?Se il progetto non è particolarmente complicato in genere basta un semplice Makefile.

trallallero
11-09-2006, 08:40
Puoi usare le sequenze di escape ECMA-48 SGR (vedi <qui> (http://linux.about.com/library/cmd/blcmdl4_console_codes.htm)) che sono supportate nativamente dalla console di Linux.
Esempio:

printf ("\e[31;1mERRORE!\e[0m\n");
ma lui usa Unix non Linux (o almeno cosí doce il titolo). Io ho provato il tuo esempio ma non funge (é vero anche che Sun é tutto a modo suo :rolleyes: )
Non ricordo le sequenze su Sun ma adesso le cerco ...

fabianoda
11-09-2006, 08:46
ma lui usa Unix non Linux (o almeno cosí doce il titolo). Io ho provato il tuo esempio ma non funge (é vero anche che Sun é tutto a modo suo :rolleyes: )
Non ricordo le sequenze su Sun ma adesso le cerco ...

Credo si sia sbagliato.. dato che due righe dopo parla di Gentoo!

trallallero
11-09-2006, 09:23
Credo si sia sbagliato.. dato che due righe dopo parla di Gentoo!
buon per lui! per un attimo ho temuto che usasse Sun pure lui :D
e comunque non riesco a trovarle ste maledette esc seq :muro:

iPoster
11-09-2006, 12:55
Ragazzi uso Linux, lo UNIX era inteso per consol unix, ma poi mi sono ricordato che ve ne sono svariate, quindi scusatemi :rolleyes:
Per quanto riguarda i colori sono sicuro che si può, visto che sia Suse che Gentoo (li ho visti solo qui per adesso) nel boot le scritte sono colorate e Gentoo poi quando installi un pacchetto colora tutto...
Siccome il progetto sarebbe carino a colori se si può...
Non conosco Gentoo ma se servono info per il makefile io ci ho lavorato tanto ...
Se puoi dirmi qualcosa di più te ne sono grato, mi interesserebbe farlo un bel makefile... :)

andbin
11-09-2006, 13:12
Siccome il progetto sarebbe carino a colori se si può...Certo che si può se usi Linux: basta usare le apposite sequenze di escape (come ho indicato nell'esempio sopra). Altrimenti, come alternativa agli escape, potresti usare nel tuo programma la libreria "curses".

mi interesserebbe farlo un bel makefile... :)Con un Makefile puoi fare un sacco di cose .... dipende da cosa ti serve.

beppegrillo
11-09-2006, 13:16
Se usi linux le indicazioni di andbin sono valide.

P.s Qualcuno ha solaris e mi dice se per caso sono altrettanto valide?

trallallero
11-09-2006, 13:24
Ragazzi uso Linux, lo UNIX era inteso per consol unix, ma poi mi sono ricordato che ve ne sono svariate, quindi scusatemi :rolleyes:
Per quanto riguarda i colori sono sicuro che si può, visto che sia Suse che Gentoo (li ho visti solo qui per adesso) nel boot le scritte sono colorate e Gentoo poi quando installi un pacchetto colora tutto...
Siccome il progetto sarebbe carino a colori se si può...
ridevo per Unix a colori. Linux é di un'altra generazione non mi stupirei se fosse possibile.
In fondo lo era giá con Borland su Ms-Dos anni fa ;)

Se puoi dirmi qualcosa di più te ne sono grato, mi interesserebbe farlo un bel makefile... :)
vediamo ... hai dei sorgenti immagino. Hai dei files di lancio del eseguibile ? hai files di config ? Mi servirebbe sapere com'é l'ambiente. Ma immagino un .c e basta :D

Dovresti (per farlo bello come dici tu) settare le variabili e mettere meno costanti possibili (come sempre d'altronde).


# makefile per ...
# autore ...
# data ...

# IL NOME DEL COMPILATORE
CC = gcc

# IL NOME DEL PROGRAMMA
NAME = pippo

# LA DIR DEL .c
C_SRC = $(HOME)/SRC

# LA DIR DEL .o
MAINOBJ = $(HOME)/SRC/$(NAME).o

# FLAGS PER IL COMPILATORE
CFLAGS = -g

# NOME ESEGUIBILE
EXE = $(NAME)

# LA DIR DEL .c
LIBS = $(HOME)/LIB/libs_varie.lib


############################################################################
$(EXE): $(MAINOBJ) makefile
@echo "|----------------------------------------------------------------------|"
@echo " LINKING PROGRAM '$(NAME)'"
@echo "|----------------------------------------------------------------------|"
@echo " ======================================================================"
@echo""
$CC $(CFLAGS) -o $(EXE) $(MAINOBJ) $(LIBS)

$(MAINOBJ): $(C_SRC)/$(NAME).c $(C_SRC)/$(NAME).h makefile
@echo " ======================================================================"
@echo "|----------------------------------------------------------------------|"
@echo " COMPILING UNIT '$(NAME).c'"
@echo "|----------------------------------------------------------------------|"
@echo""
$CC -c $(CFLAGS) -o $(MAINOBJ) $(NAME).c
############################################################################

clean:
@echo "cleaning objs and execute files"
@rm -f $(MAINOBJ) $(EXE)

come vedi le variabili le riusi quando crei altre variabili cosí se cambi per ex la dir dei sorgenti basta che modifichi C_SRC e tutto riamne aggiornato.
$(EXE): $(MAINOBJ) makefile
significa: EXE (il programma) dipende da MAINOBJ e makefile, ovvero se modifico il .o o il makefile e lancio make il tutto viene rilinkato.

$(MAINOBJ): $(C_SRC)/$(NAME).c $(C_SRC)/$(NAME).h makefile
a sua volta il .o dipende dal .c dal .h e dal makefile. Se modifichi uno di questi e lanci il make, ricompila.

$CC $(CFLAGS) -o $(EXE) $(MAINOBJ) $(LIBS)
linka usando i flags e le lib LIBS creando EXE

@echo ...
é un output (tipo printf) e la @ serve a nascondere l'istruzione altrimenti vedresti un doppio out

$CC -c $(CFLAGS) -o $(MAINOBJ) $(NAME).c
compila $(NAME).c usando i flags e creando il .o $(MAINOBJ)

N.B.: dove ci sono dei TAB ci DEVONO essere dei TAB. É il make che funziona cosí

trallallero
11-09-2006, 13:26
P.s Qualcuno ha solaris e mi dice se per caso sono altrettanto valide?
quoque tu Solaris ? :eek:
:D

-fidel-
11-09-2006, 13:42
Certo che si può se usi Linux: basta usare le apposite sequenze di escape (come ho indicato nell'esempio sopra). Altrimenti, come alternativa agli escape, potresti usare nel tuo programma la libreria "curses".


Ok, questa è la strada giusta, le sequenze di escape non sono supportate da tutte l shell, meglio appoggiarsi ad una libreria per "tagliare la testa al toro".
Qualcuno ha nominato Suse mi pare, che appunto sa "ncurses" per fare grafica in console.

beppegrillo
11-09-2006, 13:48
quoque tu Solaris ? :eek:
:D
susu fai stà prova :D
Sempre che non sia troppo vetusto il tuo sistema :P

trallallero
11-09-2006, 14:12
susu fai stà prova :D
Sempre che non sia troppo vetusto il tuo sistema :P
Sun-Blade-100 versione 5.8 :rolleyes:

iPoster
11-09-2006, 14:24
Ok, questa è la strada giusta, le sequenze di escape non sono supportate da tutte l shell, meglio appoggiarsi ad una libreria per "tagliare la testa al toro".
Grazie del consiglio!
Mi servirebbe sapere com'é l'ambiente. Ma immagino un .c e basta
:D :D :D
La sequenza che hai scritto tu è valida anche per chi ha il solo file c? il .o sarebbe l'output di gcc? :fagiano:

trallallero
11-09-2006, 14:37
La sequenza che hai scritto tu è valida anche per chi ha il solo file c? il .o sarebbe l'output di gcc? :fagiano:
si si va benissimo anche solo un .c ;)
Il .o é il primo passo (visibile) del compilatore. Poi "linka" (diciamo "incolla") il .o con varie librerie e crea l'eseguibile.

iPoster
14-09-2006, 14:33
si si va benissimo anche solo un .c ;)
Il .o é il primo passo (visibile) del compilatore. Poi "linka" (diciamo "incolla") il .o con varie librerie e crea l'eseguibile.
Grazie a tutti! Mi siete stati di grande aiuto! :)

-fidel-
14-09-2006, 14:57
Dimenticavo, la libreria "curses" può essere compilata staticamente, così da non doverla distribuire insieme al programma (per quanto la redistribuzione è libera, anzi è incentivata, può risultare più comodo avere un programma "stand-alone" che, senza appoggiarsi esternamente ad una libreria, fa grafica in console).