2. De WIMP

Verschil single-/multi-tasking

Voor we dieper op de technische details ingaan eerst een uitleg over het verschil van een single-tasking programma en een multi-tasking programma. Het voor de gebruiker zichtbare verschil is het "gelijktijdig" kunnen draaien van applicaties en het sneller kunnen uitwisselen van gegevens tussen die applicaties. Vanuit het oogpunt van de programmeur is er echter veel meer verschil, zeker in het door RISC OS gebruikte co-operative multitasking. Bij co-operative multitasking is de eerste basis-eis het zo snel mogelijk teruggeven van de controle over de processor (aan het besturingssysteem) Hiernaast is het noodzakelijk om bij het ontwerp van een multi-tasking GUI-based* applicatie vooraf duidelijk alle dialogen beschreven te hebben. Deze kunnen niet, of zeer lastig, tijdens het coderen van het programma opgebouwd worden.

In de eerste afbeelding op deze pagina wordt een globale schets van de verschillen tussen een single- en een multi-tasking programma aangegeven, toegepast op de situatie zoals die voor de RISC OS WIMP programmeur zich voordoet.

Achtergrond RISC OS

Modulair

Hoewel de desktop voor de meesten onder ons RISC OS symboliseert, is het feitelijk een groter geheel en is de desktop slechts een onderdeel. Het meest belangrijke gedeelte is de 'kernel', het hart van RISC OS zullen we maar zeggen, hierdoor wordt de initialisatie van de computer/ het OS geregeld. De specifieke functionaliteit echter is geplaatst in modules, die eventueel vervangen kunnen worden door andere modules. Ook de WIMP is zo'n module, de officiële benaming in RISC OS voor deze module is 'WindowManager'.

Single user

RISC OS is ontwikkeld voor het (gelijktijdig) gebruik door 1 specifieke gebruiker, direct gevolg is het ontbreken van beveiligingen (om bestanden voor anderen af te schermen) en het niet aanwezig zijn van mogelijkheden om instellingen per gebruiker op te slaan. Voor het laatste probleem, instellingen per gebruik opslaan, zijn nog wel 3rd party tools aanwezig - hiermee wordt echter geen extra veiligheid geboden.

De SWI-calls

Bij het programmeren van een (BASIC-)programma wat gebruik maakt van features van RISC OS, of dit nu de kernel is of een module, moet er altijd gebruik gemaakt worden van een SoftWare Interrupt (SWI**). In BASIC heeft de interface naar deze instructie de naam 'SYS', deze bevat namelijk nog een extra feature die vanuit machine code niet te gebruiken is. Normaal werkt de ARM in onze computer namelijk met nummers voor het onderscheiden van SWI's, voor ons mensen is het echter lastig om al die nummers te onthouden, alleen de Window Manager heeft er al ongeveer 60 (in RISC OS 4). Om dit probleem te omzeilen zitten er in RISC OS functies die deze nummers kunnen vertalen naar tekstuele aanduidingen (en omgekeerd). Het SYS commando in BASIC maakt standaard gebruik van deze functionaliteit. Voorbeeld van een SYS/SWI call, in het vervolg altijd aangeduid als SWI call, is:

SYS"OS_Byte",0

Uiteraard hadden we in plaats van de string "OS_Byte" ook het intern gebruikte getal als eerste parameter op kunnen geven - deze methode vereist echter wel dat we alle SWI-nummers uit ons hoofd kennen, een onmogelijke opgave.

Applicatie structuur

Als laatste in de WIMP inleiding wil ik de structuur van een RISC OS applicatie beschrijven. Zo'n applicatie is eigenlijk een gewone directory, de naam begint echter met een uitroepteken (!) - zodat RISC OS een duidelijk onderscheid heeft tussen gewone en 'applicatie' directories. Bij gebruik in de desktop zijn er diverse bestanden die verplicht aanwezig moeten zijn, zonder deze bestanden werkt een applicatie niet of niet correct onder RISC OS. In tabel 1 kunt u zowel de verplichte (R) als de optionele (S) bestanden zien. De optionele bestanden worden echter wel gebruikt door RISC OS en de filer indien deze aanwezig zijn.

Afhankelijk van het type applicatie worden er echter meer bestanden in een applicatie geplaatst, deze worden dan meestal aangeroepen uit of gebruikt door een van de verplichte of optionele bestanden. Meestal is het zo dat de '!Run'- en '!Boot'-bestanden van het type 'Obey' zijn, dit is echter geen verplichting. Vanuit deze 'Obey'-bestanden wordt dan een assembler, C (beiden van het RISC OS type 'Absolute') of BASIC programma aangeroepen. Het !Sprites?? bestand daarentegen moet altijd van het type 'Sprite' zijn, de vraagtekens in de tabel staan voor de diverse mogelijke modi die binnen RISC OS te selecteren zijn. Hierbij geeft dit de verhouding (in OS-eenheden) aan in de x- en de y-richting, als er geen passende verhouding aanwezig is wordt automatisch '!Sprites' (dus zonder na-voeging) genomen. Het '!Help'-bestand wordt gestart als de gebruiker op de 'Help' optie in het filermenu klikt, dit kan een gewoon tekst bestand zijn, maar er wordt ook gebruik gemaakt van StrongHelp, eigen bedachte help systemen of HTML bestanden. (Uiteraard moet er een applicatie aanwezig zijn die de bestanden kan afbeelden, daarom wordt er meestal gekozen voor een gangbaar formaat zoals tekst en HTML.)