function gmevallog(GELinfile, GELoutfile)% gmevallog(infile, outfile);% This routine evaluates a script file (first argument) and% places the result in the output file (second argument). % This command will usually correctly handle block statements% like for and if, but there may be some squirrel cases that escape.GELifid = fopen(GELinfile,'rt');GELallcmds = setstr(fread(GELifid))';fclose(GELifid);GELofid = fopen(GELoutfile,'wt');GELversion = version;GELvnum = str2num(GELversion(1:3));if GELvnum < 5.3 error('gmevallog not implemented for Matlab version < 5.3');endwhile 1 [GELcmd, GELrest] = strtok(GELallcmds, setstr(10)); GELorigcmd = GELcmd; fprintf(GELofid, '%s\n', gm_evalclock); if length(GELcmd) > 0 if GELcmd(end) == 13 GELcmd = GELcmd(1:end - 1); end end GELexec = 0; while ~GELexec GELtryit = 1; if length(GELcmd) >= 3 if all(GELcmd(end - 2 : end) == '...') if length(GELrest) < 2 disp('errcall 1') GELerr1(GELcmd, 'Continuation mark ''...'' at end of file') end [GELf,GELrest2] = strtok(GELrest, setstr(10)); if length(GELf) > 0 if GELf(end) == 13 GELf = GELf(1:end - 1); end end GELcmd = [GELcmd(1:end - 3), ' ', GELf]; GELorigcmd = [GELorigcmd, setstr(10), GELf]; GELrest = GELrest2; GELtryit = 0; end end if GELtryit try if length(GELcmd) > 0 GELrval = evalc(GELcmd); else GELrval = ''; end GELexec = 1; catch GELlasterr = lasterr; if length(findstr(GELlasterr, 'End of file reached inside')) > 0 if length(GELrest) < 2 disp('errcall 2') GELerr1(GELcmd, GELlasterr) end [GELf,GELrest2] = strtok(GELrest, setstr(10)); if length(GELf) > 0 if GELf(end) == 13 GELf = GELf(1:end - 1); end end GELcmd = [GELcmd, ', ', GELf]; GELorigcmd = [GELorigcmd, setstr(10), GELf]; GELrest = GELrest2; elseif length(findstr(GELlasterr, 'Unterminated bracketed')) > 0 if length(GELrest) < 2 disp('errcall 3') GELerr1(GELcmd, GELlasterr) end [GELf, GELrest2] = strtok(GELrest, setstr(10)); if length(GELf) > 0 if GELf(end) == 13 GELf = GELf(1:end - 1); end end GELcmd = [GELcmd, '; ', GELf]; GELorigcmd = [GELorigcmd, setstr(10), GELf]; GELrest = GELrest2; else disp('errcall 4') GELcmd GELlasterr GELerr1(GELcmd, GELlasterr) end end end end fprintf(GELofid, '-- >> %s\n', GELorigcmd); fprintf(GELofid, '%s\n', GELrval); if length(GELrest) > 0 GELallcmds = GELrest; else break endendfclose(GELofid);function GELerr1(cmd, errmsg)disp(sprintf('during execution of command: %s', cmd))disp(sprintf('encountered error: %s',errmsg))error('error encountered during gmevallog')% ------------------------------------------------------------------% Copyright (c) 1999 by Cornell University. All rights reserved.% See the accompanying file 'Copyright' for authorship information,% the terms of the license governing this software, and disclaimers% concerning this software.% ------------------------------------------------------------------% This file is part of the QMG software. % Version 2.0 of QMG, release date September 3, 1999% ------------------------------------------------------------------