А все-таки, что там с кодом 0х03 в командном файле? По-идее, этот код должен остановить исполняющуюся программу и система должна перейти к следу.щей... Где-то я такое видел.
Вид для печати
А все-таки, что там с кодом 0х03 в командном файле? По-идее, этот код должен остановить исполняющуюся программу и система должна перейти к следу.щей... Где-то я такое видел.
походу есть много вариантов
https://mirrors.pdp-11.ru/search.php?text=ECHO.sav
В командном файле не нужен код 0x03.
Там пишется просто "^C" текстом, и это интерпретируется как CTRL/C (кроме специального режима в котором происходит приостанов командного файла с целью ввода с термнала [VKMON например в командном режиме так поступает]).Код:R MACRO
A=A
^C
R LINK
A=A
^C
Разумеется.
"^C" работает только на CSI ввод и завершает программу.
Завершения самого командного файла DCL до его конца не предусмотрено, да и бесполезно - зачем в принципе писать команды после того места где он должен завершиться - файл-то выполняется пеоследовательно без какого-либо управления.
Если нужны какие-то условные действия - на это есть IND - там и завершить выполнение можно в любом месте.
- - - Добавлено - - -
В порядке бреда :)
Способ прервать выполнение командного файла DCL:Формально, это не завершение, но после этих команд выполнение остановится.Код:D 44=4000
D 510=1,0
D 1000=5000,104350
ST 1000
Можно оформить в виде программы - тогда будет одна команда.
В RT-11 начиная с версии 5.0 входит IND процессор, позволяющий кроме выполнения команд, писать достаточно навороченные программы.
Описание его можно найти здесь.
- - - Добавлено - - -
Пример командного файла IND для RT-11 (на самом деле он тут универсальный для многих систем, в том числе RT-11)
Скрытый текст
Код:.ENABLE SUBSTITUTION
;
; IOSCAN V4.0 generation program.
;
.IF <SYSTEM> <> 1 .GOTO 10
.SETS SYSTEM "RSX-11M"
.SETS RSXSTB "LB:'<SYSUIC>'RSX11M.STB"
.SETS RSXMC "LB:[11,10]RSXMC"
.SETS EXEMC "LB:[1,1]EXEMC"
.SETF MPLVEC
.SETF POSVEC
.GOTO BLDRS
.10:
.IF <SYSTEM> <> 6 .GOTO 20
.SETS SYSTEM "RSX-11M-PLUS or Micro/RSX"
.SETS RSXSTB "LB:'<LIBUIC>'RSXVEC.STB"
.SETS RSXMC "LB:[11,10]RSXMC"
.SETS EXEMC "LB:[1,1]EXEMC"
.SETT MPLVEC
.SETF POSVEC
.GOTO BLDRS
.20:
.IF <SYSTEM> <> 11 .GOTO 30
.SETS SYSTEM "P/OS"
.SETS RSXSTB "LB:[1,5]POS.STB"
.SETS RSXMC "LB:[1,5]RSXMC"
.SETS EXEMC "LB:[1,5]EXEMC"
.SETF MPLVEC
.SETT POSVEC
.GOTO BLDRS
.30:
.IF <SYSTEM> <> 7 .IF <SYSTEM> <> 10 .GOTO NOSUP
.SETS SYSTEM "RT-11"
.GOTO BLDRT
.NOSUP:
; Running on unsupported operating system
;
.EXIT <ERROR>
.BLDRT:
; Running on RT-11 system.
;
; Building programs:
; IOSCAN.BIN - IOSCAN for XXDP/XXDP+
; IOSCAN.BOT - standalone IOSCAN (magtape bootstrap)
; IOSCAN.LDA - standalone IOSCAN (absolute loader format)
; IOSCAN.PDP - standalone IOSCAN
; IOSCAN.PPU - standalone IOSCAN (PRUN format for MC0511)
; IOSCAN.SAV - IOSCAN for RT-11
;
.SETS FILES "SY:MACRO.SAV SY:LINK.SAV SY:SPLIT.SAV"
.GOSUB FILTST
MAC IOSCAN
.IF <EXSTAT> <> <SUCCES> .EXIT <EXSTAT>
MAC IOSPP
.IF <EXSTAT> <> <SUCCES> .EXIT <EXSTAT>
MAC IOSRT
.IF <EXSTAT> <> <SUCCES> .EXIT <EXSTAT>
MAC IOSST
.IF <EXSTAT> <> <SUCCES> .EXIT <EXSTAT>
MAC IOSXDP
.IF <EXSTAT> <> <SUCCES> .EXIT <EXSTAT>
LIN/FOR/EXE:IOSCAN.PPU IOSPP,IOSCAN
.IF <EXSTAT> <> <SUCCES> .EXIT <EXSTAT>
LIN/EXE:IOSCAN IOSRT,IOSCAN
.IF <EXSTAT> <> <SUCCES> .EXIT <EXSTAT>
LIN/LDA/EXE:IOSCAN IOSST,IOSCAN
.IF <EXSTAT> <> <SUCCES> .EXIT <EXSTAT>
LIN/LDA/EXE:IOSCAN.BIN IOSXDP,IOSCAN
.IF <EXSTAT> <> <SUCCES> .EXIT <EXSTAT>
LIN/EXE:IOSCAN.BOT IOSST,IOSCAN
.IF <EXSTAT> <> <SUCCES> .EXIT <EXSTAT>
SPLIT IOSCAN.BOT/B:1 ,IOSCAN.BIN
.IF <EXSTAT> <> <SUCCES> .EXIT <EXSTAT>
DEL/NOQ IOS(CAN,PP,RT,ST,XDP).OBJ
.EXIT <EXSTAT>
.BLDRS:
.SETS TSK "this 'SYSTEM' system only"
.IFT MPLVEC .OR .IFT POSVEC .SETS TSK "any 'SYSTEM' system"
; Running on 'SYSTEM' system.
;
; Building programs:
; IOSCAN.TSK - IOSCAN for 'TSK'
;
.SETS CLI "MCR"
.IFDF <CLI> .SETS CLI <CLI>
.SETF DCL
.IF CLI = "MCR" .GOTO COMPL
.SETT DCL
.IF CLI = "DCL" .GOTO COMPL
; Unsupported CLI - 'CLI' -- use MCR or DCL to build IOSCAN
;
.EXIT <ERROR>
.COMPL:
.SETS FILES "'RSXSTB' 'RSXMC'.MAC 'EXEMC'.MLB"
.GOSUB FILTST
.SETS DIR <UIC>
.IFDF <DIRECT> .SETS DIR <DIRECT>
.OPEN IOSCANPRE.MAC
.IFT MPLVEC .DATA IO$MPL = 0 ;M+ exec vector support
.IFT POSVEC .DATA IO$POS = 0 ;P/OS exec vector
.IFF MPLVEC .IFF POSVEC .DATA ;No exec vector support
.CLOSE
.OPEN IOSCANASM.CMD
.DATA IOSCAN=IOSCAN
.DATA IOSRSX='EXEMC'/ML,'RSXMC'/PA:1,SY:'DIR'IOSCANPRE,IOSRSX
.CLOSE
.OPEN IOSCANBLD.CMD
.DATA IOSCAN/PR:5=IOSRSX,IOSCAN
.DATA 'RSXSTB'/SS
.DATA /
.DATA ASG=TI:1
.DATA UNITS=1
.DATA //
.CLOSE
.GOSUB TSKTST
MAC @IOSCANASM
.IF <EXSTAT> <> <SUCCES> .EXIT <EXSTAT>
.IFT DCL LIN @IOSCANBLD
.IFF DCL TKB @IOSCANBLD
.IF <EXSTAT> <> <SUCCES> .EXIT <EXSTAT>
.IFT DCL DEL/NOWAR IOSCANPRE.MAC;*,IOSCANASM.CMD;*,IOSCANBLD.CMD;*
.IFT DCL DEL/NOWAR IOSCAN.OBJ;*,IOSRSX.OBJ;*
.IFT DCL PUR/NOWAR IOSCAN.TSK
.IFF DCL PIP IOSCANPRE.MAC;*,IOSCANASM.CMD;*,IOSCANBLD.CMD;*/DE/NM
.IFF DCL PIP IOSCAN.OBJ;*,IOSRSX.OBJ;*/DE/NM
.IFF DCL PIP IOSCAN.TSK/PU
.EXIT <EXSTAT>
.FILTST:
.SETF MISS
.100:
.PARSE FILES " " FILE FILES
.TESTFILE 'FILE'
.IF <FILERR> = 1 .GOTO 110
.SETT MISS
; File not found - 'FILE'
.110:
.IF FILES <> "" .GOTO 100
.IFT MISS ;
.IFF MISS .RETURN
.EXIT <ERROR>
.TSKTST:
.IFINS ...PIP .GOTO 200
INS $PIP
.IF <EXSTAT> <> <SUCCES> .EXIT <EXSTAT>
.200:
.IF <SYSTEM> <> 11 .IFINS ...MAC .GOTO 210
.IF <SYSTEM> <> 11 INS $MAC
.IF <SYSTEM> = 11 .IFINS ...PMA .GOTO 210
.IF <SYSTEM> = 11 INS $PMA
.IF <EXSTAT> <> <SUCCES> .EXIT <EXSTAT>
.210:
.IF <SYSTEM> <> 11 .IFINS ...TKB .GOTO 220
.IF <SYSTEM> <> 11 INS $TKB
.IF <SYSTEM> = 11 .IFINS ...PAB .GOTO 220
.IF <SYSTEM> = 11 INS $PAB
.IF <EXSTAT> <> <SUCCES> .EXIT <EXSTAT>
.220:
.RETURN
[свернуть]
- - - Добавлено - - -
Обработка вывода из программ - это немного из другой оперы - это ближе к BATCH процессору.
Он в RT-11 тоже есть, но особой популярностью не пользовался.