INTERPRETE FOCAL per MS-DOS

 

FOCAL INTERPRETER for MS-DOS

 

FOCAL (acronimo per Formulating On-Line Calculations in Algebraic Language) è il nome di un linguaggio di tipo conversazionale sviluppato dalla Digital Equipment Corporation (DEC) a partire dal 1969 per la linea dei propri minicomputer PDP-8 in alternativa al Basic Dartmouth. Si sono poi avute ulteriori versioni, ad esempio il FOCAL71 o UW-FOCAL, per i modelli successivi della serie PDP (11 & 15) ed anche versioni per le prime schede a microprocessore degli anni 70 (un esempio per tutti il FOCAL per la scheda KIM-1 basata sul microprocessore 6502).

Caratteristiche essenziali del linguaggio erano l'estrema semplicità: numeri di riga come il Basic ma raccolte in gruppo (ad es. 10.20) , comandi composti da una sola lettera (a per ask, t per type, c per comment ecc..), variabili solo numeriche ed array dimensionati automaticamente in funzione della memoria disponibile.

Le caratteristiche della prima versione, nota come FOCAL69, sono state raccolte dalla DEC in un libretto (una specie di tutorial) qui trascritto in PDF.

Mi sono imbattuto nel FOCAL per i miei studi di storia dell'informatica (e precisamente sul Dartmouth Basic del PDP-10) e ho guardato per vedere se ne era mai stata realizzata una versione per MS-DOS: il risultato non è stato incoraggiante perché ho solo trovato una versione scritta in C (FOCAL-81, non completa anche se funzionante) realizzata nel 1981 da Dave Conroy e modificata nel 1995 da Akira Kida. La versione originale era concepita per funzionare sotto vari Sistemi Operativi (Solaris, HP-UX e MS-DOS) e questa è stata la base di partenza per ottenere la versione che qui presento.

Ho così rispolverato il C che avevo studiato all'Università e che, successivamente, avevo avuto scarse possibilità di usare; come compilatore ho scelto in Quick C 2.0 Microsoft perché dotato di un ambiente di sviluppo molto interattivo e praticamente identico a quello del Quick Basic.

Dopo  uno studio del FOCAL69, FOCAL71 e UW-FOCAL, il primo passo è stato quello di capire il sorgente originale (che era diviso in quattro parti), ho completato poi i comandi mancanti adattandoli anche all'MS-DOS: tutte le note di installazione e di sviluppo nonché un piccolo manuale del linguaggio è raccolto nel file FOCAL.TXT.

Contrariamente al solito il tutto è stato trascritto in inglese e sono compresi ANCHE i sorgenti, per rispetto all'opera degli autori originali. La versione che si può scaricare è la 2.2 che comprende anche dei comandi di grafica (640x200 e 640x480 monocromatica): ricordo anche nel FOCAL69 del PDP-8 c'era la possibilità di avere output grafici sullo schermo di un oscilloscopio (!!)

Un esempio di programma FOCAL (primes.foc) è il seguente:

10.01 ask "Number",size
10.03 if (size) 10.05,10.05,10.10
10.05 quit
10.10 type "List of prime numbers",!
10.15 set l = 0
10.20 for i = 1, size;set iflags(i) = 1
10.30 set iflags(1) = 0
10.40 for num = 1, size; do 20
10.50 for num = 1, size; do 30
10.60 type !
10.90 go 10.01
20.10 if (iflags(num)) 20.20, 20.90, 20.20
20.20 set prime = num
20.30 set mult = prime + prime
20.40 if (mult-size) 20.50, 20.50, 20.90
20.50 for i = mult, prime, size; set iflags(i) = 0; c prime is for loop step
20.90 return
30.10 if (iflags(num)) 30.90, 30.90
30.20 type %5.0, num, " "
30.30 set l=l+1
30.40 if (l-9) 30.90
30.50 type !;set l=0
30.90 return

 

che stampa un elenco di numeri primi da 1 a size (impostato dall'utente con l'istruzione ASK della linea 10.01)

Un altro esempio di programma con output grafico è il seguente (sine.foc):

01.10 c sine graphic in 640x200
01.20 ask "Number of period",q
01.25 set np=400
01.30 for i=0,np; do 2
01.35 notify graphic
01.37 for j=0,639; plot 100,j,1; c draw x-axis
01.40 for i=0,np; plot y(i),x(i),1
01.42 type @1.1,"SINE CURVE"!
01.45 keypress
01.46 notify nographic
01.50 quit

02.10 c calculate points
02.20 set y(i)=(fsin((pi*i*q*2)/np)+1)*100
02.30 set x(i)=i*639/np
02.40 return

 

N.B. Nella cartella X86 c'è la versione originale dell'interprete di Conroy e Kida.

FOCAL 2.2 is a 16 bit program and all messages and documentation are in English.

Download: FOCAL 2.2 Interpeter for MS-DOS