void LogoManager_MoveExternalUpdates(void) { TRACEENTER(); char Files[3][20] = {"LogoPack.tar", "Logos.lil", "lil.add"}; char Drive, Partition; int File; char DatFile[28], cmd[255]; //Scan some external drives to find the logo updates for(File = 0; File < 3; File++) { for(Drive = 'b'; Drive < 'f'; Drive++) { for(Partition = '0'; Partition < '2'; Partition++) { if(Partition == '0') TAP_SPrint(DatFile, "/mnt/sd%c/%s", Drive, Files[File]); else TAP_SPrint(DatFile, "/mnt/sd%c%c/%s", Drive, Partition, Files[File]); if(!access(DatFile, F_OK)) { TAP_SPrint(cmd, "mv %s /mnt/hd/ProgramFiles/Settings/Logos", DatFile); system(cmd); } } } } TRACEEXIT(); }
void SaveDatToFile( void ) { TYPE_File *writeFile; int i; char str[256]; appendToLogfile("SaveDatToFile: Started.", INFO); playDataBuffer_ini = TAP_MemAlloc( PLAYBACKDATA_BUFFER_SIZE_ini ); // Buffer the write data to memory before writing all in one hit memset( playDataBuffer_ini, '\0', PLAYBACKDATA_BUFFER_SIZE_ini ); // set the whole buffer to the string termination character (null) playDataBufferPtr_ini = 0; TAP_SPrint(str, "%d\r\n", numberOfPlayedFiles); // First entry is the number of played files. WriteStrToDatBuf( str ); for (i = 0; i <= numberOfPlayedFiles; i++) { // Write entry TAB with delimited fields. // 1. startcluster // 2. current block position. // 3. total block size. // 4. filename. TAP_SPrint(str, "%d\t%d\t%d\t%s\r\n", playedFiles[i]->startCluster, playedFiles[i]->currentBlock, playedFiles[i]->totalBlock, playedFiles[i]->name); WriteStrToDatBuf( str ); } appendToLogfile("SaveDatToFile: WriteDatFile called to write DATA file.", WARNING); WriteDatFile( writeFile ); // write all the data in one pass TAP_MemFree( playDataBuffer_ini ); // must return the memory back to the heap appendToLogfile("SaveDatToFile: Finished.", INFO); }
//----------------------------------------------------------------------- // void ReturnFromMoveRenameYesNo( bool result) { // Routine if invoked upon return from the "Automatic Rename on Move" confirmation prompt. char str1[200], str2[200]; int renameResult; appendToLogfile("ReturnFromMoveRenameYesNo: Started.", INFO); // Check the result of the confirmation panel to decide what to do. switch (result) { case TRUE: // YES appendStringToLogfile("ReturnFromMoveRenameYesNo: Rename from %s", GlbSourceFile, WARNING); appendStringToLogfile("ReturnFromMoveRenameYesNo: to %s", GlbRenamedFile, WARNING); #ifdef WIN32 // If testing on WIN32 platform don't do rename as not yet implemented in the TAP SDK. renameResult=0; #else renameResult=TAP_Hdd_Rename(GlbSourceFile,GlbRenamedFile); #endif if (renameResult!=0) { TAP_SPrint(str1,"Error renaming: '%s'", GlbSourceFile); TAP_SPrint(str2,"to: '%s'", GlbRenamedFile); fileMoved = FALSE; returnFromMove = FALSE; // Don't close the Move window to give user a chance to choose a different folder. ShowMessageWin( rgn, "Rename On Move Failed.", str1, str2, 500 ); break; } strncpy( GlbSourceFile, GlbRenamedFile, 256 ); // Copy the renamed filename into the Global variable so that we move the renamed file. PerformMove(); switch (RenameOnMoveOption) { case 0: // "Rename and confirm" // Close the Move Window after this, otherwise it is closed as part of the other routines. CloseArchiveMoveWindow(); // Close the move window break; case 2: // "Rename automatically (with message) " TAP_SPrint(str1, "%s/%s", GlbTargetDir, GlbRenamedFile); ShowMessageWin( rgn, "File Move Successful.", "Moved and renamed file to:", str1, 400 ); break; default: // "Rename automatically (no message) " break; } break; case FALSE: // NO fileMoved = FALSE; returnFromMove = FALSE; // Don't close the Move window to give user a chance to choose a different folder. break; } appendToLogfile("ReturnFromMoveRenameYesNo: Finished.", INFO); }
void DumpMemoryDword(dword *p, dword size) { TRACEENTER(); dword *StartAddress = p; int CollectedBytes; char Header[20]; char s[255]; int Remaining; if(!p) { TAP_Print("0x00000000 NULL\n"); TRACEEXIT(); return; } s[0] = '\0'; CollectedBytes = 0; TAP_SPrint(Header, "%p 0x%4.4x: ", p, (dword)p - (dword)StartAddress); Remaining = size; while(Remaining > 0) { TAP_SPrint(&s[strlen(s)], "%8.8x ", *p); CollectedBytes += 4; p++; Remaining -= 4; if(CollectedBytes >= 16) { strcat(s, "\n"); TAP_Print(Header); TAP_Print(s); s[0] = '\0'; TAP_SPrint(Header, "%p 0x%4.4x: ", p, (dword)p - (dword)StartAddress); CollectedBytes = 0; } } if(strlen(s)) { strcat(s, "\n"); TAP_Print(Header); TAP_Print(s); } TRACEEXIT(); }
bool HDD_Move (char *FileName, char *FromDir, char *ToDir) { dword TAP_Hdd_MoveOld; char FromFile [FBLIB_DIR_SIZE], TempFromDir [FBLIB_DIR_SIZE], TempToDir [FBLIB_DIR_SIZE]; if (strlen(FromDir) >= sizeof(TempFromDir) || strlen(ToDir) >= sizeof(TempToDir)) return FALSE; //The move function doesn't recognize a / as root. Use /DataFiles/.. instead. strcpy (TempFromDir, FromDir); if (!strcmp (TempFromDir, "/")) strcpy (TempFromDir, "/DataFiles/.."); strcpy (TempToDir, ToDir); if (!strcmp (TempToDir, "/")) strcpy (TempToDir, "/DataFiles/.."); if (TAP_Hdd_Move == NULL) TAP_Hdd_Move = (tTAP_Hdd_Move) TAP_GetSystemProc(oTAP_Hdd_Move); if (TAP_Hdd_Move == NULL) { #ifdef DEBUG_FIREBIRDLIB TAP_Print ("FireBirdLib: HDD_Move: _appl_version = %4.4x\n", _appl_version); #endif if (!(TAP_Hdd_MoveOld = FIS_fwMoveOld())) return FALSE; if (strlen(TempFromDir) + 1 + strlen(FileName) >= sizeof(FromFile)) return FALSE; TAP_SPrint (FromFile, "%s/%s", TempFromDir, FileName); #ifdef DEBUG_FIREBIRDLIB TAP_Print ("FireBirdLib: MoveOld: %s => %s\n", FromFile, TempToDir); #endif CallFirmware (TAP_Hdd_MoveOld, (dword) FromFile, (dword) TempToDir, 0, 0); return TRUE; } else return TAP_Hdd_Move(TempFromDir, TempToDir, FileName); }
void CallTraceExportStats(char *FileName) { char Output[512]; char AbsFileName[FBLIB_DIR_SIZE]; int f; double t; int i; if(!CallTraceInitialized) CallTraceInit(); if(CallTraceStats && FileName) { ConvertPathType(FileName, AbsFileName, PF_FullLinuxPath); f = open(AbsFileName, O_WRONLY | O_CREAT | O_TRUNC); if(f >= 0) { strcpy(Output, "Name;NrCalls;MinTime;MaxTime;TotalTime;AvgTime\r\n"); write(f, Output, strlen(Output)); for(i = 0; i < CallTraceStatsEntries;i++) { if(CallTraceStats[i].NrCalls) t = (double)(CallTraceStats[i].TotalTime * 10) / CallTraceStats[i].NrCalls; else t = 0; TAP_SPrint(Output, "%s;%d;%d;%d;%d;%1.1f\r\n", CallTraceStats[i].ProcName, CallTraceStats[i].NrCalls, CallTraceStats[i].MinTime*10, CallTraceStats[i].MaxTime*10, CallTraceStats[i].TotalTime*10, t); write(f, Output, strlen(Output)); } close(f); } } }
char* Time_HHMM( dword mjd ) { static char time[10]; int min; int hour; hour = (mjd&0xff00)>>8; // extract the time min = (mjd&0xff); TAP_SPrint(time, "%02d:%02d", hour, min); return time; }
bool EPGInfo_CreateCache(int NrRecords) { TRACEENTER(); extern dword __tap_ud__; TAP_SPrint(EPGCacheFile, "/mnt/hd/tmp/EPGCache_%x.bin", __tap_ud__); if(EPGInfoCacheFile) EPGInfo_DestroyCache(); EPGInfoCacheSize = NrRecords * sizeof(TYPE_EPGInfo); //Delete the old cache unlink(EPGCacheFile); mkdir("/mnt/hd/tmp", 0777); EPGInfoCacheFile = open(EPGCacheFile, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600); if(EPGInfoCacheFile == -1) { LogEntryFBLibPrintf(TRUE, "EPGInfo: failed to create the memory mapped EPG cache"); TRACEEXIT(); return FALSE; } //Increase the size of the cache as needed if(lseek(EPGInfoCacheFile, EPGInfoCacheSize, SEEK_SET) == -1) { LogEntryFBLibPrintf(TRUE, "EPGInfo: failed to stretch the memory mapped EPG cache"); close(EPGInfoCacheFile); unlink(EPGCacheFile); TRACEEXIT(); return FALSE; } write(EPGInfoCacheFile, "", 1); //Map the memory EPGInfoCacheMap = mmap(0, EPGInfoCacheSize, PROT_READ | PROT_WRITE, MAP_SHARED, EPGInfoCacheFile, 0); if(EPGInfoCacheMap == MAP_FAILED) { LogEntryFBLibPrintf(TRUE, "EPGInfo: failed to memory map the EPG cache file"); close(EPGInfoCacheFile); unlink(EPGCacheFile); TRACEEXIT(); return FALSE; } EPGInfoCache = (TYPE_EPGInfo*)EPGInfoCacheMap; TRACEEXIT(); return TRUE; }
void DisplayChannelSelection( void ) { char str[256]; TYPE_TapChInfo chInfo; TAP_Channel_GetInfo( selectedSvc, selectedLogo, &chInfo ); TAP_SPrint( str, "%d -> %d: %d: %s", oldPageNumber, pageNumber, chInfo.logicalChNum, chInfo.chName ); TAP_Osd_FillBox( rgn, 53, 490, 614, 86, FILL_COLOUR ); // clear the bottom portion TAP_Osd_PutStringAf1622( rgn, 58, 518, 610, str, INFO_COLOUR, FILL_COLOUR ); }
void InitTAPexFailedMsg(char *ProgramName) { TRACEENTER(); char s[28]; TAP_SPrint(s, "%d %4.4x", GetSysID(), ApplID); ShowMessageWin(ProgramName ? ProgramName : "", "FBLib failed to init", s, 500); TRACEEXIT(); }
//----------------------------------------------------------------------- // void ActivateDeleteWindow(char* filename, dword attr) { char title[50], str1[200], str2[200], str3[200]; if (myfiles[CurrentDirNumber][chosenLine]->isRecording) // We cannot delete a recording file. { ShowMessageWin( rgn, "File Delete Not Allowed.", "You cannot delete a file that is", "currently recording.", 400 ); return; } deleteWindowShowing = TRUE; fileDeleted = FALSE; switch (attr) { case ATTR_FOLDER: TAP_SPrint(title, "Folder Delete Confirmation"); TAP_SPrint(str1, "Folder: %s",filename); TAP_SPrint(str2, "Do you want to delete this folder?"); break; default: TAP_SPrint(title, "File Delete Confirmation"); TAP_SPrint(str1, "File: %s",filename); TAP_SPrint(str2, "Do you want to delete this file?"); break; } DisplayYesNoWindow(title, str1, str2, "Yes", "No", 1, &ReturnFromDeleteYesNo ); }
char *LogoManager_GetPathToLogoByChannelID(ulong64 ChannelID, tLogoStyle LogoStyle, tLogoSize LogoSize, tLogoAspect LogoAR, char *LogoPath) { TRACEENTER(); char s[20], LP[FBLIB_DIR_SIZE]; if(LogoPath) { LogoManager_Initialize(LogoManager_CB); TAP_SPrint(LogoPath, "%s/", LogoManager_GetDirectory(LogoStyle, LogoAR, LP)); HDD_TAP_PushDir(); HDD_ChangeDir(LOGOROOT); if(TAP_Hdd_Exist(LILNAME)) { TAP_SPrint(s, "%16.16llx", ChannelID); INIOpenFile(LILNAME, NULL); INIGetString(s, &LogoPath[strlen(LogoPath)], "", 40); INICloseFile(); HDD_TAP_PopDir(); switch(LogoSize) { case LGSZ_qtl: strcat(LogoPath, ".qtl"); break; case LGSZ_ibl: strcat(LogoPath, ".ibl"); break; case LGSZ_qsl: strcat(LogoPath, ".qsl"); break; default: break; } TRACEEXIT(); return LogoPath; } HDD_TAP_PopDir(); } TRACEEXIT(); return ""; }
dword TAP_EventHandler(word wEvent, dword dwParam1, dword dwParam2) { char message[10]; dword returnKey, state, subState; returnKey = dwParam1; switch(wEvent) /* ------------------------------------------------------------------------------------ */ { case EVT_IDLE: tmMain(); returnKey = 0; break; /* ------------------------------------------------------------------------------------ */ case EVT_KEY: TAP_GetState( &state, &subState ); if ( (dwParam1 == RKEY_Exit) && (state == STATE_Normal) && (subState == SUBSTATE_Normal) ) { TAP_SPrint( message, "%5u", tmNumberOfEvents); ShowMessageWin("Number Of Events Stored:",message); } if(dwParam1 == RKEY_F4) { ShowMessageWin("Exiting","TimeMon Tap"); TAP_Exit(); } break; /* ------------------------------------------------------------------------------------ */ default : break; /* ------------------------------------------------------------------------------------ */ } return (returnKey); }
//----------------------------------------------------------------------- // void DisplayArchiveMoveWindow() { char title[50]; appendToLogfile("DisplayArchiveMoveWindow: Started.", INFO); // Display the pop-up window - will also clear any old text if we are doing a refresh. TAP_Osd_PutGd( rgn, MOVE_WINDOW_X, MOVE_WINDOW_Y, &_popup476x416Gd, TRUE ); // TAP_Osd_FillBox( moveRgn, 0, 0, 720, 576, POPUP_FILL_COLOUR ); // clear the memory region with FILL COLOUR // Format and display the title for the Move Window. TAP_SPrint(title, "Select Destination Folder"); PrintCenter( rgn, MOVE_WINDOW_X, MOVE_WINDOW_Y + 14, MOVE_WINDOW_X+MOVE_WINDOW_W, title, MAIN_TEXT_COLOUR, 0, FNT_Size_1926 ); DisplayMoveLine(); appendToLogfile("DisplayArchiveMoveWindow: Finised.", INFO); }
bool ExtAttribSet(char *FileName, char *AttrName, byte *Data, int DataLen) { TRACEENTER(); char FullAttrName[128]; char AbsFileName[FBLIB_DIR_SIZE]; int f; if(!FileName || !*FileName || !AttrName || !*AttrName) { TRACEEXIT(); return FALSE; } ConvertPathType(FileName, AbsFileName, PF_FullLinuxPath); if(*AbsFileName) { f = open(AbsFileName, O_RDWR, 0600); if(f >= 0) { TAP_SPrint(FullAttrName, "user.%s", AttrName); if(fsetxattr(f, FullAttrName, Data, DataLen, XATTR_CREATE) == 0) { close(f); TRACEEXIT(); return TRUE; } else { //As the attribute may already exist, retry with the replace flag if(fsetxattr(f, FullAttrName, Data, DataLen, XATTR_REPLACE) == 0) { close(f); TRACEEXIT(); return TRUE; } } close(f); } } TRACEEXIT(); return FALSE; }
void DisplayChannelListWindow( int svcNum, byte svcType, void (*ReturningProcedure)( int, byte, bool ) ) { char str[256]; CallbackChannelSelect = ReturningProcedure; channelListWindowShowing = TRUE; selectedLogo = svcNum; selectedSvc = svcType; sysDrawGraphicBorders(); // Draw the pretty graphical surround TAP_SPrint( str, text_ChannelSelection/*see language.c */ ); TAP_Osd_PutStringAf1926( rgn, 58, 40, 390, str, TITLE_COLOUR, COLOR_Black ); pageNumber = ( selectedLogo / MAX_CHANNELS_PER_PAGE ); ReDrawAllLogosInPage(pageNumber); }
char* Endtime_HHMM( dword mjd, word duration ) { static char time[10]; int min; int hour; hour = (mjd&0xff00)>>8; // extract the time min = (mjd&0xff); hour += (duration-(duration%60))/60; min += (duration%60); // Check for increase in the hour if( min >= 60 ) { hour++; min -= 60; } // Check hour sanity if( hour >= 24 ) hour -= 24; TAP_SPrint(time, "%02d:%02d", hour, min); return time; }
void tmLogEvent(void) { char tmBuffer[TM_EVENT_BUFFER_SIZE]; TYPE_File* fp; memset (tmBuffer, 0, TM_EVENT_BUFFER_SIZE); TAP_SPrint( tmBuffer, "%02u:%02u:%02u %02u/%02u/%04u, %3u, %3u, %3u %02u:%02u:%02u %02u/%02u/%04u, %3u, %3u, %3u\r\n", hourLast, minLast, secLast, dayLast, monthLast, yearLast, signalLevelLast, signalQualityLast, timersLast, hour, min, sec, day, month, year, signalLevel, signalQuality, timers); if (fp = TAP_Hdd_Fopen (TM_FILENAME)) { TAP_Hdd_Fseek (fp, tmBufferOffset, 0); TAP_Hdd_Fwrite (tmBuffer, 1, strlen(tmBuffer), fp); TAP_Hdd_Fclose (fp); tmBufferOffset += strlen(tmBuffer); tmNumberOfEvents++; if (tmBufferOffset >= (TM_FILE_MAX_LENGTH - TM_EVENT_BUFFER_SIZE)) { ShowMessageWin("Log File Full","Exiting!"); TAP_Exit(); return; } } else { ShowMessageWin("Error! - Unable to open file","Exiting!"); TAP_Exit(); return; } }
//------------ // void DeleteFileFolder(void) { char str[TS_FILE_NAME_SIZE]; if (myfiles[CurrentDirNumber][chosenLine]->isPlaying) TAP_Hdd_StopTs(); // Stop the current playback to allow us to delete the file. TAP_Hdd_Delete(myfiles[CurrentDirNumber][chosenLine]->name); // Check if the delete was successful. #ifdef WIN32 if (FALSE) #else if (TAP_Hdd_Exist(myfiles[CurrentDirNumber][chosenLine]->name)) // Delete didn't work #endif { TAP_SPrint(str,myfiles[CurrentDirNumber][chosenLine]->name); ShowMessageWin( rgn, "File Deletion Failed.", "Failed to delete file:", str, 400 ); fileDeleted = FALSE; } else fileDeleted = TRUE; }
void SeparatePathComponents(char *FullName, char *Path, char *FileName, char *FileExt) { TRACEENTER(); int Index; bool isDel; if(Path) Path[0] = '\0'; if(FileName) FileName[0] = '\0'; if(FileExt) FileExt[0] = '\0'; if(!FullName || !*FullName) { TRACEEXIT(); return; } SeparateFileNameComponents(FullName, Path, FileName, FileExt, &Index, NULL, &isDel); if(Index && FileName) TAP_SPrint(&FileName[strlen(FileName)], "-%d", Index); if(isDel && FileExt) strcat(FileExt, ".del"); TRACEEXIT(); }
char *TimeFormat(dword DateTime, byte Sec, eTimeStampFormat TimeStampFormat) { static char sTimeStamp [25]; //Log adds a SPACE to sTimeStamp. Do not make it too small! word Mjd, Year; byte Month, Day, WeekDay, Hour, Min; Mjd = MJD (DateTime); Hour = HOUR (DateTime); Min = MINUTE (DateTime); TAP_ExtractMjd (Mjd, &Year, &Month, &Day, &WeekDay); switch (TimeStampFormat) { case TIMESTAMP_HM : TAP_SPrint (sTimeStamp, "%02d:%02d", Hour, Min); break; case TIMESTAMP_HMS : TAP_SPrint (sTimeStamp, "%02d:%02d:%02d", Hour, Min, Sec); break; case TIMESTAMP_YMD : TAP_SPrint (sTimeStamp, "%02d-%02d-%02d", Year, Month, Day); break; case TIMESTAMP_YMDHM : TAP_SPrint (sTimeStamp, "%04d-%02d-%02d %02d:%02d", Year, Month, Day, Hour, Min); break; case TIMESTAMP_YMDHMS : TAP_SPrint (sTimeStamp, "%04d-%02d-%02d %02d:%02d:%02d", Year, Month, Day, Hour, Min, Sec); break; case TIMESTAMP_FNYMDHM: TAP_SPrint (sTimeStamp, "%04d%02d%02d_%02d%02d", Year, Month, Day, Hour, Min); break; default : sTimeStamp [0] = '\0'; } return sTimeStamp; }
char *TimeFormat(dword DateTime, byte Sec, eTimeStampFormat TimeStampFormat, char *Result) { TRACEENTER(); word Mjd, Year; byte Month, Day, WeekDay, Hour, Min; if(Result) { Mjd = MJD (DateTime); Hour = HOUR (DateTime); Min = MINUTE (DateTime); TAP_ExtractMjd(Mjd, &Year, &Month, &Day, &WeekDay); if(Mjd == 0) { Year = 0; Month = 0; Day = 0; WeekDay = 0; } switch(TimeStampFormat) { case TIMESTAMP_HM : TAP_SPrint(Result, "%02d:%02d", Hour, Min); break; case TIMESTAMP_HMS : TAP_SPrint(Result, "%02d:%02d:%02d", Hour, Min, Sec); break; case TIMESTAMP_YMD : TAP_SPrint(Result, "%02d-%02d-%02d", Year, Month, Day); break; case TIMESTAMP_YMDHM : TAP_SPrint(Result, "%04d-%02d-%02d %02d:%02d", Year, Month, Day, Hour, Min); break; case TIMESTAMP_YMDHMS : TAP_SPrint(Result, "%04d-%02d-%02d %02d:%02d:%02d", Year, Month, Day, Hour, Min, Sec); break; case TIMESTAMP_FNYMDHM: TAP_SPrint(Result, "%04d%02d%02d_%02d%02d", Year, Month, Day, Hour, Min); break; default : Result[0] = '\0'; break; } } TRACEEXIT(); return Result; }
void SaveConfigurationToFile( void ) { TYPE_File *writeFile = NULL; int i = 0; char str[256]; dataBuffer_ini = TAP_MemAlloc( DATA_BUFFER_SIZE_ini ); // Buffer the write data to memory before writing all in one hit memset( dataBuffer_ini, '\0', DATA_BUFFER_SIZE_ini ); // set the whole buffer to the string termination character (null) dataBufferPtr_ini = 0; switch ( unitModelType ) { case TF5800 : TAP_SPrint(str, "TF5800\r\n" ); break; case TF5000 : TAP_SPrint(str, "TF5000\r\n" ); break; default : TAP_SPrint(str, "BAD\r\n" ); break; } WriteStrToIniBuf( str ); TAP_SPrint(str, "%d\r\n", mainActivationKey ); WriteStrToIniBuf( str ); TAP_SPrint(str, "%d\r\n", schMainPerformSearchMode ); WriteStrToIniBuf( str ); TAP_SPrint(str, "%d\r\n", schMainPerformSearchTime ); WriteStrToIniBuf( str ); TAP_SPrint(str, "%d\r\n", FirmwareCallsEnabled ); WriteStrToIniBuf( str ); TAP_SPrint(str, "%d\r\n", schMainTRCEnabled ); WriteStrToIniBuf( str ); TAP_SPrint(str, "%d\r\n", schMainPerformSearchDays ); WriteStrToIniBuf( str ); TAP_SPrint(str, "%d\r\n", schMainDateFormat ); WriteStrToIniBuf( str ); TAP_SPrint(str, "%d\r\n", schMainTimeFormat ); WriteStrToIniBuf( str ); TAP_SPrint(str, "%d\r\n", keyboardLanguage ); WriteStrToIniBuf( str ); TAP_SPrint(str, "%d\r\n", schMainConflictOption ); WriteStrToIniBuf( str ); WriteIniFile( writeFile ); // write all the data in one pass TAP_MemFree( dataBuffer_ini ); // must return the memory back to the heap }
bool SetHandler(dword EventID, void *Handler, void **OrigHandler) { TRACEENTER(); static dword *__topEvent = NULL; tEventQueue *EventQueue; tEventQueueDetails *EventQueueDetails; int i; if(!Handler && !(dword*)Handler) { TRACEEXIT(); return FALSE; } if(!__topEvent) { __topEvent = (dword*)FIS_vTopEvent(); if(!__topEvent) { if(LastStatus != -10) WriteLog("Failed to resolve _topEvent"); LastStatus = -10; TRACEEXIT(); return FALSE; } } EventQueue = (tEventQueue*)*__topEvent; for(i = 0; i < 512; i++) { if(EventQueue->Queue) { if(EventQueue->EventID == EventID) { EventQueueDetails = (tEventQueueDetails*)EventQueue->Queue; if(((dword)Handler > 0x01400000) && (EventQueueDetails->Handler > 0x01400000)) { if(LastStatus != -11) { TAP_SPrint(Log, "Found 0x%x handler @ index %d. Already redirected to 0x%8.8x", EventID, i, EventQueueDetails->Handler); WriteLog(Log); LastStatus = -11; } TRACEEXIT(); return FALSE; } if(LastStatus != -12) { TAP_SPrint(Log, "Found 0x%x handler @ index %d. Redirecting from 0x%8.8x to 0x%8.8x", EventID, i, EventQueueDetails->Handler, (dword)Handler); WriteLog(Log); LastStatus = -12; } if(OrigHandler) *OrigHandler = (void*)EventQueueDetails->Handler; EventQueueDetails->Handler = (dword)Handler; TRACEEXIT(); return TRUE; } } EventQueue++; } if(LastStatus != -13) { TAP_SPrint(Log, "EventID %4.4x not yet declared", EventID); WriteLog(Log); LastStatus = -13; } TRACEEXIT(); return FALSE; }
bool SDS(void) { TRACEENTER(); static dword Timeout = 0; static tHookHandlerState LastHHS = HHS_Exit; static dword EF00FilterTimeout = 0; if(LastHHS != HookHandlerState) { switch(HookHandlerState) { case HHS_Init: WriteLog("HHS_Init"); break; case HHS_Idle: WriteLog("HHS_Idle"); break; case HHS_EF00Received: WriteLog("HHS_EF00Received"); break; case HHS_PowerOffCancel: WriteLog("HHS_PowerOffCancel"); break; case HHS_ShutdownTimerDiags: WriteLog("HHS_ShutdownTimerDiags"); break; case HHS_Shutdown: WriteLog("HHS_Shutdown"); break; case HHS_Exit: WriteLog("HHS_Exit"); break; } LastHHS = HookHandlerState; } switch(HookHandlerState) { case HHS_Init: { char *TAPFileName; tTAPInfo TAPInfo; CreateRootDir(); //Init some firmware routines if(!__DevFront_PowerOffReply) { __DevFront_PowerOffReply = (void*)FIS_fwDevFront_PowerOffReply(); if(!__DevFront_PowerOffReply) { if(LastStatus != -1) WriteLog("Failed to resolve DevFront_PowerOffReply()"); LastStatus = -1; HookHandlerState = HHS_Exit; TRACEEXIT(); return FALSE; } } if(!__DevFront_PowerOffCancel) { __DevFront_PowerOffCancel = (void*)FIS_fwDevFront_PowerOffCancel(); if(!__DevFront_PowerOffCancel) { if(LastStatus != -2) WriteLog("Failed to resolve DevFront_PowerOffCancel()"); LastStatus = -2; HookHandlerState = HHS_Exit; TRACEEXIT(); return FALSE; } } //Modify the handler pointer of the ef00 event queue if(!SetHandler(0xef00, Hooked_ApplEvent_CallHandler, (void*)&OrigHandler)) { TRACEEXIT(); return FALSE; } if(!LibInitialized && !InitTAPex()) { TRACEEXIT(); return FALSE; } if(HDD_TAP_GetFileNameByIndex(TAP_TableIndex, &TAPFileName)) { if(!HDD_TAP_GetInfo(TAPFileName, &TAPInfo)) strcpy(TAPInfo.TAPName, "???"); } else strcpy(TAPInfo.TAPName, "???"); TAP_SPrint(Log, "SDS has been activated by '%s'", TAPInfo.TAPName); WriteLog(Log); HookHandlerState = HHS_Idle; break; } case HHS_Idle: { if(EF00FilterTimeout && TAP_GetTick() > EF00FilterTimeout) EF00FilterTimeout = 0; if(ShutdownHooked) { HookHandlerState = HHS_EF00Received; ShutdownHooked = FALSE; } break; } case HHS_EF00Received: { __DevFront_PowerOffReply(); if(EF00FilterTimeout) { Timeout = TAP_GetTick() + 50; HookHandlerState = HHS_PowerOffCancel; } else { dword ret = HDD_TAP_SendEvent(0, TRUE, EVT_STOP, 2, 0); if(ret == 0) { if(LastStatus != -4) WriteLog("A TAP has intercepted the shutdown notfication"); LastStatus = -4; Timeout = TAP_GetTick() + 50; HookHandlerState = HHS_PowerOffCancel; } else { HookHandlerState = HHS_ShutdownTimerDiags; } } break; } case HHS_PowerOffCancel: { if(TAP_GetTick() > Timeout) { if(LastStatus != -5) WriteLog("The shutdown has been canceled"); LastStatus = -5; __DevFront_PowerOffCancel(); EF00FilterTimeout = TAP_GetTick() + 200; HookHandlerState = HHS_Idle; } break; } case HHS_ShutdownTimerDiags: { if(LastStatus != -6) WriteLog("Notifiying TimerDiags about the shutdown"); LastStatus = -6; HDD_TAP_SendEvent(0x8E0A4224, FALSE, EVT_STOP, 0, 0); Timeout = TAP_GetTick() + 200; HookHandlerState = HHS_Shutdown; break; } case HHS_Shutdown: { if(TAP_GetTick() > Timeout) { if(OrigHandler) { SetHandler(0xef00, OrigHandler, NULL); OrigHandler = NULL; } if(LastStatus != -7) WriteLog("Notifiying all TAPs about the shutdown"); LastStatus = -7; HDD_TAP_SendEvent(0, FALSE, EVT_STOP, 0, 0); //TAP_Exit(); if(LastStatus != -8) WriteLog("Enqueuing the shutdown event"); LastStatus = -8; Shutdown(TaskPower); HookHandlerState = HHS_Exit; } break; } case HHS_Exit: { if(OrigHandler) { SetHandler(0xef00, OrigHandler, NULL); OrigHandler = NULL; if(LastStatus != -9) WriteLog("SDS has been deactivated"); LastStatus = -9; } TRACEEXIT(); return FALSE; } } TRACEEXIT(); return TRUE; }
void OSDDrawList(void) { TRACEENTER(); int i; dword XStart, XEnd, Y; tMenu *pMenu; tItem *pItem; dword ItemColor; char s[4]; dword MaxNameIconWidth, MaxValueIconWidth; pMenu = &Menu[CurrentMenuLevel]; //Get maximum width of icons MaxNameIconWidth = 0; MaxValueIconWidth = 0; for(i = 0; i < pMenu->NrItems; i++) { if(pMenu->Item[i].pNameIconGd && (pMenu->Item[i].pNameIconGd->width > MaxNameIconWidth)) MaxNameIconWidth = pMenu->Item[i].pNameIconGd->width; if(pMenu->Item[i].pValueIconGd && (pMenu->Item[i].pValueIconGd->width > MaxValueIconWidth)) MaxValueIconWidth = pMenu->Item[i].pValueIconGd->width; if(pMenu->Item[i].ColorPatch && (MaxValueIconWidth < 50)) MaxValueIconWidth = 50; } if(MaxNameIconWidth) MaxNameIconWidth += 8; if(MaxValueIconWidth) MaxValueIconWidth += 8; //The background TAP_Osd_Draw3dBoxFill(OSDRgn, 60, 96, 600, 367, RGB(30, 30, 30), RGB(30, 30, 30), RGB(30, 30, 30)); for(i = 0; i < 10; i++) { pItem = &pMenu->Item[i + pMenu->CurrentTopIndex]; //Draw the background or selection bar and the optional value arrows if((i + pMenu->CurrentTopIndex) == pMenu->CurrentSelection) { OSDMenuDrawCursor(60, 95 + (i * 37), 600); if(pMenu->HasValueColumn && pItem->ValueArrows) { TAP_Osd_PutGd(OSDRgn, pMenu->ValueXPos + 20 , 95 + 10 +(i * 37), (MenuCursorType == CT_Standard ? &_pfeil_l_Gd : &_pfeil_l_bright_Gd), TRUE); TAP_Osd_PutGd(OSDRgn, 640 , 95 + 10 +(i * 37), (MenuCursorType == CT_Standard ? &_pfeil_r_Gd : &_pfeil_r_bright_Gd), TRUE); } } else { TAP_Osd_DrawRectangle(OSDRgn, 60, 130 + (i * 37), 600, 2, 1, RGB(16, 16, 16)); } XEnd = (pMenu->HasValueColumn ? pMenu->ValueXPos : 645); Y = 99 + (i * 37); if(pItem->Selectable) ItemColor = pItem->TextColor; else ItemColor = RGB(128, 128, 140); //Line numbers if(pMenu->NumberedItems) { int MaxX = 100; XStart = 101; if(pItem->CustomIndex >= 0) { TAP_SPrint(s, "%2.2d", pItem->CustomIndex); if(pItem->CustomIndex > 99) { XStart += 10; MaxX += 10; } if(pItem->CustomIndex > 999) { XStart += 10; MaxX += 10; } } else { TAP_SPrint(s, "%2.2d", i + pMenu->CurrentTopIndex + 1); if(i + pMenu->CurrentTopIndex + 1 > 99) { XStart += 10; MaxX += 10; } if(i + pMenu->CurrentTopIndex + 1 > 999) { XStart += 10; MaxX += 10; } } FMUC_PutStringAA(OSDRgn, 71, Y + 5 + FONTYOFFSET, MaxX, s, ItemColor, COLOR_None, pMenu->FontListLineNumber, FALSE, ALIGN_LEFT, 1); } else { XStart = 76; } //Icons on the left column if(pItem->pNameIconGd) TAP_Osd_PutGd(OSDRgn, XStart, Y + 13 - (pItem->pNameIconGd->height >> 1), pItem->pNameIconGd, TRUE); //The text of the left column FMUC_PutStringAA(OSDRgn, XStart + MaxNameIconWidth, Y + 5 + FONTYOFFSET, XEnd, pItem->Name, ItemColor, COLOR_None, pMenu->FontListNameColumn, TRUE, ALIGN_LEFT, 1); if(pMenu->HasValueColumn) { //The text of the right column FMUC_PutStringAA(OSDRgn, pMenu->ValueXPos + 45 + MaxValueIconWidth, Y + 5 + FONTYOFFSET, 645, pItem->Value, ItemColor, COLOR_None, pMenu->FontListValueColumn, TRUE, ALIGN_LEFT, 1); //The color patch or icon of the right column. The former has priority if(pItem->ColorPatch) { TAP_Osd_FillBox(OSDRgn, pMenu->ValueXPos + 45, Y + 5, 50, 18, (pItem->ColorPatch & 0x00ffffff) | 0xff000000); TAP_Osd_DrawRectangle(OSDRgn, pMenu->ValueXPos + 45, Y + 5, 50, 18, 1, RGB(192,192,192)); } else { if(pItem->pValueIconGd) TAP_Osd_PutGd(OSDRgn, pMenu->ValueXPos + 45 , Y + 13 - (pItem->pValueIconGd->height >> 1), pItem->pValueIconGd, TRUE); } } }
//-------------- // void DisplayConfigLine(char lineNumber) { char str[80], str2[80]; char *text; int optionNumber, page; if (( lineNumber < 1 ) || ( lineNumber > CONFIG_LINES )) return; // bound check optionNumber = lineNumber; page = ((optionNumber-1)/LINES_PER_PAGE)+1; lineNumber = lineNumber % LINES_PER_PAGE; if (lineNumber == 0) lineNumber = 10; // Put the Save/Cancel options always on line 10. if (( chosenConfigLine == optionNumber ) && ( optionNumber != 10 )) // highlight the current cursor line { // save, cancel, delete looks after itself TAP_Osd_PutGd( rgn, 53, lineNumber*CONFIG_Y_STEP+CONFIG_Y_OFFSET-8, &_highlightGd, FALSE ); } else { TAP_Osd_PutGd( rgn, 53, lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET - 8, &_rowaGd, FALSE ); } TAP_SPrint(str,"%d.",optionNumber); TAP_Osd_PutStringAf1622(rgn, 75, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), 700, str, MAIN_TEXT_COLOUR, 0 ); switch ( optionNumber ) { case 1 : PrintCenter(rgn, CONFIG_E0, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E1, "Model Type", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); if ( currentModelType == TF5800 ) TAP_SPrint(str,"TF5800 (UK)"); else TAP_SPrint(str,"TF5000 (International)"); TAP_Osd_PutStringAf1622(rgn, CONFIG_X2, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E2, str, MAIN_TEXT_COLOUR, 0 ); break; case 2 : PrintCenter(rgn, CONFIG_E0, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E1, "Language", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); TAP_SPrint(str, "English"); TAP_Osd_PutStringAf1622(rgn, CONFIG_X2, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E2, str, COLOR_DarkGray, 0 ); break; case 3 : PrintCenter(rgn, CONFIG_E0, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E1, "Activation Key", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); switch ( keyStage ) { case 0 : text = GetButtonText( &localKeyCodes, CurrentActivationKey ); strcpy( str, text ); break; case 1 : TAP_SPrint( str, "Press new key now" ); break; case 2 : TAP_SPrint( str, "Invalid choice" ); break; default : TAP_SPrint( str, "eh?" ); break; } TAP_Osd_PutStringAf1622(rgn, CONFIG_X2, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E2, str, MAIN_TEXT_COLOUR, 0 ); break; case 4 : PrintCenter(rgn, CONFIG_E0, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E1, "Highlight", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); TAP_SPrint(str,"%d", currentHighlight ); TAP_Osd_PutStringAf1622(rgn, CONFIG_X2, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E2, str, MAIN_TEXT_COLOUR, 0 ); break; case 5 : PrintCenter(rgn, CONFIG_E0, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E1, "Selection Style", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); switch ( displayOption ) { case 0 : TAP_SPrint( str, "Carousel" ); break; case 1 : TAP_SPrint( str, "Linear" ); break; default : TAP_SPrint( str, "BAD" ); break; } TAP_Osd_PutStringAf1622(rgn, CONFIG_X2, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E2, str, MAIN_TEXT_COLOUR, 0 ); break; case 6 : PrintCenter(rgn, CONFIG_E0, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E1, "Now/Next Tag", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); switch ( currentNowNextTag ) { case 0 : TAP_SPrint( str, "Off" ); break; case 1 : TAP_SPrint( str, "On" ); break; default : TAP_SPrint( str, "BAD" ); break; } TAP_Osd_PutStringAf1622(rgn, CONFIG_X2, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E2, str, MAIN_TEXT_COLOUR, 0 ); break; case 7 : PrintCenter(rgn, CONFIG_E0, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E1, "Progress Info", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); switch ( currentProgressInfo ) { case 0 : TAP_SPrint( str, "Off" ); break; case 1 : TAP_SPrint( str, "Text" ); break; default : TAP_SPrint( str, "BAD" ); break; } TAP_Osd_PutStringAf1622(rgn, CONFIG_X2, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E2, str, MAIN_TEXT_COLOUR, 0 ); break; case 8 : PrintCenter(rgn, CONFIG_E0, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E1, "Recall/PiP-Swap Key", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); switch ( currentRecallKey ) { case 0 : TAP_SPrint( str, "First Channel" ); break; case 1 : TAP_SPrint( str, "Swap Channels" ); break; default : TAP_SPrint( str, "BAD" ); break; } TAP_Osd_PutStringAf1622(rgn, CONFIG_X2, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E2, str, MAIN_TEXT_COLOUR, 0 ); break; case 9 : PrintCenter(rgn, CONFIG_E0, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E1, "Screen Fading", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); switch ( currentScreenFade) { case 0 : TAP_SPrint( str, "Off - no screen fading" ); break; case 1 : TAP_SPrint( str, "Manual - use Blue key" ); break; default : TAP_SPrint( str, "Automatic after %d seconds", currentScreenFade ); break; } TAP_Osd_PutStringAf1622(rgn, CONFIG_X2, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E2, str, MAIN_TEXT_COLOUR, 0 ); break; case 11 : PrintCenter(rgn, CONFIG_E0, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E1, "Start Channel", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); switch ( currentStartChannel) { case 0 : TAP_SPrint( str, "Channel Last Highlighted" ); break; case 1 : TAP_SPrint( str, "Current Channel" ); break; default : TAP_SPrint( str, "BAD" ); break; } TAP_Osd_PutStringAf1622(rgn, CONFIG_X2, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E2, str, MAIN_TEXT_COLOUR, 0 ); break; case 12 : PrintCenter(rgn, CONFIG_E0, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E1, "Timer Start Offset", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); switch ( currentStartOffset) { default : TAP_SPrint( str, "%d minutes",currentStartOffset ); break; } TAP_Osd_PutStringAf1622(rgn, CONFIG_X2, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E2, str, MAIN_TEXT_COLOUR, 0 ); break; case 13 : PrintCenter(rgn, CONFIG_E0, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E1, "Timer End Offset", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); switch ( currentEndOffset) { default : TAP_SPrint( str, "%d minutes",currentEndOffset ); break; } TAP_Osd_PutStringAf1622(rgn, CONFIG_X2, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E2, str, MAIN_TEXT_COLOUR, 0 ); break; case 14 : PrintCenter(rgn, CONFIG_E0, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E1, "Guide At Startup", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); switch ( currentGuideStart ) { case 0 : TAP_SPrint( str, "Start hidden" ); break; case 1 : TAP_SPrint( str, "Start displayed" ); break; case 2 : TAP_SPrint( str, "Start as it was when last exited" ); break; default : TAP_SPrint( str, "BAD" ); break; } TAP_Osd_PutStringAf1622(rgn, CONFIG_X2, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E2, str, MAIN_TEXT_COLOUR, 0 ); break; case 15 : PrintCenter(rgn, CONFIG_E0, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E1, "TV Screen Ratio", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); switch ( currentTvRatio) { case 0 : TAP_SPrint( str, "4:3 Standard" ); break; case 1 : TAP_SPrint( str, "16:9 Widescreen" ); break; default : TAP_SPrint( str, "BAD" ); break; } TAP_Osd_PutStringAf1622(rgn, CONFIG_X2, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E2, str, MAIN_TEXT_COLOUR, 0 ); break; case 16 : PrintCenter(rgn, CONFIG_E0, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E1, "Main/Guide window", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); switch ( currentGuideWindowOption) { case 0 : TAP_SPrint( str, "Normal size" ); break; case 1 : TAP_SPrint( str, "Shrink to fit" ); break; default : TAP_SPrint( str, "BAD" ); break; } TAP_Osd_PutStringAf1622(rgn, CONFIG_X2, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E2, str, MAIN_TEXT_COLOUR, 0 ); break; case 17 : PrintCenter(rgn, CONFIG_E0, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E1, "Progress Bars", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); switch ( currentProgressBarOption ) { case 0 : TAP_SPrint( str, "Multi Coloured" ); break; case 1 : sprintf( str, "Single colour, %% filled" ); break; case 2 : TAP_SPrint( str, "Single colour, all filled" ); break; case 3 : sprintf( str, "White colour, %% filled" ); break; default : TAP_SPrint( str, "[Invalid value]" ); break; } TAP_Osd_PutStringAf1622(rgn, CONFIG_X2, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E2, str, MAIN_TEXT_COLOUR, 0 ); break; case 18 : PrintCenter(rgn, CONFIG_E0, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E1, "Channel Numbers", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); switch ( currentChannelNumberOption ) { case 0 : TAP_SPrint( str, "LCN" ); break; case 1 : sprintf( str, "Topfield" ); break; default : TAP_SPrint( str, "[Invalid value]" ); break; } TAP_Osd_PutStringAf1622(rgn, CONFIG_X2, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), CONFIG_E2, str, MAIN_TEXT_COLOUR, 0 ); break; case 10 : case 20 : TAP_Osd_PutGd( rgn, 53, lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET - 8, &_rowaGd, FALSE ); // No highlight for us TAP_SPrint(str,"%d.",optionNumber); TAP_Osd_PutStringAf1622(rgn, 75, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), 700, str, MAIN_TEXT_COLOUR, 0 ); if (( configOption == 0 ) && ( chosenConfigLine%10 == 0 )) { TAP_Osd_PutGd( rgn, 116, lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET - 8, &_smallgreenbarGd, FALSE ); PrintCenter(rgn, 144, lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET, 244, "Save", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); } else PrintCenter(rgn, 144, lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET, 244, "Save", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); if (( configOption == 1 ) && ( chosenConfigLine%10 == 0 )) { TAP_Osd_PutGd( rgn, 278, lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET - 8, &_smallgreenbarGd, FALSE ); PrintCenter(rgn, 306, lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET, 406, "Cancel", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); } else PrintCenter(rgn, 306, lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET, 406, "Cancel", MAIN_TEXT_COLOUR, 0, FNT_Size_1622 ); TAP_Osd_FillBox( rgn, 437, lineNumber*CONFIG_Y_STEP+CONFIG_Y_OFFSET-8, 3, CONFIG_Y_STEP, FILL_COLOUR ); // one extra column seperator for us TAP_SPrint(str,"Page %d of %d",page,TOTAL_PAGES); TAP_Osd_PutStringAf1622(rgn, 470, (lineNumber * CONFIG_Y_STEP + CONFIG_Y_OFFSET), 700, str, MAIN_TEXT_COLOUR, 0 ); break; default : break; } TAP_Osd_FillBox( rgn, CONFIG_E0, lineNumber*CONFIG_Y_STEP+CONFIG_Y_OFFSET-8, 3, CONFIG_Y_STEP, FILL_COLOUR ); // draw the column seperators TAP_Osd_FillBox( rgn, CONFIG_E1, lineNumber*CONFIG_Y_STEP+CONFIG_Y_OFFSET-8, 3, CONFIG_Y_STEP, FILL_COLOUR ); }
dword TAP_EventHandler( word event, dword param1, dword param2 ) { static int count = 0, err1, filelen; static byte flip = 0; int i, y; const int LINE_H = 21; const int STR_COUNT = 21; dword t1, t2; char strings[21][40] = { {"Test ajJsjjOjsj"}, {"qUIck tESt"}, {"ma"}, {"keяд"}, {"<< Nelonen >>"} , {"03:20 "}, {" leading SPACE"}, {"Test ajJsjjOjsj"}, {"qUIck tESt"}, {"ma"}, {"ke"}, {"<< Nelonen >>"} , {"03:20 "}, {" leading SPACE"}, {"Test ajJsjjOjsj"}, {"qUIck tESt"}, {"ma"}, {"ke"}, {"<< Nelonen >>"} , {"03:20 "}, {" leading SPACE"} }; char msg[64]; if( event == EVT_KEY ) { if ( param1 == RKEY_Exit) { TAP_Osd_SetTransparency(rgn, 0xFF - transparency_orig); Delete_Font(&font0); Delete_Font(&font1); Delete_Font(&font2); TAP_Osd_Delete( rgn ); #ifdef DLALLOC dlmalloc_exit(); #endif TAP_EnterNormal(); TAP_Exit(); return 0; } if ( param1 == RKEY_1) { TAP_ExitNormal(); TAP_Osd_FillBox(rgn, 30, 10, 620, 500, COLOR_DarkBlue); t1 = TAP_GetTick(); y = 20; for (i = 0; i < STR_COUNT; i++, y+=LINE_H) { TAP_Osd_PutS_Font(rgn, 50, y, 199, strings[i], COLOR_Red, COLOR_White, &font0, ALIGN_LEFT); TAP_Osd_PutS_Font(rgn, 200, y, 349, strings[i], COLOR_Red, COLOR_White, &font1, ALIGN_LEFT); TAP_Osd_PutS_Font(rgn, 350, y, 499, strings[i], COLOR_Red, COLOR_White, &font2, ALIGN_LEFT); } t2 = TAP_GetTick() - t1; TAP_SPrint(msg, "Ticks: %d", t2); TAP_Osd_PutS(rgn, 500, 500, 650, msg, COLOR_Green, COLOR_Black, 0, FNT_Size_1419, 0, ALIGN_LEFT); return 0; } if ( param1 == RKEY_2) { TAP_ExitNormal(); TAP_Osd_FillBox(rgn, 30, 10, 620, 500, COLOR_DarkBlue); t1 = TAP_GetTick(); y = 20; for (i = 0; i < STR_COUNT; i++, y+=LINE_H) { TAP_Osd_PutS_FontL(rgn, 50, y, 199, strings[i], &font0, ALIGN_LEFT); TAP_Osd_PutS_FontL(rgn, 200, y, 349, strings[i], &font1, ALIGN_LEFT); TAP_Osd_PutS_FontL(rgn, 350, y, 499, strings[i], &font2, ALIGN_LEFT); } t2 = TAP_GetTick() - t1; TAP_SPrint(msg, "Ticks: %d", t2); TAP_Osd_PutS(rgn, 500, 500, 650, msg, COLOR_Green, COLOR_Black, 0, FNT_Size_1419, 0, ALIGN_LEFT); return 0; } if ( param1 == RKEY_3) { TAP_ExitNormal(); TAP_Osd_FillBox(rgn, 30, 10, 620, 500, COLOR_DarkBlue); t1 = TAP_GetTick(); y = 20; for (i = 0; i < STR_COUNT; i++, y+=LINE_H) { TAP_Osd_PutS_FontEx(rgn, 50, y, 199, 19, 2, strings[i], COLOR_Red, COLOR_White, &font0, ALIGN_LEFT); TAP_Osd_PutS_FontEx(rgn, 200, y, 349, 19, 2, strings[i], COLOR_Red, COLOR_White, &font1, ALIGN_LEFT); TAP_Osd_PutS_FontEx(rgn, 350, y, 499, 19, 2, strings[i], COLOR_Red, COLOR_White, &font2, ALIGN_LEFT); } t2 = TAP_GetTick() - t1; TAP_SPrint(msg, "Ticks: %d", t2); TAP_Osd_PutS(rgn, 500, 500, 650, msg, COLOR_Green, COLOR_Black, 0, FNT_Size_1419, 0, ALIGN_LEFT); return 0; } if ( param1 == RKEY_4) { TAP_ExitNormal(); TAP_Osd_FillBox(rgn, 30, 10, 620, 500, COLOR_DarkBlue); t1 = TAP_GetTick(); y = 20; for (i = 0; i < STR_COUNT; i++, y+=LINE_H) { TAP_Osd_PutS(rgn, 50, y, 199, strings[i], COLOR_Red, COLOR_White, 0, FNT_Size_1419, 0, ALIGN_LEFT); TAP_Osd_PutS(rgn, 200, y, 349, strings[i], COLOR_Red, COLOR_White, 0, FNT_Size_1419, 0, ALIGN_LEFT); TAP_Osd_PutS(rgn, 350, y, 499, strings[i], COLOR_Red, COLOR_White, 0, FNT_Size_1419, 0, ALIGN_LEFT); } t2 = TAP_GetTick() - t1; TAP_SPrint(msg, "Ticks: %d", t2); TAP_Osd_PutS(rgn, 500, 500, 650, msg, COLOR_Green, COLOR_Black, 0, FNT_Size_1419, 0, ALIGN_LEFT); return 0; } } return param1;//event; }
void LogEntryGeneric(char *ProgramName, bool Console, char *Text) { TRACEENTER(); char *s; int l; TYPE_File *File; char TimeResult[40]; char CRLF[] = {'\r', '\n'}; byte Sec; byte *ISOText; #define FILENAME "TAPSystem.log" if(!ProgramName || !Text) { TRACEEXIT(); return; } HDD_TAP_PushDir(); if(!HDD_ChangeDir("/ProgramFiles/Settings")) { HDD_ChangeDir("/ProgramFiles"); if(!TAP_Hdd_Exist("Settings")) TAP_Hdd_Create("Settings", ATTR_FOLDER); HDD_ChangeDir("Settings"); } l = strlen(ProgramName) + strlen(Text) + 4; s = TAP_MemAlloc(l); if(s) { memset(s, 0, l); TAP_SPrint(s, "%s: %s", ProgramName, Text); StrToISOAlloc(s, &ISOText); if(ISOText) { TimeFormat(Now(&Sec), Sec, TIMESTAMP_YMDHMS, TimeResult); strcat(TimeResult, " "); if(!TAP_Hdd_Exist(FILENAME)) TAP_Hdd_Create(FILENAME, ATTR_NORMAL); if((File = TAP_Hdd_Fopen(FILENAME)) != NULL) { TAP_Hdd_Fseek(File, 0, SEEK_END); TAP_Hdd_Fwrite(TimeResult, strlen(TimeResult), 1, File); TAP_Hdd_Fwrite(ISOText, strlen(ISOText), 1, File); TAP_Hdd_Fwrite(CRLF, 2, 1, File); TAP_Hdd_Fclose(File); } if(Console) { TAP_PrintNet("%s%s\n", TimeResult, ISOText); } TAP_MemFree(ISOText); } TAP_MemFree(s); } HDD_TAP_PopDir(); TRACEEXIT(); }
int LogoManager_UpdateLIL(void) { TRACEENTER(); typedef struct { ulong64 ChannelID; char Name[MAXLOGONAME+1]; }tNewIDs; int nTvSvc, nRadioSvc; int i; TYPE_TapChInfo chInfo; char s[255], LogoName[MAX_SvcName + 1]; SYSTEM_TYPE SystemType; tFlashSatTable SatInfo; word SatPos; ulong64 ChannelID; tNewIDs *NewIDs; int NewIDCount; SystemType = GetSystemType(); HDD_TAP_PushDir(); HDD_ChangeDir(LOGOROOT); TAP_Channel_GetTotalNum(&nTvSvc, &nRadioSvc); NewIDs = TAP_MemAlloc((nTvSvc + nRadioSvc) * sizeof(tNewIDs)); NewIDCount = 0; INIOpenFile(LILNAME, NULL); for(i = 0; i < nTvSvc; i++) { TAP_Channel_GetInfo(SVC_TYPE_Tv, i, &chInfo); FlashSatTablesGetInfo(chInfo.satIdx, &SatInfo); switch(SystemType) { case ST_S: case ST_TMSS: { SatPos = SatInfo.SatPosition; break; } default: SatPos = 0; break; } ChannelID = LogoManager_CalculateChannelID(SatPos, chInfo.orgNetId, chInfo.tsId, chInfo.svcId); TAP_SPrint(s, "%16.16llx", ChannelID); if(!INIKeyExists(s)) { NewIDs[NewIDCount].ChannelID = ChannelID; strcpy(NewIDs[NewIDCount].Name, LogoManager_ChannelNameToLogoName(chInfo.chName, LogoName, sizeof(LogoName))); if(NewIDs[NewIDCount].Name[0]) NewIDCount++; } } for(i = 0; i < nRadioSvc; i++) { TAP_Channel_GetInfo(SVC_TYPE_Radio, i, &chInfo); FlashSatTablesGetInfo(chInfo.satIdx, &SatInfo); switch(SystemType) { case ST_S: case ST_TMSS: { SatPos = SatInfo.SatPosition; break; } default: SatPos = 0; break; } ChannelID = LogoManager_CalculateChannelID(SatPos, chInfo.orgNetId, chInfo.tsId, chInfo.svcId); TAP_SPrint(s, "%16.16llx", ChannelID); if(!INIKeyExists(s)) { NewIDs[NewIDCount].ChannelID = ChannelID; TAP_SPrint(NewIDs[NewIDCount].Name, "r_%s", LogoManager_ChannelNameToLogoName(chInfo.chName, LogoName, sizeof(LogoName))); if(NewIDs[NewIDCount].Name[0]) NewIDCount++; } } INICloseFile(); if(NewIDCount > 0) { TYPE_File *f; word year; byte month, day, weekDay; if(!TAP_Hdd_Exist(LILNAME)) TAP_Hdd_Create(LILNAME, ATTR_NORMAL); f = TAP_Hdd_Fopen(LILNAME); if(!f) { HDD_TAP_PopDir(); if(LogoManager_CB) LogoManager_CB(-1, 3); TRACEEXIT(); return -1; } TAP_Hdd_Fseek(f, 0, SEEK_END); TAP_ExtractMjd(Now(NULL) >> 16, &year, &month, &day, &weekDay); TAP_SPrint(s, "\n\n# Added %4.4d-%2.2d-%2.2d\n", year, month, day); TAP_Hdd_Fwrite(s, 1, strlen(s), f); for(i = 0; i < NewIDCount; i++) { TAP_SPrint(s, "%16.16llx=%s\n", NewIDs[i].ChannelID, NewIDs[i].Name); TAP_Hdd_Fwrite(s, 1, strlen(s), f); } TAP_Hdd_Fclose(f); if(LogoManager_CB) LogoManager_CB(5, NewIDCount); }