Dobrý, ale mám 3 výhrady:
1) při zápisu souboru použij Rewrite místo Reset (už na to upozorňoval msx.)
2) při načítání neuvolníš starý seznam, který je stále v paměti.
3) proč používáš file of string? Sice to nejspíš funguje, ale soubor bude veliký (počet_záznamů × 2 × 256 Bytes).
Předpokládal jsem použití f: text , tedy klasický textový soubor. Potom samozřejmě musíš použít verze Readln a Writeln místo Read a Write (jak jsem psal výše)
Přidavání a mazání uprostřed: pokud myslíš v souboru, tak jednoduchým způsobem ne. (Ale snadno lze vytvořit (přepsat) nový soubor s novými/bez smazaných záznamů). Pokud myslíš v seznamu (v paměti), tak ano. Prostě si dokrokuješ před požadovanou položku a:
mazání:
{v pom je polozka pred(!) mazanou polozkou}
temp := pom^.dalsi; {temp bude vymazan}
pom^.dalsi := temp^.dalsi; {navazani seznamu, aby nevznikla dira}
Dispose(temp);
pridani:
{v pom je polozka pred vkladanou polozkou}
New(Temp);
Temp^.Dalsi := pom^.dalsi;
Pom^.Dalsi := Temp;
kod je zjednoduseny, napr. neni osetren pripad, kdy pri mazani bude pom^.dalsi = nil.