#Klooienmetcomputers

Ncurses

Arnout van Kempen over rommelen in een digitale wereld.

De vorige keer heb je als het goed is de ncurses-bibliotheek geïnstalleerd. Zo niet, doe dat dan alsnog. Op de Pi: sudo apt install libncurses-dev
Bij Windows en MacOS zal je even moeten zoeken hoe het daar werkt, maar de bibliotheek zou beschikbaar moeten zijn.

Wat kan je nu met deze bibliotheek? Je krijgt een aantal functies die in een tekstscherm, zoals de terminal of SSH, kunnen werken met windows. Een tekst-window dus. Dat interesseert me op dit moment minder, dus ga vooral op ontdekkingstocht als je hier mogelijkheden in ziet, maar ik gebruik ncurses nu nog alleen voor het hele scherm, zonder windowing technieken dus. Dat is al interessant genoeg.
In deze simpelste vorm kan je ncurses.h zien als een geavanceerde variant op stdio.h. Om te beginnen stel je met enkele functies vast hoe je wil dat invoer en uitvoer zich gedragen. Moet de computer bij input wachten tot de gebruiker op enter drukt, of niet? Wil je output direct op het scherm, of niet?
Om te beginnen initialiseer je een window. Als dat het hele beschikbare scherm beslaat, is initscr() genoeg. Je kan nu printen naar dit window met printw() op precies dezelfde manier als je gewend bent van printf(). Het bijzondere is alleen dat er niets op je scherm verschijnt. Daarvoor moet je nog de opdracht refresh() geven. Dat lijkt omslachtig, maar het levert een veel prettiger, rustiger beeld op. Je bouwt een scherm eerst op, en dan zet je het ineens in beeld. Ben je klaar met een window, dan sluit je het met endwin() en alles keert terug naar de status van voor je initscr(). Sla dit niet over, want Linux zal je aanpassingen niet herstellen als je programma eindigt zonder endwin(), en dat levert vervelende resultaten.

Nog een paar interessante functies en mogelijkheden uit ncurses.h zijn:

  •  getmaxyx(stdscr, x, y) plaatst de maximale waarde van de x- en y-coördinaat van je huidige scherm in x en y.
  •  move(x, y) verplaatst de cursor naar de opgegeven coördinaten. Wat je hierna print komt dus op die positie.
  • getch() geeft de ASCII-code terug van de toets die de gebruiker indrukt.
  • mvaddch(x, y, ch) plaatst het character met ASCII-waarde ch op coördinaten x,y.
  •  als je als character ‘ ‘ | A_REVERSE geeft, krijg je een spatie, maar dan foto-negatief. Een blokje dus.

Met name met die laatste twee heb je de mogelijkheid om te gaan tekenen. Misschien niet zo spectaculair, maar toch: Je hebt nu blokjes die je op een vastgestelde coördinaat kan plaatsen. Dat is tekenen. 

Wie mee wil doen met #klooienmetcomputers kan dat doen via GitHub. Maak een account op www.github.com en zoek naar Abmvk/kmc. Het account Abmvk volgen kan ook. Lezers zijn vrij te gebruiken wat ze willen en om zelf zaken toe te voegen of aan te passen, vragen te stellen of commentaar te leveren.

Arnout van Kempen di CCO CISA is Senior manager Risk & Compliance bij Baker Tilly. Hij schrijft op persoonlijke titel. Hij is lid van de Commissie Financiële verslaggeving & Accountancy van de AFM en lid van de signaleringsraad van de NBA. Daarnaast is hij diaken van het bisdom 's-Hertogenbosch.

Gerelateerd

reacties

Reageren op een artikel kan tot drie maanden na plaatsing. Reageren op dit artikel is daarom niet meer mogelijk.

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.