/* util.c */ /* * Includes */ #include #include #include "tsxutl.h" #include "kbdutl.h" #include "detach.h" #include "suspnd.h" static char *vrstxt[] = { "", " UTIL Version 1.20 20-Aug-1992", "", 0 }; static char *usetxt[] = { "", " UTIL [?] [-cdlmnpqru] [file-spec(s)]", " ? List this Help Text and Exit UTIL", " c change directory", " d delete a file", " l list a directory", " m make a directory", " n delete a directory", " p set protection flag on a file", " q disable query on delete", " r rename a file", " u clr protection flag on afile", " w disable wild cards", "", 0 }; #define ABORT (-1) /* abort value */ static int wflag = 1; /* wild card flag */ static int pflag = 1; /* prompting flag */ char xs[2048]; /* buffer space for mkdir */ main(argc,argv) int argc; char *argv[]; { char answer[100]; int i,j,k,c; FILE *inp,*oup; /* * Initialize kb handler * Set the break character to ^C */ kb_init(0x03); /* * parse arguments */ for(i=1; i ignored\r\n", argv[i]); } } cd("dk:"); exit(0); } char *stpblk(ch) register char *ch; { while(*ch == ' ' || *ch == '\t') ch++; return(ch); } /* * General looping question routine * loops until a response is given * returns 1 on ABORT * else 0 */ static int question(cstr,clen,qstr) char *cstr,*qstr; int clen; { while(!(*(stpblk(cstr)))) { /* * get arg from user */ kb_puts(qstr); if(rtresp(cstr,clen)) return(1); } return(0); } /* * Routine to get a keyboard response * returns 1 on ABORT * else 0 */ int rtresp(st,ln) char *st; int ln; { return((utlgets(st,ln,1)==ABORT) ? 1 : 0); } /* * utlgets * * read a line from the keyboard * returns ABORT if keyboard input aborted * or non-zero on success */ int utlgets(str,lim,echo) register char *str; /* where to put the line */ int lim,echo; /* max chars to read, echo? */ { register char *save, *ret; int c; save = str; /* beginning of line */ *save = '\0'; if(fndbrk) { fndbrk = 0; *str = '\0'; kb_puts("^C\r\n"); return(ABORT); } while(1) { /* * build string from keyboard */ c = kb_gets(str,lim,echo); if(1 <= c && c <= 31) { kb_puts("\r\n"); return(strlen(save)); } /* * check for abort */ if(fndbrk) { *save = '\0'; kb_puts("^C\r\n"); fndbrk = 0; return(ABORT); } suspnd(0); } } /* * Various routines that interface with the * TSXUTL.C utilities. */ static VOID lcd(st) register char *st; { cd(st); if(*errstr) { lsterr(); return(1); } return(0); } static VOID ldelete(st) char *st; { VOID ldelfil(); dispatch(ldelfil,st); } static VOID ldelfil(st) char *st; { delfil(0,st,pflag,wflag); } static VOID lls(st) char *st; { int dspdir(); dispatch(dspdir,st); } static VOID lmkdir(st) char *st; { int mkdir(); dispatch(mkdir,st); } static VOID lprotect(st) char *st; { VOID setfilp(); dispatch(setfilp,st); } static VOID setfilp(st) char *st; { setclrp(st,1,wflag); } static VOID lrename() { VOID newname(); dispatch(newname,&xs[0]); } static VOID newname(st) char *st; { rename(st,&xs[100],pflag,wflag); } static VOID lrmdir(st) char *st; { VOID rmdir(); dispatch(rmdir,st); } static VOID rmdir(st) char *st; { delfil(1,st,pflag,wflag); } static VOID lunprotect(st) char *st; { VOID clrfilp(); dispatch(clrfilp,st); } static VOID clrfilp(st) char *st; { setclrp(st,0,wflag); } VOID lsterr() { if(*errstr) { kb_puts(errstr); kb_puts("\r\n"); errstr[0] = '\0'; } } /* * printout text */ static VOID printtxt(txt) char **txt; { char **dp; for (dp=txt; *dp; dp++) { kb_puts(*dp); kb_puts("\r\n"); } }