ConsoleperikelenDe console. Ach ja, de console, speelplein mijner jeugd! Ik keer er steeds weer, vervuld van melancholie, naar terug. Het is echter niet meer als toen, moet ik zeggen. Nu kun je scrollen, knippen en plakken. Vroeger niet. Zo leuk was het vroeger eigenlijk helemaal niet.
Marco Kurvers' opmerkingen van 2 augustus in
makurvers.freeforums.net/thread/116/pixels-tekenen?page=2 over mijn QB64-directieven
$ScreenHide
$Console
_Dest _Console
vormen de aanleiding om dit onderwerp wat verder uit te diepen. Van de QB-familie ken ik QuickBASIC alleen van horen zeggen. Wel heb ik enige ervaring met QBasic, en pas sinds kort ook met QB64 PE. Veel heb ik dus niet te melden, maar goed, toch wel dit ene kleinigheidje. Hiertoe ben ik nog eens opnieuw begonnen met
8IN1-OER.BAS, de oerversie zonder de drie hierboven weergegeven regels.
QBasic[0] QBasic moet ik tegenwoordig in een DOSBox-sessie draaien. Wanneer ik dat start, daarin het programma
8IN1-OER.BAS laad, en het vervolgens run (via Shift+F5), krijg ik de uitvoer op de console te zien. Scrollen hiervan is in DOSBox niet mogelijk. Eenmaal teruggekeerd in de IDE (kwestie van een willekeurige toest indrukken), kan ik de broncode wel scrollen. Met F4 kan ik weer even in de console kijken (en nog steeds niet scrollen). Verlaat ik de QBasic-IDE, dan keer ik definitief terug naar de console en komt het staartje van de uitvoer daar weer in beeld. Nog altijd niet scrollbaar.
Ik kan het programma ook direct vanaf de console draaien:
QBASIC.EXE /RUN 8IN1-OER.BAS
In wezen is het gedrag precies hetzelfde: de IDE wordt gestart, het programma geladen en gestart, de console getoond, en na een toetsaanslag volgt terugkeer naar de IDE.
QB64 Phoenix Edition[1] In Windows roep ik een console (Command Prompt venster) op en start daarin
qb64pe.exe. Daarbinnen laad ik
8IN1-OER.BAS en run het (met F5). Het programma wordt gecompileerd, het draait en de uitvoer verschijnt op een nieuw (niet-scrollbaar) consolevenster met onderaan "Press any key to continue". Dat verdwijnt na een toetsaanslag en ik kan er niet meer naar terugkeren (F4 doet iets anders). Na beëindiging van de QB64-IDE keer ik terug naar de oorspronkelijke console, waar de uitvoer evenmin zichtbaar is. Ik heb op deze manier wel een executable gecreëerd. Deze vertoont dezelfde nukken als de IDE: het programma produceert een eigen consolevenster met niet-scrollbare uitvoer, dat weer verdwijnt zodra ik een toets aanraak.
[2] Toevoeging van alleen
_Dest _Console werkt niet wegens een 'invalid handle'. Ik moet de regel
$Console erboven zetten om een console te bestellen. Na F5 worden er twee consoles aangelegd: hetzelfde exemplaar zoals onder [1] genoemd met "Press any key to continue", maar nu verder leeg, plus een tweede met de programma-uitvoer dat
wel scrollbaar is. Wanneer ik in de eerste console op een toets druk, verdwijnen beide consoles. Beëindiging van de IDE brengt me weer terug naar het venster met de oorspronkelijke console, nog steeds zonder uitvoer. Maar er is verbetering: het runnen van de ontstane executable levert eveneens een console met "Press any key to continue" op, maar de uitvoer wordt naar de oorspronkelijke console geschreven van waaruit ik die executable heb aangeroepen. En die console blijft gewoon staan.
[3] Het is duidelijk wat me te doen staat: toevoeging van de regel
$ScreenHide. Daarmee onderdruk ik dat hinderlijke venster dat alleen "Press any key to continue" te melden heeft.
Ik vermoed dat de enige reden dat Marco Kurvers de console-directieven niet nodig heeft, gelegen is in het feit dat zijn programma's er niet naartoe schrijven, maar uitsluitend grafische kunstjes vertonen. Weliswaar kun je met SCREEN 0 text only mode instellen, maar volgens de helpinformatie is dit de default instelling. Toch voor de zekerheid even uitgeprobeerd. Haalt inderdaad niets uit
Aanvulling 2024-08-20: Ik had een paar dingen niet verteld. De "Press any key to continue" in situatie [3] bleek verhuisd naar de oorspronkelijke console. Dat kan worden onderdrukt door het programma met een System-statement af te sluiten. Hetzelfde geldt voor situatie [0]: na de run van een met SYSTEM afgesloten programma beland je niet in de IDE, maar keer je terug naar de console. Gesneden koek voor doorgewinterde QB-programmeurs, waarschijnlijk. Ik zal het vroeger ook wel geweten hebben.