Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   IntToStr mal anders (https://www.delphipraxis.net/103548-inttostr-mal-anders.html)

Nils_13 17. Nov 2007 10:12


IntToStr mal anders
 
Hi,

wie könnte man ein IntToStr, welches KEINE anderen Units einbindet programmieren ? Es geht eigentlich nicht um Delphi, sondern um FreePascal, aber die Syntax sollte die selbe sein.

Sharky 17. Nov 2007 10:16

Re: IntToStr mal anders
 
Hai Nils,

ich kenne FreePascal nicht. Aber "früher" hat man in IntToStr mit mit Delphi-Referenz durchsuchenStr() gemacht.

Nils_13 17. Nov 2007 10:19

Re: IntToStr mal anders
 
Ich möchte eigentlich nur aus Interesse wissen, wie das ein Betriebssystemprogrammierer machen würde. Die Funktion Str existiert auch nicht. Könnte man die Erstellen, wäre das ja eine Lösung, aber ich glaube das geht mit div und mod, aber das habe ich (liegt vlt. auch daran, dass ich kein eigenes Betriebssystem habe und es nicht einfach mal so testen konnte) nicht hinbekommen.

ErazerZ 17. Nov 2007 10:24

Re: IntToStr mal anders
 
Delphi-Quellcode:
function MyIntToStr(Nummer: Integer): string;
var
  Rest: Integer;
  Minus: Boolean;
begin
  Minus := (Nummer < 0);
  repeat
    Rest := Nummer mod 10;
    Nummer := Nummer div 10;
    if (Rest < 0) then
      Result := chr(Abs(Rest) + $30) + Result
    else
      Result := chr(Rest + $30) + Result;
  until (Nummer = 0);
  if Minus then
    Result := '-' + Result;
end;

Der_Unwissende 17. Nov 2007 10:30

Re: IntToStr mal anders
 
Zitat:

Zitat von Nils_13
Ich möchte eigentlich nur aus Interesse wissen, wie das ein Betriebssystemprogrammierer machen würde.

Hi,
warum dann ohne Unit? Dass Du die Unit System nicht explizit einbindest heißt keineswegs, dass Dein Delphi-Programm frei von einer Unit ist! Auch (oder gerade?) Betriebssystemprogrammierer sind Menschen, die haben keine Lust ständig das Rad neu zu erfinden. Natürlich greifen die also auf Bibliotheken zurück! Anders wäre es kaum möglich die Komplexität der heutigen OS so fehlerarm zu erreichen (und ja, auch mir ist klar dass es Fehler gibt, nur wären es wohl ohne Bibliotheken ein paar zig-Tausende mehr).
Ansonsten kannst Du natürlich einfach in den Source schauen, der ist doch bei den Turbo Explorer Versionen mit bei, da gibt es sicherlich auch die Implementierung von IntToStr.

Gruß Der Unwissende

DeddyH 17. Nov 2007 10:32

Re: IntToStr mal anders
 
Da war zwar jemand schneller, aber so ähnlich habe ich es auch:
Delphi-Quellcode:
function MyIntToStr(const int: integer): string;
var tmp: integer;
begin
  Result := '';
  tmp := int;
  repeat
    Result := Chr(abs(tmp) mod 10 + 48) + Result;
    tmp := tmp div 10;
  until tmp = 0;
  if int < 0 then
    Result := '-' + Result;
end;

Nils_13 17. Nov 2007 10:56

Re: IntToStr mal anders
 
Zitat:

Zitat von Der_Unwissende
Zitat:

Zitat von Nils_13
Ich möchte eigentlich nur aus Interesse wissen, wie das ein Betriebssystemprogrammierer machen würde.

Hi,
warum dann ohne Unit? Dass Du die Unit System nicht explizit einbindest heißt keineswegs, dass Dein Delphi-Programm frei von einer Unit ist! Auch (oder gerade?) Betriebssystemprogrammierer sind Menschen, die haben keine Lust ständig das Rad neu zu erfinden. Natürlich greifen die also auf Bibliotheken zurück! Anders wäre es kaum möglich die Komplexität der heutigen OS so fehlerarm zu erreichen (und ja, auch mir ist klar dass es Fehler gibt, nur wären es wohl ohne Bibliotheken ein paar zig-Tausende mehr).
Ansonsten kannst Du natürlich einfach in den Source schauen, der ist doch bei den Turbo Explorer Versionen mit bei, da gibt es sicherlich auch die Implementierung von IntToStr.

Gruß Der Unwissende

Eigentlich nicht. Du kannst viele Units nicht nehmen, da sie platformspezifisch sind. Audiobibliotheken und so ein Zeug werden gerne übernommen, da sie zu viel Zeit kosten würden und auch nur unnötiger Arbeitsaufwand wären, da hast du recht. Turbo Explorer hab ich übrigens nicht, aber den Code von Delphi7 :P:
Delphi-Quellcode:
function IntToStr(Value: Integer) : String;
assembler;
asm
  PUSH   ESI
  MOV    ESI, ESP
  SUB    ESP, 16
  XOR    ECX, ECX      
  PUSH   EDX          
  XOR    EDX, EDX      
  CALL   CvtInt
  MOV    EDX, ESI
  POP    EAX          
  CALL   System.@LStrFromPCharLen
  ADD    ESP, 16
  POP    ESI
end;
Der sieht aber nicht sehr platformunabhängig aus (System.).

Zu den anderen Codes: und was ist Chr als Funktion oder anders gefragt: wo finde ich diese Funktionen ? SysUtils usw. sieht leer aus.

ErazerZ 17. Nov 2007 11:08

Re: IntToStr mal anders
 
Chr brauchst du auch nicht, kannst gleich "Char" benützen, kommt auf das selbe hinaus.

Nils_13 17. Nov 2007 11:15

Re: IntToStr mal anders
 
Achso, stimmt. Und wie steht es mit abs ?

Der_Unwissende 17. Nov 2007 11:23

Re: IntToStr mal anders
 
Zitat:

Zitat von Nils_13
Eigentlich nicht. Du kannst viele Units nicht nehmen, da sie platformspezifisch sind. Audiobibliotheken und so ein Zeug werden gerne übernommen, da sie zu viel Zeit kosten würden und auch nur unnötiger Arbeitsaufwand wären, da hast du recht.

Hier stellt sich die Frage, was Du genau unter einem Betriebssystem-Programmierer verstehst. Natürlich sind einige Bibliotheken Plattformspezifisch, aber das ist ein OS ja irgendwie auch. Als Bibliothek verstehe ich aber auch nicht nur eine Delphi-Unit, es gibt auch Sammlungen von Code, der bestimmte Funktionen auf einer bestimmten Architektur anbietet. Zudem wird sicherlich ein Kernel-Entwickler bei einem neuen Kern (OS ist egal) nicht alles verwerfen, was die Vorgänger geleistet haben. Natürlich kann man den Code vom Linux-Kernel nicht ohne weiteres unter BSD oder Windows verwenden, aber darum geht es ja auch nicht. Aber ein OS erzeugt ja nicht umsonst HALs. Da dient ja auch Programmen, die man zum OS zählen könnte, um auf bestimmte Devices möglichst einheitlich zugreifen zu können. Da könnte man jetzt z.B. Libs nennen, die auf POSIX setzen und dann eben auch fragen, ob der reine, nackte Kernel das komplette OS ist (und Du die Kernel-Entwickler als Betriebssytemprogrammierer bezeichnen würdest) oder ob Programme die darauf aufsetzen eben auch noch zum OS gehören können (die dann bestimmt auch Bibliotheken verwenden, die auf der POSIX-Schnittstelle beruhen und damit sogar Plattformunabhängig sind).

Gruß Der Unwissende


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz