static void Ban_GetListBanners (MYSQL_RES **mysql_res,unsigned long NumRows) { MYSQL_ROW row; unsigned NumBan; struct Banner *Ban; /***** Get banners from database *****/ if (NumRows) // Banners found... { Gbl.Banners.Num = (unsigned) NumRows; /***** Create list with banners *****/ if ((Gbl.Banners.Lst = (struct Banner *) calloc (NumRows,sizeof (struct Banner))) == NULL) Lay_NotEnoughMemoryExit (); /***** Get the banners *****/ for (NumBan = 0; NumBan < Gbl.Banners.Num; NumBan++) { Ban = &(Gbl.Banners.Lst[NumBan]); /* Get next banner */ row = mysql_fetch_row (*mysql_res); /* Get banner code (row[0]) */ if ((Ban->BanCod = Str_ConvertStrCodToLongCod (row[0])) < 0) Lay_ShowErrorAndExit ("Wrong code of banner."); /* Get if banner is hidden (row[1]) */ Ban->Hidden = (row[1][0] == 'Y'); /* Get the short name of the banner (row[2]) */ Str_Copy (Ban->ShrtName,row[2], Ban_MAX_BYTES_SHRT_NAME); /* Get the full name of the banner (row[3]) */ Str_Copy (Ban->FullName,row[3], Ban_MAX_BYTES_FULL_NAME); /* Get the image of the banner (row[4]) */ Str_Copy (Ban->Img,row[4], Ban_MAX_BYTES_IMAGE); /* Get the URL of the banner (row[5]) */ Str_Copy (Ban->WWW,row[5], Cns_MAX_BYTES_WWW); } } else Gbl.Banners.Num = 0; /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (mysql_res); }
char const *Str_CopyDelim2(ddstring_t *str, char const *src, char delimiter, int cdflags) { DENG_ASSERT(str); if(!str) return 0; Str_Clear(str); if(!src) return 0; { char const *cursor; ddstring_t buf; Str_Init(&buf); for(cursor = src; *cursor && *cursor != delimiter; ++cursor) { if((cdflags & CDF_OMIT_WHITESPACE) && isspace(*cursor)) continue; Str_PartAppend(&buf, cursor, 0, 1); } if(!Str_IsEmpty(&buf)) Str_Copy(str, &buf); Str_Free(&buf); if(!*cursor) return 0; // It ended. if(!(cdflags & CDF_OMIT_DELIMITER)) Str_PartAppend(str, cursor, 0, 1); // Skip past the delimiter. return cursor + 1; } }
/* ================== UI_Cinematics_GetCinList ================== */ static void UI_Cinematics_GetCinList (){ const char **fileList; char extension[16]; int numFiles; int i, count = 0; fileList = FS_ListFiles("video", NULL, true, &numFiles); if (numFiles > MAX_MENU_CINEMATICS) numFiles = MAX_MENU_CINEMATICS; for (i = 0; i < numFiles; i++){ // Only copy .cin and .RoQ files, ignore the rest Com_FileExtension(fileList[i], extension, sizeof(extension)); if (!Str_ICompare(extension, "cin") || !Str_ICompare(extension, "RoQ")){ Str_Copy(uiCinematics.cinematics[count], fileList[i], sizeof(uiCinematics.cinematics[count])); *strchr(uiCinematics.cinematics[count], '.') = 0; Str_SPrintf(uiCinematics.cinematicFiles[count], sizeof(uiCinematics.cinematicFiles[count]), "video/%s", fileList[i]); count++; } } FS_FreeFileList(fileList); for (i = 0; i < count; i++) uiCinematics.cinematicsPtr[i] = uiCinematics.cinematics[i]; for ( ; i < MAX_MENU_CINEMATICS; i++) uiCinematics.cinematicsPtr[i] = NULL; uiCinematics.cinList.itemNames = uiCinematics.cinematicsPtr; }
void Ban_GetDataOfBannerByCod (struct Banner *Ban) { MYSQL_RES *mysql_res; MYSQL_ROW row; unsigned long NumRows; /***** Clear data *****/ Ban->Hidden = false; Ban->ShrtName[0] = Ban->FullName[0] = Ban->Img[0] = Ban->WWW[0] = '\0'; /***** Check if banner code is correct *****/ if (Ban->BanCod > 0) { /***** Get data of a banner from database *****/ NumRows = DB_QuerySELECT (&mysql_res,"can not get data of a banner", "SELECT Hidden,ShortName,FullName,Img,WWW" " FROM banners WHERE BanCod=%ld", Ban->BanCod); if (NumRows) // Banner found... { /* Get row */ row = mysql_fetch_row (mysql_res); /* Get if the banner is hidden (row[0]) */ Ban->Hidden = (row[0][0] == 'Y'); /* Get the short name of the banner (row[1]) */ Str_Copy (Ban->ShrtName,row[1], Ban_MAX_BYTES_SHRT_NAME); /* Get the full name of the banner (row[2]) */ Str_Copy (Ban->FullName,row[2], Ban_MAX_BYTES_FULL_NAME); /* Get the image of the banner (row[3]) */ Str_Copy (Ban->Img,row[3], Ban_MAX_BYTES_IMAGE); /* Get the URL of the banner (row[4]) */ Str_Copy (Ban->WWW,row[4], Cns_MAX_BYTES_WWW); } /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); } }
SaveInfo *SaveInfo_Copy(SaveInfo *info, SaveInfo const *other) { DENG_ASSERT(info != 0 && other != 0); Str_Copy(&info->name, SaveInfo_Name(other)); info->gameId = SaveInfo_GameId(other); memcpy(&info->header, SaveInfo_Header(other), sizeof(info->header)); return info; }
ddstring_t *Str_CopyOrClear(ddstring_t *dest, const ddstring_t *src) { DENG_ASSERT(dest); if(!dest) return 0; if(src) { return Str_Copy(dest, src); } return Str_Clear(dest); }
void Net_ShowWebsAndSocialNets (const struct UsrData *UsrDat) { MYSQL_RES *mysql_res; MYSQL_ROW row; Net_WebsAndSocialNetworks_t NumURL; char URL[Cns_MAX_BYTES_WWW + 1]; /***** Start container *****/ fprintf (Gbl.F.Out,"<div class=\"REC_WEBS\">"); /***** Show link to public profile *****/ Net_ShowAWebOrSocialNet (Prf_GetURLPublicProfile (URL,UsrDat->Nickname), "swad64x64.png",Cfg_PLATFORM_SHORT_NAME); /***** Show the rest of webs / social networks *****/ for (NumURL = (Net_WebsAndSocialNetworks_t) 0; NumURL < Net_NUM_WEBS_AND_SOCIAL_NETWORKS; NumURL++) { /***** Check if exists the web / social network for this user *****/ if (DB_QuerySELECT (&mysql_res,"can not get user's web / social network", "SELECT URL FROM usr_webs" " WHERE UsrCod=%ld AND Web='%s'", UsrDat->UsrCod,Net_WebsAndSocialNetworksDB[NumURL])) { /* Get URL */ row = mysql_fetch_row (mysql_res); Str_Copy (URL,row[0], Cns_MAX_BYTES_WWW); /* Show the web / social network */ Net_ShowAWebOrSocialNet (URL, Net_WebsAndSocialNetworksIcons[NumURL], Net_WebsAndSocialNetworksTitle[NumURL]); } /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); } /***** End container *****/ fprintf (Gbl.F.Out,"</div>"); }
/* ================== UI_Mods_GetModList ================== */ static void UI_Mods_GetModList (){ modList_t **modList; int numMods; int i, count = 0; // Always start off with baseq2 Str_Copy(uiMods.modsDir[count], "baseq2", sizeof(uiMods.modsDir[count])); Str_Copy(uiMods.modsDescription[count], "Quake II", sizeof(uiMods.modsDescription[count])); count++; modList = FS_ListMods(true, &numMods); if (numMods > MAX_MODS) numMods = MAX_MODS; for (i = 0; i < numMods; i++){ Str_Copy(uiMods.modsDir[count], modList[i]->directory, sizeof(uiMods.modsDir[count])); // Special check for CTF and mission packs if (!Str_ICompare(modList[i]->directory, "ctf")) Str_Copy(uiMods.modsDescription[count], "Quake II: Capture The Flag", sizeof(uiMods.modsDescription[count])); else if (!Str_ICompare(modList[i]->directory, "xatrix")) Str_Copy(uiMods.modsDescription[count], "Quake II: The Reckoning", sizeof(uiMods.modsDescription[count])); else if (!Str_ICompare(modList[i]->directory, "rogue")) Str_Copy(uiMods.modsDescription[count], "Quake II: Ground Zero", sizeof(uiMods.modsDescription[count])); else Str_Copy(uiMods.modsDescription[count], modList[i]->description, sizeof(uiMods.modsDescription[count])); count++; } FS_FreeModList(modList); for (i = 0; i < count; i++) uiMods.modsDescriptionPtr[i] = uiMods.modsDescription[i]; for ( ; i < MAX_MODS; i++) uiMods.modsDescriptionPtr[i] = NULL; uiMods.modList.itemNames = uiMods.modsDescriptionPtr; // See if the load button should be grayed if (!Str_ICompare(CVar_GetVariableString("fs_game"), uiMods.modsDir[0])) uiMods.load.generic.flags |= QMF_GRAYED; }
void Ban_ChangeBannerWWW (void) { extern const char *Txt_The_new_web_address_is_X; extern const char *Txt_You_can_not_leave_the_web_address_empty; char NewWWW[Cns_MAX_BYTES_WWW + 1]; /***** Banner constructor *****/ Ban_EditingBannerConstructor (); /***** Get parameters from form *****/ /* Get the code of the banner */ if ((Ban_EditingBan->BanCod = Ban_GetParamBanCod ()) == -1L) Lay_ShowErrorAndExit ("Code of banner is missing."); /* Get the new WWW for the banner */ Par_GetParToText ("WWW",NewWWW,Cns_MAX_BYTES_WWW); /***** Get banner data from the database *****/ Ban_GetDataOfBannerByCod (Ban_EditingBan); /***** Check if new WWW is empty *****/ if (NewWWW[0]) { /* Update the table changing old WWW by new WWW */ DB_QueryUPDATE ("can not update the web of a banner", "UPDATE banners SET WWW='%s' WHERE BanCod=%ld", NewWWW,Ban_EditingBan->BanCod); /***** Write message to show the change made *****/ Ale_CreateAlert (Ale_SUCCESS,NULL, Txt_The_new_web_address_is_X, NewWWW); } else Ale_CreateAlert (Ale_WARNING,NULL, Txt_You_can_not_leave_the_web_address_empty); /***** Update web *****/ Str_Copy (Ban_EditingBan->WWW,NewWWW, Cns_MAX_BYTES_WWW); }
void Ban_ChangeBannerImg (void) { extern const char *Txt_The_new_image_is_X; extern const char *Txt_You_can_not_leave_the_image_empty; char NewImg[Ban_MAX_BYTES_IMAGE + 1]; /***** Banner constructor *****/ Ban_EditingBannerConstructor (); /***** Get parameters from form *****/ /* Get the code of the banner */ if ((Ban_EditingBan->BanCod = Ban_GetParamBanCod ()) == -1L) Lay_ShowErrorAndExit ("Code of banner is missing."); /* Get the new WWW for the banner */ Par_GetParToText ("Img",NewImg,Ban_MAX_BYTES_IMAGE); /***** Get banner data from the database *****/ Ban_GetDataOfBannerByCod (Ban_EditingBan); /***** Check if new image is empty *****/ if (NewImg[0]) { /* Update the table changing old image by new image */ DB_QueryUPDATE ("can not update the image of a banner", "UPDATE banners SET Img='%s' WHERE BanCod=%ld", NewImg,Ban_EditingBan->BanCod); /***** Write message to show the change made *****/ Ale_CreateAlert (Ale_SUCCESS,NULL, Txt_The_new_image_is_X, NewImg); } else Ale_CreateAlert (Ale_WARNING,NULL, Txt_You_can_not_leave_the_image_empty); /***** Update image *****/ Str_Copy (Ban_EditingBan->Img,NewImg, Ban_MAX_BYTES_IMAGE); }
bool Par_GetQueryString (void) { char Method[Par_MAX_BYTES_METHOD + 1]; char ContentType[Par_MAX_BYTES_CONTENT_TYPE + 1]; char UnsignedLongStr[10 + 1]; unsigned long UnsignedLong; Str_Copy (Method,getenv ("REQUEST_METHOD"), Par_MAX_BYTES_METHOD); if (!strcmp (Method,"GET")) { /***** GET method *****/ Gbl.Params.GetMethod = true; Gbl.ContentReceivedByCGI = Act_CONT_NORM; /* Get content length */ Gbl.Params.ContentLength = strlen (getenv ("QUERY_STRING")); /* Allocate memory for query string */ if ((Gbl.Params.QueryString = (char *) malloc (Gbl.Params.ContentLength + 1)) == NULL) return false; /* Copy query string from environment variable */ Str_Copy (Gbl.Params.QueryString,getenv ("QUERY_STRING"), Gbl.Params.ContentLength); } else { /***** PUSH method *****/ /* Get content length */ if (getenv ("CONTENT_LENGTH")) { Str_Copy (UnsignedLongStr,getenv ("CONTENT_LENGTH"), 10); if (sscanf (UnsignedLongStr,"%lu",&UnsignedLong) != 1) return false; Gbl.Params.ContentLength = (size_t) UnsignedLong; } else return false; /* If data are received ==> the environment variable CONTENT_TYPE will hold: multipart/form-data; boundary=---------------------------7d13ca2e948 */ if (getenv ("CONTENT_TYPE") == NULL) return false; Str_Copy (ContentType,getenv ("CONTENT_TYPE"), Par_MAX_BYTES_CONTENT_TYPE); if (!strncmp (ContentType,"multipart/form-data",strlen ("multipart/form-data"))) { Gbl.ContentReceivedByCGI = Act_CONT_DATA; Par_GetBoundary (); return Fil_ReadStdinIntoTmpFile (); } else if (!strncmp (ContentType,"text/xml",strlen ("text/xml"))) { Gbl.WebService.IsWebService = true; } else { Gbl.ContentReceivedByCGI = Act_CONT_NORM; /* Allocate memory for query string */ if ((Gbl.Params.QueryString = (char *) malloc (Gbl.Params.ContentLength + 1)) == NULL) return false; /* Copy query string from stdin */ if (fread ((void *) Gbl.Params.QueryString,sizeof (char),Gbl.Params.ContentLength,stdin) != Gbl.Params.ContentLength) { Gbl.Params.QueryString[0] = '\0'; return false; } Gbl.Params.QueryString[Gbl.Params.ContentLength] = '\0'; } } return true; }
void Par_GetMainParameters (void) { extern Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD]; extern const char *The_ThemeId[The_NUM_THEMES]; extern const char *Ico_IconSetId[Ico_NUM_ICON_SETS]; long ActCod; char Nickname[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1]; char URL[PATH_MAX + 1]; char LongStr[1 + 10 + 1]; /***** Reset codes of country, institution, centre, degree and course *****/ Gbl.Hierarchy.Cty.CtyCod = Gbl.Hierarchy.Ins.InsCod = Gbl.Hierarchy.Ctr.CtrCod = Gbl.Hierarchy.Deg.DegCod = Gbl.Hierarchy.Crs.CrsCod = -1L; // First of all, get action, and session identifier. // So, if other parameters have been stored in the database, there will be no problems to get them. /***** Get action to perform *****/ if (Gbl.WebService.IsWebService) { Gbl.Action.Act = Gbl.Action.Original = ActWebSvc; Tab_SetCurrentTab (); return; } /***** Set default action *****/ Gbl.Action.Act = Gbl.Action.Original = ActUnk; /***** Get another user's nickname, if exists (this nickname is used to go to another user's profile, not to get the logged user) *****/ if (Par_GetParToText ("usr",Nickname,Nck_MAX_BYTES_NICKNAME_FROM_FORM)) { if (Nickname[0]) { /* Set another user's nickname */ Str_RemoveLeadingArrobas (Nickname); Str_Copy (Gbl.Usrs.Other.UsrDat.Nickname,Nickname, // without arroba Nck_MAX_BYTES_NICKNAME_WITHOUT_ARROBA); // This user's code is used to go to public profile // and to refresh old publishings in user's timeline // If user does not exist ==> UsrCod = -1 Gbl.Usrs.Other.UsrDat.UsrCod = Nck_GetUsrCodFromNickname (Gbl.Usrs.Other.UsrDat.Nickname); Gbl.Action.Act = Gbl.Action.Original = ActSeeOthPubPrf; // Set default action if no other is specified } } else if (Par_GetParToText ("agd",Nickname,Nck_MAX_BYTES_NICKNAME_FROM_FORM)) { if (Nickname[0]) { /* Set another user's nickname */ Str_RemoveLeadingArrobas (Nickname); Str_Copy (Gbl.Usrs.Other.UsrDat.Nickname,Nickname, // without arroba Nck_MAX_BYTES_NICKNAME_WITHOUT_ARROBA); // This user's code is used to go to public agenda // If user does not exist ==> UsrCod = -1 Gbl.Usrs.Other.UsrDat.UsrCod = Nck_GetUsrCodFromNickname (Gbl.Usrs.Other.UsrDat.Nickname); Gbl.Action.Act = Gbl.Action.Original = ActFrmLogInUsrAgd; // Set default action if no other is specified } } /***** Get action to perform *****/ ActCod = Par_GetParToLong ("act"); if (ActCod >= 0 && ActCod <= Act_MAX_ACTION_COD) Gbl.Action.Act = Gbl.Action.Original = Act_FromActCodToAction[ActCod]; /***** Some preliminary adjusts depending on action *****/ switch (Act_GetBrowserTab (Gbl.Action.Act)) { case Act_AJAX_NORMAL: Gbl.Action.UsesAJAX = true; Gbl.Action.IsAJAXAutoRefresh = false; break; case Act_AJAX_RFRESH: Gbl.Action.UsesAJAX = true; Gbl.Action.IsAJAXAutoRefresh = true; break; default: Gbl.Action.UsesAJAX = false; Gbl.Action.IsAJAXAutoRefresh = false; break; } /***** Get session identifier, if exists *****/ Par_GetParToText ("ses",Gbl.Session.Id,Cns_BYTES_SESSION_ID); if (Gbl.Session.Id[0]) { /***** Get user's code, password, current degree and current course from stored session *****/ if (Ses_GetSessionData ()) Gbl.Session.IsOpen = true; else { Gbl.Session.HasBeenDisconnected = true; Gbl.Session.Id[0] = '\0'; } } else { // Try old parameter "IdSes" (allowed for compatibility, to be removed soon) Par_GetParToText ("IdSes",Gbl.Session.Id,Cns_BYTES_SESSION_ID); if (Gbl.Session.Id[0]) { /***** Get user's code, password, current degree and current course from stored session *****/ if (Ses_GetSessionData ()) Gbl.Session.IsOpen = true; else { Gbl.Session.HasBeenDisconnected = true; Gbl.Session.Id[0] = '\0'; } } } /***** Get user password and login *****/ switch (Gbl.Action.Act) { case ActLogIn: case ActFrmLogInUsrAgd: case ActLogInUsrAgd: // This action is necessary here when log in fails Pwd_GetParamUsrPwdLogin (); /* falls through */ /* no break */ case ActReqSndNewPwd: case ActSndNewPwd: Usr_GetParamUsrIdLogin (); break; } /***** Try to get settings changed from current IP *****/ Set_GetSettingsFromIP (); if (!Gbl.Session.IsOpen) // When no session open (no logged user)... { /***** Try to get settings changed from current IP *****/ if (Gbl.Prefs.Theme == The_THEME_UNKNOWN) Gbl.Prefs.Theme = The_THEME_DEFAULT; /***** Set path of theme *****/ snprintf (URL,sizeof (URL), "%s/%s", Cfg_URL_ICON_THEMES_PUBLIC,The_ThemeId[Gbl.Prefs.Theme]); Str_Copy (Gbl.Prefs.URLTheme,URL, PATH_MAX); /***** Set path of icon set *****/ snprintf (URL,sizeof (URL), "%s/%s", Cfg_URL_ICON_SETS_PUBLIC,Ico_IconSetId[Gbl.Prefs.IconSet]); Str_Copy (Gbl.Prefs.URLIconSet,URL, PATH_MAX); } /***** Get country if exists (from menu) *****/ Par_GetParToText ("cty",LongStr,1 + 10); if (LongStr[0]) // Parameter "cty" available { Gbl.Hierarchy.Cty.CtyCod = Str_ConvertStrCodToLongCod (LongStr); Gbl.Hierarchy.Ins.InsCod = Gbl.Hierarchy.Ctr.CtrCod = Gbl.Hierarchy.Deg.DegCod = Gbl.Hierarchy.Crs.CrsCod = -1L; } /***** Get institution if exists (from menu) *****/ Par_GetParToText ("ins",LongStr,1 + 10); if (LongStr[0]) // Parameter "ins" available { Gbl.Hierarchy.Ins.InsCod = Str_ConvertStrCodToLongCod (LongStr); Gbl.Hierarchy.Ctr.CtrCod = Gbl.Hierarchy.Deg.DegCod = Gbl.Hierarchy.Crs.CrsCod = -1L; } /***** Get centre if exists (from menu) *****/ Par_GetParToText ("ctr",LongStr,1 + 10); if (LongStr[0]) // Parameter "ctr" available { Gbl.Hierarchy.Ctr.CtrCod = Str_ConvertStrCodToLongCod (LongStr); Gbl.Hierarchy.Deg.DegCod = Gbl.Hierarchy.Crs.CrsCod = -1L; } /***** Get numerical degree code if exists (from menu) *****/ Par_GetParToText ("deg",LongStr,1 + 10); if (LongStr[0]) // Parameter "deg" available { Gbl.Hierarchy.Deg.DegCod = Str_ConvertStrCodToLongCod (LongStr); Gbl.Hierarchy.Crs.CrsCod = -1L; // Reset possible course from session } /***** Get numerical course code if exists (from menu) *****/ Par_GetParToText ("crs",LongStr,1 + 10); if (LongStr[0]) // Parameter "crs" available Gbl.Hierarchy.Crs.CrsCod = Str_ConvertStrCodToLongCod (LongStr); // Overwrite CrsCod from session /***** Get tab to activate *****/ Gbl.Action.Tab = TabUnk; if (Gbl.Action.Act == ActMnu) { Gbl.Action.Tab = (Tab_Tab_t) Par_GetParToUnsignedLong ("NxtTab", (unsigned long) TabUnk, Tab_NUM_TABS - 1, (unsigned long) TabUnk); Tab_DisableIncompatibleTabs (); } else // Set tab depending on current action Tab_SetCurrentTab (); }
/* ================== NET_StringToSockAdr localhost idnewt idnewt:28000 192.246.40.70 192.246.40.70:28000 ================== */ static bool NET_StringToSockAdr (const char *string, struct sockaddr *s){ char copy[MAX_ADDRESS_LENGTH]; char *port; struct hostent *host; ulong adr; bool isIP = true; int digits = 0, dots = 0; int i; Mem_Fill(s, 0, sizeof(*s)); if (!string || !string[0]) return false; Str_Copy(copy, string, sizeof(copy)); // Strip off a trailing port if present port = Str_FindChar(copy, ':'); if (port) *port++ = 0; // Check if the string is an IP address for (i = 0; copy[i]; i++){ if (copy[i] >= '0' && copy[i] <= '9'){ if (digits == 3){ isIP = false; break; } digits++; } else if (copy[i] == '.'){ if (digits == 0 || dots == 3){ isIP = false; break; } digits = 0; dots++; } else { isIP = false; break; } } if (digits == 0 || dots != 3) isIP = false; // Set the sockaddr ((struct sockaddr_in *)s)->sin_family = AF_INET; if (isIP){ adr = inet_addr(copy); if (adr == INADDR_NONE) return false; *(ulong *)&((struct sockaddr_in *)s)->sin_addr = adr; } else { host = gethostbyname(copy); if (!host || host->h_addrtype != AF_INET) return false; *(ulong *)&((struct sockaddr_in *)s)->sin_addr = *(ulong *)host->h_addr_list[0]; } if (!port) ((struct sockaddr_in *)s)->sin_port = 0; else ((struct sockaddr_in *)s)->sin_port = htons((ushort)Str_ToInteger(port)); return true; }
/* ================== CIN_PlayCinematic TODO: read the .cin file header TODO: fill in cinematic_t ================== */ int CIN_PlayCinematic (const char *name, int flags){ cinematic_t *cin; fileHandle_t file; byte buffer[ROQ_CHUNK_HEADER_SIZE]; word id, fps; char checkName[MAX_PATH_LENGTH], loadName[MAX_PATH_LENGTH]; bool isRoQ; int handle; int size; int i; // Check if already playing for (i = 0, cin = cin_cinematics; i < MAX_CINEMATICS; i++, cin++){ if (!cin->playing) continue; if (!Str_ICompare(cin->name, name)){ if (cin->flags != flags) continue; return i + 1; } } // Get a free handle cin = CIN_HandleForCinematic(&handle); if (flags & CIN_SYSTEM){ cls.playingCinematic = true; S_StopAllSounds(); Com_Printf("Playing cinematic %s\n", name); } // Strip file extension Str_Copy(checkName, name, sizeof(checkName)); Str_StripFileExtension(checkName); // Check for a static PCX image Str_SPrintf(loadName, sizeof(loadName), "%s.pcx", checkName); if (FS_FileExists(loadName)){ if (!CIN_LoadPCX(cin, checkName, flags)) return 0; return handle; } // Open the file Str_SPrintf(loadName, sizeof(loadName), "%s.RoQ", checkName); size = FS_OpenFile(loadName, FS_READ, &file); if (file) isRoQ = true; else { Str_SPrintf(loadName, sizeof(loadName), "%s.cin", checkName); size = FS_OpenFile(loadName, FS_READ, &file); if (file) isRoQ = false; else { if (flags & CIN_SYSTEM){ cls.playingCinematic = false; Com_Printf("Cinematic %s not found\n", name); } return 0; } } if (isRoQ){ // Read the file header FS_Read(file, buffer, ROQ_CHUNK_HEADER_SIZE); id = buffer[0] | (buffer[1] << 8); fps = buffer[6] | (buffer[7] << 8); if (id != ROQ_ID){ FS_CloseFile(file); if (flags & CIN_SYSTEM){ cls.playingCinematic = false; Com_Printf("Cinematic %s is not a RoQ file\n", name); } return 0; } // Fill it in cin->playing = true; cin->isRoQ = isRoQ; Str_Copy(cin->name, name, sizeof(cin->name)); cin->flags = flags; cin->file = file; cin->size = size; cin->offset = ROQ_CHUNK_HEADER_SIZE; cin->startTime = 0; cin->frameRate = (fps) ? fps : 30; cin->frameCount = 0; } else { // Read the file header // Fill it in cin->playing = true; cin->isRoQ = isRoQ; Str_Copy(cin->name, name, sizeof(cin->name)); cin->flags = flags; cin->file = file; cin->size = size; cin->offset = 20; cin->startTime = 0; cin->frameRate = 14; cin->frameCount = 0; } return handle; }
/* ================== CIN_LoadPCX TODO: fill in cinematic_t ================== */ static bool CIN_LoadPCX (cinematic_t *cin, const char *name, int flags){ pcxHeader_t *header; byte *data, *pcxData; byte *in, *out; byte palette[768]; int x, y, length; int dataByte, runLength; // Load the file length = FS_ReadFile(name, (void **)&data); if (!data) return false; // Parse the PCX header header = (pcxHeader_t *)data; header->xMin = LittleShort(header->xMin); header->yMin = LittleShort(header->yMin); header->xMax = LittleShort(header->xMax); header->yMax = LittleShort(header->yMax); header->hRes = LittleShort(header->hRes); header->vRes = LittleShort(header->vRes); header->bytesPerLine = LittleShort(header->bytesPerLine); header->paletteType = LittleShort(header->paletteType); in = &header->data; if (header->manufacturer != 0x0A || header->version != 5 || header->encoding != 1) Com_Error(ERR_DROP, "CIN_LoadPCX: invalid PCX header (%s)\n", name); if (header->bitsPerPixel != 8 || header->colorPlanes != 1) Com_Error(ERR_DROP, "CIN_LoadPCX: only 8 bit PCX images supported (%s)\n", name); if (header->xMax <= 0 || header->yMax <= 0 || header->xMax >= 640 || header->yMax >= 480) Com_Error(ERR_DROP, "CIN_LoadPCX: bad image size (%i x %i) (%s)\n", header->xMax, header->yMax, name); Mem_Copy(palette, (byte *)data + length - 768, 768); pcxData = out = (byte *)Mem_Alloc((header->xMax+1) * (header->yMax+1) * 4, TAG_TEMPORARY); for (y = 0; y <= header->yMax; y++){ for (x = 0; x <= header->xMax; ){ dataByte = *in++; if ((dataByte & 0xC0) == 0xC0){ runLength = dataByte & 0x3F; dataByte = *in++; } else runLength = 1; while (runLength-- > 0){ out[0] = palette[dataByte*3+0]; out[1] = palette[dataByte*3+1]; out[2] = palette[dataByte*3+2]; out[3] = 255; out += 4; x++; } } } if (in - data > length){ Com_DPrintf(S_COLOR_YELLOW "CIN_LoadPCX: PCX file was malformed (%s)\n", name); FS_FreeFile(data); Mem_Free(pcxData); pcxData = NULL; return false; } // Free the file data FS_FreeFile(data); // Fill it in cin->playing = true; cin->isRoQ = false; Str_Copy(cin->name, name, sizeof(cin->name)); cin->flags = flags; cin->file = 0; cin->size = 0; cin->offset = 0; cin->startTime = 0; cin->frameRate = 0; cin->frameCount = -1; // Resample video if needed CIN_ResampleVideo(cin); return true; }
void BSP_Ser_RdStr (CPU_CHAR *p_str, CPU_INT16U len) { CPU_CHAR *p_char; CPU_BOOLEAN rxd_history_char0; CPU_CHAR rx_data; CPU_BOOLEAN err; rxd_history_char0 = DEF_NO; p_str[0] = (CPU_CHAR)'\0'; p_char = p_str; err = BSP_OS_SemWait(&BSP_SerLock, 0); /* Obtain access to the serial interface */ if (err != DEF_OK ) { return; } while (DEF_TRUE) { rx_data = BSP_Ser_RdByteUnlocked(); if ((rx_data == ASCII_CHAR_CARRIAGE_RETURN) || /* Is it '\r' or '\n' character ? */ (rx_data == ASCII_CHAR_LINE_FEED )) { BSP_Ser_WrByteUnlocked((CPU_INT08U)ASCII_CHAR_LINE_FEED); BSP_Ser_WrByteUnlocked((CPU_INT08U)ASCII_CHAR_CARRIAGE_RETURN); *p_char = (CPU_CHAR)'\0'; /* set the null character at the end of the string */ #if (BSP_CFG_SER_CMD_HISTORY_LEN > 0u) Str_Copy(BSP_SerCmdHistory, p_str); #endif break; /* exit the loop */ } if (rx_data == ASCII_CHAR_BACKSPACE) { /* Is backspace character */ if (p_char > p_str) { BSP_Ser_WrByteUnlocked((CPU_INT08U)ASCII_CHAR_BACKSPACE); p_char--; /* Decrement the index */ } } if ((ASCII_IsPrint(rx_data) ) && (rxd_history_char0 == DEF_NO)) { /* Is it a printable character ... ? */ BSP_Ser_WrByteUnlocked((CPU_INT08U)rx_data); /* Echo-back */ *p_char = rx_data; /* Save the received character in the buffer */ p_char++; /* Increment the buffer index */ if (p_char >= &p_str[len]) { p_char = &p_str[len]; } } else if ((rx_data == ASCII_CHAR_ESCAPE) && (rxd_history_char0 == DEF_NO )) { rxd_history_char0 = DEF_YES; #if (BSP_CFG_SER_CMD_HISTORY_LEN > 0u) } else if ((rx_data == ASCII_CHAR_LEFT_SQUARE_BRACKET) && (rxd_history_char0 == DEF_YES )) { while (p_char != p_str) { BSP_Ser_WrByteUnlocked((CPU_INT08U)ASCII_CHAR_BACKSPACE); p_char--; /* Decrement the index */ } Str_Copy(p_str, BSP_SerCmdHistory); while (*p_char != '\0') { BSP_Ser_WrByteUnlocked(*p_char++); } #endif } else { rxd_history_char0 = DEF_NO; } } BSP_OS_SemPost(&BSP_SerLock); /* Release access to the serial interface */ }
void Net_ShowWebAndSocialNetworksStats (void) { extern const char *Hlp_ANALYTICS_Figures_webs_social_networks; extern const char *Txt_FIGURE_TYPES[Fig_NUM_FIGURES]; extern const char *Txt_Web_social_network; extern const char *Txt_No_of_users; extern const char *Txt_PERCENT_of_users; MYSQL_RES *mysql_res; MYSQL_ROW row; unsigned NumRows = 0; // Initialized to avoid warning unsigned NumRow; Net_WebsAndSocialNetworks_t Web; char NetName[Net_MAX_BYTES_NETWORK_NAME + 1]; unsigned NumUsrsTotal; unsigned NumUsrs; /***** Get total number of users in current scope *****/ NumUsrsTotal = (Gbl.Scope.Current == Hie_SYS) ? Usr_GetTotalNumberOfUsersInPlatform () : Usr_GetTotalNumberOfUsersInCourses (Gbl.Scope.Current, 1 << Rol_STD | 1 << Rol_NET | 1 << Rol_TCH); /***** Get number of users with a web / social network *****/ switch (Gbl.Scope.Current) { case Hie_SYS: NumRows = (unsigned) DB_QuerySELECT (&mysql_res,"can not get number of users" " with webs / social networks", "SELECT Web,COUNT(*) AS N" " FROM usr_webs" " GROUP BY Web" " ORDER BY N DESC,Web"); break; case Hie_CTY: NumRows = (unsigned) DB_QuerySELECT (&mysql_res,"can not get number of users" " with webs / social networks", "SELECT usr_webs.Web," "COUNT(DISTINCT usr_webs.UsrCod) AS N" " FROM institutions,centres,degrees,courses,crs_usr,usr_webs" " WHERE institutions.CtyCod=%ld" " AND institutions.InsCod=centres.InsCod" " AND centres.CtrCod=degrees.CtrCod" " AND degrees.DegCod=courses.DegCod" " AND courses.CrsCod=crs_usr.CrsCod" " AND crs_usr.UsrCod=usr_webs.UsrCod" " GROUP BY usr_webs.Web" " ORDER BY N DESC,usr_webs.Web", Gbl.Hierarchy.Cty.CtyCod); break; case Hie_INS: NumRows = (unsigned) DB_QuerySELECT (&mysql_res,"can not get number of users" " with webs / social networks", "SELECT usr_webs.Web," "COUNT(DISTINCT usr_webs.UsrCod) AS N" " FROM centres,degrees,courses,crs_usr,usr_webs" " WHERE centres.InsCod=%ld" " AND centres.CtrCod=degrees.CtrCod" " AND degrees.DegCod=courses.DegCod" " AND courses.CrsCod=crs_usr.CrsCod" " AND crs_usr.UsrCod=usr_webs.UsrCod" " GROUP BY usr_webs.Web" " ORDER BY N DESC,usr_webs.Web", Gbl.Hierarchy.Ins.InsCod); break; case Hie_CTR: NumRows = (unsigned) DB_QuerySELECT (&mysql_res,"can not get number of users" " with webs / social networks", "SELECT usr_webs.Web," "COUNT(DISTINCT usr_webs.UsrCod) AS N" " FROM degrees,courses,crs_usr,usr_webs" " WHERE degrees.CtrCod=%ld" " AND degrees.DegCod=courses.DegCod" " AND courses.CrsCod=crs_usr.CrsCod" " AND crs_usr.UsrCod=usr_webs.UsrCod" " GROUP BY usr_webs.Web" " ORDER BY N DESC,usr_webs.Web", Gbl.Hierarchy.Ctr.CtrCod); break; case Hie_DEG: NumRows = (unsigned) DB_QuerySELECT (&mysql_res,"can not get number of users" " with webs / social networks", "SELECT usr_webs.Web," "COUNT(DISTINCT usr_webs.UsrCod) AS N" " FROM courses,crs_usr,usr_webs" " WHERE courses.DegCod=%ld" " AND courses.CrsCod=crs_usr.CrsCod" " AND crs_usr.UsrCod=usr_webs.UsrCod" " GROUP BY usr_webs.Web" " ORDER BY N DESC,usr_webs.Web", Gbl.Hierarchy.Deg.DegCod); break; case Hie_CRS: NumRows = (unsigned) DB_QuerySELECT (&mysql_res,"can not get number of users" " with webs / social networks", "SELECT usr_webs.Web," "COUNT(DISTINCT usr_webs.UsrCod) AS N" " FROM crs_usr,usr_webs" " WHERE crs_usr.CrsCod=%ld" " AND crs_usr.UsrCod=usr_webs.UsrCod" " GROUP BY usr_webs.Web" " ORDER BY N DESC,usr_webs.Web", Gbl.Hierarchy.Crs.CrsCod); break; default: Lay_WrongScopeExit (); break; } /***** Start box and table *****/ Box_StartBoxTable (NULL,Txt_FIGURE_TYPES[Fig_SOCIAL_NETWORKS],NULL, Hlp_ANALYTICS_Figures_webs_social_networks,Box_NOT_CLOSABLE,2); /***** Write heading *****/ fprintf (Gbl.F.Out,"<tr>" "<th class=\"LEFT_MIDDLE\">" "%s" "</th>" "<th class=\"RIGHT_MIDDLE\">" "%s" "</th>" "<th class=\"RIGHT_MIDDLE\">" "%s" "</th>" "</tr>", Txt_Web_social_network, Txt_No_of_users, Txt_PERCENT_of_users); /***** For each web / social network... *****/ for (NumRow = 0; NumRow < NumRows; NumRow++) { /* Get row */ row = mysql_fetch_row (mysql_res); /* Get web / social network (row[0]) */ Str_Copy (NetName,row[0], Net_MAX_BYTES_NETWORK_NAME); for (Web = (Net_WebsAndSocialNetworks_t) 0; Web < Net_NUM_WEBS_AND_SOCIAL_NETWORKS; Web++) if (!strcmp (Net_WebsAndSocialNetworksDB[Web],NetName)) break; if (Web < Net_NUM_WEBS_AND_SOCIAL_NETWORKS) { /* Get number of users (row[1]) */ if (sscanf (row[1],"%u",&NumUsrs) != 1) Lay_ShowErrorAndExit ("Error when getting number of files."); fprintf (Gbl.F.Out,"<tr>" "<td class=\"DAT LEFT_MIDDLE\">" "<img src=\"%s/%s\"" " alt=\"%s\" title=\"%s\"" " class=\"CONTEXT_ICO_16x16\"" " style=\"margin-right:6px;\" />" "%s</td>" "<td class=\"DAT RIGHT_MIDDLE\">" "%u" "</td>" "<td class=\"DAT RIGHT_MIDDLE\">" "%.2f%%" "</td>" "</tr>", Cfg_URL_ICON_PUBLIC,Net_WebsAndSocialNetworksIcons[Web], Net_WebsAndSocialNetworksTitle[Web], Net_WebsAndSocialNetworksTitle[Web], Net_WebsAndSocialNetworksTitle[Web], NumUsrs, NumUsrsTotal ? 100.0 * (float) NumUsrs / (float) NumUsrsTotal : 0.0); } } /***** End table and box *****/ Box_EndBoxTable (); /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); }
/* ********************************************************************************************************* * CloudData_Task() * * Description : Sends sensor data to the cloud * * Argument(s) : p_arg Argument passed to 'CloudData_Task()' by 'OSTaskCreate()'. * * Return(s) : none. * * Caller(s) : This is a task. * * Note(s) : none. ********************************************************************************************************* */ static void CloudData_Task (void *p_arg) { OS_ERR err; CPU_CHAR *keys[1]; CPU_CHAR *values[1]; CPU_CHAR strping[4]; CPU_CHAR ping = 0; CPU_CHAR ledctrl; CPU_CHAR read_count = 0; CPU_BOOLEAN cloud_available; (void)p_arg; keys[0] = "ping"; values[0] = strping; // OS Name = "Micrium-Ex6" <- MAX Length = 24 // OS Ver = "3.01.2" <- MAX Length = 8 // Use network interface '1' MAC address cloud_available = Exosite_Init("renesas", "Micrium-Ex6", "3.01.2", (NET_IF_NBR)1); Str_Copy(showMAC, "MAC: "); Exosite_GetMAC(&showMAC[5]); while (DEF_TRUE) { if (DEF_TRUE != cloud_available) { UI_Update(MSG_UNAVAILABLE); // Sleep 20 seconds OSTimeDlyHMSM((CPU_INT16U) 0u, (CPU_INT16U) 0u, (CPU_INT16U) 20u, (CPU_INT32U) 0u, (OS_OPT ) OS_OPT_TIME_HMSM_NON_STRICT, (OS_ERR *)&err); // Retry cloud activation until successful cloud_available = Exosite_Reinit(); } else { if (read_count++ > 10) { read_count = 0; // Create string from ping value Str_FmtNbr_Int32U(ping++, 3u, DEF_NBR_BASE_DEC, ASCII_CHAR_NULL, DEF_NO, DEF_YES, &strping[0]); if (DEF_TRUE != Exosite_Write_Batch(keys, values, 3)) { UI_Update(MSG_ERROR); } else { UI_Update(MSG_CONNECTED); } } if (1 == Exosite_Read("led_ctrl", &ledctrl, 1)) { UI_Update(MSG_CONNECTED); if ('0' == ledctrl) { AppCloudControlLedOn = 0; } if ('1' == ledctrl) { AppCloudControlLedOn = 1; } } else UI_Update(MSG_ERROR); // Sleep 2 seconds OSTimeDlyHMSM((CPU_INT16U) 0u, (CPU_INT16U) 0u, (CPU_INT16U) 2u, (CPU_INT32U) 0u, (OS_OPT ) OS_OPT_TIME_HMSM_NON_STRICT, (OS_ERR *)&err); } } }
static void Ban_RenameBanner (Cns_ShrtOrFullName_t ShrtOrFullName) { extern const char *Txt_You_can_not_leave_the_name_of_the_banner_X_empty; extern const char *Txt_The_banner_X_already_exists; extern const char *Txt_The_banner_X_has_been_renamed_as_Y; extern const char *Txt_The_name_of_the_banner_X_has_not_changed; const char *ParamName = NULL; // Initialized to avoid warning const char *FieldName = NULL; // Initialized to avoid warning unsigned MaxBytes = 0; // Initialized to avoid warning char *CurrentBanName = NULL; // Initialized to avoid warning char NewBanName[Ban_MAX_BYTES_FULL_NAME + 1]; switch (ShrtOrFullName) { case Cns_SHRT_NAME: ParamName = "ShortName"; FieldName = "ShortName"; MaxBytes = Ban_MAX_BYTES_SHRT_NAME; CurrentBanName = Ban_EditingBan->ShrtName; break; case Cns_FULL_NAME: ParamName = "FullName"; FieldName = "FullName"; MaxBytes = Ban_MAX_BYTES_FULL_NAME; CurrentBanName = Ban_EditingBan->FullName; break; } /***** Get parameters from form *****/ /* Get the code of the banner */ if ((Ban_EditingBan->BanCod = Ban_GetParamBanCod ()) == -1L) Lay_ShowErrorAndExit ("Code of banner is missing."); /* Get the new name for the banner */ Par_GetParToText (ParamName,NewBanName,MaxBytes); /***** Get banner data from the database *****/ Ban_GetDataOfBannerByCod (Ban_EditingBan); /***** Check if new name is empty *****/ if (!NewBanName[0]) Ale_CreateAlert (Ale_WARNING,NULL, Txt_You_can_not_leave_the_name_of_the_banner_X_empty, CurrentBanName); else { /***** Check if old and new names are the same (this happens when return is pressed without changes) *****/ if (strcmp (CurrentBanName,NewBanName)) // Different names { /***** If banner was in database... *****/ if (Ban_CheckIfBannerNameExists (ParamName,NewBanName,Ban_EditingBan->BanCod)) Ale_CreateAlert (Ale_WARNING,NULL, Txt_The_banner_X_already_exists, NewBanName); else { /* Update the table changing old name by new name */ Ban_UpdateBanNameDB (Ban_EditingBan->BanCod,FieldName,NewBanName); /* Write message to show the change made */ Ale_CreateAlert (Ale_SUCCESS,NULL, Txt_The_banner_X_has_been_renamed_as_Y, CurrentBanName,NewBanName); } } else // The same name Ale_CreateAlert (Ale_INFO,NULL, Txt_The_name_of_the_banner_X_has_not_changed, CurrentBanName); } /***** Update name *****/ Str_Copy (CurrentBanName,NewBanName, MaxBytes); }
void Net_ShowFormMyWebsAndSocialNets (void) { extern const char *Hlp_PROFILE_Webs; extern const char *The_ClassFormInBox[The_NUM_THEMES]; extern const char *Txt_Webs_social_networks; extern const char *Txt_Save_changes; MYSQL_RES *mysql_res; MYSQL_ROW row; Net_WebsAndSocialNetworks_t NumURL; char URL[Cns_MAX_BYTES_WWW + 1]; char StrRecordWidth[10 + 1]; /***** Start section *****/ Lay_StartSection (Net_MY_WEBS_ID); /***** Start box *****/ snprintf (StrRecordWidth,sizeof (StrRecordWidth), "%upx", Rec_RECORD_WIDTH); Box_StartBox (StrRecordWidth,Txt_Webs_social_networks, Net_PutIconsWebsSocialNetworks, Hlp_PROFILE_Webs,Box_NOT_CLOSABLE); /***** Start table *****/ Tbl_StartTable (2); /***** Start form *****/ Frm_StartFormAnchor (ActChgMyNet,Net_MY_WEBS_ID); /***** List webs and social networks *****/ for (NumURL = (Net_WebsAndSocialNetworks_t) 0; NumURL < Net_NUM_WEBS_AND_SOCIAL_NETWORKS; NumURL++) { /***** Get user's web / social network from database *****/ if (DB_QuerySELECT (&mysql_res,"can not get user's web / social network", "SELECT URL FROM usr_webs" " WHERE UsrCod=%ld AND Web='%s'", Gbl.Usrs.Me.UsrDat.UsrCod, Net_WebsAndSocialNetworksDB[NumURL])) { /***** Read the data comunes a all the users *****/ row = mysql_fetch_row (mysql_res); /* Get URL */ Str_Copy (URL,row[0], Cns_MAX_BYTES_WWW); } else URL[0] = '\0'; /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); /***** Row for this web / social network *****/ fprintf (Gbl.F.Out,"<tr>" "<td class=\"REC_C1_BOT LEFT_MIDDLE\">" "<label for=\"URL%u\" class=\"%s\">" "<img src=\"%s/%s\"" " alt=\"%s\" title=\"%s\"" " class=\"CONTEXT_ICO_16x16\"" " style=\"margin-right:6px;\" />" "%s:" "</label>" "</td>" "<td class=\"REC_C2_BOT LEFT_MIDDLE\">" "<input type=\"url\" id=\"URL%u\" name=\"URL%u\"" " maxlength=\"%u\" value=\"%s\"" " class=\"REC_C2_BOT_INPUT\" />" "</td>" "</tr>", (unsigned) NumURL,The_ClassFormInBox[Gbl.Prefs.Theme], Cfg_URL_ICON_PUBLIC,Net_WebsAndSocialNetworksIcons[NumURL], Net_WebsAndSocialNetworksTitle[NumURL], Net_WebsAndSocialNetworksTitle[NumURL], Net_WebsAndSocialNetworksTitle[NumURL], (unsigned) NumURL,(unsigned) NumURL, Cns_MAX_CHARS_WWW,URL); } /***** End table *****/ Tbl_EndTable (); /***** Confirm button *****/ Btn_PutConfirmButton (Txt_Save_changes); /***** End form *****/ Frm_EndForm (); /***** End box *****/ Box_EndBox (); /***** End section *****/ Lay_EndSection (); }