diff options
Diffstat (limited to 'src/cmd/sam/multi.c')
-rw-r--r-- | src/cmd/sam/multi.c | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/src/cmd/sam/multi.c b/src/cmd/sam/multi.c new file mode 100644 index 00000000..3df0dbee --- /dev/null +++ b/src/cmd/sam/multi.c @@ -0,0 +1,123 @@ +#include "sam.h" + +List file; +ushort tag; + +File * +newfile(void) +{ + File *f; + + f = fileopen(); + inslist(&file, 0, (long)f); + f->tag = tag++; + if(downloaded) + outTs(Hnewname, f->tag); + /* already sorted; file name is "" */ + return f; +} + +int +whichmenu(File *f) +{ + int i; + + for(i=0; i<file.nused; i++) + if(file.filepptr[i]==f) + return i; + return -1; +} + +void +delfile(File *f) +{ + int w = whichmenu(f); + + if(w < 0) /* e.g. x/./D */ + return; + if(downloaded) + outTs(Hdelname, f->tag); + dellist(&file, w); + fileclose(f); +} + +void +fullname(String *name) +{ + if(name->n > 0 && name->s[0]!='/' && name->s[0]!=0) + Strinsert(name, &curwd, (Posn)0); +} + +void +fixname(String *name) +{ + String *t; + char *s; + + fullname(name); + s = Strtoc(name); + if(strlen(s) > 0) + s = cleanname(s); + t = tmpcstr(s); + Strduplstr(name, t); + free(s); + freetmpstr(t); + + if(Strispre(&curwd, name)) + Strdelete(name, 0, curwd.n); +} + +void +sortname(File *f) +{ + int i, cmp, w; + int dupwarned; + + w = whichmenu(f); + dupwarned = FALSE; + dellist(&file, w); + if(f == cmd) + i = 0; + else{ + for(i=0; i<file.nused; i++){ + cmp = Strcmp(&f->name, &file.filepptr[i]->name); + if(cmp==0 && !dupwarned){ + dupwarned = TRUE; + warn_S(Wdupname, &f->name); + }else if(cmp<0 && (i>0 || cmd==0)) + break; + } + } + inslist(&file, i, (long)f); + if(downloaded) + outTsS(Hmovname, f->tag, &f->name); +} + +void +state(File *f, int cleandirty) +{ + if(f == cmd) + return; + f->unread = FALSE; + if(downloaded && whichmenu(f)>=0){ /* else flist or menu */ + if(f->mod && cleandirty!=Dirty) + outTs(Hclean, f->tag); + else if(!f->mod && cleandirty==Dirty) + outTs(Hdirty, f->tag); + } + if(cleandirty == Clean) + f->mod = FALSE; + else + f->mod = TRUE; +} + +File * +lookfile(String *s) +{ + int i; + + for(i=0; i<file.nused; i++) + if(Strcmp(&file.filepptr[i]->name, s) == 0) + return file.filepptr[i]; + return 0; +} |