コード例 #1
0
ファイル: vt100.c プロジェクト: malaise/c
char read_char (void) {
  int car;

  for (;;) {
    car = getchar();
    if ( (car > 0x1F) && (car < 0x7F) ) return car;
    switch (car) {
      case 0x7F:     /* Backspace  */
      case 0x08:     /* Backspace  */
        return 8;    /* Backspace  */
      case 0x10:     /* Ctrl P     */
        return 5;    /* Pg up      */
      case 0x0E:     /* Ctrl N     */
        return 6;    /* Pg down    */
      case 0x09:     /* Tab        */
        return 9;    /* Tab        */
      case 0x0D:     /* Return     */
        return 13;   /* Return     */
      case 0x1B:     /* Esc        */
        while (1) {
          car = escape_sequence();
          if (car == 0x00) break;
          else if (car != 0x1B) return car;
        }
    }
  }
}
コード例 #2
0
ファイル: t_parse.cpp プロジェクト: DaZombieKiller/lxDoom
char *FParser::GetTokens(char *s)
{
	char *tokn = NULL;

	Rover = s;
	NumTokens = 1;
	Tokens[0][0] = 0; TokenType[NumTokens-1] = name_;
	
	Section = NULL;   // default to no section found
	
	NextToken();
	LineStart = Rover;      // save the start
	
	if(*Rover)
	{
		while(1)
		{
			tokn = Tokens[NumTokens-1];
			if(Section)
			{
				// a { or } section brace has been found
				break;        // stop parsing now
			}
			else if(TokenType[NumTokens-1] != string_)
			{
				if(*Rover == ';') break;     // check for end of command ';'
			}
			
			switch(TokenType[NumTokens-1])
			{
			case unset:
			case string_:
				while(*Rover != '\"')     // dedicated loop for speed
				{
					if(*Rover == '\\')       // escape sequences
					{
						Rover++;
						if (*Rover>='0' && *Rover<='9')
						{
							add_char(tokn, TEXTCOLOR_ESCAPE);
							add_char(tokn, *Rover+'A'-'0');
						}
						else add_char(tokn, escape_sequence(*Rover));
					}
					else
						add_char(tokn, *Rover);
					Rover++;
				}
				Rover++;
				NextToken();       // end of this token
				continue;
				
			case operator_:
				// all 2-character operators either end in '=' or
				// are 2 of the same character
				// do not allow 2-characters for brackets '(' ')'
				// which are still being considered as operators
				
				// operators are only 2-char max, do not need
				// a seperate loop
				
				if((*tokn && *Rover != '=' && *Rover!=*tokn) ||
					*tokn == '(' || *tokn == ')')
				{
					// end of operator
					NextToken();
					continue;
				}
				add_char(tokn, *Rover);
				break;
				
			case number:
				
				// haleyjd: 8-17
				// add while number chars are read
				
				while(isnum(*Rover))       // dedicated loop
					add_char(tokn, *Rover++);
				NextToken();
				continue;
				
			case name_:
				
				// add the chars
				
				while(!isop(*Rover))        // dedicated loop
					add_char(tokn, *Rover++);
				NextToken();
				continue;
				
			default:
				break;
			}
			Rover++;
		}
	}
		
	// check for empty last token
	
	if(!tokn || !tokn[0])
	{
		NumTokens = NumTokens - 1;
	}
	
	Rover++;
	return Rover;
}
コード例 #3
0
ファイル: t_parse.cpp プロジェクト: ddraigcymraeg/gzscoredoom
void get_tokens(char *s)
{
	rover = s;
	num_tokens = 1;
	tokens[0][0] = 0; tt = name_;
	
	current_section = NULL;   // default to no section found
	
	next_token();
	linestart = rover;      // save the start
	
	if(*rover)
		while(1)
		{
			if(killscript) return;
			if(current_section)
			{
				// a { or } section brace has been found
				break;        // stop parsing now
			}
			else if(tt != string_)
			{
				if(*rover == ';') break;     // check for end of command ';'
			}
			
			switch(tt)
			{
			case unset:
			case string_:
				while(*rover != '\"')     // dedicated loop for speed
				{
					if(*rover == '\\')       // escape sequences
					{
						rover++;
						if (*rover>='0' && *rover<='9')
						{
							add_char(TEXTCOLOR_ESCAPE);
							add_char(*rover+'A'-'0');
						}
						else add_char(escape_sequence(*rover));
					}
					else
						add_char(*rover);
					rover++;
				}
				rover++;
				next_token();       // end of this token
				continue;
				
			case operator_:
				// all 2-character operators either end in '=' or
				// are 2 of the same character
				// do not allow 2-characters for brackets '(' ')'
				// which are still being considered as operators
				
				// operators are only 2-char max, do not need
				// a seperate loop
				
				if((*tok && *rover != '=' && *rover!=*tok) ||
					*tok == '(' || *tok == ')')
				{
					// end of operator
					next_token();
					continue;
				}
				add_char(*rover);
				break;
				
			case number:
				
				// haleyjd: 8-17
				// add while number chars are read
				
				while(isnum(*rover))       // dedicated loop
					add_char(*rover++);
				next_token();
				continue;
				
			case name_:
				
				// add the chars
				
				while(!isop(*rover))        // dedicated loop
					add_char(*rover++);
				next_token();
				continue;
				
			default:
				break;
			}
			rover++;
		}
		
	// check for empty last token
	
	if(!tok[0])
	{
		num_tokens = num_tokens - 1;
	}
	
	rover++;
}