Exemple #1
0
Vertex* Vertex::adjacent( std::size_t connector_id ) const
{
    const auto pc = Connector::look_up(connector_id) ;
    if(pc)
    {
        Vertex* v1 = look_up( pc->vertex_pair.first ) ;
        Vertex* v2 = look_up( pc->vertex_pair.second ) ;
        if( v1 != this && v2 != this ) throw std::logic_error("bad connector") ;
        return v1 == this ? v2 : v1 ;
    }
    return nullptr ;
}
Exemple #2
0
int main(int argc, char **argv)
{
	FILE *boot, *img;
	char boot_buf[512];
	short buf2[512];
	short blocks[256];
	struct inode inode;
	int i = 0;

	if (argc != 3) {
		fprintf(stderr, "install-boot boot.bin dev_name\n");
		exit(0);
	}

	boot = fopen(argv[1], "rb");
	if (boot == NULL) {
		fprintf(stderr, "File Open Error:%s", argv[3]);
		exit(0);
	}

	img = fopen(argv[2], "r+");
	if (img == NULL) {
		fprintf(stderr, "File Open Error:%s", argv[1]);
		exit(0);
	}

	fread(boot_buf, 512, 1, boot);
	fclose(boot);

	read_super(img);

	read_inode(img, 1, &inode);

	look_up(img, &inode, "boot");
	look_up(img, &inode, "kernel");

	memset(blocks, 0, 512);
	for (i = 0; i < 7; i++)
		blocks[i] = inode.i_zone[i];

	read_block(img, inode.i_zone[7], (char*) buf2);
	while (i * 1024 < inode.i_size) {
		blocks[i] = buf2[i - 7];
		i++;
	}

	fseek(img, 0, 0);
	fwrite(boot_buf, 1, 512, img);
	fwrite(blocks, 1, 512, img);
	fclose(img);
}
Exemple #3
0
/* Get a token. */
get_token()
{
  register char *temp;

  token_type=0; tok=0;
  temp=token;

  if(*prog=='\0') { /* end of file */
    *token=0;
    tok = FINISHED;
    return(token_type=DELIMITER);
  }

  while(iswhite(*prog)) ++prog;  /* skip over white space */

  if(*prog=='\r') { /* crlf */
    ++prog; ++prog;
    tok = EOL; *token='\r';
    token[1]='\n'; token[2]=0;
    return (token_type = DELIMITER);
  }

  if(strchr("+-*^/%=;(),><", *prog)){ /* delimiter */
    *temp=*prog;
    prog++; /* advance to next position */
    temp++;
    *temp=0; 
    return (token_type=DELIMITER);
  }
    
  if(*prog=='"') { /* quoted string */
    prog++;
    while(*prog!='"'&& *prog!='\r') *temp++=*prog++;
    if(*prog=='\r') serror(1);
    prog++;*temp=0;
    return(token_type=QUOTE);
  }
  
  if(isdigit(*prog)) { /* number */
    while(!isdelim(*prog)) *temp++=*prog++;
    *temp = '\0';
    return(token_type = NUMBER);
  }

  if(isalpha(*prog)) { /* var or command */
    while(!isdelim(*prog)) *temp++=*prog++;
    token_type=STRING;
  }
  
  *temp = '\0';

  /* see if a string is a command or a variable */
  if(token_type==STRING) {
    tok=look_up(token); /* convert to internal rep */
    if(!tok) token_type = VARIABLE;
    else token_type = COMMAND; /* is a command */
  }
  return token_type;
}
Exemple #4
0
codec_c const
codec_c::look_up(fourcc_c const &fourcc) {
  initialize();

  auto itr = brng::find_if(ms_codecs, [&fourcc](codec_c const &c) { return brng::find(c.m_fourccs, fourcc) != c.m_fourccs.end(); });

  return itr != ms_codecs.end() ? *itr : look_up(fourcc.str());
}
Exemple #5
0
int uninstall(void *tag,HASH_TABLE hash_table)
{
 HASH_CELL **tmp,*mem;
    if((hash_table==NULL)||((mem=*(tmp=look_up(tag,hash_table)))==NULL))
        return(-1);
    if(hash_table->destructor!=NULL)
       hash_table->destructor(&(mem->tag),&(mem->cell));
    (*tmp)=(*tmp)->next;
    free(mem);
    (hash_table->n)--;
    return(0);
}/*uninstall*/
int get_token()
{
	int tok;
	char *temp;
	(token_type) = 0;
	tok = 0;
	temp = (token);

	if (*(prog) == '\0')
	{
		*(token) = 0;
		tok = FINISHED;
		return ((token_type) = DELIMITER);
	}
	while (iswhite(*(prog))) ++(prog);
	if (isdelim(*(prog)))
	{
		char t=*temp = *(prog);
		(prog)++;
		temp++;
		if ((t == '>' || t == '<' || t == '!') && (*prog) && (*prog == '='))
		{
			*temp = *(prog);
			(prog)++;
			temp++;
		}
		*temp = 0;
		return ((token_type) = DELIMITER);
	}
	if (isdigit(*(prog)))
	{
		while (!isdelim(*(prog)))
			*temp++=*(prog)++;
		*temp = '\0';
		return ((token_type) = NUMBER);
	}
	if (isalpha2(*(prog)))
	{
		while (!isdelim(*(prog)))
			*temp++=*(prog)++;
		(token_type) = VARIABLE;
	}
	*temp = '\0';
	if ((token_type) == VARIABLE)
	{
		tok = look_up((token));
		if (tok)
			(token_type) = FUNCTION;
	}
	return (token_type);
}
/*void Initialize()
{
struct entry *ptr;
for(ptr=keywords;ptr->token;ptr+1)
insert(ptr->lexptr,ptr->token);
}*/
int lexer()
{
int t;
int val,i=0;
while(1)
{
t=getchar();
if(t==' '||t=='\t');
else
if(t=='\n')
lineno=lineno+1;
else
if(isdigit(t))
{
ungetc(t,stdin);
scanf("%d",&tokenval);
return NUM;

}
else
if(isalpha(t))
{
while(isalnum(t))
{
buffer[i]=t;
t=getchar();
i=i+1;
if(i>=SIZE)
Error_Message("Compiler error");
}
buffer[i]=EOS;
if(t!=EOF)
ungetc(t,stdin);
val=look_up(buffer);
if(val==0)
val=insert(buffer,ID);
tokenval=val;
return symtable[val].token;
}
else
if(t==EOF)
return DONE;
else
{
tokenval=NONE;
return t;
}
}
}
Exemple #8
0
Lexeme * evaluate(Lexeme * tree, Lexeme * env) {
    char * type = getType(tree);
    //fprintf(stdout, " >> ");  printOut(tree);
    if (is_a_primary(type)) {
        return tree;
    }
    else if (type == CLOSURE) {
        // If this is a new closure, link it to its defining scope (this one).
        if (get_closure_environment(tree) == NULL) {
            tree = set_closure_environment(tree, env);
        }
        return tree;
    }
    else if (type == IDENTIFIER) {
        return look_up(env, tree);
    }
    else if (type == CALL) {
        // Function calls are evaluated by the function evaluator module.
        return evaluate_function_call(tree, env);
    }
    else if (type == BUILT_IN) {
        // Built-ins are executed directly by the built-ins module.
        return execute(tree, env);
    }
    else if (type == BINDING) {
        return evaluate_binding(tree, env);
    }
    else if (type == REBINDING) {
        return evaluate_rebinding(tree, env);
    }
    else if (type == IF_CLAUSE) {
        return evaluate_if_control(tree, env);
    }
    else if (type == WHILE_LOOP) {
        return evaluate_while_control(tree, env);
    }
    //else if (type == FOR_LOOP) {
    //    return evaluate_for_control(tree, env);
    //}
    else if (type == EXPRESSION_LIST) {
        return evaluate_expression_list(tree, env);
    }
    else {
        fprintf(stderr, "Evaluation error: I don't know what to do with type <%s>.\n", type);
        exit(-1);
    }
}
Exemple #9
0
int install(void *tag,void *cell, HASH_TABLE hash_table)
{
  HASH_CELL **tmp;
    if(hash_table==NULL)return(-1);
    if((*(tmp=look_up(tag,hash_table)))==NULL){
       /*new element*/
       (*tmp)=get_mem(1,sizeof(HASH_CELL));/*Here the "next" field probably is assigned!*/
       (*tmp)->next=NULL;(*tmp)->cell=cell;(*tmp)->tag=tag;
       (hash_table->n)++;
       return(0);
    }else{
       /*replace existing element*/
       if(hash_table->destructor!=NULL)
          hash_table->destructor(&((*tmp)->tag),&((*tmp)->cell));
       (*tmp)->cell=cell;(*tmp)->tag=tag;
       return(1);
    }
}/*install*/
Exemple #10
0
/*Resizes an existing hash table. Returns 0 in success:*/
int resize_hash_table(HASH_TABLE hash_table,word newSize)
{
 word i;
 HASH_CELL *m1,**tmp;
 struct hash_tab_struct tmpTable;

 if(hash_table==NULL)return -1;
 if(newSize==0)return -2;

 if(hash_table->table==NULL){
   hash_table->table=get_mem(newSize,sizeof(HASH_CELL *));
   hash_table->tablesize=newSize;
   return 0;
 }/*if(hash_table->table==NULL)*/

 /*Allocate new table with the same attributes as incoming hash_table
   except tablesize:*/
 tmpTable.tablesize=newSize;
 tmpTable.hash=hash_table->hash;
 tmpTable.cmp=hash_table->cmp;
 tmpTable.destructor=hash_table->destructor;
 tmpTable.new_tag=hash_table->new_tag;
 tmpTable.new_cell=hash_table->new_cell;

 /* The table itself must be of a new size:*/
 tmpTable.table=get_mem(newSize,sizeof(HASH_CELL *));

 for(i=0;i<hash_table->tablesize;i++)
   if((m1=(hash_table->table)[i])!=NULL){
     do{
       tmp=look_up(m1->tag,&tmpTable);
       (*tmp)=m1;/*Here the "next" field probably is assigned!*/
       m1=m1->next;
       (*tmp)->next=NULL;
     }while(m1!=NULL);
   }
 /*Clear old table:*/
 free_mem(&(hash_table->table));
 /*And set up the new one:*/
 hash_table->table=tmpTable.table;
 hash_table->tablesize=newSize;
 return 0;
}/*resize_hash_table*/
Exemple #11
0
node_idx UniqueTable::add(const level k, const node_idx p)
{
	node_idx r;
	TableNode *newNode;
	unsigned int idx;

	r = look_up(k, p);
	if (r != -1)
		return r;

	idx = m_forest->hashnode(k, p) % TABLE_SIZE;

	newNode = new TableNode;
	newNode->k = k;
	newNode->p = p;
	newNode->next = m_table[k][idx];
	m_table[k][idx] = newNode;
	return p;
}
Exemple #12
0
codec_c const
codec_c::look_up_object_type_id(unsigned int object_type_id) {
  return look_up(  (   (MP4OTI_MPEG4Audio                      == object_type_id)
                    || (MP4OTI_MPEG2AudioMain                  == object_type_id)
                    || (MP4OTI_MPEG2AudioLowComplexity         == object_type_id)
                    || (MP4OTI_MPEG2AudioScaleableSamplingRate == object_type_id)) ? type_e::A_AAC
                 : MP4OTI_MPEG1Audio                           == object_type_id   ? type_e::A_MP2
                 : MP4OTI_MPEG2AudioPart3                      == object_type_id   ? type_e::A_MP3
                 : MP4OTI_DTS                                  == object_type_id   ? type_e::A_DTS
                 : (   (MP4OTI_MPEG2VisualSimple               == object_type_id)
                    || (MP4OTI_MPEG2VisualMain                 == object_type_id)
                    || (MP4OTI_MPEG2VisualSNR                  == object_type_id)
                    || (MP4OTI_MPEG2VisualSpatial              == object_type_id)
                    || (MP4OTI_MPEG2VisualHigh                 == object_type_id)
                    || (MP4OTI_MPEG2Visual422                  == object_type_id)
                    || (MP4OTI_MPEG1Visual                     == object_type_id)) ? type_e::V_MPEG12
                 : MP4OTI_MPEG4Visual                          == object_type_id   ? type_e::V_MPEG4_P2
                 : MP4OTI_VOBSUB                               == object_type_id   ? type_e::S_VOBSUB
                 :                                                                   type_e::UNKNOWN);
}
Exemple #13
0
bool list<T>::remove(T t)
{
    node* del = look_up(t);

    if (del == 0)
        return false;
    else if (del == head_)
        pop_front();
    else if (del == tail_)
        pop_back();
    else {
        del->prev_->next_ = del->next_;
        del->next_->prev_ = del->prev_;

        destroy(del);
        FreeMemory(del);
        --sz_;
    }
    return true;
}
Exemple #14
0
static int copy_iterator(void *info,HASH_CELL *m, word index_in_tbl, word index_in_chain)
{
      if( ((COPY_ITERATOR_PARAMETERS *)info)->from_to_priors<0)/*from overrides*/
         install(
          ((COPY_ITERATOR_PARAMETERS *)info)->copy_tag(m->tag),
          ((COPY_ITERATOR_PARAMETERS *)info)->copy_cell(m->cell),
          ((COPY_ITERATOR_PARAMETERS *)info)->to_table
         );
      else if( ((COPY_ITERATOR_PARAMETERS *)info)->from_to_priors>0){/*to overrides*/
         if(
         *look_up(
         m->tag,
         ((COPY_ITERATOR_PARAMETERS *)info)->to_table) == NULL)/*absent!*/
         install(
          ((COPY_ITERATOR_PARAMETERS *)info)->copy_tag(m->tag),
          ((COPY_ITERATOR_PARAMETERS *)info)->copy_cell(m->cell),
          ((COPY_ITERATOR_PARAMETERS *)info)->to_table
         );
      }else /* == 0, just delete "from" from "to": */
          uninstall(m->tag,((COPY_ITERATOR_PARAMETERS *)info)->to_table);
      return 0;
}/*copy_iterator*/
Exemple #15
0
std::string const
codec_c::get_name(type_e type,
                  std::string const &fallback) {
  auto codec = look_up(type);
  return codec ? codec.m_name : fallback;
}
Exemple #16
0
std::string const
codec_c::get_name(std::string const &fourcc_or_codec_id,
                  std::string const &fallback) {
  auto codec = look_up(fourcc_or_codec_id);
  return codec ? codec.m_name : fallback;
}
Exemple #17
0
codec_c const
codec_c::look_up(char const *fourcc_or_codec_id) {
  return look_up(std::string{fourcc_or_codec_id});
}
/* Чтение лексемы */
char get_token()
{
	register char *temp;
	token_type = 0; tok = 0;
	temp = token;

	if( *prog == '\0' )
	{
		/* Конец файла */
		*token = 0;
		tok = FINISHED;
		return( token_type = DELIMITER );
	}
	while( iswhite(*prog) ) ++prog; /* Пропуск пробелов */

	if( *prog == '\r' )
	{
		/* конец строки программы */
		++prog; ++prog;
		tok = EOL; *token = '\r';
		token[1] = '\n'; token[2] = 0;

		return (token_type = DELIMITER );
	}

	if( strchr("+-*^/%=;(),<>", *prog ) )
	{
		/* Разделитель */
		*temp = *prog;
		prog++; /* Переход на следующу позицию */
		temp++;
		*temp = 0;
		return ( token_type = DELIMITER );
	}

	if ( *prog == '"' )
	{
		/* строка кавычек */
		prog ++;
		while( *prog != '"' && *prog != '\r' ) *temp++ = *prog++;
		if( *prog == '\r' ) serror(1);
		prog++; *temp = 0;
		return( token_type = QUOTE );
	}

	if( isdigit(*prog) )
	{
		/* число */
		while( !isdelim( *prog ) ) *temp++ = *prog++;
		*temp = '\0';

		return( token_type = NUMBER );
	}

	if( isalpha( *prog ) )
	{
		/* переменная или команда */
		while( !isdelim( *prog ) ) *temp++ = *prog++;
		token_type = STRING;
	}

	*temp = '\0';
/* просматривается, если строка - переменная или команда */
	if ( token_type == STRING )
	{
		tok = look_up( token ); /* Преобразование во внутренний формат */ //Пока что таблица table не заполнена, посему look_up === 0
		if ( !tok ) token_type = VARIABLE;
		else token_type = COMMAND; /* это команда */
	}
	return token_type;
}
void calc_function(double *hold)
{
  double_list *args = NULL, *last = NULL, *t;		
  double d;
	int i,argc=0,save_code;

	save_code = code;
	code = 0;
	i = look_up(token);

	if (i == 0)
		serror(ERR_BADFUNCTION);	// error

	get_token();
	if (*(token) != '(')
		serror(ERR_NOBRACKET);	// error
	//get_token();
	if (functions[i].args == STR_ARG)
	{
		get_token();
		d = ((matfunc_str)(functions[i].f))(token);
		*hold = d;
		get_token();
		if (save_code)
			code = save_code;
		return;
	}

	//last = args = (double_list*)malloc(sizeof(double_list));
	//args->next = NULL;
	//level1(&args->val);
	//get_token();
	argc=0;
	do 
	{
		get_token();
		if (*token == ')')
			break;
		t = (double_list*)allocmem(sizeof(double_list));
		code = 0;
		level1(&t->val);
		t->code = code;
		t->next = NULL;
		if (last)
			last->next = t;
		else
			args = t;
		last = t;
		argc++;
	} while (*token == ',');

	code = save_code;

	if (argc != functions[i].args && functions[i].args >= 0)
	{
		serror(ERR_BADPARAM);
	}
	else
	{
		switch (functions[i].args)
		{
			case 0:
				d = ((matfunc0)(functions[i].f))();
				break;
			case 1:
				d = ((matfunc)(functions[i].f))(args->val);
				break;			
			case 2:
				d = ((matfunc2)(functions[i].f))(args->val,args->next->val);
				break;			
			case 3:
				d = ((matfunc3)(functions[i].f))(args->val,args->next->val,args->next->next->val);
				break;		
			case INF_ARGS:
				d = ((matfunc_inf)(functions[i].f))(args);
				break;
		}
	}

	t = args;
	while (t)
	{
		args = t->next;
		freemem(t);
		t = args;
	}
	
  *hold = d;
//  else
//    serror( ERR_OVERFLOW);

}
Exemple #20
0
int main()
{
    buf_pool *sp ;

    sp = buf_init(pool_num,sizeof(double));
   	#if 0  //for test
	int i = 4 ;
	sp = add(sp,&i);  
	look_up(sp);  
	#endif 
	int res  ; 
	pthread_t tid[thread_num] ; //store to child pthread
	pthread_t master_tid ;
	#if 0 //int 
	int test_arry[] = {10,11,12,13};
	#endif 
	
	#if 1
	double test_arry[] = {10.0,11.0,12.0,13.0};
	#endif
	master_thread_param *mtp;
	mtp = (master_thread_param *)malloc(sizeof(master_thread_param));//apply memery
	mtp->master_sp = sp ; //point to buf_pool
	mtp->param = test_arry; //address of a test_array
	mtp->num = sizeof(test_arry)/sizeof(test_arry[0]);//array length	

	res = pthread_create(&master_tid,NULL,master_thread_function,mtp);
	if (res != 0)
	{
		fprintf(stderr,"pthread was create error \n");
		exit(EXIT_FAILURE);	
    }
    pthread_join(master_tid,NULL); 
#if 1 //for test 
	look_up(sp);
#endif
//	double double_test_array[thread_num] ;
//	memset(double_test_array,0.0,thread_num); 
//	child_thread_param *ctp ;
//	ctp->child_sp = sp ;
//	ctp->value = double_test_array; 
	for(int i = 0 ;i < thread_num ;i++) //the child thread 
	{
		res = pthread_create(&tid[i],NULL,thread_function,sp);
		if (res != 0)
		{
			fprintf(stderr,"pthread was create error \n");
			exit(EXIT_FAILURE);	
		}
	}
   
	for(int i = 0 ;i < thread_num ;i++) //joinable thread 
   	{
		res  = pthread_join(tid[i],NULL);
 		if(res != 0)
		{
			fprintf(stderr,"thread join failed \n");
			exit(EXIT_FAILURE);	
		}	
	}
    release(sp); 
	free(mtp);
return 0;
}
Exemple #21
0
// Get a token. 
tok_types get_token()
{

	char *temp;

	token_type = UNDEFTT; tok = UNDEFTOK;

	temp = token;
	*temp = '\0';

	// Skip over white space. 
	while (isspace(*prog) && *prog) ++prog;

	// Skip over newline. 
	while (*prog == '\r') {
		++prog;
		++prog;
		// Again, skip over white space. 
		while (isspace(*prog) && *prog) ++prog;
	}

	// Check for end of program. 
	if (*prog == '\0') {
		*token = '\0';
		tok = END;
		return (token_type = DELIMITER);
	}

	// Check for block delimiters. 
	if (strchr("{}", *prog)) {
		*temp = *prog;
		temp++;
		*temp = '\0';
		prog++;
		return (token_type = BLOCK);
	}

	// Look for comments. 
	if (*prog == '/')
		if (*(prog + 1) == '*') { // is a /* comment 
			prog += 2;
			do { // find end of comment 
				while (*prog != '*') prog++;
				prog++;
			} while (*prog != '/');
			prog++;
			return (token_type = DELIMITER);
		}
		else if (*(prog + 1) == '/') { // is a // comment 
			prog += 2;
			// Find end of comment. 
			while (*prog != '\r' && *prog != '\0') prog++;
			if (*prog == '\r') prog += 2;
			return (token_type = DELIMITER);
		}

		// Check for double-ops. 
		if (strchr("!<>=+-", *prog)) {
			switch (*prog) {
			case '=':
				if (*(prog + 1) == '=') {
					prog++; prog++;
					*temp = EQ;
					temp++; *temp = EQ; temp++;
					*temp = '\0';
				}
				break;
			case '!':
				if (*(prog + 1) == '=') {
					prog++; prog++;
					*temp = NE;
					temp++; *temp = NE; temp++;
					*temp = '\0';
				}
				break;
			case '<':
				if (*(prog + 1) == '=') {
					prog++; prog++;
					*temp = LE; temp++; *temp = LE;
				}
				else if (*(prog + 1) == '<') {
					prog++; prog++;
					*temp = LS; temp++; *temp = LS;
				}
				else {
					prog++;
					*temp = LT;
				}
				temp++;
				*temp = '\0';
				break;
			case '>':
				if (*(prog + 1) == '=') {
					prog++; prog++;
					*temp = GE; temp++; *temp = GE;
				}
				else if (*(prog + 1) == '>') {
					prog++; prog++;
					*temp = RS; temp++; *temp = RS;
				}
				else {
					prog++;
					*temp = GT;
				}
				temp++;
				*temp = '\0';
				break;
			case '+':
				if (*(prog + 1) == '+') {
					prog++; prog++;
					*temp = INC; temp++; *temp = INC;
					temp++;
					*temp = '\0';
				}
				break;
			case '-':
				if (*(prog + 1) == '-') {
					prog++; prog++;
					*temp = DEC; temp++; *temp = DEC;
					temp++;
					*temp = '\0';
				}
				break;
			}

			if (*token) return(token_type = DELIMITER);
		}

		// Check for other delimiters. 
		if (strchr("+-*^/%=;:(),'", *prog)) {
			*temp = *prog;
			prog++;
			temp++;
			*temp = '\0';
			return (token_type = DELIMITER);
		}

		// Read a quoted string. 
		if (*prog == '"') {
			prog++;
			while (*prog != '"' && *prog != '\r' && *prog) {
				// Check for \n escape sequence. 
				if (*prog == '\\') {
					if (*(prog + 1) == 'n') {
						prog++;
						*temp++ = '\n';
					}
				}
				else if ((temp - token) < MAX_T_LEN)
					*temp++ = *prog;

				prog++;
			}
			if (*prog == '\r' || *prog == 0)
				throw InterpExc(SYNTAX);
			prog++; *temp = '\0';
			return (token_type = STRING);
		}

		// Read an integer number. 
		if (isdigit(*prog)) {
			while (!isdelim(*prog)) {
				if ((temp - token) < MAX_ID_LEN)
					*temp++ = *prog;
				prog++;
			}
			*temp = '\0';
			return (token_type = NUMBER);
		}

		// Read identifier or keyword. 
		if (isalpha(*prog)) {
			while (!isdelim(*prog)) {
				if ((temp - token) < MAX_ID_LEN)
					*temp++ = *prog;
				prog++;
			}
			token_type = TEMP;
		}

		*temp = '\0';

		// Determine if token is a keyword or identifier. 
		if (token_type == TEMP) {
			tok = look_up(token); // convert to internal form 
			if (tok) token_type = KEYWORD; // is a keyword 
			else token_type = IDENTIFIER;
		}

		// Check for unidentified character in file. 
		if (token_type == UNDEFTT)
			throw InterpExc(SYNTAX);

		return token_type;
}
Exemple #22
0
/* Get a token. */
char get_token(void)
{

	register char *temp;

	token_type = 0; tok = 0;

	temp = token;
	*temp = '\0';

	/* skip over white space */
	while (iswhite(*prog) && *prog) ++prog;

	/* Handle Windows and Mac newlines */
	if (*prog == '\r') {
		++prog;
		/* Only skip \n if it exists (if it doesn't, we are running on mac) */
		if (*prog == '\n') {
			++prog;
		}
		/* skip over white space */
		while (iswhite(*prog) && *prog) ++prog;
	}

	/* Handle Unix newlines */
	if (*prog == '\n') {
		++prog;
		/* skip over white space */
		while (iswhite(*prog) && *prog) ++prog;
	}

	if (*prog == '\0') { /* end of file */
		*token = '\0';
		tok = FINISHED;
		return (token_type = DELIMITER);
	}

	if (strchr("{}", *prog)) { /* block delimiters */
		*temp = *prog;
		temp++;
		*temp = '\0';
		prog++;
		return (token_type = BLOCK);
	}

	/* look for comments */
	if (*prog == '/')
		if (*(prog + 1) == '*') { /* is a comment */
			prog += 2;
			do { /* find end of comment */
				while (*prog != '*' && *prog != '\0') prog++;
				if (*prog == '\0') {
					prog--;
					break;
				}
				prog++;
			} while (*prog != '/');
			prog++;
		}

	/* look for C++ style comments */
	if (*prog == '/')
		if (*(prog + 1) == '/') { /* is a comment */
			prog += 2;
			/* find end of line */
			while (*prog != '\r' && *prog != '\n' && *prog != '\0') prog++;
			if (*prog == '\r' && *(prog + 1) == '\n') {
				prog++;
			}
		}

	/* look for the end of file after a comment */
	if (*prog == '\0') { /* end of file */
		*token = '\0';
		tok = FINISHED;
		return (token_type = DELIMITER);
	}

	if (strchr("!<>=", *prog)) { /* is or might be
								   a relational operator */
		switch (*prog) {
		case '=': if (*(prog + 1) == '=') {
			prog++; prog++;
			*temp = EQ;
			temp++; *temp = EQ; temp++;
			*temp = '\0';
		}
				  break;
		case '!': if (*(prog + 1) == '=') {
			prog++; prog++;
			*temp = NE;
			temp++; *temp = NE; temp++;
			*temp = '\0';
		}
				  break;
		case '<': if (*(prog + 1) == '=') {
			prog++; prog++;
			*temp = LE; temp++; *temp = LE;
		}
				  else {
					  prog++;
					  *temp = LT;
				  }
				  temp++;
				  *temp = '\0';
				  break;
		case '>': if (*(prog + 1) == '=') {
			prog++; prog++;
			*temp = GE; temp++; *temp = GE;
		}
				  else {
					  prog++;
					  *temp = GT;
				  }
				  temp++;
				  *temp = '\0';
				  break;
		}
		if (*token) return(token_type = DELIMITER);
	}

	if (strchr("+-*^/%=;(),'", *prog)) { /* delimiter */
		*temp = *prog;
		prog++; /* advance to next position */
		temp++;
		*temp = '\0';
		return (token_type = DELIMITER);
	}

	if (*prog == '"') { /* quoted string */
		prog++;
		while ((*prog != '"' && *prog != '\r' && *prog != '\n' && *prog != '\0') || (*prog == '"' && *(prog - 1) == '\\')) *temp++ = *prog++;
		if (*prog == '\r' || *prog == '\n' || *prog == '\0') sntx_err(SYNTAX);
		prog++; *temp = '\0';
		str_replace(token, "\\a", "\a");
		str_replace(token, "\\b", "\b");
		str_replace(token, "\\f", "\f");
		str_replace(token, "\\n", "\n");
		str_replace(token, "\\r", "\r");
		str_replace(token, "\\t", "\t");
		str_replace(token, "\\v", "\v");
		str_replace(token, "\\\\", "\\");
		str_replace(token, "\\\'", "\'");
		str_replace(token, "\\\"", "\"");
		return (token_type = STRING);
	}

	if (isdigit((int)*prog)) { /* number */
		while (!isdelim(*prog)) *temp++ = *prog++;
		*temp = '\0';
		return (token_type = NUMBER);
	}

	if (isalpha((int)*prog)) { /* var or command */
		while (!isdelim(*prog)) *temp++ = *prog++;
		token_type = TEMP;
	}

	*temp = '\0';

	/* see if a string is a command or a variable */
	if (token_type == TEMP) {
		tok = look_up(token); /* convert to internal rep */
		if (tok) token_type = KEYWORD; /* is a keyword */
		else token_type = IDENTIFIER;
	}
	return token_type;
}
Exemple #23
0
/* Get a bas_token. */
int get_token(){

   char *temp;

  bas_token_type=0; bas_tok=0;
  temp=bas_token;

  //    printf( "gettoken: <%c>\n", *prog );

  if(*prog=='\0') { /* end of file */
    *bas_token=0;
    bas_tok = FINISHED;
    return(bas_token_type=DELIMITER);
  }

  while(iswhite(*prog)) ++prog;  /* skip over white space */
  /*
  if(*prog=='\r') { /
    ++prog; ++prog;
    bas_tok = EOL; *bas_token='\r';
    bas_token[1]='\n'; bas_token[2]=0;
    return (bas_token_type = DELIMITER);
  }

*/
    if(*prog=='\n') { // lf 
    ++prog;
    //currentline++; // just for debug
    bas_tok = EOL; *bas_token='\n';
    bas_token[1]=0; 
    // printf("...EOL found ...%s" , "");
    return (bas_token_type = DELIMITER);
  }


  if(*prog=='#') { /* lf */
    ++prog;
    bas_tok = COMMENT; *bas_token='#';
    bas_token[1]=0;
    return (bas_token_type = DELIMITER);
  }



 
  if(strchr("!+-*^/%=;(),><&|", *prog)){ /* delimiter */
    *temp=*prog;

    //if there is NOT double delimiter
    if(strchr("+-*^/%;(),", *prog)){ /*  delimiter */
      // if  (strchr("(", *prog)){ printf("delim found %c \n", *prog); }
      //  if  (strchr(")", *prog)){ printf("delim found %c \n", *prog); }
      prog++; /* advance to next position */
      temp++;
      *temp=0; 
       return (bas_token_type=DELIMITER);
    }// was single delimiter
 




    /*  DOUBLE DELIMITERS WILL BE SINGLFIED.......HERE
     *
     */
    // printf("case of dd may come <%c> <%c>\n", *prog, prog[1] );

    if((strchr("=", *prog))&&(strchr("=",prog[1]) )){ /* double delimiter   == is ~  */
      bas_token[0]='~'; bas_token[1]='\0';
      prog++; /* advance to next position */
      temp++;
        prog++; /* advance to next position */
      temp++;
    *temp=0; 
    return (bas_token_type=DELIMITER);
  }

    if((strchr("!", *prog))&&(strchr("=",prog[1]) )){ /* double delimiter   != is !  */
      bas_token[0]='!'; bas_token[1]='\0';
      prog++; /* advance to next position */
      temp++;
       prog++; /* advance to next position */
      temp++;
    *temp=0; 
    return (bas_token_type=DELIMITER);
   }

    if((strchr("&", *prog))&&(strchr("&",prog[1]) )){ /* double delimiter && is @ */
      bas_token[0]='@'; bas_token[1]='\0';
      prog++; /* advance to next position */
      temp++;
      prog++; /* advance to next position */
      temp++; 
    *temp=0; 
    return (bas_token_type=DELIMITER);
    }

    if((strchr("|", *prog))&&(strchr("|",prog[1]) )){ /* double delimiter  || is $*/
      bas_token[0]='$'; bas_token[1]='\0';
      prog++; /* advance to next position */
      temp++;
        prog++; /* advance to next position */
      temp++;
    *temp=0; 
    return (bas_token_type=DELIMITER);
  }

    if((strchr(">", *prog))&&(strchr("=",prog[1]) )){ /* double delimiter  >= is :*/
      bas_token[0]=':'; bas_token[1]='\0';
      prog++; /* advance to next position */
      temp++;
        prog++; /* advance to next position */
      temp++;
    *temp=0; 
    return (bas_token_type=DELIMITER);
  }

    if((strchr("<", *prog))&&(strchr("=",prog[1]) )){ /* double delimiter  <= is _ */
      bas_token[0]='_'; bas_token[1]='\0';
      prog++; /* advance to next position */
      temp++;
        prog++; /* advance to next position */
      temp++;
    *temp=0; 
    return (bas_token_type=DELIMITER);
  }


    
      prog++; /* advance to next position */
      temp++;
    *temp=0; 
    return (bas_token_type=DELIMITER);
  }// DELIMITERS - DOUBLE DELIMITERS-------------------END-----DOUBLE
    


  /*   20100419 - now  |  and  &  are unabiguous
   *
   */

    //if there is NOT double delimiter
    if(strchr("|&", *prog)){ /*  delimiter */
      // if  (strchr("(", *prog)){ printf("delim found %c \n", *prog); }
      //  if  (strchr(")", *prog)){ printf("delim found %c \n", *prog); }
      prog++; /* advance to next position */
      temp++;
      *temp=0; 
       return (bas_token_type=DELIMITER);
    }// was single delimiter
 







  if(*prog=='"') { /* quoted string */
    prog++;
    while(*prog!='"'&& *prog!='\n') *temp++=*prog++;
    if(*prog=='\n') serror(1);
    prog++;*temp=0;
    return(bas_token_type=QUOTE);
  }
  

  if(isdigit(*prog)) { /* number */
    while(!isdelim(*prog)) *temp++=*prog++;
    *temp = '\0';
    // printf("temp=%s\n", bas_token);
    return(bas_token_type = NUMBER);
  }


  if(isalpha(*prog)) { /* var or command */
    while(!isdelim(*prog)) *temp++=*prog++;
    bas_token_type=STRING;
  }

  *temp = '\0';

  /* see if a string is a command or a variable */
  if(bas_token_type==STRING) {
    bas_tok=look_up(bas_token); /* convert to internal rep */
    if(!bas_tok) bas_token_type = VARIABLE;
    else bas_token_type = COMMAND; /* is a command */
  }
  return bas_token_type;
}//------------------------get_token
Exemple #24
0
const char* isis::sys::to_string(Directory e)
{
	return look_up(directory_to_string, e);
}
}


static int
mach_init(const char *service, void **ctx)
{
    struct mach_ctx *ipc;
    mach_port_t sport;
    int ret;

    dispatch_once(&jobqinited, ^{
	    jobq = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
	    syncq = dispatch_queue_create("heim-ipc-syncq", NULL);
	});

    ret = look_up(service, &sport);
    if (ret)
	return ret;

    ipc = malloc(sizeof(*ipc));
    if (ipc == NULL) {
	mach_port_destroy(mach_task_self(), sport);
	return ENOMEM;
    }

    ipc->server = sport;
    ipc->name = strdup(service);
    if (ipc->name == NULL) {
	mach_release(ipc);
	return ENOMEM;
    }
Exemple #26
0
/* Get a token. */
get_token(void)
{
  register char *temp;
  token_type = 0; tok = 0;
  temp = token;
  *temp = '\0';
 /* skip over white space */
  while(iswhite(*prog) && *prog) ++prog;
  if(*prog==0x0a) {
    ++prog;
//    ++prog;
    /* skip over white space */
    while(iswhite(*prog) && *prog) ++prog;
  }
  if(*prog=='\0') { /* end of file */
    *token = '\0';
    tok = FINISHED;
    return(token_type=DELIMITER);
  }
  if(strchr("{}", *prog)) { /* block delimiters */
    *temp = *prog;
    temp++;
    *temp = '\0';
    prog++;
    return (token_type = BLOCK);
  }
  /* look for comments */
  if(*prog=='/')
    if(*(prog+1)=='*') { /* is a comment */
      prog += 2;
      do { /* find end of comment */
        while(*prog!='*') prog++;
        prog++;
      } while (*prog!='/');
      prog++;
    }
  if(strchr("!<>=", *prog)) { /* is or might be
               a relation operator */
    switch(*prog) {
      case '=': if(*(prog+1)=='=') {
     prog++; prog++;
          *temp = EQ;
          temp++; *temp = EQ; temp++;
     *temp = '\0';
     }
   break;
      case '!': if(*(prog+1)=='=') {
     prog++; prog++;
          *temp = NE;
          temp++; *temp = NE; temp++;
     *temp = '\0';
   }
   break;
      case '<': if(*(prog+1)=='=') {
     prog++; prog++;
          *temp = LE; temp++; *temp = LE;
   }
   else {
     prog++;
     *temp = LT;
   }
        temp++;
   *temp = '\0';
   break;
      case '>': if(*(prog+1)=='=') {
     prog++; prog++;
          *temp = GE; temp++; *temp = GE;
   }
   else {
     prog++;
     *temp = GT;
   }
        temp++;
   *temp = '\0';
   break;
    }
    if(*token) return(token_type = DELIMITER);
  }
  if(strchr("+-*^/%=;(),'", *prog)){ /* delimiter */
    *temp = *prog;
    prog++; /* advance to next position */
    temp++;
    *temp = '\0';
    return (token_type=DELIMITER);
  }
  if(*prog=='"') { /* quoted string */
    prog++;
    while(*prog!='"'&& *prog!=0x0a) *temp++ = *prog++;
    if(*prog==0x0a) sntx_err(SYNTAX);
    prog++; *temp = '\0';
    return(token_type=STRING);
  }
  if(isdigit(*prog)) { /* number */
    while(!isdelim(*prog)) *temp++ = *prog++;
    *temp = '\0';
    return(token_type = NUMBER);
  }
  if(isalpha(*prog)) { /* var or command */
    while(!isdelim(*prog)) *temp++ = *prog++;
    token_type=TEMP;
  }
  *temp = '\0';
  /* see if a string is a command or a variable */
  if(token_type==TEMP) {
    tok = look_up(token); /* convert to internal rep */
    if(tok) token_type = KEYWORD; /* is a keyword */
    else token_type = IDENTIFIER;
  }
  return token_type;
}
Exemple #27
0
    /**
     * @brief Changes the vertical angle to look downwards.
     * @param angle the angle change in radians
     */
    void camera::look_down(double angle) {

      look_up(-angle);
    }
Exemple #28
0
int get_token()
{
    char *temp;
    token_type = 0;
    tok = 0;
    temp = token;
    *temp = '\0';
    while(iswhite(*prog) && *prog) 
        ++prog; 
    if(*prog=='\n') { 
        ++prog;
        while(iswhite(*prog) && *prog) 
            ++prog;
    }
    if(*prog=='\0') {
        *token = '\0';
        tok = FINISHED;
        return(token_type=DELIMITER);
    }
    if(strchr1("{}", *prog)) {
        *temp = *prog;
        temp++;
        *temp = '\0';
        prog++;
        return (token_type = BLOCK);
    }
    if(*prog=='/') {
        if(*(prog+1)=='*') {
            prog += 2;
            do { 
                while(*prog!='*') 
                    prog++;
                prog++;
            } while (*prog!='/');
            prog++;
        }
    }
    if(strchr1("!<>=", *prog)) {
        switch(*prog) {
            case '=':
                if(*(prog+1)=='=') {
                    prog++; prog++;
                    *temp = EQ;
                    temp++; *temp = EQ; temp++;
                    *temp = '\0';
                }
                break;
            case '!':
                if(*(prog+1)=='=') {
                    prog++; prog++;
                    *temp = NE;
                    temp++; *temp = NE; temp++;
                    *temp = '\0';
                }
                break;
            case '<':
                if(*(prog+1)=='=') {
                    prog++; prog++;
                    *temp = LE; temp++; *temp = LE;
                } else {
                    prog++;
                    *temp = LT;
                }
                temp++;
                *temp = '\0';
                break;
            case '>':
                if(*(prog+1)=='=') {
                    prog++; prog++;
                    *temp = GE; temp++; *temp = GE;
                } else {
                    prog++;
                    *temp = GT;
                }
                temp++;
                *temp = '\0';
                break;
        }
        if(*token) 
            return(token_type = DELIMITER);
    }
    if(strchr1("+-*^&|/%=;(),'", *prog)){
        *temp = *prog;
        prog++;
        temp++;
        *temp = '\0'; 
        return (token_type=DELIMITER);
    }
    if(*prog=='"') { 
        prog++;
        while(*prog!='"'&& *prog!='\n') 
            *temp++ = *prog++;
        if(*prog=='\n') 
            sntx_err(SYNTAX);
        prog++; *temp = '\0';
        return(token_type=STRING);
    }
    if(isdigit(*prog)) { 
        while(!isdelim(*prog)) 
            *temp++ = *prog++;
        *temp = '\0';
        return(token_type = NUMBER);
    }
    if(isalph(*prog)) { 
        while(!isdelim(*prog)) 
            *temp++ = *prog++;
        token_type=TEMP;
    }
    *temp = '\0';
    if(token_type==TEMP) {
        tok = look_up(token);
        if(tok) 
            token_type = KEYWORD; 
        else 
            token_type = IDENTIFIER;
    }
    return token_type;
}
/* Считывание лексемы из входного потока. */
int get_token(void) {
	register char *temp;
	token_type = 0;
	tok = 0;
	temp = token;
	*temp = '\0';
	/* пропуск пробелов, символов табуляции и пустой строки */
	while(iswhite(*prog) && *prog) {
		++prog;
	}
	while(*prog == '\r' || *prog == '\n') {
		++prog;
		// COMPILER_SPECIFIC
		while(iswhite(*prog) && *prog) {
			++prog;
		}
	}
	/* конец файла */
	if(*prog == '\0') {
		*token = '\0';
		tok = FINISHED;
		return (token_type = DELIMITER);
	}
	/* блок кода */
	if(strchr("{}", *prog)) { /* ограничение блока */
		*temp = *prog;
		temp++;
		*temp = '\0';
		prog++;
		return (token_type = BLOCK);
	}
	/* массив */
	if(strchr("[]", *prog)) {
		*temp = *prog;
		temp++;
		*temp = '\0';
		prog++;
		return (token_type = ARRAY);
	}
	/* комментарий */
	if(*prog == '/') {
		if(*(prog+1) == '*') {
			prog += 2;
			do {
				while(*prog != '*') {
					prog++;
				}
				prog++;
			} while(*prog != '/');
			prog++;
		}
	}
	/* оператор сравнения */
	if(strchr("!<>=", *prog)) {
		switch(*prog) {
		case '=':
			if(*(prog+1) == '=') { // ==
				prog++;
				prog++;
				*temp = EQ;
				temp++;
				*temp = EQ;
				temp++;
				*temp = '\0';
			}
			break;
		case '!':
			if(*(prog+1) == '=') { // !=
				prog++;
				prog++;
				*temp = NE;
				temp++;
				*temp = NE;
				temp++;
				*temp = '\0';
			}
			break;
		case '<':
			if(*(prog+1) == '=') { // <=
				prog++;
				prog++;
				*temp = LE;
				temp++;
				*temp = LE;
			} else {               // <
				prog++;
				*temp = LT;
			}
			temp++;
			*temp = '\0';
			break;
		case '>':
			if(*(prog+1) == '=') { // >=
				prog++;
				prog++;
				*temp = GE;
				temp++;
				*temp = GE;
			} else {              // >
				prog++;
				*temp = GT;
			}
			temp++;
			*temp = '\0';
			break;
		}
		if(*token) {
			return(token_type = DELIMITER);
		}
	}
	/* разделитель */
	if(strchr("+-*^/%=;(),'", *prog)) {
		*temp = *prog;
		prog++; /* продвижение на следующую позицию */
		temp++;
		*temp = '\0';
		return (token_type = DELIMITER);
	}
	/* строка в кавычках */
	if(*prog=='"') {
		prog++;
		while(*prog != '"' && *prog != '\r') {
			*temp++ = *prog++;
		}
		if(*prog == '\r') {
			sntx_err(SYNTAX);
		}
		prog++;
		*temp = '\0';
		return (token_type = STRING);
	}
	/* число */
	if(isdigit(*prog)) {
		while(!isdelim(*prog)) {
			*temp++ = *prog++;
		}
		*temp = '\0';
		return (token_type = NUMBER);
	}
	/* переменная или оператор */
	if(isalpha(*prog)) {
		while(!isdelim(*prog)) {
			*temp++ = *prog++;
		}
		token_type = TEMP;
	}
	*temp = '\0';
	/* ключевое слово или имя */
	if(token_type==TEMP) {
		tok = look_up(token); /* преобразовать во внутренее представление */
		if(tok) {
			token_type = KEYWORD; /* это зарезервированное слово */
		} else {
			token_type = IDENTIFIER;
		}
	}
	return token_type;
}