home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
turbo5
/
cpasdemo.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1988-10-09
|
6KB
|
151 lines
{ Copyright (c) 1985, 88 by Borland International, Inc. }
program CPASDEMO;
(*
Eine Demonstration der Möglichkeiten zur Verbindung von Turbo Pascal-
Programmen mit Turbo C-Programmen: Mit Turbo C wird eine .OBJ-Datei
(CPASDEMO.OBJ) erzeugt, die sich in CPASDEMO.PAS über den Compiler-
Befehl {$L} aufnehmen läßt.
Einige Hinweise und Grenzen:
1. Gemeinsame Daten beider Module müssen in Pascal deklariert sein -
Zugriffe auf C-Daten sind von Pascal aus nicht möglich.
2. Das C-Modul sollte grundsätzlich mit dem Speichermodell SMALL
compiliert werden.
3. C-Funktionen, die nur im Implementations-Teil eines Units benutzt
werden, können als NEAR deklariert sein; im Interface deklarierte
C-Funktionen erfordern dagegen eine Deklaration als FAR.
4. Routinen der Laufzeitbibliothek von Turbo C lassen sich nicht direkt
verwenden, weil Turbo C andere Segmentnamen benutzt. Falls Sie jedoch
über die Quelltexte der C-Laufzeitbibliothek verfügen (die Sie bei
uns oder Ihrem Händler bestellen können), ist eine Recompilierung ein-
zelner Bibliotheksmodule (mit den Segmentnamen von Turbo Pascal)
möglich - Sie müssen in diesem Fall lediglich darauf achten, für jede
verwendete Bibliotheksfunktion einen entsprechenden Prototypen in den
C-Quelltext einzufügen.
5. Der Turbo C-Compiler verwendet an einigen Stellen Aufrufe interner
Routinen, die sich nur nach einer Recompilierung der entsprechenden
Bibliotheks-Module in Pascal-Programme einbinden lassen. Falls Sie
entsprechende Fehlermeldungen des Turbo Pascal-Linkers erhalten, werden
Sie wohl ohne den Quelltext der C-Bibliotheken nicht auskommen.
***************************************************************************
Zum Start dieses Programms werden die folgenden Dateien benötigt:
TCC.EXE und TURBOC.CFG - Kommandozeilen-Version des C-Compilers
und Konfigurationsdatei (von der Turbo
Pascal-Diskette II)
oder
TC.EXE und CTOPAS.TC - integrierte Entwicklungsumgebung (Turbo C)
und Konfigurationsdatei (ebenfalls von der
Turbo Pascal-Diskette II)
1. Compilieren Sie CPASDEMO.C als .OBJ-Datei.
a) Wenn Sie die integrierte Entwicklungsumgebung verwenden:
Kopieren Sie CTOPAS.TC und CPASDEMO von der Pascal-Diskette II
und geben Sie den Befehl
TC /CCTOPAS.TC CPASDEMO.C
von der DOS-Kommandoebene aus. Innerhalb der integrierten Entwicklungs-
umgebung rufen Sie den Compiler mit dem Tastenbefehl ALT-F9 auf.
b) Wenn Sie die Kommandozeilen-Version von Turbo C verwenden:
Kopieren Sie TURBOC.CFG und CTOPAS.C von der Pascal-Diskette II
und geben Sie den Befehl
TCC CPASDEMO
Die Konfigurationsdatei TURBOC.CFG enthält hier auch den Schalter
-c (= Compilierung als .OBJ-Datei).
Hinweis: TURBOC.CFG bzw. CTOPAS.TC sollten auch für die Erzeugung eigener
C-Module verwendet werden, solange diese Module in Pascal-Programme
eingebunden werden sollen.
2. Compilieren Sie CPASDEMO.PAS und starten Sie das Programm.
a) Wenn Sie die integrierte Entwicklungsumgebung von Turbo Pascal
verwenden: Geben Sie den Befehl
TURBO CPASDEMO
von der DOS-Kommandoebene aus. Innerhalb der integrierten Entwicklungs-
umgebung rufen Sie den Compiler mit ALT-R auf.
b) Wenn Sie die Kommandozeilen-Version von Turbo Pascal verwenden:
Geben Sie den Befehl
TPC /X CPASDEMO
von der DOS-Kommandoebene aus.
************************************************************************
Dieses Programm ist nur eine einfache Demonstration - es ruft die im
Turbo C-Modul definierten Funktionen der Reihe nach auf. (Jede dieser
C-Funktionen setzt das Text-Attribut über einen Aufruf der
Pascal(!)-Routine SetColor und gibt danach einen kurzen Text aus).
*)
uses Crt;
var
Factor : Word;
{$L CPASDEMO.OBJ} { Aufnahme des Turbo C-Moduls CPASDEMO.OBJ }
function Sqr(I : Integer) : Word; external;
{ Ändert die Textfarbe und liefert das Quadrat von I zurück }
function HiBits(W : Word) : Word; external;
{ Ändert die Textfarbe und liefert das höherwertige Byte von W zurück }
function Suc(B : Byte) : Byte; external;
{ Ändert die Textfarbe und liefertt B + 1 zurück }
function Upr(C : Char) : Char; external;
{ Ändert die Textfarbe und übersetzt C in einen Großbuchstaben }
function Prd(S : ShortInt) : ShortInt; external;
{ Ändert die Textfarbe und liefert S-1 zurück }
function LoBits(L : LongInt) : LongInt; external;
{ Ändert die Textfarbe und liefert das niederwertige Wort von L zurück }
procedure StrUpr(var S : string); external;
{ Ändert die Textfarbe und übersetzt S in Großbuchstaben.
Die C-Routine muß dabei das Längenbyte des Strings überspringen }
function BoolNot(B : Boolean) : Boolean; external;
{ Ändert die Textfarbe und liefert NOT B zurück }
function MultByFactor(W : Word) : Word; external;
{ Ändert die Textfarbe und liefert W * Factor. Factor ist eine globale
Variable von Pascal, auf die die C-Funktion direkt zugreift }
procedure SetColor(NewColor : Byte); { Diese Routine wird von den C-Funktionen }
begin { aufgerufen. Sie ändert die Textfarbe }
TextAttr := NewColor; { durch eine direkte Zuweisung an die }
end; { (in Crt deklarierte) Variable TextAttr }
var
S : string;
begin
Writeln(Sqr(10)); { Aufruf der in CPASDEMO.C definierten }
Writeln(HiBits(30000)); { Funktionen, jeweils mit Übergabe der }
Writeln(Suc(200)); { entsprechenden Parameter }
Writeln(Upr('x'));
Writeln(Prd(-100));
Writeln(LoBits(100000));
S := 'abcdefg';
StrUpr(S);
Writeln(S);
Writeln(BoolNot(False));
Factor := 100;
Writeln(MultbyFactor(10));
SetColor(LightGray);
end.