Пример #1
0
void RectifyStereo::loadParam(const char* fileName){
	ifstream if_in(fileName);
	if (!if_in.is_open())
	{
		isLoadCameraParam = false;
		cout << "load parameters error!" << endl;
		return;
	}

	if_in >> calibData;
	if_in.close();
	calRemapMatrix();
	isLoadCameraParam = true;
	for (int i = 0; i < 2; i++)
		for (int j = 0; j < 2; j++)
		{
			if (remapM[i][j].empty())
				isLoadCameraParam = false;
		}
}
Пример #2
0
int judge(int push[],int pop[],int n){
	int i=0,j=0,k=-1,foot=0,result=1;
	int stack[n];
	for(i;i<n;i++){
		int top = pop[i];
		printf("top is %d\n",top);
		int flag=0;
		flag=if_in(top,stack,n);
		if(flag==0){
			for(j;j<n;j++){
				if(j<foot)
					continue;//从第foot个数开始把push元素添加到stack中,直到遇到top
				stack[++k]=push[j];
				if (push[j]==top){
					printf("%dand%dand%d\n",j,top,k);
					foot=j+1;
					stack[k]=0;//同时把top出栈
					k--;
					break;
				}
			}
			printf("k=%d\n",k);
		}
		else{
			if(k<0)
				break;
			printf("top:%d;stack[k]:%d;k:%d\n",top,stack[k],k);
			if(top!=stack[k]){//如果stack的出栈元素跟pop不一样返回0
				result=0;
				break;
			}
			else{
				stack[k]=0;
				k--;
			}
		}
			
	}
	return result;
}
Пример #3
0
/*==================================================*
 *                      MAIN                         *
 *==================================================*/
int main() {
    char cmd[LINESIZE];
    int i=0,j=0,b=0;
    int cmdfull;
    int n_quote;
    while(strcmp(cmd, "exit")!=0) {
        printf("ve482sh $> ");
        gets(cmd);
        if(strcmp(cmd,"exit")==0) {
            return 0;
        }
        cmdfull=0;
        //if(cmd[0]!='\n'&&cmd[0]!=0){
        //	size=strlen(cmd);
        //}
        n_quote=0;
//------------------------------------------------------
//         Deal with quotes
//------------------------------------------------------
        if(cmd[0]!=0 && cmd[0]!='\n') {
            for(i=0; i<strlen(cmd); i++) {
                if(cmd[i]==34&&n_quote!=1) { //34: double-quote
                    n_quote=2;
                    memmove(&cmd[i],&cmd[i+1],strlen(cmd)-i);
                    for(j=i; j<strlen(cmd); j++) {
                        if(cmd[j]==34) {
                            cmdfull=1;
                        }
                    }
                    while(cmdfull==0) {
                        printf("> ");
                        char cmdadd[300];
                        gets(cmdadd);
                        for(b=0; b<300; b++) {
                            if(cmdadd[b]==34) {
                                cmdfull=1;
                                break;
                            }
                        }
                        b=0;
                        char *r=malloc(strlen(cmd)+strlen(cmdadd)+1);
                        strcpy(r,cmd);
                        strcat(r,"\n");
                        strcat(r,cmdadd);
                        strcpy(cmd,r);
                        free(r);
                    }
                }
                else if(cmd[i]==39&&n_quote!=2) { //39: single quote
                    n_quote=1;
                    memmove(&cmd[i],&cmd[i+1],strlen(cmd)-i);
                    for(j=i; j<strlen(cmd); j++) {
                        if(cmd[j]==39) {
                            cmdfull=1;
                        }
                    }
                    while(cmdfull==0) {
                        printf("> ");
                        char cmdadd[300];
                        gets(cmdadd);
                        for(b=0; b<300; b++) {
                            if(cmdadd[b]==39) {
                                cmdfull=1;
                                break;
                            }
                        }
                        b=0;
                        char *r=malloc(strlen(cmd)+strlen(cmdadd)+1);
                        strcpy(r,cmd);
                        strcat(r,"\n");
                        strcat(r,cmdadd);
                        strcpy(cmd,r);
                        free(r);
                    }
                }
                else if(cmd[i]=='>') {
                    for(j=i+1; i<strlen(cmd); j++) {
                        if(!cmd[j]) {
                            break;
                        }
                        if(cmd[j]>30&&cmd[j]<126) {
                            cmdfull=1;
                            break;
                        }
                    }
                    while(cmdfull==0) {
                        printf("> ");
                        char cmdadd[300];
                        gets(cmdadd);
                        for(b=0; b<300; b++) {
                            if(cmdadd[b]!=32&&cmdadd[b]!=0&&cmdadd[j]!='\n') {
                                cmdfull=1;
                                break;
                            }
                            if(cmdadd[b]==0) {
                                break;
                            }
                        }
                        b=0;
                        char *r=malloc(strlen(cmd)+strlen(cmdadd)+1);
                        strcpy(r,cmd);
                        strcat(r,cmdadd);
                        strcpy(cmd,r);
                        free(r);
                    }
                }
            }


            char *cm[2];
            //char *substring="|";
            char *arglis[100];
            char *arglis2[100];
            cm[0]=strtok(cmd,"|");
            cm[1]=strtok(NULL,"|");
            //printf("%s,%s\n",cm[0],cm[1] );
            i=0;
            j=0;
            if(cm[1]!=NULL) {
                while(cm[1][i]!='\0'&& cm[1][i]!='\n') {
                    if(cm[1][i]==' ') {
                        j++;
                    }
                    else if(cm[1][i]=='x') {
                        if(cm[1][i+1]=='a' && cm[1][i+2]=='r' && cm[1][i+3]=='g' && cm[1][i+4]=='s') {
                            j=j+5;
                        }
                        if(cm[1][i+5]==' ') {
                            j++;
                        }
                    }
                    else {
                        break;
                    }
                    i++;
                }
                i=0;
                while(cm[1][i]) {
                    cm[1][i]=cm[1][i+j];
                    i++;
                }
            }
            i=0;

            /*================If there is no pipe.================*/
            if(!cm[1]) {
                //printf("ifin, ifout %s: %i,%i\n",cm[0],if_in(cm[0]),if_out(cm[0]));
                if(if_out(cm[0])!=0) {
                    Output2file(cm[0],if_out(cm[0]));
                }
                else if(if_in(cm[0])==1) {
                    Input2file(cm[0]);
                }
                else {
                    arglis[0]=strtok(cm[0], " ");
                    while(arglis[i]!=NULL) {
                        i++;
                        arglis[i]=strtok(NULL," ");
                        if(arglis[i]!=NULL) {
                            if(arglis[i][0]=='"') {
                                int ll=strlen(arglis[i]);
                                if(arglis[i][ll-1]=='"') {
                                    memmove(&arglis[i][0],&arglis[i][1],ll);
                                    arglis[i][ll-2]=0;
                                }
                            }
                        }
                    }
                    //--------------------------------------------
                    //         Deal with cd
                    //---------------------------------------------
                    int result;
                    if(strcmp(arglis[0],"cd")==0) {
                        if(arglis[1]) {
                            if(strcmp(arglis[1],"~")==0) {
                                result=chdir(getenv("HOME"));
                            }
                            else {
                                result=chdir(arglis[1]);
                            }
                        }
                        else {
                            result=chdir(getenv("HOME"));
                        }
                        if(result<0) {
                            printf("cd: No such file or directory\n");
                        }
                    }
                    else {
                        pid_t pid;
                        pid = fork();
                        if(pid<0) {
                            fprintf(stderr, "Fork failed.\n");
                            return 1;
                        }
                        else if(pid==0) {
                            execvp(arglis[0],arglis);
                            perror("Error");
                        }
                        else {
                            wait(NULL);
                        }
                    }
                }
            }
            /*================If there is a pipe.================*/
            else {
                char *program1=cm[0], *program2=cm[1];
                char *file1, *file2;
                char *write_type2="w+";
                int type1=0,type2=0;
                file1=NULL;
                file2=NULL;
                if(if_out(cm[1])!=0) {
                    type2=1;
                    if(if_out(cm[1])==1) {
                        program2=strtok(cm[1],">");
                        file2=strtok(NULL,">");
                    }
                    else {
                        program2=strtok(cm[1],">>");
                        file2=strtok(NULL,">>");
                        write_type2="a+";
                    }
                }
                if(if_in(cm[0])==1) {
                    type1=2;
                    program1=strtok(cm[0],"<");
                    file1=strtok(NULL,"<");
                    if(file1==NULL) {
                        printf("bash: syntax error near unexpected token 'newline'\n");
                    }
                }

                if(file2!=NULL) {
                    file2=rmspace(file2);
                }
                if(file1!=NULL) {
                    file1=rmspace(file1);
                }
                //printf("program1, program2: %s,%s \n",program1,program2);
                //printf("file1, file2:%s,%s\n",file1,file2 );
                //printf("type1,2 %i,%i\n", type1,type2);
                i=0;
                arglis[0]=strtok(program1, " ");
                while(arglis[i]!=NULL) {
                    i++;
                    arglis[i]=strtok(NULL," ");
                    if(arglis[i]!=NULL) {
                        if(arglis[i][0]=='"') {
                            int ll=strlen(arglis[i]);
                            if(arglis[i][ll-1]=='"') {
                                memmove(&arglis[i][0],&arglis[i][1],ll);
                                arglis[i][ll-2]=0;
                            }
                        }
                    }
                }
                i=0;
                arglis2[0]=strtok(program2," ");
                while(arglis2[i]!=NULL) {
                    i++;
                    arglis2[i]=strtok(NULL," ");
                    if(arglis2[i]!=NULL) {
                        if(arglis2[i][0]=='"') {
                            int ll=strlen(arglis2[i]);
                            if(arglis2[i][ll-1]=='"') {
                                memmove(&arglis2[i][0],&arglis2[i][1],ll);
                                arglis2[i][ll-2]=0;
                            }
                        }
                    }
                }
                int fd[2];
                if(pipe(fd)<0) {
                    perror("Pipe failed.");
                    return 1;
                }
                pid_t pid1, pid2;
                pid1=fork();
                if(pid1<0) {
                    fprintf(stderr, "Fork failed.\n");
                }
                else if(pid1==0) {
                    if(type1==2) { //command 1 has "<"
                        FILE *in1=fopen(file1,"r");
                        dup2(fileno(in1),STDIN_FILENO);
                        fclose(in1);
                        //close(STDOUT);
                        dup2(fd[1],STDOUT);
                        close(fd[0]);
                        if((execvp(arglis[0],arglis))<0) {
                            perror("Error");
                            return 1;
                        }
                    }
                    else {
                        //close(STDOUT);
                        dup2(fd[1],STDOUT);
                        close(fd[0]);
                        if((execvp(arglis[0],arglis))<0) {
                            perror("Error");
                            return 1;
                        }
                    }
                }
                else {
                    wait(NULL);
                }
                close(fd[1]);
                pid2=fork();
                if(pid2<0) {
                    fprintf(stderr, "Fork failed.\n");
                    return 1;
                }
                else if(pid2==0) {
                    if(type2==1) { //command has 2 ">" or ">>"
                        //printf("write_type2:%s,file2:%s\n",write_type2,file2);
                        FILE *out2=fopen(file2,write_type2);
                        dup2(fileno(out2),STDOUT_FILENO);
                        fclose(out2);
                        //close(STDIN);
                        dup2(fd[0],STDIN);
                        close(fd[1]);
                        if((execvp(arglis2[0],arglis2))<0) {
                            perror("Error");
                            return 1;
                        }
                    }
                    else {
                        //close(STDIN);
                        dup2(fd[0],STDIN);
                        close(fd[1]);
                        if((execvp(arglis2[0],arglis2))<0) {
                            perror("Error");
                            return 1;
                        }
                    }
                }
                else {
                    wait(NULL);
                }
                close(fd[0]);
                close(fd[1]);
                waitpid(pid1,NULL,0);
                waitpid(pid2,NULL,0);
            }
        }
    }

    return 0;
}