comparison src/variables.cc @ 4435:dd7af4fa1942

[project @ 2003-06-23 17:52:36 by jwe]
author jwe
date Mon, 23 Jun 2003 17:52:36 +0000
parents d700cfed902a
children 0a59e4de215e
comparison
equal deleted inserted replaced
4434:d28fa596b886 4435:dd7af4fa1942
34 #include "oct-env.h" 34 #include "oct-env.h"
35 #include "glob-match.h" 35 #include "glob-match.h"
36 #include "str-vec.h" 36 #include "str-vec.h"
37 37
38 #include <defaults.h> 38 #include <defaults.h>
39 #include "Cell.h"
39 #include "defun.h" 40 #include "defun.h"
40 #include "dirfns.h" 41 #include "dirfns.h"
41 #include "error.h" 42 #include "error.h"
42 #include "gripes.h" 43 #include "gripes.h"
43 #include "help.h" 44 #include "help.h"
1057 print_usage ("document"); 1058 print_usage ("document");
1058 1059
1059 return retval; 1060 return retval;
1060 } 1061 }
1061 1062
1062 static octave_value_list 1063 static octave_value
1063 do_who (int argc, const string_vector& argv) 1064 do_who (int argc, const string_vector& argv, int return_list)
1064 { 1065 {
1065 octave_value_list retval; 1066 octave_value retval;
1066 1067
1067 bool show_builtins = false; 1068 bool show_builtins = false;
1068 bool show_functions = false; 1069 bool show_functions = false;
1069 bool show_variables = false; 1070 bool show_variables = false;
1070 bool show_verbose = false; 1071 bool show_verbose = false;
1116 { 1117 {
1117 show_functions = at_top_level (); 1118 show_functions = at_top_level ();
1118 show_variables = 1; 1119 show_variables = 1;
1119 } 1120 }
1120 1121
1121 int pad_after = 0; 1122 if (return_list)
1122 1123 {
1123 if (show_builtins) 1124 string_vector names;
1124 { 1125
1125 pad_after += fbi_sym_tab->maybe_list 1126 if (show_builtins)
1126 ("*** built-in constants:", pats, octave_stdout, 1127 {
1127 show_verbose, symbol_record::BUILTIN_CONSTANT, SYMTAB_ALL_SCOPES); 1128 names.append (fbi_sym_tab->name_list
1128 1129 (pats, true, symbol_record::BUILTIN_CONSTANT,
1129 pad_after += fbi_sym_tab->maybe_list 1130 SYMTAB_ALL_SCOPES));
1130 ("*** built-in variables:", pats, octave_stdout, 1131
1131 show_verbose, symbol_record::BUILTIN_VARIABLE, SYMTAB_ALL_SCOPES); 1132 names.append (fbi_sym_tab->name_list
1132 1133 (pats, true, symbol_record::BUILTIN_VARIABLE,
1133 pad_after += fbi_sym_tab->maybe_list 1134 SYMTAB_ALL_SCOPES));
1134 ("*** built-in functions:", pats, octave_stdout, 1135
1135 show_verbose, symbol_record::BUILTIN_FUNCTION, SYMTAB_ALL_SCOPES); 1136 names.append (fbi_sym_tab->name_list
1136 } 1137 (pats, true, symbol_record::BUILTIN_FUNCTION,
1137 1138 SYMTAB_ALL_SCOPES));
1138 if (show_functions) 1139 }
1139 { 1140
1140 pad_after += fbi_sym_tab->maybe_list 1141 if (show_functions)
1141 ("*** dynamically linked functions:", pats, 1142 {
1142 octave_stdout, show_verbose, symbol_record::DLD_FUNCTION, 1143 names.append (fbi_sym_tab->name_list
1143 SYMTAB_ALL_SCOPES); 1144 (pats, true, symbol_record::DLD_FUNCTION,
1144 1145 SYMTAB_ALL_SCOPES));
1145 pad_after += fbi_sym_tab->maybe_list 1146
1146 ("*** currently compiled functions:", pats, 1147 names.append (fbi_sym_tab->name_list
1147 octave_stdout, show_verbose, symbol_record::USER_FUNCTION, 1148 (pats, true, symbol_record::USER_FUNCTION,
1148 SYMTAB_ALL_SCOPES); 1149 SYMTAB_ALL_SCOPES));
1149 } 1150 }
1150 1151
1151 if (show_variables) 1152 if (show_variables)
1152 { 1153 {
1153 pad_after += curr_sym_tab->maybe_list 1154 names.append (curr_sym_tab->name_list
1154 ("*** local user variables:", pats, octave_stdout, 1155 (pats, true, symbol_record::USER_VARIABLE,
1155 show_verbose, symbol_record::USER_VARIABLE, SYMTAB_LOCAL_SCOPE); 1156 SYMTAB_LOCAL_SCOPE));
1156 1157
1157 pad_after += curr_sym_tab->maybe_list 1158 names.append (curr_sym_tab->name_list
1158 ("*** globally visible user variables:", pats, 1159 (pats, true, symbol_record::USER_VARIABLE,
1159 octave_stdout, show_verbose, symbol_record::USER_VARIABLE, 1160 SYMTAB_GLOBAL_SCOPE));
1160 SYMTAB_GLOBAL_SCOPE); 1161 }
1161 } 1162
1162 1163 if (show_verbose)
1163 if (pad_after) 1164 {
1164 octave_stdout << "\n"; 1165 int len = names.length ();
1165 1166
1166 return retval; 1167 octave_value_list ovl (len, octave_value ());
1167 } 1168
1168 1169 for (int i = 0; i < len; i++)
1169 DEFCMD (who, args, , 1170 ovl(i) = names(i);
1171
1172 retval = Octave_map ("name", ovl);
1173 }
1174 else
1175 retval = Cell (names);
1176 }
1177 else
1178 {
1179 int pad_after = 0;
1180
1181 if (show_builtins)
1182 {
1183 pad_after += fbi_sym_tab->maybe_list
1184 ("*** built-in constants:", pats, octave_stdout,
1185 show_verbose, symbol_record::BUILTIN_CONSTANT, SYMTAB_ALL_SCOPES);
1186
1187 pad_after += fbi_sym_tab->maybe_list
1188 ("*** built-in variables:", pats, octave_stdout,
1189 show_verbose, symbol_record::BUILTIN_VARIABLE, SYMTAB_ALL_SCOPES);
1190
1191 pad_after += fbi_sym_tab->maybe_list
1192 ("*** built-in functions:", pats, octave_stdout,
1193 show_verbose, symbol_record::BUILTIN_FUNCTION, SYMTAB_ALL_SCOPES);
1194 }
1195
1196 if (show_functions)
1197 {
1198 pad_after += fbi_sym_tab->maybe_list
1199 ("*** dynamically linked functions:", pats,
1200 octave_stdout, show_verbose, symbol_record::DLD_FUNCTION,
1201 SYMTAB_ALL_SCOPES);
1202
1203 pad_after += fbi_sym_tab->maybe_list
1204 ("*** currently compiled functions:", pats,
1205 octave_stdout, show_verbose, symbol_record::USER_FUNCTION,
1206 SYMTAB_ALL_SCOPES);
1207 }
1208
1209 if (show_variables)
1210 {
1211 pad_after += curr_sym_tab->maybe_list
1212 ("*** local user variables:", pats, octave_stdout,
1213 show_verbose, symbol_record::USER_VARIABLE, SYMTAB_LOCAL_SCOPE);
1214
1215 pad_after += curr_sym_tab->maybe_list
1216 ("*** globally visible user variables:", pats,
1217 octave_stdout, show_verbose, symbol_record::USER_VARIABLE,
1218 SYMTAB_GLOBAL_SCOPE);
1219 }
1220
1221 if (pad_after)
1222 octave_stdout << "\n";
1223 }
1224
1225 return retval;
1226 }
1227
1228 DEFCMD (who, args, nargout,
1170 "-*- texinfo -*-\n\ 1229 "-*- texinfo -*-\n\
1171 @deffn {Command} who options pattern @dots{}\n\ 1230 @deffn {Command} who options pattern @dots{}\n\
1172 @deffnx {Command} whos options pattern @dots{}\n\ 1231 @deffnx {Command} whos options pattern @dots{}\n\
1173 List currently defined symbols matching the given patterns. The\n\ 1232 List currently defined symbols matching the given patterns. The\n\
1174 following are valid options. They may be shortened to one character but\n\ 1233 following are valid options. They may be shortened to one character but\n\
1202 visible in the local scope are displayed.\n\ 1261 visible in the local scope are displayed.\n\
1203 \n\ 1262 \n\
1204 The command @kbd{whos} is equivalent to @kbd{who -long}.\n\ 1263 The command @kbd{whos} is equivalent to @kbd{who -long}.\n\
1205 @end deffn") 1264 @end deffn")
1206 { 1265 {
1207 octave_value_list retval; 1266 octave_value retval;
1208 1267
1209 int argc = args.length () + 1; 1268 if (nargout < 2)
1210 1269 {
1211 string_vector argv = args.make_argv ("who"); 1270 int argc = args.length () + 1;
1212 1271
1213 if (error_state) 1272 string_vector argv = args.make_argv ("who");
1214 return retval; 1273
1215 1274 if (error_state)
1216 retval = do_who (argc, argv); 1275 return retval;
1217 1276
1218 return retval; 1277 retval = do_who (argc, argv, nargout == 1);
1219 } 1278 }
1220 1279 else
1221 DEFCMD (whos, args, , 1280 print_usage ("who");
1281
1282 return retval;
1283 }
1284
1285 DEFCMD (whos, args, nargout,
1222 "-*- texinfo -*-\n\ 1286 "-*- texinfo -*-\n\
1223 @deffn {Command} whos options pattern @dots{}\n\ 1287 @deffn {Command} whos options pattern @dots{}\n\
1224 See who.\n\ 1288 See who.\n\
1225 @end deffn") 1289 @end deffn")
1226 { 1290 {
1227 octave_value_list retval; 1291 octave_value retval;
1228 1292
1229 int nargin = args.length (); 1293 if (nargout < 2)
1230 1294 {
1231 octave_value_list tmp_args; 1295 int nargin = args.length ();
1232 for (int i = nargin; i > 0; i--) 1296
1233 tmp_args(i) = args(i-1); 1297 octave_value_list tmp_args;
1234 tmp_args(0) = "-long"; 1298
1235 1299 for (int i = nargin; i > 0; i--)
1236 int argc = tmp_args.length () + 1; 1300 tmp_args(i) = args(i-1);
1237 1301
1238 string_vector argv = tmp_args.make_argv ("whos"); 1302 tmp_args(0) = "-long";
1239 1303
1240 if (error_state) 1304 int argc = tmp_args.length () + 1;
1241 return retval; 1305
1242 1306 string_vector argv = tmp_args.make_argv ("whos");
1243 retval = do_who (argc, argv); 1307
1308 if (error_state)
1309 return retval;
1310
1311 retval = do_who (argc, argv, nargout == 1);
1312 }
1313 else
1314 print_usage ("whos");
1244 1315
1245 return retval; 1316 return retval;
1246 } 1317 }
1247 1318
1248 // Defining variables. 1319 // Defining variables.