Van Hans Lunsing kreeg ik de volgende opmerkingen, welke ik onveranderd afdruk.

Bij deel 4 van je serie PB vs. QB heb ik de volgende opmerkingen:

FUNCTION:  
Jouw tekst vindt ik niet zo duidelijk en klopt ook niet helemaal. Ik heb er het volgende van gemaakt:

PowerBasic functies kunnen als SUB's worden gebruikt. Natuurlijk kan dan niet over de functiewaarde worden beschikt, maar er zijn allerlei gevallen denkbaar waarin dat niet nodig is. Ik noem b.v. een functie die true (-1) of false (0) retourneert, terwijl a priori al zeker is dat aan de relevante conditie voldaan is. Op die manier kan de aanmaak van een onnodige variabele worden voorkomen. Net zoals een normale SUB kan een FUNCTION op twee manieren als SUB worden aangeroepen, namelijk door middel van het CALL commando, en door middel van een directe aanroep als ware het een Basic commando. Bij voorbeeld:

FUNCTION TestIt(a as integer, b as integer) as integer 
kan worden aangeroepen als:
CALL TestIt(a, b)
of 
TestIt a, b
In het laatste geval staan er geen haakjes om de argumenten. Als de functie niet in dezelfde module (unit) wordt gedefinieerd moet aan het gebruik als Basic commando net zoals bij een normale SUB een declaratie van de functie voorafgaan.
* * * * *
LOCAL: Als in een SUB of FUNCTION een locale variabele wordt gedeclareerd met een zelfde naam als een globale variabele is de globale variabele in die procedure niet toegankelijk. 
* * * * *
MEMSET: Stelt in wat het hoogste geheugenadres is dat door PB kan worden gebruikt.
* * * * *
UNION: Je geeft een mooi voorbeeld!
* * * * *
CODESEG, CODEPTR: Deze functies retourneren segment resp. offset van een SUB, FUNCTION of label. 
* * * * *
CODEPTR32: Deze functie retourneert segment:offset van een SUB, FUNCTION of label in een DWORD.
* * * * *
FILEATTR: Met FILEATTR kan ook de DOS filehandle van een open file worden opgevraagd. Dat kan handig zijn bij bij voorbeeld interrupt calls waarbij dat filehandle in n van de files moet worden doorgegeven.
* * * * *
LTRIM$: Ook PB heeft NIET de mogelijkheid om met deze functie iets op het scherm te zetten. Wel kent PB de mogelijkheid om iets anders dan spaties aan het begin van een string te verwijderen.
* * * * *
RTRIM$: Analoog aan LTRIM$.
* * * * *
TRIM$: Dito.
* * * * *
MAX, MAX%: Bij MAX mag elk numeriek type als parameter worden gebruikt, bij MAX% alleen waarden die in het integer bereik liggen.
* * * * *
SCREEN 13: Kan meestal niet zomaar door SCREEN 12 worden vervangen. SCREEN  12 kent maar 16 kleuren, terwijl SCREEN 13 er 256 kent.
* * * * *
COMMON: Bestaat in PB niet.  Moet  daarin  worden  geregeld  door middel van een PUBLIC statement in het hoofdprogramma, en een EXTERNAL statement in de units.
* * * * *
SHARED: Voor wat betreft enkelvoudige variabelen is er een verschil tussen de normale situatie en $DIM ALL:
Normaal:	        SHARED a%
$DIM ALL:    DIM a AS SHARED INTEGER
in het laatste geval dus net zoals voor arrays.
* * * * *
DIM x(1 TO 20) AS SHARED
bestaat niet. Dit moet zijn:
DIM x(1 TO 20) AS SHARED SINGLE (of INTEGER, of wat dan ook)
* * * * *
%TRUE = NOT FALSE
moet zijn 
%TRUE = NOT %FALSE
* * * * *
WHILE a$
kan ook in QB niet. Het werkt net zoals in PB. Dus
WHILE LEN(a$)
* * * * *
In PB mag ook
WIDTH LPRINT 40
worden gebruikt. Bovendien moet altijd het aantal kolommen worden opgegeven. Dus b.v.
WIDTH "LPT2:" 40
* * * * *
In QB luidt het include statement
'$INCLUDE: 'filename.ext'
in plaats van
$INCLUDE 'filename.ext'
* * * * *
Ook in QB kan
CASE a
worden gebruikt. De "=" hoeft er niet voor. In PB mag er geen "=" voor. Er zijn wat dat betreft met betrekking tot CASE wel meer verschillen.
* * * * *
Op blz. 20 staan achter een aantal statements quotes (") die er niet horen, b.v. CLS SCREEN".

Dat was het. 
Groetjes, 
Hans Lunsing


