head	1.2;
access;
symbols
	bg2_23:1.2
	bg2_22:1.2
	bg2_21:1.2
	bg2_20:1.2
	bg2_16:1.2
	bg2_15:1.2
	bg2_12:1.2
	bg2_07:1.2
	isorc2008_submission:1.1
	handbook_alpha_edition:1.1
	jtres2007_submission:1.1
	bg1_07:1.1
	bg1_06:1.1
	bg1_05:1.1
	TAL_101:1.1
	TAL_100:1.1
	jtres_submission:1.1
	wises06_submission:1.1
	lctes2006_submission:1.1
	rtgc_isorc2006:1.1.0.4
	isorc2006:1.1.0.2
	rtgc_paper:1.1
	bg1_00:1.1
	nohandle:1.1;
locks; strict;
comment	@# @;


1.2
date	2008.02.24.17.42.24;	author martin;	state Exp;
branches;
next	1.1;
commitid	224a47c1ac774567;

1.1
date	2005.05.11.17.38.06;	author martin;	state Exp;
branches;
next	;
commitid	382c428242f94567;


desc
@@


1.2
log
@JOP goes GPL
@
text
@/*
  This file is part of JOP, the Java Optimized Processor
    see <http://www.jopdesign.com/>

  Copyright (C) 2001-2008, Martin Schoeberl (martin@@jopdesign.com)

  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 3 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, see <http://www.gnu.org/licenses/>.
*/

package kfl;

/**
*	A simple clock and calendar.
*/

public class Clock {

	private static int next;
	private static int s;
	private static int day;
	private static int year;
	private static boolean leap;
	private static int[] mtab;
	private static int[] buf;

/*
	public static void main(String args[]) {


		Display.line1();
		for (int i=0; i<20; ++i) Display.data(' ');
		Display.line2();
		for (int i=0; i<20; ++i) Display.data(' ');

		Clock.init();
		Timer.start();

		for (;;) {
			if (Clock.loop()) {
				Display.line1();

				disp02(year/100);
				disp02(year%100);
				Display.data('-');
				disp02(getMonth());
				Display.data('-');
				disp02(getDay());

				Display.data(' ');
				int i = s;

				disp02(i/3600);
				Display.data(':');
				i %= 3600;
				disp02(i/60);
				Display.data(':');
				disp02(i%60);
			}
			Timer.waitForNextInterval();
		}
	}

	private static void disp02(int i) {

		Display.data('0'+(i/10));
		Display.data('0'+(i%10));
	}
*/

	public static void init() {

		mtab = new int[12];
/*	dup_x2 fehlt
		mtab[0] = mtab[2] = mtab[4] = mtab[6] = mtab[7] = mtab[9] = mtab[11] = 31;
		mtab[3] = mtab[5] = mtab[8] = mtab[10] = 30;
		mtab[1] = 28;
*/
		mtab[0] = 31;
		mtab[1] = 28;
		mtab[2] = 31;
		mtab[3] = 30;
		mtab[4] = 31;
		mtab[5] = 30;
		mtab[6] = 31;
		mtab[7] = 31;
		mtab[8] = 30;
		mtab[9] = 31;
		mtab[10] = 30;
		mtab[11] = 31;

		buf = new int[20];

		setDate(2002, 01, 01);
		setTime(00, 00, 00);

		next = JopSys.rd(JopSys.IO_CNT)+JopSys.ONE_SECOND;
	}

	public static boolean loop() {

		if (next-JopSys.rd(JopSys.IO_CNT) < 0) {

			++s;
			if (s==86400) {
				s = 0;
				++day;
				if ((leap && day==367) || (!leap && day==366)) {
					day = 1;
					++year;
					leap = leapYear(year);
					mtab[1] = leap ? 29 : 28;
				}
			}
			next += JopSys.ONE_SECOND;
			return true;
		}
		return false;
	}

	public static boolean setDate(int y, int m, int d) {

		boolean oldLeap = leap;

		if (m<1 || m>12) return false;
		leap = leapYear(y);
		mtab[1] = leap ? 29 : 28;
		if (d<1 || d>mtab[m-1]) {
			leap = oldLeap;
			mtab[1] = leap ? 29 : 28;
			return false;
		}
		year = y;
		day = 0;
		for (int i=0; i<m-1; ++i) {
			day += mtab[i];
		}
		day += d;
		return true;
	}

	public static boolean setTime(int hour, int min, int sec) {

		if (hour<0 || hour>23) return false;
		if (min<0 || min>59) return false;
		if (sec<0 || sec>59) return false;
		s = hour*3600 + min*60 +sec;
		return true;
	}

	public static int getYear() {
		return year;
	}

	public static int getMonth() {
	
		int m;
		int d = mtab[0];
		for (m=1; m<12 && d<day; ++m) {
			d += mtab[m];
		}
		return m;
	}

	public static int getDay() {
	
		int m;
		int d = mtab[0];
		for (m=1; m<12 && d<day; ++m) {
			d += mtab[m];
		}
		return day-d+mtab[m-1];
	}

	public static int getSec() {

		return s;
	}


	public static void getDate(int[] buf) {

		int i;

		buf[4] = '-';
		buf[7] = '-';
		buf[10] = ' ';
		buf[13] = ':';
		buf[16] = ':';
		buf[19] = ' ';

		buf[0] = '0'+year/1000;
		buf[1] = '0'+year%1000/100;
		buf[2] = '0'+year%100/10;
		buf[3] = '0'+year%10;
		i = getMonth();
		buf[5] = '0'+i/10;
		buf[6] = '0'+i%10;
		i = getDay();
		buf[8] = '0'+i/10;
		buf[9] = '0'+i%10;
		i = s/3600;
		buf[11] = '0'+i/10;
		buf[12] = '0'+i%10;
		i = s%3600/60;
		buf[14] = '0'+i/10;
		buf[15] = '0'+i%10;
		i = s%60;
		buf[17] = '0'+i/10;
		buf[18] = '0'+i%10;
		buf[19] = ' ';

	}

	private static boolean leapYear(int y) {

		if (y%4 == 0) {
			if (y%100 == 0) {
				if (y%400 == 0) {
					return true;
				}
				return false;
			}
			return true;
		}
		return false;
	}


/*
	public static void main(String[] args) {

		init();

		System.out.println(setDate(2000, 1, 1)+" "+day+" "+getMonth()+" "+getDay());
		System.out.println(setDate(2000, 0, 1)+" "+day+" "+getMonth()+" "+getDay());
		System.out.println(setDate(2000, 1, 31)+" "+day+" "+getMonth()+" "+getDay());
		System.out.println(setDate(2000, 2, 1)+" "+day+" "+getMonth()+" "+getDay());
		System.out.println(setDate(2000, 12, 31)+" "+day+" "+getMonth()+" "+getDay());
		System.out.println(setDate(2000, 2, 29)+" "+day+" "+getMonth()+" "+getDay());
		System.out.println(setDate(2001, 2, 29)+" "+day+" "+getMonth()+" "+getDay());
		System.out.println(setDate(2001, 12, 31)+" "+day+" "+getMonth()+" "+getDay());

		setDate(2000, 1, 1);
		for (day=1; day<368; ++day) {
			System.out.println(getYear()+"-"+getMonth()+"-"+getDay());
		}
		setDate(2001, 1, 1);
		for (day=1; day<368; ++day) {
			System.out.println(getYear()+"-"+getMonth()+"-"+getDay());
		}
	}
*/
}
@


1.1
log
@resync with current development
@
text
@d1 20
@

