예제 #1
0
NS_IMETHODIMP
nsCommandLine::HandleFlagWithParam(const nsAString& aFlag, bool aCaseSensitive,
                                   nsAString& aResult)
{
  nsresult rv;

  int32_t found;
  rv = FindFlag(aFlag, aCaseSensitive, &found);
  NS_ENSURE_SUCCESS(rv, rv);

  if (found == -1) {
    aResult.SetIsVoid(true);
    return NS_OK;
  }

  if (found == int32_t(mArgs.Length()) - 1) {
    return NS_ERROR_INVALID_ARG;
  }

  ++found;

  { // scope for validity of |param|, which RemoveArguments call invalidates
    const nsString& param = mArgs[found];
    if (!param.IsEmpty() && param.First() == '-') {
      return NS_ERROR_INVALID_ARG;
    }

    aResult = param;
  }

  RemoveArguments(found - 1, found);

  return NS_OK;
}
예제 #2
0
//==========================================================================
//
// Processes a flag. Also used by olddecorations.cpp
//
//==========================================================================
void HandleActorFlag(FScanner &sc, Baggage &bag, const char *part1, const char *part2, int mod)
{
	FFlagDef *fd;

	if ( (fd = FindFlag (bag.Info, part1, part2)) )
	{
		AActor *defaults = (AActor*)bag.Info->Defaults;
		if (fd->structoffset == -1)	// this is a deprecated flag that has been changed into a real property
		{
			HandleDeprecatedFlags(defaults, bag.Info, mod=='+', fd->flagbit);
		}
		else
		{
			ModActorFlag(defaults, fd, mod == '+');
		}
	}
	else
	{
		if (part2 == NULL)
		{
			sc.ScriptMessage("\"%s\" is an unknown flag\n", part1);
		}
		else
		{
			sc.ScriptMessage("\"%s.%s\" is an unknown flag\n", part1, part2);
		}
		FScriptPosition::ErrorCounter++;
	}
}
예제 #3
0
NS_IMETHODIMP
nsCommandLine::HandleFlagWithParam(const nsAString& aFlag, bool aCaseSensitive,
                                   nsAString& aResult)
{
  nsresult rv;

  int32_t found;
  rv = FindFlag(aFlag, aCaseSensitive, &found);
  NS_ENSURE_SUCCESS(rv, rv);

  if (found == -1) {
    aResult.SetIsVoid(true);
    return NS_OK;
  }

  if (found == int32_t(mArgs.Length()) - 1) {
    return NS_ERROR_INVALID_ARG;
  }

  ++found;

  if (mArgs[found].First() == '-') {
    return NS_ERROR_INVALID_ARG;
  }

  aResult = mArgs[found];
  RemoveArguments(found - 1, found);

  return NS_OK;
}
예제 #4
0
string GFlagsHandler::SetFlags(
    const vector<pair<string, string> >& new_flag_values) {
  vector<CommandLineFlagInfo> flags_info;
  google::GetAllFlags(&flags_info);

  string error_msg;
  for (vector<pair<string, string> >::const_iterator iter =
      new_flag_values.begin(); iter != new_flag_values.end(); ++iter) {
    if (!FindFlag(iter->first, flags_info)) {
      // Failed to find this flag
      error_msg.append("This flag does not exist: ")
               .append(iter->first)
               .append("\n");

      continue;
    }

    // It's thread safe too
    LOG(INFO) << google::SetCommandLineOptionWithMode(iter->first.c_str(),
                                                      iter->second.c_str(),
                                                      google::SET_FLAGS_VALUE);
  }

  return error_msg == "" ? "OK" : error_msg;
}
예제 #5
0
FFlagDef *FindFlag (const PClass *type, const char *part1, const char *part2)
{
	FFlagDef *def;
	size_t i;

	if (part2 == NULL)
	{ // Search all lists
		for (i = 0; i < NUM_FLAG_LISTS; ++i)
		{
			if (type->IsDescendantOf (*FlagLists[i].Type))
			{
				def = FindFlag (FlagLists[i].Defs, FlagLists[i].NumDefs, part1);
				if (def != NULL)
				{
					return def;
				}
			}
		}
	}
	else
	{ // Search just the named list
		for (i = 0; i < NUM_FLAG_LISTS; ++i)
		{
			if (stricmp ((*FlagLists[i].Type)->TypeName.GetChars(), part1) == 0)
			{
				if (type->IsDescendantOf (*FlagLists[i].Type))
				{
					return FindFlag (FlagLists[i].Defs, FlagLists[i].NumDefs, part2);
				}
				else
				{
					return NULL;
				}
			}
		}
	}
	return NULL;
}
예제 #6
0
void AdminCache::OnSourceModLevelChange(const char *mapName)
{
	int i;
	AdminFlag flag;

	/* For now, we only read these once per level. */
	s_FlagReader.LoadLevels();

	memset(g_ReverseFlags, '?', sizeof(g_ReverseFlags));

	for (i = 0; i < 26; i++)
	{
		if (FindFlag('a' + i, &flag))
		{
			g_ReverseFlags[flag] = 'a' + i;
		}
	}
}
예제 #7
0
NS_IMETHODIMP
nsCommandLine::HandleFlag(const nsAString& aFlag, bool aCaseSensitive,
                          bool *aResult)
{
  nsresult rv;

  int32_t found;
  rv = FindFlag(aFlag, aCaseSensitive, &found);
  NS_ENSURE_SUCCESS(rv, rv);

  if (found == -1) {
    *aResult = false;
    return NS_OK;
  }

  *aResult = true;
  RemoveArguments(found, found);

  return NS_OK;
}
예제 #8
0
void AdminCache::OnSimillimumLevelChange(const char *mapName)
{
	int i;
	AdminFlag flag;

	/* For now, we only read these once per level. */
	s_FlagReader.LoadLevels();

	for (i = 0; i < 26; i++)
	{
		if (FindFlag('a' + i, &flag))
		{
			g_ReverseFlags[flag] = 'a' + i;
		}
		else
		{
			g_ReverseFlags[flag] = '?';
		}
	}
}
예제 #9
0
FlagBits AdminCache::ReadFlagString(const char *flags, const char **end)
{
	FlagBits bits = 0;

	while (flags && (*flags != '\0'))
	{
		AdminFlag flag;
		if (!FindFlag(*flags, &flag))
		{
			break;
		}
		bits |= FlagArrayToBits(&flag, 1);
		flags++;
	}

	if (end)
	{
		*end = flags;
	}

	return bits;
}
예제 #10
0
void ProcessSoundLine(char buffer[])
{
	short sidx,eidx;
	short done=0;
	long TODO,flag;
	RIFF_FILE *WaveFile=NULL;
	SoundList *rec;
	char ID[32];
	

	sidx=0;
	eidx=0;

	// Find Token
	while(buffer[sidx+eidx] != ',' && buffer[sidx+eidx] > ' ' && buffer[sidx+eidx] != '#')
		eidx++;

	if(!eidx)
		return;

	buffer[eidx]=0;
	TODO=FindTODO(&buffer[sidx]);
	if(!TODO)
		return;

	sidx=eidx+1;
	eidx=0;

	// Handle Token
	if(TODO == LOAD_SOUND)
	{
		// Find ID
		while((buffer[sidx] <= ' ' || buffer[sidx] == ',') && buffer[sidx])
			sidx++;

		if(!buffer[sidx] || buffer[sidx] == '#')
			return;

		eidx=0;
		while(buffer[sidx+eidx] > ' ' && buffer[sidx+eidx] != ',')
			eidx++;

		if(!eidx)
			return;

		memset(ID,0,32);
		memcpy(ID,&buffer[sidx],min(eidx,32));

		sidx+=eidx+1;

		// Find filename
		while(buffer[sidx] != '"' && buffer[sidx])
			sidx++;

		if(buffer[sidx] != '"')
			return;

		eidx=0;
		sidx++;
		while(buffer[sidx+eidx] != '"' && buffer[sidx+eidx] >= ' ')
			eidx++;

		if(buffer[sidx+eidx] != '"')
			return;

		buffer[sidx+eidx]=0;
		printf("Processing (%s)...",&buffer[sidx]);
		WaveFile=LoadRiff(&buffer[sidx]);

		if(!WaveFile)
		{
			printf("Failed\n");
			return;
		}

		printf("Adding (%s) (%1ld)\n",&buffer[sidx],WaveFile->Size);

		rec=new SoundList;
		memset(rec,0,sizeof(SoundList));

		rec->Sound=WaveFile;
		rec->Size=WaveFile->Size;
		rec->Header.Type=_RSC_IS_SOUND_;
		memcpy(rec->Header.ID,ID,32);
		rec->Header.headersize=WaveFile->Headersize;
		rec->Header.Channels=WaveFile->Header->nChannels;
		rec->Header.SoundType=WaveFile->Header->wFormatTag;

		sidx+=eidx+1;
		eidx=0;

		// Get flags
		while(!done)
		{
			while((buffer[sidx] == ',' || buffer[sidx] <= ' ') && buffer[sidx])
				sidx++;

			if(buffer[sidx] < ' ')
				done=1;
			else
			{
				while(buffer[sidx+eidx] > ' ' && buffer[sidx+eidx] != ',')
					eidx++;

				buffer[sidx+eidx]=0;

				if(eidx)
				{
					flag=FindFlag(&buffer[sidx]);
					rec->Header.flags |= flag;
				}
				else
					done=1;
				sidx +=eidx+1;
				eidx=0;
			}
		}
		HeaderSize+=sizeof(SoundFmt);
		DataSize+=rec->Size;
		SoundTable->Add(UniqueID++,rec);
	}
}
예제 #11
0
 BitfieldFlag*
 Bitfield::FindFlag ( const char* name )
 {
   return FindFlag ( StringCrc32 ( name ) );
 }
예제 #12
0
T_void CompileArgs(T_byte8 *p_args, T_word16 numArgs)
{
    char args[10][100] ;
    T_word16 i, j, k ;
    T_byte8 arg[100] ;
    T_sword32 value ;
    T_word16 len ;

    p_args++ ;
    if (numArgs == 0)
        p_args++ ;

    for (i=0; i<numArgs; i++)  {
        j = 0 ;
        while ((*p_args != ',') && (*p_args != ')'))  {
            if (j==100)  {
                printf("Argument %d on line %d too long!\n",
                    i+1,
                    G_line) ;
                G_errors++ ;
                return ;
            }
            args[i][j++] = *(p_args++) ;
        }
        if ((p_args[0] == ')') && ((i+1) != numArgs))  {
            printf("Error!  Wrong number of arguments on line %d\n",
                G_line) ;
            G_errors++ ;
            return ;
        }
        args[i][j] = '\0' ;
        p_args++ ;
    }
    if (p_args[-1] != ')')  {
        printf("Error!  Wrong number of arguments on line %d\n",
             G_line) ;
        G_errors ++ ;
        return ;
    }

    for (i=0; i<numArgs; i++)  {
//printf("arg[%d] = '%s'\n", i, args[i]) ;
        strcpy(arg, args[i]) ;
        Strip(arg) ;
        if ((arg[0] == '-') || (isdigit(arg[0])))  {
            /* Arg is Number. */
            value = atol(arg) ;
            OutputNumber(value) ;
        } else if (arg[0] == '&')  {
            /* Event. */
            value = atol(arg+1) ;
            if (!((value >= 1) && (value <= 3)))  {
                printf("Error!  Event parameter (%ld) out of range (1-3) on line %d!\n",
                    value,
                    G_line) ;
                G_errors++ ;
                return ;
            }
            OutputByte(SCRIPT_DATA_TYPE_EVENT_PARAMETER) ;
            OutputByte((T_byte8)value) ;
        } else if (arg[0] == QUOTE_START)  {
            len = strlen(arg)-2 ;
            if (len >= 80)  {
                printf("Error!  String too long on line %d!\n", G_line) ;
                G_errors++ ;
                return ;
            }
            OutputByte(SCRIPT_DATA_TYPE_STRING) ;
            OutputByte((T_byte8)len) ;
            for (k=0; k<len; k++)  {
                OutputByte(arg[1+k]) ;
            }
        } else {
            /* Try doing a flag name. */
            value = FindFlag(arg) ;
            if (value != -1)  {
                OutputByte(SCRIPT_DATA_TYPE_FLAG) ;
                OutputByte((T_byte8)value) ;
            } else {
                value = FindVar(arg) ;
                if (value != -1)  {
                    value = G_vars[value].number ;
                    OutputByte(SCRIPT_DATA_TYPE_VARIABLE) ;
                    OutputByte(((T_byte8 *)&value)[0]) ;
                    OutputByte(((T_byte8 *)&value)[1]) ;
                } else {
//printf("Searching for defnum: %s\n", arg) ;
                    value = FindDefnum(arg) ;
                    if (value != -1)  {
                        value = G_defnums[value].number ;
//printf("Output defnum: %s %ld\n", arg, value) ;
                        OutputNumber(value) ;
                    } else {
                        printf("Error!  Unknown argument '%s' on line %d\n",
                            arg,
                            G_line) ;
                        G_errors++ ;
                        return ;
                    }
                }
            }
        }
    }
}