From: Paul K. <pki...@ja...> - 2002-11-13 14:41:18
|
I twiddled the build files for waitbar a little so that it will at least compile on cygwin. Unfortunately octave core dumps when I try to run it. Please try my changes on your configuration. As Etienne says, do ./autogen.sh; ./configure; from the octave-forge directory before doing make. - Paul On Tue, Nov 12, 2002 at 03:51:03PM +0000, Etienne Grossmann wrote: > > Hello, > > just to say that I commited Quentin Spencer's waitbar.cc on > octave-forge, in main/miscellaneous. > > I also added > > main/miscellaneous/(Makeconf.add|configure.add|Makefile) > > so that the header file term.h be searched for when ./configure is > run. I inspired myself from the files in main/image/ for this purpose. > > Could people check that all is ok? (don't forget to do ./autogen.sh > so that ./configure be generated). > > ./autogen.sh # Generate ./configure > ./configure # Should give a message about term.h > make # Should build waitbar.cc > > and then check that, in octave, > > N=50; for i=0:N ; waitbar (i/N); sleep(2/N); end > > produces a progressing waitbar? > > Cheers, > > Etienne > > > On Tue, Nov 12, 2002 at 12:59:16AM +0100, Quentin Spencer wrote: > # Hello, > # > # Here's my fix to the waitbar function. If you can figure out the > # configure stuff, go ahead and put it into octave-forge. The problem was > # some escape characters that weren't being cleared and it seems xterm > # reacts to this differently than the KDE and GNOME terminals. > # > # cheers, > # Quentin > # > # > # > # Etienne Grossmann wrote: > # > # > Hello, > # > > # >nice function! Nice in a gnome-terminal, at least. In a xterm, when > # >the value spans [0,1], the displayed %NN starts in the middle and > # >*moves left* until it reaches the edge. Then, the %NN disappears and > # >the white bar progresses until it reaches the middle of the line. > # > > # > Will try to fix and see about $OF/configure.base and Makeconf.base. > # > > # > Cheers, > # > > # > Etienne > # > > # > # > > # /************************************************************************** > # * Waitbar function -- displays progress of lengthy calculations > # * ------------------------------------------------------------- > # * Copyright (c) 2002 Quentin Spencer (qsp...@ie...) > # * > # * This library is free software; you can redistribute it and/or > # * modify it under the terms of the GNU Library General Public > # * License as published by the Free Software Foundation; either > # * version 2 of the License, or (at your option) any later version. > # * > # * This library is distributed in the hope that it will be useful, > # * but WITHOUT ANY WARRANTY; without even the implied warranty of > # * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > # * Library General Public License for more details. > # * > # * You should have received a copy of the GNU Library General Public > # * License along with this library; if not, write to the Free > # * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA > # * 02111-1307 USA > # * > # * > # *************************************************************************/ > # > # #include "octave/oct.h" > # #define HAVE_TERM_H 1 > # #if HAVE_TERM_H > # #include "term.h" > # #endif > # > # #define BUF_SIZE 256 > # #define MAX_LEN 240 > # #define DEFAULT_LEN 50 > # #define BAR_CHAR '#' > # > # static bool no_terminal=false; > # > # DEFUN_DLD(waitbar, args, nargout, > # "waitbar(...);\n\ > # WAITBAR displays a text-based wait bar. This function\n\ > # is similar to the Matlab waitbar command, but it is\n\ > # a text, rather than graphical function.\n\n\ > # A typical usage of WAITBAR in a lengthy computation\n\ > # (inside a FOR loop, for example) is as follows:\n\n\ > # for i=1:1000\n\ > # ## computation\n\ > # waitbar(i/1000);\n\ > # end\n\n\ > # WAITBAR(X), where 0 <= X <= 1, sets the position of the\n\ > # waitbar to the fractional length X. Values of X exactly equal\n\ > # to 0 or 1 clear the waitbar.\n\n\ > # If Octave is running in a smart terminal, the width is\n\ > # automatically detected. Otherwise, it is initialized to a\n\ > # default of 50 characters, or it can be set to N characters\n\ > # with WAITBAR(0,N). If no terminal is detected (such as when\n\ > # Octave is run in batch mode and output is redirected), no\n\ > # output is generated.\n\n\ > # For compatibility with the Matlab version of this function\n\ > # (which is graphical rather than text-based), additional\n\ > # arguments are ignored, but there are no guarantees of perfect\n\ > # compatibility.") > # { > # static char print_buf[BUF_SIZE]; > # static int n_chars_old; > # static int pct_int_old; > # static int length; > # #if HAVE_TERM_H > # static char term_buffer[1024]; > # static char *begin_rv, *end_rv; > # static int brvlen, ervlen; > # static bool smart_term; > # int j; > # #endif > # static char *term; > # static bool init; > # > # Matrix arg; > # float pct; > # int i; > # > # octave_value_list retval; > # int nargin = args.length(); > # if (nargin < 1) { > # print_usage("waitbar"); > # return retval; > # } > # > # if(no_terminal) > # return retval; > # > # arg = args(0).matrix_value(); > # pct = arg(0,0); > # if(pct>1.0) pct = 1.0; // to prevent overflow > # > # if(pct==0.0 || pct==1.0) > # { > # init = true; > # term = getenv("TERM"); > # if(!term) > # { > # no_terminal = true; > # return retval; > # } > # #if HAVE_TERM_H > # i = tgetnum("co"); > # smart_term = i ? true : false; > # #endif > # if(nargin==1) > # #if HAVE_TERM_H > # length = smart_term ? i-1 : DEFAULT_LEN; > # #else > # length = DEFAULT_LEN; > # #endif > # else > # { > # length = args(1).int_value(); > # if(length>MAX_LEN) length = MAX_LEN; > # if(length<=0) length = DEFAULT_LEN; > # } > # #if HAVE_TERM_H > # if(smart_term) > # { > # // get terminal strings ("rv"="reverse video") > # char* buf_ptr = term_buffer; > # begin_rv = tgetstr("so", &buf_ptr); > # end_rv = tgetstr("se", &buf_ptr); > # brvlen = 0; buf_ptr = begin_rv; > # while(buf_ptr[++brvlen]); > # ervlen = 0; buf_ptr = end_rv; > # while(buf_ptr[++ervlen]); > # > # // initialize print buffer > # for(i=0; i<BUF_SIZE; ++i) > # print_buf[i] = ' '; > # print_buf[length+brvlen+ervlen+1] = '\r'; > # print_buf[length+brvlen+ervlen+2] = '\0'; > # for(i=0; i<brvlen; ++i) > # print_buf[i] = begin_rv[i]; > # for(i=0; i<ervlen; ++i) > # print_buf[i+brvlen] = end_rv[i]; > # printf(print_buf); > # } > # else > # { > # #endif > # for(i=0; i<BUF_SIZE; ++i) > # print_buf[i] = ' '; > # print_buf[length+8] = '\r'; > # print_buf[length+9] = '\0'; > # printf(print_buf); > # print_buf[0] = '['; > # print_buf[length+1] = ']'; > # #if HAVE_TERM_H > # } > # #endif > # n_chars_old = 0; > # fflush(stdout); > # return retval; > # } > # else > # { > # // calculate position > # int n_chars=(int)(pct*length+0.5); > # int pct_int=(int)(pct*100.0+0.5); > # > # // check to see if we got this far without initialization > # if(init==false) > # { > # Fwaitbar(0.0,0); > # printf(print_buf); > # fflush(stdout); > # } > # > # // check to see of output needs to be updated > # if(n_chars!=n_chars_old || pct_int!=pct_int_old) > # { > # #if HAVE_TERM_H > # if(smart_term) > # { > # static char pct_str[6]; > # int half = length/2-1; > # sprintf(pct_str,"%3i%%%%",pct_int); > # > # // Clear old percentage string > # for(i=half, j=0; j<5; ++i, ++j) > # if(i>=n_chars_old) > # print_buf[i+brvlen+ervlen] = ' '; > # else > # print_buf[i+brvlen] = ' '; > # > # // Clear old and insert new end of reverse video > # for(i=n_chars_old+brvlen; i<n_chars_old+brvlen+ervlen; ++i) > # print_buf[i] = ' '; > # for(i=n_chars+brvlen, j=0; j<ervlen; ++i, ++j) > # print_buf[i] = end_rv[j]; > # > # // Insert the percentage string > # for(i=half, j=0; j<5; ++i, ++j) > # if(i>=n_chars) > # print_buf[i+brvlen+ervlen] = pct_str[j]; > # else > # print_buf[i+brvlen] = pct_str[j]; > # } > # else > # { > # #endif > # if(n_chars>=n_chars_old) > # for(int i=n_chars_old+1; i<=n_chars; ++i) > # print_buf[i] = BAR_CHAR; > # else > # for(int i=n_chars+1; i<=n_chars_old; ++i) > # print_buf[i] = ' '; > # sprintf(&(print_buf[length+3])," %3i%%\r",pct_int); > # #if HAVE_TERM_H > # } > # #endif > # printf(print_buf); > # fflush(stdout); > # n_chars_old = n_chars; > # pct_int_old = pct_int; > # } > # } > # return retval; > # } > > > -- > Etienne Grossmann ------ http://www.isr.ist.utl.pt/~etienne > > > ------------------------------------------------------- > This sf.net email is sponsored by: > To learn the basics of securing your web site with SSL, > click here to get a FREE TRIAL of a Thawte Server Certificate: > http://www.gothawte.com/rd522.html > _______________________________________________ > Octave-dev mailing list > Oct...@li... > https://lists.sourceforge.net/lists/listinfo/octave-dev |