home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD1.iso / Editor / FREDV19A.LHA / FrexxEd / fpl / FMC.FPL < prev    next >
Encoding:
Text File  |  1995-08-18  |  5.2 KB  |  190 lines

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