lli

A small emulated asm like lang
Log | Files | Refs

time_core.c (1044B)


      1 #include <time.h>
      2 #include <string.h>
      3 #include <stdint.h>
      4 
      5 /* table of memory
      6  * | function | size | loc |
      7  * +----------+------+-----+
      8  * | year     | 2    | 0   |
      9  * | month    | 1    | 2   |
     10  * | day      | 1    | 3   |
     11  * | hour     | 1    | 4   |
     12  * | min      | 1    | 5   |
     13  * | sec      | 1    | 6   |
     14  */
     15 
     16 enum table {
     17 	YEAR = 0,
     18 	MONTH = 2,
     19 	DAY,
     20 	HOUR,
     21 	MIN,
     22 	SEC,
     23 };
     24 
     25 int
     26 getsize() {
     27 	return 7;
     28 }
     29 
     30 void
     31 onread(char *addr, char *loc) {
     32 	time_t t;
     33 	struct tm *tval;
     34 	if (loc - addr < 7 && loc - addr > 0) {
     35 		t = time(NULL);
     36 		tval = localtime(&t);
     37 	} else return;
     38 
     39 	uint8_t val8;
     40 	uint16_t val16;
     41 
     42 	switch (loc - addr) {
     43 	case YEAR: val16 = tval->tm_year; break;
     44 	case MONTH: val8 = tval->tm_mon; break;
     45 	case DAY: val8 = tval->tm_mday; break;
     46 	case HOUR: val8 = tval->tm_hour; break;
     47 	case MIN: val8 = tval->tm_min; break;
     48 	case SEC: val8 = tval->tm_sec; break;
     49 	}
     50 
     51 	if (loc - addr == YEAR)
     52 		memcpy(loc, (uint16_t *)&val16, sizeof(uint16_t)); 
     53 	else
     54 		memcpy(loc, (uint8_t *)&val8, sizeof(uint8_t));
     55 }
     56 
     57 void
     58 onwrite() {
     59 	return;
     60 }