Index of /ukdwk_archive/ukncbtlwebcomplekt/Other/form_rsxlib2

[ICO]NameSizeDescription
[PARENTDIR]Parent Directory -  
[   ]rsxlib2.rar 28K 

Обновление библиотеки
(http://zx-pk.ru/threads/10718-soft-dlya-dvk-pdp11.html?p=893359&viewfull=1#post893359)
Подпрограммы табличного парсера (TPARS) перенесены в секцию кода библиотеки. 

Обновление библиотеки RSXLIB. (RSXLIB 2.0)
Добавлены макрокоманды и подпрограмма лексического
разбора строк (ISTAT$, STATE$, TRAN$). Сама библиотека
соответственно разделилась на две библиотеки:
объектную (RSXLIB.OBJ) и макробиблиотеку (RSXLIB.MLB).

Описание библиотеки тут>
http://zx-pk.ru/showthread.php?t=10718&page=16&p=583946&viewfull=1#post583946
http://zx-pk.ru/showthread.php?t=10718&p=583948&viewfull=1#post583948

Описание работы с лексическим разбором
можно найти в
RSX-11M/M+/MicroRSX/IAS I/O 
Operations Reference Manual.

Теперь программу cvt можно собрать прямо в RT-11:
Код:

.MAC SY:RSXLIB/LIB+CVT/OB

.LIN/LINK:SY:RSXLIB CVT

(пояснения от автора)

полезные подпрограммы (для MACRO программ) из RSX в RT-11.
Некоторые из них уже есть в SYSLIB, некоторые есть в ULBLIB из source kit,
но многое отсутствует.

Перенесены следующие подпрограммы:
$CAT5, $CAT5B, $CBDAT, $CBDMG, $CBDSG,
$CBDT4, $CBOMG, $CBOSG, $CBTA, $CBTMG,
$CDDMG, $CDTB, $COTB, $CVTUC, $DAT,
$DAT4, $DATS, $DDIV, $DIV, $DMUL,
$EDMSG, $MUL, $SAVAL, $TIM, .DD2CT, .OD2CT.

Подробное описание подпрограмм можно найти
в документации по системной библиотеке RSX.
Краткое описание доступно в RSXном хелпе
(можно посмотреть на CTAKAHе командой
HELP SYSL subname
(где submane - имя подпрограммы без знака $).

Работа с подпрограммами полностью совместима с RSX
за двумя исключениями:

Подпрограмма $DATS
(перевод даты в ASCII с учетом системного формата)
работает как $DAT4 (перевод в формат DD-MMM-YYYY)
В подпрограмме $EDMSG форматная директива %X 
использует первые 4 слова 5-словного блока имени файла.

Формат блока имени аналогичен используемому в директивах RT-11.
Если поле имени устройства пустое, выводится только имя файла.

Подпрограммы сохранения регистров предназначены для использования
в своих подпрограммах когда нужно сохранить регистры на время их
выполнения и восстановить при возврате.

    Код:

    CALL	$SAVAL		;СОХРАНЯЕТ ВСЕ РЕГИСТРЫ
    JSR	R5,$SAVRG	;СОХРАНЯЕТ РЕГИСТРЫ 3-5
    JSR	R2,$SAVVR	;СОХРАНЯЕТ РЕГИСТРЫ 0-2
    JSR	R5,.SAVR1	;СОХРАНЯЕТ РЕГИСТРЫ 1-5

Данные подпрограммы вызываются в начале своей подпрограммы и сохраняют
определенные регистры (см выше). Содержимое регистров сохраняется таким же
как до сохранения. При возврате из подпрограммы регистры восстанавливается.
Бит C не изменяется при восстановлении.

Подпрограммы арифметики выполняют операции умножения и деления без использования
команд EIS.

    Код:

    ;БЕЗЗНАКОВОЕ УМНОЖЕНИЕ ОДИНАРНОЙ ТОЧНОЧТИ
    ;
    ;ВХОД:					ВЫХОД:
    ;R0 - МНОЖИТЕЛЬ				R0 - ПРОИЗВЕДЕНИЕ (СТАРШАЯ ЧАСТЬ)
    ;R1 - МНОЖИМОЕ				R1 - ПРОИЗВЕДЕНИЕ (МЛАДШАЯ ЧАСТЬ)
    ;
    CALL	$MUL

    ;БЕЗЗНАКОВОЕ ДЕЛЕНИЕ ОДИНАРНОЙ ТОЧНОЧТИ
    ;
    ;ВХОД:					ВЫХОД:
    ;R0 - ДЕЛИМОЕ				R0 - ЧАСТНОЕ
    ;R1 - ДЕЛИТЕЛЬ				R1 - ОСТАТОК
    ;
    CALL	$DIV

    ;УМНОЖЕНИЕ ДВОЙНОЙ ТОЧНОСТИ
    ;
    ;ВХОД:					ВЫХОД:
    ;R0 - МНОЖИТЕЛЬ				R0 - ПРОИЗВЕДЕНИЕ (СТАРШАЯ ЧАСТЬ)
    ;R2 - МНОЖИМОЕ (СТАРШАЯ ЧАСТЬ)		R1 - ПРОИЗВЕДЕНИЕ (МЛАДШАЯ ЧАСТЬ)
    ;R3 - МНОЖИМОЕ (МЛАДШАЯ ЧАСТЬ)
    ;
    CALL	$DMUL

    ;ДЕЛЕНИЕ ДВОЙНОЙ ТОЧНОСТИ
    ;
    ;ВХОД:					ВЫХОД:
    ;R0 - ДЕЛИТЕЛЬ (БЕЗ ЗНАКА)		R0 - ОСТАТОК
    ;R1 - ДЕЛИМОЕ (СТАРШАЯ ЧАСТЬ)		R1 - ЧАСТНОЕ (СТАРШАЯ ЧАСТЬ)
    ;R3 - ДЕЛИМОЕ (МЛАДШАЯ ЧАСТЬ)		R2 - ЧАСТНОЕ (МЛАДШАЯ ЧАСТЬ)
    ;
    CALL	$DDIV

    Подпрограммы преобразования данных позволяют конвертировать данные
    в текстовый формат и обратно.

    Код:

    ;ASCII -> ЧИСЛО ДВОЙНОЙ ТОЧНОСТИ
    ;ДЕСЯТИЧНОЕ (.DD2CT) ИЛИ ВОСЬМЕРИЧНОЕ (.OD2CT) СО ЗНАКОМ.
    ;
    ;ВХОД:					ВЫХОД:
    ;R3 - АДРЕС ДВУХСЛОВНОГО БУФЕРА		CC/CS - УСПЕХ/ОШИБКА
    ;R4 - КОЛИЧЕСТВО СИМВОЛОВ В СТРОКЕ
    ;R5 - АДРЕС ИСХОДНОЙ СТРОКИ
    ;
    CALL	.DD2CT
    CALL	.OD2CT

    ;ASCII -> ЧИСЛО ОДИНАРНОЙ ТОЧНОСТИ
    ;ДЕСЯТИЧНОЕ ($CDTB) ИЛИ ВОСЬМЕРИЧНОЕ ($COTB).
    ;
    ;ВХОД:					ВЫХОД:
    ;R0 - АДРЕС СТРОКИ			R0 - АДРЕС СЛЕДУЮЩЕГО СИМВОЛА
    ;					R1 - ЧИСЛО
    ;					R2 - СИМВОЛ НА КОТОРОМ ПРЕОБРАЗОВАНИЕ
    ;					     ОСТАНОВИЛОСЬ
    ;
    CALL	$CDTB
    CALL	$COTB

    ;ASCII -> RADIX-50
    ;1-3 СИМВОЛА БЕЗ ПРОБЕЛОВ ($CAT5) ИЛИ С ПРОБЕЛАМИ ($CAT5B).
    ;
    ;ВХОД:					ВЫХОД:
    ;R0 - АДРЕС СТРОКИ			R0 - АДРЕС СЛЕДУЮЩЕГО СИМВОЛА
    ;R1 - ПАРАМЕТРЫ ПРЕОБРАЗОВАНИЯ		R1 - ЗНАЧЕНИЕ
    ;	0 - ТОЧКА = КОНЕЦ		R2 - СИМВОЛ НА КОТОРОМ ПРЕОБРАЗОВАНИЕ
    ;	1 - ТОЧКА = СИМВОЛ		     ОСТАНОВИЛОСЬ
    ;					CC/CS - УСПЕХ/ОШИБКА
    ;
    CALL	$CAT5
    CALL	$CAT5B

    ;ЧИСЛО ОДИНАРНОЙ ТОЧНОСТИ -> ASCII
    ;ДЕСЯТИЧНОЕ ОТ 0 ДО 99 ($CBDAT), ДЕСЯТИЧНОЕ ОТ 0 ДО 9999 ($CBDT4),
    ;ДЕСЯТИЧНОЕ ($CBDMG), ДЕСЯТИЧНОЕ СО ЗНАКОМ ($CBDSG), ВОСЬМЕРИЧНОЕ ($CBOMG),
    ;ВОСЬМЕРИЧНОЕ СО ЗНАКОМ ($CBOSG), ВОСЬМЕРИЧНОЕ ОДНОБАЙТОВОЕ ($CBTMG)
    ;
    ;ВХОД:					ВЫХОД:
    ;R0 - АДРЕС БУФЕРА			R0 - АДРЕС СЛЕДУЮЩЕГО СИМВОЛА
    ;R1 - ЧИСЛО
    ;R2 - ПАРАМЕТРЫ ПРЕОБРАЗОВАНИЯ
    ;	0 - ПОДАВЛЯТЬ НАЧАЛЬНЫЕ НУЛИ
    ;	НЕ 0 - НЕ ПОДАВЛЯТЬ
    ;
    CALL	$CBDAT
    CALL	$CBDT4		;XX ЕСЛИ R1 < 1900, XXXX ЕСЛИ R1 >= 1900
    CALL	$CBDMG
    CALL	$CBDSG
    CALL	$CBOMG
    CALL	$CBOSG
    CALL	$CBTMG

    ;ЧИСЛО ДВОЙНОЙ ТОЧНОСТИ -> ASCII
    ;
    ;ВХОД:					ВЫХОД:
    ;R0 - АДРЕС БУФЕРА			R0 - АДРЕС СЛЕДУЮЩЕГО СИМВОЛА
    ;R1 - АДРЕС ДВУСЛОВНОГО ЧИСЛА
    ;R2 - ПАРАМЕТРЫ ПРЕОБРАЗОВАНИЯ
    ;	0 - ПОДАВЛЯТЬ НАЧАЛЬНЫЕ НУЛИ
    ;	НЕ 0 - НЕ ПОДАВЛЯТЬ
    ;
    CALL	$CDDMG

    ;ЧИСЛО ОДИНАРНОЙ ТОЧНОСТИ -> ASCII
    ;
    ;ВХОД:					ВЫХОД:
    ;R0 - АДРЕС БУФЕРА			R0 - АДРЕС СЛЕДУЮЩЕГО СИМВОЛА
    ;R1 - ЧИСЛО
    ;R2 - ПАРАМЕТРЫ ПРЕОБРАЗОВАНИЯ
    ;	БИТЫ 0-7 - ОСНОВАНИЕ (2-10)
    ;	БИТ 8 - ЧИСЛО СО ЗНАКОМ
    ;	БИТ 9 - НЕ ПОДАВЛЯТЬ НУЛИ
    ;	БИТ 10 - ШИРИНА ПОЛЯ (1-31)
    ;
    CALL	$CBTA

    ;ASCII НИЖНИЙ РЕГИСТР -> ВЕРХНИЙ РЕГИСТР
    ;
    ;ВХОД:					ВЫХОД:
    ;R0 - АДРЕС ИСХОДНОЙ СТРОКИ		R0, R1 - НЕ МЕНЯЮТСЯ
    ;R1 - АДРЕС БУФЕРА			R2 - 0
    ;R2 - КОЛИЧЕСТВО СИМВОЛОВ
    ;
    CALL	$CVTUC

    ;ДАТА -> ASCII
    ;DD-MMM-YY ($DAT), DD-MMM-YYYY ($DAT4, $DATS)
    ;
    ;ВХОД:					ВЫХОД:
    ;R0 - АДРЕС БУФЕРА			R0 - АДРЕС СЛЕДУЮЩЕГО СИМВОЛА
    ;R1 - АДРЕС ТРЕХСЛОВНОГО МАССИВА
    ;	+00 - ГОД-1900
    ;	+02 - МЕСЯЦ
    ;	+04 - ДЕНЬ
    ;
    CALL	$DAT
    CALL	$DAT4
    CALL	$DATS

    ;ВРЕМЯ -> ASCII
    ;
    ;ВХОД:					ВЫХОД:
    ;R0 - АДРЕС БУФЕРА			R0 - АДРЕС СЛЕДУЮЩЕГО СИМВОЛА
    ;R1 - АДРЕС ПЯТИСЛОВНОГО МАССИВА
    ;	+00 - ЧАСЫ
    ;	+02 - МИНУТЫ
    ;	+04 - СЕКУНДЫ
    ;	+06 - ТИКИ
    ;	+10 - ТИКОВ В СЕКУНДУ
    ;R2 - ПАРАМЕТРЫ ПРЕОБРАЗОВАНИЯ
    ;	1 - HH
    ;	2 - HH:MM
    ;	3 - HH:MM:SS
    ;	4 - HH:MM:SS.S
    ;
    CALL	$TIM

    Подпрограммы $TIM, $EDMSG, $DAT, $DAT4 и $DATS
    работают с временем в формате, возвращаемом RSXной директивой GTIM$.
    Формат описан выше. Для упрощения была добавлена подпрограмма $GTTIM
    которая на входе получает адрес 8-словного буфера в R1 и заполняет
    его датой и временем в формате GTIM$.

    Подпрограмма форматирования данных $EDMSG упрощает подготовку данных
    для вывода на экран, принтер или в файл.

    Код:

    ;ФОРМАТИРОВАННЫЙ ВЫВОД
    ;
    ;ВХОД:
    ;R0 - АДРЕС БУФЕРА			R0 - АДРЕС СЛЕДУЮЩЕГО СИМВОЛА
    ;R1 - АДРЕС ФОРМАТНОЙ СТРОКИ
    ;R2 - АДРЕС БЛОКА АРГУМЕНТОВ
    ;
    CALL	$EDMSG

    Форматная строка состоит из текста и директив форматирования и завершается
    нулевым байтом. Формат директив: "%nX" где n - количество использования
    директивы, X - символ директивы. Вместо n можно использовать символ "V" -
    в этом случае количество берется из очередного слова блока аргументов.
    Если в директиве указано количество использования, результаты разделяются
    знаками табуляции (кроме директив %A, %E для которых количество используется
    как длина строки). Блок аргументов представляет собой последовательные слова,
    содержащие аргументы для директив. Не все директивы требуют аргументов.
    Директивы работы со строками:

    Код:

    Директива	Аргумент		Вывод
    --------------------------------------------------------------------------------
    %A,%nA,$VA	адрес символа/строки	символ/строка (n - количество 
    %E,%nE,%VE	адрес символа/строки	аналогично %A, непечатные символы
    					заменяются на пробелы
    %I		адрес ASCIZ строки	вставка в форматную строку

    Директивы работы с числами:

    Код:

    Директива	Аргумент		Вывод
    -----------------------------------------------------------------------------------
    %D,%nD,%VD	слово			десятичное слово со знаком, без заполнения
    					нулями
    %M,%nM,%VM	слово			десятичное слово без знака, без заполнения
    					нулями
    %U,%nU,%VU	слово			десятичное слово без знака, с заполнением
    					нулями

    %B,%nB,%VB	адрес байта		восьмеричный байт без знака, с заполнением
    					нулями
    %O,%nO,%VO	слово			восьмеричное слово со знаком, без
    					заполнения нулями
    %P,%nP,%VP	слово			восьмеричное слово без знака, с заполнением
    					нулями
    %T,%nT,%VT	адрес двух слов		десятичное число двойной точности
    					без знака, без заполнения нулями

    Другие форматы:

    Код:

    Директива	Аргумент		Вывод
    -----------------------------------------------------------------------------------
    %R,%nR,%VR	слово в RADIX-50	ASCII строка 
    %X,%nX,%VX	5-словный блок имени	ASCII строка, пробелы удаляются
    		файла

    %Y		адрес трех слов		вывод даты с использованием $DATS

    %1Z		адрес 5 слов		вывод времени с использованием $TIM, HH
    %2Z					HH:MM
    %3Z					HH:MM:SS
    %4Z					HH:MM:SS.S

    Управление:

    Код:

    Директива	Аргумент		Вывод
    ------------------------------------------------------------------------------------
    %F,%nF,%VF				
    %N,%nN,%VN				
    %S,%nS,%VS				пробел
    %n<					n пробелов, указатель на буфер не сдвигается
    %n>					дополняет пробелами до n еслин нужно,
    					значение n должно совпадать с ранее заданным
    					в директиве %n<


     17.11.2016 подпрограмма $GTTIM перемещена в общую секцию кода библиотеки
     вместо безымянного PSECT. 

Источник авторская публикация на форуме:
http://zx-pk.ru/threads/10718-soft-dlya-dvk-pdp11.html?p=891273&viewfull=1#post891273