Blame


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