Atomic Windows (c) Kees van Oss
Een uitbreidings ROM voor de Acorn AtomInleiding: E i n d e l i j k ... na vele uren filosoferen, proberen, comprimeren, inhaleren, transpireren, afreageren en experimenteren i s het dan toch voor elkaar. De ATOMIC WINDOWS ROM is af!! Het resultaat is een ROM waarin een aantal commando's staan om in CLEAR4 een zogenaamd dialoog venster te creëren. Dit is een venster wat om interactie met de gebruiker vraagt. Het is nu zeer eenvoudig geworden om bv. een keuze tussen verschillende opties te maken, of een aan/uit keuze te maken, of text in te voeren, of een icoon te plaatsen. Je kunt ook pulldown menu's of icoonmenu's maken. Dit alles kan met of zonder muis, in een standaard Atom, software Atom emulator of Atom in PC kaart. De mogelijkheden zijn onbeperkt (nou ja, beperkt tot de gedachtekronkels van de programmeur wel te verstaan). Wat is Atomic Windows: Atomic Windows (AW) is een ROM waarin men met commando's een grafische interface op kan bouwen dmv objecten te plaatsen om interactie met de gebruiker te verkrijgen. Een interface is de koppeling tussen programma en gebruiker en interactie is het samenspel tussen gebruiker en programma. Zo kan men bv. gebruik maken van iconen of drukknoppen om stukken programma uit te voeren. Men kan gebruik maken van textinvoer velden. en kan een lijst op het scherm zetten waaruit een keuze gemaakt kan worden, enz. De gehele schermopbouw (wat anders een groot gedeelte van een programma opeist) wordt een stuk eenvoudiger mbv AW-commando's. De meeste objecten komen ook in Microsoft Windows (of OS2, sorry Roland) voor, zodat de meeste mensen hiermee vertrouwt zijn. Het idee is ontstaan door het programmeren in Visual Basic en het maken van macros in WP, waar het gebruik van dit soort objecten eenvoudig is.Benodigde Hard- en Software: Voor het werken met AW is de AW-ROM nodig op #A000. Er is geen extra hardware nodig om te kunnen draaien. In de ROM zit echter wel de benodigde software om een hardware muis, zoals eerder door mij beschreven in Atom News, aan een standaard Atom aan te sturen. Verder is er ook extra software ingebouwd voor het aansturen van een PC-muis op de Atom-in-PC kaart (bedankt Roland voor de Atom-in-PC software en het uittesten van de ROM). De software is ook getest op de software emulator van Dick Bronsdijk en werkt hierop zonder problemen. Het nadeel is echter dat een aantal muis-specifieke AW-commando's (DLGHOTSPOT en DLGLISTBOX) hierop niet werken omdat hiervoor een muis vereist is. (Dick, misschien is het een idee om de PC-muis met de software emulator te kunnen gebruiken?) Atomic Windows Commando's: De commando's in de ROM zijn in drie groepen in te delen: Algemene Commando's, Actieve-Objecten en Passieve-Objecten. Actieve-Objecten zijn weer op te splitsen in 2 groepen, nl: Actieve- Exit- en Actieve-Loop-Objecten, deze worden hieronder beschreven. Algemene Commando's:Algemene commando's, zijn commando's ter initialisatie van de hard- en software. Dit zijn de commando's AW, DLGBASE, DLGCLS, DLGCREATE, DLGEND en DLGPOINTER AWGeeft het versienummer van Atomic Windows. DLGBASE AdresHiermee wordt een blok vanaf Adres t/m Adres+#6FF gereserveerd voor een FontDataTabel
en een IconDataTabel en vanaf Adres+#700 ruimte voor object parameters. DLGCLSVult het gehele scherm met een rasterpatroon. DLGCREATE ExitVar,Text$,Style,X,Y,B,HDefinieer een Window op positie X,Y met breedte B en hoogte H met als titel Text$. Wanneer een keuze gemaakt is en de interactie-mode verlaten wordt komt de gemaakte keuze (ExitCode) in ExitVar te staan. Met Style zijn de volgende opties voor Text$ mogelijk, dit geldt trouwens ook voor alle andere objecten : Bit 0; is Vetgedrukt (1), Bit 1; is Schuinschrift (2), Bit 2; is Onderlijnen (4), Bit 3; is Inverteren (8), Bit 4; is Grijs maken,selecteerbare objecten zijn dan niet meer selecteerbaar (16), Bit 5; is Dubbele hoogte (32), Bit 6; is het plaatsen van een Ok-Drukknop alleen bij DLGCREATE (64), Bit 7; is het plaatsen van een Cancel-Drukknop alleen bij DLGCREATE (128), Combinaties van de verschillende bits zijn ook mogelijk, je moet dan alle desbetreffende getallen tussen haakjes bij elkaar optellen. Wil je een vetgedrukte, geïnverteerde Text$ hebben, kies dan Style = 1 + 8 = 9. DLGENDSpringt naar de interactie-mode. De Copy-toets selecteert het volgende object en de Delete-toets het vorige object. De Escape-toets verlaat de interactie-mode. De Spatiebalk wordt gebruikt om een actie uit te voeren. Voor gebruik met de muis is Knop1 = Spatiebalk. DLGPOINTER NrWijzigt de muispointer in PointerNr nr. Er is keuze uit PointerNr's 0 t/m 31. Actieve-Exit-Objecten, zijn selecteerbare objecten die de interactie-mode verlaten als ze geselecteerd worden. Wanneer de interactie-mode verlaten wordt dan wordt de ExitCode van het object in ExitVar gezet die bij DLGCREATE gedefinieerd is. De commando's om een dergelijk object te plaatsen zijn: DLGPUSHBUTTON, DLGOPTION, DLGICON, DLGHOTSPOT en DLGLISTBOX. DLGPUSHBUTTON ExitCode,Text$,Style,X,YPlaatst een drukknop op positie X,Y met als opschrift Text$ en is selecteerbaar. DLGOPTION ExitCode,Text$,Style,X,YPlaatst Text$ op positie X,Y en is selecteerbaar. DLGICON ExitCode,IconNr,Text$,Style,X,YPlaatst een icoon (0<=IconNr<=31) op positie X,Y met als onderschrift Text$ en is selecteerbaar. DLGHOTSPOT ExitCode,X,Y,B,H,VarX,VarYMarkeert een rechthoek op positie X,Y met breedte B en Hoogte H waarbinnen een punt aangeklikt kan worden. De X en Y waarde van dit punt worden, relatief gezien, opgeslagen in VarX en VarY. DLGLISTBOX ExitCode,Var,X,Y,B,H,MaxRec,PointerPlaats een rechthoek op positie X,Y met als breedte B en Hoogte H en daaraan vast een vertikale schuifbalk. In deze rechthoek komen strings te staan die in array Var gedefinieerd zijn. De opbouw van de array is als volgt : Geselecteerde-String + #0D1 Byte met aantal strings in array, 1 Byte met stringnummer van eerste string in venster, 1 Byte met stringnummer geselecteerde string, Eerste string in array +#0D Tweede string in array +#0D ...... MaxRec string in Array +#0D Wanneer in de schuifbalk op het pijltje omhoog gedrukt wordt, schuiven alle strings in de rechthoek 1 positie omlaag. Wanneer in de schuifbalk op het pijltje omlaag gedrukt wordt, schuiven alle strings in de rechthoek 1 positie omhoog. Als men op een string in de rechthoek klikt zal deze geselecteerd en naar Geselecteerde-String gekopieerd worden. $Var geeft dus altijd de laatst geselecteerde string. Actieve-Loop-Objecten: DLGRADIOBUTTON Var,Text$,Style,X,YPlaatst een RadioDrukknop op positie X,Y met daarachter Text$ welke selecteerbaar is. De eerste RadioDrukknop komt overeen met Bit 0 van Var, de tweede met Bit 1 van Var, enz. Er zijn dus maximaal 8 RadioDrukknoppen per Var mogelijk waarvan er altijd maar 1 selecteerbaar is. DLGCHECKBOX Var,Text$,Style,X,YPlaatst een AfvinkBox op positie X,Y met daarachter Text$ welke selecteerbaar is. Een lege AfvinkBox komt overeen met Var=0 en een volle AfvinkBox komt overeen met Var<>0. DLGTEXT StringVar,Text$,Style,X,Y,BPlaats Text$ op positie X,Y met daarachter een Invoervak met breedte B. Als default wordt $StringVar in het invoervak geplaatst. Bij het verlaten van het Invoervak met de Return-toets, wordt $StringVar aangepast. Bij het verlaten van het Invoervak met de Escape-toets wordt $StringVar niet aangepast. Passieve-Objecten:Passieve-Objecten zijn objecten die niet selecteerbaar zijn. De commando's om een dergelijk object te plaatsen zijn DLGFRAME en DLGLABEL. DLGFRAME Text$,Style,X,Y,B,HPlaatst een rechthoek op positie X,Y met als breedte B en hoogte H welke niet selecteerbaar is. Text$ wordt midden boven de rechthoek geplaatst. DLGLABEL Text$,Style,X,YPlaatst Text$ op positie X,Y en is niet selecteerbaar. OPMERKING:Alle X en Y coordinaten (behalve bij DLGCREATE) zijn relatief, dwz 0,0 is de linkerbovenhoek van het DLGCREATE Window onafhankelijk van de positie van het Window op het scherm. Werkwijze:
1. Definieer de plaats van de DataOpslag in het geheugen (DLGBASE), Het geheugengebruik van AW is als volgt:
ROM: De ROM is verdeeld in 3 delen, nl.: Interpreter,Commando routines, Dataopslag AW-karakters (ASCII 0-31), Werkruimte: De werkruimte voor de hardware afhankelijke routines (#80-#90) en voor de commando's (#C0-#D0) is tijdelijk. Het gebruik van de bufferruimte (#140-#17F) is ook tijdelijk op DlgBaseAdres (#16D en #16E) en de DlgBasePointer (#16F-#170) na. DataOpslag:Deze ruimte begint vanaf het adres welke met DLGBASE opgegeven wordt. Ook deze ruimte wordt in 3 delen opgesplitst, nl.:
Byte 0 = X focus min Hieronder nog een schermafdruk van de mogelijkheden van de AW-ROM. |