Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Realizzare un simulatore SPICE: versione per MS-DOS a 16 bit (3/5)
Scritto da Massimo Mazza il 28-01-2011 ore 09:09
Intel Parallel Studio XE
La mancanza della coppia CR/LF nei file di testo UNIX causa anche un altro inconveniente, questa volta più grave: poiché anche la Shell DOS si basa sulla presenza di tale coppia di caratteri per distinguere le varie righe dei file batch, eseguendo questi ultimi per compilare il pacchetto SPICE giustamente l'interprete dei comandi entra in crisi.

Occorre quindi convertire tutti i file dell'archivio contente i sorgenti di SPICE, sostituendo al carattere LF presente in ogni fine riga, la coppia CR/LF, cosa che può sembrare banale, ma che in realtà implica la modifica di centinaia di file (praticamente tutti). Tuttavia, il compilatore Microsoft C 6.0 interpreta correttamente anche i file sorgenti che utilizzano la convenzione UNIX, quindi occorre solamente sistemare i file batch (qualche decina) per le varie fasi di compilazione.

A questo punto le soluzioni possono essere diverse: ad esempio, si potrebbero caricare i file da modificare in un qualsiasi text editor, e salvarli come file di testo: se l'editor carica correttamente i file, generalmente nel salvataggio provvede ad aggiungere le coppie CR/LF mancanti. Alcuni editor prevedono espressamente tale situazione, come quelli utilizzati dai programmatori: Emacs, Multi-Edit, QEdit e tanti altri. Resta il fatto che caricare e risalvare decine di file BAT non è propriamente un lavoro veloce.

Detto en passant, tale problema risulta un utile esercizio per coloro che iniziano a programmare in C; si può infatti realizzare un piccolo programa, veramente minuscolo, che legge in input un file di testo, e aggiunge a fine riga il carattere CR (0x0A) mancante. Ne ho realizzato uno circa venticinque anni fa, chiamandolo addcr, insieme a un altro programma che effettuava l'operazione inversa, ovvero eliminava il carattere CR da ogni riga, per convertire file DOS in UNIX (stripcr). Ritornando al problema iniziale, esso è risolvibile copiando i file da convertire su un PC con Linux, ed eseguendo questo semplice comando shell per ognuno di essi:
  1. sed 's/$/^M/' nomefile
sed sta per stream editor, ed è una utility UNIX per effettuare il parsing di file di testo e applicarvi modifiche se necessario. La stringa di comando per sed 's/$/^M/' sostituisce (s) ogni occorrenza del carattere $ (è un metacarattere che indica end-of-line, EOL) con il carattere ^M (che rappresenta il CR).

In UNIX il terminatore di fine riga è il carattere LF; leggiamo il file, a fine riga gli sostituiamo il carattere CR in sua vece, e UNIX di suo ci riaggiunge il carattere LF per terminare la riga. Risultato: il file avrà ogni riga terminata da una coppia CR/LF. Nulla di tutto ciò esiste sotto Windows (o DOS), e ciò la dice lunga sulle differenze tra i due mondi.
Precedente: Micro Focus e la modernizzazione di COBOL
Successiva: Hash e protezione delle password in PHP
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.268 secondi.