[Pkg-octave-commit] [SCM] Debian packaging for octave-miscellaneous branch, master, updated. df82b9236277a2fff70371e2b1b1ea0cd7411232
Sébastien Villemot
sebastien.villemot at ens.fr
Fri Mar 9 12:07:58 UTC 2012
The following commit has been merged in the master branch:
commit df82b9236277a2fff70371e2b1b1ea0cd7411232
Author: Sébastien Villemot <sebastien.villemot at ens.fr>
Date: Fri Mar 9 13:05:52 2012 +0100
debian/patches/waitbar-rename.patch: new patch
diff --git a/debian/patches/series b/debian/patches/series
index 7e8ea01..6d53cf4 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1,3 @@
special_matrix_lauchli
match-cell-array.patch
+waitbar-rename.patch
diff --git a/debian/patches/waitbar-rename.patch b/debian/patches/waitbar-rename.patch
new file mode 100644
index 0000000..ac94260
--- /dev/null
+++ b/debian/patches/waitbar-rename.patch
@@ -0,0 +1,562 @@
+Description: renamed waitbar to text_waitbar to not shadow core function
+Author: Carnë Draug <carandraug+dev at gmail.com>
+Origin: commit: 9647
+Last-Update: 2012-03-09
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- a/src/waitbar.cc
++++ /dev/null
+@@ -1,265 +0,0 @@
+-/**************************************************************************
+- * Waitbar function -- displays progress of lengthy calculations
+- * -------------------------------------------------------------
+- * Copyright (c) 2002 Quentin Spencer <qspencer at ieee.org>
+- *
+- * 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, see <http://www.gnu.org/licenses/>.
+- *
+- *************************************************************************/
+-
+-#include <octave/oct.h>
+-
+-// Note the extern "C" is need for mingw with a version of termcap.h
+-// without the extern "C" explicitly included. Doing it twice should be
+-// harmless.
+-extern "C" {
+-#if defined (HAVE_TERM_H)
+-# include <term.h>
+-#elif defined (HAVE_TERMCAP_H)
+-# include <termcap.h>
+-#endif
+-};
+-
+-#define BUF_SIZE 256
+-#define MAX_LEN 240
+-#define DEFAULT_LEN 50
+-#define BAR_CHAR '#'
+-#define SPACING 3
+-
+-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,TITLE), where 0 <= X <= 1, sets the position of\n\
+- the waitbar to the fractional length X. Values of X exactly\n\
+- equal to 0 or 1 clear the waitbar. The optional second\n\
+- argument TITLE sets the waitbar caption to TITLE.\n\n\
+- If Octave is running in a smart terminal, the width is\n\
+- automatically detected, and the title is displayed in the\n\
+- waitbar (and truncated if it is too long). Otherwise, the\n\
+- title is not displayed and the width 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 defined(USE_TERM)
+- static char term_buffer[1024];
+- static char *begin_rv, *end_rv;
+- static int brvlen, ervlen, pct_pos;
+- static bool smart_term;
+- static bool newtitle = false;
+- static charMatrix title;
+- int j;
+-#endif
+- static char *term;
+- static bool init;
+-
+- double pct;
+- int i;
+-
+- octave_value_list retval;
+- retval(0) = Matrix(0,0);
+- int nargin = args.length();
+- if (nargin < 1) {
+- print_usage ();
+- return retval;
+- }
+-
+- if(no_terminal)
+- return retval;
+-
+- pct = args(0).double_value();
+- if(pct>1.0) pct = 1.0; // to prevent overflow
+-
+-#if defined(USE_TERM)
+- if(nargin==2 && args(1).is_string())
+- {
+- newtitle = true;
+- title = args(1).string_value();
+- }
+- if(nargin==3)
+- {
+- newtitle = true;
+- title = args(2).string_value();
+- }
+-#endif
+-
+- if(pct==0.0 || pct==1.0)
+- {
+- init = true;
+- term = getenv("TERM");
+- if(!term)
+- {
+- no_terminal = true;
+- return retval;
+- }
+-#if defined (USE_TERM)
+- i = tgetnum("co");
+- smart_term = i ? true : false;
+- if(nargin==1 || args(1).is_string())
+- length = smart_term ? i-1 : DEFAULT_LEN;
+-#else
+- if(nargin==1)
+- length = DEFAULT_LEN;
+-#endif
+- else
+- if(nargin==2 && !(args(1).is_string()))
+- {
+- length = args(1).int_value();
+- if(length>MAX_LEN) length = MAX_LEN;
+- if(length<=0) length = DEFAULT_LEN;
+- }
+-#if defined (USE_TERM)
+- pct_pos = length/2-2;
+- 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);
+-
+- // Display a progress bar, but only if the current terminal has a
+- // standout mode
+- if (begin_rv && end_rv)
+- {
+- 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];
+- fputs(print_buf,stdout);
+- if(title.length())
+- newtitle = true;
+- }
+- else
+- {
+-#endif
+- for(i=0; i<BUF_SIZE; ++i)
+- print_buf[i] = ' ';
+- print_buf[length+8] = '\r';
+- print_buf[length+9] = '\0';
+- fputs(print_buf,stdout);
+- print_buf[0] = '[';
+- print_buf[length+1] = ']';
+-#if defined (USE_TERM)
+- }
+-#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(octave_value(0.0),0);
+- fputs(print_buf,stdout);
+- fflush(stdout);
+- }
+-
+- // check to see of output needs to be updated
+-#if !defined (USE_TERM)
+- if(n_chars!=n_chars_old || pct_int!=pct_int_old)
+- {
+-#else
+- if(n_chars!=n_chars_old || pct_int!=pct_int_old || newtitle)
+- {
+- if(smart_term)
+- {
+- static char pct_str[5];
+- sprintf(pct_str,"%3i%%",pct_int);
+-
+- // Insert the title
+- if(newtitle)
+- {
+- pct_pos = length-SPACING*2;
+- for(i=SPACING+brvlen; i<pct_pos+brvlen-SPACING; ++i)
+- print_buf[ i>=n_chars_old+brvlen ? i+ervlen : i ] = ' ';
+- for(i=SPACING+brvlen, j=0; j<title.length(); ++i, ++j)
+- if(i<pct_pos+brvlen-SPACING)
+- print_buf[ i>=n_chars_old ? i+ervlen : i ] = title(0,j);
+- newtitle = false;
+- }
+-
+- // Insert the percentage string
+- for(i=pct_pos+brvlen, j=0; j<4; ++i, ++j)
+- print_buf[ i>=n_chars_old+brvlen ? i+ervlen : i ] = pct_str[j];
+-
+- // Move print_buf characters
+- if(n_chars_old<n_chars)
+- for(i=n_chars_old+brvlen; i<n_chars+brvlen; ++i)
+- print_buf[i] = print_buf[i+ervlen];
+- else
+- for(i=n_chars_old+brvlen-1; i>=n_chars+brvlen; --i)
+- print_buf[i+ervlen] = print_buf[i];
+-
+- // Insert end of reverse video
+- for(i=n_chars+brvlen, j=0; j<ervlen; ++i, ++j)
+- print_buf[i] = end_rv[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 defined (USE_TERM)
+- }
+-#endif
+- fputs(print_buf,stdout);
+- fflush(stdout);
+- n_chars_old = n_chars;
+- pct_int_old = pct_int;
+- }
+- }
+- return retval;
+-}
+--- /dev/null
++++ b/src/text_waitbar.cc
+@@ -0,0 +1,265 @@
++/**************************************************************************
++ * Waitbar function -- displays progress of lengthy calculations
++ * -------------------------------------------------------------
++ * Copyright (c) 2002 Quentin Spencer <qspencer at ieee.org>
++ *
++ * 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, see <http://www.gnu.org/licenses/>.
++ *
++ *************************************************************************/
++
++#include <octave/oct.h>
++
++// Note the extern "C" is need for mingw with a version of termcap.h
++// without the extern "C" explicitly included. Doing it twice should be
++// harmless.
++extern "C" {
++#if defined (HAVE_TERM_H)
++# include <term.h>
++#elif defined (HAVE_TERMCAP_H)
++# include <termcap.h>
++#endif
++};
++
++#define BUF_SIZE 256
++#define MAX_LEN 240
++#define DEFAULT_LEN 50
++#define BAR_CHAR '#'
++#define SPACING 3
++
++static bool no_terminal=false;
++
++DEFUN_DLD(text_waitbar, args, nargout,
++"text_waitbar(...);\n\
++ TEXT_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 TEXT_WAITBAR in a lengthy computation\n\
++ (inside a FOR loop, for example) is as follows:\n\n\
++ for i=1:1000\n\
++ ## computation\n\
++ text_waitbar(i/1000);\n\
++ end\n\n\
++ TEXT_WAITBAR(X,TITLE), where 0 <= X <= 1, sets the position of\n\
++ the waitbar to the fractional length X. Values of X exactly\n\
++ equal to 0 or 1 clear the waitbar. The optional second\n\
++ argument TITLE sets the waitbar caption to TITLE.\n\n\
++ If Octave is running in a smart terminal, the width is\n\
++ automatically detected, and the title is displayed in the\n\
++ waitbar (and truncated if it is too long). Otherwise, the\n\
++ title is not displayed and the width is initialized to a\n\
++ default of 50 characters, or it can be set to N characters\n\
++ with TEXT_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 defined(USE_TERM)
++ static char term_buffer[1024];
++ static char *begin_rv, *end_rv;
++ static int brvlen, ervlen, pct_pos;
++ static bool smart_term;
++ static bool newtitle = false;
++ static charMatrix title;
++ int j;
++#endif
++ static char *term;
++ static bool init;
++
++ double pct;
++ int i;
++
++ octave_value_list retval;
++ retval(0) = Matrix(0,0);
++ int nargin = args.length();
++ if (nargin < 1) {
++ print_usage ();
++ return retval;
++ }
++
++ if(no_terminal)
++ return retval;
++
++ pct = args(0).double_value();
++ if(pct>1.0) pct = 1.0; // to prevent overflow
++
++#if defined(USE_TERM)
++ if(nargin==2 && args(1).is_string())
++ {
++ newtitle = true;
++ title = args(1).string_value();
++ }
++ if(nargin==3)
++ {
++ newtitle = true;
++ title = args(2).string_value();
++ }
++#endif
++
++ if(pct==0.0 || pct==1.0)
++ {
++ init = true;
++ term = getenv("TERM");
++ if(!term)
++ {
++ no_terminal = true;
++ return retval;
++ }
++#if defined (USE_TERM)
++ i = tgetnum("co");
++ smart_term = i ? true : false;
++ if(nargin==1 || args(1).is_string())
++ length = smart_term ? i-1 : DEFAULT_LEN;
++#else
++ if(nargin==1)
++ length = DEFAULT_LEN;
++#endif
++ else
++ if(nargin==2 && !(args(1).is_string()))
++ {
++ length = args(1).int_value();
++ if(length>MAX_LEN) length = MAX_LEN;
++ if(length<=0) length = DEFAULT_LEN;
++ }
++#if defined (USE_TERM)
++ pct_pos = length/2-2;
++ 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);
++
++ // Display a progress bar, but only if the current terminal has a
++ // standout mode
++ if (begin_rv && end_rv)
++ {
++ 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];
++ fputs(print_buf,stdout);
++ if(title.length())
++ newtitle = true;
++ }
++ else
++ {
++#endif
++ for(i=0; i<BUF_SIZE; ++i)
++ print_buf[i] = ' ';
++ print_buf[length+8] = '\r';
++ print_buf[length+9] = '\0';
++ fputs(print_buf,stdout);
++ print_buf[0] = '[';
++ print_buf[length+1] = ']';
++#if defined (USE_TERM)
++ }
++#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)
++ {
++ Ftext_waitbar(octave_value(0.0),0);
++ fputs(print_buf,stdout);
++ fflush(stdout);
++ }
++
++ // check to see of output needs to be updated
++#if !defined (USE_TERM)
++ if(n_chars!=n_chars_old || pct_int!=pct_int_old)
++ {
++#else
++ if(n_chars!=n_chars_old || pct_int!=pct_int_old || newtitle)
++ {
++ if(smart_term)
++ {
++ static char pct_str[5];
++ sprintf(pct_str,"%3i%%",pct_int);
++
++ // Insert the title
++ if(newtitle)
++ {
++ pct_pos = length-SPACING*2;
++ for(i=SPACING+brvlen; i<pct_pos+brvlen-SPACING; ++i)
++ print_buf[ i>=n_chars_old+brvlen ? i+ervlen : i ] = ' ';
++ for(i=SPACING+brvlen, j=0; j<title.length(); ++i, ++j)
++ if(i<pct_pos+brvlen-SPACING)
++ print_buf[ i>=n_chars_old ? i+ervlen : i ] = title(0,j);
++ newtitle = false;
++ }
++
++ // Insert the percentage string
++ for(i=pct_pos+brvlen, j=0; j<4; ++i, ++j)
++ print_buf[ i>=n_chars_old+brvlen ? i+ervlen : i ] = pct_str[j];
++
++ // Move print_buf characters
++ if(n_chars_old<n_chars)
++ for(i=n_chars_old+brvlen; i<n_chars+brvlen; ++i)
++ print_buf[i] = print_buf[i+ervlen];
++ else
++ for(i=n_chars_old+brvlen-1; i>=n_chars+brvlen; --i)
++ print_buf[i+ervlen] = print_buf[i];
++
++ // Insert end of reverse video
++ for(i=n_chars+brvlen, j=0; j<ervlen; ++i, ++j)
++ print_buf[i] = end_rv[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 defined (USE_TERM)
++ }
++#endif
++ fputs(print_buf,stdout);
++ fflush(stdout);
++ n_chars_old = n_chars;
++ pct_int_old = pct_int;
++ }
++ }
++ return retval;
++}
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -4,14 +4,14 @@
+ TERM_LIB=-ltermcap
+ endif
+
+-TARGETS=waitbar.oct $(LISTEN) xmlread.oct \
++TARGETS=text_waitbar.oct $(LISTEN) xmlread.oct \
+ csvexplode.oct csv2cell.oct csvconcat.oct cell2csv.oct \
+ cell2cell.oct partarray.oct
+
+ all: $(TARGETS)
+
+-waitbar.oct: waitbar.cc
+- $(MKOCTFILE) $(MISCDEFS) waitbar.cc $(TERM_LIB)
++text_waitbar.oct: text_waitbar.cc
++ $(MKOCTFILE) $(MISCDEFS) text_waitbar.cc $(TERM_LIB)
+
+ server.oct: server.o listencanfork.o stringmatch.o
+ $(MKOCTFILE) server.o listencanfork.o stringmatch.o
--
Debian packaging for octave-miscellaneous
More information about the Pkg-octave-commit
mailing list