In questa sezione si trovano dei frammenti di software di difficile riutilizzo negli attuali sistemi operativi ad interfaccia visuale, ma che possono risultare interessanti sotto altri aspetti se non si ha la frenesia dell'ultima novità. Sono, in un certo senso, utensili archeologici perfettamente funzionanti e carichi di tutto il fascino che può avere un reperto; possono essere tenuti come soprammobili e come un vecchio carillon, se saputi trattare, possono suscitare ancora antiche emozioni. Nel loro DNA circola ancora la stessa vitalità del pensiero logico che li ha creati. Si tratta di piccole routine per gestire i vari stati della tastiera in ambiente DOS, ad integrazione dei pochi controlli disponibili nei normali linguaggi. Sono state sviluppate sotto forma di funzioni/procedure richiamabili da Pascal, e talvolta anche in C. Gli strumenti necessari per la loro verifica sono quelli classici: MASM o TASM, LINK o TLINK, un EDITOR ASCII, un compilatore Borland PASCAL da 4.0 a 7.0. Nel caso di utilizzo per C viene utillizzata una direttiva di compilazione che imposta il modello di memoria adatto alla circostanza; occorre un piccolo file di nome MODEL.IAS che contiene le seguenti 2 righe:

.model medium
comp__pascal equ 1

oppure

.model medium
comp__c equ 1

Ogni funzione/procedura può essere scaricata ed usata così com'è o modificata a proprio piacimento per uso personale. In caso di utilizzo in pagine Web si raccomanda di NON alterare l'intestazione con i riferimenti all'Autore/Proprietario e si gradisce un Link a questo sito o una e-mail. Questo materiale viene reso disponibile FREEWARE o meglio CAREWARE, secondo la definizione datane da Paul Lutus .


Procedure XSetInsKey(S: Boolean);
Imposta il tasto bistabile Ins a On/Off (1/0)
Es.: XSetCapsKey(1);
Es.: * void XSetInsKey(char ch);

Procedure XSetCapsKey(S: Boolean);
Imposta il tasto bistabile Caps a On/Off (1/0)
Es.: XSetCapsKey(1);
Es.: * void XSetCapsKey(char ch);

Procedure XSetNumKey(S: Boolean);
Imposta il tasto bistabile Num a On/Off (1/0)
Es.: XSetNumKey(1);
Es.: * void XSetNumKey(char ch);

Procedure XSetScrollKey(S: Boolean);
Imposta il tasto bistabile Scroll a On/Off (1/0)
Es.: XSetScrollKey(1);
Es.: * void XSetScrollKey(char ch);

Function XInsKeyLocked: Boolean;
Legge lo stato del Tasto Bistabile Ins (On/Off B=1/0).
Es.: B:=XInsKeyLocked;
Es.: * char XInsKeyLocked();

Function XCapsKeyLocked: Boolean;
Legge lo stato del Tasto Bistabile Caps (On/Off B=1/0).
Es.: B:=XCapsKeyLocked;
Es.: * char XCapsKeyLocked();

Function XNumKeyLocked: Boolean;
Legge lo stato del Tasto Bistabile Num (On/Off B=1/0).
Es.: B:=XNumKeyLocked;
Es.: * char XNumKeyLocked();

Function XScrollKeyLocked: Boolean;
Legge lo stato del Tasto Bistabile Scroll (On/Off B=1/0).
Es.: B:=XScrollKeyLocked;
Es.: * char XScrollKeyLocked();

Function XAltKeyPressed: boolean;
Legge lo stato del Tasto Alt: true se premuto.
Es.: B:=XAltKeyPressed;
Es.: * char XAltKeyPressed();

Function XCtrlKeyPressed: boolean;
Legge lo stato del Tasto Ctrl: true se premuto.
Es.: B:=XCtrlKeyPressed;
Es.: * char XCtrlKeyPressed();

Function XLShiftKeyPressed: boolean;
Legge lo stato del Tasto Left-Shift: true se premuto.
Es.: B:=XLShiftKeyPressed;
Es.: * char XLShiftKeyPressed();

Function XRShiftKeyPressed: boolean;
Legge lo stato del Tasto Right-Shift: true se premuto.
Es.: B:=XRShiftKeyPressed;
Es.: * char XRShiftKeyPressed();

Function XSysReqKeyPressed: boolean;
Legge lo stato del Tasto SysReq: true se premuto.
Es.: B:=XSysReqKeyPressed;
Es.: * char XSysReqKeyPressed();

Function XCapsKeyPressed: boolean;
Legge lo stato del Tasto Caps: true se premuto.
Es.: B:=XCapsKeyPressed;
Es.: * char XCapsKeyPressed();

Function XNumKeyPressed: boolean;
Legge lo stato del Tasto Num: true se premuto.
Es.: B:=XNumKeyPressed;
Es.: * char XNumKeyPressed();

Function XScrollKeyPressed: boolean;
Legge lo stato del Tasto Scroll: true se premuto.
Es.: B:=XScrollKeyPressed;
Es.: * char XScrollKeyPressed();

Function XRAltKeyPressed: boolean;
Legge lo stato del Tasto Right-Alt: true se premuto.
Es.: B:=XRAltKeyPressed;
Es.: * char XRAltKeyPressed();

Function XRCtrlKeyPressed: boolean;
Legge lo stato del Tasto Right-Ctrl: true se premuto.
Es.: B:=XRCtrlKeyPressed;
Es.: * char XRCtrlKeyPressed();

Function XLAltKeyPressed: boolean;
Legge lo stato del Tasto Left-Alt: true se premuto.
Es.: B:=XLAltKeyPressed;
Es.: * char XLAltKeyPressed();

Function XLCtrlKeyPressed: boolean;
Legge lo stato del Tasto Left-Ctrl: true se premuto.
Es.: B:=XLCtrlKeyPressed;
Es.: * char XLCtrlKeyPressed();

Function XTestKbd: Byte;
Imposta il valore di TP_Keyboard (tipo byte definito nel chiamante), in funzione del tipo di tastiera: 00h Tastiera Normale, 10h Tastiera Estesa.
Es.: XTestKbd;
Es.: * char XTestKbd();

Procedure XTestKey(Var B: Boolean; Var C: Char; Var S: Byte);
Riporta B=True, ASCII-Code e Scan-Code se è stato già battuto un tasto, altrimenti riporta B=False.
Es.: XTestKey(B,Ch,Sc);

Function XReadKey: Word;
Restituisce 0 se non è stato battuto alcun tasto altrimenti Hi(ReadKey) è lo ScanCode del tasto e Lo(XReadKey) è l'AsciiCode. Visionare le tabelle ScanAscii (TPUNOTE1) per i codici associati ai tasti e le costanti predefinite in TPUVARIN.
Es.: W:=XReadKey;
Es.: * int XReadKey;

Function XWaitChar: Char;
Restituisce il codice ASCII del tasto battuto.
Es.: C:=XWaitChar;
Es.: * char XWaitChar();

Function XWaitUpChar: Char;
Restituisce il codice ASCII del tasto battuto, convertito in maiuscolo se cade nell'intervallo ['a'..'z'].
Es.: C:=XWaitUpChar;
Es.: * char XWaitUpChar();

Procedure XWaitKey(Var C: Char; Var S: Byte);
Attende la battuta di un tasto e ne riporta ASCII-Code e Scan-Code.
Es.: XWaitKey(Ch,Sc);
Es.: * void XWaitKey(char far *ch, char far *sc);

Function XScanKey: Char;
Restituisce, per i tasti funzione a doppio codice, lo scan code aumentato di 128.
Es.: Ch:=XScanKey;

Procedure XFlushKbd;
Svuota il Buffer della tastiera da battute precedenti.
Es.: XFlushKbd;
Es.: * void XFlushKbd();

Procedure XStuffKbd(St: String);
Carica il Buffer di Tastiera con la stringa St troncata ai primi 15 caratteri.
Es.: XStuffKbd(St);

Procedure XDisableKbd;
Disabilita la tastiera.
Es.: XDisableKbd;
Es.: * void XDisableKbd();

Procedure XEnableKbd;
Abilita la tastiera.
Es.: XEnableKbd;
Es.: * void XEnableKbd();

I microcomputer nacquero in un clima di intenso fervore tecnologico, agli inizi degli anni '70. Presso la giovane società statunitense Intel, l'italiano Federico Faggin portò a termine gli studi degli statunitensi Marcian Hoff e Stan Mazer sul primo microprocessore. Dopo due anni di esperimenti l'ingegnere italiano, con l'aiuto del giapponese Musatoshi Shima, creò un circuito integrato su una piastrina di silicio di 4 x 3 cm, capace di ospitare circa 2250 transistor e cioé un'intera Unità Logico-Aritmetica (ALU). Questo chip era capace di manipolare informazioni di tipo matematico a 4bit utilizzando 46 istruzioni a 8 bit. Siamo a cavallo tra il 1970 ed il 1971, questo miracolo tecnologico fu chiamato 4004. Forte di un clock di 0.1 MHz e capace di indirizzare ben 640 byte di memoria, senza cache, consentì la realizzazione del microcomputer Intel MCS-4 con una potenza elaborativa di 0.006 MIPS (milioni di istruzioni per secondo). Ma il mercato si trovò impreparato perché non c'era ancora nè la mentalità nè le risorse umane per poter utilizzare appieno questa nuova tecnologia. Questo periodo individuato come quello della prima generazione dei microprocessori è caratterizzato da parecchie iniziative innovative. La Datapoint che in quegli anni produceva terminali intelligenti e piccoli sistemi a computer tentò insieme con la Cogar e la Viatron la progettazione di un computer estremamente semplice e ne affidarono la realizzazione alla Intel ed alla Texas Instrument. Intel riuscì a realizzare su un unico chip la logica necessaria, ma il prodotto finito era ancora molto lento rispetto alle richieste di Datapoint per cui il contratto venne rescisso. L'intel si trovò con un dispositivo logico con caratteristiche simili a quelle di un computer, avrebbe potuto abbandonare il progetto, decise invece di commercializzarlo con il nole di 8008. Era nato il primo microprocessore ad 8 bit, con clock di 0.3 MHz, 3300 transistor, una potenza di calcolo pari a 0,007 MIPS, 60 istruzioni ed una memoria indirizzabile di 16 Kbyte.