initial commit of bin scripts into git
This commit is contained in:
122
tkbib1.0/Notes
Normal file
122
tkbib1.0/Notes
Normal file
@@ -0,0 +1,122 @@
|
||||
#CLIP+2000_01_14+TEXT+1+2000/01/15 00:01:37+79.0+#
|
||||
Found the BibTex docs in /usr/lib/texmf/texmf/doc/bibtex/base; need
|
||||
to print those out, so that I can do hackery in an intelligent
|
||||
fashion. Hmmmm.
|
||||
|
||||
article
|
||||
req author title journal year
|
||||
opt volume number pages month note
|
||||
|
||||
book
|
||||
req {author or editor} title publisher year
|
||||
opt volume number series address edition month note
|
||||
|
||||
booklet
|
||||
req title
|
||||
opt author howpublished address month year note
|
||||
|
||||
conference -- same as inproceedings
|
||||
|
||||
inbook
|
||||
req author title {chapter and/or pages} publisher year
|
||||
opt volume number series type address edition month note
|
||||
|
||||
incollection
|
||||
req author title booktitle publisher year
|
||||
opt editor {volume or number} series type chapter pages address edition
|
||||
month note
|
||||
|
||||
inproceedings
|
||||
req author title booktitle year
|
||||
opt editor volume number series pages address month organization publisher
|
||||
note
|
||||
|
||||
manual
|
||||
req title
|
||||
opt author organization address edition month year note
|
||||
|
||||
mastersthesis
|
||||
req author title school year
|
||||
opt type address month note
|
||||
|
||||
misc
|
||||
req
|
||||
opt author title howpublished month year note
|
||||
|
||||
phdthesis
|
||||
req author title school year
|
||||
opt type address month note
|
||||
|
||||
proceedings
|
||||
req title year
|
||||
opt editor volume number series address month organization
|
||||
publisher note
|
||||
|
||||
techreport
|
||||
req author title institution year
|
||||
opt type number address month note
|
||||
|
||||
unpublished
|
||||
req author title note
|
||||
opt month year
|
||||
|
||||
----------------
|
||||
Ok, here's the plan. There's a main window that lists all the
|
||||
current cite keys, and an edit window, in which we automagically
|
||||
enter new ones (this is by default closed),
|
||||
|
||||
---
|
||||
Midnight. Ok, hacked into "test" an automagic window creator, and that
|
||||
seems to work like a champ. Need to glue that into the current tkbib,
|
||||
and I think I'll have something.
|
||||
|
||||
Fcns that are needed:
|
||||
Static uneditable window for browsing
|
||||
Window to accumulate citations, with various sort options
|
||||
--> by index value, name, year, ....
|
||||
Editing window: buttons along the top for new entries of various
|
||||
types, with a "done" button at the bottom.
|
||||
Save: if a field contains spaces/CR, hyphens... put quotes around it.
|
||||
#CLIP+2000_01_15+TEXT+80+2000/01/15 15:57:57+16.0+#
|
||||
3pm
|
||||
Ok, most of the code is working. Seem to load in and save w/o too
|
||||
much problem. Should streamline the code a bit, and add some comments.
|
||||
|
||||
--
|
||||
Ok, hacked a very simple bibfile stripper, which cvts multi-line
|
||||
entries into single line entries. Seems to work, and not have too
|
||||
many problems. Much less grief now.
|
||||
|
||||
Need to add an AutoRevise switch, and next/previous buttons for
|
||||
the edit window. The search window should be easy to do....
|
||||
----
|
||||
4pm
|
||||
Search window is going. Need to build a list for the entries that I
|
||||
find, and allow a revision.... I'm getting crosseyed, though...
|
||||
#CLIP+2000_01_21+TEXT+96+2000/01/21 12:46:19+8.0+#
|
||||
12:45pm
|
||||
Hacked in some checking so that duplicate cite keys are skipped, and
|
||||
the search window has a lot more cool features (search/filter/merge, and
|
||||
we can save the entries listed in the search window).
|
||||
|
||||
Fixed up the GFX for the about window; now to pepper the code with a
|
||||
little more explanation of what's going on, clean up, and ship....
|
||||
#CLIP+2000_01_29+TEXT+104+2000/01/29 20:46:31+15.0+#
|
||||
Added in a bracket counter from Peter Baum (had to tweak it a little bit;
|
||||
not sure if it was a change in the Wish fcns, or a bug in the code).
|
||||
The main tkBib window looks a bit nicer, too...
|
||||
|
||||
---
|
||||
Also added in code to block deletes of the terminal and search window,
|
||||
and to do a dismiss on close for the edit window.
|
||||
----
|
||||
8:45pm
|
||||
Added in double quotes to most entries; for page numbers where I have
|
||||
a letter (and not just a number), it was screwing things up. The only
|
||||
things that get passed through now without quotes are the month and booktitle
|
||||
(which I almost always abbreviate, using something out of the terms).
|
||||
#CLIP+2000_02_18+TEXT+118+2000/02/18 19:49:56+5.0+#
|
||||
Set things up so that it opens the bib provided on the cmd line....
|
||||
Need to hack in editing of the keyword expansions, and some sort
|
||||
of ability to delete keys.
|
||||
#CLIP+pre+TEXT+1+#
|
||||
16
tkbib1.0/README
Normal file
16
tkbib1.0/README
Normal file
@@ -0,0 +1,16 @@
|
||||
TKBIB 1.0 -- a bib file editor for LaTeX
|
||||
|
||||
If you use LaTeX to compose technical papers, you're probably familiar
|
||||
with bibtex. The bib files used by bibtex contain the citations, and these
|
||||
files can get large, messy, and are difficult to deal with. I was using
|
||||
bibcard a few years ago, but without an X11 Motif library, keeping the
|
||||
code running on my various machines was a pain. Thus, I put on a pot
|
||||
of coffee, and threw together a Tcl/Tk based bib file editor. This software
|
||||
is released under the Gnu Public License; it comes with no warranty
|
||||
(make backups of your bib files!), and you're free to use, modify,
|
||||
and improve it any way you see fit. Send any questions or comments to
|
||||
pmadden@cs.binghamton.edu. Current versions will be maintained at
|
||||
<http://vlsicad.cs.binghamton.edu/~pmadden/tkbib>.
|
||||
|
||||
More documentation should be in tkbib.html.
|
||||
#CLIP+pre+TEXT+1+2000/01/21 13:31:03+16.0+#
|
||||
100
tkbib1.0/about.tcl
Normal file
100
tkbib1.0/about.tcl
Normal file
@@ -0,0 +1,100 @@
|
||||
#!/usr/bin/wish
|
||||
|
||||
# about dialog box (actually lifted from edge editor)
|
||||
# Copyright (c) 2000 Patrick H. Madden
|
||||
# SUNY Binghamton Computer Science Dept
|
||||
# pmadden@cs.binghamton.edu
|
||||
# http://vlsicad.cs.binghamton.edu/~pmadden
|
||||
# The latest version should be available at
|
||||
# http://vlsicad.cs.binghamton.edu/~pmadden/tkbib
|
||||
|
||||
#
|
||||
# This file is part of tkbib
|
||||
#
|
||||
# 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, 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; see the file COPYING. If not, write to
|
||||
# the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||
# Boston, MA 02111-1307, USA.
|
||||
#CLIP+switchFrame+TEXT+28+Wed May 22 15:12:53 PDT 1996+4.40+#
|
||||
# switchFrame w -- bargain basement animation! When the after ticker ticks,
|
||||
# we get called, and can swap the image on the About dialog! Fun fun fun!
|
||||
proc switchFrame {w} {
|
||||
global image_count image_max images delay
|
||||
|
||||
# The image counter will be set to -1 when the dialog closes
|
||||
if {$image_count == -1} return
|
||||
|
||||
$w config -image images($image_count)
|
||||
incr image_count
|
||||
if {$image_count == $image_max} {set image_count 0}
|
||||
|
||||
after $delay "switchFrame $w"
|
||||
}
|
||||
#CLIP+aboutDialog+TEXT+43+2000/01/21 11:47:30+21.0+#
|
||||
# aboutDialog -- opens up a dialog to tell you all about the editor, and
|
||||
# lets you watch some truly stunning animation.
|
||||
proc aboutDialog {} {
|
||||
global button version image_count images imagelogo
|
||||
|
||||
toplevel .about -class Dialog
|
||||
wm title .about "About TkBib $version"
|
||||
wm iconname .about Dialog
|
||||
frame .about.top -relief raised -bd 1
|
||||
pack .about.top -side top -fill both
|
||||
frame .about.bot -relief raised -bd 1
|
||||
pack .about.bot -side bottom -fill both
|
||||
|
||||
set m "TkBib $version
|
||||
A LaTeX bib file editor
|
||||
(c) 2000 Patrick H. Madden
|
||||
SUNY Binghamton CSD
|
||||
pmadden@cs.binghamton.edu
|
||||
http://vlsicad.cs.binghamton.edu/~pmadden
|
||||
Released under the Gnu Public License"
|
||||
message .about.top.msg -width 4i -text $m
|
||||
label .about.top.l -image images(0)
|
||||
label .about.top.r -image imagelogo
|
||||
pack .about.top.l .about.top.msg .about.top.r \
|
||||
-side left -expand 1 -fill both\
|
||||
-padx 3m -pady 3m
|
||||
button .about.bot.ok -text "OK!" -command "set button 1"
|
||||
pack .about.bot.ok
|
||||
|
||||
set oldFocus [focus]
|
||||
grab set .about
|
||||
focus .about
|
||||
|
||||
set image_count 0
|
||||
switchFrame .about.top.l
|
||||
|
||||
tkwait variable button
|
||||
set image_count -1
|
||||
destroy .about
|
||||
focus $oldFocus
|
||||
return $button
|
||||
}
|
||||
#CLIP+setup_about+TEXT+86+1999/12/16 22:34:47+4.0+#
|
||||
# Various things to set up the about dialog so that we can call it
|
||||
# from the main window menu bar.
|
||||
|
||||
set delay 1000
|
||||
# Load up the list so that when the dialog opens, various propaganda
|
||||
# images will be blasted at unsuspecting users.
|
||||
set image_count 0
|
||||
foreach f $aboutlist {
|
||||
image create photo images($image_count) -file $f
|
||||
incr image_count
|
||||
}
|
||||
set image_max $image_count
|
||||
image create photo imagelogo -file $aboutlogo
|
||||
#CLIP+pre+TEXT+1+2000/01/20 20:16:41+3.53+#
|
||||
BIN
tkbib1.0/graphics/cs-logo2.gif
Normal file
BIN
tkbib1.0/graphics/cs-logo2.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
BIN
tkbib1.0/graphics/photo3.gif
Normal file
BIN
tkbib1.0/graphics/photo3.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
BIN
tkbib1.0/graphics/tree.gif
Normal file
BIN
tkbib1.0/graphics/tree.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.4 KiB |
BIN
tkbib1.0/graphics/watson.gif
Normal file
BIN
tkbib1.0/graphics/watson.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.4 KiB |
321
tkbib1.0/sample.bib
Normal file
321
tkbib1.0/sample.bib
Normal file
@@ -0,0 +1,321 @@
|
||||
@string{mcmc = "Proc. IEEE Multi-Chip Module Conf."}
|
||||
@string{lped = "Proc. Int. Symp. on Low Power Electronics and Design"}
|
||||
@string{iccad = "Proc. Int. Conf. on Computer Aided Design"}
|
||||
@string{eurodac = "Proc. European Design Automation Conf."}
|
||||
@string{edtc = "Proc. European Design and Test Conf."}
|
||||
@string{aspdac = "Proc. Asia South Pacific Design Automation Conf."}
|
||||
@string{dac = "Proc. Design Automation Conf"}
|
||||
@string{iccd = "Proc. IEEE Int. Conf. on Computer Design"}
|
||||
@string{todaes = "ACM Trans. on Design Automation of Electronics Systems"}
|
||||
@string{tcad = "IEEE Trans. on Computer-Aided Design of Integrated Circuits andSystems"}
|
||||
@string{tcs = "IEEE Trans. on Circuits and Systems"}
|
||||
@string{tvlsi = "IEEE Trans. on Very Large Scale Integration (VLSI) Systems"}
|
||||
@string{tcomp = "IEEE Trans. on Computers"}
|
||||
@string{integration = "Integration, the VLSI Journal"}
|
||||
@string{iscas = "Proc. IEEE Int. Symp. on Circuits and Systems"}
|
||||
@string{ispd = "Proc. Int. Symp. on Physical Design"}
|
||||
@string{uclacsd = "UCLA CS Dept"}
|
||||
@string{iwrsp="Int. Workshop on Rapid System Prototyping"}
|
||||
@string{iretec="IRE Trans. on Electronic Computers"}
|
||||
@string{algorithmica="Algorithmica"}
|
||||
@string{ieepcds="IEEE Proc.-Circuits Devices Syst."}
|
||||
@string{ipl="Information Processing Letters"}
|
||||
@string{icvlsi="Int'l Conf. on VLSI Design"}
|
||||
@string{mcmc = "Proc. IEEE Multi-Chip Module Conf."}
|
||||
@string{lped = "Proc. Int. Symp. on Low Power Electronics and Design"}
|
||||
@string{iccad = "Proc. Int. Conf. on Computer Aided Design"}
|
||||
@string{eurodac = "Proc. European Design Automation Conf."}
|
||||
@string{edtc = "Proc. European Design and Test Conf."}
|
||||
@string{aspdac = "Proc. Asia South Pacific Design Automation Conf."}
|
||||
@string{dac = "Proc. Design Automation Conf"}
|
||||
@string{iccd = "Proc. IEEE Int. Conf. on Computer Design"}
|
||||
@string{todaes = "ACM Trans. on Design Automation of Electronics Systems"}
|
||||
@string{tcad = "IEEE Trans. on Computer-Aided Design of Integrated Circuits andSystems"}
|
||||
@string{tcs = "IEEE Trans. on Circuits and Systems"}
|
||||
@string{tvlsi = "IEEE Trans. on Very Large Scale Integration (VLSI) Systems"}
|
||||
@string{tcomp = "IEEE Trans. on Computers"}
|
||||
@string{integration = "Integration, the VLSI Journal"}
|
||||
@string{iscas = "Proc. IEEE Int. Symp. on Circuits and Systems"}
|
||||
@string{ispd = "Proc. Int. Symp. on Physical Design"}
|
||||
@string{uclacsd = "UCLA CS Dept"}
|
||||
@string{mcmc = "Proc. IEEE Multi-Chip Module Conf."}
|
||||
@string{lped = "Proc. Int. Symp. on Low Power Electronics and Design"}
|
||||
@string{iccad = "Proc. Int. Conf. on Computer Aided Design"}
|
||||
@string{eurodac = "Proc. European Design Automation Conf."}
|
||||
@string{edtc = "Proc. European Design and Test Conf."}
|
||||
@string{aspdac = "Proc. Asia South Pacific Design Automation Conf."}
|
||||
@string{dac = "Proc. Design Automation Conf"}
|
||||
@string{iccd = "Proc. IEEE Int. Conf. on Computer Design"}
|
||||
@string{todaes = "ACM Trans. on Design Automation of Electronics Systems"}
|
||||
@string{tcad = "IEEE Trans. on Computer-Aided Design of Integrated Circuits andSystems"}
|
||||
@string{tcs = "IEEE Trans. on Circuits and Systems"}
|
||||
@string{tvlsi = "IEEE Trans. on Very Large Scale Integration (VLSI) Systems"}
|
||||
@string{tcomp = "IEEE Trans. on Computers"}
|
||||
@string{integration = "Integration, the VLSI Journal"}
|
||||
@string{iscas = "Proc. IEEE Int. Symp. on Circuits and Systems"}
|
||||
@string{ispd = "Proc. Int. Symp. on Physical Design"}
|
||||
@string{uclacsd = "UCLA CS Dept"}
|
||||
@string{mcmc = "Proc. IEEE Multi-Chip Module Conf."}
|
||||
@string{lped = "Proc. Int. Symp. on Low Power Electronics and Design"}
|
||||
@string{iccad = "Proc. Int. Conf. on Computer Aided Design"}
|
||||
@string{eurodac = "Proc. European Design Automation Conf."}
|
||||
@string{edtc = "Proc. European Design and Test Conf."}
|
||||
@string{aspdac = "Proc. Asia South Pacific Design Automation Conf."}
|
||||
@string{dac = "Proc. Design Automation Conf"}
|
||||
@string{iccd = "Proc. IEEE Int. Conf. on Computer Design"}
|
||||
@string{todaes = "ACM Trans. on Design Automation of Electronics Systems"}
|
||||
@string{tcad = "IEEE Trans. on Computer-Aided Design of Integrated Circuits andSystems"}
|
||||
@string{tcs = "IEEE Trans. on Circuits and Systems"}
|
||||
@string{tvlsi = "IEEE Trans. on Very Large Scale Integration (VLSI) Systems"}
|
||||
@string{tcomp = "IEEE Trans. on Computers"}
|
||||
@string{integration = "Integration, the VLSI Journal"}
|
||||
@string{iscas = "Proc. IEEE Int. Symp. on Circuits and Systems"}
|
||||
@string{ispd = "Proc. Int. Symp. on Physical Design"}
|
||||
@string{uclacsd = "UCLA CS Dept"}
|
||||
@string{mcmc = "Proc. IEEE Multi-Chip Module Conf."}
|
||||
@string{lped = "Proc. Int. Symp. on Low Power Electronics and Design"}
|
||||
@string{iccad = "Proc. Int. Conf. on Computer Aided Design"}
|
||||
@string{eurodac = "Proc. European Design Automation Conf."}
|
||||
@string{edtc = "Proc. European Design and Test Conf."}
|
||||
@string{aspdac = "Proc. Asia South Pacific Design Automation Conf."}
|
||||
@string{dac = "Proc. Design Automation Conf"}
|
||||
@string{iccd = "Proc. IEEE Int. Conf. on Computer Design"}
|
||||
@string{todaes = "ACM Trans. on Design Automation of Electronics Systems"}
|
||||
@string{tcad = "IEEE Trans. on Computer-Aided Design of Integrated Circuits andSystems"}
|
||||
@string{tcs = "IEEE Trans. on Circuits and Systems"}
|
||||
@string{tvlsi = "IEEE Trans. on Very Large Scale Integration (VLSI) Systems"}
|
||||
@string{tcomp = "IEEE Trans. on Computers"}
|
||||
@string{integration = "Integration, the VLSI Journal"}
|
||||
@string{iscas = "Proc. IEEE Int. Symp. on Circuits and Systems"}
|
||||
@string{ispd = "Proc. Int. Symp. on Physical Design"}
|
||||
@string{uclacsd = "UCLA CS Dept"}
|
||||
@conference{AlDe97:segment,
|
||||
author="C. J. Alpert and A. Devgan",
|
||||
title="Wire Segmenting for Improved Buffer Insertion",
|
||||
booktitle=dac,
|
||||
year=1997,
|
||||
note="to appear",
|
||||
}
|
||||
|
||||
@conference{AlHH93:ahhk,
|
||||
title="A Direct Combination of the {P}rim and {D}ijkstra Constructions for Improved Performance-Driven Global Routing",
|
||||
author="Alpert, C. J. and Hu, T. C. and Huang, J. H. and Kahng, A. B.",
|
||||
booktitle=iscas,
|
||||
year=1993,
|
||||
pages="1869--1872",
|
||||
}
|
||||
|
||||
@conference{AlHK97,
|
||||
author="C. J. Alpert and J.-H. Huang and A. B. Kahng",
|
||||
title="Multilevel Circuit Partitioning",
|
||||
booktitle=dac,
|
||||
pages="530-533",
|
||||
year=1997,
|
||||
}
|
||||
|
||||
@article{AlKa95,
|
||||
author="C. J. Alpert and A. B. Kahng",
|
||||
title="Recent Directions in Netlist Partitioning: A Survey",
|
||||
journal=integration,
|
||||
pages="1-81",
|
||||
year=1995,
|
||||
}
|
||||
|
||||
@conference{Alpert98,
|
||||
author="C. J. Alpert",
|
||||
title="The ISPD98 Circuit Benchmark Suite",
|
||||
booktitle=ispd,
|
||||
pages="80-85",
|
||||
year=1998,
|
||||
}
|
||||
|
||||
@conference{AoKu83:route,
|
||||
author="K. Aoshima and E. S. Kuh",
|
||||
title="Multi-Channel Optimization in Gate-Array LSI Layout",
|
||||
booktitle=iscas,
|
||||
year=1983,
|
||||
pages="1005-1008",
|
||||
}
|
||||
|
||||
@conference{AwBP90:communication,
|
||||
author="B. Awerbuch and A. Baratz and D. Peleg",
|
||||
title="Cost-Sensitive Analysis of Communication Protocols",
|
||||
booktitle="Proc. ACM Symp. Principles of Distributed Computing",
|
||||
year=1990,
|
||||
pages="177-187",
|
||||
}
|
||||
|
||||
@book{Ba90:interconnect,
|
||||
title="Circuits, Interconnections, and Packaging for {VLSI}",
|
||||
author="Bakoglu, H. B.",
|
||||
publisher="Addison-Wesley",
|
||||
year=1990,
|
||||
}
|
||||
|
||||
@conference{BaWM86:htree,
|
||||
title="A Symmetric Clock-Distribution Tree and Optimized High-Speed Interconnections for Reduced Clock Skew in {ULSI} and {WSI} Circuits",
|
||||
author="Bakoglu, H. B. and Walker, J. T. and Meindl, J. D.",
|
||||
booktitle=iccd,
|
||||
year=1986,
|
||||
pages="118-122",
|
||||
}
|
||||
|
||||
@article{Be88:steiner,
|
||||
author="M. W. Bern",
|
||||
title="Two Probabilistic Results on Rectilinear {Steiner} Trees",
|
||||
journal=Algorithmica,
|
||||
year=1988,
|
||||
volume=3,
|
||||
pages="191-204",
|
||||
}
|
||||
|
||||
@conference{BeBJ94:sizing,
|
||||
author="M. Berkelaar and P. Buurman and J. Jess",
|
||||
title="Computing the Entire Active Area/Power Consumption versus Delay Trade-off Curve for Gate Sizing with a Piecewise Linear Simulator",
|
||||
booktitle=iccad,
|
||||
year=1994,
|
||||
pages="474-480",
|
||||
}
|
||||
|
||||
@conference{BeJe90:sizing,
|
||||
title="Gate Sizing in {MOS} Digital Circuits with Linear Programming",
|
||||
author="Berkelaar, M. and Jess, J.",
|
||||
booktitle=eurodac,
|
||||
year=1990,
|
||||
pages="217-221",
|
||||
}
|
||||
|
||||
@conference{BoCK92:resistratio,
|
||||
title="On High-Speed VLSI Interconnects: Analysis and Design",
|
||||
author="K. D. Boese and J. Cong and A. B. Kahng and K. S. Leung and D. Zhou",
|
||||
booktitle="Proc. Asia-Pacific Conf. on Circuits and Systems",
|
||||
year=1992,
|
||||
pages="35-40",
|
||||
}
|
||||
|
||||
@conference{BoKM93:fidelity,
|
||||
title="Fidelity and Near-Optimality of {E}lmore-Based Routing Constructions",
|
||||
author="Boese, K. D. and Kahng, A. B. and McCoy, B. A. and Robins, G.",
|
||||
booktitle=iccd,
|
||||
year=1993,
|
||||
pages="81-84",
|
||||
}
|
||||
|
||||
@conference{BoKM94:sert,
|
||||
title="Rectilinear {S}teiner Trees with Minimum {E}lmore Delay",
|
||||
author="Boese, K. D. and Kahng, A. B. and McCoy, B. A. and Robins, G.",
|
||||
booktitle=dac,
|
||||
year=1994,
|
||||
pages="381-386",
|
||||
}
|
||||
|
||||
@article{BoKM95:sert,
|
||||
title="Near-Optimal Critical Sink Routing Tree Constructions",
|
||||
author="Boese, K. D. and Kahng, A. B. and McCoy, B. A. and Robins, G.",
|
||||
journal=tcad,
|
||||
volume=14,
|
||||
number=12,
|
||||
pages="1417-1436",
|
||||
year=1995,
|
||||
month=dec,
|
||||
}
|
||||
|
||||
@conference{BoKR93:csrt,
|
||||
title="High-performance routing trees with identified critical sinks",
|
||||
author="Boese, K. D. and Kahng, A. B. and Robins, G.",
|
||||
booktitle=dac,
|
||||
year=1993,
|
||||
pages="182-187",
|
||||
}
|
||||
|
||||
@conference{BoKa92:zero,
|
||||
title="Zero-Skew Clock Routing Trees With Minimum Wirelength",
|
||||
author="Boese, K. D. and Kahng, A. B.",
|
||||
booktitle="Proc. IEEE Int. ASIC Conf.",
|
||||
year=1992,
|
||||
month=sep,
|
||||
pages="1.1.1-1.1.5",
|
||||
}
|
||||
|
||||
@article{BoOI94:edge,
|
||||
title="An Edge-Based Heuristic for {S}teiner Routing",
|
||||
author="Borah, M. and Owens, R. M. and Irwin, M. J.",
|
||||
journal=tcad,
|
||||
volume=13,
|
||||
number=12,
|
||||
year=1994,
|
||||
month=dec,
|
||||
pages="1563-1568",
|
||||
}
|
||||
|
||||
@conference{BoOI95:sizing,
|
||||
author="M. Borah and R. M. Owens and M. J. Irwin",
|
||||
title="Transistor Sizing for Minimizing Power Consumption of {CMOS} Circuit under Delay Constraint",
|
||||
booktitle="Proc. Int. Symp. on Lower Power Design",
|
||||
year=1995,
|
||||
pages="167-172",
|
||||
}
|
||||
|
||||
@article{BoOI96:sizing,
|
||||
author="M. Borah and R. M. Owens and M. J. Irwin",
|
||||
title="Transistor Sizing for Low Power {CMOS} Circuits",
|
||||
journal=tcad,
|
||||
year=1996,
|
||||
month=jun,
|
||||
volume=15,
|
||||
number=6,
|
||||
pages="665-671",
|
||||
}
|
||||
|
||||
@article{Br86:obdd,
|
||||
title="Graph-based algorithms for Boolean function Manipulation",
|
||||
author="Bryant, R.E.",
|
||||
journal=tcomp,
|
||||
volume="C-35",
|
||||
number=8,
|
||||
pages="677-691",
|
||||
}
|
||||
|
||||
@conference{BrBK89:benchmark,
|
||||
title="Combinational Profiles of Sequential Benchmark Circuits",
|
||||
author="Brglez, F. and Bryan, D. and Kozminski, K.",
|
||||
booktitle=iscas,
|
||||
year=1989,
|
||||
pages="1929-1934",
|
||||
}
|
||||
|
||||
@conference{BrBa90:phigure,
|
||||
author="R. J. Brouwer and P. Banerjee",
|
||||
title="PHIGURE: A Parallel Hierarchical Global Router",
|
||||
booktitle=dac,
|
||||
year=1990,
|
||||
pages="650-653",
|
||||
}
|
||||
|
||||
@conference{Breuer77,
|
||||
author="M. A. Breuer",
|
||||
title="A Class of Min-Cut Placement Algorithms",
|
||||
booktitle=dac,
|
||||
pages="284-290",
|
||||
year=1997,
|
||||
}
|
||||
|
||||
@article{BuP83:hierarchical,
|
||||
author="M. Burstein and R. Pelavin",
|
||||
title="Hierarchical Wire Routing",
|
||||
journal=tcad,
|
||||
volume="CAD-2",
|
||||
number=4,
|
||||
month=October,
|
||||
year=1983,
|
||||
pages="223-234",
|
||||
}
|
||||
|
||||
@conference{CaCh91:flow,
|
||||
author="R. C. Carden and C.-K. Cheng",
|
||||
title="A Global Router Using An Efficient Approximate Multicommodity Multiterminal Flow Algorithm",
|
||||
booktitle=dac,
|
||||
year=1991,
|
||||
pages="316-321",
|
||||
}
|
||||
|
||||
187
tkbib1.0/search.tcl
Normal file
187
tkbib1.0/search.tcl
Normal file
@@ -0,0 +1,187 @@
|
||||
# search dialog
|
||||
# Copyright (c) 2000 Patrick H. Madden
|
||||
# SUNY Binghamton Computer Science Dept
|
||||
# pmadden@cs.binghamton.edu
|
||||
# http://vlsicad.cs.binghamton.edu/~pmadden
|
||||
# The latest version should be available at
|
||||
# http://vlsicad.cs.binghamton.edu/~pmadden/tkbib
|
||||
|
||||
#
|
||||
# This file is part of tkbib
|
||||
#
|
||||
# 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, 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; see the file COPYING. If not, write to
|
||||
# the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||
# Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
# Global search results
|
||||
set search_results { }
|
||||
#CLIP+open_search+TEXT+30+2000/01/29 13:12:08+8.0+#
|
||||
# open_search -- Creates the window for searching, and adds
|
||||
# the buttons to allow us to filter/merge/etc.
|
||||
proc open_search { } {
|
||||
toplevel .search
|
||||
# Not allowed to delete search window
|
||||
wm protocol .search WM_DELETE_WINDOW {
|
||||
# No operations
|
||||
}
|
||||
wm title .search "tkbib Search"
|
||||
|
||||
entry .search.e
|
||||
frame .search.fb
|
||||
button .search.fb.s -text "Search" -command search
|
||||
button .search.fb.f -text "Filter" -command filter
|
||||
button .search.fb.m -text "Merge" -command merge
|
||||
button .search.fb.save -text "Save" -command save_search_res
|
||||
|
||||
frame .search.rf
|
||||
listbox .search.rf.l -yscrollcommand ".search.rf.s set"
|
||||
scrollbar .search.rf.s -command ".search.rf.l yview"
|
||||
pack .search.rf.l -in .search.rf -side left -expand 1 -fill both
|
||||
pack .search.rf.s -in .search.rf -side right -fill y
|
||||
|
||||
bind .search.rf.l <Double-Button-1> "edit article \[selection get\]"
|
||||
|
||||
pack .search.e -side top
|
||||
pack .search.fb.s .search.fb.f .search.fb.m .search.fb.save -side left
|
||||
pack .search.fb
|
||||
pack .search.rf -side bottom -expand 1 -fill both
|
||||
}
|
||||
#CLIP+search+TEXT+61+2000/01/21 13:23:39+4.37+#
|
||||
# search -- Runs through all entries, checking to see if anything
|
||||
# in the entry matches the search key. Some day, this'll be field-sensitive,
|
||||
# and allow regular expressions.... Results are listed in the search
|
||||
# list, and the global search_results
|
||||
proc search { } {
|
||||
global entries search_results
|
||||
|
||||
set search_results { }
|
||||
|
||||
# Remove anything from the current list
|
||||
.search.rf.l delete 0 end
|
||||
|
||||
set kw [.search.e get]
|
||||
|
||||
# Check each entry, and if it matches, add it in to the list
|
||||
foreach e $entries {
|
||||
set found 0
|
||||
foreach p $e {
|
||||
if {[string first $kw [lindex $p 1]] > -1} {
|
||||
set found 1
|
||||
}
|
||||
}
|
||||
if {$found} {
|
||||
# puts "Match [lindex [lindex $e 0] 1]"
|
||||
lappend search_results [lindex [lindex $e 0] 1]
|
||||
}
|
||||
}
|
||||
|
||||
foreach cite $search_results {
|
||||
.search.rf.l insert end $cite
|
||||
}
|
||||
}
|
||||
#CLIP+filter+TEXT+94+2000/01/21 13:24:23+2.59+#
|
||||
# filter -- Similar to search, but will only list entries that match the
|
||||
# current term, and were also listed by the previous search
|
||||
proc filter { } {
|
||||
global entries search_results
|
||||
|
||||
set old_search_results $search_results
|
||||
set search_results { }
|
||||
|
||||
# Remove anything from the current list
|
||||
.search.rf.l delete 0 end
|
||||
|
||||
set kw [.search.e get]
|
||||
|
||||
# Check each entry, and if it matches, add it in to the list
|
||||
foreach e $entries {
|
||||
set found 0
|
||||
foreach p $e {
|
||||
if {[string first $kw [lindex $p 1]] > -1} {
|
||||
set found 1
|
||||
}
|
||||
}
|
||||
# If this element was not in the old search results, mark it
|
||||
# as "not found"
|
||||
if {[lsearch $old_search_results [lindex [lindex $e 0] 1]] == -1} {
|
||||
set found 0
|
||||
}
|
||||
if {$found} {
|
||||
# puts "Match [lindex [lindex $e 0] 1]"
|
||||
lappend search_results [lindex [lindex $e 0] 1]
|
||||
}
|
||||
}
|
||||
|
||||
foreach cite $search_results {
|
||||
.search.rf.l insert end $cite
|
||||
}
|
||||
}
|
||||
#CLIP+merge+TEXT+131+2000/01/21 13:24:48+2.50+#
|
||||
# merge -- Similar to search, but does additive listing (so the
|
||||
# old search results are merged with the new ones)
|
||||
proc merge { } {
|
||||
global entries search_results
|
||||
|
||||
set old_search_results $search_results
|
||||
set search_results { }
|
||||
|
||||
# Remove anything from the current list
|
||||
.search.rf.l delete 0 end
|
||||
|
||||
set kw [.search.e get]
|
||||
|
||||
# Check each entry, and if it matches, add it in to the list
|
||||
foreach e $entries {
|
||||
set found 0
|
||||
foreach p $e {
|
||||
if {[string first $kw [lindex $p 1]] > -1} {
|
||||
set found 1
|
||||
}
|
||||
}
|
||||
# If this element was in the old search results, mark it as found
|
||||
if {[lsearch $old_search_results [lindex [lindex $e 0] 1]] >= 0} {
|
||||
set found 1
|
||||
}
|
||||
if {$found} {
|
||||
# puts "Match [lindex [lindex $e 0] 1]"
|
||||
lappend search_results [lindex [lindex $e 0] 1]
|
||||
}
|
||||
}
|
||||
|
||||
foreach cite $search_results {
|
||||
.search.rf.l insert end $cite
|
||||
}
|
||||
}
|
||||
#CLIP+save_search_res+TEXT+167+2000/01/21 13:25:28+3.0+#
|
||||
# save_search_res -- After figuring out the set of entries that we're
|
||||
# interested in, we can save them. Severe abuse of global vars should
|
||||
# be cleaned up at some point.
|
||||
proc save_search_res { } {
|
||||
global entries search_results
|
||||
|
||||
set tmp_entries $entries
|
||||
|
||||
set entries { }
|
||||
foreach e $tmp_entries {
|
||||
if {[lsearch $search_results [lindex [lindex $e 0] 1]] >= 0} {
|
||||
lappend entries $e
|
||||
}
|
||||
}
|
||||
|
||||
save_bib
|
||||
|
||||
set entries $tmp_entries
|
||||
}
|
||||
#CLIP+pre+TEXT+1+2000/01/21 13:22:17+29.22+#
|
||||
653
tkbib1.0/tkbib
Executable file
653
tkbib1.0/tkbib
Executable file
@@ -0,0 +1,653 @@
|
||||
#!/usr/bin/wish
|
||||
|
||||
# tkbib 1.1 main file
|
||||
# Copyright (c) 2000 Patrick H. Madden
|
||||
# SUNY Binghamton Computer Science Dept
|
||||
# pmadden@cs.binghamton.edu
|
||||
# http://vlsicad.cs.binghamton.edu/~pmadden
|
||||
# The latest version should be available at
|
||||
# http://vlsicad.cs.binghamton.edu/~pmadden/tkbib
|
||||
|
||||
# Edit history: first release, Jan 20, 2000
|
||||
# Improvements:
|
||||
# Jan 25, 2000, Peter Baum sent a few cleanups for the
|
||||
# main window, and a multi-line fix for the parser
|
||||
|
||||
|
||||
#
|
||||
# This file is part of tkbib
|
||||
#
|
||||
# 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, 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; see the file COPYING. If not, write to
|
||||
# the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||
# Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
# Check for a command line arg
|
||||
set init_bib ""
|
||||
if {$argc != 0} {
|
||||
set init_bib [lindex $argv 0]
|
||||
}
|
||||
|
||||
# Determine where this code is installed; on UNIX boxes, we may
|
||||
# need to chase a symbolic link to get to the install directory.
|
||||
set ELIB .
|
||||
set curr_dir [pwd]
|
||||
set source [info script]
|
||||
if {[string compare [file type $source] file]} {
|
||||
set source [file readlink $source]
|
||||
}
|
||||
|
||||
set ELIB [file dirname $source]
|
||||
|
||||
# Graphics to put into the "about" dialog box.
|
||||
set aboutlist [list $ELIB/graphics/watson.gif \
|
||||
$ELIB/graphics/photo3.gif \
|
||||
$ELIB/graphics/tree.gif ]
|
||||
set aboutlogo $ELIB/graphics/cs-logo2.gif
|
||||
|
||||
set version "1.0"
|
||||
|
||||
# Load in the other windows
|
||||
source "$ELIB/about.tcl"
|
||||
source "$ELIB/search.tcl"
|
||||
#CLIP+entry_types+TEXT+64+2000/01/21 16:43:09+39.0+#
|
||||
# Global defines for the various accepted fields in Bib files.
|
||||
# This is all extracted from the Bibtex docs; I've added an "index"
|
||||
# field that is used to sort the various papers in my filing cabinet.
|
||||
# There are two types of fields: ft_r are "required", while ft_o are
|
||||
# "optional" -- right now, I don't distinguish (bibtex will scold
|
||||
# you if you're missing a required field.
|
||||
#
|
||||
set reftypes { article conference book proceedings booklet inbook \
|
||||
incollection inproceedings manual techreport \
|
||||
phdthesis mastersthesis unpublished misc}
|
||||
|
||||
set ft_r(article) {article index author title journal year}
|
||||
set ft_o(article) {volume number pages month note keywords url}
|
||||
|
||||
set ft_r(book) {book index author editor title publisher year}
|
||||
set ft_o(book) {volume number series address edition month note keywords url}
|
||||
|
||||
set ft_r(booklet) {booklet index title}
|
||||
set ft_o(booklet) {author howpublished address month year note keywords url }
|
||||
|
||||
set ft_r(inbook) {inbook index author title chapter pages publisher year}
|
||||
set ft_o(inbook) {volume number series type address edition\
|
||||
month note keywords url}
|
||||
|
||||
set ft_r(incollection) {incollection index \
|
||||
author title booktitle publisher year}
|
||||
set ft_o(incollection) {editor volume number series type \
|
||||
chapter pages address edition \
|
||||
month note keywords url}
|
||||
|
||||
set ft_r(inproceedings) {inproceedings index author title booktitle year}
|
||||
set ft_o(inproceedings) {editor volume number series pages \
|
||||
address month organization publisher\
|
||||
note keywords url}
|
||||
|
||||
set ft_r(conference) {conference index author title booktitle year}
|
||||
set ft_o(conference) {editor volume number series pages \
|
||||
address month organization publisher \
|
||||
note keywords url}
|
||||
|
||||
set ft_r(manual) {manual index title}
|
||||
set ft_o(manual) {author organization address edition \
|
||||
month year note keywords url}
|
||||
|
||||
set ft_r(mastersthesis) {mastersthesis index author title school year}
|
||||
set ft_o(mastersthesis) {type address month note keywords url}
|
||||
|
||||
set ft_r(misc) { misc index }
|
||||
set ft_o(misc) { author title howpublished month year note keywords url}
|
||||
|
||||
set ft_r(phdthesis) {phdthesis index author title school year}
|
||||
set ft_o(phdthesis) {type address month note keywords url }
|
||||
|
||||
set ft_r(proceedings) {proceedings index title year}
|
||||
set ft_o(proceedings) {editor volume number series address \
|
||||
month organization publisher note keywords url }
|
||||
|
||||
set ft_r(techreport) {techreport index author title institution year}
|
||||
set ft_o(techreport) {type number address month note keywords url }
|
||||
|
||||
set ft_r(unpublished) {unpublished index author title note}
|
||||
set ft_o(unpublished) {month year keywords url }
|
||||
|
||||
|
||||
|
||||
# Globals to hold all the terminal types (things that are defined
|
||||
# by @string{ }, the entries (all citations), and the keys.
|
||||
|
||||
set terminals { }
|
||||
set entries { }
|
||||
#CLIP+set_initial+TEXT+135+2000/01/21 12:54:30+3.23+#
|
||||
# set_initial -- the edit window has a number of slots to fill
|
||||
# in data, and this sets the initial value to the appropriate
|
||||
# field in the citation
|
||||
proc set_initial { v entry } {
|
||||
# puts "Entry is $entry"
|
||||
|
||||
foreach l $entry {
|
||||
# puts "L is $l"
|
||||
if {[string compare $v [lindex $l 0]] == 0} {
|
||||
return [lindex $l 1]
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
#CLIP+edit_entry+TEXT+150+2000/01/21 12:56:01+4.51+#
|
||||
# edit_entry -- Creates a widget for editing a field of a
|
||||
# citation. Some of these are going to be entries (single line),
|
||||
# while others are small 4-line text windows. Things like author,
|
||||
# title, and note need more space than other fields
|
||||
proc edit_entry { n v init_val } {
|
||||
label .e.f.l$n -text $v
|
||||
|
||||
if {[lsearch {author title note} $v] >= 0} {
|
||||
text .e.f.e$n -width 60 -height 4 -wrap word
|
||||
.e.f.e$n insert 1.1 $init_val
|
||||
} else {
|
||||
entry .e.f.e$n -width 60
|
||||
.e.f.e$n insert 1 $init_val
|
||||
}
|
||||
grid .e.f.l$n -in .e.f -row $n -column 0
|
||||
grid .e.f.e$n -in .e.f -row $n -column 1
|
||||
}
|
||||
#CLIP+edit+TEXT+168+2000/01/29 13:11:11+31.0+#
|
||||
# edit -- Opens an editing window, creates all the widgets to
|
||||
# allow editing, and adds the buttons to either update or dismiss
|
||||
proc edit { deftype key } {
|
||||
global exists
|
||||
global ft_r ft_o
|
||||
global entries
|
||||
|
||||
set current { }
|
||||
set type $deftype
|
||||
|
||||
if {[string compare $key ""]} {
|
||||
foreach e $entries {
|
||||
if {[string compare $key [lindex [lindex $e 0] 1]] == 0} {
|
||||
set current $e
|
||||
set type [lindex [lindex $e 0 ] 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# puts "Found entry $current"
|
||||
|
||||
if {!$exists} {
|
||||
toplevel .e
|
||||
set exists 1
|
||||
} else {
|
||||
destroy .e.f
|
||||
destroy .e.fb
|
||||
}
|
||||
|
||||
wm protocol .e WM_DELETE_WINDOW "edit_done dismiss $key"
|
||||
|
||||
frame .e.f
|
||||
frame .e.fb
|
||||
button .e.fb.done -text "Update" -command "edit_done $type $key"
|
||||
button .e.fb.dis -text "Dismiss" -command "edit_done dismiss $key"
|
||||
wm title .e "Editing $type record"
|
||||
|
||||
grid .e.f
|
||||
|
||||
set n 0
|
||||
foreach v $ft_r($type) {
|
||||
set init_val [set_initial $v $current]
|
||||
edit_entry $n $v $init_val
|
||||
incr n
|
||||
}
|
||||
foreach v $ft_o($type) {
|
||||
set init_val [set_initial $v $current]
|
||||
edit_entry $n $v $init_val
|
||||
incr n
|
||||
}
|
||||
|
||||
pack .e.fb.done -in .e.fb -side left
|
||||
pack .e.fb.dis -in .e.fb -side right
|
||||
pack .e.f .e.fb
|
||||
}
|
||||
#CLIP+value_clean+TEXT+224+2000/01/21 12:58:07+3.0+#
|
||||
# value_clean -- Data that goes into a citation should be stripped
|
||||
# of excess double-quotes, and have newlines converted to spaces (the
|
||||
# double-quotes will get added if needed when we write the bib file out).
|
||||
#
|
||||
proc value_clean { txt } {
|
||||
set txt [string trim $txt]
|
||||
|
||||
# Convert all newlines to spaces
|
||||
regsub -all "\n" $txt " " txt
|
||||
|
||||
regsub "^\"" $txt "" txt
|
||||
|
||||
set len [expr [string length $txt] - 1]
|
||||
if {$len >= 0} {
|
||||
if {[string compare [string index $txt $len] "\""] == 0} {
|
||||
set txt [string range $txt 0 [expr $len - 1]]
|
||||
# puts "Removed second quote"
|
||||
}
|
||||
}
|
||||
return $txt
|
||||
}
|
||||
#CLIP+edit_get+TEXT+246+2000/01/21 12:59:10+5.0+#
|
||||
# edit_get -- When we extract the values from the edit widgets,
|
||||
# we have to use the appropriate functions for either text widgets
|
||||
# or entries. Some fields are bigger than others (see edit_entry
|
||||
# to see where the widgets get created).
|
||||
proc edit_get { n v } {
|
||||
if {[lsearch {author title note} $v] >= 0} {
|
||||
set txt [.e.f.e$n get 1.0 end]
|
||||
} else {
|
||||
set txt [.e.f.e$n get]
|
||||
}
|
||||
|
||||
return [value_clean $txt]
|
||||
}
|
||||
#CLIP+edit_done+TEXT+260+2000/01/21 13:00:27+52.0+#
|
||||
# edit_done -- We've pressed either dismiss or update. If
|
||||
# it's dismiss, just blow away the edit window. If it's update,
|
||||
# pull the values out of the widgets, and insert this into our
|
||||
# list of citations
|
||||
proc edit_done { type oldkey } {
|
||||
global ft_r ft_o entries exists
|
||||
|
||||
if {[string compare $type dismiss] == 0} {
|
||||
destroy .e
|
||||
set exists 0
|
||||
return
|
||||
}
|
||||
|
||||
# We may need to remove an old key, and insert a new one
|
||||
set current_card { }
|
||||
|
||||
set n 0
|
||||
foreach v $ft_r($type) {
|
||||
set value [edit_get $n $v]
|
||||
if {[string compare $value ""]} {
|
||||
lappend current_card [list $v [string trim $value]]
|
||||
}
|
||||
incr n
|
||||
}
|
||||
|
||||
foreach v $ft_o($type) {
|
||||
set value [edit_get $n $v]
|
||||
if {[string compare $value ""]} {
|
||||
lappend current_card [list $v [string trim $value]]
|
||||
}
|
||||
incr n
|
||||
}
|
||||
|
||||
# Maybe replace an entry ?
|
||||
set n 0
|
||||
set found -1
|
||||
foreach e $entries {
|
||||
if {[string compare $oldkey [lindex [lindex $e 0] 1]] == 0} {
|
||||
set found $n
|
||||
}
|
||||
incr n
|
||||
}
|
||||
if {$found >= 0} {
|
||||
set entries [lreplace $entries $found $found]
|
||||
}
|
||||
|
||||
lappend entries $current_card
|
||||
|
||||
# .fc.key_l insert end [lindex [lindex $current_card 0] 1]
|
||||
update_lists
|
||||
|
||||
destroy .e
|
||||
set exists 0
|
||||
}
|
||||
#CLIP+add_term+TEXT+315+2000/01/21 13:00:56+2.71+#
|
||||
# add_term -- Adds an entry for an @string{ } line in
|
||||
# the bib file. Check to make sure we're not duplicating something....
|
||||
proc add_term { term longterm } {
|
||||
global terminals
|
||||
|
||||
if {[lsearch $terminals "$term *"] >= 0} {
|
||||
puts "Duplicate term $term skipped"
|
||||
return
|
||||
}
|
||||
|
||||
lappend terminals [list $term $longterm]
|
||||
}
|
||||
#CLIP+check_cite_key+TEXT+328+2000/01/21 13:20:34+1.16+#
|
||||
# check_cite_key
|
||||
# Check to see if an entry has already been defined. If so, return
|
||||
# 1
|
||||
proc check_cite_key { key } {
|
||||
global entries
|
||||
|
||||
foreach e $entries {
|
||||
if {[string compare $key [lindex [lindex $e 0] 1]] == 0} {
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
return 0
|
||||
}
|
||||
#CLIP+add_citation+TEXT+343+2000/01/21 13:01:39+4.0+#
|
||||
# add_citation -- Adds a citation to the list of entries. Check
|
||||
# to make sure we don't duplicate a cite key (and bitch if this
|
||||
# is duplicated).
|
||||
proc add_citation { card } {
|
||||
global entries
|
||||
|
||||
if {[llength $card] == 0} {
|
||||
return
|
||||
}
|
||||
|
||||
set key [lindex [lindex $card 0] 1]
|
||||
|
||||
if {[check_cite_key $key]} {
|
||||
puts "Skipped duplicate citation for $key"
|
||||
} else {
|
||||
lappend entries $card
|
||||
}
|
||||
}
|
||||
#CLIP+keycmp+TEXT+362+2000/01/21 13:02:23+2.0+#
|
||||
# keycmp -- Compare two citations, to see which should be listed
|
||||
# first. Used by update_lists to sort cite keys
|
||||
proc keycmp { e1 e2 } {
|
||||
|
||||
return [string compare [lindex [lindex $e1 0] 1] [lindex [lindex $e2 0] 1]]
|
||||
}
|
||||
#CLIP+update_lists+TEXT+369+2000/01/21 13:10:53+23.0+#
|
||||
# update_lists -- Go through and sort all citations, adding
|
||||
proc update_lists { } {
|
||||
global terminals entries
|
||||
|
||||
# puts "Sorted: [lsort -command keycmp $entries]"
|
||||
set entries [lsort -command keycmp $entries]
|
||||
|
||||
.fc.key_l delete 0 end
|
||||
.term.ft.term_l delete 0 end
|
||||
foreach pr $terminals {
|
||||
# puts "EXPAND: [lindex $pr 0] --> [lindex $pr 1]"
|
||||
.term.ft.term_l insert end [lindex $pr 0]
|
||||
}
|
||||
foreach e $entries {
|
||||
# puts "Entry $e, length [llength $e]"
|
||||
set etype [lindex $e 0]
|
||||
# puts "Etype is $etype"
|
||||
.fc.key_l insert end [lindex $etype 1]
|
||||
}
|
||||
|
||||
# puts "There are [llength $terminals] terms, [llength $entries] entries"
|
||||
}
|
||||
#CLIP+parse_bib+TEXT+392+2000/01/29 11:59:04+50.14+#
|
||||
# parse_bib -- A very simple Bibfile parser. It assumes that
|
||||
# each field of a bib file entry will be on a single line, among
|
||||
# other things. Chances are good you'll need to hand-edit a bib
|
||||
# file to get it to work with tkbib; I'll probably do a lex-and-yacc
|
||||
# converter at a later date (or maybe work on this tcl/tk parser more).
|
||||
proc parse_bib { fn } {
|
||||
global entries terminals
|
||||
|
||||
set f [open $fn r]
|
||||
|
||||
set current_card {}
|
||||
while {[gets $f line] >= 0} {
|
||||
|
||||
# A string definition of some sort....
|
||||
if {[regexp -nocase "@string\{(.*)=(.*)\}" $line m term longterm]} {
|
||||
add_term $term $longterm
|
||||
continue
|
||||
}
|
||||
|
||||
if {[regexp -nocase "@(.*)\{(.*)," $line m reftype key]} {
|
||||
# puts "Saw entry type $reftype with key $key"
|
||||
# start_entry $reftype $key
|
||||
|
||||
# We may have been working on a previous citation, so
|
||||
# save it and start a new one
|
||||
if {[llength $current_card] > 0} {
|
||||
add_citation $current_card
|
||||
}
|
||||
|
||||
set reftype [string tolower [string trim $reftype]]
|
||||
set key [string trim $key]
|
||||
set current_card [list [list $reftype $key]]
|
||||
continue
|
||||
}
|
||||
|
||||
# This is a line that gets attached to the current citation
|
||||
# pgb if {[regexp "(.*)=(.*)," $line m field value]}
|
||||
if {[regexp {(.*)=(.*)} $line m field value]} {
|
||||
set value [string trim $value]
|
||||
while { [bracketCount $value] != 0 } {
|
||||
if { [gets $f line] < 0 } {
|
||||
puts "Error in parsing \"$field = $value\""
|
||||
return
|
||||
}
|
||||
append value " " [string trim $line]
|
||||
}
|
||||
set value [string trimright $value ","]
|
||||
# end pgb
|
||||
set field [string tolower [string trim $field]]
|
||||
set value [value_clean [string trim $value]]
|
||||
lappend current_card [list $field $value]
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# When we get here, we may have been working on an entry,
|
||||
# so add it to the list.
|
||||
if {[llength $current_card] > 0} {
|
||||
add_citation $current_card
|
||||
}
|
||||
|
||||
update_lists
|
||||
}
|
||||
#CLIP+wr_format+TEXT+457+2000/02/18 19:49:28+18.49+#
|
||||
# wr_format -- Determines if we need to put double-quotes around
|
||||
# an entry, and if so, does it.
|
||||
proc wr_format { key term } {
|
||||
if {[string first " " $term] >= 0} {
|
||||
return \"$term\"
|
||||
}
|
||||
|
||||
if {[string first " " $term] >= 0} {
|
||||
return \"$term\"
|
||||
}
|
||||
|
||||
if {[string first "-" $term] >= 0} {
|
||||
return \"$term\"
|
||||
}
|
||||
|
||||
if {[string first $key "title"] >= 0} {
|
||||
return \{\{$term\}\}
|
||||
}
|
||||
|
||||
# If it is a month or booktitle abbreviation, just return it (Latex
|
||||
# going to expand it).
|
||||
if {[string first $key "month booktitle journal"] >= 0} {
|
||||
return $term
|
||||
}
|
||||
|
||||
return \"$term\"
|
||||
|
||||
}
|
||||
#CLIP+write_bib+TEXT+482+2000/01/29 20:38:09+21.37+#
|
||||
# write_bib -- Outputs all current entries in the standard format.
|
||||
# Assumes we're handed an active file handle....
|
||||
proc write_bib { fn } {
|
||||
global entries terminals
|
||||
|
||||
set f [open $fn w]
|
||||
|
||||
foreach t $terminals {
|
||||
puts $f "@string\{[lindex $t 0]=[lindex $t 1]\}"
|
||||
}
|
||||
|
||||
|
||||
foreach e $entries {
|
||||
set n 0
|
||||
foreach pr $e {
|
||||
if {$n == 0} {
|
||||
puts $f "@[lindex $pr 0]\{[lindex $pr 1],"
|
||||
incr n
|
||||
} else {
|
||||
if {[string compare [lindex $pr 1] ""]} {
|
||||
puts $f " [lindex $pr 0]=[wr_format [lindex $pr 0] [lindex $pr 1]],"
|
||||
}
|
||||
}
|
||||
}
|
||||
puts $f "\}"
|
||||
puts $f ""
|
||||
}
|
||||
|
||||
close $f
|
||||
}
|
||||
#CLIP+open_bib+TEXT+513+2000/01/21 13:19:24+2.37+#
|
||||
# open_bib -- Readins in the bibliography, after getting a file
|
||||
# name from the tk_getOpenFile widget
|
||||
set types {
|
||||
{{BibTex Files} {.bib} }
|
||||
{{All FIles} * }
|
||||
}
|
||||
|
||||
proc open_bib { } {
|
||||
global types
|
||||
|
||||
set fn [tk_getOpenFile -filetypes $types]
|
||||
if {[string compare $fn ""] == 0} {
|
||||
return
|
||||
}
|
||||
parse_bib $fn
|
||||
}
|
||||
#CLIP+save_bib+TEXT+530+2000/01/21 13:19:56+10.2+#
|
||||
# save_bib -- Saves the bibliography (uses tk_getSaveFile widget
|
||||
# to get the file name to save under).
|
||||
proc save_bib { } {
|
||||
global types init_bib
|
||||
|
||||
if { $init_bib == "" } {
|
||||
set fn [tk_getSaveFile -filetypes $types]
|
||||
} else {
|
||||
set fn $init_bib
|
||||
}
|
||||
if {[string compare $fn ""] == 0} {
|
||||
return
|
||||
}
|
||||
write_bib $fn
|
||||
}
|
||||
#CLIP+bracketCount+TEXT+542+2000/01/29 12:13:30+17.0+#
|
||||
# pgb
|
||||
proc bracketCount str {
|
||||
set count 0
|
||||
set index 0
|
||||
|
||||
set s $str
|
||||
while { [set index [string first \{ $s]] >= 0 } {
|
||||
# puts "Found open char at $index"
|
||||
incr count
|
||||
incr index
|
||||
set s [string range $s $index end]
|
||||
}
|
||||
|
||||
set index 0
|
||||
set s $str
|
||||
while { [set index [string first \} $s]] >= 0 } {
|
||||
# puts "Found close char at $index"
|
||||
incr count -1
|
||||
incr index
|
||||
set s [string range $s $index end]
|
||||
}
|
||||
return $count
|
||||
}
|
||||
# end pgb
|
||||
#CLIP+frames+TEXT+567+2000/02/18 19:44:14+78.0+#
|
||||
# frames -- Lots of frame building for the initial windows....
|
||||
# Editing window does not initially exist...
|
||||
set exists 0
|
||||
|
||||
wm title . "tkbib 1.0"
|
||||
|
||||
frame .mbar
|
||||
menubutton .mbar.file -text "File" -menu .mbar.file.m
|
||||
menu .mbar.file.m
|
||||
.mbar.file.m add command -label "Open" -command open_bib
|
||||
.mbar.file.m add command -label "Save" -command save_bib
|
||||
.mbar.file.m add command -label "Quit" -command {save_bib ; exit}
|
||||
|
||||
pack .mbar.file -in .mbar -side left
|
||||
|
||||
menubutton .mbar.about -text Help -menu .mbar.about.m
|
||||
menu .mbar.about.m
|
||||
.mbar.about.m add command -label "About TkBib" -command aboutDialog
|
||||
pack .mbar.file -in .mbar -side left
|
||||
pack .mbar.about -in .mbar -side right
|
||||
|
||||
frame .f
|
||||
|
||||
|
||||
frame .nf
|
||||
foreach t $reftypes {
|
||||
button .nf.$t -text "New $t" -command "edit $t new_key"
|
||||
# Looks better to fill
|
||||
pack .nf.$t -fill x
|
||||
}
|
||||
|
||||
|
||||
toplevel .term
|
||||
# Not allowed to remove terminal window!
|
||||
wm protocol .term WM_DELETE_WINDOW {
|
||||
# No operations
|
||||
}
|
||||
|
||||
wm title .term "tkbib Term Definitions"
|
||||
frame .term.ft
|
||||
listbox .term.ft.term_l -yscrollcommand ".term.ft.term_s set"
|
||||
scrollbar .term.ft.term_s -command ".term.ft.term_l yview"
|
||||
pack .term.ft.term_s -side right -fill y
|
||||
pack .term.ft.term_l -side left -fill both -expand 1
|
||||
pack .term.ft -expand 1 -fill both
|
||||
|
||||
|
||||
frame .fc
|
||||
listbox .fc.key_l -yscrollcommand ".fc.key_s set"
|
||||
scrollbar .fc.key_s -command ".fc.key_l yview"
|
||||
pack .fc.key_l -in .fc -side left -expand 1 -fill both
|
||||
pack .fc.key_s -in .fc -side right -fill y
|
||||
|
||||
pack .nf -in .f -side left
|
||||
pack .fc -in .f -side right -expand 1 -fill both
|
||||
|
||||
# pack .fc -side right -expand 1 -fill both
|
||||
# pack .nf -side right
|
||||
|
||||
tk_menuBar .mbar
|
||||
pack .mbar -side top -fill x
|
||||
pack .f -side bottom -expand 1 -fill both
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bind .fc.key_l <Double-Button-1> "edit article \[selection get\]"
|
||||
|
||||
open_search
|
||||
|
||||
|
||||
# If we have a cmd line arg, and this is a file, open it.
|
||||
|
||||
if {$init_bib != ""} {
|
||||
parse_bib $init_bib
|
||||
}
|
||||
#CLIP+pre+TEXT+1+2000/01/29 11:59:04+39.6+#
|
||||
106
tkbib1.0/tkbib.html
Normal file
106
tkbib1.0/tkbib.html
Normal file
@@ -0,0 +1,106 @@
|
||||
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta name="Author" content="Patrick H. Madden">
|
||||
<meta name="GENERATOR" content="Mozilla/4.7 [en] (X11; U; Linux 2.0.35 i586) [Netscape]">
|
||||
<meta name="Description" content="a bib file editor for LaTeX">
|
||||
<title>tkbib 1.0</title>
|
||||
</head>
|
||||
<body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#FF0000" alink="#000088">
|
||||
|
||||
<center>
|
||||
<h3>
|
||||
<b>tkbib 1.0: a bib file editor for LaTeX</b></h3></center>
|
||||
|
||||
<center><b>January 20th, 2000</b></center>
|
||||
|
||||
<h3>
|
||||
Introduction</h3>
|
||||
If you use LaTeX to compose technical papers, you're
|
||||
probably familiar with bibtex. The bib files used by bibtex contain
|
||||
the citations, and these files can get large, messy, and are not a lot
|
||||
of fun to maintain. I was using <i>bibcard</i> a few years ago, but
|
||||
without an X11 Motif library, keeping the code running on my various machines
|
||||
was a pain. Thus, I put on a pot of coffee and threw together a Tcl/Tk
|
||||
based bib file editor. This software is released under the Gnu Public
|
||||
License; it comes with no warranty (make backups of your bib files!), and
|
||||
you're free to use, modify, and improve it any way you see fit. Send
|
||||
any questions or comments to <<a href="mailto:pmadden@cs.binghamton.edu">pmadden@cs.binghamton.edu</a>>.
|
||||
Current versions will be maintained at <<a href="http://vlsicad.cs.binghamton.edu/~pmadden/tkbib">http://vlsicad.cs.binghamton.edu/~pmadden/tkbib</a>>;
|
||||
you should be able to download directly from <<a href="http://vlsicad.cs.binghamton.edu/~pmadden/tkbib/tkbib.tar.gz">http://vlsicad.cs.binghamton.edu/~pmadden/tkbib/tkbib.tar.gz</a>>.
|
||||
<br> This release is something of a stop-gap; I'll be
|
||||
short of time for the next few months, and wanted to get something out
|
||||
before I got buried with other work. Thus, there are a lot of rather
|
||||
obvious features that have not been implemented.
|
||||
<h3>
|
||||
Installing tkbib</h3>
|
||||
The distribution is a gzipped/tarred directory.
|
||||
For UNIX systems, you'll need to get tkbib into your path (a symbolic link
|
||||
should work fine), and maybe edit the first line to point to where you
|
||||
have <i>wish</i> installed. tkbib can figure out where it has been
|
||||
installed, so you don't need to do anything other than get it into your
|
||||
path. This is a Tcl/Tk program, and it should run without problems
|
||||
on any moderately recent version of the <i>wish</i> interpreter.
|
||||
For Windoze based systems, you might have trouble with the file select
|
||||
box; I'm not sure if the odd behavior is just with my machine, or with
|
||||
all flavors of Windoze. Let me know if you have problems loading
|
||||
in a bib file.
|
||||
<h3>
|
||||
Using tkbib</h3>
|
||||
Run tkbib from the command line; under the FILE menu
|
||||
item, you can specify a bib file to read in.
|
||||
<br> tkbib will open a window listing the citations (in
|
||||
alphabetical order by cite key). You can edit an existing citation
|
||||
by double-clicking on the key; this will open a second window where all
|
||||
the fields may be edited. To save your changes, click <b>update</b>;
|
||||
to dismiss without update, click <b>dismiss</b>.
|
||||
<br> To create a new record, click the the "new" button
|
||||
for the appropriate entry type.
|
||||
<br> When loading a bib file, duplicate citation keys
|
||||
are discarded (you'll get an error message to this effect). When
|
||||
creating a new key, no checking is done, so you're on your own to make
|
||||
sure that things stay correct. Parsing of the bib files is very weak:
|
||||
each key is expected to be on a line of it's own, and to not span more
|
||||
than one line; <font color="#FF0000">if you currently have a large bib
|
||||
file, you will probably need to hand-edit it before using tkbib</font>.
|
||||
I'm planning on writing a decent lex-and-yacc converter when I have an
|
||||
abundance of time.
|
||||
<br> Each citation has an "index" field; I'll be
|
||||
using this to assign each paper a number, and then will use the number
|
||||
to sort the papers physically. My numbering scheme is the last two
|
||||
digits of the year, followed by the first four digits of the first page
|
||||
of paper. Each citation also has a URL; many people are putting PostScript
|
||||
or PDF files for their papers on the web, or have pages detailing the current
|
||||
research.
|
||||
<br> A search window will look through all citations
|
||||
for the string entered. Clicking search will list only the citations
|
||||
that match. Filter will list only those that match, and were listed
|
||||
by the previous search. Merge will combine those that match with
|
||||
the results of the previous search. Some time soon, this will be
|
||||
expanded to allow regular expressions, search restricted to keyword fields,
|
||||
ranking of matches, etc.
|
||||
<br>
|
||||
<h3>
|
||||
Coming Soon</h3>
|
||||
On the agenda are better parsing of bib files, sanity
|
||||
checking on cite keys, and a greatly improved search interface. The
|
||||
management of citations should be made cleaner (check the code; it's scary!)
|
||||
I'm toying around with the idea of setting up a web CGI script to accept
|
||||
bib file entries, so that it would be easy to automagically update a monsterously
|
||||
large common bib file; let me know if you'd be interested in tkbib having
|
||||
a button to "update the Internet".
|
||||
<h3>
|
||||
Known Bugs</h3>
|
||||
The parser is really really weak. Be careful with
|
||||
your bib files, and make backup copies of things until you're familiar
|
||||
with the program and what it does. There should be better checking
|
||||
to make sure you can't duplicate cite keys, but this code hasn't been finished.
|
||||
<br> There may be some Windoze problems with the file
|
||||
selection box; I'm tracking this down now, to determine if the problem
|
||||
is local, or more general. What seems to happen is that after accepting
|
||||
a file to read in, the program loses keyboard and mouse focus, and cannot
|
||||
regain it.
|
||||
<br>
|
||||
</body>
|
||||
</html>
|
||||
15
tkbib1.0/tkbib.prj
Normal file
15
tkbib1.0/tkbib.prj
Normal file
@@ -0,0 +1,15 @@
|
||||
file tkbib #CLIP #
|
||||
file Notes #CLIP #
|
||||
file about.tcl #CLIP #
|
||||
file search.tcl #CLIP #
|
||||
file README #CLIP #
|
||||
recent entry_types:tkbib
|
||||
recent wr_format:tkbib
|
||||
recent write_bib:tkbib
|
||||
recent 2000_02_18:Notes
|
||||
recent open_bib:tkbib
|
||||
recent frames:tkbib
|
||||
recent bracketCount:tkbib
|
||||
recent pre:tkbib
|
||||
recent set_initial:tkbib
|
||||
recent 2000_01_29:Notes
|
||||
Reference in New Issue
Block a user