--- /dev/null
+#!/usr/bin/perl -w
+
+#
+# NotesVars.pm
+# $Id: NotesVars.pm,v 1.8 2003/05/23 16:26:22 johnh Exp $
+#
+# Copyright (C) 1996 by John Heidemann.
+# Comments to <johnh@isi.edu>.
+#
+# This file is under the Gnu Public License, version 2.
+# For details see the COPYING which accompanies this distribution.
+#
+
+require 5.000;
+
+#
+# basic initialization
+#
+BEGIN {
+ no strict 'vars'; # avoid %::notes
+ $notes{'home'} = ((getpwuid($<))[7]);
+ my(@config) = `/home/johnh/NOTES/BIN/mkconfig perl`;
+ die "$0: mkconfig failed\n" if ($#config == -1);
+ eval join("", @config);
+ unshift(@INC, $notes{'bin_dir'});
+}
+
+package NotesVars;
+require Exporter;
+
+@ISA = Exporter;
+#my(%notes);
+@EXPORT = qw(pathname_to_Ymd Ymd_to_epoch
+ pathname_to_epoch epoch_to_pathname
+ url_to_pathname
+ strftime_epoch
+ );
+use Time::Local;
+use POSIX qw(strftime);
+use strict;
+
+
+##
+## Strftime
+##
+## Because "use POSIX" is so slow, I wrote a standalone strftime program.
+## I'm not distributing it because mknew caching seems to solve this problem.
+##
+#
+#my($strftime_inited) = 0;
+#sub init_strftime {
+# my($x);
+# # We currently don't support an external strftime.
+# if (-x "$::notes{'bin_dir'}/strftime" ) {
+# # run the program
+# $x = q<
+# sub strftime_backend {
+# my($output) = `> .$::notes{'bin_dir'} .
+# q</strftime '$_[0]' $_[1]`;
+# chomp $output;
+# return $output;
+# }
+# >;
+# } else {
+# # use POSIX
+# # This option is about 10 times slower to load.
+# # Unfortunately eval'ing this code causes perl5.002
+# # to crash on exit.
+# $x = q<
+# use POSIX;
+# sub strftime_backend {
+# return POSIX::strftime($_[0],localtime($_[1])) ;
+# }
+# >;
+# };
+# eval $x;
+# $strftime_inited = 1;
+#}
+#
+#sub strftime_epoch {
+# &init_strftime() unless ($strftime_inited);
+# return &strftime_backend(@_);
+#}
+
+sub strftime_epoch {
+ return POSIX::strftime($_[0], localtime($_[1]));
+}
+
+sub pathname_to_Ymd {
+ my($pathname) = @_;
+ # NEEDSWORK: not general (assumes file_form is %y%m%d)
+ my($Y, $m, $d) = ($pathname =~ /(..)(..)(..)$/);
+ $Y += 1900 if ($Y >= 90 && $Y < 100);
+ $Y += 2000 if ($Y < 90 && $Y < 100);
+ return ($Y, $m, $d);
+}
+
+sub Ymd_to_epoch {
+ my($y, $m, $d) = @_;
+ $y -= 1900 if ($y > 1000); # convert possible $Y to $y
+ return timelocal(0, 0, 12, $d, ($m-1), $y);
+}
+
+sub pathname_to_epoch {
+ my($pathname) = @_;
+ my($Y, $m, $d) = &pathname_to_Ymd($pathname);
+ return &Ymd_to_epoch($Y, $m, $d);
+}
+
+sub epoch_to_pathname {
+ my($epoch) = @_;
+ return strftime_epoch("$::notes{dir}/$::notes{int_form}/$::notes{file_form}", $epoch);
+}
+
+sub url_to_pathname {
+ my($url) = @_;
+ $url =~ s@^file:///@@;
+ my($home) = $::notes{home};
+ $url =~ s@^\~@${home}@;
+ $url =~ s@\#\* .*$@@;
+ return $url;
+}