home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / live / usr / X11R6 / lib / X11 / cbb / init.tcl < prev    next >
Text File  |  1998-10-07  |  11KB  |  366 lines

  1. #!/usr/bin/wish -f
  2. #  'CBB' -- Check Book Balancer
  3. #
  4. #   init.tcl -- Initialization routines.
  5. #
  6. #  Written by Curtis Olson.  Started December 7, 1996.
  7. #
  8. #  Copyright (C) 1994 - 1997  Curtis L. Olson  - curt@sledge.mn.org
  9. #
  10. #  This program is free software; you can redistribute it and/or modify
  11. #  it under the terms of the GNU General Public License as published by
  12. #  the Free Software Foundation; either version 2 of the License, or
  13. #  (at your option) any later version.
  14. #
  15. #  This program is distributed in the hope that it will be useful,
  16. #  but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18. #  GNU General Public License for more details.
  19. #
  20. #  You should have received a copy of the GNU General Public License
  21. #  along with this program; if not, write to the Free Software
  22. #  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  23. #
  24. # $Id: init.tcl,v 2.19 1998/08/14 14:28:38 curt Exp $
  25. # (Log is kept at end of this file)
  26.  
  27.  
  28. # ----------------------------------------------------------------------------
  29. # Draw splash screen on startup
  30. # ----------------------------------------------------------------------------
  31.  
  32. proc cbb_splash {} {                                              
  33.     global lib_path
  34.  
  35.     toplevel .x -bd 3 -relief raised
  36.     wm withdraw .x
  37.     set sw [winfo screenwidth .]
  38.     set sh [winfo screenheight .]
  39.     image create photo "title" -file "$lib_path/images/splash-32.gif"
  40.     wm overrideredirect .x 1
  41.     label .x.l -image title -bd 1 -relief sunken
  42.     pack .x.l -side top -expand 1 -fill both
  43.     set x [expr ($sw - 200)/2]
  44.     set y [expr ($sh - 250)/2]
  45.     wm geometry .x +$x+$y
  46.     wm deiconify .x
  47.     update idletasks
  48.     after 3000 {destroy .x}
  49. }
  50.  
  51.  
  52. # ----------------------------------------------------------------------------
  53. # Initialize CBB
  54. # ----------------------------------------------------------------------------
  55.  
  56. proc cbb_setup {} {
  57.     global tcl_precision cbb eng lib_path
  58.  
  59.     # lets get this out of the way right away ... increases the precision.
  60.     set tcl_precision 17
  61.  
  62.     # lets start with a "clean" slate
  63.     acctSetClean
  64.  
  65.     # initialize the variables (moved to ./cbb so it can be earlier in
  66.     # the startup sequence
  67.     # cbb_init_vars
  68.  
  69.     # open a two way pipe to the perl engine.
  70.     set eng [open |$lib_path/wrapper.pl r+]
  71.  
  72.     # Set debugging flag on/off in perl engine
  73.     puts $eng "debug $cbb(debug)"; flush $eng
  74.     gets $eng result
  75.     if { $cbb(debug) } { puts $result }
  76.  
  77.     # Set cache flag on/off in perl engine
  78.     puts $eng "cache $cbb(cache)"; flush $eng
  79.     gets $eng result
  80.     if { $cbb(debug) } { puts $result }
  81.  
  82.     # If Crypt is activated, ask for password
  83.     if { $cbb(use_crypt) } { useCrypt }
  84.  
  85.     # Determine what century we are in (used as the default when not specified)
  86.     puts $eng "century"; flush $eng
  87.     gets $eng cbb(century)
  88.     if { $cbb(debug) } { puts "Our current year starts with $cbb(century)" }
  89.  
  90.     # parse the command line
  91.     parse_command_line
  92.  
  93.     # setup the main window
  94.     setup_main
  95.  
  96.     # Load a data file if one is specified on command line or in the 
  97.     # $cbb(save_cur_file)
  98.     if { "$cbb(cur_file)" != "noname.cbb" } {
  99.     # if cbb(save_cur_file) file overwrote the default cur_file or file 
  100.     # specified on command line
  101.  
  102.     load_acct_listbox
  103.     acctLoadFile $cbb(cur_file)
  104.     cd [file dirname $cbb(cur_file)]
  105.     }
  106.  
  107.     # make sure we have a backup file being saved ... automatically
  108.     setup_auto_save
  109.  
  110.     # initialize main window bindings
  111.     setup_default_binding
  112.  
  113.     # initialize undo
  114.     undoInit
  115.  
  116.     # Remind user to remove ~/.cbbrc if it still exists.
  117.     if { [file exists "~/.cbbrc"] } {
  118.     cbbWindow.ok "You can remove your ``.cbbrc'' file because it is \
  119.         obsolete.  It has been replaced with a ``.cbbrc.tcl'' file."
  120.     tkwait window .ok
  121.     }
  122.  
  123.     # If the user doesn't have a ~/.cbbrc.tcl file, create one for him.
  124.     if { [file exists $cbb(conf_file)] } {
  125.     # it exists, don't bother right now
  126.     } else {
  127.     cbbrcSave
  128.     }
  129.  
  130.     # This should remain the last thing in the setup procedure.  It leaves 
  131.     # a welcome message at the bottom of the window.
  132.  
  133.     .status.line configure -text "Welcome to the Check Book Balancer."
  134.     update
  135. }
  136.  
  137.  
  138. # ----------------------------------------------------------------------------
  139. # Initialize CBB Variables
  140. # ----------------------------------------------------------------------------
  141.  
  142. proc cbb_init_vars {} {
  143.     global cbb env
  144.  
  145.     # Set global variables
  146.     set cbb(author_xbm) "author.xbm"
  147.     set cbb(century) 19
  148.     set cbb(conf_file) "$env(HOME)/.cbbrc.tcl"
  149.     set cbb(save_cur_file) "$env(HOME)/.cbbcur.tcl"
  150.     set cbb(cur_date) ""
  151.     set cbb(cur_file) "noname.cbb"
  152.     set cbb(def_cat) "default.cat"
  153.     set cbb(devel) 0
  154.     set cbb(help_text) "cbb-man.txt"
  155.     set cbb(icon_xbm) "cbb.xbm"
  156.     set cbb(index1) 0
  157.     set cbb(index2) 0
  158.     set cbb(next_chk) 0
  159.     set cbb(no_more_mem) 0
  160.     set cbb(safe_mode) 0
  161.     set cbb(selected) 0
  162.     set cbb(state_start) 0.00
  163.     set cbb(state_end) 0.00
  164.     set cbb(version) "Version 0.74"
  165.  
  166.     # Preferences changed
  167.     set cbb(pref_chg) 0
  168.  
  169.     # internal Startdate
  170.     set cbb(int_sdate) "0"
  171.  
  172.     # code to use for cryptography
  173.     set cbb(crypt_code) ""
  174.  
  175.     # The following defaults are over ridden by $cbb(CONF_FILE)
  176.  
  177.     set cbb(auto_hilite) 1
  178.     set cbb(button_font) "-Adobe-Helvetica-Bold-R-Normal-*-*-120-*-*-*-*-*-*"
  179.     set cbb(date_fmt) 1
  180.     set cbb(debug) 0
  181.     set cbb(default_font) "-Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*"
  182.     set cbb(dialog_font) "-Adobe-Helvetica-Bold-R-Normal-*-*-120-*-*-*-*-*-*"
  183.     set cbb(fixed_font) "8x13"
  184.     set cbb(fixed_header_font) "8x13"
  185.     set cbb(head_color) #00008f
  186.     set cbb(hilite_color) #8080b0
  187.     set cbb(list_line1_color) ""
  188.     set cbb(list_line2_color) grey78
  189.     set cbb(list_height) 28
  190.     set cbb(list_width) 70
  191.     set cbb(acctlist_height) 5
  192.     set cbb(max_splits) 16
  193.     set cbb(menu_font) "-Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-*"
  194.     set cbb(msg_text_font) "-Adobe-Helvetica-Bold-R-Normal-*-*-120-*-*-*-*-*-*"
  195.     # 1000 milleseconds = 1 second (save_interval is specified in milleseconds)
  196.     set cbb(save_interval) 180000
  197.     set cbb(auto_save) 0
  198.     set cbb(status_line_font) \
  199.         "-Adobe-Helvetica-Bold-R-Normal-*-*-120-*-*-*-*-*-*"
  200.     set cbb(use_mems) 1
  201.     set cbb(balloon,on) 1
  202.     set cbb(web_browser) "netscape"
  203.  
  204.     # start time
  205.     set cbb(sdate) ""
  206.     set cbb(use_sdate) 0
  207.     set cbb(report_sdate) ""
  208.  
  209.     # account cache
  210.     set cbb(cache) 0
  211.  
  212.     # use cryptography ?
  213.     set cbb(use_crypt) 0
  214.     set cbb(encrypt) ""
  215.     set cbb(decrypt) ""
  216.  
  217.     # Ok, so lets override them if we can ...
  218.     if { [file exists $cbb(conf_file)] } {
  219.     source $cbb(conf_file)
  220.     }
  221.     if { [file exists $cbb(save_cur_file)] } {
  222.     source $cbb(save_cur_file)
  223.     }
  224.  
  225.     # allow the user to put their own custom commands in ~/.wishrc
  226.     if { [file exists "~/.wishrc"] } {
  227.     source "~/.wishrc"
  228.     }
  229. }
  230.  
  231.  
  232. # ----------------------------------------------------------------------------
  233. # Parse command line arguments
  234. # ----------------------------------------------------------------------------
  235.  
  236. proc parse_command_line {} {
  237.     global cbb argc argv argv0 eng
  238.  
  239.     if { [expr $argc >= 1] } {
  240.     # process command line arguments
  241.  
  242.     set i 0
  243.     while { $i < $argc } {
  244.         set arg [lindex $argv $i]
  245.  
  246.         if { $cbb(debug) } { puts "arg$i = $arg" }
  247.         
  248.         if { [string range $arg 0 0] == "-" } {
  249.         if { $cbb(debug) } { puts "this is a 'dash' option" }
  250.  
  251.         if { "$arg" == "--safe" } {
  252.             if { $cbb(debug) } { puts "setting safe mode" }
  253.             set cbb(safe_mode) 1
  254.         } elseif { "$arg" == "--debug" } {
  255.             if { $cbb(debug) } { puts "forcing debug on" }
  256.             set cbb(debug) 1
  257.             # Set debugging flag on/off in perl engine
  258.             puts $eng "debug $cbb(debug)"; flush $eng
  259.             gets $eng result
  260.             if { $cbb(debug) } { puts $result }
  261.         } elseif { "$arg" == "--devel" } {
  262.             if { $cbb(debug) } { puts "Including Developer options" }
  263.             set cbb(devel) 1
  264.         } elseif { "$arg" == "--version" } {
  265.             puts "CBB $cbb(version)"
  266.             exit
  267.         } else {
  268.             puts "Usage: [file tail $argv0] \[--safe\]\
  269.                 \[--debug\] \[--devel\] \[--version\] \[file_name\]"
  270.             exit
  271.         }
  272.         } else {
  273.         set cbb(cur_file) $arg
  274.         }
  275.         incr i
  276.     }
  277.     }
  278. }
  279.  
  280.  
  281. # ----------------------------------------------------------------------------
  282. # $Log: init.tcl,v $
  283. # Revision 2.19  1998/08/14 14:28:38  curt
  284. # Added desc-pie graph.
  285. # Added option to eliminate splash screen.
  286. # Other misc. tweaks and bug fixes.
  287. #
  288. # Revision 2.18  1997/06/12 21:53:14  curt
  289. # Applied more patches from Martin Schenk <schenkm@ping.at>.  His changes
  290. # greatly improved and developed the preferences menu so it is now actually
  291. # usable to set preferences.
  292. # Current data file is now saved in ~/.cbbcur.tcl
  293. #
  294. # Revision 2.17  1997/05/06 01:00:24  curt
  295. # Added patches contributed by Martin Schenk <schenkm@ping.at>
  296. # - Default to umask of 066 so .CBB files get created rw by owner only
  297. # - Added support for pgp encrypting data files
  298. # - Added support for displaying only recent parts of files (avoids
  299. #   waiting to load in lots of old txns you don't currently need.)
  300. # - Added a feature to "cache" whole accounts in the perl engine so
  301. #   that switching between accounts can be faster.
  302. # - The above options can be turned on/off via the preferrences menu.
  303. #
  304. # Revision 2.16  1997/04/23 18:08:48  curt
  305. # Source ~/.wishrc.tcl on startup if it exists.
  306. #
  307. # Revision 2.15  1997/04/16 20:30:25  curt
  308. # Reduced color version of splash.gif renamed to splash-32.gif
  309. #
  310. # Revision 2.14  1997/04/07 21:13:33  curt
  311. # Add a $cbb(web_browser) variable which can be set from ~/.cbbrc.tcl
  312. # If netscape is the browser, and there is a copy running, don't start
  313. # a new copy.
  314. #
  315. # Revision 2.13  1997/04/03 03:54:48  curt
  316. # Enable auto save without prompting when switching to a new account.
  317. # Contributed by Jonathan I. Kamens <jik@kamens.brookline.ma.us>
  318. #
  319. # Revision 2.12  1997/04/03 03:40:29  curt
  320. # Added a --version option.
  321. #
  322. # Revision 2.11  1997/01/10 22:03:31  curt
  323. # Transfer fixups and a few other misc. fixes contributed by
  324. #   Lionel Mallet <Lionel.Mallet@sophia.inria.fr>
  325. #
  326. # Revision 2.10  1997/01/09 04:03:03  curt
  327. # Allow user to specify colors of alternating transaction lines.
  328. #
  329. # Revision 2.9  1997/01/09 03:56:58  curt
  330. # Added contrib script loan.pl.
  331. # User sizable account list.
  332. # Removed some old gnuplot baggage from install.pl.
  333. #
  334. # Revision 2.8  1997/01/02 04:38:35  curt
  335. # Changes over the 1996 holidays:
  336. #   - Converted listbox to text widget.  This allows us to do nice
  337. #     things with alternating background colors, highliting, red
  338. #     negative numbers, etc.
  339. #   - Negative transactions are now drawn in red.
  340. #   - Added a Goto <Today> option.
  341. #   - <Home> & <End> were double bound.  Now, listbox can be traversed with
  342. #     <Meta-Home> and <Meta-End>
  343. #
  344. # Revision 2.7  1996/12/17 14:53:58  curt
  345. # Updated copyright date.
  346. #
  347. # Revision 2.6  1996/12/16 04:18:18  curt
  348. # Continuing the great overhaul of December 1996.
  349. #
  350. # Revision 2.5  1996/12/14 17:15:23  curt
  351. # The great overhaul of December '96.
  352. #
  353. # Revision 2.4  1996/12/11 04:32:29  curt
  354. # Several minor tweaks.
  355. #
  356. # Revision 2.3  1996/12/11 01:03:42  curt
  357. # Added balloon help support.
  358. #
  359. # Revision 2.2  1996/12/09 23:54:54  curt
  360. # Updated splash screen image.
  361. #
  362. # Revision 2.1  1996/12/08 07:37:49  curt
  363. # Initial revision.
  364. #
  365.  
  366.