multi.c 1.8 KB

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