home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / tc20 / cpasdemo.pas < prev    next >
Pascal/Delphi Source File  |  1988-10-09  |  6KB  |  151 lines

  1.  
  2. {           Copyright (c) 1985, 88 by Borland International, Inc.            }
  3.  
  4. program CPASDEMO;
  5. (*
  6.   Eine Demonstration der Möglichkeiten zur Verbindung von Turbo Pascal-
  7.   Programmen mit Turbo C-Programmen: Mit Turbo C wird eine .OBJ-Datei
  8.   (CPASDEMO.OBJ) erzeugt, die sich in CPASDEMO.PAS über den Compiler-
  9.   Befehl {$L} aufnehmen läßt.
  10.  
  11.   Einige Hinweise und Grenzen:
  12.  
  13.     1. Gemeinsame Daten beider Module müssen in Pascal deklariert sein -
  14.        Zugriffe auf C-Daten sind von Pascal aus nicht möglich.
  15.     2. Das C-Modul sollte grundsätzlich mit dem Speichermodell SMALL
  16.        compiliert werden.
  17.     3. C-Funktionen, die nur im Implementations-Teil eines Units benutzt
  18.        werden, können als NEAR deklariert sein; im Interface deklarierte
  19.        C-Funktionen erfordern dagegen eine Deklaration als FAR.
  20.     4. Routinen der Laufzeitbibliothek von Turbo C lassen sich nicht direkt
  21.        verwenden, weil Turbo C andere Segmentnamen benutzt. Falls Sie jedoch
  22.        über die Quelltexte der C-Laufzeitbibliothek verfügen (die Sie bei
  23.        uns oder Ihrem Händler bestellen können), ist eine Recompilierung ein-
  24.        zelner Bibliotheksmodule (mit den Segmentnamen von Turbo Pascal)
  25.        möglich - Sie müssen in diesem Fall lediglich darauf achten, für jede
  26.        verwendete Bibliotheksfunktion einen entsprechenden Prototypen in den
  27.        C-Quelltext einzufügen.
  28.     5. Der Turbo C-Compiler verwendet an einigen Stellen Aufrufe interner
  29.        Routinen, die sich nur nach einer Recompilierung der entsprechenden
  30.        Bibliotheks-Module in Pascal-Programme einbinden lassen. Falls Sie
  31.        entsprechende Fehlermeldungen des Turbo Pascal-Linkers erhalten, werden
  32.        Sie wohl ohne den Quelltext der C-Bibliotheken nicht auskommen.
  33.  
  34. ***************************************************************************
  35.  
  36.   Zum Start dieses Programms werden die folgenden Dateien benötigt:
  37.   TCC.EXE und TURBOC.CFG  - Kommandozeilen-Version des C-Compilers
  38.                             und Konfigurationsdatei (von der Turbo
  39.                             Pascal-Diskette II)
  40.   oder
  41.   TC.EXE und CTOPAS.TC    - integrierte Entwicklungsumgebung (Turbo C)
  42.                             und Konfigurationsdatei (ebenfalls von der
  43.                             Turbo Pascal-Diskette II)
  44.  
  45.   1. Compilieren Sie CPASDEMO.C als .OBJ-Datei.
  46.      a) Wenn Sie die integrierte Entwicklungsumgebung verwenden:
  47.      Kopieren Sie CTOPAS.TC und CPASDEMO von der Pascal-Diskette II
  48.      und geben Sie den Befehl
  49.  
  50.        TC /CCTOPAS.TC CPASDEMO.C
  51.  
  52.      von der DOS-Kommandoebene aus. Innerhalb der integrierten Entwicklungs-
  53.      umgebung rufen Sie den Compiler mit dem Tastenbefehl ALT-F9 auf.
  54.  
  55.      b) Wenn Sie die Kommandozeilen-Version von Turbo C verwenden:
  56.      Kopieren Sie TURBOC.CFG und CTOPAS.C von der Pascal-Diskette II
  57.      und geben Sie den Befehl
  58.  
  59.        TCC CPASDEMO
  60.  
  61.      Die Konfigurationsdatei TURBOC.CFG enthält hier auch den Schalter
  62.       -c (= Compilierung als .OBJ-Datei).
  63.  
  64.      Hinweis: TURBOC.CFG bzw. CTOPAS.TC sollten auch für die Erzeugung eigener
  65.      C-Module verwendet werden, solange diese Module in Pascal-Programme
  66.      eingebunden werden sollen.
  67.  
  68.   2. Compilieren Sie CPASDEMO.PAS und starten Sie das Programm.
  69.      a) Wenn Sie die integrierte Entwicklungsumgebung von Turbo Pascal
  70.      verwenden: Geben Sie den Befehl
  71.  
  72.         TURBO CPASDEMO
  73.  
  74.      von der DOS-Kommandoebene aus. Innerhalb der integrierten Entwicklungs-
  75.      umgebung rufen Sie den Compiler mit ALT-R auf.
  76.  
  77.      b) Wenn Sie die Kommandozeilen-Version von Turbo Pascal verwenden:
  78.      Geben Sie den Befehl
  79.  
  80.        TPC /X CPASDEMO
  81.  
  82.      von der DOS-Kommandoebene aus.
  83.  
  84. ************************************************************************
  85.  
  86.   Dieses Programm ist nur eine einfache Demonstration - es ruft die im
  87.   Turbo C-Modul definierten Funktionen der Reihe nach auf. (Jede dieser
  88.   C-Funktionen setzt das Text-Attribut über einen Aufruf der
  89.   Pascal(!)-Routine SetColor und gibt danach einen kurzen Text aus).
  90. *)
  91.  
  92. uses Crt;
  93.  
  94. var
  95.   Factor : Word;
  96.  
  97. {$L CPASDEMO.OBJ}  { Aufnahme des Turbo C-Moduls CPASDEMO.OBJ }
  98.  
  99. function Sqr(I : Integer) : Word; external;
  100. { Ändert die Textfarbe und liefert das Quadrat von I zurück }
  101.  
  102. function HiBits(W : Word) : Word; external;
  103. { Ändert die Textfarbe und liefert das höherwertige Byte von W zurück }
  104.  
  105. function Suc(B : Byte) : Byte; external;
  106. { Ändert die Textfarbe und liefertt B + 1 zurück }
  107.  
  108. function Upr(C : Char) : Char; external;
  109. { Ändert die Textfarbe und übersetzt C in einen Großbuchstaben }
  110.  
  111. function Prd(S : ShortInt) : ShortInt; external;
  112. { Ändert die Textfarbe und liefert S-1 zurück }
  113.  
  114. function LoBits(L : LongInt) : LongInt; external;
  115. { Ändert die Textfarbe und liefert das niederwertige Wort von L zurück }
  116.  
  117. procedure StrUpr(var S : string); external;
  118. { Ändert die Textfarbe und übersetzt S in Großbuchstaben.
  119.   Die C-Routine muß dabei das Längenbyte des Strings überspringen }
  120.  
  121. function BoolNot(B : Boolean) : Boolean; external;
  122. { Ändert die Textfarbe und liefert NOT B zurück }
  123.  
  124. function MultByFactor(W : Word) : Word; external;
  125. { Ändert die Textfarbe und liefert W * Factor. Factor ist eine globale
  126.   Variable von Pascal, auf die die C-Funktion direkt zugreift }
  127.  
  128. procedure SetColor(NewColor : Byte); { Diese Routine wird von den C-Funktionen }
  129. begin                                { aufgerufen. Sie ändert die Textfarbe }
  130.   TextAttr := NewColor;              { durch eine direkte Zuweisung an die }
  131. end;                                 { (in Crt deklarierte) Variable TextAttr }
  132.  
  133. var
  134.   S : string;
  135.  
  136. begin
  137.   Writeln(Sqr(10));                  { Aufruf der in CPASDEMO.C definierten }
  138.   Writeln(HiBits(30000));            { Funktionen, jeweils mit Übergabe der }
  139.   Writeln(Suc(200));                 { entsprechenden Parameter }
  140.   Writeln(Upr('x'));
  141.   Writeln(Prd(-100));
  142.   Writeln(LoBits(100000));
  143.   S := 'abcdefg';
  144.   StrUpr(S);
  145.   Writeln(S);
  146.   Writeln(BoolNot(False));
  147.   Factor := 100;
  148.   Writeln(MultbyFactor(10));
  149.   SetColor(LightGray);
  150. end.
  151.