files.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. // Files misc mgt routines
  2. // internal filetypes...
  3. enum {
  4. IFT_INVALID=0,
  5. IFT_OTH, IFT_TEXT, IFT_RES, IFT_C, IFT_H, IFT_PRGM, IFT_FUNC, IFT_XFUNC,
  6. IFT_PACK /* (?) */, IFT_EXPR,
  7. };
  8. // remark : currently IFT_XFUNC and IFT_PACK are never generated...
  9. int IFTIcons[]={
  10. [IFT_INVALID] 0,
  11. [IFT_OTH] 3,
  12. [IFT_TEXT] 4,
  13. [IFT_RES] 5,
  14. [IFT_C] 6,
  15. [IFT_H] 7,
  16. [IFT_PRGM] 8,
  17. [IFT_FUNC] 8,
  18. [IFT_XFUNC]8,
  19. [IFT_PACK] 9,
  20. [IFT_EXPR] 10,
  21. };
  22. HANDLE FindFile(char *f) {
  23. HSym hs;
  24. if (!(hs=SymFind(SYMSTR(f))).folder)
  25. return H_NULL;
  26. SYM_ENTRY *se=DerefSym(hs);
  27. return se->handle;
  28. }
  29. int GetIFT(HANDLE h) {
  30. ESI tagptr=HToESI(h);
  31. switch (*tagptr) {
  32. case OTH_TAG:
  33. tagptr--;
  34. while (*--tagptr);
  35. tagptr++;
  36. switch (*tagptr) {
  37. case 'C':
  38. if (!strcmp(tagptr,"C")) return IFT_C;
  39. break;
  40. case 'H':
  41. if (!strcmp(tagptr,"H")) return IFT_H;
  42. break;
  43. case 'R':
  44. if (!strcmp(tagptr,"RES")) return IFT_RES;
  45. break;
  46. }
  47. return IFT_OTH;
  48. case TEXT_TAG:
  49. return IFT_TEXT;
  50. case USERFUNC_TAG:
  51. return IFT_PRGM;
  52. }
  53. return IFT_EXPR;
  54. }
  55. char *GetFTString(HANDLE h) {
  56. #ifndef PEDROM
  57. ESI tagptr=HToESI(h);
  58. if (*tagptr==OTH_TAG) {
  59. tagptr--;
  60. while (*--tagptr);
  61. tagptr++;
  62. return tagptr;
  63. }
  64. return DataTypeNames(*tagptr);
  65. #else
  66. return "???";
  67. #endif
  68. }
  69. XP_C *XpLoadItems(int filter) {
  70. WITEM *wi=wsp->items;
  71. int n=wsp->nitems;
  72. XP_C *xc=malloc(sizeof(XP_C)+(n+2)*sizeof(XP_S));
  73. XP_S *xs;
  74. if (!xc) return xc;
  75. xs=(XP_S *)(xc+1);
  76. xs->i=0; xs++; xc->s=xs;
  77. xc->sh=0; xc->sel=0; xc->msel=n-1;
  78. while (n--) {
  79. if (wi->d.type==WI_FOLD) {
  80. *(long *)&xs->i=0x00010002;
  81. xs->d=wi->d.title;
  82. } else {
  83. int t=GetIFT(FindFile(wi->f.name));
  84. if (filter&(1<<t)) goto skipit;
  85. xs->i=0xC002;
  86. xs->t=IFTIcons[t];
  87. xs->d=wi->f.name;
  88. }
  89. xs++;
  90. skipit:
  91. wi++;
  92. }
  93. xs->i=0;
  94. return xc;
  95. }