Men zou verwachten dat een programma dat door zovelen in het gebruik is getest als WordPerfect zo langzamerhand vrij is van ernstige programmeerfouten. Maar zo is het helaas niet! Tijdens het maken van een conversieprogramma voor WordPerfect teksten ontdekte ik een aantal simpele manieren om het programma (Engelse en Nederlandse versies 4.1 en 4.2) hopeloos vast te laten lopen.G.J.C. Lokhorst. Bugs in WordPerfect [4.1 en 4.2]. Personal Computer Magazine, 6 (6): 141, June 1988. ISSN 0772-8077.
Eerst iets over de achtergrond. WordPerfect gebruikt de tekens met een decimale waarde boven de 127 als functie-codes. Ze verschijnen niet als letters op het scherm of de printer; we kunnen alleen hun interpretatie zien via Alt-F3. Er is slechts één uitzondering op deze regel: als een teken tussen twee bytes met de waarde 225 (op het scherm te zien als ß) staat ingeklemd wordt het beschouwd als letter in de tekst. Een ö in de tekst correspondeert dus met de reeks ßöß in het bestand (daarom duurt het uitwissen van een ö aanmerkelijk langer dan van een o). Een losse ö daarentegen betekent "onderstrepen aan".
Niet alle functies bestaan uit één teken; tabulatie-instellingen zijn bijvoorbeeld langer. In zo'n geval plaatst WordPerfect de functie-code twee keer, één keer aan het begin (de "open gate") en één keer aan het eind (de "closing gate") van de betreffende functie.
Bij functie-reeksen met een vaste lengte gebruikt WordPerfect de lengte om te bepalen waar de functie ophoudt. Als dat echter niet het geval is, zoekt WordPerfect naar de "closing gate". En hier beginnen de moeilijkheden: WordPerfect onderscheidt hier namelijk niet tussen functie-codes en letters in de tekst!
Het resultaat is spectaculair. Zet bijvoorbeeld eens een Gamma (decimale waarde 226) in de tekst van een noot, gevolgd door enkele andere letters. WordPerfect "denkt" dat de eerste Gamma die hij na het begin van de noot tegenkomt het einde van de noot markeert en sluit de noot op dat punt af, direct voor de bij de Gamma behorende ß (het gaat hier immers om een letter). Even later komt hij een losse Gamma tegen, het werkelijke einde van de noot; deze interpreteert hij als het begin van een volgende noot. Omdat de bijbehorende noot-informatie ontbreekt en de noot nergens ophoudt zien we met Alt-F3 een chaos op het scherm, en het programma zit muurvast. Precies hetzelfde gebeurt er als we een teken met decimale waarde 242 in een samenvatting of commentaar zetten, of een teken met decimale waarde 209 in een kop- of voettekst (bijvoorbeeld in een tekening). Het enige dat erop zit is te re-booten, en we zijn onze hele tekst kwijt.
Hier hebben we een echte, domme fout in WordPerfect gevonden, die gek genoeg niet in de printercommando's is gemaakt. Printercommando's zijn niets anders dan "onzichtbare" stukken tekst, aan weerszijden begrensd door decimale waarde 223. Hier treedt geen verwarring op, omdat ieder karakter X boven de 190 wordt aangegeven als karakter 191 gevolgd door het karakter met de decimale waarde X min 191. (Karakter 193 is bijvoorbeeld karakter 191 plus karakter 2.) Karakter 223 kan dus nooit in een printercommando voorkomen. Ook bij de Referentielijst gaat het goed; karakter 237 (phi) wordt simpelweg weggewist in de verkorte referentie.
De laatste gevallen laten zien dat de fout gemakkelijk omzeild kan worden. Het is te hopen dat dit in komende versies van het programma ook gebeurt. Voor degene die een programma heeft om teksten na re-booting uit het geheugen op te vissen zijn de hierboven beschreven manieren om de computer vast te laten lopen niet rampzalig. Maar als men zo'n programma niet heeft is men gewaarschuwd, want dan raakt men zijn tekst in de genoemde gevallen onherroepelijk kwijt!
Samenvattende tabel
Decimale waarde | Uit den boze in |
209 | Kopteksten, voetteksten |
226 | Eindnoten, voetnoten |
242 | Commentaren, samenvattingen |
Bovenstaande fouten komen in WordPerfect 5.1 niet meer voor, zoals ik net heb geconstateerd door WP51 + IBM PC DOS 7.0 met dosemu onder Linux te draaien.
Bovenstaande fouten komen ook in de Duitstalige versie van WordPerfect 4.1 voor, zoals ik net heb geconstateerd door WP41 + MS DOS 2.11 met doscmd onder FreeBSD te draaien.
Previous | Up | Next
gjclokhorst@gmail.com || July 17, 2015 || HTML 4.01 Strict