Window+, c'est une extension du système de fenêtres Amstrad. Il va autoriser une approche totalement différente du concept de fenêtres : une fenêtre n'est plus une partie de l'écran, mais un nouvel écran que l'on vient poser sur l'autre. Il est plus simple de comparer cette situation à un bureau. L'écran représente une surface de travail sur laquelle l'utilisateur peut déposer et déplacer documents et outils de travail (fenêtres), au gré de son besoin.Le but de Window+ est de fournir l'infrastructure nécessaire au programmeur pour développer des logiciels utilisant cette technique qui s'avère très confortable d'utilisation de par son aspect dynamique. Window+ , qui se présente sous la forme d'un programme en langage machine de 2,4 Ko, offre donc les possibilités suivantes : dimensionnement, ouverture, déplacement, fermeture de fenêtres texte et graphique, dans les trois modes écran 0, 1 et 2. Ce logiciel, accessible depuis le Basic par commandes RSX (précédées de « | ») ou depuis un programme machine, utilise les fenêtres Amstrad. Ainsi les instructions Basic : PRINT, CLS, LOCATE, PEN, PAPER, LIST, INPUT, LINE INPUT, POS, VPOS, WRITE et WINDOW SWAP sont compatibles avec Window+. Cependant WINDOW SWAP échange les numéros des fenêtres Amstrad et non des fenêtres Window+. Il se peut donc que vous ayiez à nommer différemment une même fenêtre selon que vous employez une commande résidente ou RSX. En outre, la fenêtre graphique répond aux ordres MOVE, DRAW, PLOT MOVER, DRAWR, PLOTR, TEST, TESTR, XPOS, YPOS, ORIGIN, TAG, TAGOFF, CLG. Seule les fenêtres 1 à 7 sont reconnues par Window+, la fenêtre 0 étant très utile en Basic pour s'affranchir des fastidieux « # » (via WINDOW SWAP). Attention : les scrollings de l'écran ENTIER sont interdits. Mais ceci ne devrait pas être gênant dans la mesure où les logiciels qui sont susceptibles d'admettre une structure de fenêtres sont en général des utilitaires qui emploient des lignes fixes de menus, d'indications... Il est à remarquer que toutes les opérations effectuées par Window+, même très complexes (déplacement de fenêtre par exemple), ne prennent que très peu de temps : toujours une fraction de seconde. Chargement La première chose à faire avant de pouvoir utiliser Window+ est d'entrer le programme en mémoire. Cela est possible facilement grâce au chargeur Basic (voir listing) qui contient en DATAs le programme machine. Il vous faut donc taper ce chargeur et immédiatement le sauver. Par l'intermédiaire du chargeur, Window+ est translatable, c'est-à-dire qu'il peut se loger n'importe où en mémoire au-dessus de 16384. En Basic, pour déterminer l'adresse à la-quelle il doit être chargé, il faut recréer les conditions dans lesquelles il aura à fonctionner : SYMBOL AFTER, chargement d'autres programmes machine, etc. Faire alors PRINT HIMEM-&93F et noter le nombre affiché qui sera inscrit par la suite h. La plus grande adresse à laquelle Window+ peut être chargé est h. C'est également à cette adresse que Window+ laissera le plus de mémoire disponible bu Basic. Vous pouvez alors lancer le chargeur par RUN. A la question « Adresse de chargement du programme ? », vous répondrez normalement par h, bien que toute adresse (supérieure à 16384 et inférieure à h) soit autorisée. Par la suite, nous appellerons w l'adresse de chargement du programme. Le chargeur contient un vérificateur automatique de DATAs mais attention : deux erreurs peuvent se compenser et ainsi passer inaperçues. Une fois installé en mémoire, le programme est sauvé sous le nom de WINDOW+.BIN et est donc prêt à être utilisé directement. Théoriquement, cette opération de chargement n'aura donc à être exécutée qu'une seule fois. Exemple : SYMBOL AFTER 64 ?HIMEM-&93F 40128 RUN « CHARGEUR »Adresse de chargement du programme ? 40128Le chargeur installe le programme en mémoire... Initialisation L'initialisation du système Window+ se fait en deux temps : chargement du programme WINDOW + .BIN puis appel d'une routine. Cette routine va indiquer à Window+ quelle quantité de mémoire lui est réservée. Cette quantité est directement proportionnelle à la taille des fenêtres pouvant être ouvertes simultanément. Pratiquement, la mémoire allouée à Window+ doit être constituée d'un seul bloc finissant au début du programme Window+. Il ne reste donc qu'à définir le début de ce buffer (tampon) dont le rôle est de sauvegarder le « dessous » des fenêtres. Attention : la routine d'initialisation doit être exécutée une fois et une seule, faute de quoi les instructions précédées de « | » ne fonctionneront pas correctement. Dans les directives syntaxiques qui suivent, d représente l'adresse du début du tampon réservé à Window+. Syntaxe Basic : MEMORY d-1:LOAD ” WINDOW+. BIN”:CALL w +&8F,dSyntaxe assembleur : INIT: LD DE,CASBUF: LD HL,NOM:LD C,11 CALL OBC77H:EX DE,HL: CALL 0BC83H:LD HL,d JP W+8CBH NOM: DB ”WINDOW+.BIN”CASBUF: DS 800HVoici un exemple donnant une idée de la taille du tampon à réserver : 4 fenêtres de largeur 20, de hauteur 10 en mode 2, nécessitent environ 8 Ko. Si w était, par exemple, égal à 40128, il faudrait alors prendre d égal à 40128-8*1024, soit 31936. Vue la relative gourmandise des fenêtres en espace mémoire, Window+ peut fonctionner avec des extensions de RAM. D doit être inférieur à W-&154 en mode 0, à W-&D4 en mode 1 et à w-&94 en mode 2. Exemple : 100 'Programme utilisant Window+ 110 MEMORY 31936-1:LOAD ”WINDOW+.BIN' 120 CALL 40128+&8F, 31936 130...Les fonctions - DIM — Dimensionnement d'une fenêtre
Contrairement aux fenêtres Amstrad, les fenêtres Windows- sont mobiles. Une fenêtre ne sera donc pas définie par les coordonnées de ses coins mais principalement par ses dimensions.Cette définition est l'objet de la commande DIM. Les dimensions d'une fenêtre sont : hauteur h et largeur l extérieures (bord compris). La hauteur maximale est 25. La largeur maximale dépend du mode : 20 pour le mode 0, 40 pour le mode 1 et 80 pour le mode 2. La hauteur minimale est de 4 alors que la largeur minimale est de 3. Mais attention : la commande DIM peut générer une erreur (Memory Full) si la place réservée par l'initialisation n'était pas suffisante. Il faudrait alors soit diminuer la taille de la fenêtre, soit diminuer la taille d'autres fenêtres. Il n'y a pas de dimensionnement par défaut (comme pour un tableau en Basic). C'est-à-dire qu'une fenêtre non dimensionnée n'est pas utilisable. Lors du dimensionnement, l'écran doit se trouver dans le mode dans lequel la fenêtre sera utilisée. De ce fait, lors d'un changement de mode, toutes les fenêtres doivent être re-dimensionnées avant d'être utilisées. Syntaxe Basic : |WDIM,n,l,h(n est le numéro de la fenêtre) Syntaxe assembleur : LD A,n:LD H,h:LD L,1:CALL W+8DAHExemple : |WDIM,1,13,10 |WDIM,5,18,12 |WDIM,2,18,6- OUVRE — Ouverture d'une fenêtre
Une fois définie, une fenêtre peut être activée par OUVRE. Cette commande a pour effet de superposer à l'écran une fenêtre vide dont le coin haut-gauche se situe aux coordonnées (x,y) fournies par l'instruction, par rapport au coin haut-gauche de l'écran de coordonnées (1,1).Une fenêtre vide est composée d'un contour (bord + titre) et d'une fenêtre interne dont la largeur est la largeur de la fenêtre entière diminuée de 2 et dont la hauteur est celle de la fenêtre entière diminuée de 3. Cette fenêtre intérieure est la fenêtre fonctionnelle. C'est uniquement dans celle-ci que se feront les opérations d'écriture (on peut en fait contourner cette obligation : voir ETEND). Le curseur texte de la fenêtre est placé sur la case (1.1) de la fenêtre fonctionnelle. Les couleurs de la fenêtre ne sont pas modifiées par OUVRE. Il existe trois types de bords prédéfinis (0 à 2). Une fenêtre ne peut être partiellement ou entièrement ouverte hors de l'écran. Syntaxe Basic : a$=”titre”:|WOUVRE,n,x,y,b, @a$,cPour une fenêtre sans titre, remplacer @a$ par 0. b est le numéro du type de bord choisi ; c est le numéro (0 à 15) de la couleur du bord. Pour sélectionner la couleur de fond du bord, faire PAPER #n,cf avant de taper | WOUVRE. Syntaxe assembleur : bloc DB longueur-du-titre DW titre titre DB ”TITRE” appel LD DE,bloc:LD B,b:LD H,x:LD L,y:LD A,n LD C,c:CALL W+8E0HExemple :a$=”Exemple”| WOUVRE, 1,10,2,1,@a$,1?# 1, ”Je suis une fenetre du systerne W+” a$=” Bord 2 ”:| WOUVRE,2,15,1.2,@a$,1 |WOUVRE,5,13,5,1,0,1 :PEN #5,0:PAPER #5,1 LOCATE # 5,5,4:? #5,”BONJOUR!” - DEPLACE - Déplacement d'une fenêtre
Nous avons vu qu'une fenêtre Window-l- était définie par sa taille et non par sa position à l'écran. Cette propriété est tout à fait illustrée par l'instruction DEPLACE qui transfère une fenêtre entière de son ancienne position vers la position (x, y) (coin haut-gauche). Comme avec OUVRE, une fenêtre ne peut se trouver en partie ou entièrement hors de l'écran.La place quittée est réordonnée et ce, indépendamment des insertions, superpositions de fenêtres qu'il pourrait y avoir. La fenêtre est ensuite posée par dessus les autres. La fenêtre est transportée intégralement, c'est-à-dire que son contenu et ses caractéristiques sont conservées ainsi que les coordonnées des curseurs texte et graphique. De plus, si la fenêtre était graphique (voir GRAPH), Porigine est déplacée parallèlement à cette dernière, ce qui permet au programmeur de ne vraiment pas s'occuper de la position de la fenêtre à l'écran. Syntaxe Basic : |WDEPLACE,n,x,ySyntaxe assembleur :LD A,n:LD H,x:LD L,y:CALL W+8FEHExemple :|WDEPLACE, 1,25,4- FERME - Fermeture d'une fenêtre
Lorsque l'utilisation de la fenêtre est terminée, on peut clarifier l'écran en supprimant la fenêtre. Il suffit d'exécuter FERME. La fenêtre peut alors être redimensionnée par DIM et réouverte par OUVRE.La place quittée est réordonnée et ce, indépendamment des insertions, superpositions de fenêtres qu'il pourrait y avoir. Pour ne pas avoir de problèmes, il est conseillé de fermer toutes les fenêtres avant d'effacer l'écran. Syntaxe Basic : | WFERME,nSyntaxe assembleur :LD A,n:CALL W+8F8HExemple :|WFERME,5- ACT — Actualisation d'une fenêtre
Avant d'écrire dans une fenêtre, il faut s'assurer qu'elle est bien entièrement visible, c'est-à-dire qu'aucune autre ne lui est superposée. Pour éviter toute erreur, employer la commande ACT. Ceci place la fenêtre par-dessus les autres.Syntaxe Basic : |WACT,nSyntaxe assembleur :LD A,n:CALL W+904HExemple :|WACT,2- GRAPH — Définition d'une fenêtre graphique
GRAPH définit une fenêtre graphique à l'intérieur d'une fenêtre de texte préalablement ouverte. La coordonnée de l'origine de la fenêtre graphique est placée au coin bas-gauche de la fenêtre « fonctionnelle ». Ses limites sont celles de la fenêtre fonctionnelle. Le curseur graphique est placé sur l'origine (au point de coordonnées 0,0).Une seule fenêtre graphique peut être définie. Par défaut, elle représente l'écran entier et peut également être définie par ORIGIN en Basic. Syntaxe Basic : |WGRAPH,nSyntaxe assembleur :LD A,n:CALL w+916HExemple :|WGRAPH,2 MOVE 0,24FOR 1=0 TO 5*PI STEP 0.1 : DRAW 8*1,24+6*SIN(I): NEXT - ETEND — Extension de la fenêtre fonctionnelle
Si vous désirez travailler dans le bord de la fenêtre, vous devez utiliser cette instruction qui étend la fenêtre fonctionnelle à la fenêtre entière. Associée à un bord de type 0 (pas de bord visible), ETEND permet de définir des fenêtres similaires à celles prévues par Amstrad (pas de contour, donc plus de place de travail) tout en conservant les possibilités de Window+.ETEND replace les curseurs texte et graphique (si l'a fenêtre était graphique) sur leurs nouvelles origines respectives. Syntaxe Basic : |WETEND,nSyntaxe assembleur :LD A,n:CALL W+90AHExemple :|WETEND,2:?CHR$(23) CHR$(3) mode graphique OR TAG:MOVE 0,27:?CHR$(232); :TAGOFF- REDUIT - Réduction de la fenêtre fonctionnelle
REDUIT est la commande opposée à ETEND : elle redéfinit la fenêtre fonctionnelle en lui redonnant ses dimensions d'origine. Elle replace les curseurs texte et graphique (si la fenêtre était graphique) sur leurs nouvelles origines respectives.Syntaxe Basic : |WREDUIT,nSyntaxe assembleur :LD A,n:CALL W+910HExemple :|WREDUIT,2 :CLG TAG:MOVE 0,27:?CHR$(232); :TAGOFFErreurs En Basic, pour savoir si Win-dow+ a détecté une erreur dans l'ordre que vous lui avez transmis, il faut tester la case mémoire w+&85 à l'aide de PEEK. Le résultat du PEEK est le numéro de l'erreur, ou 0 s'il n'y avait pas d'erreur. Néanmoins, le test n'est pas forcément à exécuter de manière systématique, dans la mesure où l'on peut s'apercevoir rapidement si une instruction a été exécutée ou non. Dans un programme en langage machine, l'indicateur C est mis au retour d'une routine Window-t- si elle a rencontré une erreur. De plus, l'adresse W+&85 contient le numéro de l'erreur, ou 0. Voici la signification des erreurs générées par Window+ : — 2 (Syntax error) : le nombre de paramètres transmis est incorrect. — 5 (Improper argument) : valeur incorrecte. — 7 (Memory full) : il n'y a plus assez de place dans le tampon pour pouvoir dimension-ner la fenêtre. Exemple : 1000 |WDEPLACE,9,15,10:IF PEEK(w+&85)<>0 THEN ERROR PEEK (w+&85)RUN Improper arguement in 1000 Ready Commandes RSX Si vous constatez des anomalies dans le fonctionnement des commandes RSX (précédées de « | ») après une seule initialisation de Window+, cela signifie que la configuration actuelle de votre Amstrad ne permet pas de les utiliser pour accéder aux fonctions de Window+. Cela peut arriver si vous voulez installer Window+ dans une banque d'extension RAM. Vous pouvez alors détourner les commandes RSX en faisant : FOR i=&FA to &FC.POKE w+i,0:NEXTentre le chargement en mémoire de Window+.BIN depuis la disquette (ou la cassette) et le CALL d'initialisation.Les commandes de Window+ sont alors accessibles depuis le Basic par : CALL A,P1,P2,...PNoù P1, P2...PN sont les paramètres d'entrée mis dans le même ordre que celui prévu pour les instructions RSX correspondantes. A est l'adresse directe de la commande :W+&153 pour DIM w+&31F pour OUVRE W+&5D3 pour DEPLACE W+&5AF pour ACT W+&6B0 pour FERME W+&7EF pour ETEND W+&823 pour REDUIT W+&84F pour GRAPH Exemple : 10 w=40128 20 WDIM=w+&153 30 MEMORY 31936-1: LOAD"WINDOW+.BIN" 40 FOR i=&FA to &FC: POKE w+i,0:NEXT 50 CALL w+&8F,31936 60 ...100 CALL WDIN,2,12,5Lors des mises au point des programmes utilisant Window+, il est nécessaire de pouvoir relancer plusieurs fois l'exécution. Or, je rappelle qu'il est interdit de procéder à plusieurs phases d'initialisation de Window+. Une bonne solution est de positionner un « drapeau » lors de la première initialisation. D'autre part, il faut bien renfermer chaque fenêtre avant chaque nouvelle exécution, sinon Window-l- pourrait croire qu'une fenêtre est encore ouverte alors que l'écran a été effacé. D'où problèmes. Voici une solution possible : 10 w=40128 20 IF himem>w THEN GOSUB 60000 ELSE GOSUB 61000 30 MODE 1 40 ... 60000 REM initialisation 60010 MEMORY 31936-1: LOAD "WINDOW+ ,BIN" 60020 CALL W+&8F 60030 RETURN 61000 REM fermeture 61010 MODE 2:INK 1,1 61020 FOR i=1 TO 7:|WFERME,i:NEXT 61030 INK 1,24 61040 RETURNLe sous-programme d'initialisation n'est appelé que lors de la première exécution. Ici, c'est la variable réservée HIMEM qui sert de « drapeau ». F. Trestini, MS
| ★ AMSTRAD CPC ★ DOWNLOAD ★ |
|
CPCrulez[Content Management System] v8.732-desktop/c Page créée en 182 millisecondes et consultée 426 foisL'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko. |
|
|