/* * Routine to fix up the command tail and parse FCBs for a coming * exec. */ void sh_fixtail(WORD iscpm) { register WORD i; WORD len; BYTE *s_tail; BYTE *ptmp; BYTE s_fcbs[32]; /* reuse part of globals*/ s_tail = &D.g_dir[0]; i = 0; if (iscpm) { s_tail[i++] = NULL; ptmp = &D.s_cmd[0]; while ( (*ptmp) && (*ptmp != '.') ) s_tail[i++] = *ptmp++; } LBCOPY(ADDR(&s_tail[i]), ad_stail, 128 - i); if (iscpm) { /* pick up the length */ len = s_tail[i]; /* null over carriage ret*/ s_tail[i + len + 1] = NULL; /* copy down space,tail */ strcpy(&s_tail[i], &s_tail[i+1]); } else { /* zero the fcbs */ memset(s_fcbs, 0, 32); memset(&s_fcbs[1], ' ', 11); memset(&s_fcbs[17], ' ', 11); /* parse the fcbs */ if ( s_tail[0] ) { s_tail[ 1 + s_tail[0] ] = NULL; ptmp = sh_parse(&s_tail[1], &s_fcbs[0]); if (*ptmp != NULL) sh_parse(ptmp, &s_fcbs[16]); s_tail[ 1 + s_tail[0] ] = 0x0d; } } /* copy into true tail */ LBCOPY(ad_stail, s_tail, 128); }
int sh_loop(t_info *info) { int ret; int multi; ret = 1; sh_get_path(info); ft_printf("\033[31m%s\033[39m $> ", info->cursdir); while ((ret = get_next_line(0, &info->line)) > 0) { UNSET(info->sig, BIT_A); UNSET(info->opt, OPT_A); if (!(multi = sh_multi(info))) { sh_parse(info); info->status = sh_exec(info, info->env, &info->args[1]); } sh_get_path(info); ft_printf("\033[31m%s\033[39m $> ", info->cursdir); ft_tabdel(&info->args); free(info->line); } if (ret == -1) return (EXIT_FAILURE); return (EXIT_SUCCESS); }
int shell() { unsigned __int32 *screen; int nn; int row; int col; char ch; screen = (unsigned short int *)0xFFD00000; RequestIOFocus(ACBPtrs[1]); FMTK_StartTask(055,0,sprite_main,0,1); //printf("%10.6E",3.141592653589793238); forever { printf("\r\n$>"); forever { ch = getchar(); if (ch==0x0D) break; putch(ch); } row = dbg_GetCursorRow(); col = dbg_GetCursorCol(); for (nn = 0; nn < 80; nn++) sh_linebuf[nn] = ScreenToAscii(screen[row * 80 + nn] & 0x3ff); printf("%.80s", sh_linebuf); sh_parse(); } }
static void sh_mult_exec(int nbcmd, t_info *info) { while (nbcmd != 0) { sh_parse(info); info->status = sh_exec(info, info->env, &info->args[1]); info->line = ft_strchr(info->line, '\0') + 1; nbcmd--; } }
int main(int argc, const char **argv) { t_sh_env env; int error; t_ckbt *tree; t_cks line; if (sh_init_env(&env, argc, argv) == 0) { g_sh_env = &env; while ((sh_prompt(&env), (line = cks_get_line(0))) != NULL) { tree = ckbt_new(t_sh_command); error = sh_parse(line, tree); if (!error) sh_exec(&env, tree); else printf("42sh: syntax error\n"); cks_free(line); } } return (0); }
int main(int argc, char *argv[]) { Sfio_t *in, *out; Shell_t *shp; Namval_t *np; Shnode_t *t; char *cp; int n, nflag=0, vflag=0, dflag=0; error_info.id = argv[0]; while(n = optget(argv, usage )) switch(n) { case 'D': dflag=1; break; case 'v': vflag=1; break; case 'n': nflag=1; break; case ':': errormsg(SH_DICT,2,"%s",opt_info.arg); break; case '?': errormsg(SH_DICT,ERROR_usage(2),"%s",opt_info.arg); break; } shp = sh_init(argc,argv,(Shinit_f)0); shp->shcomp = 1; argv += opt_info.index; argc -= opt_info.index; if(error_info.errors || argc>2) errormsg(SH_DICT,ERROR_usage(2),"%s",optusage((char*)0)); if(cp= *argv) { argv++; in = sh_pathopen(cp); } else in = sfstdin; if(cp= *argv) { struct stat statb; if(!(out = sfopen((Sfio_t*)0,cp,"w"))) errormsg(SH_DICT,ERROR_system(1),"%s: cannot create",cp); if(fstat(sffileno(out),&statb) >=0) chmod(cp,(statb.st_mode&~S_IFMT)|S_IXUSR|S_IXGRP|S_IXOTH); } else out = sfstdout; if(dflag) { sh_onoption(SH_DICTIONARY); sh_onoption(SH_NOEXEC); } if(nflag) sh_onoption(SH_NOEXEC); if(vflag) sh_onoption(SH_VERBOSE); if(!dflag) sfwrite(out,header,sizeof(header)); shp->inlineno = 1; #if SHOPT_BRACEPAT sh_onoption(SH_BRACEEXPAND); #endif while(1) { stakset((char*)0,0); if(t = (Shnode_t*)sh_parse(shp,in,0)) { if((t->tre.tretyp&(COMMSK|COMSCAN))==0 && t->com.comnamp && strcmp(nv_name((Namval_t*)t->com.comnamp),"alias")==0) sh_exec(t,0); if(!dflag && sh_tdump(out,t) < 0) errormsg(SH_DICT,ERROR_exit(1),"dump failed"); } else if(sfeof(in)) break; if(sferror(in)) errormsg(SH_DICT,ERROR_system(1),"I/O error"); if(t && ((t->tre.tretyp&COMMSK)==TCOM) && (np=t->com.comnamp) && (cp=nv_name(np))) { if(strcmp(cp,"exit")==0) break; /* check for exec of a command */ if(strcmp(cp,"exec")==0) { if(t->com.comtyp&COMSCAN) { if(t->com.comarg->argnxt.ap) break; } else { struct dolnod *ap = (struct dolnod*)t->com.comarg; if(ap->dolnum>1) break; } } } } /* copy any remaining input */ sfmove(in,out,SF_UNBOUND,-1); if(in!=sfstdin) sfclose(in); if(out!=sfstdout) sfclose(out); return(0); }