initial commit of bin scripts into git

This commit is contained in:
2023-11-08 13:38:19 +11:00
commit 3735eea3c6
113 changed files with 11631 additions and 0 deletions

122
tkbib1.0/Notes Normal file
View 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
View 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
View 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+#

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
tkbib1.0/graphics/tree.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

321
tkbib1.0/sample.bib Normal file
View 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
View 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
View 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
View 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>
&nbsp;&nbsp;&nbsp; If you use LaTeX to compose technical papers, you're
probably familiar with bibtex.&nbsp; 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.&nbsp; 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.&nbsp; Thus, I put on a pot of coffee and threw together a Tcl/Tk
based bib file editor.&nbsp; 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.&nbsp; Send
any questions or comments to &lt;<a href="mailto:pmadden@cs.binghamton.edu">pmadden@cs.binghamton.edu</a>>.&nbsp;
Current versions will be maintained at &lt;<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 &lt;<a href="http://vlsicad.cs.binghamton.edu/~pmadden/tkbib/tkbib.tar.gz">http://vlsicad.cs.binghamton.edu/~pmadden/tkbib/tkbib.tar.gz</a>>.
<br>&nbsp;&nbsp;&nbsp; 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.&nbsp; Thus, there are a lot of rather
obvious features that have not been implemented.
<h3>
Installing tkbib</h3>
&nbsp;&nbsp;&nbsp; The distribution is a gzipped/tarred directory.&nbsp;
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.&nbsp; tkbib can figure out where it has been
installed, so you don't need to do anything other than get it into your
path.&nbsp; This is a Tcl/Tk program, and it should run without problems
on any moderately recent version of the <i>wish</i> interpreter.&nbsp;
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.&nbsp; Let me know if you have problems loading
in a bib file.
<h3>
Using tkbib</h3>
&nbsp;&nbsp;&nbsp; Run tkbib from the command line; under the FILE&nbsp;menu
item, you can specify a bib file to read in.
<br>&nbsp;&nbsp;&nbsp; tkbib will open a window listing the citations (in
alphabetical order by cite key).&nbsp; 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.&nbsp; To save your changes, click <b>update</b>;
to dismiss without update, click <b>dismiss</b>.
<br>&nbsp;&nbsp;&nbsp; To create a new record, click the the "new" button
for the appropriate entry type.
<br>&nbsp;&nbsp;&nbsp; When loading a bib file, duplicate citation keys
are discarded (you'll get an error message to this effect).&nbsp; When
creating a new key, no checking is done, so you're on your own to make
sure that things stay correct.&nbsp; 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>.&nbsp;
I'm planning on writing a decent lex-and-yacc converter when I have an
abundance of time.
<br>&nbsp;&nbsp;&nbsp; Each citation has an "index" field;&nbsp; I'll be
using this to assign each paper a number, and then will use the number
to sort the papers physically.&nbsp; My numbering scheme is the last two
digits of the year, followed by the first four digits of the first page
of paper.&nbsp; 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>&nbsp;&nbsp;&nbsp; A search window will look through all citations
for the string entered.&nbsp; Clicking search will list only the citations
that match.&nbsp; Filter will list only those that match, and were listed
by the previous search.&nbsp; Merge will combine those that match with
the results of the previous search.&nbsp; Some time soon, this will be
expanded to allow regular expressions, search restricted to keyword fields,
ranking of matches, etc.
<br>&nbsp;
<h3>
Coming Soon</h3>
&nbsp;&nbsp;&nbsp; On the agenda are better parsing of bib files, sanity
checking on cite keys, and a greatly improved search interface.&nbsp; The
management of citations should be made cleaner (check the code; it's scary!)&nbsp;
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>
&nbsp;&nbsp;&nbsp; The parser is really really weak.&nbsp; Be careful with
your bib files, and make backup copies of things until you're familiar
with the program and what it does.&nbsp; There should be better checking
to make sure you can't duplicate cite keys, but this code hasn't been finished.
<br>&nbsp;&nbsp;&nbsp; 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.&nbsp; 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>&nbsp;
</body>
</html>

15
tkbib1.0/tkbib.prj Normal file
View 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