Toon posts:

Borland Turbo Pascal

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb nog wat oude software die ik "vroeger" ooit onder DOS geschreven heb in Borland Turbo Pascal
Het valt me op dat de programmaatjes veel minder snel draaien op m'n P4 (3Ghz, WinXP) dan verwacht.
De antieke Borland Pascal Compiler is 16 bits. Heeft het hier mee te maken ??
Iemand advies hoe ik de programma's sneller kan krijgen (bv. porten naar 32 bits pascal compilers, zoals Gnu Pascal of FreePascal ???

Alvast bedankt, Roger

Verwijderd

Het feit dat die oude programma's 16 bits zijn, en DOS heeft daar idd vanalles mee te maken. XP moet dan een hoop moeite doen om die spullen nog te draaien (WoW, thunking, dat kost allemaal tijd).

Porten naar FreePascal is een goeie optie, maar je zou ook 's kunnen kijken naar Borland Turbo Delphi 2006. Naast Win32 GUI applicaties kun je daar ook prima console applicaties mee bouwen ( {$APPTYPE CONSOLE} als 1e regel in je project), en het converteren van oude TP programma's is een eitje, zolang er in die DOS applicatie geen vieze hacks of lowlevel calls naar hardware werden gebruikt.

En Turbo Delphi is (net als de 2 alternatieven die jij noemde) gratis. Het heeft wel 2 beperkingen: 't is geen open source, en de registration key die ze je mailen is 'time limited': 10 jaar... :+

Edit: kwam pas geleden een 15 jaar oud stukje Turbo Pascal 5.5 code van mij tegen op een russische site:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
type DateStr = string[9];
     Str127 = string[127];

const MonthName: array [1..12] of string[3] =
                 ('Jan','Feb','Mar','Apr','May','Jun',
                  'Jul','Aug','Sep','Oct','Nov','Dec');

function GetDNum(Line: string): longint;
var Gyear, Gmonth, Gday: word;
    I: byte;
    CLine: ^Str127;
begin
  CLine := Ptr(PrefixSeg, $80);       { "abuse" TP's parameter parsing to }
  CLine^ := Line;                     { extract the date from the log entry. }
  val(copy(ParamStr(5),1,2),Gyear,Dummy);
  Gyear := Gyear+1900;
  Gmonth := 0;
  for I := 1 to 12 do
    if ParamStr(4)=MonthName[I] then Gmonth := I;
  val(ParamStr(3),Gday,Dummy);
  GetDNum := DateConv(Gyear,Gmonth,Gday);
end;

Zo'n smerige hack gaat Turbo Delphi (of FreePascal) dus nooit van z'n leven pikken... :)

Die DateConv functie was overigens een 1-op-1 van de manier waarop m'n HP 10C calculator datums berekende:
Delphi:
1
2
3
4
5
function DateConv(Nyear,Nmonth,Nday: word): longint;
begin
  DateConv := trunc(365.25*Nyear)+trunc(30.6*Nmonth)+Nday
              -(Nyear div 100)+(Nyear div 400)-723241;    {01-jan-1980 = 1}
end;

En die bleek achteraf niet 100% te kloppen. Nooit uitgezocht waarom niet, want de afwijking was maar 1 dag, en dat kon geen kwaad.

(en m'n code is er in die 15 jaar ook wel een beetje op vooruitgegaan, ik moest zelf eerst ook kijken wat ik nou bedoelde... ;))

[ Voor 47% gewijzigd door Verwijderd op 20-09-2006 22:03 ]