# GW-BASIC

Il GW-BASIC (Graphics and Windows Beginner's All-purpose Symbolic Instruction Code) è uno dei dialetti del linguaggio BASIC sviluppato da Microsoft sulla base del BASICA. Fu inizialmente prodotto per la Compaq e inserito da Microsoft anche nel suo sistema operativo MS-DOS per IBM PC compatibili fino alla versione 5.0, quando fu rimpiazzato dal QBasic.
Il GW-BASIC è compatibile con il BASICA e, come questo, poteva essere lanciato da disco removibile ma, a differenza di esso, non si appoggia all'interprete BASIC memorizzato nelle ROM dei primi modelli di PC IBM ma viene caricato completamente in memoria al momento del suo avvio.
Il GW-BASIC è quasi privo delle caratteristiche della programmazione strutturata ma ha diversi comandi per la gestione della grafica e, parzialmente, anche per la gestione sonora (musica monofonica). Risultò quindi un linguaggio molto versatile, adatto a imparare i rudimenti della programmazione, e che ben si adattava a produrre ogni genere di applicazione, da semplici giochi a programmi per ufficio ad applicazioni di gestione dei dati su disco.

## Sintassi

Il GW-BASIC ha un Integrated Development Environment (IDE) a riga di comando basato sul Dartmouth BASIC: se l'utente inserisce una riga che inizia con un numero, questa viene considerata come una riga di codice da inserire nel programma residente in memoria, altrimenti l'interprete analizza la sintassi del testo inserito e, se sono presenti istruzioni o comandi validi, li esegue immediatamente. L'IDE include anche una particolare riga dello schermo (l'ultima in basso) in cui sono riportate le scorciatoie dei comandi assegnati ai tasti funzione. I programmi vengono salvati in formato binario compresso con i comandi sostituiti dai relativi token: c'è comunque la possibilità di salvarli in formato ASCII.
Come molte altre versioni del BASIC per microcomputer circolanti all'epoca, anche il GW-BASIC era carente nel supporto per la programmazione strutturata (ad esempio non gestisce le variabili locali) ed era abbastanza lento a causa del fatto di essere un linguaggio interpretato (per ovviare a questo problema Microsoft pubblicò un compilatore denominato BASCOM compatibile con il GW-BASIC, per quelle applicazioni che necessitavano di più velocità).
L'ambiente di sviluppo ha comandi per visualizzare (LIST), eseguire (RUN), salvare (SAVE) o caricare (LOAD) i programmi ma anche per tornare all'ambiente MS-DOS (SYSTEM). Questi comandi possono essere eseguiti anche come istruzioni di programma.
Come detto, il supporto alla programmazione strutturata è limitato. Il blocco condizionale IF/THEN/ELSE deve essere scritto tutto su un'unica riga, mentre il blocco WHILE/WEND può distribuirsi su più linee. Le funzioni possono essere definite solo utilizzando l'istruzione DEF FNnome_func(x) (ad esempio la seguente funzione calcola un logaritmo: DEF FNLOG(base,numero)=LOG(numero)/LOG(base)), ma sempre inserendo tutto il codice in un'unica riga.
Il tipo di dati di una variabile è definito ricorrendo a un carattere speciale inserito alla fine del nome della variabile: ad esempio, il carattere $ identifica le stringhe mentre % identifica un numero intero. C'è la possibilità di creare dei gruppi di variabili di un determinato tipo di dato utilizzando l'istruzione DEFtipo_dato lettera, dove tipo_dato sta per il tipo (ad esempio DEFINT indica il tipo intero) e lettera una lettera o un gruppo di lettere dell'alfabeto. Tutte le variabili indicate nel programma il cui nome inizia con la lettera specificata nella definizione sono del tipo di dato indicato. Ad esempio DEFINT A-C indica che tutte le variabili che iniziano con A, B o C sono di tipo intero. Il tipo standard di dati per le variabili non dichiarate è il virgola mobile (o floating point)
Il GW-BASIC permette la gestione diretta dei joystick e delle penne ottiche: la gestione dei mouse è invece possibile solo ricorrendo a driver o programmi esterni. Tramite GW-BASIC è possibile leggere e scrivere su file o su porte seriali: di queste ultime può anche gestire gli eventi. Il GW-BASIC non gestisce le operazioni su nastro perché la porta per il registratore a cassette dei PC IBM originali non fu mai implementata sui computer compatibili.
Il GW-BASIC ha un supporto base per la musica, essendo in grado di riprodurre semplici note mediante l'istruzione PLAY a cui va passata una stringa contenente una codifica particolare indicante le note, la loro durata, l'ottava, ecc. (ad esempio, PLAY "edcdeee2dfedc4"). Un controllo più a basso livello è possibile con l'istruzione SOUND che riproduce un suono di una particolare frequenza e durata tramite l'altoparlante interno del computer. Su alcuni computer, come il Tandy 1000, è possibile gestire fino a 3 canali audio con i comandi SOUND e PLAY.

## Significato del nome

Ci sono diverse teorie circa il significato delle iniziali "GW" presenti nel nome del software. La versione ufficiale indica in esse l'abbreviativo di "Graphics and Windows", ad indicarne le potenzialità grafiche estese rispetto ai precedenti BASIC. Una versione non ufficiale, forse la più accreditata perché confermata dallo stesso interessato, riporta che GW altro non sarebbero che le iniziali di Greg Whitten, un dipendente Microsoft che fu assunto dalla società nel 1979 e che contribuì, fra gli altri progetti, allo sviluppo degli standard del linguaggio BASIC di Microsoft. Un altro significato di GW sarebbe, secondo Whitten, Gee Whiz (traduzione: "diamine", "perbacco") per il grande numero di istruzioni grafiche in 2D contenute nel linguaggio ma anche perché suonava bene per gli OEM del mercato giapponese. Lo stesso Whitten, però, non sa esattamente quale sia il significato di GW perché il nome GW-BASIC fu scelto da Bill Gates in persona: a parer suo, GW potrebbero anche essere le iniziali di Gates e Whitten.