In English: A collection of SuperBASIC tips for the Sinclair QL: detecting monitor or TV mode with PEEK 163890 after a reset, disabling CTRL+SPACE break with POKE_L 163900, and side-by-side comparisons with ordinary BASIC for waiting for a key with INKEY$(-1), case-insensitive string comparison with ==, single-line loops and PAUSE. It also shows how to put comments into a disk directory by saving empty files with descriptive names, and notes that single quotes are faster than double quotes in PRINT and INPUT.
Printed title: SUPERBASIC … TRUCS & ASTUCES. The article below is in French, as printed in QL_DOC n3 (April-May 1988).
.Détection du mode vidéo
Cette méthode est valable seulement après un RESET. On vérifie la valeur présente à l’adresse 163890.
Si on fait PEEK 163890 et on trouve 0, on est en mode MONITEUR, si c’est 1, on est en mode TV.
.Mise hors fonction de BREAK
On peut faire POKE_L(163900),0 , et CTRL+ESPACE n’a plus d’effet. Pour revenir à la normale, on remet la valeur originale à cette adresse. Cette valeur peut varier selon la version de ROM. Il s’agit donc de la garder en mémoire.
Ex. 10 LET breakon=PEEK_L(163900)
20 POKE_L (163900),0
30 FOR i=0 TO 1000
40 PRINT 'BREAK inactif...'
50 END FOR i
60 POKE_L (163900),breakon
.Mauvaise influence des autres BASICs
Si l’on veut attendre qu’une touche soit appuyée pour que l’exécution d’un programme se poursuivre.
BASIC -> 100 a$=INKEY$:IF a$="" THEN GOTO 100
SUPERBASIC-> 100 a$=INKEY$(-1)
Le paramètre -1 attend qu’on appuie une touche. La variable a$ contient la touche appuyée.
Si on veut vérifier la réponse a une question, on prend la précaution de vérifier la réponse majuscule/minuscule.
BASIC -> 100 IF rep$="O" OR rep$="o" THEN ...
SUPERBASIC-> 100 IF rep$=="o": ...
On remarque que == vérifie les 2 alternatives soit le O ou le o . On note également que le THEN est optionnel, il est remplacé par : .
Si l’on veut faire un boucle de temps.
BASIC -> 100 FOR i=0 TO 1000 : PRINT i, : NEXT i
SUPERBASIC-> 100 FOR i=0 TO 1000 : PRINT i,
Lorsqu’on a une boucle sur une seule ligne, le NEXT ou le END FOR est optionnel.
Pour une pause dans un programme.
BASIC -> 100 PRINT "Une touche pour continuer..."
200 a$=INKEY$:IF a$="" THEN GOTO 200
SUPERBASIC-> 100 PRINT "Une touche pour continuer...":PAUSE
La commande PAUSE sans paramètre est l’équivalent de INKEY$(-1) mais on a pas besoin de variable.
Le directory d’une disquette ou d’un µdv peut être très long. Pour clarifier les choses, les programmes devraient avoir une extension pour définir le type de fichiers ( voir INPUT<->OUTPUT ). Ou encore mieux, il est possible de mettre des commentaires directement dans le directory.
EXEMPLE : NEW
SAVE "flp1_Les programmes suivants"
SAVE "flp1_font partie intégrante"
SAVE "flp1_de ma collection d'utilitaires"
SAVE "flp1_.............................."
DIR flp1_
Pour la commande PRINT : PRINT “test” et PRINT ‘test’ sont équivlents. La deuxième façon est à préférer car elle est plus rapide. Cela est vrai pour la commande INPUT aussi.