Hi,
ich möchte meinen C-Kernel auf Pascal umstellen, da mir Pascal lieber ist (bin erfahrener damit). Nun habe ich die Funktion WriteChar, welche nur dafür zuständig ist, ein Zeichen auszugeben.
type
TScreen = Array[1..25, 1..80] of record
c : Char;
attr : Byte;
end;
procedure WriteChar(c : Char);
begin
Screen^[X, Y].c := c;
inc(Y);
end;
WriteChar('a') und man sieht ein a auf dem Bildschirm.
Da mir WriteChar wenig nützt, brauche ich die regelrechte Standardfunktion WriteLn:
procedure WriteLn(s : String);
var i : Integer;
begin
for i := 1 to Length(s) do
WriteChar(s[i]);
end;
WriteLine('a') und man sieht nichts auf dem Bildschirm. Ich habe herausgefunden, dass Length(s) und s aus irgendeinem Grund nicht funktionieren ODER die Übergabe des Strings an die Funktion schiefläuft, wenn man folgenden Code benutzt, sieht man nichts auf dem Bildschirm:
procedure WriteLn(s : String);
var i : Integer;
begin
for i := 1 to Length(s) do
WriteChar('a');
end;
Nimmt man anstelle von Length(s) Length(s)+3, hat man 3 a auf dem Bildschirm.
Woran könnte das liegen ? Ich arbeite mit FreePascal und habe folgenden Code in der system.pas (vlt. hängt es ja damit zusammen):
unit system;
interface
type
ValSInt = LongInt;
SizeInt = LongInt;
procedure FPC_INITIALIZEUNITS; compilerproc;
procedure FPC_DO_EXIT; compilerproc;
procedure fpc_shortstr_assign(len: longint; src, dst: pointer);
function fpc_shortstr_concat(const s1, s2 : ShortString) : ShortString; compilerproc;
function fpc_shortstr_to_shortstr(len : LongInt; const sstr : ShortString) : ShortString; compilerproc;
implementation
procedure FPC_INITIALIZEUNITS; alias: 'FPC_INITIALIZEUNITS'; compilerproc;
begin
end;
...