
Сообщение от
hobot
столько всего полезного
До кучи - может кому пригодится. Пример как делать поиск файлов в каталоге диска, используя только те средтва которые уже есть в системе. Используются функции IGTDIR и IGTENTиз системной библиотеки. Их описание можно найти на bitsavers или у меня в документации по системной библиотеке RT-11. Никаких наворотов-красивостей - только пример, рабочий 
Код:
MOV #ARGS1,R5
CALL IGTDIR
TST R0
BNE 20$
Вызов функции IGTDIR из системмной библиотеки. Аналогичен форановскму IERR = IGTDIR(64,AREA,0,SEG,,DBLK,FILSPC). Если IERR (R0) не равен нулю - была ошибка.
Код:
10$: MOV #ARGS2,R5
CALL IGTENT
TST R0
BLT 30$
Аналогично фортрановскому IERR = IGTENT(AREA,ENTRY,,BLOCK). Если результат меньше 0, больше искать нечего. В противном случае в 7-словыный массив ENTRY получаем запись каталога о файле в стандартном RT-11 формате.
Код:
MOV #ENTRY+2,R0
MOV #FMTARG,R1
CLR (R1)+
MOV (R0)+,(R1)+
MOV (R0)+,(R1)+
MOV (R0)+,(R1)+
CLR (R1)+
MOV (R0)+,(R1)+
MOV #BUFF,R0
MOV #FORMAT,R1
MOV #FMTARG,R2
CALL $EDMSG
CLRB @R0
.PRINT #BUFF
BR 10$
Копируем данные в блок аргументов $EDMSG, печатаем, идем дальше...
Код:
20$: .PRINT #ERROR
30$: CLR R0
.EXIT
Обработка ошибок, выход.
Код:
ARGS1: .WORD 7,SIZE,AREA,CHAN,SEG,-1,DBLK,FILSPC
SIZE: .WORD 64.
AREA: .BLKW 64.
CHAN: .WORD 0
SEG: .BLKW 512.
DBLK: .RAD50 /SY /
ARGS2: .WORD 5,AREA,ENTRY,-1,BLOCK
ENTRY: .BLKW 7
BLOCK: .BLKW
FMTARG: .BLKW 6
FORMAT: .ASCIZ /%11<%X%11>%M./
ERROR: .ASCIZ /IGTDIR FAILED/
FILSPC: .ASCIZ /.TXT,%%.SYS,UCL.*/
BUFF: .BLKB 40.
.END START
Собственно все. FILSPC содержит список файлов которые нужно искать, со всякими *, % (ну и как обычно, опущенное поле считается за *), не более 8 спецификаций через запятую. Другие подробности в RT-11 System Subroutine Library Manual. Программа для простоты использует RSXLIB, описание его здесь.
Код:
.RU GTDIR
DD.SYS 5.
DU.SYS 11.
EQ.SYS 10.
LD.SYS 11.
LP.SYS 2.
LS.SYS 5.
MU.SYS 14.
NL.SYS 2.
SD.SYS 24.
SL.SYS 17.
SP.SYS 7.
VM.SYS 3.
XL.SYS 4.
UCL.SAV 16.
UCL.DAT 9.
CUSTOM.TXT 14.
V5NOTE.TXT 36.
.