| #include "sam.h" |
| |
| List file = { 'p' }; |
| ushort tag; |
| |
| File * |
| newfile(void) |
| { |
| File *f; |
| |
| f = fileopen(); |
| inslist(&file, 0, 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, 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; |
| } |