Table Editor And Planner, Or: Teapot!


teapot is een spreadsheetprogramma voor Unix. Het hecht naast portabiliteit en uitbreidbaarheid ook belang aan de toepassing van moderne concepten, zoals driedimensionale tabellen en iteratieve uitdrukkingen.

Het belangrijkste principe van teapot is de functionele adressering van cellen. Hierbij wordt de waarschijnlijk van VisiCalc afstammende adressering in de vorm van A0, C5, enzovoort, opgegeven.

De belangrijke punten die teapot van andere spreadsheetprogramma's doen onderscheiden zijn:

Om de bovenstaande punten te illustreren, worden enkele voorbeelden getoond. Een van de belangrijkste functies in teapot is @(x,y,z). Indien aangeroepen met integer waarden, wordt hiermee de waarde van een cel op de gegeven coordinaten bepaald. Je kunt elk van deze integer waardes weglaten, waarvoor dan de coordinaten van de huidige uitdrukking worden gebruikt. Door de functionele aanpak kan iedere integer waarde ook door een constante of een uitdrukking vervangen worden. Natuurlijk zijn ook geindexeerde verwijzingen mogelijk.

Als alternatief kan @() met een verwijzing naar een cel aangeroepen worden. Deze verwijzingen worden gedefineerd door labels of functies. Door het toepassen van labels worden uitdrukkingen leesbaarder. In plaats van A0+A1 (traditioneel) of @(0,0)+@(0,1) kan @(Vaste_kosten)+@(Variabele_kosten) gebruikt worden. Of indien labels voor kolommen en rijen gebruikt worden zijn @(x(Kosten),y(Papier))+@(x(Kosten),y(Tapes)) goede verwijzingen.

Een ander belangrijk element is eval(). Deze functie geeft de waarde van de uitdrukking waar het argument naar verwijst. Het uitrekenen van deze waarde vindt plaats in de context van de huidige uitdrukking. In plaats van gebruik te maken van verschillende cellen met dezelfde uitdrukking, kan een cel gelabeld worden en kunnen andere cellen gewoon naar deze uitdrukking verwijzen. Als de uitdrukking gewijzigd moet worden, hoeft slechts een aanpassing gedaan te worden.

teapot heeft geen ingebouwde programmeertaal, omdat de meeste programma's in dergelijke talen moeilijk te onderhouden zijn. Wanneer je een complete programmeertaal zoekt, weet je deze wel te vinden. Dit betekent evenwel niet geconditioneerde uitdrukkingsevaluatie ontbreekt. Geconditioneerde evaluatie is mogelijk via eval() met een verwijzing, waarbij een coordinaat een of meer relationele uitdrukkingen bevat die tot 0 of 1 evalueert.

De genoemde geklokte (iteratieve) uidrukkingen bestaan uit twee delen: de reset en het geklokte deel. De eerste keer dat een cel wordt uitgerekend zal het reset-deel gebruikt worden. Volgende keren wordt het geklokte deel gebruikt. De reset-uitdrukking 1 en de geklokte uitdrukking @()+1 resulteren in een cel die optelt elke keer als het werkblad wordt geklokt. Het is eenvoudig om het game of life of iteratief worteltrekken in een werkblad te modelleren.

teapot is geschreven in Ansi-C, en zou op vrijwel elk Posix-volgend systeem compileerbaar moeten zijn, met de volgende twee beperkingen: SysV curses wordt gebruikt voor de gebruikersinterface, opdat er snelle schermopbouw is en functietoetsen ondersteund wordt. De vrijelijk beschikbare SysV curses-kloon ncurses werk goed hiervoor. Verder is de XDR-bibliotheek nodig, en ook die code is vrijelijk beschikbaar. teapot werkt zeker op Solaris 1.1.2, Solaris 2.3, HP-UX 9, Linux, FreeBSD 2.x en Ultrix 4.3. Overzetten naar andere behoeft meestal alleen enige aanpassingen van de Makefile.

teapot is available via ftp as GNU zipped tar file with sources and documentation.


Michael Haardt
Vertaling Wim van Dorst, Clifton Scientific Text Services (clifton@clifton.hobby.nl)