home *** CD-ROM | disk | FTP | other *** search
-
- { 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.