int show_prompt_line(t_env *env) { char *str; char *home; int i; int s; init_prompt(&str, &i, &s, env); if (str) { if_str(&str, &s, env, &home); i = 1; if (str != NULL && home != NULL) { if ((i = home_pwd_cmp(str, home))) write(1, "~", 1); s += my_strlen(str) - i; } if (str) my_putstr(&str[i]); s += 2; my_putstr("$ "); return (s); } my_putstr(DEF_PROMPT); return (3); }
char *deal_with_termcap(t_shell *sh) { t_prompt *prompt; int ret; char buff[4]; char *str; prompt = init_prompt(); stock_prompt(prompt, 0); prompt_print(prompt, 1); str = NULL; while ((ret = read(0, buff, BUFF_SIZE) != -1)) { prompt_shell(sh, prompt, buff); if (buff[0] == 4 && !prompt->cmd[0]) exit_eof(sh, prompt); if (buff[0] == 10) { str = input_return(sh, prompt); break ; } ft_bzero(buff, 4); } free_prompt(&prompt); return (str); }
int main(){ init_prompt(); //print_prompt(); //change_prompt("I Hate C"); //print_out("Prompt Changed to I Hate C"); //print_prompt(); //going to recycle this guy command_t * mycmd = alloc_command_t(); //print_prompt(); //char buffer[40]; //scanf("%s",buffer); parse("Hello world",mycmd); /*int i; for(i = 0; i < MAX_ARG_COUNT; i++) { if(mycmd -> argv[i] == NULL) break; print_out(mycmd -> argv[i]); }*/ /* char buffer[40]; fputs("Enter Command: ", stdout); fflush(stdout); fgets(buffer, sizeof buffer, stdin); printf("input text = %s\n", buffer); printf("About to enter parse()"); command_t c = parse(buffer); printf("%s",c.path); */ return 0; }
void init_shell(char **initial_env) { memset(&sh, 0, sizeof(sh)); sh.environment = duplicate_env(initial_env); sh.args = make_sh_args_tab(); init_pwd(); open_config_file(); init_prompt(); init_signals(1); }
char *my_prompt(t_glob *glob) { t_prompt *prompt; char *str; str = NULL; prompt = init_prompt(glob); if (prompt) str = prompt_dispatcher(glob, prompt); if (str && my_strlen(str) > 0) add_hist_beg(glob, str); else { xfree(str); return (NULL); } free_prompt(prompt); return (str); }
//Builds a cool prompt void print_prompt() { //Initializes the prompt (does nothing if not necessary) init_prompt(); //if we didn't get user or cwd, just use boring prompt if(cur_username[0] == '\0' || cur_wd_long[0] == '\0') { printf("%s[SHELL] $%s ", ex_color, end_col); } else //if homdir or hostname failed this is still fine { //Print username printf("%s%s", ex_color, cur_username); //Print @hostname if we have it if(cur_hostname[0] != '\0'); printf("@%s", cur_hostname); //Change colors printf("%s%s ", end_col, di_color); //Print the $ and end color change //cur_wd_short == cur_wd_long if no cur_homedir printf("%s $%s ", cur_wd_short, end_col); } }
int main(int argc, char ** argv) { //get command line arguments int c; char * pvalue = NULL; while ((c = getopt (argc, argv, "p:")) != -1) { switch (c) { case 'p': pvalue = optarg; break; default: break; } } int cmd_type; //enumerated value to determine how command is executed int cmd_block; //whether to wait for child to exit or not int cmd_argc; //number of args counted while parsing char cmd_args[MAX_ARG_COUNT][MAX_INPUT_LENGTH]; //store command line args char * exec_args[MAX_ARG_COUNT]; //cmd_args incompatible type with execvp //ready prompt char prompt[MAX_INPUT_LENGTH]; init_prompt(prompt); if(pvalue != NULL) { change_prompt(prompt,pvalue); } char buffer[MAX_INPUT_LENGTH]; //general purpose string buffer int done = 0; do { //clear command buffer int i; for(i = 0; i < MAX_ARG_COUNT; i++) { cmd_args[i][0] = '\0'; } //get input print_prompt(prompt); scanf("\n"); scanf("%[^\n]",buffer); //store history strcpy(history[history_count],buffer); history_count++; //tokenize char * ptr = strtok(buffer," "); i = 0; while(ptr != NULL) { strcpy(cmd_args[i],ptr); ptr = strtok(NULL," "); i++; } argc = i; //set state based on input cmd_type = get_type(cmd_args[0]); cmd_block = get_block(cmd_args[argc-1]); int j; for(j = 0; j < argc; j++) { exec_args[j] = cmd_args[j]; } if(!cmd_block) //want to eliminate & { exec_args[argc-1] = NULL; } else //keep all args parsed { exec_args[argc] = NULL; } //check if any children exited int status, child_pid; child_pid = waitpid(-1,&status,WNOHANG); if(child_pid > 0) { get_status_str(status,child_pid,buffer); print_out(buffer); } //execute done = execute(cmd_type,cmd_block,cmd_args[0],exec_args); }while(!done); return 0; }