Też zauważyłem, że odzielnie robią te procedury będzie nawet trochę wydajniej bo nie będzię trzeba sprawdzać, co weszło do procedury i tak zrobiłem.
To nie tylko chodzi o optymalizację, ale przede wszystkim o czytelność kodu; Nie rozumiem dlaczego jedna procedura miałaby robić dwie różne rzeczy (operować na dwóch różnych typach, które i tak mimo wszystko przekazywane są do procedury); Skoro tylko jeden typ będzie wykorzystywany w procedurze to nie powinieneś podawać ich dwóch i wybierać odpowiednią; Lepiej już napisać sobie dwie osobne, nawet jeśli część kodu będzie się powtarzać (to też będzie można skrócić);
Jak to właśnie przerzutować tak żeby nie tylko móc przechodzić strukturę [...]
W dalszym ciągu nie wiem co chcesz osiągnąć, więc nic mądrego nie mogę doradzić;
[...] ale móc na niej używać funkcji new i dispose. Tak zadziała?
New i Dispose to są procedury, nie funkcje; Możesz ich używać, ale nadal jedna funkcja służy do dwóch rzeczy i wciąż trzeba kombinować; Nie mam jak tego sprawdzić, bo podałeś kod jedynie części programu, jednak ten kawałek:
new(choosen);
choosen^.title:=title;
choosen^.next:=nil;
nawet się nie skompiluje, bo zmienna choosen
jest typu ogólnego, który nie jest strukturą i nie zawiera pól, więc tak tego nie użyjesz; Możesz sobie zadeklarować dwa wskaźniki tych dwóch róznych typów i używać tylko tego jednego - odpowiedniego, ale w dalszym ciągu będą to kombinacje, które posłużą jedynie do zaciemnienia kodu; Po raz kolejny nalegam, aby rozdzielić tę procedurę na dwie mniejsze, operujące na tylko jednym typie każda; Inaczej będziesz miał w kółko problemy i kolejne pytania.