home *** CD-ROM | disk | FTP | other *** search
- #!/usr/bin/perl
- # common.pl - common routines shared by many files
- #
- # Written by Curtis Olson. Started August 22, 1994.
- #
- # Copyright (C) 1994 - 1997 Curtis L. Olson - curt@sledge.mn.org
- #
- # 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 of the License, 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; if not, write to the Free Software
- # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- # $Id: common.pl,v 2.11 1997/05/06 01:00:26 curt Exp $
- # (Log is kept at end of this file)
-
-
- package CBB;
-
- use strict; # don't take no guff
-
-
- # We need a version number
- $CBB::version = "Version 0.74";
- ($CBB::junk, $CBB::version_num, $CBB::junk) = split(/ +/, $CBB::version);
-
-
- # Contributed by Christopher Browne, Oct. 24/94
- sub pad {
- return sprintf("%02d", $_[0]);
- }
-
-
- # return the directory of a file name
- sub file_dirname {
- my($file) = @_;
- my($pos);
-
- $pos = rindex($file, "/");
- if ( $pos >= 0 ) {
- return substr($file, 0, ($pos + 1));
- } else {
- return "./";
- }
- }
-
-
- # return the base file name
- sub file_basename {
- my($file) = @_;
- my($pos);
-
- $pos = rindex($file, "/");
- return substr($file, ($pos + 1));
- }
-
-
- # return the file name root (ending at last ".")
- sub file_root {
- my($file) = @_;
- my($pos);
-
- $pos = rindex($file, ".");
- return substr($file, 0, $pos);
- }
-
-
- # return the file name extension (starting at first ".")
- sub file_extension {
- my($file) = @_;
- my($pos);
-
- $pos = rindex($file, ".");
- return substr($file, ($pos + 1));
- }
-
-
- # return current date in a nice format
- sub nice_date {
- my($date_fmt) = @_;
-
- my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
- localtime(time);
-
- if ( $date_fmt == 1 ) {
- return &pad($mon+1) . "/" . &pad($mday) . "/" . &pad($year);
- } else {
- return &pad($mday) . "." . &pad($mon+1) . "." . &pad($year);
- }
- }
-
-
- # return current date in a raw format
- sub raw_date {
- my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
- localtime(time);
- return ¢ury() . &pad($year) . &pad($mon+1) . &pad($mday);
- }
-
- # start date: return date in raw format, takes argument of those types:
- # -[num]m months (eg. "-0m" means only current month, "-1m" means current and last)
- # -[num]d days (eg. "-10m" means 10 days)
- # dd.mm.yy[yy] : "international" format
- # mm/dd/yy[yy] : "us" format
- # yyyymmdd : "raw" format
- #
- # This can get a bit complicated, thank god we don't have to care whether
- # we return invalid days
-
- sub start_date {
- my($idate) = @_;
- my($odate, $value);
- my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
- localtime(time);
-
- $mon = $mon + 1;
-
- if ( $idate =~ /^\d{8}$/ ) { # "raw" format
- $odate = $idate;
- } elsif ($idate =~ /^-\d{1,2}m$/ ) { # "month" format
-
- $value = substr($idate, 1, 3); # a maximum of 99 months !
- if ($value >= $mon) {
- $year = $year - 1 - int( ($value - $mon) / 12 );
- $value = ($value % 12 );
- }
- $mon = $mon - $value;
- if ($mon < 1) {
- $value = $value + 12;
- }
- $odate = ¢ury() . &pad($year) . &pad($mon) . &pad(1);
-
- } elsif ($idate =~ /^-\d{1,3}d$/ ) { # "day" format
-
- $value = substr($idate, 1, 4); # a maximum of 999 days !
- if ($value >= $yday) {
- $year = $year - 1 - int( ($value - $yday) / 360 );
- $value = ( $value % 360 );
- }
- if ($value >= $mday) {
- $mon = $mon - 1 - int( ($value - $mday) / 30 );
- if ($mon < 1) {
- $mon = $mon + 12;
- }
- $value = ( $value % 30 );
- }
- $mday = $mday - $value;
- if ($mday < 1) {
- $mday = $mday + 30;
- }
- $odate = ¢ury() . &pad($year) . &pad($mon) . &pad($mday);
-
- } elsif ( $idate =~ /^\d{1,2}\/\d{1,2}\/\d{2,4}$/ ) { # "us" format
-
- ($mon, $mday, $year) = split(/\//, $idate);
- if ($year < 100) {
- $value = ¢ury();
- } else {
- $value = $year / 100;
- }
- $odate = &pad($value) . &pad($year) . &pad($mon) . &pad($mday);
-
- } elsif ( $idate =~ /^\d{1,2}\.\d{1,2}\.\d{2,4}$/ ) { # "int" format
-
- ($mday, $mon, $year) = split(/\./, $idate);
- if ($year < 100) {
- $value = ¢ury();
- } else {
- $value = $year / 100;
- }
- $odate = &pad($value) . &pad($year) . &pad($mon) . &pad($mday);
-
- } else { # nonsense, give them everything since 1900
- $odate = "19000101";
- }
-
- return ($odate);
- }
-
- # return the current century in the form 19, 20, 21, etc.
- # requires the Unix "date" command to be in the path
- sub century {
- my($unix_date, $year, $century, $junk);
-
- $unix_date = localtime; # e.g. "Thu Oct 3 16:53:37 1996"
- ($junk, $junk, $junk, $junk, $year) = split(/\s+/, $unix_date);
- $century = substr($year, 0, 2);
-
- return($century);
- }
-
-
- 1; # need to return a true value
-
-
- # ----------------------------------------------------------------------------
- # $Log: common.pl,v $
- # Revision 2.11 1997/05/06 01:00:26 curt
- # Added patches contributed by Martin Schenk <schenkm@ping.at>
- # - Default to umask of 066 so .CBB files get created rw by owner only
- # - Added support for pgp encrypting data files
- # - Added support for displaying only recent parts of files (avoids
- # waiting to load in lots of old txns you don't currently need.)
- # - Added a feature to "cache" whole accounts in the perl engine so
- # that switching between accounts can be faster.
- # - The above options can be turned on/off via the preferrences menu.
- #
- # Revision 2.10 1997/01/18 03:28:41 curt
- # Added "use strict" pragma to enforce good scoping habits.
- #
- # Revision 2.9 1996/12/17 14:53:54 curt
- # Updated copyright date.
- #
- # Revision 2.8 1996/12/11 18:33:30 curt
- # Ran a spell checker.
- #
- # Revision 2.7 1996/10/03 22:02:25 curt
- # I found a way in perl to get the century directly, so I was able to
- # eliminate the dependency on the external Unix date command.
- #
- # Revision 2.6 1996/10/03 04:48:59 curt
- # Fixed an inconsistency in &raw_date() in common.pl (with how it was
- # called.)
- #
- # Version now is 0.67-beta-x
- #
- # Revision 2.5 1996/10/03 04:13:39 curt
- # Refined default century handling code.
- #
- # Revision 2.4 1996/10/03 03:52:57 curt
- # CBB now determines the current century automatically ... no need for it
- # to be hard coded. Removed all hardcoded instances of the century (especially
- # in reports.pl and recur.pl)
- #
- # Added an optional --debug flag to the invocation of CBB.
- #
- # Revision 2.3 1996/10/02 19:37:18 curt
- # Replaced instances of hardcoded century (19) with a variable. We need to
- # know the current century in cases where it is not provided and it is
- # assumed to be the current century. Someday I need to figure out how
- # to determine the current century, but I have a couple of years to do it. :-)
- #
- # I still need to fix conf-reports and reports.pl
- #
- # Revision 2.2 1996/07/13 02:57:39 curt
- # Version 0.65
- # Packing Changes
- # Documentation changes
- # Changes to handle a value in both debit and credit fields.
- #
- # Revision 2.1 1996/02/27 05:35:37 curt
- # Just stumbling around a bit with cvs ... :-(
- #
- # Revision 2.0 1996/02/27 04:41:50 curt
- # Initial 2.0 revision. (See "Log" files for old history.)
-