13e12c5d1SDavid du Colombier #include "sam.h"
23e12c5d1SDavid du Colombier
3*73e742d7SDavid du Colombier List file = { 'p' };
43e12c5d1SDavid du Colombier ushort tag;
53e12c5d1SDavid du Colombier
63e12c5d1SDavid du Colombier File *
newfile(void)73e12c5d1SDavid du Colombier newfile(void)
83e12c5d1SDavid du Colombier {
93e12c5d1SDavid du Colombier File *f;
103e12c5d1SDavid du Colombier
117dd7cddfSDavid du Colombier f = fileopen();
12*73e742d7SDavid du Colombier inslist(&file, 0, f);
133e12c5d1SDavid du Colombier f->tag = tag++;
143e12c5d1SDavid du Colombier if(downloaded)
153e12c5d1SDavid du Colombier outTs(Hnewname, f->tag);
163e12c5d1SDavid du Colombier /* already sorted; file name is "" */
173e12c5d1SDavid du Colombier return f;
183e12c5d1SDavid du Colombier }
193e12c5d1SDavid du Colombier
203e12c5d1SDavid du Colombier int
whichmenu(File * f)213e12c5d1SDavid du Colombier whichmenu(File *f)
223e12c5d1SDavid du Colombier {
233e12c5d1SDavid du Colombier int i;
243e12c5d1SDavid du Colombier
253e12c5d1SDavid du Colombier for(i=0; i<file.nused; i++)
263e12c5d1SDavid du Colombier if(file.filepptr[i]==f)
273e12c5d1SDavid du Colombier return i;
283e12c5d1SDavid du Colombier return -1;
293e12c5d1SDavid du Colombier }
303e12c5d1SDavid du Colombier
313e12c5d1SDavid du Colombier void
delfile(File * f)323e12c5d1SDavid du Colombier delfile(File *f)
333e12c5d1SDavid du Colombier {
343e12c5d1SDavid du Colombier int w = whichmenu(f);
353e12c5d1SDavid du Colombier
363e12c5d1SDavid du Colombier if(w < 0) /* e.g. x/./D */
373e12c5d1SDavid du Colombier return;
383e12c5d1SDavid du Colombier if(downloaded)
393e12c5d1SDavid du Colombier outTs(Hdelname, f->tag);
403e12c5d1SDavid du Colombier dellist(&file, w);
417dd7cddfSDavid du Colombier fileclose(f);
427dd7cddfSDavid du Colombier }
437dd7cddfSDavid du Colombier
447dd7cddfSDavid du Colombier void
fullname(String * name)457dd7cddfSDavid du Colombier fullname(String *name)
467dd7cddfSDavid du Colombier {
477dd7cddfSDavid du Colombier if(name->n > 0 && name->s[0]!='/' && name->s[0]!=0)
487dd7cddfSDavid du Colombier Strinsert(name, &curwd, (Posn)0);
497dd7cddfSDavid du Colombier }
507dd7cddfSDavid du Colombier
517dd7cddfSDavid du Colombier void
fixname(String * name)527dd7cddfSDavid du Colombier fixname(String *name)
537dd7cddfSDavid du Colombier {
547dd7cddfSDavid du Colombier String *t;
557dd7cddfSDavid du Colombier char *s;
567dd7cddfSDavid du Colombier
577dd7cddfSDavid du Colombier fullname(name);
587dd7cddfSDavid du Colombier s = Strtoc(name);
597dd7cddfSDavid du Colombier if(strlen(s) > 0)
607dd7cddfSDavid du Colombier s = cleanname(s);
617dd7cddfSDavid du Colombier t = tmpcstr(s);
627dd7cddfSDavid du Colombier Strduplstr(name, t);
637dd7cddfSDavid du Colombier free(s);
647dd7cddfSDavid du Colombier freetmpstr(t);
657dd7cddfSDavid du Colombier
667dd7cddfSDavid du Colombier if(Strispre(&curwd, name))
677dd7cddfSDavid du Colombier Strdelete(name, 0, curwd.n);
683e12c5d1SDavid du Colombier }
693e12c5d1SDavid du Colombier
703e12c5d1SDavid du Colombier void
sortname(File * f)713e12c5d1SDavid du Colombier sortname(File *f)
723e12c5d1SDavid du Colombier {
733e12c5d1SDavid du Colombier int i, cmp, w;
743e12c5d1SDavid du Colombier int dupwarned;
753e12c5d1SDavid du Colombier
763e12c5d1SDavid du Colombier w = whichmenu(f);
773e12c5d1SDavid du Colombier dupwarned = FALSE;
783e12c5d1SDavid du Colombier dellist(&file, w);
793e12c5d1SDavid du Colombier if(f == cmd)
803e12c5d1SDavid du Colombier i = 0;
817dd7cddfSDavid du Colombier else{
827dd7cddfSDavid du Colombier for(i=0; i<file.nused; i++){
833e12c5d1SDavid du Colombier cmp = Strcmp(&f->name, &file.filepptr[i]->name);
843e12c5d1SDavid du Colombier if(cmp==0 && !dupwarned){
853e12c5d1SDavid du Colombier dupwarned = TRUE;
863e12c5d1SDavid du Colombier warn_S(Wdupname, &f->name);
873e12c5d1SDavid du Colombier }else if(cmp<0 && (i>0 || cmd==0))
883e12c5d1SDavid du Colombier break;
893e12c5d1SDavid du Colombier }
907dd7cddfSDavid du Colombier }
91*73e742d7SDavid du Colombier inslist(&file, i, f);
923e12c5d1SDavid du Colombier if(downloaded)
933e12c5d1SDavid du Colombier outTsS(Hmovname, f->tag, &f->name);
943e12c5d1SDavid du Colombier }
953e12c5d1SDavid du Colombier
963e12c5d1SDavid du Colombier void
state(File * f,int cleandirty)973e12c5d1SDavid du Colombier state(File *f, int cleandirty)
983e12c5d1SDavid du Colombier {
993e12c5d1SDavid du Colombier if(f == cmd)
1003e12c5d1SDavid du Colombier return;
1017dd7cddfSDavid du Colombier f->unread = FALSE;
1023e12c5d1SDavid du Colombier if(downloaded && whichmenu(f)>=0){ /* else flist or menu */
1037dd7cddfSDavid du Colombier if(f->mod && cleandirty!=Dirty)
1043e12c5d1SDavid du Colombier outTs(Hclean, f->tag);
1057dd7cddfSDavid du Colombier else if(!f->mod && cleandirty==Dirty)
1063e12c5d1SDavid du Colombier outTs(Hdirty, f->tag);
1073e12c5d1SDavid du Colombier }
1087dd7cddfSDavid du Colombier if(cleandirty == Clean)
1097dd7cddfSDavid du Colombier f->mod = FALSE;
1107dd7cddfSDavid du Colombier else
1117dd7cddfSDavid du Colombier f->mod = TRUE;
1123e12c5d1SDavid du Colombier }
1133e12c5d1SDavid du Colombier
1143e12c5d1SDavid du Colombier File *
lookfile(String * s)1153e12c5d1SDavid du Colombier lookfile(String *s)
1163e12c5d1SDavid du Colombier {
1173e12c5d1SDavid du Colombier int i;
1183e12c5d1SDavid du Colombier
1193e12c5d1SDavid du Colombier for(i=0; i<file.nused; i++)
1203e12c5d1SDavid du Colombier if(Strcmp(&file.filepptr[i]->name, s) == 0)
1213e12c5d1SDavid du Colombier return file.filepptr[i];
1223e12c5d1SDavid du Colombier return 0;
1233e12c5d1SDavid du Colombier }
124