Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Nils am 18. November 2007, 11:46

Titel: WriteChar funktioniert, WriteLn nicht
Beitrag von: Nils am 18. November 2007, 11:46
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;

...
Titel: Re: WriteChar funktioniert, WriteLn nicht
Beitrag von: kevin am 18. November 2007, 14:41
Wie sieht denn deine Implementierung von fpc_shortstr_assign aus? Könnte dort ein Fehler drin sein, daß nur ein leerer String zurückkommt?
Titel: Re: WriteChar funktioniert, WriteLn nicht
Beitrag von: Nils am 18. November 2007, 15:35
procedure fpc_shortstr_assign(len: longint; src, dst: pointer); compilerproc;

procedure fpc_shortstr_assign(len: longint; src, dst: pointer); alias: 'FPC_SHORTSTR_ASSIGN';
begin

end;
Titel: Re: WriteChar funktioniert, WriteLn nicht
Beitrag von: kevin am 18. November 2007, 16:05
Dann implementier die mal, könnte helfen. ;)
Titel: Re: WriteChar funktioniert, WriteLn nicht
Beitrag von: Nils am 19. November 2007, 15:53
Da lag der Fehler, danke.