Knowledge Base Nr: 00185 vcrprogsms.cpp - http://www.swe-kaiser.de

Win32: Programmierung Digitaler Videorecorder über Handy (SMS)

  
//z.b.: xxx#xxx#2#17*22#18*11#xxx (xxx => unkenntlich gemacht um missbrauch zu verhindern!)
// 2.programm (zdf) von 17:22 bis 18:11 heute oder falls zeit schon vorbei morgen aufnehmen

int CSMSinfoDlg::DoProgramVCR(const char* lpszProg)
{
TRACE("VCRPROG: <%s>\n", lpszProg);

CString str(lpszProg);
CString strStart, strEnd, strSender, strTitel;

int nPos1 = str.Find('#');
int nPos2 = str.Find('#', nPos1+1);
int nPos3 = str.Find('#', nPos2+1);
int nPos4 = str.Find('#', nPos3+1);
int nPos5 = str.Find('#', nPos4+1);

if (nPos5 < 0)
return -1;

str.Replace('*', ':');

strSender = str.Mid(nPos2+1, nPos3-nPos2-1);
strStart = str.Mid(nPos3+1, nPos4-nPos3-1);
strEnd = str.Mid(nPos4+1, nPos5-nPos4-1);
strTitel.Format("sms_%d", ::GetTickCount());

//ard, zdf oder sw3
if ((atoi(strSender) < 1) || (atoi(strSender) > 3))
return -11;

SYSTEMTIME stNow, stStart, stEnd;
::GetSystemTime(&stNow);
::GetSystemTime(&stStart);
::GetSystemTime(&stEnd);

CTime ctNow(stNow);

int nConv = sscanf(strStart, "%d:%d", &stStart.wHour, &stStart.wMinute);
if (nConv != 2)
return -2;
CTime ctStart(stStart);

nConv = sscanf(strEnd, "%d:%d", &stEnd.wHour, &stEnd.wMinute);
if (nConv != 2)
return -3;
CTime ctEnd(stEnd);

//zeit heute schon vorbei dann am nächsten tag aufnehmen
if (ctStart < ctNow)
{
ctStart += CTimeSpan(1, 0, 0, 0);
ctEnd += CTimeSpan(1, 0, 0, 0);
}
if (ctEnd < ctNow)
{
ctEnd += CTimeSpan(1, 0, 0, 0);
}

//1 # 20.03.2004 20:55 # 20.03.2004 22:59 # ARD # test2
str.Format("1 # %s # %s # %s # %s\n"
, (const char*)ctStart.Format("%d.%m.%Y %H:%M")
, (const char*)ctEnd.Format("%d.%m.%Y %H:%M")
, (const char*)strSender
, (const char*)strTitel
);

const char* SCHEDULERLIST = "e:/config/vcrsched.txt";

FILE* fp = fopen(SCHEDULERLIST, "a+t");
if (!fp)
return -4;

fprintf(fp, str);
fclose(fp);

return 0;
}