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

di Francesco Sblendorio

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:

CLRSCRCancellazione schermo
GOTOXY(col,row)Posizionamento cursore
CLREOLCancella fino a fine riga
INSLINEInserimento riga
DELLINERimozione 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.0Codice 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 3In 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:


Commenti

Post popolari in questo blog

Commodore 16: CPU 7501/8501 FPGA Replacement

Zork, CP/M, le adventure Infocom e la personalizzazione del terminale

APPENDere in Turbo Pascal per CP/M

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

YAZE: un ottimo emulatore Z80 + CP/M

CP/M su Commodore 128: terminali e sequenze di escape

Modi di andare a capo

Un MIST-ico Amiga

CP/M su Commodore 128: non solo “DIR”

MIST how-to: Amiga con Kickstart 1.3 e supporto Hard Disk IDE