xref: /plan9-contrib/sys/src/cmd/sam/multi.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1 #include "sam.h"
2 
3 List	file;
4 ushort	tag;
5 
6 File *
7 newfile(void)
8 {
9 	File *f;
10 
11 	inslist(&file, 0, (long)(f = Fopen()));
12 	f->tag = tag++;
13 	if(downloaded)
14 		outTs(Hnewname, f->tag);
15 	/* already sorted; file name is "" */
16 	return f;
17 }
18 
19 int
20 whichmenu(File *f)
21 {
22 	int i;
23 
24 	for(i=0; i<file.nused; i++)
25 		if(file.filepptr[i]==f)
26 			return i;
27 	return -1;
28 }
29 
30 void
31 delfile(File *f)
32 {
33 	int w = whichmenu(f);
34 
35 	if(w < 0)	/* e.g. x/./D */
36 		return;
37 	if(downloaded)
38 		outTs(Hdelname, f->tag);
39 	dellist(&file, w);
40 	Fclose(f);
41 }
42 
43 void
44 sortname(File *f)
45 {
46 	int i, cmp, w;
47 	int dupwarned;
48 
49 	w = whichmenu(f);
50 	dupwarned = FALSE;
51 	dellist(&file, w);
52 	if(f == cmd)
53 		i = 0;
54 	else for(i=0; i<file.nused; i++){
55 		cmp = Strcmp(&f->name, &file.filepptr[i]->name);
56 		if(cmp==0 && !dupwarned){
57 			dupwarned = TRUE;
58 			warn_S(Wdupname, &f->name);
59 		}else if(cmp<0 && (i>0 || cmd==0))
60 			break;
61 	}
62 	inslist(&file, i, (long)f);
63 	if(downloaded)
64 		outTsS(Hmovname, f->tag, &f->name);
65 }
66 
67 void
68 state(File *f, int cleandirty)
69 {
70 	if(f == cmd)
71 		return;
72 	if(downloaded && whichmenu(f)>=0){	/* else flist or menu */
73 		if(f->state==Dirty && cleandirty!=Dirty)
74 			outTs(Hclean, f->tag);
75 		else if(f->state!=Dirty && cleandirty==Dirty)
76 			outTs(Hdirty, f->tag);
77 	}
78 	f->state = cleandirty;
79 }
80 
81 File *
82 lookfile(String *s)
83 {
84 	int i;
85 
86 	for(i=0; i<file.nused; i++)
87 		if(Strcmp(&file.filepptr[i]->name, s) == 0)
88 			return file.filepptr[i];
89 	return 0;
90 }
91