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