Программный блок (модуль) на языке FORTRAN должен быть ПОДПРОГРАММОЙ.
Примечание - Программный блок на языке FORTRAN может не быть ПРОГРАММОЙ или ФУНКЦИЕЙ.
Имя программного блока на языке FORTRAN должно иметь следующую структуру:
'F' + encoded_supplier_code + '_' + <program_name>
Код encoded_supplier_code должен быть кодом поставщика данных библиотеки согласно ИСО 13584-26, к которому применяют функцию кодирования. Функция encode предназначена для замены каждого знака, который не разрешается использовать в именах на языке программирования FORTRAN, соответствующим кодированным знаком, который соответствует знаку "_" последовательности, за которым следует код знака (состоящий из двух знаков), в соответствии с набором знаков ИСО/МЭК 10646-1. Кроме того, если кодируемым знаком является знак "_", то и в результате будет "_".
encoded_supplier_code кодируется с использованием следующей функции кодирования:
*) | ||
FUNCTION encode(s: STRING): STRING; | ||
LOCAL | ||
strtmp: STRING; | ||
lower_cases: LIST OF STRING := | ||
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' ,'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; | ||
upper_cases: LIST OF STRING := | ||
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' ,'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; | ||
numerals: LIST OF STRING := | ||
['0','1', '2', '3', '4', '5', '6', '7', '8', '9']; | ||
underscore: STRING :='_'; | ||
allowed_characters: LIST OF STRING := | ||
lower_cases + upper_cases + numerals + underscore; | ||
result: STRING:="; | ||
END_LOCAL; | ||
REPEAT i := 1 TO LENGTH(s); | ||
IF NOT(s[i] IN allowed_characters) | ||
THEN | ||
strtmp := FORMAT(icode(s[i]), '02I'); | ||
result := result + '_' + strtmp; | ||
ELSE | ||
IF (s[i] = '_') | ||
THEN | ||
result := result + '_' + s[i]; | ||
ELSE | ||
result:= result + s[i]; | ||
END_IF; | ||
END_IF; | ||
END_REPEAT; | ||
RETURN (result); | ||
END_FUNCTION; | ||
(* |
Примечание 1 - Функция icode возвращает код знаков по ИСО 10646-1, интерпретируемых как целое значение.
Примечание 2 - Функция icode не установлена в языке EXPRESS, поскольку ограничения языка EXPRESS могут привести к тому, что такая функция будет очень длинной.
Пример - Код поставщика 0112/1///13584_101_1 кодируют как 0112_2F1_2F_2F_2F13584_101_1. '2F', и он соответствует коду знака 'f' в наборе знаков по ИСО/МЭК 10646-1.
Поставщик данных библиотеки должен использовать код поставщика, который отображается строкой длины, равной 31 знаку или меньше.
Примечание 3 - Размер строки, получающийся в результате кодирования, может превышать допустимую длину строки для определения имени FORTRAN SUBROUTINE (ограниченную 31 знаком). Поэтому поставщик данных библиотеки должен зарегистрировать новый код поставщика для создания имени FORTRAN SUBROUTINE.