# Dartmouth BASIC

Il Dartmouth BASIC (noto anche come CardBASIC) è la versione originale del linguaggio BASIC, sviluppato al Dartmouth College. Il linguaggio fu progettato da John Kemeny e da Thomas Kurtz e girava sul Dartmouth Time Sharing System (DTSS). Fu uno dei primi linguaggi di programmazione interattivi.
Era destinato ai sistemi basati sul lettore di carte perforate. La prima versione interattiva fu disponibile nel giugno del 1964, la seconda in ottobre 1964; la terza nel 1966; la quarta 1969; la quinta 1970; la sesta 1971 e la settima nel 1979.

## Storia

Il BASIC fu progettato assieme al compilatore e al sistema operativo, così i primi programmi BASIC potevano essere eseguiti nella modalità batch nel 1964. Comunque il 1º maggio del 1964 John Kemeny e John McGeachie eseguirono i primi programmi BASIC dai terminali del sistema DTSS. I programmi consistevano di una singola riga:
PRINT 2 + 2
La seconda versione aveva novità minime, con l'aggiunta del punto e virgola al comando PRINT.
Nella terza versione fu introdotto il comando INPUT e il comando MAT per le operazioni sulle matrici, il comando RESTORE per essere utilizzato con READ/DATA. Lo sviluppo continuò con la gestione del testo e le variabili nella versione 4. La quinta portò la gestione dei file. La sesta versione portò le procedure con i parametri: questa fu la versione dalla quale derivarono quasi tutti i dialetti del BASIC. Nel 1976, Steve Garland aggiunse la programmazione strutturata al Dartmouth SBASIC, un pre-compilatore che produceva programmi BASIC compatibili con la versione 6 (con le quali gettò le basi all'ANSI BASIC). Nel 1979 Kemeny e Kurtz commercializzarono un compilatore ANSI BASIC come la settima e ultima versione del BASIC al Dartmouth, prima di abbandonare il college per concentrarsi sullo sviluppo del ANSI BASIC sotto il nome del True BASIC.

## Interfaccia utente

Il DTSS implementava una forma primitiva di ambiente di sviluppo sotto forma di riga di comando. Non c'era modo di uscire da questo ambiente. Se l'utente non rispondeva dopo un certo periodo, il sistema ne forzava l'uscita. Ogni riga che cominciava con un numero di linea era aggiunta al programma, se non c'era il numero il comando inserito veniva eseguito immediatamente.

### Lista dei comandi DTSS

Quello che segue è un elenco dei comandi dell'ambiente DTSS che, a differenza di quanto credevano gli studenti, non facevano parte dei comandi del BASIC: essi erano infatti usati anche quando venivano inseriti programmi in altri linguaggi di programmazione, come l'ALGOL o il FORTRAN.
* HELLO—per accedere al DTSS
* BASIC—modalità BASIC
* NEW—per iniziare a scrivere un nuovo programma
* OLD—per caricare un programma
* LIST—mostra il programma corrente
* SAVE—per salvare un programma
* UNSAVE—per cancellare un programma
* CATALOG—per mostrare i nomi dei programmi
* SCRATCH—per cancellare il programma corrente
* RENAME—per cambiare il nome al programma
* RUN—per eseguire il programma corrente
* STOP—per interrompere il programma corrente

### Lista delle istruzioni BASIC

* DEF—definizione di funzioni a singola riga
* DIM—definizione di un array
* END—fine dell'esecuzione del programma
* STOP—interruzione dell'esecuzione del programma
* FOR / TO / STEP—gestione del ciclo
* NEXT—fine del ciclo
* GOSUB—salta ad una routine
* RETURN—fine della routine e ritorna all'istruzione chiamante
* GOTO—salta ad un numero di riga
* IF / THEN—istruzione di condizione
* LET / =—definizione di funzione matematica
* PRINT—stampa di valori
* DATA—memorizzazione di dati nel programma
* READ—lettura di dati memorizzati con DATA
* REM—commento
Erano anche implementate l'aritmetica e le variabili in virgola mobile. I nomi delle variabili erano limitati all'uso delle lettere dell'alfabeto, eventualmente abbinate ad una singola cifra: i nomi validi andavano quindi da A a Z, da A0 a A9, da B0 a B9, ecc.. per un massimo di 286 possibili combinazioni. I nomi degli array erano limitati all'uso di una sola lettera (da A a Z): non era necessario definirne la dimensione con DIM ma, in questo caso, la loro dimensione era impostata a 10 di default (l'indice partiva da 1).

### Lista di operatori

| Operatore aritmetico | Operatore aritmetico | Operatore logico | Operatore logico |
| - | Negazione (unario) | = | Uguale a |
| + | Addizione | <> | Non uguale a |
| - | Sottrazione | < | Inferiore a |
| * | Moltiplicazione | <= | Inferiore o uguale a |
| / | Divisione | > | Maggiore a |
| ^ | Potenza | >= | Maggiore o uguale a |
| Operatori di raggruppamento | Operatori di raggruppamento | | |
| ( ) | Raggruppamento | | |

### Lista di funzioni

* INT—Intero
* ABS—Assoluto
* SQR—Radice quadrata
* SIN—Seno
* COS—Coseno
* ATN—Arcotangente
* LOG—Logaritmo
* EXP—Esponenziale
* RND—Valore casuale