From c0804c23fa22ffd46b076b43526ddff89f8b38db Mon Sep 17 00:00:00 2001
From: "Silas S. Brown" <ssb22@cam.ac.uk>
Date: Sat, 31 Oct 2009 22:03:43 +0000
Subject: [PATCH] Gradint update

git-svn-id: http://svn.code.sf.net/p/e-guidedog/code/ssb22/gradint@429 29193198-4895-4776-b068-10539e920549
---
 gradint-build/Makefile          |   9 +++-
 gradint-build/S60.zip           | Bin 0 -> 16699 bytes
 gradint-build/src/booktime.py   |   2 +-
 gradint-build/src/defaults.py   |   2 +-
 gradint-build/src/filescan.py   |   2 +-
 gradint-build/src/frontend.py   |   2 +-
 gradint-build/src/lessonplan.py |   2 +-
 gradint-build/src/loop.py       |   2 +-
 gradint-build/src/makeevent.py  |   2 +-
 gradint-build/src/play.py       |   2 +-
 gradint-build/src/recording.py  |   2 +-
 gradint-build/src/sequence.py   |   2 +-
 gradint-build/src/synth.py      |   4 +-
 gradint-build/src/system.py     |   8 ++--
 gradint-build/src/top.py        |   2 +-
 gradint-build/thindown.py       |  79 ++++++++++++++++++++++++++++++++
 16 files changed, 105 insertions(+), 17 deletions(-)
 create mode 100644 gradint-build/S60.zip
 create mode 100644 gradint-build/thindown.py

diff --git a/gradint-build/Makefile b/gradint-build/Makefile
index 9c2344c..1dde394 100644
--- a/gradint-build/Makefile
+++ b/gradint-build/Makefile
@@ -12,7 +12,7 @@ Extra_Data=partials *_disabled [^g]*.exe
 # Unix_To_Dos=unix2dos -k -o -q # (keep date, run quietly)
 Unix_To_Dos=unix2dos # (-k -o -q are not recognised on all systems)
 
-All_Versions=gradint.exe gradint.tbz gradint.bgz gradint.zip gradint-build.bgz gradintcab.zip
+All_Versions=gradint.exe gradint.tbz gradint.bgz gradint.zip gradint-build.bgz gradintcab.zip gradint-S60.zip
 # dropping gradint-noGUI.exe and GUI.exe for now - probably don't need that separation anymore
 
 SHELL=/bin/bash
@@ -105,6 +105,13 @@ gradint.cab: $(Common_Files) gradint.py
 	test -e gradint.cab # pocketpc-cab can fail silently if we add too many files, so check the output exists
 	rm -rf PocketPC0
 
+gradint-S60.zip: $(Common_Files) gradint.py
+	cp S60.zip gradint-S60.zip
+	zip -9r gradint-S60.zip $(Common_Files)
+	mkdir gradint
+	cd gradint && python ../thindown.py s60 < ../gradint.py > gradint.py && zip -9r ../gradint-S60.zip gradint.py && cd ..
+	rm -rf gradint
+
 gradintcab.zip: gradint.cab
 	zip -9 gradintcab.zip gradint.cab
 	rm gradint.cab
diff --git a/gradint-build/S60.zip b/gradint-build/S60.zip
new file mode 100644
index 0000000000000000000000000000000000000000..281a6ae519bb2e3e9e185a5f43cac688d1b1f242
GIT binary patch
literal 16699
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
R01$uemw$Z}F8+U9{U3LQ!NdRn

literal 0
HcmV?d00001

diff --git a/gradint-build/src/booktime.py b/gradint-build/src/booktime.py
index 14cf4c8..376715f 100644
--- a/gradint-build/src/booktime.py
+++ b/gradint-build/src/booktime.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-program_name = "gradint v0.99271 (c) 2002-2009 Silas S. Brown. GPL v3+."
+program_name = "gradint v0.99272 (c) 2002-2009 Silas S. Brown. GPL v3+."
 #    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 3 of the License, or
diff --git a/gradint-build/src/defaults.py b/gradint-build/src/defaults.py
index ac8c243..b9debeb 100644
--- a/gradint-build/src/defaults.py
+++ b/gradint-build/src/defaults.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-program_name = "gradint v0.99271 (c) 2002-2009 Silas S. Brown. GPL v3+."
+program_name = "gradint v0.99272 (c) 2002-2009 Silas S. Brown. GPL v3+."
 #    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 3 of the License, or
diff --git a/gradint-build/src/filescan.py b/gradint-build/src/filescan.py
index 8417b0b..402b8ca 100644
--- a/gradint-build/src/filescan.py
+++ b/gradint-build/src/filescan.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-program_name = "gradint v0.99271 (c) 2002-2009 Silas S. Brown. GPL v3+."
+program_name = "gradint v0.99272 (c) 2002-2009 Silas S. Brown. GPL v3+."
 #    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 3 of the License, or
diff --git a/gradint-build/src/frontend.py b/gradint-build/src/frontend.py
index abd9c9b..f274f34 100644
--- a/gradint-build/src/frontend.py
+++ b/gradint-build/src/frontend.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-program_name = "gradint v0.99271 (c) 2002-2009 Silas S. Brown. GPL v3+."
+program_name = "gradint v0.99272 (c) 2002-2009 Silas S. Brown. GPL v3+."
 #    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 3 of the License, or
diff --git a/gradint-build/src/lessonplan.py b/gradint-build/src/lessonplan.py
index bb57578..744778e 100644
--- a/gradint-build/src/lessonplan.py
+++ b/gradint-build/src/lessonplan.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-program_name = "gradint v0.99271 (c) 2002-2009 Silas S. Brown. GPL v3+."
+program_name = "gradint v0.99272 (c) 2002-2009 Silas S. Brown. GPL v3+."
 #    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 3 of the License, or
diff --git a/gradint-build/src/loop.py b/gradint-build/src/loop.py
index eed8d5b..6374c8d 100644
--- a/gradint-build/src/loop.py
+++ b/gradint-build/src/loop.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-program_name = "gradint v0.99271 (c) 2002-2009 Silas S. Brown. GPL v3+."
+program_name = "gradint v0.99272 (c) 2002-2009 Silas S. Brown. GPL v3+."
 #    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 3 of the License, or
diff --git a/gradint-build/src/makeevent.py b/gradint-build/src/makeevent.py
index d82b13f..0420df2 100644
--- a/gradint-build/src/makeevent.py
+++ b/gradint-build/src/makeevent.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-program_name = "gradint v0.99271 (c) 2002-2009 Silas S. Brown. GPL v3+."
+program_name = "gradint v0.99272 (c) 2002-2009 Silas S. Brown. GPL v3+."
 #    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 3 of the License, or
diff --git a/gradint-build/src/play.py b/gradint-build/src/play.py
index 335e0c5..08d0717 100644
--- a/gradint-build/src/play.py
+++ b/gradint-build/src/play.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-program_name = "gradint v0.99271 (c) 2002-2009 Silas S. Brown. GPL v3+."
+program_name = "gradint v0.99272 (c) 2002-2009 Silas S. Brown. GPL v3+."
 #    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 3 of the License, or
diff --git a/gradint-build/src/recording.py b/gradint-build/src/recording.py
index 4e66ce9..5833944 100644
--- a/gradint-build/src/recording.py
+++ b/gradint-build/src/recording.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-program_name = "gradint v0.99271 (c) 2002-2009 Silas S. Brown. GPL v3+."
+program_name = "gradint v0.99272 (c) 2002-2009 Silas S. Brown. GPL v3+."
 #    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 3 of the License, or
diff --git a/gradint-build/src/sequence.py b/gradint-build/src/sequence.py
index a19279e..a595ef3 100644
--- a/gradint-build/src/sequence.py
+++ b/gradint-build/src/sequence.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-program_name = "gradint v0.99271 (c) 2002-2009 Silas S. Brown. GPL v3+."
+program_name = "gradint v0.99272 (c) 2002-2009 Silas S. Brown. GPL v3+."
 #    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 3 of the License, or
diff --git a/gradint-build/src/synth.py b/gradint-build/src/synth.py
index 627677c..0cec923 100644
--- a/gradint-build/src/synth.py
+++ b/gradint-build/src/synth.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-program_name = "gradint v0.99271 (c) 2002-2009 Silas S. Brown. GPL v3+."
+program_name = "gradint v0.99272 (c) 2002-2009 Silas S. Brown. GPL v3+."
 #    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 3 of the License, or
@@ -320,7 +320,7 @@ class ESpeakSynth(Synth):
             try:
                 self.place = tryplace
                 langList = os.listdir(self.place+os.sep+"voices")
-            except OSError: pass
+            except OSError: self.place = None
             if langList: break
         for l in langList[:]:
             if l in ["default","!v","mb"]: langList.remove(l)
diff --git a/gradint-build/src/system.py b/gradint-build/src/system.py
index c1dca07..77516f0 100644
--- a/gradint-build/src/system.py
+++ b/gradint-build/src/system.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-program_name = "gradint v0.99271 (c) 2002-2009 Silas S. Brown. GPL v3+."
+program_name = "gradint v0.99272 (c) 2002-2009 Silas S. Brown. GPL v3+."
 #    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 3 of the License, or
@@ -61,8 +61,6 @@ if winsound:
         import ctypes.wintypes as wintypes
         class ShellExecuteInfo(ctypes.Structure): _fields_ = [("cbSize",wintypes.DWORD),("fMask",wintypes.ULONG),("hwnd",wintypes.HWND),("Verb",ctypes.c_wchar_p),("File",ctypes.c_wchar_p),("Parameters",ctypes.c_wchar_p),("Directory",ctypes.c_wchar_p),("nShow",ctypes.c_int),("hInstApp",wintypes.HINSTANCE),("IDList",ctypes.c_void_p),("Class",ctypes.c_wchar_p),("hkeyClass",wintypes.HKEY),("dwHotKey",wintypes.DWORD),("hIconOrMonitor",wintypes.HANDLE),("hProcess",wintypes.HANDLE)]
 
-import time,sched,sndhdr,random,math,pprint,codecs
-
 if macsound and __name__=="__main__": os.system("clear 1>&2") # so warnings etc start with a clear terminal (1>&2 just in case using stdout for something else)
 if riscos_sound: sys.stderr.write("Loading Gradint...\n") # in case it takes a while
 
@@ -161,6 +159,7 @@ def u8strip(d):
     else: return d
 GUI_translations_old = GUI_translations
 configFiles = map(lambda x:x+dottxt,["advanced","settings"]) # MUST have settings last so can have per-user override of scriptVariants
+if not hasattr(sys,"argv"): sys.argv=" " # some Symbian versions
 if not fileExists(configFiles[0]):
   oldDir=os.getcwd()
   if macsound and "_" in os.environ:
@@ -187,6 +186,9 @@ if not fileExists(configFiles[0]):
         except OSError: pass
 
 # directory should be OK by now
+if sys.platform.find("ymbian")>-1: sys.path.insert(0,os.getcwd()+os.sep+"lib")
+import time,sched,sndhdr,random,math,pprint,codecs
+
 def readSettings(f):
    try: exec(unicode(u8strip(open(f,"rb").read()).replace("\r","\n"),"utf-8")) in globals()
    except: show_warning("Warning: Could not load "+f)
diff --git a/gradint-build/src/top.py b/gradint-build/src/top.py
index a5b0768..9b19f16 100644
--- a/gradint-build/src/top.py
+++ b/gradint-build/src/top.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
-program_name = "gradint v0.99271 (c) 2002-2009 Silas S. Brown. GPL v3+."
+program_name = "gradint v0.99272 (c) 2002-2009 Silas S. Brown. GPL v3+."
 
 #    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
diff --git a/gradint-build/thindown.py b/gradint-build/thindown.py
new file mode 100644
index 0000000..7e77f27
--- /dev/null
+++ b/gradint-build/thindown.py
@@ -0,0 +1,79 @@
+
+# program to "thin down" the gradint .py for low memory environments
+# by taking out some of the code that's unused on that platform
+
+import sys
+
+if "s60" in sys.argv: # S60 version
+  version = "S60"
+  to_omit = [
+"if use_unicode_filenames:", # WinCE
+"if paranoid_file_management:",
+'if not extsep==".":',
+"if macsound:","elif macsound:",
+"if winsound:",
+"if unix:",
+"if winsound or mingw32:",
+"elif unix and not macsound:",
+"if gotSox and unix:",
+"class SoundCollector(object):",
+"def lame_endian_parameters():",
+"def soundfile_to_data(file,soxParams):",
+# TODO SH sound collector will have problem with indentation due to """..""" strings
+"def decode_mp3(file):",
+"class Mp3FileCache(object):",
+"if outputFile:",
+"class InputSourceManager(object):",
+"def wavToMp3(directory):",
+"def makeMp3Zips(baseDir,outDir,zipNo,direc=None):",
+"class RecorderControls:",
+"def doRecWords():",
+"if app:","elif app:",
+"def addStatus(widget,status,mouseOnly=0):",
+"def removeStatus(widget):",
+"def addButton(parent,text,command,packing=None,status=None):",
+"def addLabel(row,label):",
+"def CXVMenu(e):",
+"def selectAll(e):",
+"def selectAllButNumber(e):",
+"def addTextBox(row,wide=0):",
+"def addLabelledBox(row,wide=0):",
+"def addRow(parent,wide=0):",
+"def addRightRow(widerow):",
+"def make_output_row(parent):",
+"def select_userNumber(N,updateGUI=1):",
+"def updateUserRow(fromMainMenu=0):",
+"def renameUser(i,radioButton,parent,cancel=0):",
+"def deleteUser(i):",
+"def setupScrollbar(parent,rowNo):",
+"class ExtraButton(object):",
+"def make_extra_buttons_waiting_list():",
+"def startTk():",
+"def guiVocabList(parsedVocab):",
+"def synchronizeListbox(listbox,masterList):",
+"if useTK:",
+"def openDirectory(dir):",
+"if winCEsound:",
+"def check_for_slacking():",
+"def gui_outputTo_end():",
+"def gui_outputTo_start():",
+]
+else: assert 0, "Unrecognised version on command line"
+
+revertToIndent = -1
+lCount = -1
+for l in sys.stdin.xreadlines():
+  lCount += 1
+  if lCount==2: print "\n# NOTE: this version has been automatically TRIMMED for "+version+" (some non-"+version+" code taken out)\n"
+  l=l.rstrip()
+  assert not "\t" in l, "can't cope with tabs"
+  indentLevel=-1
+  for i in range(len(l)):
+    if not l[i]==" ":
+      indentLevel = i ; break
+  if indentLevel<0 or indentLevel==len(l) or (revertToIndent>=0 and indentLevel>revertToIndent): continue
+  revertToIndent = -1
+  if (l+"#")[:l.find("#")].strip() in to_omit:
+    print (l+"#")[:l.find("#")]+" pass # trimmed"
+    revertToIndent = indentLevel
+  else: print l
-- 
GitLab