summarylogtreecommitdiffstats
path: root/pyfltk_remove_percent_format.patch
diff options
context:
space:
mode:
Diffstat (limited to 'pyfltk_remove_percent_format.patch')
-rw-r--r--pyfltk_remove_percent_format.patch955
1 files changed, 955 insertions, 0 deletions
diff --git a/pyfltk_remove_percent_format.patch b/pyfltk_remove_percent_format.patch
new file mode 100644
index 000000000000..dc603c40d8d8
--- /dev/null
+++ b/pyfltk_remove_percent_format.patch
@@ -0,0 +1,955 @@
+--- a/trunk/pyfltk/python/MakeSwig.py 2020-10-16 18:58:04.580305746 -0400
++++ b/trunk/pyfltk/python/MakeSwig.py 2020-10-16 14:16:12.694560622 -0400
+@@ -22,7 +22,7 @@
+ include = ['-I/usr/include']
+ try:
+ fltk_dir = os.environ['FLTK_HOME']
+- include.insert(0, "-I%s"%fltk_dir)
++ include.insert(0, f"-I{fltk_dir}")
+ except:
+ print("Using default location for FLTK!")
+ if is_msys_mingw():
+@@ -48,7 +48,7 @@
+ versionIdentifier = ""
+ if sys.version >= "3.0":
+ versionIdentifier = "-DPYTHON3 -py3"
+- cmd_line = "swig -w302 -w312 -w325 -w362 -w389 -w401 -w473 -w509 -I../swig %s -DFL_EXPORT -DPYTHON %s -c++ -python -shadow -fastdispatch -o fltk_wrap.cpp ../swig/fltk.i "%(add_incl, versionIdentifier)
++ cmd_line = f"swig -w302 -w312 -w325 -w362 -w389 -w401 -w473 -w509 -I../swig {add_incl} -DFL_EXPORT -DPYTHON {versionIdentifier} -c++ -python -shadow -fastdispatch -o fltk_wrap.cpp ../swig/fltk.i "
+ # command line for swig-1.3.27
+ # cmd_line = "swig -w312 -w451 -w473 -I../swig %s -DFL_EXPORT -DPYTHON -c++ -python -shadow -modern -dirprot -o fltk_wrap.cpp ../swig/fltk.i "%add_incl
+ if is_msys_mingw():
+@@ -62,13 +62,13 @@
+ tmpf = open(tmpfn, "w+b")
+ tmpf.write(cmd_line)
+ tmpf.close()
+- r = os.system("sh %s" % tmpfn)
++ r = os.system(f"sh {tmpfn}")
+
+ os.remove(tmpfn)
+ if r != 0:
+- raise DistutilsExecError("command '%s' failed with exit status :%d: command was :%s:. " % (cmd[0], r, cmpl))
++ raise DistutilsExecError(f"command '{cmd[0]}' failed with exit status :{r}: command was :{cmpl}:. ")
+
+- print("return value of the command is :%s:" % r)
++ print(f"return value of the command is :{r}:")
+ else:
+ print(cmd_line)
+ os.system(cmd_line)
+--- a/trunk/pyfltk/python/updateInits.py 2020-10-16 11:46:38.496560571 -0400
++++ b/trunk/pyfltk/python/updateInits.py 2020-10-08 19:15:34.799056263 -0400
+@@ -15,46 +15,46 @@
+
+ def mapInit_Old(name, owns, virtual):
+ # constructor
+- line1 = "_swig_setattr(self, %s, 'this', apply(_fltk.new_%s, args))" % (name, name)
+- line2 = "_swig_setattr(self, %s, 'thisown', %d)" % (name, owns)
++ line1 = f"_swig_setattr(self, {name}, 'this', apply(_fltk.new_{name}, args))"
++ line2 = f"_swig_setattr(self, {name}, 'thisown', {owns})"
+ # only for virtual classes
+ if virtual != 0:
+ line3 = "self.registerSelf(self)"
+
+ # prepare the output
+- ofl.write("# override the implementation of the %s wrapper\n" % name)
+- ofl.write("def __%sInit(self,*args):\n" % name)
+- ofl.write(" %s\n" % line1)
+- ofl.write(" %s\n" % line2)
++ ofl.write(f"# override the implementation of the {name} wrapper\n")
++ ofl.write(f"def __{name}Init(self,*args):\n")
++ ofl.write(f" {line1}\n")
++ ofl.write(f" {line2}\n")
+ if virtual != 0:
+- ofl.write(" %s\n" % line3)
+- ofl.write("%s.__init__ = __%sInit\n" % (name, name))
+- ofl.write("# end of the %s wrapper\n\n" % name)
++ ofl.write(f" {line3}\n")
++ ofl.write(f"{name}.__init__ = __{name}Init\n")
++ ofl.write(f"# end of the {name} wrapper\n\n")
+
+ def mapInit(name, owns, virtual):
+ lines = []
+ # constructor
+ # only for director classes
+ if virtual == 2:
+- lines.append("if self.__class__ == %s:"%name)
++ lines.append(f"if self.__class__ == {name}:")
+ lines.append(" args = (None,) + args")
+ lines.append("else:")
+ lines.append(" args = (self,) + args")
+- lines.append("newobj = _fltk.new_%s(*args)"%name)
++ lines.append(f"newobj = _fltk.new_{name}(*args)")
+ lines.append("self.this = newobj.this")
+- lines.append("self.thisown = %d"%owns)
++ lines.append(f"self.thisown = {owns}")
+ lines.append("del newobj.thisown")
+ # only for virtual classes
+ if virtual == 1:
+ lines.append("self.registerSelf(self)")
+
+ # prepare the output
+- ofl.write("# override the implementation of the %s wrapper\n" % name)
+- ofl.write("def __%sInit(self,*args):\n" % name)
++ ofl.write(f"# override the implementation of the {name} wrapper\n")
++ ofl.write(f"def __{name}Init(self,*args):\n")
+ for line in lines:
+- ofl.write(" %s\n" % line)
+- ofl.write("%s.__init__ = __%sInit\n" % (name, name))
+- ofl.write("# end of the %s wrapper\n\n" % name)
++ ofl.write(f" {line}\n")
++ ofl.write(f"{name}.__init__ = __{name}Init\n")
++ ofl.write(f"# end of the {name} wrapper\n\n")
+
+
+ if __name__ == '__main__':
+--- a/trunk/pyfltk/setup.py 2020-10-16 20:24:04.518331788 -0400
++++ b/trunk/pyfltk/setup.py 2020-10-14 11:05:22.555152377 -0400
+@@ -108,7 +108,7 @@
+ lib_dir_list = [fltk_lib_dir, '/usr/lib']
+ lib_list = ["fltk"]
+ elif sys.platform in ['freebsd4','freebsd5','freebsd6','freebsd7', 'sunos5']:
+- print("Building for: %s"%sys.platform)
++ print(f"Building for: {sys.platform}")
+ def_list = [('UNIX', '1')]
+ lib_dir_list = [fltk_lib_dir,'/usr/X11R6/lib','/usr/lib']
+ lib_list = ["fltk"]
+@@ -168,21 +168,21 @@
+ if isVerbose:
+ print("Checking fltk-config using FLTK_HOME")
+ fltk_dir = os.environ['FLTK_HOME']
+- ver_cmd = "sh %s/fltk-config --version"%fltk_dir
+- inc_cmd = "sh %s/fltk-config --cxxflags %s"%(fltk_dir, var_string)
+- #lib_cmd = "sh %s/fltk-config --use-gl --use-glut --use-images --use-forms --ldflags"%fltk_dir
+- lib_cmd = "sh %s/fltk-config --ldflags %s"%(fltk_dir, var_string)
++ ver_cmd = f"sh {fltk_dir}/fltk-config --version"
++ inc_cmd = f"sh {fltk_dir}/fltk-config --cxxflags {var_string}"
++ #lib_cmd = f"sh {fltk_dir}/fltk-config --use-gl --use-glut --use-images --use-forms --ldflags"
++ lib_cmd = f"sh {fltk_dir}/fltk-config --ldflags {var_string}"
+ except:
+ if isVerbose:
+ print("Checking fltk-config using default installation")
+ if is_msys_mingw():
+ ver_cmd = "sh fltk-config --version"
+- inc_cmd = "sh fltk-config --cxxflags %s"%var_string
+- lib_cmd = "sh fltk-config --ldflags %s"%var_string
++ inc_cmd = f"sh fltk-config --cxxflags {var_string}"
++ lib_cmd = f"sh fltk-config --ldflags {var_string}"
+ else:
+ ver_cmd = "fltk-config --version"
+- inc_cmd = "fltk-config --cxxflags %s"%var_string
+- lib_cmd = "fltk-config --ldflags %s"%var_string
++ inc_cmd = f"fltk-config --cxxflags {var_string}"
++ lib_cmd = f"fltk-config --ldflags {var_string}"
+
+ # version
+ result = os.popen(ver_cmd).readlines()
+--- a/trunk/pyfltk/test/tree.py 2020-10-16 21:16:41.245394864 -0400
++++ b/trunk/pyfltk/test/tree.py 2020-10-10 13:25:51.489642495 -0400
+@@ -57,7 +57,7 @@
+ return "???"
+
+ def Button_CB(w):
+- print("'%s' button pushed\n"%w.label())
++ print(f"'{w.label()}' button pushed\n")
+
+ def RebuildTree(tree):
+ global but, grp
+@@ -132,7 +132,7 @@
+ # Add 500 items in numerical order
+ tree.sortorder(FL_TREE_SORT_NONE);
+ for t in range(500):
+- s = "500 Items/item %04d"%t
++ s = f"500 Items/item {t:04d}"
+ tree.add(s)
+
+ tree.close("500 Items") # close the 500 items by default
+@@ -150,13 +150,9 @@
+
+ item = tree.callback_item()
+ if item:
+- print("TREE CALLBACK: label='%s' userdata=%ld reason=%s\n"%(
+- item.label(),
+- data,
+- reason_as_name(tree.callback_reason())))
++ print(f"TREE CALLBACK: label='{item.label()}' userdata={data} reason={reason_as_name(tree.callback_reason())}\n")
+ else:
+- print("TREE CALLBACK: reason=%s item=(no item -- probably multiple items were changed at once)\n"%(
+- reason_as_name(tree.callback_reason())))
++ print(f"TREE CALLBACK: reason={reason_as_name(tree.callback_reason())} item=(no item -- probably multiple items were changed at once)\n")
+
+
+ def cb_margintop_slider(margintop_slider, tree):
+@@ -596,7 +592,7 @@
+ msg = item.label()
+ if msg == None or msg == "":
+ msg = "???"
+- print("\t%s\n"%msg)
++ print(f"\t{msg}\n")
+ item = tree.next_selected_item(item)
+
+ def cb_clearselected_button(clearselected_button, tree):
+--- a/trunk/pyfltk/util/flconvert/Code_py.py 2020-10-16 22:25:34.274178386 -0400
++++ b/trunk/pyfltk/util/flconvert/Code_py.py 2020-10-16 22:07:23.494578365 -0400
+@@ -167,7 +167,7 @@
+ self.out.write("# global object names\n")
+ for od in self.getGlobalNames():
+ # (name, type, func)
+- self.out.write("%s = None # type '%s' from '%s()'\n"%od)
++ self.out.write(f"{od[0]} = None # type '{od[1]}' from '{od[2]}()'\n")
+ self.out.write("\n\n")
+
+ #generate the function defs
+@@ -240,25 +240,24 @@
+ # the level of the objects nesting within the function
+ name = obj['name']
+ if (name == ''):
+- name = "o_%d_%d"%(childLevel, childNumber)
++ name = f"o_{childLevel}_{childNumber}"
+ return name
+
+
+ def doClass(self, aClass, tabLevel):
+ if 'base' in aClass:
+- self.out.write(ts(tabLevel)+"class %s(%s):\n\n" \
+- %(aClass['name'], aClass['base']))
++ self.out.write(ts(tabLevel)+f"class {aClass['name']}({aClass['base']}):\n\n")
+ else:
+- self.out.write(ts(tabLevel)+"class %s:\n\n"%(aClass['name']))
++ self.out.write(ts(tabLevel)+f"class {aClass['name']}:\n\n")
+
+ for member in aClass['objects']:
+ self.handlers[member['def_type']]( member, tabLevel+1)
+
+- self.out.write("# end of class %s\n\n"%(aClass['name']))
++ self.out.write(f"# end of class {aClass['name']}\n\n")
+
+
+ def doDeclaration(self, decl, tabLevel):
+- self.out.write("%s%s\n\n"%(ts(tabLevel),decl['code'][1:-1]))
++ self.out.write(f"{ts(tabLevel)}{decl['code'][1:-1]}\n\n")
+
+ def doFunction(self, func, tabLevel):
+ # write Python code for the given function
+@@ -274,7 +273,7 @@
+ if (inputParams != ''):
+ inputParams = inputParams + ", "
+ inputParams = inputParams + ip[0]
+- self.out.write("%sdef %s(%s):\n"%(ts(tabLevel), name, inputParams))
++ self.out.write(f"{ts(tabLevel)}def {name}({inputParams}):\n")
+
+ #write any global declarations
+ # DM - support class attrib generation option
+@@ -441,11 +440,10 @@
+
+
+ xywh = opts['xywhDef']
+- constructorParams = "%s, %s, %s, %s"%(xywh[0], xywh[1],
+- xywh[2], xywh[3])
++ constructorParams = f"{xywh[0]}, {xywh[1]}, {xywh[2]}, {xywh[3]}"
+ if 'labelDef' in opts:
+ # take care of multiline labels
+- constructorParams = '%s, """%s"""'%(constructorParams, opts['labelDef'])
++ constructorParams = '{0}, """{1}"""'.format(constructorParams, opts['labelDef'])
+
+ self.out.write( ts(tabLevel)+self.attribsPrefix+name+" = " + type + \
+ "("+constructorParams+")\n")
+@@ -526,10 +524,9 @@
+ name = self.getObjectName( obj, childLevel, childNumber)
+ type = obj['class']
+ xywh = opts['xywhDef']
+- constructorParams = "%s, %s, %s, %s"%(xywh[0], xywh[1],
+- xywh[2], xywh[3])
++ constructorParams = f"{xywh[0]}, {xywh[1]}, {xywh[2]}, {xywh[3]}"
+ if 'labelDef' in opts:
+- constructorParams = '%s, """%s"""'%(constructorParams, opts['labelDef'])
++ constructorParams = '{0}, """{1}"""'.format(constructorParams, opts['labelDef'])
+
+ #self.out.write( ts(tabLevel)+name+" = "+type+"("+constructorParams+")\n")
+ self.out.write( ts(tabLevel)+self.attribsPrefix+name+" = "+type+"("+constructorParams+")\n")
+@@ -590,8 +587,7 @@
+ if 'divider' in opts:
+ flags = flags + 128
+
+- self.out.write('%s("%s", %s, %s, 0, %d), \n'%( prefix, label,
+- accel, callback, flags) )
++ self.out.write(f'{prefix}("{label}", {accel}, {callback}, 0, {flags}), \n')
+
+ if 'objects' in o:
+ for childObject in o['objects']:
+--- a/trunk/pyfltk/util/flconvert/DumpTree.py 2020-10-08 16:37:23.666516695 -0400
++++ b/trunk/pyfltk/util/flconvert/DumpTree.py 2020-10-16 22:32:46.581564651 -0400
+@@ -8,9 +8,9 @@
+ GenericASTTraversal.__init__(self, ast)
+
+ def default(self, node):
+- dump("%20s"%node.type)
++ dump(f"{node.type:20s}")
+ try:
+- dump(" (%s)"%str(node.attr))
++ dump(f" ({str(node.attr)})")
+ except:
+ pass
+ dump("\n")
+--- a/trunk/pyfltk/util/flconvert/FlParseTreeConverter.py 2020-10-16 10:55:08.692791676 -0400
++++ b/trunk/pyfltk/util/flconvert/FlParseTreeConverter.py 2020-10-10 09:30:08.891716020 -0400
+@@ -18,9 +18,9 @@
+ print(l+":")
+ for i in range(0, len(n), 1):
+ try:
+- print(" %d:%s = %s"%(i, n[i].type, str(n[i].attr)))
++ print(f" {i}:{n[i].type} = {str(n[i].attr)}")
+ except:
+- print(" %d:%s"%(i, n[i].type))
++ print(f" {i}:{n[i].type}")
+
+
+
+--- a/trunk/pyfltk/util/flconvert/spark.py 2020-10-16 12:17:47.771154797 -0400
++++ b/trunk/pyfltk/util/flconvert/spark.py 2020-10-12 15:11:08.369355150 -0400
+@@ -47,7 +47,7 @@
+
+ def makeRE(self, name):
+ doc = getattr(self, name).__doc__
+- rv = '(?P<%s>%s)' % (name[2:], doc)
++ rv = f'(?P<{name[2:]}>{doc})'
+ return rv
+
+ def reflect(self):
+@@ -60,7 +60,7 @@
+ return string.join(rv, '|')
+
+ def error(self, s, pos):
+- print("Lexical error at position %s" % pos)
++ print(f"Lexical error at position {pos}")
+ raise SystemExit
+
+ def tokenize(self, s):
+@@ -179,7 +179,7 @@
+ return None
+
+ def error(self, token):
+- print("Syntax error at or near `%s' token" % token)
++ print(f"Syntax error at or near `{token}' token")
+ raise SystemExit
+
+ def parse(self, tokens):
+--- a/trunk/pyfltk/distutils_mod.py 2020-10-08 13:22:56.989640251 -0400
++++ b/trunk/pyfltk/distutils_mod.py 2020-10-08 18:38:59.008664942 -0400
+@@ -29,7 +29,7 @@
+ """
+ self.verbose = 1
+ if self.verbose:
+- print("cmd :%s:" % cmd)
++ print(f"cmd :{cmd}:")
+
+ cmpl = " ".join(cmd)
+ cmpl = cmpl.replace("\\", "/")
+@@ -38,7 +38,7 @@
+ #cmpl = cmpl.replace("gcc", "gcc -g ")
+
+ if self.verbose:
+- print("cmpl is :%s:" % cmpl)
++ print(f"cmpl is :{cmpl}:")
+
+ if not self.dry_run:
+ import tempfile
+@@ -46,14 +46,14 @@
+ tmpf = open(tmpfn, "w+b")
+ tmpf.write(cmpl.encode('ASCII'))
+ tmpf.close()
+- r = os.system("sh %s" % tmpfn)
++ r = os.system(f"sh {tmpfn}")
+
+ os.remove(tmpfn)
+ if r != 0:
+- raise DistutilsExecError("command '%s' failed with exit status :%d: command was :%s:. " % (cmd[0], r, cmpl))
++ raise DistutilsExecError(f"command '{cmd[0]}' failed with exit status :{r}: command was :{cmpl}:. ")
+
+ if self.verbose:
+- print("return value of the compile command is :%s:" % r)
++ print(f"return value of the compile command is :{r}:")
+
+
+
+--- a/trunk/pyfltk/test/DragAndDrop.py 2020-10-08 13:22:56.156300832 -0400
++++ b/trunk/pyfltk/test/DragAndDrop.py 2020-10-10 12:23:11.743965957 -0400
+@@ -46,10 +46,10 @@
+ print("FL_DND_LEAVE ", self.text_string)
+ return 1
+ elif event == FL_DND_DRAG:
+- print("FL_DND_DRAG %c (%d, %d)"%(self.text_string, Fl.event_x(), Fl.event_y()))
++ print(f"FL_DND_DRAG {self.text_string} ({Fl.event_x()}, {Fl.event_y()})")
+ return 1
+ elif event == FL_DND_RELEASE:
+- print("FL_DND_RELEASE %c (%d, %d)"%(self.text_string, Fl.event_x(), Fl.event_y()))
++ print(f"FL_DND_RELEASE {self.text_string} ({Fl.event_x()}, {Fl.event_y()})")
+ return 1
+ elif event == FL_PUSH:
+ print("PREPUSH ", self.text_string)
+@@ -61,7 +61,7 @@
+ cl = Fl.event_text()
+ ln = Fl.event_length()
+ print("PASTE ", self.text_string)
+- print(" text = %s, length = %d"%(cl, ln))
++ print(f" text = {cl}, length = {ln}")
+ return 1
+ else:
+ return 0
+--- a/trunk/pyfltk/test/TextEditor.py 2020-10-08 13:22:56.139634043 -0400
++++ b/trunk/pyfltk/test/TextEditor.py 2020-10-10 12:02:35.677517874 -0400
+@@ -37,7 +37,7 @@
+ def onFileQuit(ptr, data):
+ #menuItem = Fl_Menu_ItemPtr(ptr)
+ menuItem = ptr
+- print('onFileQuit(%s, "%s")'%(str(menuItem), str(data)))
++ print(f'onFileQuit({str(menuItem)}, "{str(data)}")')
+ import sys # code
+ sys.exit(0) # code
+
+@@ -45,7 +45,7 @@
+ def onFileSave(ptr , data):
+ #menuItem = Fl_Menu_ItemPtr(ptr)
+ menuItem = ptr
+- print('onFileSave(%s, "%s")'%(str(menuItem), str(data)))
++ print(f'onFileSave({str(menuItem)}, "{str(data)}")')
+
+ textEditor = data
+ print(textEditor.buffer().text())
+--- a/trunk/pyfltk/test/browser.py 2020-10-08 13:22:56.152967474 -0400
++++ b/trunk/pyfltk/test/browser.py 2020-10-10 10:44:08.820254311 -0400
+@@ -68,7 +68,7 @@
+
+ def b_cb(ptr):
+ #print "callback, selection = %d, event_clicks = <not yet wrapped>"%(ptr.value())
+- print("callback, selection = %d, event_clicks = %d"%(ptr.value(),Fl.event_clicks()))
++ print(f"callback, selection = {ptr.value()}, event_clicks = {Fl.event_clicks()}")
+
+ def show_cb(ptr):
+ if field.value() == '':
+--- a/trunk/pyfltk/test/check_browser.py 2020-10-08 13:22:56.139634043 -0400
++++ b/trunk/pyfltk/test/check_browser.py 2020-10-10 14:43:38.548190562 -0400
+@@ -35,7 +35,7 @@
+ def checkBrowserCallback(ptr):
+ #cb = Fl_Check_BrowserPtr(ptr) # code
+ cb = ptr
+- print("contains %d items"%cb.nitems())
++ print(f"contains {cb.nitems()} items")
+ for i in range(1, cb.nitems()+1): # code
+ if cb.checked(i): # code
+ print(cb.text(i)+" is checked")
+--- a/trunk/pyfltk/test/editor.py 2020-10-08 13:22:56.159634189 -0400
++++ b/trunk/pyfltk/test/editor.py 2020-10-09 16:43:49.521666023 -0400
+@@ -247,7 +247,7 @@
+ else:
+ r = textbuf.insertfile(newfile, ipos)
+ if r != 0:
+- fl_alert("Error reading from file %s."%newfile)
++ fl_alert(f"Error reading from file {newfile}.")
+ else:
+ if insert == 0:
+ filename = newfile
+@@ -257,7 +257,7 @@
+ def save_file(newfile):
+ global changed, filename
+ if textbuf.savefile(newfile) != 0:
+- fl_alert("Error writing to file %s."%newfile)
++ fl_alert(f"Error writing to file {newfile}.")
+ else:
+ filename = newfile
+ changed = False
+@@ -294,7 +294,7 @@
+ editor.editor.insert_position(pos+len(editor.search))
+ editor.editor.show_insert_position()
+ else:
+- fl_alert("No occurrences of %s found!"%editor.search)
++ fl_alert(f"No occurrences of {editor.search} found!")
+
+ def set_title(win):
+ global filename, title
+@@ -385,7 +385,7 @@
+ editor.editor.insert_position(pos+len(replace))
+ editor.editor.show_insert_position()
+ else:
+- fl_alert("No occurrences of %s found!"%find)
++ fl_alert(f"No occurrences of {find} found!")
+
+ def replall_cb(widget, editor):
+ find = editor.replace_find.value()
+@@ -414,9 +414,9 @@
+ times += 1
+
+ if times > 0:
+- fl_message("Replaced %d occurrences."%times)
++ fl_message(f"Replaced {times} occurrences.")
+ else:
+- fl_alert("No occurrences of %s found!"%find)
++ fl_alert(f"No occurrences of {find} found!")
+
+ def replcan_cb(widget, editor):
+ editor.replace_dlg.hide()
+--- a/trunk/pyfltk/test/fltk_threads.py 2020-10-08 13:22:56.149634116 -0400
++++ b/trunk/pyfltk/test/fltk_threads.py 2020-10-10 11:13:53.353368290 -0400
+@@ -68,7 +68,7 @@
+
+ #callbacks:
+ def newProcessCB(self,widget):
+- t = MyThread('Thread %d\n'%self.id)
++ t = MyThread(f'Thread {self.id}\n')
+ self.id += 1
+ t.start()
+ self.ThreadList.append(t)
+--- a/trunk/pyfltk/test/freeze/hello.py 2020-10-08 13:22:56.262968277 -0400
++++ b/trunk/pyfltk/test/freeze/hello.py 2020-10-08 20:40:35.997654327 -0400
+@@ -20,7 +20,7 @@
+
+ def onHelloWorldButton(ptr):
+ import sys # code
+- print "onHelloWorldButton(%s)"%str(ptr) # code
++ print(f"onHelloWorldButton({str(ptr)})") # code
+ sys.exit(0) # code
+
+
+--- a/trunk/pyfltk/test/handle_events.py 2020-10-08 13:22:56.156300832 -0400
++++ b/trunk/pyfltk/test/handle_events.py 2020-10-10 12:38:13.463057943 -0400
+@@ -61,7 +61,7 @@
+ return 1
+ elif event == FL_RELEASE:
+ print("FL_RELEASE")
+- print("Button = %d" % Fl.event_button())
++ print(f"Button = {Fl.event_button()}")
+ if highlight != 0:
+ highlight = 0
+ self.redraw()
+@@ -98,7 +98,7 @@
+ return None
+
+ def resize(self, X, Y, W, H):
+- print("Resizing: %d, %d, %d, %d\n"%(X,Y,W,H))
++ print(f"Resizing: {X}, {Y}, {W}, {H}\n")
+ #Fl_Widget.resize(self, X, Y, W, H)
+
+
+--- a/trunk/pyfltk/test/hello.py 2020-10-08 13:22:56.146300759 -0400
++++ b/trunk/pyfltk/test/hello.py 2020-10-10 12:58:17.355483253 -0400
+@@ -31,7 +31,7 @@
+
+ def theCancelButtonCallback(ptr, data):
+ print("type = ", type(ptr))
+- print("theCancelButtonCallback(%s)"%str(data))
++ print(f"theCancelButtonCallback({str(data)})")
+ print("Tooltip: ", ptr.tooltip())
+
+ window = Fl_Window(100, 100, 200, 90)
+--- a/trunk/pyfltk/test/hello_utf8.py 2020-10-08 13:22:56.142967401 -0400
++++ b/trunk/pyfltk/test/hello_utf8.py 2020-10-10 11:27:51.376432932 -0400
+@@ -35,7 +35,7 @@
+
+ def theCancelButtonCallback(ptr, data):
+ print("type = ", type(ptr))
+- print("theCancelButtonCallback(%s)"%str(data))
++ print(f"theCancelButtonCallback({str(data)})")
+ print("Tooltip: ", ptr.tooltip())
+
+ window = Fl_Window(100, 100, 200, 90)
+--- a/trunk/pyfltk/test/idle.py 2020-10-08 13:22:56.152967474 -0400
++++ b/trunk/pyfltk/test/idle.py 2020-10-08 20:48:43.929136605 -0400
+@@ -34,7 +34,7 @@
+ def anIdleCallback(data):
+ global timesCalled
+ timesCalled = timesCalled + 1
+- print("idle data=%d times called=%d"%(data,timesCalled))
++ print(f"idle data={data} times called={timesCalled}")
+
+ docb = 0
+ def theCancelButtonCallback(ptr):
+--- a/trunk/pyfltk/test/listSelect.py 2020-10-08 13:22:56.152967474 -0400
++++ b/trunk/pyfltk/test/listSelect.py 2020-10-09 16:44:27.641771102 -0400
+@@ -61,7 +61,7 @@
+ ls = ListSelect( 0, 0, 420, 300, " From:", " To:");
+
+ for t in range(0, 30, 1):
+- ls.getTopBrowser().add("Item #%d"%t)
++ ls.getTopBrowser().add(f"Item #{t}")
+
+ window.resizable(window.this)
+ window.end()
+--- a/trunk/pyfltk/test/logo.py 2020-10-08 13:22:56.152967474 -0400
++++ b/trunk/pyfltk/test/logo.py 2020-10-10 12:41:17.053406574 -0400
+@@ -31,7 +31,7 @@
+
+ def theCancelButtonCallback(ptr, data):
+ print("type = ", type(ptr))
+- print("theCancelButtonCallback(%s)"%str(data))
++ print(f"theCancelButtonCallback({str(data)})")
+ print("Tooltip: ", ptr.tooltip())
+
+ def createButton(x, y, w, h, label):
+--- a/trunk/pyfltk/test/logo_gleam.py 2020-10-08 13:22:56.146300759 -0400
++++ b/trunk/pyfltk/test/logo_gleam.py 2020-10-10 13:10:45.187133398 -0400
+@@ -31,7 +31,7 @@
+
+ def theCancelButtonCallback(ptr, data):
+ print("type = ", type(ptr))
+- print("theCancelButtonCallback(%s)"%str(data))
++ print(f"theCancelButtonCallback({str(data)})")
+ print("Tooltip: ", ptr.tooltip())
+
+ def createButton(x, y, w, h, label):
+--- a/trunk/pyfltk/test/menu.py 2020-10-08 13:22:56.142967401 -0400
++++ b/trunk/pyfltk/test/menu.py 2020-10-08 20:58:05.410496482 -0400
+@@ -35,7 +35,7 @@
+ def onFileQuit(ptr, data):
+ #menuItem = Fl_Menu_ItemPtr(ptr)
+ menuItem = ptr
+- print('onFileQuit(%s, "%s")'%(str(menuItem), str(data)))
++ print(f'onFileQuit({str(menuItem)}, "{str(data)}")')
+ import sys # code
+ sys.exit(0) # code
+
+--- a/trunk/pyfltk/test/menubar.py 2020-10-08 13:22:56.149634116 -0400
++++ b/trunk/pyfltk/test/menubar.py 2020-10-10 13:08:36.376842433 -0400
+@@ -40,7 +40,7 @@
+ print("menu.mvalue()=NULL")
+ else:
+ if (m.shortcut()):
+- print("%s - %s" % ( m.label(), fl_shortcut_label(m.shortcut()) ))
++ print(f"{m.label()} - {fl_shortcut_label(m.shortcut())}")
+ else:
+ print(m.label())
+
+@@ -96,7 +96,7 @@
+ menus[0].parent().redraw()
+
+ for i in range(0, 99, 1):
+- hugemenu.append( nm("item %d"%i) )
++ hugemenu.append( nm(f"item {i}") )
+
+ window = Fl_Window(0,0, WIDTH, 400)
+
+--- a/trunk/pyfltk/test/message.py 2020-10-08 13:22:56.156300832 -0400
++++ b/trunk/pyfltk/test/message.py 2020-10-10 13:52:56.441473112 -0400
+@@ -33,13 +33,13 @@
+ fl_alert("Quantum fluctuations in the space-time continuim detected, "
+ "you have %f seconds to comply."% 10.0)
+
+-print("fl_ask returned %d"%fl_ask("Do you really want to %s?"%"continue"))
++print(f"fl_ask returned {fl_ask('Do you really want to continue?')}")
+
+-print("fl_choice returned %d"%fl_choice("Choose one of the following:","choice0","choice1","choice2"))
++print(f"fl_choice returned {fl_choice('Choose one of the following:', 'choice0', 'choice1', 'choice2')}")
+
+ r = fl_input("Please enter a string for input:", "this is the default value")
+-print("fl_input returned \"%s\""%str(r))
++print(f"fl_input returned \"{str(r)}\"")
+
+ r = fl_password("Enter password:", "123")
+-print("fl_password returned \"%s\""%str(r))
++print(f"fl_password returned \"{str(r)}\"")
+
+--- a/trunk/pyfltk/test/message_de.py 2020-10-08 13:22:56.149634116 -0400
++++ b/trunk/pyfltk/test/message_de.py 2020-10-10 14:03:20.650118376 -0400
+@@ -38,13 +38,13 @@
+ fl_alert("Quantum fluctuations in the space-time continuim detected, "
+ "you have %f seconds to comply."% 10.0)
+
+-print("fl_ask returned %d"%fl_ask("Do you really want to %s?"%"continue"))
++print(f"fl_ask returned {fl_ask('Do you really want to continue?')}")
+
+-print("fl_choice returned %d"%fl_choice("Choose one of the following:","choice0","choice1","choice2"))
++print(f"fl_choice returned {fl_choice('Choose one of the following:', 'choice0', 'choice1', 'choice2')}")
+
+ r = fl_input("Please enter a string for input:", "this is the default value")
+-print("fl_input returned \"%s\""%str(r))
++print(f"fl_input returned \"{str(r)}\"")
+
+ r = fl_password("Enter password:", "123")
+-print("fl_password returned \"%s\""%str(r))
++print(f"fl_password returned \"{str(r)}\"")
+
+--- a/trunk/pyfltk/test/postioner.py 2020-10-08 13:22:56.142967401 -0400
++++ b/trunk/pyfltk/test/postioner.py 2020-10-09 16:58:56.594297723 -0400
+@@ -39,7 +39,7 @@
+
+
+ def thePosCallback(ptr):
+- theDisplay.value("%3.3f, %3.3f"%(thePos.xvalue(), thePos.yvalue())) # code
++ theDisplay.value(f"{thePos.xvalue():3.3f}, {thePos.yvalue():3.3f}") # code
+
+
+ def main():
+--- a/trunk/pyfltk/test/simple_table.py 2020-10-08 13:22:56.156300832 -0400
++++ b/trunk/pyfltk/test/simple_table.py 2020-10-10 13:36:18.481582445 -0400
+@@ -42,7 +42,7 @@
+ fl_font(FL_HELVETICA, 12) # font used by all headers
+ return None
+ elif context==self.CONTEXT_CELL:
+- s = "%d"%self.data[R][C]
++ s = f"{self.data[R][C]}"
+ fl_push_clip(X,Y,W,H)
+ fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, self.row_header_color())
+ fl_color(FL_BLACK)
+--- a/trunk/pyfltk/test/sudoku.py 2020-10-08 13:22:56.142967401 -0400
++++ b/trunk/pyfltk/test/sudoku.py 2020-10-09 17:02:43.064993929 -0400
+@@ -404,7 +404,7 @@
+ for i in range(9):
+ for j in range(9):
+ cell = self.grid_cells[i][j]
+- name = "value%d.%d"%(i,j)
++ name = f"value{i}.{j}"
+ val = 0
+ (status, val) = self.prefs.get(name, 0)
+ if status == 0:
+@@ -412,7 +412,7 @@
+ break
+ self.grid_values[i][j] = val
+
+- name = "state%d.%d"%(i,j)
++ name = f"state{i}.{j}"
+ (status, val) = self.prefs.get(name, 0)
+ cell.readonly(val)
+ if val != 0:
+@@ -422,7 +422,7 @@
+ solved = False
+
+ for k in range(8):
+- name = "test%d%d.%d"%(k, i, j)
++ name = f"test{k}{i}.{j}"
+ (status, val) = self.prefs.get(name, 0)
+ cell.test_value(k, val)
+
+@@ -611,17 +611,17 @@
+ for i in range(9):
+ for j in range(9):
+ cell = self.grid_cells[i][j]
+- name = "value%d.%d"%(i,j)
++ name = f"value{i}.{j}"
+ self.prefs.set(name, self.grid_values[i][j])
+
+- name = "state%d.%d"%(i, j)
++ name = f"state{i}.{j}"
+ self.prefs.set(name, cell.value())
+
+- name = "readonly%d.%d"%(i, j)
++ name = f"readonly{i}.{j}"
+ self.prefs.set(name, cell.readonly())
+
+ for k in range(8):
+- name = "test%d%d.%d"%(k, i, j)
++ name = f"test{k}{i}.{j}"
+ self.prefs.set(name, cell.test_value(k))
+
+ def set_title(self):
+--- a/trunk/pyfltk/test/table.py 2020-10-08 13:22:56.156300832 -0400
++++ b/trunk/pyfltk/test/table.py 2020-10-08 21:52:31.201008633 -0400
+@@ -31,7 +31,7 @@
+
+
+ def button_cb(w, data):
+- print("BUTTON: %s"%w.label())
++ print(f"BUTTON: {w.label()}")
+
+ class WidgetTable(Fl_Table_Row):
+ def __init__(self, x, y, w, h, l=""):
+@@ -45,7 +45,7 @@
+ self.end()
+
+ def draw_cell(self, context, R, C, X, Y, W, H):
+- s="%d/%d"%(R,C) # text for each cell
++ s=f"{R}/{C}" # text for each cell
+
+ if context==self.CONTEXT_STARTPAGE:
+ fl_font(FL_HELVETICA, 12) # font used by all headers
+@@ -64,7 +64,7 @@
+ self.init_sizes()
+ return None
+ elif context==self.CONTEXT_ROW_HEADER:
+- s1="Row %d"%R
++ s1=f"Row {R}"
+ fl_push_clip(X,Y,W,H)
+ fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, self.row_header_color())
+ fl_color(FL_BLACK)
+@@ -72,7 +72,7 @@
+ fl_pop_clip()
+ return None
+ elif context==self.CONTEXT_COL_HEADER:
+- s1="Column %d"%C
++ s1=f"Column {C}"
+ fl_push_clip(X, Y, W, H)
+ fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, self.col_header_color())
+ fl_color(FL_BLACK)
+@@ -99,11 +99,11 @@
+ #(status, X, Y, W, H)=self.find_cell(self.CONTEXT_TABLE, r, c, X, Y, W, H)
+
+ if c&1:
+- s="%d.%d"%(r,c)
++ s=f"{r}.{c}"
+ inp = Fl_Input(X,Y,W,H)
+ inp.value(s)
+ else:
+- s1="%d/%d"%(r,c)
++ s1=f"{r}/{c}"
+ butt = Fl_Light_Button(X,Y,W,H,s1)
+ self.s_list.append(s1)
+ butt.align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)
+@@ -121,7 +121,7 @@
+ Fl_Table_Row.__init__(self, x, y, w, h, l)
+
+ def draw_cell(self, context, R, C, X, Y, W, H):
+- s="%d/%d"%(R,C) # text for each cell
++ s=f"{R}/{C}" # text for each cell
+
+ if context==self.CONTEXT_STARTPAGE:
+ fl_font(FL_HELVETICA, 16)
+@@ -158,7 +158,7 @@
+
+ def table_cb(o, data):
+ table = data
+- print("%s callback: row=%d col=%d, context=%d, event=%d, clicks=%d"%(table.label(),table.callback_row(),table.callback_col(),table.callback_context(),Fl.event(), Fl.event_clicks()))
++ print(f"{table.label()} callback: row={table.callback_row()} col={table.callback_col()}, context={table.callback_context()}, event={Fl.event()}, clicks={Fl.event_clicks()}")
+
+ if __name__=='__main__':
+ win1 = Fl_Window(940, 500, "widgettable")
+--- a/trunk/pyfltk/test/timeout.py 2020-10-08 13:22:56.149634116 -0400
++++ b/trunk/pyfltk/test/timeout.py 2020-10-08 21:53:52.488010236 -0400
+@@ -32,7 +32,7 @@
+
+ def timeoutCallback(data):
+ global numTimeoutsCalled
+- print("timeoutCallback(%s)"%str(data))
++ print(f"timeoutCallback({str(data)})")
+ Fl.repeat_timeout( 2.0, timeoutCallback, numTimeoutsCalled)
+ numTimeoutsCalled = numTimeoutsCalled + 1
+ if numTimeoutsCalled == 5:
+--- a/trunk/pyfltk/test/tree_demo.py 2020-10-08 13:22:56.152967474 -0400
++++ b/trunk/pyfltk/test/tree_demo.py 2020-10-08 22:31:23.253006805 -0400
+@@ -462,7 +462,7 @@
+ """
+ """
+ def on_select(self, node):
+- print("on_select: node=%s" % node.title)
++ print(f"on_select: node={node.title}")
+
+ print("creating window")
+ win = fltk.Fl_Window(xWin, yWin, wWin, hWin, "Fl_Tree demo")
+@@ -474,25 +474,25 @@
+ def on_promote(ev):
+ node = tree.valuenode()
+ if node:
+- print("promote: %s" % node.title)
++ print(f"promote: {node.title}")
+ node.promote()
+
+ def on_demote(ev):
+ node = tree.valuenode()
+ if node:
+- print("demote: %s" % node.title)
++ print(f"demote: {node.title}")
+ node.demote()
+
+ def on_moveup(ev):
+ node = tree.valuenode()
+ if node:
+- print("moveup: %s" % node.title)
++ print(f"moveup: {node.title}")
+ node.moveup()
+
+ def on_movedown(ev):
+ node = tree.valuenode()
+ if node:
+- print("movedown: %s" % node.title)
++ print(f"movedown: {node.title}")
+ node.movedown()
+
+ but_promote = fltk.Fl_Button(xButs, 20, 20, 20, "@<-")
+@@ -517,13 +517,13 @@
+ # add stuff to root node
+ if 1:
+ for i in range(3):
+- node = tree.append("item-%s" % i)
++ node = tree.append(f"item-{i}")
+ if 1:
+ for j in range(3):
+- subnode = node.append("item-%s%s" % (i, j))
++ subnode = node.append(f"item-{i}{j}")
+ if 0:
+ for k in range(2):
+- subnode.append("item-%s%s%s" % (i,j,k))
++ subnode.append(f"item-{i}{j}{k}")
+
+ print("entering main loop")
+ fltk.Fl.run()
+--- a/trunk/pyfltk/test/tty.py 2020-10-08 13:22:56.146300759 -0400
++++ b/trunk/pyfltk/test/tty.py 2020-10-10 14:13:42.192064370 -0400
+@@ -90,17 +90,17 @@
+ bytes = "waitpid(): no child process\n"
+ else:
+ if os.WIFEXITED(status):
+- bytes = "Exit=%d\n"%os.WEXITSTATUS(status)
++ bytes = f"Exit={os.WEXITSTATUS(status)}\n"
+ os.close(fd)
+ Fl.remove_fd(fd)
+ G_pids[t] = -1
+ elif os.WIFSIGNALED(status):
+- bytes = "Killed with %d\n"%os.WTERMSIG(status)
++ bytes = f"Killed with {os.WTERMSIG(status)}\n"
+ os.close(fd)
+ Fl.remove_fd(fd)
+ G_pids[t] = -1
+ elif os.WIFSTOPPED(status):
+- bytes = "Stopped with %d\n"%os.WSTOPSIG(status)
++ bytes = f"Stopped with {os.WSTOPSIG(status)}\n"
+
+ G_buff[t].append(bytes)
+ else: # DATA
+--- a/trunk/pyfltk/test/utf8.py 2020-10-08 13:22:56.146300759 -0400
++++ b/trunk/pyfltk/test/utf8.py 2020-10-08 22:57:10.030697161 -0400
+@@ -148,10 +148,10 @@
+ i = i+1
+ buf = ""
+ if j < size_count and i == size_array[j]:
+- buf = "@b%d"%i
++ buf = f"@b{i}"
+ j = j+1
+ else:
+- buf = "%d"%i
++ buf = f"{i}"
+
+ sizeobj.add(buf)
+
+@@ -164,7 +164,7 @@
+ if size_array[i] <= pickedsize:
+ w = i
+
+- buf = "@b%d"%size_array[i]
++ buf = f"@b{size_array[i]}"
+ sizeobj.add(buf)
+ sizeobj.value(w+1)
+ # force selection of nearest valid size, then redraw
+@@ -191,8 +191,8 @@
+ else:
+ font_idx = font_idx-1
+ name, font_type = Fl.get_font_name(font_idx)
+- print("idx %d\nUser name :%s:"%( font_idx, name))
+- print("FLTK name :%s:"%( Fl.get_font(font_idx)))
++ print(f"idx {font_idx}\nUser name :{name}:")
++ print(f"FLTK name :{Fl.get_font(font_idx)}:")
+
+ Fl.set_font(extra_font, font_idx)
+
+@@ -250,7 +250,7 @@
+ prefix = prefix+"@i"
+ buf = prefix+"@."+name
+ else:
+- buf="@F%d@.%s"%(font_idx, name)
++ buf=f"@F{font_idx}@.{name}"
+ fontobj.add(buf)
+
+ fontobj.topline(i_was)
+@@ -515,7 +515,7 @@
+ o = o+1
+ i = i+1
+ buf = buf+'\0'
+- bu = "0x%04lX"%(y * 16)
++ bu = f"0x{(y * 16):04X}"
+ b = Fl_Input(200,(y-off)*25,60,25)
+ b.value(bu)
+ b = Fl_Input(260,(y-off)*25,400,25)