4 =======================================================================
5 LilyPond to dvi converter
7 Features include Title information, paper size specification, and image
10 Usage: ly2dvi.py [OPTION]... [FILE]...
11 Input: LilyPond source or LilyPond generated TeX files
13 =======================================================================
31 This class handles all ly2dvi.py input file methods
35 __init__() Constructor
36 open(file) Open a .ly file or .tex file using lilyinclude path
37 close() Close current file
38 type() Determine file type .ly (input) or .tex (output)
39 setVars() Set title definitions found in .tex (output) file
54 open file and set private class variable __fd. The search
55 sequence is: current directory followed by the directories
56 found in include property list. Each directory is searched
57 for file, file.ly, and file.fly.
61 error: ExitNotFound Exception
64 for i in [''] + Props.get('include')[0:]:
65 ifile = os.path.join(i,file)
66 for j in ['','.ly','.fly']:
69 this.__fd = open( jfile, 'r' )
73 sys.exit('ExitNotFound', file)
81 close file object __fd
95 Determine input file type. LilyPond source is 'input' type
96 and LilyPond generated TeX file is 'output' type
99 output: 'input' | 'output'
103 firstline = this.__fd.readline()
105 if re.match('% Creator: GNU LilyPond [0-9]+[.0-9]+',firstline ):
116 Search for properties in the current input file and set the
117 appropriate values. The supported properties names are in
118 local variable varTable along with the property list
129 ( 'language', Props.setLanguage ),
130 ( 'latexheaders', Props.setHeader ),
131 ( 'orientation', Props.setOrientation ),
132 ( 'paperpapersize', Props.setPaperZize ),
133 ( 'papertextheight', Props.setTextHeight ),
134 ( 'paperlinewidth', Props.setLineWidth ),
135 ( 'filename', Props.setFilename ),
139 for line in this.__fd.readlines():
140 m=re.match('\\\\def\\\\mudela([\w]+){(.*)}',line)
143 if m.group(1) == var[0]:
144 var[1](m.group(2),'file')
146 for var in Props.get('titledefs'):
147 if m.group(1) == var:
148 titles[var]=m.group(2)
150 Props.setTitles(titles,'file')
157 This class handles all ly2dvi.py output file methods
160 __mudelaDefs(opt) Send title info to output file
163 __init__() Constructor
164 write(str) Write a string to output file
165 start(file) Start the latex file
166 next() Process next output file
167 end() Finish latex file and run latex
181 def __mudelaDefs(this,opt):
183 Write titles to output
185 input: opt Supports header and subheader output
190 titles = Props.get('titles')
191 for key in titles.keys():
192 this.write('%s\\mudela%s{%s}%%\n' % (opt,key,titles[key]))
199 Write str to current output file
201 input: str String to write
211 def start(this,file):
213 Start LaTeX file. Calculates the horizontal and vertical
214 margin using pagewidth, pageheight, linewidth, and textheight.
215 Creates temporary output filename and opens it for write.
216 Sends the LaTeX header information to output. Lastly sends
217 the title information to output.
219 input: file output file name
224 now=time.asctime(time.localtime(time.time()))
225 linewidth = Props.get('linewidth')
226 textheight = Props.get('textheight')
228 if Props.get('orientation') == 'landscape':
229 pagewidth = Props.get('pageheight')
230 pageheight = Props.get('pagewidth')
232 pageheight = Props.get('pageheight')
233 pagewidth = Props.get('pagewidth')
235 horizontalMarginArg = ( (pagewidth - linewidth)/2 )
236 verticalMarginArg = ( (pageheight - textheight)/2 )
240 %% Automatically generated from %s, %s
242 \\documentclass[%s]{article}
245 \\usepackage{geometry}
246 \\usepackage[latin1]{inputenc}
247 %%\\usepackage[T1]{fontenc}
249 %%\\addtolength{\\oddsidemargin}{-1cm}
250 %%\\addtolength{\\topmargin}{-1cm}
251 %%\\setlength{\\textwidth}{%s}
252 %%\\setlength{\\textheight}{%s}
253 \\geometry{width=%spt, left=%spt, height=%spt, top=%spt}
258 """ % ( program_id(), Props.get('filename'), now, Props.get('papersize'),
259 Props.get('language'), Props.get('pagenumber'), linewidth, textheight,
260 linewidth, horizontalMarginArg, textheight, verticalMarginArg,
261 Props.get('header') )
263 pathcomp = os.path.splitext(file)
264 this.__base = pathcomp[0]
265 this.__outfile = '%s.%d%s' % (pathcomp[0], os.getpid(), pathcomp[1])
267 this.__fd = open(this.__outfile,"w")
269 sys.exit('ExitNoWrite', this.__outfile)
271 this.__mudelaDefs('')
282 Write LaTeX subheader information to support more than one
283 score in a document. Lastly send current title information to
295 \\def\\mudelapiece{}%
297 this.__mudelaDefs("\\def")
299 \\def\\theopus{\\mudelaopus}% ugh
300 \\def\\thepiece{\\mudelapiece}%
310 Close output file and run latex on it.
314 error: ExitBadLatex Exception
317 outfile=this.__base + '.dvi'
318 if Props.get('output') != '':
319 outfile = os.path.join(Props.get('output'), outfile )
322 \\vfill\\hfill{\\LilyIdString}
326 if ( os.name == 'posix' ):
327 stat = os.system('latex \'\\nonstopmode \\input %s\'' %
329 else: # Windows shells don't eat the single quotes
330 stat = os.system('latex \\nonstopmode \\input %s' %
333 sys.exit('ExitBadLatex')
334 if os.path.isfile(outfile):
336 os.rename(this.__base + '.' + str(os.getpid()) + '.dvi', outfile)
337 sys.stderr.write( '\n' + program_id() + ': dvi file name is %s\n\n'
340 if Props.get('postscript'):
341 psoutfile=this.__base + '.ps'
342 if Props.get('output') != '':
343 psoutfile = os.path.join(Props.get('output'), psoutfile )
344 stat = os.system('dvips -o %s %s 2>&1' % (psoutfile,outfile))
346 sys.exit('ExitBadPostscript')
353 This class handles all ly2dvi.py property manipulation
357 __init__() Constructor
358 set<property> methods
364 # Following is the order of priority for property assignment. The
365 # list is organized from lowest to highest priority. Each
366 # assignment is overridden by the next requester in the list.
368 # Requester Description
369 # --------- -----------
370 # init Initial default values
371 # file The values found in the lilypond generated TeX files
372 # environment Envrionment variables LILYINCLUDE, LILYPONDPREFIX
373 # rcfile $LILYPONDPREFIX/share/lilypond/.lilyrc
374 # rcfile $HOME/.lilyrc
376 # commandline command line arguments
378 this.__overrideTable = {
387 this.__roverrideTable = {} # reverse lookup used for debug
388 for i in this.__overrideTable.items():
389 this.__roverrideTable[i[1]]=i[0]
392 'pagewidth' : [597, this.__overrideTable['init']],
393 'pageheight' : [845, this.__overrideTable['init']],
394 'papersize' : ['a4paper', this.__overrideTable['init']],
395 'textheight' : [0, this.__overrideTable['init']],
396 'linewidth' : [0, this.__overrideTable['init']],
397 'orientation' : ['portrait', this.__overrideTable['init']],
398 'language' : ['%', this.__overrideTable['init']],
399 'include' : [[], this.__overrideTable['init']],
400 'debug' : [0, this.__overrideTable['init']],
401 'keeplilypond' : [0, this.__overrideTable['init']],
402 'keeply2dvi' : [0, this.__overrideTable['init']],
403 'pagenumber' : ['%', this.__overrideTable['init']],
404 'separate' : [0, this.__overrideTable['init']],
405 'output' : ['', this.__overrideTable['init']],
406 'header' : ['%', this.__overrideTable['init']],
407 'dependencies' : [0, this.__overrideTable['init']],
408 'root' : ['', this.__overrideTable['init']],
409 'tmp' : ['d:\tmp', this.__overrideTable['init']],
410 'filename' : ['', this.__overrideTable['init']],
411 'titledefs' : [[], this.__overrideTable['init']],
412 'titles' : [{}, this.__overrideTable['init']],
413 'lilyOutputFiles' : [[], this.__overrideTable['init']],
414 'postscript' : [0, this.__overrideTable['init']],
418 # Try to set root and HOME first before calling rcfile
420 if os.environ.has_key('LILYPONDPREFIX'):
421 this.setRoot(os.environ['LILYPONDPREFIX'], 'environment')
423 p=os.path.split(sys.argv[0])
424 p=os.path.split(p[0])
425 this.setRoot(p[0],'init')
427 if not os.environ.has_key('HOME'):
428 if os.environ.has_key('HOMEDRIVE') and \
429 os.environ.has_key('HOMEPATH'):
430 os.environ['HOME'] = os.environ['HOMEDRIVE'] + \
431 os.environ['HOMEPATH']
433 os.environ['HOME'] = os.curdir
435 this.rcfile() # Read initialization file(s)
437 if os.environ.has_key('LILYINCLUDE'):
438 tmp=this.get('include')
439 for s in string.split(os.environ['LILYINCLUDE'],os.pathsep):
441 this.__set('include', tmp, 'environment')
445 if os.environ.has_key ('TEXINPUTS'):
446 t = os.pathsep + os.environ['TEXINPUTS']
447 os.environ['TEXINPUTS'] = os.path.join(this.get('root'), 'texmf',
448 'tex', 'lilypond' ) + t
451 if os.environ.has_key ('MFINPUTS'):
452 t = os.pathsep + os.environ['MFINPUTS']
453 os.environ['MFINPUTS'] = os.path.join(this.get('root'), 'texmf',
454 'mf', 'public', 'lilypond' ) + t
456 if os.environ.has_key('TMP'):
457 this.__set('tmp',os.environ['TMP'],'environment')
460 fd=this.get_texfile_path ('titledefs.tex')
463 for line in fd.readlines():
464 m=re.match('\\\\newcommand\*{\\\\mudela([\w]+)}',line)
466 mudefs.append(m.group(1))
468 this.__set('titledefs', mudefs, 'init')
473 def __set(this,var,value,requester):
475 All of the set methods call this to set a property. If the value
476 was last set by a requestor of lesser priority the new value is
477 assigned, else the old value has priority and is unchanged.
480 if this.__overrideTable[requester] < this.__data[var][1]:
483 this.__data[var] = [value, this.__overrideTable[requester]]
490 All of the get methods call this to get a property value. List
491 variable types are return by value to facilitate an append operation.
494 if var == 'include' or var == 'lilyOutputFiles':
495 return this.__data[var][0][0:] # return a copy not a ref
497 return this.__data[var][0]
502 def get_texfile_path (this, var):
504 locate and open titledefs.tex file
508 cmd =('kpsewhich tex %s %s' % (var,errorlog))
509 pipe = os.popen (cmd, 'r')
510 path = pipe.readline ()[:-1] # chop off \n
511 return_status = pipe.close()
512 if return_status and not path:
513 path = os.path.join(this.get('root'), 'texmf', 'tex',
524 Read initialization file(s)
529 ( 'DEBUG', this.setDebug ),
530 ( 'DEPENDENCIES', this.setDependencies ),
531 ( 'KEEPLILYPOND', this.setKeeplilypond ),
532 ( 'KEEPLY2DVI', this.setKeeply2dvi ),
533 ( 'LANGUAGE', this.setLanguage ),
534 ( 'LATEXHF', this.setHeader ),
535 ( 'LILYINCLUDE', this.setInclude ),
536 ( 'LILYPONDPREFIX', this.setRoot ),
537 ( 'NONUMBER', this.setNonumber ),
538 ( 'ORIENTATION', this.setOrientation ),
539 ( 'OUTPUTDIR', this.setOutput ),
540 ( 'PAPERSIZE', this.setPaperZize ),
541 ( 'PHEIGHT', this.setTextHeight ),
542 ( 'POSTSCRIPT', this.setPostscript ),
543 ( 'PWIDTH', this.setLineWidth ),
544 ( 'SEPARATE', this.setSeparate ),
545 ( 'TMP', this.setTmp ),
548 if ( os.name == 'posix' ):
549 dotFilename='.lilyrc'
550 else: # Windows apps like edit choke on .lilyrc
551 dotFilename='_lilyrc'
553 for d in [os.path.join(this.get('root'),'share','lilypond'), \
554 os.environ['HOME'], os.curdir ]:
555 file=os.path.join(d,dotFilename)
557 fd = open( file, 'r' )
561 for line in fd.readlines():
562 if re.match('#.*',line):
564 m=re.search('([\w]+)=(.*)',line)
567 if m.group(1) == var[0]:
568 var[1](m.group(2),'rcfile')
575 def setPaperZize(this,size,requester):
577 Set paper size properties
581 # regex width height name
582 # ----- ----- ------ ----
583 ( 'a0.*', 2389, 3381, 'a0paper' ),
584 ( 'a1$|a1p.*', 1690, 2389, 'a1paper' ),
585 ( 'a2.*', 1194, 1690, 'a2paper' ),
586 ( 'a3.*', 845, 1194, 'a3paper' ),
587 ( 'a4.*', 597, 845, 'a4paper' ),
588 ( 'a5.*', 423, 597, 'a5paper' ),
589 ( 'a6.*', 298, 423, 'a6paper' ),
590 ( 'a7.*', 211, 298, 'a7paper' ),
591 ( 'a8.*', 305, 211, 'a8paper' ),
592 ( 'a9.*', 105, 305, 'a9paper' ),
593 ( 'a10.*', 74, 105, 'a10paper' ),
594 ( 'b0.*', 2847, 4023, 'b0paper' ),
595 ( 'b1.*', 2012, 2847, 'b1paper' ),
596 ( 'b2.*', 1423, 2012, 'b2paper' ),
597 ( 'b3.*', 1006, 1423, 'b3paper' ),
598 ( 'b4.*', 712, 1006, 'b4paper' ),
599 ( 'b5.*', 503, 712, 'b5paper' ),
600 ( 'archA$', 650, 867, 'archApaper' ),
601 ( 'archB$', 867, 1301, 'archBpaper' ),
602 ( 'archC$', 1301, 1734, 'archCpaper' ),
603 ( 'archD$', 1734, 2602, 'archDpaper' ),
604 ( 'archE$', 2602, 3469, 'archEpaper' ),
605 ( 'flsa$|flse$', 614, 940, 'flsapaper' ),
606 ( 'halfletter$', 397, 614, 'halfletterpaper' ),
607 ( 'ledger$', 1229, 795, 'ledgerpaper' ),
608 ( 'legal$', 614, 1012, 'legalpaper' ),
609 ( 'letter$', 614, 795, 'letterpaper' ),
610 ( 'note$', 542, 723, 'notepaper' )
614 for paper in paperTable:
615 if re.match(paper[0],size):
617 this.__set('pagewidth',paper[1],requester)
618 this.__set('pageheight',paper[2],requester)
619 this.__set('papersize',paper[3],requester)
623 sys.exit('ExitBadPaper',size)
628 def setTextHeight(this,size,requester):
630 Set textheight property
633 m=re.match('([0-9][.0-9]*)(cm|mm|pt|$)',size)
635 if m.group(2) == 'cm':
636 this.__set('textheight',\
637 float(m.group(1)) * 72.27/2.54, requester )
638 elif m.group(2) == 'mm':
639 this.__set('textheight',\
640 float(m.group(1)) * 72.27/25.4, requester )
641 elif m.group(2) == 'pt':
642 this.__set('textheight', float(m.group(1)), requester )
643 elif m.group(2) == '':
644 this.__set('textheight', float(m.group(1)), requester )
646 sys.exit('ExitBadHeight', m.group(2))
648 sys.exit('ExitBadHeight', size)
653 def setLineWidth(this,size,requester):
655 Set linewidth propery
658 m=re.match('([0-9][.0-9]*)(cm|mm|pt|$)',size)
660 if m.group(2) == 'cm':
661 this.__set('linewidth', \
662 float(m.group(1)) * 72.27/2.54, requester )
663 elif m.group(2) == 'mm':
664 this.__set('linewidth', \
665 float(m.group(1)) * 72.27/25.4, requester )
666 elif m.group(2) == 'pt':
667 this.__set('linewidth', float(m.group(1)), requester )
668 elif m.group(2) == '':
669 this.__set('linewidth', float(m.group(1)), requester )
671 sys.exit('ExitBadWidth', m.group(2))
673 sys.exit('ExitBadWidth', size)
678 def setOrientation(this,orient,requester):
680 Set orientation property
683 if orient == 'landscape' or orient == 'portrait':
684 this.__set('orientation', orient, requester )
686 sys.exit('ExitBadOrient', orient)
691 def setLanguage(this,lang,requester):
693 Set language property
696 this.__set('language', '\\usepackage[%s]{babel}' % (lang), requester )
701 def setInclude(this,inc, requester):
703 Append an include path
706 tmp = this.get('include')
708 this.__set('include', tmp, requester )
713 def setDebug(this,value,requester):
715 Set or Clear debug flag
719 this.__set('debug',1,requester)
721 this.__set('debug',0,requester)
726 def setKeeplilypond(this, value, requester):
728 Set or Clear keeplilypond flag
732 this.__set('keeplilypond',1,requester)
734 this.__set('keeplilypond',0,requester)
739 def setKeeply2dvi(this, value, requester):
741 Set or Clear keeply2dvi flag
745 this.__set('keeply2dvi',1,requester)
747 this.__set('keeply2dvi',0,requester)
752 def setNonumber(this, value, requester):
758 this.__set('pagenumber',1,requester)
760 this.__set('pagenumber',0,requester)
765 def setSeparate(this, value, requester):
767 Set or Clear separate flag
771 this.__set('separate',1,requester)
773 this.__set('separate',0,requester)
776 # Set output directory name
778 def setOutput(this,out,requester):
779 this.__set('output',out,requester)
782 # Set latex header name
784 def setHeader(this,head, requester):
785 this.__set('header',head,requester)
788 # Set or Clear Dependencies flag to generate makefile dependencies
790 def setDependencies(this, requester):
792 Set or Clear dependencies flag
796 this.__set('dependencies',1,requester)
798 this.__set('dependencies',0,requester)
803 def setTmp(this,dir, requester):
804 this.__set('tmp',dir,requester)
807 # Set mudela source file name
809 def setFilename(this,file, requester):
810 this.__set('filename',file,requester)
815 def setTitles(this,titles, requester):
816 this.__set('titles',titles,requester)
821 def addLilyOutputFiles(this,filelist,requester):
823 Add a to the lily output list
826 tmp = this.get('lilyOutputFiles')
828 this.__set('lilyOutputFiles',tmp,requester)
831 # Set/Clear postscript flag
833 def setPostscript(this,value,requester):
839 this.__set('postscript',1,requester)
841 this.__set('postscript',0,requester)
846 def setRoot(this,path, requester):
848 Set lilypond root directory
851 os.environ['LILYPONDPREFIX'] = path
852 this.__set('root',path,requester)
857 def printProps(this):
862 for key in this.__data.keys():
863 print "%s <%s>:<%s>" % (key,this.get(key),
864 this.__roverrideTable[this.__data[key][1]])
874 if len(Props.get('include')) > 0:
875 inc = '-I ' + string.join(Props.get('include'),os.pathsep)
878 if Props.get('dependencies'):
885 def writeLilylog(contents):
886 if Props.get('keeplilypond'):
887 file='lilylog.' + str(os.getpid())
888 output = Props.get('output')
890 file = os.path.join( output, file )
892 fd = open( file, 'w' )
894 sys.exit('ExitNoWrite', file)
898 def getTeXFile(contents):
900 for line in string.split(contents,'\n'):
901 m = re.search('^TeX output to (.+)\.\.\.', line)
903 texfiles.append(m.group(1))
906 sys.exit('ExitNoTeXName')
911 return name + ' ' + version;
916 return os.environ['MAILADDRESS']
918 return '(address unknown)'
922 sys.stderr.write (program_id () + '\n')
926 'Generate dvi file from mudela or lilypond output\n'
927 'Usage: ' + name + ' [OPTION]... [FILE]...\n'
930 ' -D,--debug increase verbosity\n'
931 ' -F,--headers= name of additional LaTeX headers file\n'
932 ' -H,--Height= set paper height (points) (see manual page)\n'
933 ' -I,--include=DIR add DIR to LilyPond\'s search path\n'
934 ' -K,--keeplilypond keep lilypond output files\n'
935 ' -L,--landscape set landscape orientation\n'
936 ' -N,--nonumber switch off page numbering\n'
937 ' -O,--orientation= set orientation (obsolete - use -L instead)\n'
938 ' -P,--postscript generate postscript file\n'
939 ' -W,--Width= set paper width (points) (see manual page)\n'
940 ' -d,--dependencies tell lilypond make a dependencies file\n'
941 ' -h,--help this help text\n'
942 ' -k,--keeply2dvi keep ly2dvi output files\n'
943 ' -l,--language= give LaTeX language (babel)\n'
944 ' -o,--output= set output directory\n'
945 ' -p,--papersize= give LaTeX papersize (eg. a4)\n'
946 ' -s,--separate run all files separately through LaTeX\n'
948 'files may be (a mix of) input to or output from lilypond(1)\n'
958 """Generate dvi files from lilypond source/output"""
961 outfile = TeXOutput()
964 (options, files) = getopt.getopt (sys.argv[1:],
965 'DF:H:I:KLNPW:dhkl:o:p:s',
966 ['debug', 'headers=', 'Height=',
967 'include=', 'keeplilypond', 'landscape',
968 'nonumber', 'Width=', 'dependencies',
969 'help', 'keeply2dvi', 'language=',
970 'output=', 'papersize=', 'separate',
975 if o == '--debug' or o == '-D':
976 Props.setDebug(1,'commandline')
977 elif o == '--headers' or o == '-F':
978 Props.setHeader(a,'commandline')
979 elif o == '--include' or o == '-I':
980 Props.setInclude(a,'commandline')
981 elif o == '--Height' or o == '-H':
982 Props.setTextHeight(a,'commandline')
983 elif o == '--keeplilypond' or o == '-K':
984 Props.setKeeplilypond(1,'commandline')
985 elif o == '--landscape' or o == '-L':
986 Props.setOrientation('landscape','commandline')
987 elif o == '--nonumber' or o == '-N':
988 Props.setNonumber('commandline')
989 elif o == '--Width' or o == '-W':
990 Props.setLineWidth(a,'commandline')
991 elif o == '--dependencies' or o == '-d':
992 Props.setDependencies(1,'commandline')
993 elif o == '--help' or o == '-h':
996 elif o == '--keeply2dvi' or o == '-k':
997 Props.setKeeply2dvi(1,'commandline')
998 elif o == '--language' or o == '-l':
999 Props.setLanguage(a,'commandline')
1000 elif o == '--output' or o == '-o':
1001 Props.setOutput(a,'commandline')
1002 elif o == '--papersize' or o == '-p':
1003 Props.setPaperZize(a,'commandline')
1004 elif o == '--separate' or o == '-s':
1005 Props.setSeparate(1,'commandline')
1006 elif o == '--postscript' or o == '-P':
1007 Props.setPostscript(1,'commandline')
1012 type = infile.type()
1014 if type == 'source':
1015 cmd = 'lilypond %s %s 2>&1' % (getLilyopts(), file)
1016 fd = os.popen( cmd , 'r' )
1021 sys.stderr.write( line )
1025 sys.exit('ExitBadLily', cmd )
1026 texFiles=getTeXFile(log)
1028 Props.addLilyOutputFiles(texFiles,'program')
1029 texInputFiles = texInputFiles + texFiles
1031 texInputFiles.append(file)
1034 for file in texInputFiles:
1036 infile.setVars() # first pass set variables
1038 if Props.get('debug'):
1047 if Props.get('separate'):
1051 if not Props.get('separate'):
1055 sys.exit('ExitBadArgs','No files specified')
1061 'ExitInterupt' : ['Ouch!', 1 ],
1062 'ExitBadArgs' : ['Wrong number of arguments', 2 ],
1063 'ExitNotFound' : ['File not found', 3 ],
1064 'ExitBadPaper' : ['Unknown papersize', 4 ],
1065 'ExitBadHeight' : ['Invalid Height specification', 5 ],
1066 'ExitBadWidth' : ['Invalid Width specification', 6 ],
1067 'ExitBadOrient' : ['Invalid Orientation specification', 7 ],
1068 'ExitNoWrite' : ['Permission denied', 8 ],
1069 'ExitNoTeXName' : ['hmm, I could not find an output file name', 9 ],
1070 'ExitBadLily' : ['Lilypond failed', 10 ],
1071 'ExitBadLatex' : ['Latex failed', 11 ],
1072 'ExitBadPostscript' : ['Postscript failed', 12 ],
1073 'ExitUnknown' : ['Unknown Exit Code', 20 ],
1079 if not Props.get('keeplilypond'):
1080 lilyfiles = Props.get('lilyOutputFiles')
1081 if not Props.get('keeply2dvi'):
1082 tmpfiles = glob.glob('*.' + str(os.getpid()) + '.*' )
1083 for file in lilyfiles + tmpfiles:
1084 if os.path.isfile(file):
1089 Props = Properties()
1094 except KeyboardInterrupt:
1095 print ExitTable['ExitInterupt'][0]
1097 sys.exit(ExitTable['ExitInterupt'][1])
1099 except SystemExit, errno:
1100 if ExitTable.has_key(errno.args[0]):
1101 msg = ExitTable[errno.args[0]]
1103 msg = ExitTable['ExitUnknown']
1104 if len(errno.args) > 1:
1105 sys.stderr.write( '%s: %s: %s\n' % (name, msg[0], errno.args[1]))
1107 sys.stderr.write( '%s %s\n' % (name, msg[0]))
1108 if Props.get('debug'):