/[ascend]/trunk/tcltk98/generic/interface/AscPrintTcl.c
ViewVC logotype

Annotation of /trunk/tcltk98/generic/interface/AscPrintTcl.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 50 - (hide annotations) (download) (as text)
Tue Apr 19 07:55:06 2005 UTC (20 years, 9 months ago) by jds
File MIME type: text/x-csrc
File size: 4319 byte(s)
Minor updates:

jam/Jambase
Fixed msvc include path to include Platform SDK headers

tcltk98/jam/Jamfile
Fixed MinGW executable build so console window not created

tcltk98/generic/interface/AscPrintTcl.c
Removed redundant return in Asc_PrintInit_TclVtable() from previous edit
1 ben.allan 45 /*
2     * ASCEND Printf Substitutes
3     * by Mark Thomas
4     * Created: 27.May.1997
5     * Version: $Revision: 1.6 $
6     * Version control file: $RCSfile: ascPrint.c,v $
7     * Date last modified: $Date: 1997/10/29 13:08:49 $
8     * Last modified by: $Author: mthomas $
9     *
10     * This file is part of the ASCEND utilities.
11     *
12     * Copyright 1997, Carnegie Mellon University
13     *
14     * The ASCEND utilities is free software; you can redistribute
15     * it and/or modify it under the terms of the GNU General Public License as
16     * published by the Free Software Foundation; either version 2 of the
17     * License, or (at your option) any later version.
18     *
19     * The ASCEND utilities is distributed in hope that it will be
20     * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
21     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22     * General Public License for more details.
23     *
24     * You should have received a copy of the GNU General Public License
25     * along with the program; if not, write to the Free Software Foundation,
26     * Inc., 675 Mass Ave, Cambridge, MA 02139 USA. Check the file named
27     * COPYING. COPYING is found in ../compiler.
28     */
29    
30     /*
31     * Only compile this file if we are using Asc_Printf()
32     */
33     #if PRINTF == Asc_PrintF
34    
35    
36     #include <stdarg.h>
37     #include "tcl.h"
38     #include "utilities/ascConfig.h"
39     #include "utilities/ascPrint.h"
40    
41 jds 47
42 ben.allan 45 #define PRINT_BUFFER_SIZE 16380
43    
44    
45     /*
46     * The Tcl channels for stdout and stderr.
47     *
48     * These need to be initialized by calling Asc_PrintInit() before
49     * calls to Asc_Printf() will write to the Tcl Channels.
50     */
51     static Tcl_Channel g_tclout = NULL; /* the Tcl channel for stdout */
52     static Tcl_Channel g_tclerr = NULL; /* the Tcl channel for stderr */
53    
54     static struct Asc_PrintVTable g_Asc_PrintVTable_Tcl;
55     static int Asc_PrintTcl(FILE *fp, CONST char *format, va_list args);
56     static int Asc_FFlushTcl(FILE *fp);
57     static char *g_AscTclPrintName = "tclPrintChannels";
58    
59     int Asc_PrintInit_TclVtable(void)
60     {
61     g_Asc_PrintVTable_Tcl.name = g_AscTclPrintName;
62     g_Asc_PrintVTable_Tcl.print = Asc_PrintTcl;
63     g_Asc_PrintVTable_Tcl.fflush = Asc_FFlushTcl;
64     g_Asc_PrintVTable_Tcl.next = 0;
65 ben.allan 49 return Asc_PrintPushVTable(&g_Asc_PrintVTable_Tcl);
66 ben.allan 45 }
67    
68     int Asc_PrintInit_Tcl(void)
69     {
70    
71     /*
72     * Initialize ASCEND's ideas of Tcl's idea of stdout and stderr.
73     */
74     g_tclout = Tcl_GetStdChannel( TCL_STDOUT );
75     g_tclerr = Tcl_GetStdChannel( TCL_STDERR );
76    
77     if(( g_tclout == NULL ) || ( g_tclerr == NULL )) {
78     return 1;
79     }
80     return 0;
81     }
82    
83     void Asc_PrintFinalize_Tcl(void)
84     {
85     Asc_PrintRemoveVTable(g_AscTclPrintName);
86     }
87    
88    
89     /*
90     * int AscPrint(fp, format, args)
91     * FILE *fp;
92     * CONST char *format;
93     * va_list args;
94     *
95     * Using the sprintf-style format string `format', print the arguments in
96     * the va_list `args' to the file pointer `fp'. Return the number of
97     * bytes printed.
98     *
99     * NOTE: The last argument to this function is a VA_LIST, NOT a variable
100     * number of arguments. You must initialize the va_list before calling
101     * this function, and cleanup the va_list afterwards.
102     */
103     static
104     int Asc_PrintTcl(FILE *fp, CONST char *format, va_list args)
105     {
106     static char buf[PRINT_BUFFER_SIZE]; /* the buffer that holds the output */
107    
108     if(( fp == stdout ) && ( g_tclout != NULL )) {
109     vsprintf( buf, format, args );
110     return Tcl_Write( g_tclout, buf, -1 );
111     }
112     else if(( fp == stderr ) && ( g_tclerr != NULL )) {
113     vsprintf( buf, format, args );
114     return Tcl_Write( g_tclerr, buf, -1 );
115     }
116     /* TODO: should this fail loudly when a NULL fp is passed in? */
117     else if (fp != NULL) {
118     return vfprintf( fp, format, args );
119     }
120     else {
121     return 0;
122     }
123     }
124    
125    
126     /*
127     * int Asc_FFlushTcl(fileptr)
128     * FILE *fileptr;
129     *
130     * Flush output to the file pointed to by the file pointer `fileptr';
131     * return 0 for success and EOF for failure.
132     *
133     * This is needed for consistency with Asc_FPrintf() and Asc_Printf().
134     */
135     extern
136     int Asc_FFlushTcl( FILE *fileptr )
137     {
138     if(( fileptr == stdout ) && ( g_tclout != NULL )) {
139     if( Tcl_Flush( g_tclout ) != TCL_OK ) {
140     return EOF;
141     }
142     return 0;
143     }
144     else if(( fileptr == stdout ) && ( g_tclerr )) {
145     if( Tcl_Flush( g_tclerr ) != TCL_OK ) {
146     return EOF;
147     }
148     return 0;
149     }
150     else {
151     return fflush(fileptr);
152     }
153     }
154    
155     #endif /* PRINTF == Asc_Printf */

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22