Autor Thema: WriteChar funktioniert, WriteLn nicht  (Gelesen 2965 mal)

Nils

  • Beiträge: 18
    • Profil anzeigen
    • nDallmeyer.de
Gespeichert
« 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;

...

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 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?
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Nils

  • Beiträge: 18
    • Profil anzeigen
    • nDallmeyer.de
Gespeichert
« Antwort #2 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;

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 18. November 2007, 16:05 »
Dann implementier die mal, könnte helfen. ;)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Nils

  • Beiträge: 18
    • Profil anzeigen
    • nDallmeyer.de
Gespeichert
« Antwort #4 am: 19. November 2007, 15:53 »
Da lag der Fehler, danke.

 

Einloggen