summaryrefslogtreecommitdiff
path: root/jack_term.py
diff options
context:
space:
mode:
authorMartin Michlmayr <tbm@cyrius.com>2006-02-05 20:24:07 +0100
committerMartin Michlmayr <tbm@cyrius.com>2006-02-05 20:24:07 +0100
commit97d87e1fa0808cf747bf0a4fe3b39d1cbdb5efc8 (patch)
treec817c2371ea765b6fd6f9e47f4985209dd1937dd /jack_term.py
Import jack_3.1.1+cvs20050801.orig.tar.gz
[dgit import orig jack_3.1.1+cvs20050801.orig.tar.gz]
Diffstat (limited to 'jack_term.py')
-rwxr-xr-xjack_term.py198
1 files changed, 198 insertions, 0 deletions
diff --git a/jack_term.py b/jack_term.py
new file mode 100755
index 0000000..f180499
--- /dev/null
+++ b/jack_term.py
@@ -0,0 +1,198 @@
+### jack_term: terminal specific stuff for
+### jack - extract audio from a CD and encode it using 3rd party software
+### Copyright (C) 1999-2002 Arne Zellentin <zarne@users.sf.net>
+
+### This program is free software; you can redistribute it and/or modify
+### it under the terms of the GNU General Public License as published by
+### the Free Software Foundation; either version 2 of the License, or
+### (at your option) any later version.
+
+### This program 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 General Public License for more details.
+
+### You should have received a copy of the GNU General Public License
+### along with this program; if not, write to the Free Software
+### Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# terminal is one of dumb, curses
+
+import array
+import traceback
+import fcntl
+import sys
+
+import jack_ripstuff
+import jack_freedb
+
+from jack_globals import *
+
+# exported functions:
+#init
+#enable
+#disable
+
+# expected functions in tmod:
+#update
+#getkey
+#sig_winch_handler
+
+# exported variables:
+enabled = None
+initialized = None
+size_x, size_y = None, None
+orig_size_x, orig_size_y = None, None
+term_type = None
+sig_winch_cache = None
+
+# variables
+xtermset = None
+can_getsize = None
+geom_changed = None
+
+
+def init(arg_type="auto", arg_xtermset = 0):
+ global initialized
+ global geom_changed
+ global tmod
+ global xtermset
+ global term_type
+ global size_x, size_y
+ global orig_size_x, orig_size_y
+ size_x, size_y = None, None
+
+ if initialized:
+ return
+
+ # import the terminal specific module
+ if arg_type == "auto":
+ try:
+ import jack_t_curses as tmod
+ term_type = "curses"
+ except:
+ import jack_t_dumb as tmod
+ term_type = "dump"
+ elif arg_type == "dumb":
+ import jack_t_dumb as tmod
+ term_type = "dump"
+ elif arg_type == "curses":
+ import jack_t_curses as tmod
+ term_type = "curses"
+
+ if not tmod:
+ error("invalid terminal type `%s'" % term_type)
+
+ xtermset = arg_xtermset
+
+ initialized = 1
+ geom_changed = 0
+ size_x, size_y = 80, 24 # fallback value
+
+ oldsize = getsize()
+ if oldsize != (None, None):
+ orig_size_x, orig_size_y = oldsize
+ size_x, size_y = oldsize
+ del oldsize
+
+def xtermset_enable():
+ global xtermset
+ global geom_changed
+ if xtermset:
+ import os
+ want_x = 80 - len("track_00") + jack_ripstuff.max_name_len
+ want_y = len(jack_ripstuff.all_tracks_todo_sorted) + 3
+ if term_type == "curses":
+ want_y = want_y - 1
+ if jack_freedb.names_available:
+ want_y = want_y + 1
+ want_y = max(want_y, 7)
+ if (size_x, size_y) != (want_x, want_y):
+ try:
+ os.system("xtermset -geom %dx%d" % (want_x, want_y))
+ geom_changed = 1
+ resize()
+ except:
+ warning("failed to call xtermset, is it really installed?")
+ xtermset = 0
+ del want_x, want_y
+
+def xtermset_disable():
+ import os
+ global geom_changed
+ if xtermset and geom_changed:
+ try:
+ os.system("xtermset -restore -geom %dx%d" % (orig_size_x, orig_size_y))
+ geom_changed = 0
+ except:
+ pass
+
+def getsize():
+ global can_getsize
+ if can_getsize == 0:
+ return None, None
+
+ if can_getsize == None:
+ try:
+ from IOCTLS import TIOCGWINSZ
+ except ImportError:
+ try:
+ from termios import TIOCGWINSZ
+ except ImportError:
+ # TIOCGWINSZ = 0x5413 # linux, ix86. Anyone else?
+ can_getsize = 0
+ warning("""could not find a module which exports
+TIOCGWINSZ. This means I can't determine your terminal's geometry, so please
+don't resize it. Use Tools/scripts/h2py.py from the Python source distribution
+to convert /usr/include/asm/ioctls.h to IOCTLS.py and install it.""")
+ return None, None
+ try:
+ # to get the size, we will have to do an ioctl which will return a
+ # struct winsize {
+ # unsigned short ws_row;
+ # unsigned short ws_col;
+ # unsigned short ws_xpixel;
+ # unsigned short ws_ypixel;
+ # };
+ # (according to _I386_TERMIOS_H, /usr/include/asm/termios.h)
+
+ winsize = array.array("H")
+ data = " " * (winsize.itemsize * 4)
+ data = fcntl.ioctl(sys.stdout.fileno(), TIOCGWINSZ, data)
+ # unpack the data, I hope this is portable:
+ winsize.fromstring(data)
+ new_y, new_x, xpixel, ypixel = winsize.tolist()
+ except:
+ can_getsize = 0
+ return None, None
+ return new_x, new_y
+
+def resize():
+ global size_x, size_y
+ x, y = getsize()
+ if (x, y) != (None, None):
+ size_x, size_y = x, y
+
+def enable():
+ global enabled
+
+ if not initialized:
+ return
+
+ if enabled:
+ return
+
+ xtermset_enable()
+ tmod.enable()
+ enabled = 1
+
+def disable():
+ global enabled
+ import os
+
+ if not enabled or not initialized:
+ return
+
+ tmod.disable()
+ xtermset_disable()
+ enabled = 0