HyperTalk | Blog | Neurox66 Retrocomputer

Neurox66 Retrocomputer

I miei computer, console e programmi retro

HyperTalk

Interprete Basic

Dopo molte prove e tentativi di ottimizzare l'interprete a velocità decenti ho deciso di sospendere il progetto.
Utilizzo ora molte delle funzioni scritte e in pratica tutto il tokenizer per un compilatore Z80 / Amstrad CPC
Ecco cosa vuol dire riciclare i byte usati Happy

SECONDS e riflessioni

Nuovo giorno e una nuova funzione aggiunta. Mi sono reso conto che lo schermo virtuale è comodo perché mi permetterà più avanti di cambiare quattro funzioni e adattarlo a qualsiasi output ma al costo della lentezza. Infatti la funzione odierna è SECONDS() che restituisce i secondi passati dal 1 gennaio 1970 è stata scritta proprio con lo scopo di cronometrare il tempo impiegato. Ho avuto la triste conferma con questo codice:

Basic005

se visualizzo il conto alla rovescia da 100 a 1 impiega ben 12 secondi ma se metto il REM davanti a LOCATE e PRINT allora il tempo è 0 secondi ;-O
Per il momento proseguo così e poi si vedrà Happy


For Next e altro

Eccoci qui e un'altro poco di codice è stato scritto Winking
Aggiunto i cicli For-Next nidificati con tanto di TO e DOWNTO oltre allo STEP.
Inoltre ho creato uno schermo virtuale per l'output di 80x50 caratteri con gestione del colore tramite comando INK
la paletta di 27 colori è stata ispirata dal Amstrad CPC Happy ovviamente
Dimenticavo i comandi CENTER e LOCATE per posizionare il testo.
Ho parecchie idee in stile CLIPPER ma per il momento procediamo un passo alla volta.
Basic003Basic004

Cicli While

Anche oggi un mattone in più nel mio interprete, prima o poi gli darò anche un nome hahaha
Ora i cicli WHILE/ENDWHILE possono essere nidificati, sono arrivato a 24, dopodiche mi sono rotto e poi avevo terminato le lettere del alfabeto per le variabili Winking
Mentre stavo scrivendo il codice ho deciso di aggiungere tre nuovi comandi AUTOINC, AUTODEC e AUTOVAL che servono a incrementare o decrementare con un valore imposto la variabile del ciclo WHILE in maniera automatica.
Così il codice risultante sarà più pulito, forse. Inoltre ho aggiunto la possibilità di formattare automaticamente le variabili numeriche e i numeri.
Ecco un esempio…

basic002

Eliminare gli spazi Happy

Sto ampliando e migliorando il mio interprete Basic e oggi mi sono accorto di un problema legato ad una funzione che uso da tanti anni, e mi sono reso conto di essere un pollastro Winking
La funzione in questione è Trim, siccome in LiveCode non c'era e avevo bisogno di qualcosa minimalista la scrissi così:

function Trim pText
return word 1 to -1 of pText
end Trim

Siccome lo spazio non viene considerato tipo WORD, scrivendo in questa maniera restituisco tutte le WORD dalla prima all'ultima e se ci sono degli spazi all'inizio o alla fine li salta, geniale.
Ma c'è sempre un ma, in Basic per distinguere i tipi di variabili si usa mettere il simbolo $ alla fine del nome della variabile, cosi anche nel mio interprete Basic, se la riga è:
VAR Pollo$ = "Paolo"
PRINT "Ciao ", Pollo$ , " bentornato!"
Nella prima riga tutto bene perché Pollo$ è considerato tipo TOKEN ma se eseguo la funzione Trim nel PRINT, visto che ci sono tre segmenti separati dalla virgola e non voglio trattarli come TOKEN, mi restituisce "Pollo" perché il simbolo $ non appartiene al tipo WORD, in LiveCode il tipo WORD è una parola delimitata da uno o più spazi, tabulazioni, CR, o è racchiusa da doppi apici. Meglio tardi che mai Winking
Così ho riscritto la funzione Trim Happy

function Trim pData
return Ltrim(Rtrim(pData))
end Trim

function Ltrim pData
local v_i
repeat with v_i = 1 to the number of chars in pData
if char v_i of pData <> space then exit repeat
end repeat
return the char v_i to -1 of pData
end Ltrim

function Rtrim pData
local v_i
repeat with v_i = the number of chars in pData down to 1
if char v_i of pData <> space then exit repeat
end repeat
return the char 1 to v_i of pData
end Rtrim

Ovviamente si può scrivere in altri cento modi Winking

Hypertalk

Nel mio precedente post ho parlato di HyperTalk, quella sera riflettevo che in oltre quarant'anni di programmazione ho studiato, imparato e approfondito diversi linguaggi di programmazione.Dal Basic al Clipper, passando dal Turbo Pascal al C per scribacchiare in Python ma quello a cui sono più legato, se così si può dire, è HyperTalk . Ovviamente anche la sua ultima incarnazione, Livecode. In tempi passati Winking in base al progetto da portare avanti si sceglieva il linguaggio più adatto come lo era anche per i computer e i sistemi nelle due ultime decadi del Ventesimo secolo. Nel 1989 circa mi fu richiesta un applicazione che doveva girare su un Mac SE con HyperCard. HyperCard è un applicazione ipertestuale che include un linguaggio di programmazione; HyperTalk. Fu amore a prima vista Happy Dopo qualche anno accantonai il Turbo Pascal e il Clipper per usare sempre più spesso HyperTalk. Un linguaggio chiaro, semplice e leggibile niente arzigogoli con parentesi graffe, due punti e uguale, e punti e virgole hahahahahaha La particolarità principale è che si scrive in inglese frasi di senso compiuto. Faccio un esempio, se devo prendere la prima parola di un campo è semplicissimo:
put the first word in field "Cognome" into tVariabile
E se volessi mettere la prima lettera del campo in maiuscolo:
put toUpper(the first char of field "Cognome") into the first char of field "Cognome"
Di una semplicità disarmante, e in questi trent'anni si è evoluto in un linguaggio multi piattaforma molto potente, peccato che non ci sia una versione per Z80 Winking

Il mio primo interprete

Quasi tutti i programmatori della mia generazione, prima o poi si sono cimentati nello sviluppo di un interprete o in un compilatore. Oggi è stata la mia volta Happy In realtà qualche anno addietro avevo scritto un linguaggio script incluso in una applicazione che avevo sviluppato per un cliente ma questa volta è ispirato al buon vecchio linguaggio Basic. Linguaggio che tutti noi, quando abbiamo mosso i primi passi nell'uso dei nostri amati Home Computers ci siamo impegnati ad imparare, usare e abusarne Winking Sono alla versione 0.0.1, ho iniziato a scriverlo due ore fa. E' molto rigido e al momento mancano IF e cicli FOR ma funziona. Ho usato il buon vecchio LiveCode, linguaggio che amo, evoluzione del HyperTalk e in meno di 200 linee di codice funziona Happy Ecco una foto dello schermo dove per provarlo ho scritto il classico generatore dei numeri di Fibonacci.


basic001