Anders Franzén
<5258>
· Text 4007 · w8 · kommentar
1987-12-19 11:12
Ärende: Kopiering av CTRL-A i TED
Något är skumt med rutinen FRÅNBUFF i
TED (se källkoden). En rad som endast
innehåller CTRL-A lagras internt i TED
som två bytes: 2,1
Tvåan betecknar radens längd och sedan
följer tecknen i raden. En tom rad
sparas i TED som en byte: 1
Antag att ted innehåller fem tomma
rader (visas som blanka på skärmen),
därefter en rad innehållande CTRL-A,
sedan fem tomma igen och slutligen
en rad med texten ABC. Detta lagras
internt i TED som:
1,1,1,1,1 (fem tomma rader
2,1 (CTRL-A)
4,65,66,67 (ABC)
0 (slut på text)
Vad händer nu om man i TED blankar
raden med texten ABC? Den gamla
raden ersätts med en tom som lagras
så här: 1
TED innehåller nu följande:
1,1,1,1,1 (fem tomma rader)
2,1 (CTRL-A)
1 (den tömda raden)
0 (slut på text)
Nu försöker TED att spara minne!
Detta sker genom att tomma rader
sist i textmassan friställs. Tyvärr
tar rutinen som utför denna rensning
bort atta ettor sist i textmassan
och struntar i om det är ett CTRL-A!
Efter rensningen kommer TED internt
att innehålla:
1,1,1,1,1 (fem tomma rader)
2,0 (En rad med CTRL-É!!!)
1,0 (slask som ligger kvar)
Förstår ni? Ettan i raden som innehåller
CTRL-A tas bort i tron att det bara är
en tom rad!
B U G G ! ! !
Man förstår hur känsliga stora system
med mängder av program är!