[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference taveng::bagels

Title:BAGELS and other things of Jewish interest
Notice:1.0 policy, 280.0 directory, 32.0 registration
Moderator:SMURF::FENSTER
Created:Mon Feb 03 1986
Last Modified:Thu Jun 05 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:1524
Total number of notes:18709

147.0. "Looking for Calendar Program" by MENSCH::FALKENBERG (Dave Falkenberg <DTN236-2491>) Wed Jun 18 1986 20:42

	I am looking for a formula and/or program to print the Jewish Calander
(with Holidays noted) for a given input year. 


	Any help you Noters can give will be appreciated, Thanks in advance.



							Dave

T.RTitleUserPersonal
Name
DateLines
147.1This calendar will outlive all of us.BAGELS::SREBNICKDavid Srebnick, NCSS, LKG1-3/B19Fri Jun 20 1986 00:0916
    I don't have a program, but this may be of interest to you.  You
    can get a book called:
    
    	150 Year Calendar with corresponding English and Hebrew dates
    including Holidays, Sidras, and Haftoras.  (c) 1963 by M. Greenfield,
    Brooklyn, NY  11211
    
    This has calendars (already printed) for the years 1900 - 2050.
     It also includes a 2000 (yes, that's right, 2000) year Festival
    Calendar.  This calendar runs from the years 4000-6000.
    
    I don't suppose that there are too many books with this title, so
    you ought to be able to call a Jewish book store and order it.
    
    You may be able to figure out a formula from the book.  You certainly
    have enough data.
147.2There is an algorithmBELKER::LUWISHFri Jun 20 1986 14:2027
    The 150 Year Calendar mentioned does not really have enough data
    to deduce an algorithm from.  I was interested in writing such a
    program (and may yet do so) and after a long search found a book
    in the Brandeis University Library entitled "Rabbinical Mathematics
    and Astronomy".  This book covers all the mathematics to be found
    in the richness of our Talmud.  Chapter 17, "The Fixed Calendar"
    covers the algorithm in detail - it involves the calculation of
    the "Molad" (the mean conjuntion of the moon) as well as some
    adjustment rules to ensure that a portion of the new moon be
    potentially visible on Rosh Hashana, that Yom Kippur not fall on
    a Friday or Sunday, and that the consequences of the aforementioned
    not result in an excessively long or short year.
    
    Due to the length and typographical difficulties of the chapter
    (some Hebrew text, a number of tables and equations) I will not
    type it in here, but will gladly send a hardcopy to anyone who sends
    me MAIL at {BELKER|FURILO|RENKO}::LUWISH.  A hardy soul may wish
    to summarize the algorithm and post it here, or even write a program.
    Whoever writes such a program should test it against the "150 Year
    Calendar" first, then naturally make it available to all of us.
    
    Ed
    
    By the way, my original motivation to computerize the calendar was
    to calculate Yahrzeits of members of my family who perished under
    Hitler.  I am doing some genealogical research to find out who they
    were, so I can memorialize them in some way.
147.3Jewish Calendar AlgorithmREX::MINOWMartin Minow, DECtalk EngineeringMon Jul 07 1986 04:23282
Following the form feed, you will find the C source for a program
that computes the Jewish calendar.  The program was distributed
over the Unix USENET a year or so ago.  It compiles and runs
under Vax C.  I cannot vouch for its accuracy.


The author's network address is
	RHEA::DECWRL::"ihnp4!ihlpa!rjh"

Martin.

#if 0
Shalom!
I have enclosed with this item a proposed algorithm for converting
a Julian (on or before Oct 4, 1582) or Georgian (on or after Oct 15, 1582)
calendar date to the coresponding Jewish calendar date. I am asking
whether or not the algorithm does an accurate job.

Randolph J. Herber, ...ihnp4!ihlpa!rjh, 312-979-6553 (U.S.A.)
U.S.Mail address Amdahl Corp, C/O Room IH1C220, AT&T Bell Labs, Naperville, IL,
60566-1005
#endif

#include <stdio.h>
#include <time.h>
#ifdef	vms
#include		errno
#include		ssdef
#include		stsdef
#define	IO_SUCCESS	(SS$_NORMAL | STS$M_INHIB_MSG)
#define	IO_ERROR	(SS$_ABORT)
#endif

#ifndef	IO_SUCCESS
#define	IO_SUCCESS	0			/* Normal exit		*/
#define	IO_ERROR	1			/* Error exit		*/
#endif

/*
This program writes a date (to stdout) according to the Jewish
Calendar.  If no argument is specified, it calls a "ctime"
function to use today's date.  Otherwise, it may be invoked
with 3 arguments -- month, day, year (4-digit negative for BC(E)).
*/

static char *copyright = {
"(C) 1985 Randolph J. Herber  Usage is unrestricted with retention of notice."
};

#define TRUE     1
#define FALSE    0

static int mlen[] = {
	0,31,28,31,30,31,30,31,31,30,31,30,31
};

static int jmlen[] = {
	0,30,29,30,29,30,30,29,30,29,30,29,30,29
};

static char *mname[] = {
	"",
	"Tishri",
	"Chshvn",
	"Kislev",
	"Tebet",
	"Shebat",
	"Adar",
	"VeAdar",
	"Nisan",
	"Iyar",
	"Sivan",
	"Tammuz",
	"Ab",
	"Elul"
};

static short mdays[] = {
	0,   354,   708,  1092,
	1446,  1801,  2185,  2539,
	2923,  3277,  3632,  4016,
	4370,  4724,  5108,  5463,
	5817,  6201,  6555
};

static short mparts[] = {
	0,  9516, 19032, 16381,
	25897,  9493,  6842, 16358,
	13703, 23223,  6819,  4168,
	13684, 23200, 20549,  4145,
	13661, 11010, 20526
};

static short mtype[] = {
	2,     1,     0,     2,
	1,     0,     3,     0,
	2,     1,     0,     2,
	1,     0,     2,     1,
	0,     3,     0
};

static long table1[4][9] = {
	{0,15611,38880,64800, 83855,116640,145211,168480,181440},
	{0, 3444,38880,55284,107124,116640,133044,168480,181440},
	{0, 3444,36229,55284,107124,116640,123528,168480,181440},
	{0, 3444,36229,55284,107124,116640,133044,168480,181440}
};



static short table2[2][9] = {
	{1,3,2,2,3,1,3,1,0},
	{1,3,2,1,3,1,3,1,0}
};



static short table3[] = {
	1,1,2,4,4,6,6,1,0
};

static char *jkind1[] = {
	"", "defective", "normal", "complete"
};

static char *jkind2[] = {
	"", " leap"
};

main(argc,argv)
int argc;
char **argv;
{

	long secs, time();
	struct tm *tbuf, *localtime();
	void exit();
	int year, yr, mo, da, unit(), jyr, jcycle;
	long jdate, jpart, jday, jarg, jstart;
	short yrm1, n, jyear;
	char style, leap, jtype, jleap;

	if (argc > 1 && argc != 4) {
		(void) printf("Usage:  No arguments for today's date,");
		(void) printf(" or '%s <mo> <da> <yr>'.\n", *argv);
		(void) exit(IO_ERROR);
	}
	else if (argc == 1) {
		secs = time((long *)0);
		tbuf = localtime(&secs);
		mo = tbuf->tm_mon + 1;
		da = tbuf->tm_mday;
		year = tbuf->tm_year + 1900;
	}
	else {
		mo = atoi(argv[1]);
		da = atoi(argv[2]);
		year = atoi(argv[3]);
	}

	if (year != 0 && year >= -3761 && year < 10000) {
		yr = year > 0 ? year : year + 1;
		style = year > 1582;
		leap = style
		    ? (((yr % 4) == 0) && ((yr % 100) != 0)) ||
			((yr % 400) == 0)
		    : ((yr % 4) == 0);
		mlen[2] = leap ? 29 : 28;
		if (mo >=1 && mo <= 12 && da >= 1 && da <= mlen[mo] &&
		    !(year == 1582 && (mo == 1 || mo == 2 ||
		    (mo == 10 && da >= 5 && da <= 14)))) {
			if (year == 1582 && mo == 10) {
				mlen[10] = 21;
				if (da >= 15) da -= 10;
			} else {
				mlen[10] = 31;
			}
			yrm1 = yr - 1;
			jdate = 1721423l+yrm1*365+unit(yrm1,4)+da;
			for (n=1;n<mo;++n) {
				jdate += mlen[n];
			}
			if (style) {
				jdate -= 10 + (yrm1-1500)/100 - (yrm1-1200)/400;
			}
			if (jdate < 347998) {
				(void) printf("%s: Date of range!\n",*argv);
				(void) exit(IO_ERROR);
			}
			jyr = yr + 3761;
			do {
				jyr -= 1;
				jcycle = unit(jyr,19);
				jyear = rmdr(jyr,19);
				jtype = mtype[jyear];
				jleap = jtype == 0;
				jpart = 17875l*jcycle+mparts[jyear]+25044l;
				jday = lunit(jpart,25920l);
				jpart -= jday * 25920l;
				jday += 6939l*jcycle+mdays[jyear]+347998l;
				jarg = lrmdr(jday,7l)*25920l+jpart;
				for(n=0;n<=7;++n) {
					if (table1[jtype][n]<=jarg &&
					    jarg<table1[jtype][n+1]) break;
				}
				jtype = table2[jleap][n];
				jstart = jday+lrmdr(2l+table3[n]-jday,7l)-3l;
			} while (jdate < jstart);
			jyr += 1;
			jday = (jdate - jstart) + 1;
			switch (jtype) {
				case 1: jmlen[3] = 29; break;
				case 2: break;
				case 3: jmlen[2] = 30; break;
				default:
					printf("%s: Internal error 1\n",*argv);
					exit(IO_ERROR);
					break;
			}
			if (!jleap) {
				mname[7] = mname[6];
				mname[6] = mname[0];
				jmlen[6] = 0;
			}
			for(n=1;n<=13;++n) {
				if(jday<=jmlen[n]) break;
				jday -= jmlen[n];
			}
			(void) printf("%s %d, %d %s%s\n",
				mname[n],jday,jyr,
				jkind1[jtype],jkind2[jleap]);
			(void) exit(IO_SUCCESS);
		} else {
			(void) printf("%s: Invalid date!\n",*argv);
			(void) exit(IO_ERROR);
		}
	}
	(void) printf("%s: Date out of range!\n",*argv);
	(void) exit(IO_ERROR);
}

int unit(f1,f2)
	int f1, f2;
{
	int rmdr;
	rmdr = f1 % f2;
	if (rmdr < 0) rmdr += f2;
	return (f1 - rmdr) / f2;
}


long lunit(f1,f2)
	long f1, f2;
{
	long rmdr;
	rmdr = f1 % f2;
	if (rmdr < 0) rmdr += f2;
	return (f1 - rmdr) / f2;
}


int rmdr(f1,f2)
	int f1, f2;
{
	int rmdrx;
	rmdrx = f1 % f2;
	if (rmdrx < 0) rmdrx += f2;
	return rmdrx;
}


long lrmdr(f1,f2)
	long f1, f2;
{
	long rmdrx;
	rmdrx = f1 % f2;
	if (rmdrx < 0) rmdrx += f2;
	return rmdrx;
}



147.4how to use the program in .3DELNI::GOLDSTEINDistributed Systems IdeologyMon Jul 07 1986 19:3222
    I found the program in .3 to be a bit tricky to invoke, since it's
    basically written for Unix (and looks for the "standard input" for
    its date parameters).  But for all you VMS Forever types out there,
    here's how it's done:
    
    First you need a copy of the .EXE in your directory; in my case,
    I linked it as HEBREWCAL.EXE in my SYS$LOGIN (top-level) directory.
    Then, you set up a symbol for it, and feed it parameters.
    
$ HCAL:==$SYS$LOGIN:HEBREWCAL.EXE 'p1' 'p2' 'p3'
    
    To use it to find out any particular day, use the American standard
    all-number date field like this:
  
$ HCAL 12 31 1986
    
    It will then give you the answer. 
    
    Next question:  Will someone please explain the terms "defetive
    leap", "complete", etc., as applied to the Hebrew calendar?
         fred_who_is_slightly_more_literate_in_VMS_than_Hebrew
    
147.5A bit more informationREX::MINOWMartin Minow, DECtalk EngineeringMon Jul 07 1986 20:1229
Sorry, I probably should have given an instruction manual with the code.
Assuming you've stored the program as hcal.c, compile it as follows:

	$ CC hcal
	$ LINK hcal,sys$library:vaxcrtl/lib

Now, move the executable image to some known place, such as your
login directory (SYS$LOGIN), and add the following to your login.com file:

	$ HCAL :== $SYS$LOGIN:hcal

You can get the equivalance for the current date by

	$ hcal

(no parameters) or, for any specific date, by

	$ hcal <month> <day> <year>

where month, day, and year are given in decimal.

The year labels ("defective", "normal", "complete") and "leap"
classify the year within the Jewish calendar cycle.  There is
a good, if dense, article in the Enclycopaedia Brittanica on
calendars, or you could chase down the reference in one of the
earlier responses to this note.

Martin.

147.6duh,heh...what fast was that?CNTROL::PINCKWed Aug 05 1987 14:1513
    OK...Who has this calander?  My Hebrew calender is at
    my school apartment and I am puzzled.
    
    Yesterday, my brother called from the Jewish camp in which
    he is working and among other things asked if I had had an
    easy fast.  I responded that it was very easy(I had no problems
    at all!!!)
    
    What was he talking about...I want to be able to tell him
    what it was before he asks the next time I talk to him.
    
    Thanks alot,
    Amy
147.7It was Tisha b'AvGRECO::FRYDMANWed Aug 05 1987 15:4441
    The fast day was  Tisha b'Av (the Ninth of AV).  It commemorates:
    
    	-The day the spies brought back bad report of the "promised
    	 land";
	
 	-The day the First Temple was destroyed;
    
    	-The day the Second Temple was destroyed; and
    
    	-The day the Jews were expelled from Spain in 1492.
    
    	_there's one more thing that happen on this date, but 
    	 I've forgotten.
    
    This is also the day that the Messiah is to be born.
    
    Tisha b'Av is a full fast(like Yom Kippur)- starting at sundown on
    Monday and ending last night at around 8:45PM Boston time.
    The Book of Lamentations is read during the evening service and
    various poetry of mourning  the Temples (Kinot) are read during
    the day.  Many other tragedies that have befalled our people are
    also remembered with special kinot.  There has been some controversy
    about having a separate day to remember the Holocaust since other
    major destructions and tragedies are remembered on Tisha b'Av--
    putting them all into an historical perspective.  It has been suggested
    that those who forget Tisha b'Av will, in a few generations, also
    forget Yom HaShoah.   
    
    Twelve years ago, my wife and I spent Tisha b'Av in Jerusalem. 
    We davened at the Kottel (Western Wall) at night and in the morning,
    and spent the late morning and afternoon at Yad VaShem. At that
    time, the Jewish Quarter of the Old City was still in ruins from
    the Jordanian occupation.  We could feel what the destroyed City
    was like 2000 years ago.  Yad VaShem brought it full circle.
    
    Let's hope that with the coming of Moshiach, there will be no need
    to remember Tisha b'Av next year.
    
    
    ---Av
    year.
147.8"Disaster remembrance day"CADSYS::RICHARDSONWed Aug 05 1987 16:5020
    Av's answer is more complete than the one I put into some other
    note (the other "disaster" is supposed to be WW I - I don't know
    if it can really be construed to have started on the same date,
    though).
    
    In the US, Tisha B'Av tends to be a major fast day at Jewish summer
    camp, but not otherwise excpet among the very strict - probably
    because it falls during the summer.  Our rabbi told a story that
    at summer camp they would spend the preceeding month studying
    Jerusalem, building a model old city out in a field near the lake.
    On the eve of Tisha B'Av, after the campers were asleep, the councelors
    would set the model on fire, and then wake up the campers (don't
    worry, they were careful to ensure that the fire would not spread!),
    and that is how they would set the stage for talking about the
    disasters the day commemorates.  It must have made quite an impression
    on the kids, especially if they hadn't been to that particular camp
    before!                           
    
    I'm not sure how we came to have a separate Yom Hashoah (someone
    else may know...).
147.9HPSVAX::ROSENBLUHWed Aug 05 1987 17:4849
	
The last time I was in Jerusalem I spent a day touring the excavations and dig
of the western and southern faces of the Temple Mount (this area is visible 
behind a wire fence when you go the Western Wall).

At the southwestern corner of the Temple Mount, the ground has been excavated 
down to what was 'sidewalk level' in 70 A.D. (that is, about 12 feet below
today's sidewalk level).   You can see broken stones from the top rows of
the retaining wall of the Temple Mount built by Herod, lying on the 
70 A.D-era sidewalk - stones that fell there the day Roman soldiers
set fire to the Temple and destroyed the Herodian walls - that is, on the
Ninth of Av.  Frankly it thrilled me in a historical sense to be looking
at something that could be dated so precisely because the date has been
comemmorated by Jews for millenia - I don't expect everyone to get their
jollies from this; it is very moving for many Jews as Yet Another Sign
of the Lugubrious Nature of Jewish History.

I don't know about this view that "Tisha B'Av is only commemorated at 
summer camps and by the very strict".  I guess I don't consider myself 
very strict, but I fast on Tisha B'Av.  Until this
century, I guess fasting on Tisha B'Av was just standard Jewish religious
practice.  What happened?  Did people get bored? (Alright, so I'm
being facetious, and this is a rhetorical question; don't feel obliged
to argue the point.)

I believe that there are people who are ideologically (or perhaps I should 
say theologically) opposed to fasting on Tisha B'Av (possibly I have 
confused this with the 17th of Tammuz) because they feel that we are
living in the beginning of Messianic times, and therefore should no longer
be mourning the destructions of the temples.

It is a mildly contrarian view of Modern Jewish History that the *real*
destruction of European Jewry occured during WW I and not WW II.
Agnon, for example, seems to have expounded this view in
Oreach Natah Lalun (A Guest for the Night) and some of the very 
late-published short stories that deal with WW II.  There was alot of
physical destruction of Jews in WW I because the territory that was hit
worst by battles (even worse than along the line from the North Sea to
Switzerland, I think, altho there are military historians on the 'net
who could clarify this) was Galicia, eastern Russia including much of the
Pale of Jewish Settlement and other parts of Poland where there were
hundreds of small Jewish villages.  The way of life in these shtetls and
villages was uprooted and destroyed, and they never recovered.  Jews moved
to the big cities in Poland and Russia, or to America, where assimilation
and the drive to become modern changed the nature of Judaism -- it wasn't
clear in what sense Judaism in Europe would have survived even without
the impact of WW II, which of course meant the physical destruction of
most European and over half of all Russian Jews.

147.10My feelings about Tisha B'AvCADSYS::RICHARDSONWed Aug 12 1987 14:2739
    Kathy-
    
    I don't think I have any real right to say that I think I am speaking
    for "most liberal Jews" or any other group, so let's say I am speaking
    for myself (at least mostly).  I go to schul on Tisha B'Av, but
    I feel a lot more closely associated with Yom Hashoah because it
    is much more recent in our history, and affected a way of life that
    I can relate to.  I really do not (I hope this doesn't HORRIFY anyone;
    I apologize if this offends any of you!) have any big desire that
    the historical temple be rebuilt and that we all return to animal
    sacrifices as a religious expression, as appropriate and right as
    that (presumably) was in its proper historical context.  I met an
    Israeli woman who was absolutely overjoyed that there was archeological
    evidence that someone had discovered the "ashes of the red heifer"
    because then the Moslem mosques on the Temple Mount could be torn
    down (which I am sure would start WW III in an instant, but she
    didn't care, or didn't think that an important consideration), the
    temple rebuilt, and the animal sacrifices begun!  (I didn't think
    to ask her who would be the high priest - I was fervently hoping
    at the time that hers wasn't the majority view, since I didn't picture
    the almost-certain nuclear war that would result as an auspicious
    beginning for the Messianic Age - or for anything else, for that
    matter, except the deaths of all of us, and probably the woman in
    question amongst the first, since her home was in Jerusalem!)
    Just maybe, it is these sorts of considerations that cause us to
    think of the day as marking ALL the destructions that have happened
    in history.  Now, being the liberal that I am, I believe that the
    Messianic Age has to happen because of what WE HUMAN BEINGS do,
    and will not suddenly be handed down to us at some "appropriate"
    time or because some faction prayed hard enough; it will come about
    as a direct result of our own efforts to establish peace and
    brotherhood - which is not going to be the result of destroying
    the Moslem holy sites in Jerusalem, as unhappy as we may be with
    where some of them happen to be located (remembering that the ground
    they stand on is as special to the people who worship there now
    as it was to our own ancestors, as well as to other faiths in perhaps
    lesser degrees).
    
    /Charlotte