home *** CD-ROM | disk | FTP | other *** search
- // $Id: FMC.FPL 1.9 1995/08/18 23:33:50 jskov Exp $
- // $VER: FMC.FPL 2.1 (18.08.95) © Jesper Skov
-
- int maxMajor=10; // We have a maximum number of modes!
- int majorCount=0;
-
- int maxMinor=20;
- int minorCount=0;
-
- string export majorName[maxMajor]; // Major modes have Name,
- string export majorExt[maxMajor]; // Extension match and
- string export majorExe[maxMajor]; // Execute string
-
- string minorName[maxMinor]; // Minor modes have no ext&exe
-
- string export majorCycleString = "None"; // For use by PromptInfo
- string export majorConfigString = "";
-
- string export minorCheckString = "";
-
-
- //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» AddMode() ««
- int export AddMode(int type,
- string name,
- string extensions,
- string execute)
- {
- // Check that name exists?
-
- if (type){ // type_major==1
- if (majorCount>=maxMajor)
- return 1; // Bummer! No more space!
-
- majorName[majorCount]=name;
-
- // Check that ext&exe exist?
- majorExt[majorCount]=extensions;
- majorExe[majorCount]=execute;
-
- majorCycleString += joinstr("|", name); // Add mode to MajorMode cycle gadget
-
- majorConfigString += joinstr(",\"", extensions, "\""); // Add extensions string
- majorConfigString += joinstr(",\"", execute, "\""); // Add execute string
-
-
- // The code below will cause trouble if a MajorMode is added, while the
- // user is working (i.e. (s)he has several different buffers open).
- // Since the AddMode() should only be for use in the startup, I don't
- // see this as a problem, though!
- DeleteInfo("MajorMode");
- ConstructInfo("MajorMode", "","", "LCH", majorCycleString, 0,0,0);
-
- majorCount++;
-
- return 0;
-
- } else { // type_minor==0
- if (minorCount>=maxMinor)
- return 1; // No more space
-
- minorName[minorCount]=name;
- // Maybe warn if ext&exe are not empty?
-
- minorCheckString += joinstr(",\"", name, "\""); // Add mode to minor mode list
-
- minorCount++;
- return 0;
- }
- }
-
- //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» CheckForce_hookPast ««
- int export CheckForced_hookPast()
- {
- string req = GetLine();
- int i = strstr(req,"-*-"); // Extract forced mode if any
- if(majorCount) {
- if (i>=0) {
- int a = strstr(req,"-*-",i+3);
- if(a>0) {
- req = substr(req, i+3, a-i-3); // rec holds major mode request
- } else {
- i=-1;
- }
- }
- if(i>=0) {
- for(i=0; i<majorCount; i++) { // Check all major modes for match
- if(0 == stricmp(majorName[i], req)) {
- enableMajorMode(i);
- return 0;
- }
- }
- }
- }
- return 0;
- }
-
- //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» CheckExt_hook() ««
- export int CheckExt_hook(string path, string name)
- {
- int i = strstr(name, ".");
- if (i > 0) {
- string ext;
- int a;
- while (0<=(a=strstr(name, ".", i+1))) // Check for 2+ pts
- i=a;
- a=0;
- ext = joinstr("*",substr(name, i + 1, -1),"*");
- while(a<majorCount) {
- if(0 <= stristr(ReadInfo(majorExt[a]), ext)) {
- enableMajorMode(a);
- return 0;
- }
- a++;
- }
- // no extension matched
-
- }
- }
-
- //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» enableMajorMode() ««
- void enableMajorMode(int number)
- {
- if (number>=0){
- SetInfo(-1, "MajorMode", number+1);
- SetInfo(-1, majorName[number], 1); // Set major mode's flag
- if(strlen(ReadInfo(majorExe[number]))) // and execute it's exeString
- ExecuteString(ReadInfo(majorExe[number]));
- ReturnStatus(joinstr("Enabled major mode \"",majorName[number], "\"!"));
- }
- }
-
- //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» MajorModeControl() ««
- void export MajorModeControl()
- {
- int i = ReadInfo("MajorMode");
-
- PromptInfo(-1, "Buffer Major Mode", -1,-1, "MajorMode");
-
- if (ReadInfo("MajorMode")!=i){ // New major mode selected
- if (i) // Disable "old" major mode
- SetInfo(-1,majorName[i-1],0);
-
- for(i=0;i<minorCount;i++) // Disable all minor modes
- SetInfo(-1,minorName[i],0);
-
- enableMajorMode(ReadInfo("MajorMode")-1); // Enable new major mode
- }
- }
-
- //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» MinorModeControl() ««
- void export MinorModeControl()
- {
- ExecuteString(joinstr("PromptInfo(-1, \"Buffer Minor Modes\", -1,-1",
- minorCheckString, ");"));
- }
-
- //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» MajorModeSettings() ««
- void export MajorModeSettings()
- {
- ExecuteString(joinstr("PromptInfo(-1, \"Major Mode Preferences\", -1,-1",
- majorConfigString, ");"));
- }
-
-
- //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» ME() ««
- void export ME(string mode_name)
- {
- SetInfo(-1,mode_name,1);
- }
-
- //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Info construction ««
- ConstructInfo("MajorMode", "","", "LCH", majorCycleString, 0,0,0);
-
-
- //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Menu ««
-
- MenuAdd("i", "Buffer Mode", "", "", 6,7); // Add new Customizing menu
-
- MenuAdd("s", "Major...", "MajorModeControl();", "", 6,7,-1);
- MenuAdd("s", "Minor...", "MinorModeControl();", "", 6,7,-1);
-
- MenuAdd("s", "Major Modes...", "MajorModeSettings();", "", 6,6,-1); // Add to Program
-
- MenuBuild();
-
-
- //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Hooking ««
- HookPast("Load","CheckForced_hookPast();"); // Checks forced requests
- Hook("GetFile", "CheckExt_hook"); // Checks extensions
-