linux user group brescia

immagine del castello

Archivio della mailing list

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