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:
@(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.