Для общего развития пример на родном паскале без использования MACRO-11 и особых хитростей конкретного варианта паскаля
В примере вызываются фортрановские подпрограммы которые уже есть в системной библиотеке (SYSLIB.OBJ). В принципе если почитать руководство по системной библиотеке, можно обнаружить, что там найдутся подпрограммы почти на все случаи жизни...

Маленькое замечание по использованию фортрановских подпрограмм...
Первое правило фортрана гласит: GOD is REAL, unless declared INTEGER... Шутка. Хотя для фортрана справедливо
А если серьезно, нужно просто учитывать некоторые особенности фортрана. Даже те кто долго работал с фортраном часто не знают одной простой вещи:
Код:
        CALL	SUBR(1)
Что делает данная строчка? Неправильный ответ - вызывает подпрограмму SUBR и передает ей в качестве аргумента 1. Правильный ответ - вызывает подпрограмму SUBR и первый раз передает ей в качестве аргумента 1. Все аргументы в фортране - ссылки. Отсюда правило - все аргументы таких подпрограмм, подключаемых из паскаля должны быть объявлены как VAR (и подпрограмма соответственно может их менять).

Пример программы которая ждет нажатия клавиши и печатает ее код (коды для клавиш которые генерят несколько кодов в RT-11 [стрелки, <CR>, цифровые клавиши в режиме alternative keypad])... Описание подпрограмм не привожу - оно есть в описании системной библиотеки, в том числе на русском (для рафоса). Программа завершается нажатием CTRL/C. В силу особенностей RT-11, программы не могут получить код CTRL/O в однотерминальном мониторе, а в данном случае также коды CTRL/S и CTRL/Q - для этого требуется установить кое-какие битики в настройках терминала, но это уже другая история

Код:
PROGRAM TEST(INPUT, OUTPUT);

VAR     CTRLC   : INTEGER;
        KEY     : CHAR;

FUNCTION IPEEK(VAR ADDR: INTEGER): INTEGER; FORTRAN;
PROCEDURE POKE(VAR ADDR, VALUE: INTEGER); FORTRAN;
FUNCTION ITTINR: INTEGER; FORTRAN;
PROCEDURE SCCA(VAR FLAG: INTEGER); FORTRAN;

FUNCTION TTYIN: CHAR;
VAR     I       : INTEGER;
BEGIN
        REPEAT
                I:= ITTINR;
        UNTIL I >= 0;
        TTYIN:= CHR(I)
END;

PROCEDURE INIT;
VAR     ADDR    : INTEGER;
        VALUE   : INTEGER;
BEGIN
        ADDR:= 36;
        VALUE:= IPEEK(ADDR) OR 4160;
        POKE(ADDR, VALUE);
        SCCA(CTRLC);
END;

BEGIN
        INIT;
        WRITELN('TYPE A KEY...');
        REPEAT
                KEY:= TTYIN;
                WRITELN('CODE: ', ORD(KEY))
        UNTIL ORD(KEY) = 3
END.
Код:
.PASCAL TEST TEST

Errors detected:  0    
Free memory: 15192  words


.MAC TEST

.LIN TEST/LINK:SY:PASCAL

.RU TEST
TYPE A KEY...
CODE:      68
CODE:      74
CODE:      76
CODE:      75
CODE:       3

.