home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / live / usr / X11R6 / lib / X11 / cbb / memorized.pl < prev    next >
Perl Script  |  1998-10-07  |  5KB  |  196 lines

  1. #!/usr/bin/perl
  2. #  memorized.pl - functions to implement memorized transactions
  3. #
  4. #  Written by Curtis Olson.  Started October 13, 1994.
  5. #
  6. #  Copyright (C) 1994 - 1997  Curtis L. Olson  - curt@sledge.mn.org
  7. #
  8. #  This program is free software; you can redistribute it and/or modify
  9. #  it under the terms of the GNU General Public License as published by
  10. #  the Free Software Foundation; either version 2 of the License, or
  11. #  (at your option) any later version.
  12. #
  13. #  This program is distributed in the hope that it will be useful,
  14. #  but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16. #  GNU General Public License for more details.
  17. #
  18. #  You should have received a copy of the GNU General Public License
  19. #  along with this program; if not, write to the Free Software
  20. #  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  
  22. # $Id: memorized.pl,v 2.8 1997/04/11 20:24:02 curt Exp $
  23. # (Log is kept at end of this file)
  24.  
  25. package CBB;
  26.  
  27. use strict;    # don't take no guff
  28.  
  29.  
  30. # WARNING:  This file must be "required" after the main transaction file.
  31.  
  32. # %CBB::MEMS - an associative array of transactions and description keys
  33. # @CBB::MEMKEYS - a sorted list of description keys (for memorized transactions)
  34.  
  35.  
  36. # initialize the memorized transaction list
  37. sub init_mems {
  38.     # out: result
  39.  
  40.     %CBB::MEMS = ();
  41.     $CBB::sorted_memkeys = 1;
  42.  
  43.     return "ok";
  44. }
  45.  
  46.  
  47. # insert a memorized transaction into the MEMS list
  48. sub insert_mem {
  49.     # in: trans
  50.     # out: trans
  51.  
  52.     my($trans) = @_;
  53.     my($date, $check, $desc, $debit, $credit, $cat, $com, $cleared, $total) =
  54.     split(/\t/, $trans);
  55.  
  56.     $CBB::MEMS{$desc} = $trans;
  57.  
  58.     print DEBUG "insert_mem:  $desc -> $trans\n" if $CBB::debug;
  59.  
  60.     return "$trans";
  61. }
  62.  
  63.  
  64. # insert a memorized transaction into the MEMS list *AND* rebuild the MEMKEYS
  65. sub insert_and_update_mem {
  66.     # in: trans
  67.     # out: trans
  68.  
  69.     my($trans) = @_;
  70.     my($date, $check, $desc, $debit, $credit, $cat, $com, $cleared, $total) =
  71.     split(/\t/, $trans);
  72.  
  73.     $CBB::MEMS{$desc} = $trans;
  74.     @CBB::MEMKEYS = sort(keys %CBB::MEMS);
  75.  
  76.     print DEBUG "insert_mem:  $desc -> $trans\n" if $CBB::debug;
  77.  
  78.     return "$trans";
  79. }
  80.  
  81.  
  82. # build the MEMS list
  83. sub rehash_mems {
  84.     # out: result
  85.  
  86.     my($key);
  87.  
  88.     &init_mems();
  89.  
  90.     if ($CBB::calced == 0) {
  91.     &calc_trans();
  92.     }
  93.  
  94.     if ($CBB::sorted_keys == 0) {
  95.     &sort_keys();
  96.     }
  97.  
  98.     foreach $key (@CBB::KEYS) {
  99.     &insert_mem($CBB::TRANS{$key});
  100.     }
  101.  
  102.     @CBB::MEMKEYS = sort(keys %CBB::MEMS);
  103.  
  104.     return "ok";
  105. }
  106.  
  107.  
  108. # attempt to find a transaction matching the description
  109. # incomplete descriptions are allowed
  110. sub find_mem {
  111.     # in: desc
  112.     # out: trans
  113.  
  114.     my($desc) = @_;
  115.     my($result, $count, $i, $match, $memkey);
  116.  
  117.     if ( $desc ne "" ) {
  118.     $count = 0;
  119.     $match = 0;
  120.  
  121.         foreach $memkey (@CBB::MEMKEYS) {
  122.         if ( $memkey =~ m/^$desc/i ) {
  123.         print DEBUG "$memkey <=> $desc\n" if $CBB::debug;
  124.  
  125.         $count++;
  126.  
  127.         if ( $memkey =~ m/^$desc$/i ) {
  128.             print DEBUG "exact match $memkey <=> $desc\n" 
  129.             if $CBB::debug;
  130.             $match = 1;
  131.         }
  132.  
  133.             if ( length($result) ) {
  134.             $i = 0;
  135.             while ( $i < length($result) &&
  136.                 substr("\U$result", $i, 1) eq 
  137.                 substr("\U$memkey", $i, 1) ) {
  138.             $i++;
  139.             }
  140.             $result = substr($result, 0, $i);
  141.             } else {
  142.                 $result = $memkey
  143.         }
  144.         }
  145.         }
  146.     if ( length($result) && ($count == 1) ) {
  147.         return "$desc\t$CBB::MEMS{$result}";
  148.     } elsif ( $match ) {
  149.         return "$desc\t$CBB::MEMS{$result}";
  150.     } elsif ( length($result) ) {
  151.         return "partial_match:$result";
  152.     }
  153.     }
  154.  
  155.     return "none";
  156. }
  157.  
  158.  
  159. &init_mems();
  160.  
  161.  
  162. 1;                # need to return a true value
  163.  
  164.  
  165. # ----------------------------------------------------------------------------
  166. # $Log: memorized.pl,v $
  167. # Revision 2.8  1997/04/11 20:24:02  curt
  168. # Automatically insert new transactions into the memorized list.
  169. #
  170. # Revision 2.7  1997/01/18 03:28:45  curt
  171. # Added "use strict" pragma to enforce good scoping habits.
  172. #
  173. # Revision 2.6  1996/12/17 14:54:01  curt
  174. # Updated copyright date.
  175. #
  176. # Revision 2.5  1996/10/22 21:51:10  curt
  177. # Tweaked tab completion just a bit more.
  178. #
  179. # Revision 2.4  1996/09/26 19:48:45  curt
  180. # Fixed some problems with the newly revamped tab completion code.
  181. #
  182. # Revision 2.3  1996/09/25 17:11:10  curt
  183. # Added some initial code to better handle tab completion.
  184. #
  185. # Revision 2.2  1996/07/13 02:57:50  curt
  186. # Version 0.65
  187. # Packing Changes
  188. # Documenation changes
  189. # Changes to handle a value in both debit and credit fields.
  190. #
  191. # Revision 2.1  1996/02/27  05:35:49  curt
  192. # Just stumbling around a bit with cvs ... :-(
  193. #
  194. # Revision 2.0  1996/02/27  04:43:02  curt
  195. # Initial 2.0 revision.  (See "Log" files for old history.)
  196.