Blob
1 #include "sam.h"3 List file = { 'p' };4 ushort tag;6 File *7 newfile(void)8 {9 File *f;11 f = fileopen();12 inslist(&file, 0, f);13 f->tag = tag++;14 if(downloaded)15 outTs(Hnewname, f->tag);16 /* already sorted; file name is "" */17 return f;18 }20 int21 whichmenu(File *f)22 {23 int i;25 for(i=0; i<file.nused; i++)26 if(file.filepptr[i]==f)27 return i;28 return -1;29 }31 void32 delfile(File *f)33 {34 int w = whichmenu(f);36 if(w < 0) /* e.g. x/./D */37 return;38 if(downloaded)39 outTs(Hdelname, f->tag);40 dellist(&file, w);41 fileclose(f);42 }44 void45 fullname(String *name)46 {47 if(name->n > 0 && name->s[0]!='/' && name->s[0]!=0)48 Strinsert(name, &curwd, (Posn)0);49 }51 void52 fixname(String *name)53 {54 String *t;55 char *s;57 fullname(name);58 s = Strtoc(name);59 if(strlen(s) > 0)60 s = cleanname(s);61 t = tmpcstr(s);62 Strduplstr(name, t);63 free(s);64 freetmpstr(t);66 if(Strispre(&curwd, name))67 Strdelete(name, 0, curwd.n);68 }70 void71 sortname(File *f)72 {73 int i, cmp, w;74 int dupwarned;76 w = whichmenu(f);77 dupwarned = FALSE;78 dellist(&file, w);79 if(f == cmd)80 i = 0;81 else{82 for(i=0; i<file.nused; i++){83 cmp = Strcmp(&f->name, &file.filepptr[i]->name);84 if(cmp==0 && !dupwarned){85 dupwarned = TRUE;86 warn_S(Wdupname, &f->name);87 }else if(cmp<0 && (i>0 || cmd==0))88 break;89 }90 }91 inslist(&file, i, f);92 if(downloaded)93 outTsS(Hmovname, f->tag, &f->name);94 }96 void97 state(File *f, int cleandirty)98 {99 if(f == cmd)100 return;101 f->unread = FALSE;102 if(downloaded && whichmenu(f)>=0){ /* else flist or menu */103 if(f->mod && cleandirty!=Dirty)104 outTs(Hclean, f->tag);105 else if(!f->mod && cleandirty==Dirty)106 outTs(Hdirty, f->tag);107 }108 if(cleandirty == Clean)109 f->mod = FALSE;110 else111 f->mod = TRUE;112 }114 File *115 lookfile(String *s)116 {117 int i;119 for(i=0; i<file.nused; i++)120 if(Strcmp(&file.filepptr[i]->name, s) == 0)121 return file.filepptr[i];122 return 0;123 }