Newsgroup: it.comp.giochi.avventure.testuali
Titolo: [MAC] parzialmente compilato per Linux

Ho appena parzialmente compilato MAC (solo MAC.EXE, per ora) per Linux, 
colle librerie Grx.
Il problema principale e' che la funzione stricmp() e strnicmp() sono 
assenti dalla libc (o almeno, dalla mia libc) e quindi le ho rimpiazzate 
provvisoriamente con strcmo() e strncmo(). Ovviamente si puo' giocare 
solo col CAPS inserito (almeno per il Principe dei Ladri) ed inoltre, la 
versione grafica del pdl non visualizza le immagini (penso per il fatto 
che compone la directory con \ e non / )
Non ho ancora provato a fare una compilazione di prova, ma per i motivi 
sopradetti penso funzioni solo se i source e' tutto in maiuscolo.
Commenti?
e soprattutto, come risolvere il problema dell' assenza di stricmp() e 
strnicmo() ?
Saluti,
Piergiorgio.

 Ho appena parzialmente compilato MAC (solo MAC.EXE, per ora) per 
ricordati del mio macintosh...
f.
-- 
http://www.venerandi.org
telnet://
neon.ods.org:8010
http://www.editricezona.it/trionfo%20impiegato.htm

 provvisoriamente con strcmo() e strncmo(). Ovviamente si puo' giocare
Che diavolo sono strcmo() e strncmo(). Sono nomi inventati?
Comunque non penso sia molto difficile implementarle!
int stricmp(char *s1, char *s2)
{
    char c1, c2;
    while (*s1 || *s2)
    {
        c1 = tolower(*s1);
        c2 = tolower(*s2);
        if (c1 < c2)
            return -1;
        else if (c1 > c2)
            return 1;
        s1++; s2++;
    }
    return 0;
}
int strnicmp(char *s1, char *s2, int n)
{
    char c1, c2;
    while ((*s1 || *s2) && n--)
    {
        c1 = tolower(*s1);
        c2 = tolower(*s2);
        if (c1 < c2)
            return -1;
        else if (c1 > c2)
            return 1;
        s1++; s2++;
    }
    return 0;
}
Non le ho neanche compilate quindi dagli un'occhiata prima di usarle :-)
Kiuhnm

 Comunque non penso sia molto difficile implementarle!
OPS.... errore doppio di battitura......
sono strcmp () e strncmp ()
In oogni caso, grazie dell' implementazione.... mi stavo dannando in 
rete x cercarle !
Cmq le ho salvate e poi le provo.
Saluti,
Piergiorgio.

 strnicmo() ?
Be... Kiuhnm ti ha mandato le due routine sostitutive... cosě ad occhio
vanno...
Poi cerchiamo di unificare i sorgenti...
Nel frattempo, nel pochissimo tempo libero che ho in questi giorni, devo
fare una bella passata di debug...
bye
-- 
Paolo Lucchesi
email: 
pluc...@tin.it
homepage: 
http://www.paololucchesi.it
ICQ# 731067
"Non viviamo in un mondo perfetto (per fortuna)"

> Il problema principale e' che la funzione stricmp() e strnicmp() 
 > sono assenti dalla libc (o almeno, dalla mia libc)
Questo l'ho trovato con una rapida ricerca, mi pareva strano che non ci 
fossero:
   /*
   * Linux has "stricmp()" with a different name
   */
   #if defined(linux)
   # define HAS_STRICMP
   # define stricmp strcasecmp
   #endif
Immagino che anche per l'altra sia lo stesso.
   .Erix.

 
Tnx Erix !
Penso che l' altro sia, per analogia, strncasecmp.
mo' vedro'.
In ogni caso la tua soluzione, se valida, risolve il prob in maniera più 
semplice, ma per la portabilita' ?
[OT] qualcuno sa indicarmi un sito sullle variazioni ai nomi di libreria 
    della glibc/libc UNIX ?
SAluti,
Piergiorgio.

 bye
SAluti.
Piergiorgio.

> ma per la portabilita' ?
Beh, le routine di Kiuhnm risolvono il problema.
Se vuoi andare a livello di chiamata di sistema per maggiore efficienza, 
potresti usare una #if come nelle righe che ho citato.
   .Erix.


La maggiore efficienza in questo caso è del tutto irrisoria e comunque il
compilatore riesce a ottimizzare i cicli semplici piuttosto tranquillamente.
Tuttavia si può fare un file di configurazione (.h) che contenga:
// Commentare questo simbolo se non si usa Linux
#define HAVE_LINUX
// Commentare questo simbolo se non si usa la libreria GRX
#define HAVE_GRX
ecc...
oppure ci si può basare sui "simboli ambientali" predefiniti dal compilatore
stesso.
Per esempio i compilatori Windows definiscono "WIN32", "WINDOWS" o simili.
E i compilatori Linux? Definiscono "linux"?
Kiuhnm

 E i compilatori Linux? Definiscono "linux"?
Si, GCC sotto Lx definisce "Linux" (o "linux", non mi ricordo bene il 
case esatto, ma mi sembra il primo.)
Saluti,
Piergiorgio.

Nel mio caso MAC non dipende più da GRX quindi l'esempio che ti ho fatto era
appunto un esempio.
Nota comunque che non è necessario portare l'intera libreria GRX, ma solo la
piccolissima parte utilizzata da MAC (niente JPEG, TIFF, ecc...)
*Per ora* ho interrotto il porting in OpenGL perchè non ho più molto tempo e
ho notato che dovrei riscrivere MAC (le OpenGL non si prestano molto bene a
funzioni tipo GetKey! Una soluzione facilissima sarebbe quella di usare 2
thread, ma così perderei in portabilità).
Kiuhnm