#include <stdio.h>
#include <stdlib.h>
#include "libpasori.h"
#include "libpasori_command.h"
#define TRUE 1
#define FALSE 0
const unsigned long dayofm[ ] = { /* 閏年でない年の各月の日数 */
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
const unsigned long dayoflm[ ] = { /* 閏年の各月の日数 */
31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
int IsLeapYear(int year)
{
if (!(year % 4) && ((year % 100) || !(year % 400)))
return (TRUE);
else
return (FALSE);
}
int main(int argc, char **argv){
pasori* p;
felica* f;
int i;
unsigned int month, day;
uint8 b[16];
char* devpath = NULL;
if (argc == 2) {
devpath = argv[1];
}
p = pasori_open(devpath);
if(!p){
printf("error\n");
exit(-1);
}
pasori_init(p);
f = felica_polling(p,0xFE00,0,0);
if (f) {
printf("*** Edy Value ***\n");
i=0;
while(!felica_read_without_encryption02(f,0x170F,0,i,b)){
printf("[%02d] : ",i);
printf("%02X ",b[0]);
int year = 2000;
day = (b[4]*256+b[5])/2;
while (day > 366) {
if (IsLeapYear(year))
day -= 366;
else
day -= 365;
year++;
}
day++;
month=0;
while (1) {
if (IsLeapYear(year)) {
if (day <= dayoflm[month -1])
break;
else {
day -= dayoflm[month -1];
month++;
}
}
if (!IsLeapYear(year)) {
if (day <= dayofm[month -1])
break;
else {
day -= dayofm[month -1];
month++;
}
}
}
printf("%02d/%02d/%02d ", year, month, day);
printf("%02X",b[6]);
printf("%02X",b[7]);
if(b[0]==0x02)
printf(" % 5d Yen(chg) ",b[10]*256+b[11]);
else
printf(" % 5d Yen(use) ",b[10]*256+b[11]);
printf(" --> % 5d Yen (rest) ",b[14]*256+b[15]);
printf("%02X%02X%02X\n",b[1],b[2],b[3]);
i++;
}
free(f);
}
pasori_close(p);
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1