char *G_NewString( const char *string ) { char *newb, *new_p; int i,l; char buffer[MAX_STRING_CHARS]; l = strlen(string) + 1; Q_strncpyz(buffer,string,sizeof(buffer)); // newb = (char *) G_Alloc2( l ); newb = G_FindAlloc(buffer);//G_FindMemory( buffer ); if (!newb) return G_NewString2(buffer); new_p = newb; // turn \n into a real linefeed for ( i=0 ; i< l ; i++ ) { if (string[i] == '\\' && i < l-1) { i++; if (string[i] == 'n') { *new_p++ = '\n'; } else { *new_p++ = '\\'; } } else { *new_p++ = string[i]; } } return newb; }
void JKG_Pairs_SetKey(KeyPairSet_t *set, const char *key, const char *value) { int index = JKG_Pairs_FindKey(set, key); if(index >= 0) { G_NewString2((void **)&set->pairs[index].value, value); } else { JKG_Pairs_Add(set, key, value); } }
/*QUAKED target_play_music (1 0 0) (-4 -4 -4) (4 4 4) target_play_music Plays the requested music files when this target is used. "targetname" "music" music WAV or MP3 file ( music/introfile.mp3 [optional] music/loopfile.mp3 ) If an intro file and loop file are specified, the intro plays first, then the looping portion will start and loop indefinetly. If no introfile is entered, only the loopfile will play. */ void SP_target_play_music( gentity_t *self ) { char *s; G_SetOrigin( self, self->s.origin ); if (!G_SpawnString( "music", "", &s )) { G_Error( "target_play_music without a music key at %s", vtos( self->s.origin ) ); } //self->message = G_NewString(s); G_NewString2((void **)&self->message, s); self->use = target_play_music_use; }
/*QUAKED target_level_change (1 0 0) (-4 -4 -4) (4 4 4) "mapname" - Name of map to change to */ void SP_target_level_change( gentity_t *self ) { char *s; G_SpawnString( "mapname", "", &s ); //self->message = G_NewString(s); G_NewString2((void **)&self->message, s); if ( !self->message || !self->message[0] ) { G_Error( "target_level_change with no mapname!\n"); return; } G_SetOrigin( self, self->s.origin ); self->use = target_level_change_use; }
void SP_target_interest( gentity_t *self ) {//FIXME: rename point_interest if(level.numInterestPoints >= MAX_INTEREST_POINTS) { Com_Printf("ERROR: Too many interest points, limit is %d\n", MAX_INTEREST_POINTS); G_FreeEntity(self); return; } VectorCopy(self->r.currentOrigin, level.interestPoints[level.numInterestPoints].origin); if(self->target && self->target[0]) { //level.interestPoints[level.numInterestPoints].target = G_NewString( self->target ); G_NewString2(&level.interestPoints[level.numInterestPoints].target, self->target); } level.numInterestPoints++; G_FreeEntity(self); }
unsigned int JKG_Pairs_Add(KeyPairSet_t *set, const char *key, const char *value){ unsigned int index = JKG_Arrays_AddArrayElement((void **)&set->pairs, sizeof(KeyPair_t), &set->count); G_NewString2((void **)&set->pairs[index].key, key); G_NewString2((void **)&set->pairs[index].value, value); return index; }