Alweer geen Excel

Turbo Vision, GUI vóór Windows

Arnout van Kempen schrijft in deze rubriek over pret maken met computers. Hij gaat aan de slag met Pascal.

Turbo Vision is het object-georiënteerde framework dat Borland bij Turbo Pascal 6.0 leverde voor het bouwen van text-mode GUI's. En ja, ik noem het bewust GUI's. Ook al maken we technisch gebruik van de text modes van de grafische kaart, vanuit het perspectief van de gebruiker is het echt grafisch: windows die je kunt verplaatsen, menu's waaruit je kiest, dialogen met knoppen. Het overschrijdt de grens tussen command-line en grafische interface. 

Wat Turbo Vision bijzonder maakt, is dat het geïnspireerd is door Apple's UI-guidelines uit die tijd. Niet de techniek, maar de filosofie: consistentie, voorspelbaarheid, een logische structuur. Een menu werkt altijd hetzelfde, een dialoog reageert zoals je verwacht. Die aandacht voor gebruikerservaring was in de DOS-wereld vrij uniek. De meeste programma's bedachten hun eigen interface-conventies, maar Turbo Vision gaf je een raamwerk dat al die beslissingen voor je nam. 

Turbo Vision bestaat uit een verzameling units die je in je programma opneemt. De belangrijkste zijn App (voor de applicatie zelf), Objects (basisklassen), Views (alles wat op het scherm komt), Menus (menu's en menubars), Dialogs (dialogen en controls) en Drivers (de onderliggende hardware-abstractie). Deze units vormen een object-hiërarchie: alles begint bij TObject, daar komen TView en zijn afgeleiden van (TWindow, TButton, TMenuBar) en bovenaan staat Tapplication, die je hele programma aanstuurt. 

Het principe is event-driven. Je programma reageert op gebeurtenissen: een toetsaanslag, een muisklik, een timer. In plaats van dat jij een lus schrijft die constant de toetsenbord-interrupt checkt, doet Turbo Vision dat voor je. Jij schrijft alleen code voor "wat moet er gebeuren als de gebruiker op deze knop klikt" of "wat moet er gebeuren als dit menu-item wordt gekozen". De rest is al geregeld. 

Het allereerste Turbo Vision-programma ziet er zo uit:

Program MinApp;
Uses App;

Type
  TMinApp = Object(TApplication)
  End;

Var
  MyApp: TMinApp;

Begin
  MyApp.Init;
  MyApp.Run;
  MyApp.Done;
End.

Dat is alles. Dit compileert, draait en geeft je een leeg scherm met een functionerende event loop. Je kunt het afsluiten met Alt-X (standaard shortcut). Het doet verder niets spectaculairs, maar alle mechaniek zit er al: toetsenbordafhandeling, schermrefresh, cleanup bij afsluiten.

Wat gebeurt er achter de schermen? Init bereidt alles voor: het initialiseert de video driver (detecteert welke grafische kaart je hebt), zet een event queue op en tekent het basis-scherm. Run start de event loop: een oneindige lus die wacht op input (toetsenbord, muis), die input vertaalt naar events en die events naar de juiste objecten stuurt. Done ruimt alles netjes op: herstelt de oude video mode, geeft geheugen vrij. 

Die video driver is cruciaal. Samen met de consistentie die van Apple komt, is dit het andere element dat we later zo aan MS Windows zijn gaan verbinden: het systeem maakt zich druk over de hardware; de programmeur en de gebruiker werken altijd op dezelfde manier, zonder zich af te vragen welke driver nu weer nodig is. Turbo Vision abstraheert alle verschillen weg naar een consistente API. Onder water schrijft het nog steeds naar video memory, maar jij hoeft daar niets van te weten. Je zegt "teken een window op positie X,Y met breedte W en hoogte H" en Turbo Vision regelt de rest.

Arnout van Kempen is naast computernerd ook directeur compliance & risk bij aaff. Hij schrijft op persoonlijke titel.

Gerelateerd

reacties

Reageer op dit artikel

Spelregels debat

    Aanmelden nieuwsbrief

    Ontvang elke werkdag (maandag t/m vrijdag) de laatste nieuwsberichten, opinies en artikelen in uw mailbox.

    Bent u NBA-lid? Dan kunt u zich ook aanmelden via uw ledenprofiel op MijnNBA.nl.