home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD1.iso / Editor / DVD!FX17.LHA / FrexxEd / fpl / FMC.FPL < prev    next >
Encoding:
Text File  |  1995-04-02  |  5.1 KB  |  188 lines

  1. // $VER: FMC.FPL 2.0 (02.04.95) © Jesper Skov
  2.  
  3. int maxMajor=10;                            // We have a maximum number of modes!
  4. int majorCount=0;
  5.  
  6. int maxMinor=20;
  7. int minorCount=0;
  8.  
  9. string export majorName[maxMajor];            // Major modes have Name,
  10. string export majorExt[maxMajor];            // Extension match and
  11. string export majorExe[maxMajor];            // Execute string
  12.  
  13. string minorName[maxMinor];                    // Minor modes have no ext&exe
  14.  
  15. string export majorCycleString = "None";    // For use by PromptInfo
  16. string export majorConfigString = "";
  17.  
  18. string export minorCheckString = "";
  19.  
  20.  
  21. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» AddMode() ««
  22. int export AddMode(int type,
  23.                    string name,
  24.                    string extensions,
  25.                    string execute)
  26. {
  27.   // Check that name exists?
  28.  
  29.   if (type){                                // type_major==1
  30.     if (majorCount>=maxMajor)
  31.       return 1;                                // Bummer! No more space!
  32.  
  33.     majorName[majorCount]=name;
  34.  
  35.     // Check that ext&exe exist?
  36.     majorExt[majorCount]=extensions;
  37.     majorExe[majorCount]=execute;
  38.  
  39.     majorCycleString += joinstr("|", name); // Add mode to MajorMode cycle gadget
  40.  
  41.     majorConfigString += joinstr(",\"", extensions, "\""); // Add extensions string
  42.     majorConfigString += joinstr(",\"", execute, "\""); // Add execute string
  43.  
  44.  
  45.     // The code below will cause trouble if a MajorMode is added, while the
  46.     // user is working (i.e. (s)he has several different buffers open).
  47.     // Since the AddMode() should only be for use in the startup, I don't
  48.     // see this as a problem, though!
  49.     DeleteInfo("MajorMode");
  50.     ConstructInfo("MajorMode", "","", "LCH", majorCycleString, 0,0,0);
  51.  
  52.     majorCount++;
  53.  
  54.     return 0;
  55.  
  56.   } else {                                    // type_minor==0
  57.     if (minorCount>=maxMinor)
  58.       return 1;                                // No more space
  59.  
  60.     minorName[minorCount]=name;
  61.     // Maybe warn if ext&exe are not empty?
  62.  
  63.     minorCheckString += joinstr(",\"", name, "\""); // Add mode to minor mode list
  64.  
  65.     minorCount++;
  66.     return 0;
  67.   }
  68. }
  69.  
  70. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» CheckForce_hookPast ««
  71. int export CheckForced_hookPast()
  72. {
  73.   string req = GetLine();
  74.   int i = strstr(req,"-*-");                // Extract forced mode if any
  75.   if(majorCount) {
  76.     if (i>=0) {
  77.       int a = strstr(req,"-*-",i+3);
  78.       if(a>0) {
  79.         req = substr(req, i+3, a-i-3);        // rec holds major mode request
  80.       } else {
  81.         i=-1;
  82.       }
  83.     }
  84.     if(i>=0) {
  85.       for(i=0; i<majorCount; i++) {            // Check all major modes for match
  86.         if(0 == stricmp(majorName[i], req)) {
  87.           enableMajorMode(i);
  88.           return 0;
  89.         }
  90.       }
  91.     }
  92.   }
  93.   return 0;
  94. }
  95.  
  96. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» CheckExt_hook() ««
  97. export int CheckExt_hook(string path, string name)
  98. {
  99.   int i = strstr(name, ".");
  100.   if (i > 0) {
  101.     string ext;
  102.     int a;
  103.     while (0<=(a=strstr(name, ".", i+1)))    // Check for 2+ pts
  104.       i=a;
  105.     a=0;
  106.     ext = joinstr("*",substr(name, i + 1, -1),"*");    
  107.     while(a<majorCount) {
  108.       if(0 <= stristr(ReadInfo(majorExt[a]), ext)) {
  109.         enableMajorMode(a);
  110.         return 0;
  111.       }
  112.       a++;
  113.     }
  114.     // no extension matched
  115.  
  116.   }
  117. }
  118.  
  119. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» enableMajorMode() ««
  120. void enableMajorMode(int number)
  121. {
  122.   SetInfo(-1, "MajorMode", number+1);
  123.   SetInfo(-1, majorName[number], 1);        // Set major mode's flag
  124.   if(strlen(ReadInfo(majorExe[number])))    // and execute it's exeString
  125.     ExecuteString(ReadInfo(majorExe[number]));
  126.   ReturnStatus(joinstr("Enabled major mode \"",majorName[number], "\"!"));
  127. }
  128.  
  129.  
  130.  
  131. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» MajorModeControl() ««
  132. void export MajorModeControl()
  133. {
  134.   int i = ReadInfo("MajorMode");
  135.  
  136.   PromptInfo(-1, "Buffer Major Mode", -1,-1, "MajorMode");
  137.  
  138.   if (ReadInfo("MajorMode")!=i){            // New major mode selected
  139.     for(i=0;i<minorCount;i++)                // Disable all minor modes
  140.       SetInfo(-1,minorName[i],0);
  141.  
  142.     enableMajorMode(ReadInfo("MajorMode")-1); // Enable new major mode
  143.   }
  144.  
  145. }
  146.  
  147.  
  148. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» MinorModeControl() ««
  149. void export MinorModeControl()
  150. {
  151.   ExecuteString(joinstr("PromptInfo(-1, \"Buffer Minor Modes\", -1,-1",
  152.                         minorCheckString, ");"));
  153. }
  154.  
  155. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» MajorModeSettings() ««
  156. void export MajorModeSettings()
  157. {
  158.   ExecuteString(joinstr("PromptInfo(-1, \"Major Mode Preferences\", -1,-1",
  159.                         majorConfigString, ");"));
  160. }
  161.  
  162.  
  163. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» ME() ««
  164. void export ME(string mode_name)
  165. {
  166.   SetInfo(-1,mode_name,1);
  167. }
  168.  
  169. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Info construction ««
  170. ConstructInfo("MajorMode", "","", "LCH", majorCycleString, 0,0,0);
  171.  
  172.  
  173. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Menu ««
  174.  
  175. MenuAdd("i", "Buffer Mode", "", "", 6,7);    // Add new Customizing menu
  176.  
  177. MenuAdd("s", "Major...", "MajorModeControl();", "", 6,7,-1);
  178. MenuAdd("s", "Minor...", "MinorModeControl();", "", 6,7,-1);
  179.  
  180. MenuAdd("s", "Major Modes...", "MajorModeSettings();", "", 6,6,-1); // Add to Program
  181.  
  182. MenuBuild();
  183.  
  184.  
  185. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Hooking ««
  186. HookPast("Load","CheckForced_hookPast();"); // Checks forced requests
  187. Hook("GetFile", "CheckExt_hook");        // Checks extensions
  188.