1 | /*****
2 | ** ** Module Header ******************************************************* **
3 | ** **
4 | ** Modules Revision 3.0 **
5 | ** Providing a flexible user environment **
6 | ** **
7 | ** File: ModuleCmd_Display.c **
8 | ** First Edition: 1991/10/23 **
9 | ** **
10 | ** Authors: John Furlan, jlf@behere.com **
11 | ** Jens Hamisch, jens@Strawberry.COM **
12 | ** **
13 | ** Description: Displays what changes a modulefile will make to the **
14 | ** environment including any conflics or prerequisits. **
15 | ** **
16 | ** Exports: ModuleCmd_Display **
17 | ** **
18 | ** Notes: **
19 | ** **
20 | ** ************************************************************************ **
21 | ****/
22 |
23 | /** ** Copyright *********************************************************** **
24 | ** **
25 | ** Copyright 1991-1994 by John L. Furlan. **
26 | ** see LICENSE.GPL, which must be provided, for details **
27 | ** **
28 | ** ************************************************************************ **/
29 |
30 | static char Id[] = "@(#)$Id: ModuleCmd_Display.c.src.html,v 1.6 2006/01/18 05:35:11 rkowen Exp $";
31 | static void *UseId[] = { &UseId, Id };
32 |
33 | /** ************************************************************************ **/
34 | /** HEADERS **/
35 | /** ************************************************************************ **/
36 |
37 | #include "modules_def.h"
38 |
39 | /** ************************************************************************ **/
40 | /** LOCAL DATATYPES **/
41 | /** ************************************************************************ **/
42 |
43 | /** not applicable **/
44 |
45 | /** ************************************************************************ **/
46 | /** CONSTANTS **/
47 | /** ************************************************************************ **/
48 |
49 | /** not applicable **/
50 |
51 | /** ************************************************************************ **/
52 | /** MACROS **/
53 | /** ************************************************************************ **/
54 |
55 | /** not applicable **/
56 |
57 | /** ************************************************************************ **/
58 | /** LOCAL DATA **/
59 | /** ************************************************************************ **/
60 |
61 | char local_line[] =
62 | "-------------------------------------------------------------------\n";
63 | static char module_name[] = "ModuleCmd_Display.c"; /** File name of this module **/
64 | #if WITH_DEBUGGING_MODULECMD
65 | static char _proc_ModuleCmd_Display[] = "ModuleCmd_Display";
66 | #endif
67 |
68 | /** ************************************************************************ **/
69 | /** PROTOTYPES **/
70 | /** ************************************************************************ **/
71 |
72 | /** not applicable **/
73 |
74 |
75 | /*++++
76 | ** ** Function-Header ***************************************************** **
77 | ** **
78 | ** Function: ModuleCmd_Display **
79 | ** **
80 | ** Description: Execution of the module-command 'display' **
81 | ** Display every change a module 'load' would apply to **
82 | ** the environment **
83 | ** **
84 | ** First Edition: 1991/10/23 **
85 | ** **
86 | ** Parameters: Tcl_Interp *interp Attached Tcl Interp. **
87 | ** char *argv[] Argument list **
88 | ** **
89 | ** Result: int TCL_ERROR Failure **
90 | ** TCL_OK Successfull operation **
91 | ** **
92 | ** Attached Globals: g_specified_module The module name from the **
93 | ** command line. **
94 | ** g_flags These are set up accordingly before **
95 | ** this function is called in order to **
96 | ** control everything **
97 | ** g_current_module The module which is handled **
98 | ** by the current command **
99 | ** **
100 | ** ************************************************************************ **
101 | ++++*/
102 |
103 | int ModuleCmd_Display( Tcl_Interp *interp,
104 | int argc,
105 | char *argv[])
106 | {
107 | Tcl_Interp *disp_interp;
108 | Tcl_DString cmdbuf;
109 | int i,
110 | result;
111 | char modulefile[ MOD_BUFSIZE];
112 | char modulename[ MOD_BUFSIZE];
113 |
114 | #if WITH_DEBUGGING_MODULECMD
115 | ErrorLogger( NO_ERR_START, LOC, _proc_ModuleCmd_Display, NULL);
116 | #endif
117 |
118 | /**
119 | ** Initialize the command buffer and set up the modules flag to 'display
120 | ** only'
121 | **/
122 |
123 | Tcl_DStringInit( &cmdbuf);
124 | g_flags |= M_DISPLAY;
125 |
126 | /**
127 | ** Handle each passed module file. Create a Tcl interpreter for each
128 | ** module file to be handled and initialize it with custom module commands
129 | **/
130 |
131 | for(i=0; i<argc && argv[i]; i++) {
132 | /**
133 | ** Set the name of the module specified on the command line
134 | **/
135 |
136 | g_specified_module = argv[i];
137 |
138 | disp_interp = Tcl_CreateInterp();
139 | if( TCL_OK != (result = InitializeModuleCommands( disp_interp))) {
140 | Tcl_DeleteInterp( disp_interp);
141 | return( result); /** -------- EXIT (FAILURE) -------> **/
142 | }
143 |
144 | /**
145 | ** locate the filename related to the passed module
146 | **/
147 |
148 | if( Locate_ModuleFile(disp_interp, argv[i], modulename, modulefile) ==
149 | TCL_ERROR) {
150 | Tcl_DeleteInterp( disp_interp);
151 | if( OK != ErrorLogger( ERR_LOCATE, LOC, argv[i], NULL))
152 | break;
153 | else
154 | continue;
155 | }
156 |
157 | /**
158 | ** Print out everything that would happen if the module file were
159 | ** executed ...
160 | **/
161 |
162 | g_current_module = modulename;
163 |
164 | fprintf( stderr, local_line);
165 | fprintf( stderr, "%s:\n\n", modulefile);
166 |
167 | result = CallModuleProcedure( disp_interp, &cmdbuf, modulefile,
168 | "ModulesDisplay", 0);
169 |
170 | fprintf( stderr, local_line);
171 |
172 | /**
173 | ** Remove the Tcl interpreter that has been used for printing ...
174 | **/
175 |
176 | Tcl_DeleteInterp( disp_interp);
177 |
178 | } /** for **/
179 |
180 | /**
181 | ** Leave the 'display only mode', free up what has been used and return
182 | **/
183 |
184 | g_flags &= ~M_DISPLAY;
185 | fprintf( stderr, "\n");
186 |
187 | Tcl_DStringFree( &cmdbuf);
188 |
189 | #if WITH_DEBUGGING_MODULECMD
190 | ErrorLogger( NO_ERR_END, LOC, _proc_ModuleCmd_Display, NULL);
191 | #endif
192 |
193 | return( TCL_OK);
194 |
195 | } /** End of 'ModuleCmd_Display' **/
196 |