Problemi di porting
Luca Giuzzi
giuzzi a dmf.bs.unicatt.it
Dom 28 Gen 2001 14:27:56 UTC
Facciamo un distinguo: il C e' C e il gcc implementa l'ISO-99 (con
compatibilita' verso k&r e ansi, nonche' qualche estensione
sua propria). Il tuo problema e' che l'ISO (o anche l'ansi, se e' per
quello, solo che ISO e' l'ultimo standard rilasciato) si limita a
definire il linguaggio e alcune funzioni obbligatorie nella standard
library... l'interfaccia con il sistema operativo e' demandata ad
altri standards (Posix, ad es.) e non e' parte del C.
In particolare queste cose riguardano:
1. l'interfacciamento col filesystem
2. il controllo dei terminali
3. accesso a facilities di sistema
[intendiamoci: fopen e parenti si trova in stdio ed e' parte dello standard;
cose tipo la gestione delle pipes (popen) NON sono parte di ISO ma di
POSIX]
Uno dei settori da considerare in questi casi e' ad esempio la gestione
del terminale: la domanda "come si cancella lo schermo in ansi C?" ha
come risposta "non si puo' fare... usa la libreria curses o la
termcap".
Venendo al problema concreto di fare il porting di vecchio codice DOS...
1. di che tipo di programmi si tratta? Se l'input/output avviene
solamente in modo testo dovrebbe andarti benissimo la libcurses o la
termcap... se usi la grafica probabilmente devi studiarti la svgalib
(per un port quick&dirty) oppure, meglio, la libXt
2. che facilities di sistema usi? timers/interrupts/accesso ai devices/
organizzazione del filesystem sono diversi sotto un sistema posix
e sotto dos... queste cose vanno sicuramente riscritte
3. usi forse chiamate alla API di windows? In questo caso potresti provare
a compilare con la libwine ma la cosa migliore sarebbe comunque
riscrivere il tutto usando gtk [per i sostenitori di KDE: la Qt e'
C++ only]
Servono piu' dettagli prima di poter dare una risposta. In particolare
una equivalenza 1:1 sulle cose non standard (standard sono stdio/stdlib e
basta... il resto non e' C) e' praticamente impossibile da aspettarsi.
Ciao,
lg
Maggiori informazioni sulla lista
Lug
|