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 int
21 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 void
32 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 void
45 fullname(String *name)
46 {
47 if(name->n > 0 && name->s[0]!='/' && name->s[0]!=0)
48 Strinsert(name, &curwd, (Posn)0);
49 }
51 void
52 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 void
71 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 void
97 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);
108 if(cleandirty == Clean)
109 f->mod = FALSE;
110 else
111 f->mod = TRUE;
114 File *
115 lookfile(String *s)
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;