
# define FILE_LIMIT 40

      /* Encode type */
# define ENC_FLAT    1
# define ENC_BINARY  2
/*? # define ENC_ASCII ENC_FLAT */
# define ENC_LATIN_1 ENC_FLAT
# define ENC_UTF_8 10
# define ENC_NONFLAT ENC_UTF_8
# define REACH       20
# define ENC_UNKNOWN 21

/* The following non-standard numeration of the std-streems was forced by the requirment
   that all early written Refal-5 programs should work in the new utf-8 version.
   See the definition of rf_put function (file func1.c) for an example, 
   which is fixed still by the first developers of the Refal-5 system.   
*/ 
# define R_STDERR 0
# define R_STDIN  1
# define R_STDOUT 2
# define R_STDAUX 3
# define R_STDPRN 4

# define PrefixId 1
# define VarId PrefixId
# define IndexId  2
# define PrefixPreWord  3
# define IndexPreWord   4
# define IS_PREFIX(flag) ((flag & PrefixId) == 1)
# define IS_INDEX(flag)  ((flag == IndexId) || (flag == IndexPreWord))


/*  Byte Order Mark, U+FEFF */
/* Согласно спецификации Юникода, маркер может стоять только в самом начале файла или потока. 
  Если же символ U+FEFF встречается в середине потока данных, он должен интерпретироваться 
  как «нулевой ширины неразрывный пробел» (по существу, неотображаемый и ничего не меняющий символ). Однако, большинство браузеров, 
  кроме Opera версий 12 и ниже, воспринимают BOM в середине документа как символ, занимающий целую строку, после чего генерируют перенос строки.
  
  Если формат представления символов Юникода точно известен принимающей программе заранее, то по стандарту Юникода маркер ставить не следует. 
  И если формат объявлен другим способом (например, MIME в поле заголовка Content-Type), маркер по стандарту ставить не полагается. 
  
  По тому, как закодирован маркер последовательности байтов, стоящий в начале файла или потока, можно легко определить кодировку и порядок байтов, 
  использованные для кодирования символов Юникода во всём данном файле или потоке.   
  UTF-8: 	      0xEFBBBF 	239187191
  UTF-16 (BE): 	0xFEFF   	254255
  UTF-16 (LE): 	0xFFFE 	   255254
  UTF-32 (BE): 	0x0000FEFF 	00254255
  UTF-32 (LE): 	0xFFFE0000 	25525400
  
  Есть случаи, когда использования маркера последовательности байтов следует избегать, несмотря на удобства его применения. 
  Например, использование маркера в веб-шаблонах вызывает появление пустых строк в документе, поэтому рекомендуется удалять 
  маркер из веб-скриптов и CSS-файлов. А наличие маркера в начале файлов PHP (до тега <?php) приводит к тому, 
  что пустая строка отправляется клиенту ещё до начала выполнения кода, что вызывает сбой в тех случаях, 
  когда клиенту должен сразу отправиться HTTP-заголовок (при переадресации запроса, например). 
  Также может неверно отрабатывать json_decode, если json записан в файл с BOM. 
  
  https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%80%D0%BA%D0%B5%D1%80_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%B0%D0%B9%D1%82%D0%BE%D0%B2 
*/
# define R_BOM 

		/* FILE   I/O.		*/

# ifdef DEFINE_EXTERNALS

	FILE *file_table[FILE_LIMIT];
   int fmode_table[FILE_LIMIT][2];
   int std_streem_fmodes[3];

# else

	extern FILE *file_table[FILE_LIMIT];
	extern int fmode_table[FILE_LIMIT][2];
    /* 0 = stderr; 1 = stdin; 2 = stdout; 3 = stdaux, std port; 4 = stdprn, std printer */
   extern int std_streem_fmodes[5];

# endif
 
 