mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: Musiche per giochi

Salve a tutti, mi chiamo Fedra e sono un musicista in cerca di 
collaborazioni videoludiche.
Sto cercando Team di programmatori a cui serva un musico.
Su 
fedra.risorse.com
 c'e' una sorta di recipiente musicale dove si 
possono ascoltare le mie creazioni, divise per argomenti.
Il mio proposito è quello di aggiornare spesso il sito, dunque se siete 
in cerca di un tema o sonorizzazione per il vostro gioco fateci ogni 
tanto un giretto.
Quello che vi chiedo, se eventualmente vi piace qualche motivo è di 
rendermi partecipe con una mail.
Sono ben disposto a collaborare anche gratuitamente, purche' sia per una 
giusta causa.
Grazie per l'attenzione.
Fabio Fedra
fe...@email.it
fedra.risorse.com

 giusta causa.
Qui siamo OT, ma ti consiglio di cercare su 
sourceforge.net
, Linux Games,
PyGame e simili. Troverai molti progetti Open Source che sono sempre a
corto di personale, soprattutto per creare i dati del gioco (musiche,
mappe, trame). La comunita' Open Source te ne sara' grata.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

 ha scritto nel messaggio
news:bht8su$b7q$4...@lacerta.tiscalinet.it...
magari ... se fossi gia' a pensare al sonoro sarebbe gia' una pacchia per me
;-) c'e' tutto il progetto da mettere in piedi prima :-p

 
Grazie tante del consiglio, saro' felice di rendermi utile.

Goul_duKat wrote:

eheh, immagino sia dura ma per fare le cose fatte bene ci vuole tempo ma 
se in un futuro prossimo ti servira' una mano per quanto riguarda 
l'audio fammi un fischio e saro' lieto di collaborare.

Newsgroup: it.comp.lang.c
Titolo: Alzaimer galoppante

un vuoto di memoria assurdo:
come si fa a far fare il suonino con la printf?
se non mi ricordo male era printf("\*"); ma non mi ricordo cosa sostituire
al *.
gią che ci siete me lo potete dire anche in ottale (\nnn)
thanks


wrote:

\b

 \b

allora cosa è \g?
booooooooh
la doc non ti va di guardarla?
Antonio

 \b
Veramente \b corrisponde al backspace.
Il beep (Bell) corrisponde al carattere 7 (CTRL G) ed č rappresentato da \a
Maurizio.

Il beep (Bell) corrisponde al carattere 7 (CTRL G) ed è rappresentato da \a
^_^ \a ... come diceva il vecchio manuale del tc ... alarm!
ora ricordo :)
Antonio

 >


 errore del manuale?
Si`: lo standard prevede che la sequenza di escape per attivare il 
beeper di sistema, qualsiasi apparato fisico lo rappresenti, e` '\a'.
-- 
Baci,
Mony

errore del manuale?
Certo.
La sequenza \g (se esiste) non e' standard.
Per il bell si usa \a.
-- 
Andrea Laforgia (
walkie...@libero.it
)
"Usenet is a strange place" [Dennis Ritchie]
Newsgroup: it.comp.lang.c
Titolo: Applicazione con le API Win32 senza dos shell

Ho scaricato un c compiler GNU,
ho istallato le win32 API,
tutto funziona però vorrei sapere se c'e' un modo per eseguire i .exe senza la dos shell (quando
aprono delle finestre).
Grazie.

 senza la dos shell (quando aprono delle finestre).
Compila con l'opzione -Wl,-subsystem,windows, ad esempio:
//  gcc prog.c -luser32 -o prog.exe -Wl,-subsystem,windows
#include <windows.h>
int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                     PSTR szCmdLine, int iCmdShow )
{
  MessageBox(NULL,"Ciao a tutti!!!","gpb soft",MB_ICONINFORMATION);
}
Ciao
        gpb

Newsgroup: it.comp.lang.c
Titolo: Turbo Assembler

Scusate, qualcuno sa dirmi dove posso trovare il Turbo Assembler 4.0 ?
Grazie e Ciao
Massimo

 ha scritto nel messaggio
news:8dkvtj$lqf$1...@lacerta.tiscalinet.it...


Newsgroup: it.comp.lang.c
Titolo: DOMANDA[TYPEDEF]

Ho studiato le strutture ma...a che serve esattamente typedef?
Grazie

 ha scritto nel messaggio
news:9gpufi$i76$1...@nreadB.inwind.it...


 Ho studiato le strutture ma...a che serve esattamente typedef?
Ad evitare di scrivere struct:
typedef struct
{
    ...
} PIPPO;
...
PIPPO p;
Oppure a chiamare con un nome breve un tipo complesso. Sconsiglio di
utilizzarlo per nascondere cose che invece devono essere ben chiare come
che un certo tipo è puntatore:
#include <stdio.h>
typedef char *STRINGA;  // Sconsigliato!
int main()
{
    STRINGA p = "Prova";
    printf( "%s\n", p );
    return 0;
}
EMG
Newsgroup: it.comp.lang.c
Titolo: sostituzione in una stringa

salve a tutti.
Ho il seguente problema:
poniamo che io abbia la stringa come la seguente:
"ciao /$/ come stai ? sei sempre il solito /$/ non cambierai mai"
Ora, come potrei fare per sostituire ogni occorrenza di "/$/" con 
"pippo" ? cosi' che la stringa precedente diventi:
"ciao pippo come stai ? sei sempre il solito pippo non cambierai mai".
( la stringa che ho trovato come esempio e' orrenda, ma e' stata la 
prima che mi e' venuta in mente :) )
Grazie infinite
Ciao
	MaX

 "ciao pippo come stai ? sei sempre il solito pippo non cambierai mai".
non e' difficile.
usi una stringa ausiliaria di dimensioni opportune dove "costruisci"
la la stringa modificata.
Iterativamente usi la funzione strstr() da string.h per trovare
la prossima occorrenza del pattern, copi la roba che viene prima, poi
copi la stringa di sostituzione e poi ricominci.
Usi memcpy() o strncpy() per copiare i pezzi di stringa.
vedi anche 
http://tinyurl.com/mxuvp
ciao,
g.

Giovanni Resta ha scritto:

Grazie per la dritta.
Questo il codice che mi pare fare quanto da me precedentemente 
richiesto, chiunque veda migliorie da poter apportare non esiti a 
comunicarlo... grazie:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char* subst(char* str, char* pattern, char* strToAdd)
{
    char* patternPointer;
    char* startPointer = str;
    char* newstr = (char*) malloc( sizeof(char)*1 );
    *(newstr)='\0';
    while((patternPointer = strstr(startPointer, pattern)) != NULL  )
    {
       newstr = (char*) realloc( newstr, sizeof(char) * ( strlen(newstr) 
+ ( patternPointer - startPointer ) + strlen(strToAdd) + 1 ) );
       strncat(newstr, startPointer, sizeof(char) * ( patternPointer - 
startPointer) );
       strcat(newstr, strToAdd);
       startPointer = (char*) (( sizeof(char) * strlen(pattern) ) + 
patternPointer);
    }
    newstr = (char*) realloc( newstr, sizeof(char) * ( strlen(newstr) + 
strlen(startPointer) + 1 ) );
    strcat(newstr, startPointer);
    return newstr;
}
int main(void)
{
    printf( "%s\n", subst("ciao /$/ come stai ? sei sempre il solito /$/ 
non cambierai mai", "/$/", "pippo") );
    return 1;
}
Newsgroup: it.comp.lang.c
Titolo: il miglior libro c on the net

parlo di c non c++ ...
magari con esaustiva trattazione di alberi binari e tutta quella roba figa e
complicata si che bellooo
grazie spero in una risposta

 complicata si che bellooo
ESAUSTIVA trattazione degli alberi binari?
Se cerchi una trattazione ESAUSTIVA devi comprarti un libro di strutture
dati ed algoritmi, non un libro di C. (il libro di strutture potrebbe
utilizzare il linguaggio C, ma questo e' diverso, non sarebbe ugualmente un
libro di C, ma di strutture).
Alex

...

Ciao Fabio Fazio.
Io ho in mio possesso il libro:
"Algoritmi in C " di Robert Sedgewick della Addison-Wesley
che tratta di :
liste, stack, code, ordinamenti (quicksort, shellsort, heapsort,
mergesort...),
alberi bilanciati (2-3-4 top down , red- black), hashing, pattern matching,
parsing, grafi pesati, grafi orientati, inclusione in poligoni,
interpolazione, integrazione, trasformata di fourier veloce ecc. ecc..
A parte qualche bachetto per esempio nell´algoritmo di inclusione di un
punto in un poligono concavo, il libro non e´ malaccio.
Ce ne sono anche altri ma di questo genere e´ l´unico in mio possesso.
Maurus

Maurus: me coglioni! :)
Ma si trova in rete? mi sa di no vero?..
grazie cmq

Newsgroup: it.comp.lang.c
Titolo: Algoritmi sui grafi

Salve a tutti sono nuovo in questo newsgroup. Volevo sapere se mi
potevate indicare un sito in cui posso trovare algoritmi sui grafi
anche non già in codice C. Premetto che ho già implementato quelli piu
comuni che si potrebbero trovare in alcuni testi dedicati tipo visita
in profondita, albero di copertura minimale, dijkstra e qualche altro.
Vi ringrazio anticipatamente per ogni vostra risposta.

Salve a tutti sono nuovo in questo newsgroup. Volevo sapere se mi
potevate indicare un sito in cui posso trovare algoritmi sui grafi(non
necessariamente gia scritti in C). Premetto che ho già implementato


Newsgroup: it.comp.lang.c
Titolo: Programmazione Scheda di rete

Salve,
vorrei chiedere a chiunque sia in grando di darmi una risposta se è
possibile manipolare singolarmente i pin di un cavo rj45 dalla propria
scheda di rete... In pratica ho la necessità di inviare il livello di
tensione (alto o basso) su ciascuno dei piedini del cavo ethernet...


Non e` possibile.  L'accesso alla scheda e` fatto, in genere, mediante 
registri h/w e una memoria a doppio accesso in cui vengono scritti/letti 
i pacchetti.
Quello che si puo` fare e` mettere in loop trasmettitore/ricevitore per 
verificare il funzionamento della scheda.
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >
Newsgroup: it.comp.lang.c
Titolo: malloc elastica....

Salve, durante la scrittua di un semplice client daytime in linux, ho
incontrato uno strano fatto...
char *buffer=(char *)malloc(20);
[snip]
while(n=read(sockfd,buffer,80) > 0)
[snip] /* continua etc... */
Il problema è questo: se buffer è un puntatore ad una area di memoria di 20
byte...e la read legge 80 byte... non dovrebbe andare in overflow e darmi un
SegFault?
Invece non me lo da..
Ho pensato che dato che la stringa ritornata dal server è di 26
caratteri...forse dovevo sistemare il buffer.. allora:
char *buffer=(char *)malloc(5);
[snip]
while(n=read(sockfd,buffer,30) > 0)
[snip] /* continua etc... */
E niente overlflow...
Insomma, quando non vuoi SIGSEVvi...e quando vuoi, no.
Me la potete spiegare pls?
Grazie

 Me la potete spiegare pls?
Undefined behaviour. Questo e` quello  che accade quando leggi/scrivi su
un'area di  memoria non allocata. A  rigore di standard sul  tuo monitor
potrebbe  anche apparire  un'omino  che ti  fa  il gesto  dell'ombrello.
Oppure il tuo  programma potrebbe girare senza alcun  problema per 10000
volte e formatterti il disco la 10001-esima volta.
Un segfault avviene solo quando il kernel si accorge che il processo sta
sconfinando  dal  suo address-space. Quello  che  accade  e` questo:  il
processo accede  ad un locazione  di memoria non sua,  ovviamente questa
non  e` presente  nella  ram; il  processore  lancia un'eccezione  (page
fault) che viene trappata dal kernel; il kernel si accorge che la pagina
richiesta non esiste e manda un segfault dal processo.
Poiche`  gli  incrementi  all'address space  vengono  fatti  utilizzando
multipli  della  pagina,  quando  allochi,  come  nel  tuo  esempio,  e`
probabile che al  tuo processo venga attaccata un'intera  pagina (a meno
che non  esista spazio libero  nello heap). Su  x86, con pagine  da 4KB,
allocando 5byte  potresti (nel caso  peggiore) scrivere ancora  per 4091
bytes prima che il kernel si accorga di qualcosa.
Tutto questo  e` pero` strettamente dipendente  dall'implementazione, lo
standard non dice nulla.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Non ho ancora capito se il mio cane e` maschio o femmina:
quando fa la pipi` si chiude in bagno
Newsgroup: it.comp.lang.c
Titolo: Problema con typedef e const

Ho il seguente problema.
Definisco un vettore con una typedef:
typedef int vec10[10]
poi in una funzione vorrei passare un vettore di vec10, qualificandolo
come const:
void func( vec10 R[]. int a, const vec10 B[] );
Quando vado a chiamare func in questo modo:
...
vec10 R[5], B[5];
int a;
...
func (R, a, B);
ottengo il seguente warning:
warning: passing argument 3 of 'func' makes pointer from integer
without a cast
la cosa assurda e' che se rimuovo il qualificatore const, tutto
funziona perfettamente.
Ho anche provato a "espandere" la scrittura per B[] e mettere const
piu' o meno ovunque...
Qualche idea?
bye!
--
ema

 piu' o meno ovunque...
In effetti il messaggio e' fuorviante.. ti fa pensare che ci sia di
mezzo un intero...
ciao
Giacomo

 array non const quindi giustamente ti da l'errore.
Beh, "giustamente" fino a un certo punto. Ok, evidentemente questo è uno dei
casi in cui le regole del C sono diverse dal quelle del C++. In C++ quel
codice è perfettamente legale. In C lo sarebbe se 'vect10' fosse un typedef
di 'int', ad esempio.
In generale, un array di T può decadere in un 'T*', e questo a sua volta si
converte felicemente in un 'const T*'.
Tuttavia, in C (ma lo scopro ora) quest'ultima conversione non è possibile
se T è un array. (GCC emette solo un warning, mentre altri compilatori
rifiutano il codice.)
(In C++ -come ho detto- la conversione è invece possibile.)
Max
Newsgroup: it.comp.lang.c
Titolo: Commenti in un header file

Salve a tutti, solo una semplice domanda.
Usando // anzichč /* per iniziare un commento in un file header ottengo
degli errori in compilazione.
Per quale ragione?
Grazie
-- 
Posted from 
mta03-acc.tin.it
 [212.216.176.34] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Grazie
// č il commento "C++-style", e non č supportato dai vecchi compilatori C.
E' questo il motivo dell'errore.
Domenico Barra


// č il simbolo di commento del C++ e vale sino alla fine della riga;
alcuni compilatori C lo implementano altri no.
I commenti del C sono delimitati dalla coppia /* ....... */ e possono
essere estesi su piů righe.
HTH
gfb

 ha scritto:
// è il simbolo di commento del C++ e vale sino alla fine della riga;
alcuni compilatori C lo implementano altri no.
I commenti del C sono delimitati dalla coppia /* ....... */ e possono
essere estesi su più righe.
Non ci siamo capiti, // funziona benissimo con il mio compilatore (un
Borland C++ 3.1 - usato sotto l'opzione Source: Ansi C), ma non funziona
soltanto negli header files.
Non è un grave problema ma sarei curioso di conoscerne la ragione.
-- 
Posted from 
mta01-acc.tin.it
 [212.216.176.32] 


 ha scritto:
// è il commento "C++-style", e non è supportato dai vecchi compilatori C.
E' questo il motivo dell'errore.
No.  // funziona benissimo con il mio compilatore (un


Newsgroup: it.comp.lang.c
Titolo: visualizzazione di stack e code

Il mio prof. ha scritto che il progetto sulla gestione degli stack e delle 
code debba avere tra le varie cose (inserimento, estrazione, controllo 
ecc...) la funzione di visualizzare struttura (stack o coda) utilizzando 
solo le funzioni di inserimento e di estrazione......ma ke vor dě?!
Grazie per l'aiuto. 


vor dě:
           /* finchč c'č almeno un elemento */
           while( head != NULL ){
               /* lo estraggo ... */
               pop( &n , &head );
               /* ... lo stampo */
               printf( "%c --> " , n->val );
               /* lo inserisco in uno stack temp  */
               push( n , &temp );
         }
         /* stampo il campo next dell'ultimo nodo che č NULL */
         printf( "NULL\n" );
        /* ed ora finchč c'č almeno un elemento in temp ...*/
        while( temp != NULL ){
            /* ... lo elimino da temp, e lo salvo in n */
            pop( &n , &temp );
            /* e da n, lo reinserisco in head */
            push( n , &head );
        }/* tutto come prima della stampa*/
Have a nice! Bye! 

Vor dě che il prof. ci vuole far uscire pazzi,,,,cmq ho risolto, grazie 
mille.
Newsgroup: it.comp.lang.c
Titolo: Parentesi graffe

Salve, ho un problema con il turbo C versione 3.0
Nn so perchč nn mi prende i caratteri attarverso il codice ASCII e in
particolar modo i le parentesi graffe che si aprono e si chiudono. Ho WinXp
e nn credo che ciň possa creare problemi.
In attesa di una risposta, magari anche per email, porgo i piů cordiali
saluti.
Carlo

 ha scritto nel messaggio
news:kbIo9.16645$dj7....@tornado.fastwebnet.it...


 particolar modo i le parentesi graffe che si aprono e si chiudono.
Prova con "ALT GR + SHIFT + Parentesi quadra"
--
Claudio P.
ICQ: 39052657

Scusate la domanda stupida: ma sulle tastiere italiane non ci sono più 
le parentesi graffe? Ci ho fatto caso oggi che ho cominciato a 
programmare in C. A parte la combinazione ALTGR + SHIFT + parentesi 
quadra che uso ora c'è qualche altro metodo? Chiedo ai programmatori 
incalliti: vi siete comprati la tastiera USA?
Grazie
-- 
V@lerio
Ingegneria Informatica @ La Sapienza, Roma
Please remove NOSPAM to reply

 Chiedo ai programmatori incalliti: vi siete comprati la tastiera USA?
lol
e che se ne dovrebbero fare?
-- 
ZeD 
E MI COPRISTI IL SOLE
Ti gettasti dal balcone,
e mi copristi il sole.

incalliti: vi siete comprati la tastiera USA?
Ci farai l'abitudine, comunque non serve cambiare la tastiera bisogna
installare un OS USA
Alla prossima,
Giovanni Cappellini
http://giovacappo.cjb.net
ICQ 166932196

 Grazie
non č che mi sono comprato la tastiera USA , non ho mai usato una
italiana....
dal lontano 1984 che uso solo tastiere USA
ne ho una capacitiva originale IBM (non ne fanno piů, un vero peccato) che č
un tesoro.
sono costretto ad usare gli adattatori ma va bene ugualmente  :-)))

Newsgroup: it.comp.lang.c
Titolo: SENSAZIONALE!


Astenersi curiosi perditempo.

 ha scritto nel messaggio
news:XqTce.5904$TR5....@news.edisontel.com...

???????????????
Newsgroup: it.comp.lang.c
Titolo: Funzione memcpy() in C

#include <stdio.h>
#include <string.h>
 
int main(void)
     {
char s1[17];
     char s2[] = "Bella partita";
     memcpy(s1, s2, 7);
     printf("%s\n", s1); // VISUALIZZA:  Bella p@
     return 0;
     }
 
La funzione memcpy() dovrebbe copiare  i primi sette caratteri  del 
testo "Bella partita" nel vettore s1.
 
Quando vado a stampare, in realtï¿œ mi ritrovo i sette caratteri piï¿œ il 
carattere  '@' (in altre prove che ho fatto mi ritrovavo altri simboli 
strani).
 
Perchï¿œ si verifica questo?
Devo dedurre che la dichiarazione del vettore s1 viene sovrapposta su 
celle giï¿œ sporche di dati precedentemente utilizzate?
 
Ciao
 
nero23
 
 
 
 

 <snip>
 
Perché manca il terminatore di stringa in s1!
 
Hai due alternative:
- utilizzi strcpy()
- metti a mano il terminatore (se volevi 7 caratteri, s1[8]='\0')
 
Ciao!

Ho provato questa soluzione e funziona.
char s1[17]=" ";
 
 
Ciao e grazie

 
 
Vero. L'importante è che hai capito *perché* funziona: ti anticipo che non è
immediato ( per gli altri, non date suggerimenti subito! :D )
 
Ciao!


Non e' una soluzione e sopratutto e' bacogena :-)
Le "stringhe" in c sono sequenze di caratteri concluse da un
terminatore (0), che e' implicito .
char s1 e' l' array di destinazione di una stringa:
memcpy copia un certo numero di caratteri da un array ad un altro,
indipendentemente dal contenuto:
se l' array di partenza contiene 0 (NULL), l'array di arrivo sara'
azzerato e non conterra' nessuna stringa :-)
Se si copia parzialmente una stringa, non e' garantito che l' ultimo
carattere copiato sia un NULL per cui puo' capitare di avere spazzatura
nella nuova stringa a meno di copiare manualmente il teminatore all'
ultima posizizione+1.
La tua soluzione causa la copia in s1[0]=' ' e l'azzeramento del resto
del buffer : quindi quando ci copi dentro 7 caratteri, l' 8 e' 0 e
la stringa e' terminata.
Questa soluzione e' bacogena perche':
- Inizializza inutilmente s1 : se vuoi una stringa
   inizializzata a 0, e' piu' logico s1[17]="";
   visto che non hai necessita di avere caratteri.
- non funziona dopo che s1 viene utilizzato se si usano
   stringhe di lunghezza diversa
- E' MOLTO piu' corretto usare a) stncpy se vuoi copiare
   una stringa compreso il terminatore o b) se vuoi solo
   copiare parte di una stringa con memcpy, iserire
   esplicitamente il terminatore s1[n]=0, con n=ultimo indice+1.
 
ii
 
 


 
A dirla tutta sarebbe più corretto utilizzare il classico strncpy()+set del
terminatore.
 
Ciao!
Newsgroup: it.comp.lang.c
Titolo: Passare ad una funzione con numero di parametri variabile un vettore.

Ciao a tutti.
Come da oggetto, vorrei passare af una funzione con numero di
parametri variabile un vettore,
Attualmente riesco a passare variabili singole, come mi devo
comportare con un vettore?
es
double prova(int N, ...);
main()
{
      double v[4];
....
        prova(1,"VETTORE",v);
}
prova(int N, ...)
{
     va_start(ap,numArg);
     while(numArg--)
     {
           if(strstr(varName,"VETTORE"!=0)
           {
             ????????   =  va_arg(ap,double);
           }
      }
}
grazie


double *v;
v = va_arg(ap, double*);
Ciao!
P.S. Riguardo allo stile del pezzo di codice che hai postato, aumenta
il livello di warning del tuo compilatore ;-)

 il livello di warning del tuo compilatore ;-)
Grazie!!

Newsgroup: it.comp.lang.c
Titolo: decompilatore

Dove posso scaricare un decompilatore funzionante per linguaggi come c e
pascal e simili che giri sotto dos o windows?
Grazie e ciao a tutti!

 Grazie e ciao a tutti!
Che io sappia finora ho visto solo disassemblatori....... ;-)
--
________________________________
Togliete NoSpaM per rispondermi
bye Brain

 wrote in message
10jjub9$fdd$2...@fe2.cs.interbusiness.it...
: Dove posso scaricare un decompilatore funzionante per linguaggi come c e
: pascal e simili che giri sotto dos o windows?
http://www.suddendischarge.com/Disassemblers.html
rec15fpc.zip       C
deldec0027.zip     delphi (pascal)
dcp2dpk.zip        idem
dede103.zip        ditto
--
____ __         __,_      __  _____
\  _\_ \  ___ _/ / /\  /\/  \/ / _/ It is better to reign in Hell
 \  _ \ \/ _ '/ , |\ VV / / / / _/ Than serve in Heaven.- MILTON
  \_,_/\_\_,_/_/|_| \__/\__/_/_/
      -- the one and only --     e-mail : 
blak...@tiscalinet.it
                                ICQ    : 59394345
The UNIX Guru's View of Sex:
$unzip;strip;touch;finger;mount;fsck;more;yes;umount;sleep
Newsgroup: it.comp.lang.c
Titolo: parser di mbox

Ciao a tutti,
conoscete un parser di mbox ?
Ho provato a cercare in rete ma ho trovato proprio pochissimo
Grazie
Osvaldo

 conoscete un parser di mbox ?
Non in C. Ne avevo fatto uno in Python. Ma comunque č piuttosto
semplice. Il problema č che ci sono diversi formati mbox con leggere
incompatibilitą.
Anzi, non č quasi un formato. Piuttosto direi una 'famiglia' di formati,
al 95% uguali. 
-- 
blog:  
http://www.akropolix.net/rik0/blogs
 | Uccidete i filosofi,
site:  
http://www.akropolix.net/rik0/
      | tenetevi riso e
forum: 
http://www.akropolix.net/forum/
     | bacchette per voi.


Magari non è facile trovare un parser standalone
ma un sacco di progetti opensource usano un parser mbox,
ad esempio hypermail che crea una visualizzazione html di cartelle
mbox
dai un occhiata su 
sf.net
http://sourceforge.net/search/?type_of_search=soft&words=mbox


Visti quasi tutti da hypermail, mutt, vari webmail...., non e'
facilissimo per me decifrare poi il codice :-(
continuo le ricerche fiducioso :-)
intanto mi rimetto sul codice di hypermail
Grazie
Osvaldo


Io l'ho fatto per il plain/text, poi mi sono perso nei meandri degli
rfc,  quasi incomprensibili :-(
Cercavo qualcosa di gia' fatto per completarlo (la pigrizia :-) ma in
rete non ho trovato praticamente niente
se non le 
http://sylpheed.sraoss.jp/en/download.html#libsylph
,
librerie del client di posta sylpheed,
ma sono senza docs ed il codice e' scarsamente commentato, e spesso
dove commentato in japponese :-(
mi sa che mi tocca ricominciare e rileggere tutti gli rfc :-)
Grazie
Osvaldo

 rfc,  quasi incomprensibili :-(
Scherzi? Ma se è una delle RFC più semplici che ho visto!
Non è che ti confondi con il formato in cui sono codificate le mail,
specie se devi gestire mime (che invece è rognoso e che io schivo perchè
Python aveva una libreria bella e che fatta -- e che di certo esistono
librerie analoghe pure per il C, prova qui
http://www.mozilla.org/mailnews/arch/libmime-description.html
)



Si scusatemi, intendevo la gestione dei mime
Grazie
Osvaldo

 Si scusatemi, intendevo la gestione dei mime
Si, quella è parecchio più rognosa. Separa i problemi.
E cercati una libreria per il mime. Non per sottovalutarti, ma imho ti
fai del male a farlo da te. Rischi solo un'implementazione non conforme
e ce ne sono in giro parecchie di testate.
Se hai problema di licenza, puoi vedere di cercarne qualcuna sotto BSD o
LGPL.

Newsgroup: it.comp.lang.c
Titolo: Esecuzione più veloce

Secondo voi scrivere:
int x = 0, y = 2;
oppure
int x, y;
x = 0;
y = 2;
hanno lo stessa velocità di esecuzione?

Bottle Man wrote:

Premature optimization is the root of all evil. -- Donald Knuth
Non dovresti preoccupartene, ma lasciare che sia il compilatore a tradurli 
in 2 codici equivalenti :)
Quello che devi curarti di ottimizzare sono gli algoritmi, per il resto 
affidati al compilatore.
Quando hai finito, puoi fare un test con un profiler e scoprire se ci sono 
parti critiche all'interno del programma ed eventualmente provare a 
ottimizzare quelle (in casi estremi scrivendo direttamente l'assembly).
Questa regola vale per tutti i linguaggi di programmazione, in particolare 
per quelli che supportano l'inserimento di codice piu' a basso livello 
(esempio il C con l'assembly, il Pyuthon o il Perl con il C).
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."


wrote:

Su qualsiasi compilatore sano di mente, direi di sì.
by LjL
ljl...@tiscalinet.it


Non ci dovrebbe essere nessuna differenza.
Comunque interrogarsi sul costo di singole
istruzioni (di assegnamento!) e' abbastanza
fuorviante. Tiene presente che il compilatore
massacra totalmente il tuo codice. Ci
sono buone (alte) probabilita' che gli assegnamenti
come tu li hai espressi possano anche scomparire
totalmente, in funzione delle istruzioni
che li seguono.
Per esempio il mio compilatore l'assegnamento
x=0; y=2; lo traduce cosi':
(ho dovuto mettere delle istruzioni dopo,
altrimenti scompariva tutto.)
movl $2,%edi
xorl %ebp,%ebp
Io non sono un'aquila dell'assembler,
ma la prima istruzione mette 2 (y=2) in un registro
della cpu. La seconda, invece di metterci uno 0,
per fare prima fa uno XOR del registro ebp con
se stesso: qualunque cosa contenesse, alla fine
conterra' 0 perche' lo XOR (bit a bit) di
un numero con se stesso e' naturalmente 0.
Quindi, addirittura un assegnamento puo' essere
piu' o meno veloce di un altro.
(Poi nel conto finale ci vanno anche peculiarita'
della CPU, per cui una banale somma dei cicli impiegati
da ogni istruzione non e' sempre un fedele indicatore
della velocita' effettiva del programma.)
ciao,
g.
Newsgroup: it.comp.lang.c
Titolo: manuale c

Ciao,
vorrei sapere dove posso trovare su internet un manuale abbastanza avanzato
sul c....grazie
ciao

 sul c....grazie
http://www.amazon.com/
Tommy


wrote:

su 
www.gameprog.it
 trovi qualcosina


il tricky C


Mi aspettavo fossero gia' arrivate le stroncature a questo post, 
invece... ;D
Se non erro, tutti dicono che e' pieno di inesattezze e dettagli obsoleti...
-- 
/**
  * Mattia Belletti - Undergraduate student @ 
cs.unibo.it
  * ICQ: 33292311   - email: 
mbel...@cs.unibo.it
  * IRC: BluShine   - site(s): 
http://cs.unibo.it/~mbellett
  * Linux registered user 299762 @ Linux registered machine 213003
  */

 tommy la prossima volta che dai una risposta, se č cosě inutile, EVITA
Perche'?
E' su internet ed ha tutti i manuali avanzati sul C!
;-)
La battuta serviva a dire che a volte e' molto meglio spendere qualche soldo
e comprare un libro piuttosto che leggere orribili tutorials.... Per il C++
ci sono gli ottimi libri di Bruce Eckel, ma per il C che io sappia non c'e'
molto....
Quindi meglio usare amazon!
Tommy

Newsgroup: it.comp.lang.c
Titolo: funzione per inserimento password

Salve,
qual è la funzione C standard per inserire una password disabilitando l'echo
dei caratteri a video? O, in alternativa, qual è il metodo "standard" da
seguire per una tale funzionalità?
(purtroppo non ho possibilità di accedere a sorgenti
Grazie mille.
L.
--------------------------------
Inviato via 
http://usenet.libero.it

La funzione getch() attende la pressione di un tasto senza fare il suo echo
a video e ne torna il valore ascii.
Detto questo, basta gestire i caratteri di ritorno (dal 32 in poi sono
caratteri stampabili cioč che comunemente vengo rappresentati a video, sotto
il 32 sono caratteri di controllo, ad esempio il valore 8 č il backspace, il
9 č il tabspace, 13-11 sono inviati in sequenza con la pressione del tasto
invio etc. ti consiglio di cercare la tabella ASCII) e visualizzare
un'asterisco a video. Il tutto in un loop che accetta n caratteri.

 seguire per una tale funzionalità?
Non esiste ne' l'una ne' l'altro.
In modo standard (intendendo con "standard" la volonta' di prescindere da
una piattaforma specifica) fare quello che chiedi e' impossibile, in quanto
significa gestire la tastiera a basso livello. E' per questo che ogni
compilatore, su ogni piattaforma, mette a disposizione delle estensioni
specifiche. Per es. con i compilatori Borland e con DJGPP e' possibile
trovare getch(), il cui prototipo e' in conio.h.
L'unico fastidio e' che devi gestire tu l'inserimento di ogni singolo
carattere.

Newsgroup: it.comp.lang.c
Titolo: Aiutino per esame

Ho sostenuto lo scritto di Algoritmi e Strutture dati. Tra gli esercizi
c'era il seguente:
Si definisca un algoritmo ricorsivo che, dati in ingrasso un (riferimento ad
un) ALbero Binario di Ricerca T e due valori rmin ed rmax (rmin<=rmax),
restituisca il (riferimento al) nodo che la chiave più grande tra i nodi con
chiavi comprese tra rmin ed rmax.
Attenzione: Detta h l'altezza dell'albero in ingresso, l'algoritmo DEVE
impiegare un tempo O(h).
L'ho fatto ma non sono sicuro. Poichè tra qualche giorno ho l'orale vorrei
vederne una versione corretta in modo  che se il prof. me la chiede vado
tranquillo.
Spero possiate aiutarmi. Grazie
P.S.: Non è consentito la chiamata all'algoritmo del predecessore.

 tranquillo.
Semplice, ma non ho capito quale e' la domanda e come posso aiutarti....
Di sicuro non mi metto a scrivere la funzioncina, magari posta tu il codice
che speri essere giusto.
Tommy

 che speri essere giusto.
Magari me lo ricordassi, l'ho scritto direttamente sulla bella.



beh ma allora hai copiato? :)

 ha scritto nel messaggio
news:n7i7205jso8cdnmlh...@4ax.com...

No !!!! :(



dai io scherzo! pure io ho un esame il 25 Febbraio o 26 Febbraio.

 ha scritto nel messaggio
news:bui7201p416q141m2...@4ax.com...

Io ho passato lo scritto di Algo ed il 16 ho l'orale. Ma alla fine? Mi
aiuti? Me lo scriveresti l'algo? :-))))
Newsgroup: it.comp.lang.c
Titolo: Struct packettata

Salve a tutti!
Ho questa struct:
struct
{
        void * address:20;
} __attribute__ ((packed)) kfismap[262144];
Volendola fare più piccola possibile, in pratica volevo realizzare un'array
di 262144 elementi di 20 bit ciascuno. Con questa struct che ho scritto io
è fattibile? Avrò una struct impacchettata o mi verrà fuori comunque un
array di elementi a 32 bit?
grazie
ciao
-- 
daniele_athome

Giovanni wrote:

Beh è come non volevo che fosse: voglio dire, non è possibile restringere la
struct al limite dei bitfields? Io vorrei che quell'array di 100 elementi
fosse grossa 250 byte, cioè 100 elementi da 20 bit ciascuno. È possibile?
grazie
ciao
-- 
daniele_athome



Ogni singolo elemento di un array deve avere un
indirizzo, quindi non riuscirai ad "impacchettare"
con quel sistema a meno che questa sia una
estensione del compilatore.
Una cosa un po' piu' portabile e' invece
scrivere/leggere i valori direttamente in un
array di byte.
Ad esempio nel codice seguente si presuppone che
un byte sia di 8 bit e i valori vengono memorizzati
a coppie: il primo di ogni coppia occupa due byte
interi e la meta' bassa del terzo byte, il secondo
elemento la meta' alta del terzo byte e i quarto
e quinto byte interi. 2x20 = 5x8.
unsigned char data[(262144*20+7)/8];
int bitread(int n)
{
    // Indirizzo del blocco da 5x8 = 40 bit
    unsigned char *b = data + ((n>>1)*5);
 
    if ((n&1) == 0)
    {
        /* Elemento pari, salvato come 0 + 1 + 2[0:3] */
        return b[0] + (b[1]<<8) + ((b[2] & 0x0F)<<16);
    }
    else
    {
        /* Elemento dispari, salvato come 2[4:7] + 3 + 4 */
        return (b[2]>>4) + (b[3]<<4) + (b[4]<<12);
    }
}
void bitwrite(int n, int code)
{
    // Indirizzo del blocco da 5x8 = 40 bit
    unsigned char *b = data + ((n>>1)*5);
 
    if ((n&1) == 0)
    {
        /* Elemento pari, salvato come 0 + 1 + 2[0:3] */
        b[0] = code & 255;
        b[1] = (code>>8) & 255;
        b[2] = (b[2] & 0xF0) + ((code>>16)&15);
    }
    else
    {
        /* Elemento dispari, salvato come 2[4:7] + 3 + 4 */
        b[2] = (b[2] & 0x0F) + ((code & 0x0F)<<4);
        b[3] = (code>>4) & 255;
        b[4] = (code>>12) & 255;
    }
}
HTH
Andrea

daniele_athome wrote:

Come non detto, non posso indirizzare dei bit :)
-- 
daniele_athome

Andrea Griffini wrote:

Beh, dato che devono essere routine veloci quelle in cui devo scrivere
questo codice, a questo punto mi conviene usare la struttura a 3 byte :)
grazie lo stesso comunque
ciao
-- 
daniele_athome

ciao
Credo che tu abbia le idee un po' confuse.
Se parli di PC certamente saprai che la memoria del
tuo computer non e' divisa in blocchi da 20 bit;
quindi se anche la risposta alla domanda originale
(se il compilatore la supportava il compattamento
in 20bit/elemento) fosse anche stata affermativa
che differenza avrebbe fatto ?
Andrea

 Andrea
comunque ho risolto in un altro modo, senza l'array
grazie lo stesso :)
ciao!
-- 
daniele_athome
Newsgroup: it.comp.lang.c
Titolo: [OT] Grammatica Yacc

Salve a tutti,
prima di tutto scusate per il piccolo OT che sto aprendo ma sinceramente non
so dove altro postare il mio piccolo quesito.
Devo generare un piccolo linguaggio interpretato e così da due settimane sto
studiando Yacc ed il modo di scrivere le regole
grammaticali del mio piccolo linguaggio.
Devo dire che in rete si trova molta documentazione, sia in inglese che in
italiano e il senso della grammatica mi è abbastanza chiaro tranne una cosa.
In tutti gli esempi che ho trovato on-line la prima regola è così definita:
==================================
%left '|'
%left '&'
%left '+' '-'
%left '*' '/' '%'
%left UMINUS    /* supplies precedence for unary minus */
%%    /* beginning of rules section */
lines :     lines expr '\n'   { printf("%g\n", $2); }
          | lines '\n'
          | /* empty */
          | error '\n'    { yyerror("reenter last line:"); yyerrok(); }
      ;
==================================
Non riesco proprio a capire l'utilizzo della riga /* empty */, so solo che
se la tolgo l'esempio non funziona più
e il parser va in errore.
Inoltre a volte questo formato si trova anche in altre regole in mezzo alla
grammatica.
In un manuale ho trovato questa spiegazione:
==================================
Vale la pena considerare se una sequenza di lunghezza zero ha qualche
significato; se sì, considerare la scrittura della specifica della sequenza
con una regola vuota:
    seq    :    /* empty */
           |    seq item
           ;
Ancora una volta, la prima regola si potrebbe ridurre esattamente una volta,
prima che sia letto il primo item, quindi la seconda regola una volta per
ogni item letto. Permettere sequenze vuote porta spesso a guadagnare in
generalità. Comunque, possono sorgere conflitti se si chiede a Yacc di
decidere quale sequenza vuota ha visto, quando non ha visto abbastanza per
decidere!
==================================
Bhoo!!! Non riesco proprio a capire!!!
C'è tra di voi qualche buon anima che potrebbe spiegarmi il senso di una
regola vuota?
Grazie a tutti e scusate ancora per l'OT.
Ciao
Gian

 regola vuota?
Non è una "regola vuota", è comunque una regola, nel senso che stai
costruendo un parser che può contemplare anche l'assenza di informazioni. 
Non è scontato che lo faccia.  Per esempio, se tu costruisci un parser per
i parametri di una funzione C, devi anche contemplare il fatto che non ci
siano parametri, quindi la regola per la lettura dei parametri contemplerà
una empty string.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 una empty string.
Grande!!!!
Grazie, questo piccolo esempio mi ha aperto la mente :).
Immaginavo fosse una cavolata da capire ma chissà perchè non riuscivo ad
arrivarci..., ora credo di aver capito il senso di tutte quelle /* empty */.
Grazie ancora.
Gian
Newsgroup: it.comp.lang.c
Titolo: signal

man signal
e nel K&R
Grazie
Marco

void(*signal(int signum, void(*sighandler)(int)))(int);
       ^^^^^^
/Signal/ e' una funzione che:
- accetta come parametri:
  - un intero (/signum/)
  - un puntatore a funzione (/sighandler/) che:
    - accetta come parametro un intero e
    - restituisce un void
- ritorna un puntatore a funzione che
  - accetta come parametro un int
  - ritorna un void
Spero che l'indentatura renda l'idea.
Il trucco (secondo me) e' capire prima il nome della funzione (che ti
ho evidenziato) e da li smontare a ritroso le varie parti.
Per semplificarti la comprensione potresti spezzare cosi' la
dichiarazione:
/* powered by Koenig */
typedef void(*HANDLER)(int);
/*
 * noterai che la funzione ritorna esattamente quello che si aspetta 
 * come secondo parametro, quindi ... 
 */
HANDLER signal (int signum, HANDLER sig);
Ti faccio un esempio (che viene dal mondo unix). Metti che tu vuoi
associare a SIGINT la chiamata alla funzione pluto, anziche' l'handler
di default.
Prima ti dichiari una funzione pluto per gestire l'evento:
  void pluto (int pippo);
Poi associ al segnale SIGINT pluto (ti ricordo il nome di una
funzione, senza le parentesi tonde e gia' considerato un puntatore a
funzione):
  signal(SIGINT, pluto);
Detto questo come nel programma scatta il segnale SIGINT (non ricordo
se era bindato sulla combinazione di tasti CTRL+C o se quello era
SIGQUIT, comunque ...) verra' chiamata la funzione pluto, anziche' il
gestore di default, che nel caso specifico avrebbe fatto terminare il
programma.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

 void(*signal(int signum, void(*sighandler)(int)))(int);
signal  e` una funzione che prende due argomenti:
    1 - un intero (signum);
    2 - un puntatore ad una funzione (sighandler) che prende un  intero  e
restituisce  void;
La funzione signal ritorna  un puntatore a una funzione che prende come
argomento un intero e che ritorna void.
Prova a semplificarla omettendo i due argomenti della funzione, cosě:
    void (*func())(int)
Questa dice che func e` una funzione che riporta un puntatore ad un'altra
funzione; quest'ultima richiede un intero come argomento e riporta un void.
Per esempio, supponiamo che vuoi intercettare la pressione di CTRL-C. Il
primo argomento della funzione č SIGINT; il secondo č la funzione che dovrai
costruire tu, chiamiamola break_handler().  La funzione signal dovra` essere
richiamata cosě:
    if (signal(SIGINT, break_handler) == SIG_ERR) {
        perror("Errore, CTRL-C non si fa intercettare\n");
        exit 1;
    }
La funzione break_handler sara` una cosa del genere:
    void break_handler(int sig) {
        signal(SIGINT, break_handler);
        printf("Hai premuto CTRL C\n");
    }
Salvo errori od omissioni.
Maurizio.


Grazie !
Marco
Newsgroup: it.comp.lang.c
Titolo: numeri + grandi

Ciao!
C'è un modo per avere un tipo di numeri di grandezza arbitraria? Se uno deve
usare numeri che superano i 4.000.000.000 e passa come fa?
Grazie
Fabrizio

 usare numeri che superano i 4.000.000.000 e passa come fa?
Il tuo compilatore potrebbe supportare i tipi long long (che puo` 
contenere valori fino ad almeno 9223372036854775807) e unsigned long 
long (fino a 18446744073709551615).
Questi tipi sono richiesti per un compilatore C99, ma anche compilatori 
non ancora conformi al nuovo standard li supportano (ad esempio il 
solito Gcc, se invocato in una modalita` opportuna come -std=c99).
Altrimenti, se puoi permetterti di rinunciare alla precisione, potresti 
usare dei double (o long double).
Infine, potresti scrivere tu stesso una libreria per aritmetica a 
precisione arbitraria (ad esempio usando array di unsigned char e numeri 
in base 256).

> C'è un modo per avere un tipo di numeri di grandezza arbitraria?
come ti hanno gia' detto puoi usare i long long int (signed o meno)
che sono tipicamente a 64 bit.
Tieni comunque conto che su certi compilatori (per es. il Borland 5)
il tipo a 64 bit esiste ma non si chiama long long ma con un altro nome 
che non ricordo tipo _int64. Comunque c'e' scritto nell'help in linea 
sui tipi di dati.
Io per calcoli in precisione arbitraria ho sempre usato
le librerie gmp e mi sono sempre trovato molto bene:
http://www.swox.com/gmp/
sono free e molto veloci.
ciao,
g.
Newsgroup: it.comp.lang.c
Titolo: Errore nella lettura di un carattere in una stringa

Salve, chi mi sa spiegare questa "stranezza"?
Ho provato a fare un piccolo programma che cambiava colore del testo con le
stringhe escape di ANSI. Ho fatto cosě:
char *esc_string;
esc_string=malloc(30*sizeof(char));
esc_string="\033[31m"; /*Non ricordo bene se ho usato proprio questa
stringa, tuttavia quella                                             che ho
usato era corretta*/
Ora, quando voglio accedere ad un carattere della stringa facendo ad
esempio:
esc_string[0]='A';
Mi da un Segmentation Fault. Perchč avviene questo?
Se invece utilizzo una stringa "normale", naturalmente funziona.
Chi mi sa spiegare?
Grazie...


1) hai assegnato a esc_string una literal string, che per definizione non e'
modificabile.
2) cosi' facendo ti sei perduto il puntatore iniziale assegnato da
malloc,dando luogo ad un "memory leak"
--
Ivan Molella
__LINUX__ the choice of the __GNU__ generation
icq# 97960484

 malloc,dando luogo ad un "memory leak"
Perchè perdo il puntatore?
Però se non vado a modificarla, funziona benissimo...

 Però se non vado a modificarla, funziona benissimo...
perche' se fai:
  char *ptr = malloc(10); la memoria allocata quando ptr non servira' piu'
dovrebbe essere deallocata(se si vogliono fare le cose fatte bene)
ma se tu poi esegui:
   ptr = "pippo",il valore che prima era in ptr te lo perdi e la memoria heap
non verra' piu' deallocata,quindi la procedura corretta sarebbe:
char *ptr = malloc(10);
.....
free(ptr);
ptr = "pippo";


 Per questo  l'espressione ptr[0] = 'f', puo' far crashare il sistema....
quest'affermazione puo' essere  vera solo se per sistema si intendono win95/98 o
simili , in altri casi il crash e' relativo al processo,a meno che non si parli
di codice del kernel,ma ne dubito........ :):)


 ha scritto nel messaggio
news:3A3E832E...@tin.it...

Quindi, per risolvere il problema, dovrei utilizzare in entrambi i casi
strcpy, giusto?
Grazie dei chiarimenti, ciao.

 Grazie dei chiarimenti, ciao.
ti consiglio di evitare
  char *ptr = "stringa" ;
usa invece
  char ptr[] = "stringa";

Newsgroup: it.comp.lang.c
Titolo: VC7 e msvc70.dll - dubbio da niubbo..

Il nome della libreria non forse' del tutto esatto (ehm ^^ ), ma
concettualmente quando tento di eseguire un file exe realizzato in VC7 su un
PC dove non e' installato il framework, mi da' questo errore.
La mia domanda e' la seguente: E' una libreria che ha a che fare in qualche
modo con il framework .NET, e quindi posso "escluderla" dalla compilazione,
oppure molto piu' realisticamente e' la dll "base" del VC7, e anche volendo
mi "tocca" includerla nei file da distribuire?
In caso, posso copiarla paro paro nella directory dove c'e' il mio
eseguibile, o devo forzatamente buttarla nella windows\system e registrarla
(e quindi fare un piccolo install per un exe stupido? E' questo che vorrei
evitare..)
Il fatto e' che con VC6.0 non avevo bisogno di una libreria analoga per
eseguire lo stesso exe, ma mi viene il sospetto che su quei computer vi
fosse gia' per altre applicazioni installate, realizzate in VC6.
Many Tnx. :)
--------------------------------
Inviato via 
http://usenet.libero.it

 fosse gia' per altre applicazioni installate, realizzate in VC6.
Sospetto esatto. Tant'e' che win xp la include di default.
-- 
Andrea Bergia - studente
Linux Registred User #281550

 Sospetto esatto. Tant'e' che win xp la include di default.
Supponevo. :)


 nulla a che vedere con quel che suggerisci tu..
Non sono sicuro, ma dovrebbe esserci qualche proprieta' come "Using of the 
MFC Library" e a destra il valore dovrebbe essere qualcosa come "Use the 
shared library". Tu devi cambiarlo in "Use the static library". Non mi 
ricordo i passaggi corretti e non ti posso aiutare perche' e' un po' che 
non uso win, e ancora piu' che non uso VS7.


 non uso win, e ancora piu' che non uso VS7.
Non preoccuparti, ti ringrazio delle info che mi hai dato fin'ora e della
disponibilita'. :)

Newsgroup: it.comp.lang.c
Titolo: Disegnare con windows

Ciao a tutti,
vorrei sapere come potrei fare a disegnare un semplice rettangolo
direttamente sul desktop,senza doverlo fare su una finestra.
l'idea sarebbe quella di scrivere un semplicissimo GUI engine per esercizio,
e pensavo di sfruttare in qualche modo le librerie GDI per farlo.
Date le mie immense lacune a proposito dell'argomento c+windows, vorrei
sapere se c'è qualcuno che può aiutarmi.
grazie mille

 ha scritto:

Per scrivermi togliete "111".

 Non penso che si possa fare "direttamente sul desktop".
Qua siamo OT e... non avrei risposto...
Tuttavia, visto che pensi male, e' giusto "recuperare".
Disegnare sul desktop e' assolutamente possibile!
Basta includere "#include <windows.h>", poi creare un device context che sia
lo schermo in generale (e non di una finestra):
"hdc=CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL);".
Fatto questo con la funzione Rectangle puoi fare quello che vuoi, ad
esempio:
"Rectangle(hdc,0,0,200,200);". Questo disegnail perimetro di un rettangolo,
magari con FillRect il disegno e' piu' netto ;-)
Alla fine devi chiamare "DeleteDC(hdc);" per pulire il dc creato e.... se
vuoi forzare windows a ridisegnare il desktope quindi a togliere il tuo
rettangolo (subito senza aspettare) allora un bel
"InvalidateRect(NULL,NULL,TRUE);" potrebbe fare al caso tuo.
Ok, finita la parte OT con dettagli GDI che non hanno molto a che fare con
il C, voglio dire che se uno sa una cosa o pensa di saperla (sbagliare e'
umano) allora il suo e' un contributo... Se una persona spara a caso, il suo
contributo e' inutile e come in questo caso puo' essere fuorviante e quindi
solo dannoso.
Tommy

ok, grazie mille.
Non sapevo di essere OT. a quale NG posso riferirmi??

 Non sapevo di essere OT. a quale NG posso riferirmi??
it.comp.programmare.win32
e' un newsgroup dedicato alla programmazione per windows.
Nota che le win32 APIs e di cui le GDI fanno parte possono essere "usate" da
qualunque linguaggio di programmazione, quindi hanno un NG a parte. Inoltre
il C standard non include alcuna grafica, tantomeno quella per windows, per
questo su questo NG eri OT.
Se posso darti un consiglio al volo... se sei agli inizi studiati il Petzold
(Programmare Windows). (se non sei agli inizi lo troverai invece troppo
semplice. E' una ottima introduzione alle win32 api).
Tommy