Ejemplo n.º 1
0
/*
Description: search the  device in dongleselect.conf
input:

output:true(the input device is found in devicesTable)
       false(not found)
*/
bool UsbSelect::findDevice(char *vid, char *pid, struct usbdevice *tmpdevice)
{
    FILE *file;
    char buf[256];
    char vendorid[5], productid[5], libpath[30];
    bool found = false, ret = false;

    if (NULL == vid || NULL == pid || NULL == tmpdevice) {
        SLOGE(" param is wrong");
    }
    SLOGE("idvendor:%s, idproduct:%s\n", vid, pid);

    file = fopen ("/system/etc/dongleselect.conf", "r");

    if (file) {
        while (fgets(buf, 256, file)) {
            memset (vendorid, 0, sizeof(vendorid));
            ret = searchParam(buf, "VID", vendorid, sizeof(vendorid));
            if (!ret) {
                SLOGE("It's not VID");
                continue;
            }

            if (strtoul(vid, NULL, 16) != strtoul(vendorid, NULL, 16)) {
                continue;
            }

            memset (productid, 0, sizeof(productid));
            ret = searchParam(buf, "PID", productid, sizeof(productid));
            if (!ret) {
                SLOGE("It's not PID");
                continue;
            }

            if (strtoul(pid, NULL, 16) != strtoul(productid, NULL, 16) && strcmp(productid, "0")) {
                continue;
            }

            memset (libpath, 0, sizeof(libpath));
            ret = searchParam(buf, "LIBPATH", libpath, sizeof(libpath));
            if (!ret) {
                SLOGE("It's not LIBPATH");
                continue;
            }

            found = true;
            memset(tmpdevice->VID, 0, sizeof(tmpdevice->VID));
            memset(tmpdevice->PID, 0, sizeof(tmpdevice->PID));
            memset(tmpdevice->libpath, 0, sizeof(tmpdevice->libpath));
            strcpy(tmpdevice->VID, vendorid);
            strcpy(tmpdevice->PID, productid);
            strcpy(tmpdevice->libpath, libpath);

            break;
        }
    }

    return found;
}
Ejemplo n.º 2
0
int params() {
	int enumerator;
	if ((error = testToken(T_ID)) != E_OK) return error; // "ID_parametru" - mozna specifikovat
	strInit(&IDstr);
    strCopystring(&IDstr, &T.s);
	gettoken();
	if ((error = testToken(T_COLON)) != E_OK) return error; // ":"
	gettoken();
	if ((error = testToken(T_DATATYPE)) != E_OK) return error; 
	if(!(strCmpConstStr(&(T.s), "boolean")))	    enumerator = O_BOOL;		
	else if(!(strCmpConstStr(&(T.s), "integer")))	enumerator = O_INT;	
	else if(!(strCmpConstStr(&(T.s), "real")))      enumerator = O_REAL;
	else if(!(strCmpConstStr(&(T.s), "string")))    enumerator = O_STRING;
	else return E_SEMA;		
	gettoken();
	pc++;
	if(strCmpstring(&IDstr, &ActFun) == 0) return E_SEMA;          //ADDED
	if (searchParam(paramlist, &IDstr) != NULL) return E_SEMA;    
	if ((error = insertParam(paramlist,&IDstr, enumerator)) != E_OK) return error;;
	//strFree(&IDstr);
	if (testToken(T_SEMICOLON) == E_OK) {  
	  gettoken();
	  if((error = params()) != E_OK) return error; //vice parametru - rekurze
	}
	return E_OK;
}
Ejemplo n.º 3
0
int writefun() {
	if((error = testToken(T_ID)) == E_OK){
	  if(afun == 1){
	    if(strCmpstring(&(T.s), &ActFun) != 0){                             //added: Jmeno fkce, params, global, local
		  if (searchParam(paramlist, &(T.s)) == NULL){
		    if((TempVar = BSTSearch (TempTreeL, T.s)) == NULL){
			  if((TempVar = BSTSearch(TempTree, T.s)) == NULL) return E_SEMA;
		    }
		  }
	    }
	  }
	  else{
        if((TempVar = BSTSearch(TempTree, T.s)) == NULL) return E_SEMA;
	  }
		gettoken();
      if((error = testToken(T_RB)) == E_OK){
		  return E_OK;
	  }
	  else if((error = testToken(T_COMMA)) == E_OK){
		  gettoken();
		  if((error = writefun()) != E_OK) return error;
	  }
	  else
		  return error;
	}
	else if((error = testToken(T_STRING)) == E_OK){
		gettoken();
      if((error = testToken(T_RB)) == E_OK){
		  return E_OK;
	  }
	  else if((error = testToken(T_COMMA)) == E_OK){
		  gettoken();
		  if((error = testToken(T_STRING)) == E_OK) return error;
		  if((error = writefun()) != E_OK) return error;
	  }
	  else
		  return error;
	}
	else
		return error;

	return E_OK;
}
Ejemplo n.º 4
0
int localDecl() { //za decl nebrat token
		if ((error = testToken(T_ID)) != E_OK) return error; //ID
		if (searchParam(paramlist, &(T.s)) != NULL){ //zde budu muset nejspis dat jen jmenu aktualni fkce
			return E_SEMA;
		}
		if(strCmpstring(&(T.s), &ActFun) == 0){     //ADDED
			return E_SEMA;
		}
		if(BSTSearch (TempTreeL, T.s) != NULL){
			return E_SEMA;
		}
		strInit(&IDstr);
		strCopystring(&IDstr, &T.s);
		gettoken();
		if ((error = testToken(T_COLON)) != E_OK) return error;
		    gettoken();
		if ((error = testToken(T_DATATYPE)) != E_OK) return error; // typ
		
/******************************************INSERT***************************************************************/

		if(!(strCmpConstStr(&(T.s), "boolean"))) TempVar->type = O_BOOL;		
		if(!(strCmpConstStr(&(T.s), "integer"))) TempVar->type = O_INT;		
		if(!(strCmpConstStr(&(T.s), "real")))    TempVar->type = O_REAL;
		if(!(strCmpConstStr(&(T.s), "string"))){
			TempVar->type = O_STRING;
			strInit(&TempVar->value.sval);
		}
		BSTInsert (&TempTreeL, IDstr, TempVar); 

/******************************************INSERT***************************************************************/
		gettoken();
		if ((error = testToken(T_SEMICOLON)) != E_OK) return error; // ";"
		gettoken();
		//strFree(&IDstr);
		if (testToken(T_ID) == E_OK)
		    if ((error = localDecl()) != E_OK) return error;	//dalsia promena?
		return E_OK;
}
Ejemplo n.º 5
0
int commands() 
{
	tVariable *glob = NULL;
	tVariable *loc = NULL;
	tParamList *par = NULL;
	string *name = allocate(sizeof(string));
    tTapeItem *previous = Tape->last;
    tVariable *op1 = allocate(sizeof(tVariable));
    tVariable *op2 = allocate(sizeof(tVariable));
    tVariable *result = allocate(sizeof(tVariable));
    if((name == NULL) || (op1 == NULL) || (op2 == NULL) || (result == NULL)) return E_INTERN;
	switch(T.type){
		case T_ID:
	/*		if(afun == 1){                                 //ADDED pokud neni ve funkci kontroluje jen global
			  if ((par = searchParam(paramlist, &(T.s))) == NULL){            //added
			    if(strCmpstring(&(T.s), &ActFun) != 0){ //zde budu muset nejspis dat jen jmenu aktualni fkce
			      if((loc = BSTSearch (TempTreeL, T.s)) == NULL){
			        if((glob = BSTSearch (TempTree, T.s)) == NULL){
						return E_SEMA;
					}*/
//					else{
//                      Tape->last->op1 = glob;
//					}    
//			      }
//				  else{
//                    Tape->last->op1 = loc;
//				  }
//			    }
//				else{
//                  Tape->last->op1 = item;
//				}
//}
//			  else{
//                Tape->last->op1 = par;
//			  }
//			}
/*			else {*/
				if((glob = BSTSearch (TempTree, T.s)) == NULL){
					return E_SEMA;
				}
			/*else{
				  Tape->last->op1 = glob;				}*/
			//}


			gettoken();
			if ((error = testToken(T_ASSIGN)) != E_OK) return error;
			if ((error = ExpParser()) != E_OK) return error;
			//if(InsertEmptyItemTape() != E_OK) return E_INTERN;
			Tape->last->instruction = ASSIGN;
	       
			if (loc != NULL){
				Tape->last->op1 = loc;
			}
			else if (glob != NULL){
				Tape->last->op1 = glob;
			}
			 if (res != Tape->last->op1->type ) return E_SEMB;
			Tape->last->op2 = Tape->last->previous->result;
			Tape->last->result = Tape->last->op1;
			printf("parser adresa resultu v parseri %d \n",Tape->last->op2);
			if ((strCmpConstStr (&(T.s), "end"))) {
				if ((error = testToken(T_SEMICOLON)) != E_OK) return error;
				semi = 1;
			}
			break;

		case T_KEYWORD:
			if(!strCmpConstStr (&(T.s), "begin")){
				gettoken();
				if((error = blockList()) != E_OK) return error;
                gettoken();
			    if ((strCmpConstStr (&(T.s), "end"))) {
				    if ((error = testToken(T_SEMICOLON)) != E_OK) return error;
				    semi = 1;
			    }
				break;
			}
			if(!strCmpConstStr (&(T.s), "if")){ //if
				tTapeItem *label;
                tTapeItem *endelse;
                tVariable *op11 = allocate(sizeof(tVariable));
                tVariable *op22 = allocate(sizeof(tVariable));
                if((op11 == NULL) || (op22 == NULL)) return E_INTERN;
				
				if((error = ExpParser()) != E_OK) return error; //vyraz
				if (res != 3 ) return E_SEMB;
				//ZAKONECNTOVANO if(InsertEmptyItemTape() != E_OK) return E_INTERN; 
				Tape->last->instruction = JUMPN;
                Tape->last->op1 = Tape->last->previous->result;
                Tape->last->op2 = op2;
                Tape->last->op2->type = TAPE_POINTER;
                label = Tape->last;
				
				if((error = testToken(T_KEYWORD)) == E_OK){
					if(strCmpConstStr (&(T.s),"then")) return E_SYN; //then
				}
				else
					return error;
				gettoken();
				if((error = testToken(T_KEYWORD)) == E_OK){
					if(strCmpConstStr (&(T.s),"begin")) return E_SYN; //begin slozeneho prikazu
				}
				else
					return error;
				gettoken();
				if((error = blockList()) != E_OK) return error; //blocklist
				gettoken();
				
				Tape->last->instruction = JUMPN;
                Tape->last->op1 = op11;
                Tape->last->op1->type = O_BOOL;
                Tape->last->op1->value.bval = false;
                if(strInit(&(Tape->last->op1->name)) != STR_SUCCESS) return E_INTERN;
                Tape->last->op2 = op22;
                Tape->last->op2->type = TAPE_POINTER;
                endelse = Tape->last;
				
				if((error = testToken(T_KEYWORD)) != E_OK) return error;
				if(strCmpConstStr (&(T.s),"else")) return E_SYN;
				
				if(InsertEmptyItemTape() != E_OK) return E_INTERN;
                Tape->last->instruction = NOP;
                label->op2->value.tape_pointer = Tape->last;
				
				gettoken();
				if((error = testToken(T_KEYWORD)) != E_OK) return error;
				if(strCmpConstStr (&(T.s),"begin")) return E_SYN; //begin slozeneho prikazu
				gettoken();
				if((error = blockList()) != E_OK) return error; //blocklist
				gettoken();
			    if ((strCmpConstStr (&(T.s), "end"))) {
				    if (testToken(T_SEMICOLON) != E_OK) return E_SYN;
				    semi = 1;
			    }
				
				if(InsertEmptyItemTape() != E_OK) return E_INTERN;
                Tape->last->instruction = NOP;
                endelse->op2->value.tape_pointer = Tape->last;


				break;


			}
		    if(!strCmpConstStr (&(T.s), "while")){
				
				 if(InsertEmptyItemTape() != E_OK) return E_INTERN;
                Tape->last->instruction = NOP;
                tTapeItem *label1;
                tTapeItem *label2 = Tape->last;             // ukazatel na pasku kam se bude cyklus vracet
                tVariable *op11 = allocate(sizeof(tVariable));
                tVariable *op22 = allocate(sizeof(tVariable));
                if((op11 == NULL) || (op22 == NULL)) return E_INTERN;
				
                if((error = ExpParser()) != E_OK) return error; //vyraz
                if (res != 3 ) return E_SEMB;
				
				//ZAKONECNTOVANO  if(InsertEmptyItemTape() != E_OK) return E_INTERN;
                Tape->last->instruction = JUMPN;
                Tape->last->op1 = Tape->last->previous->result;
                Tape->last->op2 = op22;
                Tape->last->op2->type = TAPE_POINTER;
                label1 = Tape->last;  
				
				if((error = testToken(T_KEYWORD)) == E_OK){
					if(strCmpConstStr (&(T.s),"do")) return E_SYN; //begin slozeneho prikazu
				}
				else
					return error;
				gettoken();
				if((error = testToken(T_KEYWORD)) == E_OK){
					if(strCmpConstStr (&(T.s),"begin")) return E_SYN; //begin slozeneho prikazu
				}
				else{
					return error;
				}
				gettoken();
				if((error = blockList()) != E_OK) return error; //blocklist
				gettoken();
			    if ((strCmpConstStr (&(T.s), "end"))) {
				    if ((error = testToken(T_SEMICOLON)) != E_OK) return error;
				    semi = 1;
			    }
				
				if(InsertEmptyItemTape() != E_OK) return E_INTERN;
                Tape->last->instruction = JUMP;
                Tape->last->op1 = op1;
                Tape->last->op1->type = O_BOOL;
                Tape->last->op1->value.bval = false;
                if(strInit(&(Tape->last->op1->name)) != STR_SUCCESS) return E_INTERN;
                Tape->last->op2 = op2;
                Tape->last->op2->type = TAPE_POINTER;
                Tape->last->op2->value.tape_pointer = label2;     // nepodmineny skok zpet na zacatek vyhodnocovani podminky cyklu
                if(InsertEmptyItemTape() != E_OK) return E_INTERN;
                Tape->last->instruction = NOP;                    // instrukce, na kterou se skoci v pripade nesplneni podminky whilu
                label1->op2->value.tape_pointer = Tape->last;
				
				break;
			}
			if (!strCmpConstStr (&(T.s), "readln")) {
				
				gettoken();
				if((error = testToken(T_LB)) != E_OK) return error;
				gettoken();
				if((error = testToken(T_ID)) != E_OK) return error;
				if(afun == 1){
				  if(strCmpstring(&(T.s), &ActFun) != 0){                             //added: Jmeno fkce, params, global, local
				    if (searchParam(paramlist, &(T.s)) == NULL){
				      if((TempVar = BSTSearch (TempTreeL, T.s)) == NULL){
					    if((TempVar = BSTSearch(TempTree, T.s)) == NULL) return E_SEMA;
				      }
				    }
				  }
				}
				else{
					if((TempVar = BSTSearch(TempTree, T.s)) == NULL) return E_SEMA;
				}
				if (TempVar->type == O_BOOL){
			        TempVar = NULL;
					return E_SEMB;
				}
				gettoken();
                if((error = testToken(T_RB)) != E_OK){
					TempVar = NULL;
					return error;
				}
				gettoken();
			    if ((strCmpConstStr (&(T.s), "end"))) {
				    if ((error = testToken(T_SEMICOLON)) != E_OK){
						TempVar = NULL;
						return error;
					}
				    semi = 1;
			    }
				TempVar = NULL;
				break;
			}
	        if (!strCmpConstStr (&(T.s), "write")) { //write(ID) !!! integer or real !!!
				gettoken();
				if(InsertEmptyItemTape() != E_OK) return E_INTERN;
                Tape->last->instruction = JUMP;
                Tape->last->op1 = op1;
                Tape->last->op1->type = O_BOOL;
                Tape->last->op1->value.bval = false;
				
				if((error = testToken(T_LB)) != E_OK) return error;
				gettoken();
				if((error = writefun()) != E_OK) return error;
				gettoken();
			    if ((strCmpConstStr (&(T.s), "end"))) {
				    if ((error = testToken(T_SEMICOLON)) != E_OK) return error;
				    semi = 1;
			    }
				break;
			}
		default:
			return E_SYN;
	}
	return E_OK;

}