Scilab Bag Of Tricks: The Scilab-2.5.x IAQ (Infrequently Asked Questions) | ||
---|---|---|
Prev | Chapter 10. Complete Examples | Next |
cat.sci defines the function cat which prints the source of a macro (function) if it is available. The argument-, type-, and size-checking part is used in Example 5-4.
function [res] = cat(macname) // Print definition of function 'macname' // if it has been loaded via a library. // AUTHOR // Lydia van Dijk // // Copyright 1999, 2000 by Lydia van Dijk. // cat is free software distributed under the terms // of the GNU General Public License, version 2. [nl, nr] = argn(0); if nr ~= 1 then error('Call with: cat(macro_name)'); end if type(macname) ~= 10 then error('Expecting a string, got a ' + typeof(macname)); end if size(macname, '*') ~= 1 then sz = size(macname); error('Expecting a scalar, got a ' .. + sz(1) + 'x' + sz(2) + ' matrix') end [res, err] = evstr(macname); if err ~= 0 then select err case 4 then disp(macname + ' is undefined.'); return; case 25 then disp(macname + ' is a builtin function'); return; else error('unexpected error', err); end // select err end // err ~= 0 name = whereis(macname); //disp('name = <' + name + '>'); if name == [] then disp(macname + ' is defined, but its definition is unaccessible'); clear ans; return; end cont = string(evstr(name)); // path (1) and contents (2..$) of library fpath = cont(1); if part(fpath, 1:4) == 'SCI/' then fpath = SCI + '/' + part(fpath, 5:length(fpath)); end fname = fpath + macname + '.sci'; [fh, err] = file('open', fname, 'old'); if err ~= 0 then error('Could not open file ' + fname, err); end text = read(fh, -1, 1, '(a)'); file('close', fh); write(%io(2), text);