LTCD_070816.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:45:20 +02:00
1 parent d14bbc24f9
commit 0e9364ff4c
506 files changed
+157705 -41812

No files matched your search

+164
View File
@@ -0,0 +1,164 @@
#define TIME_FILENAME "HOME/TimeClock/TimeFile.DTZ"
#define TET_EOF 0
#define TET_PUNCH_IN 1
#define TET_PUNCH_OUT 2
class TimeEntry
{
TimeEntry *next,*last;
LTDate d;
U1 type;
I1 *desc;
};
void ReadTimeFile(TimeEntry *header)
{
U1 *buf,*ptr,type;
TimeEntry *tempt;
LTDate *d;
buf=ReadFile(TIME_FILENAME);
if (!buf)
buf=MAllocZ(1);
header->next=header;
header->last=header;
ptr=buf;
while (type=*ptr++) {
tempt=MAllocZ(sizeof(TimeEntry));
tempt->type=type;
d=ptr;
ptr+=sizeof(LTDate);
tempt->d=*d;
tempt->desc=NewStr(ptr);
ptr+=StrLen(ptr)+1;
InsQue(tempt,header->last);
}
Free(buf);
}
void WriteTimeFile(TimeEntry *header)
{
U1 *buf,*ptr;
TimeEntry *tempt;
LTDate *d;
U8 size=1; //for eof
tempt=header->next;
while (tempt!=header) {
size+=sizeof(U1)+sizeof(LTDate)+StrLen(tempt->desc)+1;
tempt=tempt->next;
}
buf=MAlloc(size);
ptr=buf;
tempt=header->next;
while (tempt!=header) {
*ptr++=tempt->type;
d=ptr;
*d=tempt->d;
ptr+=sizeof(LTDate);
StrCpy(ptr,tempt->desc);
ptr+=StrLen(tempt->desc)+1;
tempt=tempt->next;
}
*ptr=TET_EOF;
WriteFile(TIME_FILENAME,buf,size);
Free(buf);
}
void DelTimeEntries(TimeEntry *header)
{
TimeEntry *tempt=header->next,*tempt1;
while (tempt!=header) {
tempt1=tempt->next;
Free(tempt->desc);
Free(tempt);
tempt=tempt1;
}
Free(header);
}
public BoolU4 TimeRep(TimeEntry **header=NULL)
{
BoolU4 is_in=FALSE;
TimeEntry *tempt;
U8 week,cur_week,week_total=0;
TimeEntry *my_header=MAlloc(sizeof(TimeEntry));
if (header)
*header=my_header;
ReadTimeFile(my_header);
tempt=my_header->next;
while (tempt!=my_header) {
week=tempt->d.date/7; //TODO
if (week!=cur_week) {
if (is_in)
week_total=week_total+GetCurTimeLTDate;
PrintF("Week Total:%h2T\r\n",week_total);
cur_week=week;
week_total=0;
}
if (tempt->type==TET_PUNCH_IN) {
PutS("$$FG,RED$$IN ");
if (!is_in)
week_total=week_total-tempt->d;
is_in=TRUE;
} else {
PutS("$$FG,RED$$OUT");
if (is_in)
week_total=week_total+tempt->d;
is_in=FALSE;
}
PrintF(" %h2D %T:$$FG$$\r\n%s\r\n",
tempt->d,tempt->d,tempt->desc);
tempt=tempt->next;
}
if (is_in)
week_total=week_total+GetCurTimeLTDate;
PrintF("$$FG,RED$$Week Total:%h2T$$FG$$\r\n",week_total);
if (!header)
DelTimeEntries(my_header);
return is_in;
}
void PunchOut()
{
BoolU4 is_in;
TimeEntry *tempt,*header;
is_in=TimeRep(&header);
if (!is_in) {
PutS("$$BK,1$$Already Punched-Out$$BK,0$$\r\n");
View;
} else {
tempt=MAlloc(sizeof(TimeEntry));
tempt->type=TET_PUNCH_OUT;
tempt->d=GetCurTimeLTDate;
PrintF("\r\nEnter Description:\r\n");
if (!(tempt->desc=MGetS))
tempt->desc=MAllocZ(1);
InsQue(tempt,header->last);
WriteTimeFile(header);
}
DelTimeEntries(header);
}
void PunchIn()
{
BoolU4 is_in;
TimeEntry *tempt,*header;
is_in=TimeRep(&header);
if (is_in) {
PutS("$$BK,1$$Already Punched-In$$BK,0$$\r\n");
View;
} else {
tempt=MAlloc(sizeof(TimeEntry));
tempt->type=TET_PUNCH_IN;
tempt->d=GetCurTimeLTDate;
PrintF("\r\nEnter Description:\r\n");
if (!(tempt->desc=MGetS))
tempt->desc=MAllocZ(1);
InsQue(tempt,header->last);
WriteTimeFile(header);
}
DelTimeEntries(header);
}