HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/share/jed/lib/modeinfo.sl
% These routines facilitate the manipulation of mode dependent data.

private variable Mode_Info_Type = struct
{
     fold_info,			       %  folding.sl: beg\rend\r\beg1\r\end1
     dabbrev_word_chars,		       %  word chars for dabbrev mode
     init_mode_menu,
     chglog_get_item,
     use_dfa_syntax,
};

private variable Mode_Info_List = Assoc_Type [Struct_Type];

private define find_mode_info (mode_name)
{
   ifnot (assoc_key_exists (Mode_Info_List, mode_name))
     return NULL;

   return Mode_Info_List[mode_name];
}

define mode_set_mode_info (field_name, field_value)
{
   variable mode_info;
   variable mode_name = get_mode_name ();

   if (_NARGS == 3)
     mode_name = ();

   mode_info = find_mode_info (mode_name);
   if (mode_info == NULL)
     {
	mode_info = @Mode_Info_Type;
	Mode_Info_List [mode_name] = mode_info;
     }

   variable fields = get_struct_field_names (mode_info);
   ifnot (any (fields == field_name))
     {
	variable new_mode_info = @Struct_Type ([fields, field_name]);

	foreach (fields)
	  {
	     variable f = ();
	     set_struct_field (new_mode_info, f, get_struct_field (mode_info, f));
	  }
	mode_info = new_mode_info;
	Mode_Info_List [mode_name] = mode_info;
     }
   set_struct_field (mode_info, field_name, field_value);
}

define mode_get_mode_info (field_name)
{
   variable mode_info;

   if (_NARGS == 1)
     get_mode_name ();

   variable mode_name = ();

   mode_info = find_mode_info (mode_name);
   if (mode_info == NULL)
     return NULL;

   ifnot (any (field_name == get_struct_field_names (mode_info)))
     return NULL;

   return get_struct_field (mode_info, field_name);
}