Kristoffer Eriksson
<5357>
· Text 2743 · w8 · kommentar
1986-02-21 19:51
Ärende: Internkodsbuffert
Nähä... Problemet blir då att om programmet ändrar längd så måste
alla de pekare som ingår i det modifieras, och för att klara det
måste du läsa igenom hela programmet och luska ut vad som är pekare
och vad som är annat. Det räcker definitivt inte att bara ändra uppgiften
om programmets storlek.
Om det hela går ut på att ersätta vissa gamla rader med nytt innehåll,
kan du lösa det genom att se till att de gamla raderna är ganska långa,
och när de ersätts av kortare rader fylla ut dem med en lagom lång REM.
Men om den nya raden innehåller pekare till/från resten av programmet
får du fortfarande stora problem. Om du ser till att programmet inte
är "fixed up" (vid "Fix up" ändras alla GOTO, variabelnamn o liknande
till pekare) slipper du åtminstone en del pekare, men t ex långa variabel
namn lagras alltid som pekare till variabellistan (kanske korta namn
gör det med, jag minns inte riktigt). Fix up görs alltid vid SAVE, men
om programmt innehåller något fel msslyckas den, men då är ju programmet
okörbart utan ändring.
Du kan inte utnyttja ROM-rutinerna till att modifiera pekarna i programmet
utan att ha det i primärminnet. Möjligen skulle du kunna läsa in
programmet som data (i någon variabel t ex) fixa en massa systemvariabler
och hoppas på det bästa. Redan att nå själva kompileringsrutinerna är
knepigt, eftersom de inte ligger på samma ställe ialla BASIC-versioner.
Man kan klara den saken genom att plocka lite adresser här och var där
man tror att rutinerna är lika i alla versioner.
Som du ser är det ingen lätt sak du givit dig in på (eller är det jag
som är blind?)