Turbo Pascal porting: dal 7.0 (DOS) al 3.01 (CP/M) – parte 2

turbo pascal

Dopo la prima parte, dedicata alla preparazione dell’ambiente di sviluppo, eccoci finalmente “sul pezzo”, pronti ad affrontare le differenze tra le versioni 7.0 per DOS e 3.01 per CP/M di Turbo Pascal.

Dichiarazione delle STRINGhe.

In Turbo Pascal 7 siamo abituati a usare il tipo STRING senza specificarne la lunghezza. Nelle dichiarazioni di variabili si assume come default la lunghezza massima di 255 caratteri, mentre nelle dichiarazioni dei parametri di procedure e funzioni viene assunta una lunghezza variabile, in funzione del parametro effettivo fornito.

Tutto ciò in Turbo Pascal 3 non è possibile: bisogna sempre specificare la lunghezza massima tra parentesi quadre. Per comodità potete definire un nuovo tipo e usarlo al posto di “STRING” senza specifica della lunghezza massima:

TYPE STRINGVAR = STRING[255];
VAR s:STRINGVAR;

Short-circuit boolean evaluation: non c’è.

Nelle istruzioni dove è prevista la valutazione di una condizione fate particolare attenzione che ogni parte delle espressioni boolean verrà valutata. Su questo stesso sito c’è stato un approfondimento in merito: ecco il link all’articolo completo.

Dimenticate USES CRT;

In Turbo Pascal 3 non esistono le UNIT (cioè i moduli pre-compilati e da linkare a parte). L’unico modo di fare programmazione modulare è tramite la direttiva di inclusione:

{$I NOMEFILE.INC}

In ogni caso, parte delle procedure che siamo abituati a considerare parte del modulo CRT della versione 7, nella versione 3 sono built-in nel linguaggio, e non c’è in questo caso da includere nulla. Mi riferisco alle procedure basiche di gestione dello schermo:

CLRSCR Cancellazione schermo
GOTOXY(col,row) Posizionamento cursore
CLREOL Cancella fino a fine riga
INSLINE Inserimento riga
DELLINE Rimozione riga

Tali funzioni sono quindi utilizzabili as-is e senza particolari problemi. ATTENZIONE: ricordiamoci però che il loro funzionamento dipende dalla fase di setup dell’ambiente (come visto nella parte 1): le chiamate a tali procedure vengono tradotte nelle sequenze di escape del terminale per cui è stato configurato l’ambiente. Ciò significa che l’eseguibile che si produrrà non avrà il comportamento atteso nel momento in cui verrà lanciato da un terminale non compatibile con quello selezionato in fase di setup.

La funzione Readkey 

Questa funzione non è presente in Turbo Pascal 3. Al suo posto, bisogna usare la procedura standard READ applicata al file built-in di nome KBD (che rappresenta la tastiera)

Codice Turbo Pascal 7.0 Codice Turbo Pascal 3.01
var ch:char;

ch := Readkey;
var ch:char;

Read(KBD,ch)

Gestione dei file: la procedura APPEND

Nel caso abbiate la necessità di gestire file, sappiate che la funzione di APPEND, cioè di apertura di un file in scrittura in coda, non esiste nella versione CP/M di Turbo Pascal 3. In questo stesso sito abbiamo già affrontato e risolto il problema relativamente ai file di testo: ecco il link all’articolo completo.

Finisce qui la seconda parte. Buon coding a tutti!

Riferimenti esterni:

 

 

Francesco Sblendorio

Francesco Sblendorio nasce nel 1977. Nel 1985 fa conoscenza con il mondo dei computer attraverso un Commodore 16: da quel momento la discesa verso il lato oscuro è inesorabile e si trasforma in un geek impenitente. Nell'ambito del retrocomputing ha un sogno: che i vecchi computer non debbano semplicemente sopravvivere (conservando la loro funzionalità), piuttosto devono vivere, attraverso nuovi software sviluppati oggi per i computer di ieri.

Potrebbero interessarti anche...