Hoezo geen desktop applicatie?

door Wim Hendriks

Overgehouden uit het verleden van de Archimedes, heb ik nog vele kleine programma's welke je in de commandline mode moet uitvoeren. Moderner is dat te doen in een taskwindow maar het blijft ouderwets aanvoelen. Toch wil ik die programma's niet kwijt ondanks dat ik ze zelden gebruik, maar ik wil ze wel van een modern jasje voorzien. Omdat dit soort programma's veel uit de unix wereld komen, bevatten ze ook vaak schakelopties en invoerwaarden in de vorm van allerlei parameters welke je moet meegeven om het programma goed te laten werken. Dit is onhandig, want je vergeet ze steeds. Zijn het altijd dezelfde parameters die gebruikt worden, dan is een obey- of runbestandje te overwegen. Maar je hebt al gauw veel van die bestandjes met allemaal even duistere namen. Houd het maar uit elkaar. Gelukkig is er wat voor.

ikoon fc resourceOp de club-cd nr.5 van 2006 (de laatste) vindt je in de map Software.Programmer.Tools de map Frontender. Dit is een desktop frontend voor je programma. Een voorzetapplicatie dus met de benodigde toeters en bellen om het geheel te laten werken zonder dat we het zelf moeten bedenken. Ik maak hier regelmatig gebruik van. Het pakketje zelf zit in de archive fe205 en heet !FEer. Dit kun je beschouwen als een hulpmiddel (resource), het moet gezien zijn voordat je er gebruik van kan maken. Het is maar 65kB groot en kan dus makkelijk in !Boot.Resources. Je weet dan zeker dat het beschikbaar is, maar nodig is dat niet. Er wordt wat te vaak wat in Resouces gestopt, waardoor je backup moeizaam wordt, maar dit hoort er wel in thuis vindt ik.

ikoon fc clientAls tweede moeten we dan de applicatie maken. Dat kan zo simpel als wat. De help-info van Frontender heeft het over minimaal een !Run en een Script bestand die gemaakt moeten worden. Voorbeelden zijn beschikbaar in het help bestand. Voor het mooie maak je een !Sprites bestand met daarin je eigen ikoon voor de applicatie plus een !Help met de informatie over deze applicatie. Ik ben niet zo creatief en pak dus een voorbeeld, bouw die om en klaar is mijn applicatie. Voorbeelden van applicaties zijn ook op de cd te vinden, van eenvoudig tot ingewikkeld. Dit laatste slaat op de script wat de invoer voor het programma beschrijft. Gebruikelijk is dat het programma ook in de applicatie staat. Volgens regels van Acorn zou die dan !RunImage moeten heten. Beide regels kun je anders uitvoeren, het programma kan bijv. in !Boot.Library staan en je programma kan natuurlijk zijn oorspronkelijke naam houden. Een eenvoudige is ampapp. Bekijk het maar eens.

!Run

Dit is niet meer dan het starten van die resource FrontEnd om het script te laten uitvoeren. Dit is een standaard waarbij <obey$dir> omgezet wordt naar variable voor je applicatie. Dat is al. Je ziet er een test op aanwezigheid van FrontEnder in. Gebruik je Perl of Python of een andere interpeter cq. library, dan kan je daar ook op testen. Hier een voorbeeld van een applicatie die een Perl-script uitvoert:

[bestand !Run van text2html]

Set text2html$Dir If "" = "" Then Error "You need Frontender to use text2html"
If "" = "" Then Error "You need Perl to use text2html"
Run .!Runimage .Script

[einde !Run]

Script

Het script is de beschrijving van wat er moet gebeuren. Het eerste deel 'child_info' definieert de applicatie. Eerst de beschrijvende info welke zichtbaar is in de info behorende bij het menu van het ikoon op de ikonenbalk. Het tweede deel in het script beschrijft de vensters welke geopend worden bij klikken op het ikoon van de applicatie op de balk. Dit is het meest ingewikkelde van het geheel. De help-informatie geeft gedetailleerde info hierover, maar een voorbeeld (en die zijn er!) werkt zoveel makkelijker. Als voorbeeld iets wat ik zelf gemaakt heb. Het gebruikt een programma 'fc' ooit door David Pilling in 1988 overgezet van UNIX naar RISC OS waarmee je twee tekst bestanden kan vergelijken en snel de verschillen zichtbaar kan maken. De help-informatie van het programma geeft:

[!Help van fc]

!Help

Usage: fc filespec1 filespec2 [options]
  options:
     Full - show full lines.
     Brief - show first 34 characters of lines.
     Tabs - expand tabs before comparing.
     NOTabs - don't expand tabs.
     TRim - ignore trailing blanks.
     NOTRim - don't ignore trailing blanks.
     Default: Brief, Tabs, NOTrim.

Archimedes implementation (c) David Pilling 1988

[einde !Help]

We zien dat twee bestandsnamen plus opties aan het programma gevoerd worden. Dat wordt in het deel 'Main_window' gedaan. Zie onderstaand voorbeeld van het hele script.

[bestand Script van !fc]

# Frontman script for fc
# Script written by Wim Hendriks

child_info
{
  name:     fc
  purpose:  Compare files and list changes
  version:  0.01 (08-Jan-06)
  author:   Wim Hendriks
  command:  fc
  wimpslot: 256
  postexe:   
}

Main_window
{
  icon: writeable "file1:" "" "<" 200 502 right
  icon: writeable "file2:" "" ">" 200 502 right
  icon: option "show full lines" off "Full"
  icon: option "don't expand tabs before comparing" off "NOTabs"
  icon: option "ignore trailing blanks" off "TRim"
  icon: action "" "control" "" right
}

[einde Script]

Dit is het resultaat:

menu fc

We zien 2 beschrijfbare ikonen voor bestandsnamen, 3 ikonen voor opties en 1 actie voor het uitvoeren. Bij de beschrijfbare ikonen geven we aantal characters op (200 in dit geval) en de breedte in OS units van het vak waarin geschreven mag worden. Bij de opties is gebruik gemaakt van de 'defaults' die het programma verwacht. Die hoeven we dus niet te geven.

Het grote voordeel van deze applicatie is dat we de bestandsnamen kunnen invullen door de bestanden in de het betreffende vakje te slepen. Geen tikfouten meer en de volgende keer even gauw een van beide namen vervangen. De opties kunnen simpel met een klik aan of uit gezet worden.

De voorbeelden laten vele mogelijkheden zien. Bekijk maar eens 'wget' met zijn vele submenu's. Ik heb mijn voorbeeld van 'fc' beschikbaar gemaakt:

Ik wens je veel gemak hiervan.