Calendar,
Een module voor kalenderberekeningen
2e deel over de module van Erik Groenhuis

Eindeloos heb ik zitten twijfelen over de naam voor de dagnummers. "Absolute dag" klinkt wat definitief en geeft de indruk dat de Gregoriaanse kalender een absolute kalender is. "Gregoriaanse dag" is weliswaar correct, maar suggereert teveel dat het module op de Gregoriaanse kalender gebaseerd is. "Juliaanse dag" is helemaal fout, want dat slaat op een dagnummering die niets uit te staan heeft met de Juliaanse kalender. En simpelweg "dagnummer" geeft teveel verwarring met de dag van de maand. Het aantal keren dat ik van gedachten ben veranderd is niet meer te tellen. En bij iedere verandering moest weer de handleiding en de namen van de SWIs in de software aangepast worden.

Toch weer anders
En nu de eerste versie van het module (v0.02) al hoog en breed gepubliceerd is, moet het toch weer anders. Ik heb namelijk ondertussen ontdekt wat de Juliaanse Dag is. Dat is een telling die al in de zestiende eeuw bedacht is, en die een beginpunt heeft ver voor de jaartelling. In de volgende versie zal de Juliaanse dag gebruikt worden, en de namen van de SWIs zullen daarop aangepast worden. Dus ondanks mijn voornemen zal het interne dagnummer toch veranderen. Tegen de tijd dat je dit leest is dat gebeurd, en v0.10 staat op mijn website.

De voorlopige versie
Het module was nog lang niet af (we hebben het nu over september 2002), maar uit vragen in comp.sys.acorn.programmer bleek dat de behoefte aanwezig was. Daarom besloot ik alvast een voorlopige versie in elkaar te sleutelen. Deze zou alleen de Gregoriaanse en de Juliaanse kalender bevatten en alleen de meest elementaire SWIs.

Aan het werk dus. Voor dit project ben ik maar eens begonnen met het schrijven van de handleiding. Naast de beschrijving van de SWIs voegde ik ook wat algemene stukjes over de verschillende kalenders toe. Handleidingen en andere documenten schrijf ik tegenwoordig in TechWriter, dat bevalt mij het best en je kan exporteren naar de meeste gangbare formaten zoals RTF, Word en PostScript, en ook naar Text en HTML.

En hoe ging dat ook al weer, modules schrijven in C? Met het CMHG gereedschap, maar het was weer even zoeken in de boeken om terug te halen hoe het werkt. En dan moet je kijken hoe de aanroep van een SWI omgezet moet worden in het aanroepen van de juiste C functie.

Vervolgens moet het eigenlijke rekenwerk geprogrammeerd worden. Voor deze twee kalenders valt dat nog wel mee, ze zijn niet zo ingewikkeld. Belangrijk is ook het testen: je moet wel zorgen dat alles goed en correct werkt. Niets zo vervelend als een programma waar mensen op vertrouwen dat bijvoorbeeld beweert dat het jaar 1900 een schrikkeljaar is.

Na al het sleutelen kon ik v0.02 op mijn website zetten. Daarvoor is dan ook weer een webpagina nodig. Aankondigen op comp.sys.acorn.announce, ook nog even melden op comp.sys.acorn.programmer, als reactie op de vraag van degene die kalenderberekeningen nodig had, en klaar!

De 32bit verrassing
In het najaar van 2002 werden we plotseling verrast door de komst van de Iyonix en het bijbehorende verschijnsel van de 32/26 bit neutrale software. Deze oplossing voor het verdwijnen van 26 bit processors in de toekomst stond mij zeer aan, en ik maakte meteen gebruik van de introductie-aanbieding van de nieuwe compiler. Ik werd vervuld van het heilige voornemen om zo snel mogelijk al mijn gepubliceerde software om te zetten in 32/26 bit neutrale versies.

Nu kan ik niet iedere dag werken aan software, en het duurde tot juni 2003 voordat een nieuwe versie van Calendar op de website stond. Ondertussen was gebleken dat verschillende mensen na het downloaden aan mij vroegen wat dat enorme bestand met filetype &d01 in de directory Docs was. Dat was dus mijn handleiding in EasiDoc formaat. Bij de nieuwe versie heb ik die er maar uit gehaald. De gebruikers moeten maar genoegen nemen met de HTML en Text conversies. (Misschien dat ik nog eens investeer in RiScript en dan PDF versies bak van mijn handleidingen. Dan zie je tenminste die fraaie layout terug waar ik zo hard aan gewerkt heb <snik>.)

Toch naar Juliaanse Dag
En nu is de bijl gevallen: Calendar gaat toch maar over op de Juliaanse Dag voor de interne representatie. Dat had nog heel wat voeten in de aarde. Vooral het aanpassen van de handleiding was veel werk.
Om het leed voor de gebruikers wat te verzachten heb ik een bibliotheek van C functies toegevoegd waarmee de SWIs makkelijk vanuit C aangeroepen kunnen worden (zogeheten C veneers). Deze laat ik produceren door een iets aangepaste versie van DefMod, het programma dat door de makers van OSLib ontwikkeld is. Om het gebruik ervan te laten zien zit er ook een C demo programmaatje in het pakket.

Verder werk
Langzaam maar zeker begint het module vorm te krijgen. De belangrijkste volgende zet is het implementeren van meer SWIs (voornamelijk voor het berekenen van de weekdagen) en van meer kalenders. Verder wil ik zorgen dat dingen als negatieve jaren of negatieve of veel te grote maanden goed werken. En de code die CMHG maakt vind ik niet erg elegant, dus misschien ga ik over op CMunge van Justin Fletcher. En als er vraag naar is kunnen er nog meer kalenders toegevoegd worden.

Links
Meest recente versie van Calendar

Engelse sites

Nederlandstalige sites