Turbo C überlistet

Turbo C von Borland bietet eine recht ansprechende Benutzeroberfläche. Möchte man jedoch den Compiler in einer eigenen Shell oder einem Batch-Monitor installieren, stösst man auf zwei Mängel des Programms TCC.TTP.

Erstens erscheinen alle Fehlermeldungen und Warnungen auf dem Bildschirm. Mehr als drei Meldungen kann man sich kaum merken, wenn man wieder den Editor aufruft.

Zweitens liefert der Compiler an das aufrufende Programm nur bei Fehlermeldungen einen Wert ungleich Null zurück, nicht jedoch bei Warnungen.

Abhilfe schafft das folgende Programm TURBO.TTP, das anstelle von TCC.TIP aufgerufen wird. TURBO.TTP wird die gleiche Kommandozeile übergeben, mit der man TCC.TTP aufgerufen hätte. TURBO.TTP leistet nun folgendes: Die gewohnte Copyright-Meldung wird ausgegeben und anschließend die Bildschirmausgabe mit den GEM-DOS-Funktionen Fdup und Fforce in die Datei ERRORS.OUT umgeleitet. Dann ruft man den Turbo C-Compiler TCC.TTP mittels Pexec auf. Dabei werden die Kommandozeile und der environment pointer von TURBO.TTP an TCC.TTP weitergegeben. Nachdem der Compiler seine Arbeit vollendet hat, wird die Bildschirmausgabe wieder mit dem Bildschirm verbunden und die Datei ERRORS.OUT ausgegeben, falls sie Meldungen enthält. -1 wird an das aufrufende Programm zurückgegeben. Ist die Datei leer, gibt TURBO.TTP 0 zurück. Mit einem Editor, der zwei Textfenster bearbeiten kann (z.B. TEMPUS), läßt sich nun der Quelltext korrigieren, während die Fehlermeldungen im zweiten Fenster gehalten werden.

/*=============================================*
 * TURBO.C                                     *
 *                                             *
 * Umlenkung der Bildschirmausgabe von TURBO C *
 * in Datei "ERRORS.OUT"                       *
 *   - Umlenkung der Bildschirmausgabe in Datei*
 *   - Nachladen und Starten von "TCC.TTP"     *
 *   - alle Bildschirmausgaben von "TCC.TTP"
       gehen in Datei "ERRORS.OUT"             *
 *   - Kommandozeile und environment pointer   *
 *     werden an "TCC.TTP" weitergegeben       *
 *   - Bildschirmausgabe zurück auf Bildschirm *
 *   - Ausgabe der Datei "ERRORS.OUT"          *
 *   - Rückgabe an das aufrufende Programm :   *
 *      0 : keine Meldungen von TCC.TTP        *
 *     -1 : mindestens 1 Warnung/Fehlermeldung *
 * 20.10.89 Jan Bolt                           *
 * (c) MAXON Computer GmbH 1990                *
 * TURBO C V 1.0                               *
 *=============================================*/

/* Linken mit TLINK Option -S=512 (512 bytes stack reichen) */

#include <stddef.h> 
#include <stdio.h>
#include <tos.h>
#include <string.h>

#define CON 1
#define OUTPUT "ERRORS.OUT"
#define OVERLAY "TCC.TTP"

extern BASPAG *_BasPag;     /* Zeiger auf Basepage aus TCSTART */

char copyright [] = "\x0d\x0a\
Turbo C Version 1.00 Copyright (c) 1988 \ 
Borland International\x0d\x0a";

int type (char *fname)      /* Datei auf Bildschirm ausgeben */
{
    char buffer[80]; 
    int fh, k, i; 
    int test = 0;

    if ((fh=Fopen(fname,0)) >= 0)
    {
        Fseek ((long)strlen(copyright),fh,0); 
        if ((test=(int)Fread(fh,11,buffer)) == 1) 
            Cconout (buffer[0]); 
            while ( (k=(int)Fread(fh,801,buffer)) > 0)
            {
                i = 0;
                while (i <= k-1)
                    Cconout ((int)buffer[i++]);
            }
    }
    if (test != 0) 
        test = -1; 
    return (test);
}

int main (int argc,char *argv[],char *env)
{
    int out, con2, tyret;

    Cconws (copyright);
    if ( ((out = Fcreate (OUTPUT,0)) >= 0) && ((con2 = Fdup (CON)) >= 0) )
    {
        Fforce (CON,out);
        Pexec (0,OVERLAY,(COMMAND *)_BasPag->p_cmdlin,env);
        Fforce (CON,con2);
        Fclose (out);
        tyret = type (OUTPUT);
    }
    else
        Cconws ("I\O-error !\x0d\x0a"); 
    return (tyret);
}

Jan Bolt
Links

Copyright-Bestimmungen: siehe Über diese Seite