Важная информация

User Tag List

Страница 2 из 30 ПерваяПервая 123456 ... ПоследняяПоследняя
Показано с 11 по 20 из 296

Тема: PDP-11 и всё всё всё :)

  1. #11
    Guru Аватар для form
    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    5,823
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    281
    Поблагодарили
    227 сообщений
    Mentioned
    29 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Hunta Посмотреть сообщение
    А что, 16-битный проц в rainbow был разработан DEC?
    Нет, но речь шла о компьютерах, а не о процах
    PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
    Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
    PMI: KDJ11-BF, MSV11-JE
    VT220, CM7209

  2. #12
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    6,993
    Спасибо Благодарностей отдано 
    285
    Спасибо Благодарностей получено 
    631
    Поблагодарили
    531 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Тогда не зачёт.
    Говоря про PDP-11, думаю, не сильно ошибусь, если скажу, что подавляющее количество людей будет подразумевать как компы, так и процессора. Семейство PDP-11. Rainbow к нему не относится.
    Так что по прежнему один - и на порядок, а то и больше коммерчески самый успешный - на втором месте - семейство (процессоров и компов) PDP-8.

  3. #13
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    6,993
    Спасибо Благодарностей отдано 
    285
    Спасибо Благодарностей получено 
    631
    Поблагодарили
    531 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    И тогда нам повезло - мы наняли Гарольда Макфарланда, протеже К. Гордона Белла, что бы он работал со мной. Гарольд работал над несколькими архитектурами в институте Карнеги-Меллона. Одна из них, нравившаяся ему, была настолько сложной и запутанной, что я не мог понять, как писать для неё программы - кто знает, она могла быть самой лучшей, но этого мы никогда не узнаем. Другая архитектура Гарольда была по существу тем, что стало PDP-11. Когда мы представили эту архитектуру в качестве нашей рекомендации для первой 16-разрядной машины DEC, менеджеры по аппаратным средствам (например, Роджер Кэди) просто выгнали нас из комнаты, потому что не было 16-битных инструкций, с данными, закодированными непосредственно в них! И коротких адресов не было! Эти и другие подобные идеи были в значительной степени важны, для достижения низкой нагрузки на канал обмена с памятью и компактного кода. Вскоре мы смогли преодолеть эти предвзятые понятия, и внезапно проект Desk Calculator стал горячим. Всевозможные архитекторы (в том числе К. Гордон Белл и Билл Вульф как консультанты), а также инженеры по аппаратным и программным средствам, участвовали в быстром описании деталей машины. Основываясь на материалах Гарольда и других, я написал оригинальную спецификацию языка ассемблера, и Боб Бауэрс (если я правильно помню) написал кросс-ассемблер на PDP-10 в течение выходных. (И, хотя это не было указано, у него так же был и макропроцессор!) Я начал нанимать разработчиков программного обеспечения (всего 3), и я написал SIM-11 - полное моделирование PDP-11 на базе PDP-10 на FORTRAN (не мой язык!). С ассемблером и симулятором мы смогли спроектировать и протестировать исходное программное обеспечение для перфоленты (ассемблер, редактор, IOX, компоновщик, ....) и разработать простые тестовые программы до того, как будет доступен первый прототип.

    Самая первая программа, выполненная PDP-11, была набрана на консоли, и это был простой цикл для заполнения слов памяти собственным адресом. Это делается элементарно с помощью цикла MOV R0, (R0) +, где R0 начинается с небольшого чётного числа. Как известно, PDP-11/20 неправильно помещал A+2 в слово A. Однако SIM-11 правильно помещал A в слово A. Следующее событие было предсказуемым и повторялось снова и снова в моем личном опыте. То есть - мне пришлось реализовать аппаратную ошибку в SIM-11!

    Одно из моих любимых воспоминаний - личное упаковывание первой коробки с программным обеспечением на перфоленте для первого PDP-11, доставленного клиенту. К сожалению, я не помню, кем был клиент.

    Я также помню, как на меня давили маркетологи, чтобы минимальный объём памяти был 2 килобайта. Я им ответил: «Тогда не будет ассемблера» - так что теперь у нас 4 килобайта минимальной памяти.

    И маркетологи хотели, чтобы комментарий начинался с косой черты (а ля PDP-8?), на что я сказал: «Тогда я буду использовать точку с запятой для деления».

    Первый диск, подключенный к PDP-11, имел ёмкость 64 килослов и каждое слово было индивидуально адресуемым. Расскажите о коротких секторах!

    Позже я был основным участником внедрения RSX-11C (вся система в памяти) и RSX-11B (добавлено массовое хранилище, то есть диск).
    Последний раз редактировалось Hunta; 25.02.2024 в 16:09.

  4. #14
    Guru Аватар для form
    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    5,823
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    281
    Поблагодарили
    227 сообщений
    Mentioned
    29 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Hunta Посмотреть сообщение
    MOV R0, (R0) +
    Цитата Сообщение от Hunta Посмотреть сообщение
    PDP-11/20 неправильно помещал A+2 в слово A
    Я бы сказал, что это документированное поведение многих процессоров, в частности, всех J11-based. У меня на 11/83 именно так и будет.
    Поэтому MACRO-11 генерит Z на такую команду

    Собственно согласно таблицы разностей поведения, так ведут себя 23, 24, 15, 20, 35, 40, 60, 73, 83, 84, 93, 94 и все M
    Последний раз редактировалось form; 12.08.2017 в 01:42.
    PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
    Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
    PMI: KDJ11-BF, MSV11-JE
    VT220, CM7209

  5. #15
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    6,993
    Спасибо Благодарностей отдано 
    285
    Спасибо Благодарностей получено 
    631
    Поблагодарили
    531 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    "Дисплеи - это отдельная история - кубинские не работали, когда было жарко, советские, когда холодно..."

    Моя первая работа - на химфаке МГУ - привезли нам это чудо, порядки десяти штук. Не завёлся ни один Приехали два спеца с Кубы, вводить в эксплуатацию С ними приехали две здоровых коробки, набитые платами. Метод ремонт на 90 процентов - замены плат Не помню насчёт работоспособности в жару или в холод

    Третья работа - в Саратове - был комплекс СМ-1600 (если мне не изменяет память - четыре стойки, мегабайт памяти). Крутая особенность - полная неработоспособность холодной. Помещение зимой сильно остывало, я приходил часам к восьми, включал СМ-ку, включал пару обогревателей и.... мы ждали примерно до обеда - пока в помещении не станет достаточно тепло для работы нашего ЧУДА. Зато летом было всё тип-топ - какая бы жара не стояла (окна нараспашку, потом был кондиционер, но он не сильно спасал) - ни малейшего сбоя И были на этой СМ-ке диски типа RK06 (не помню их советское название) - вот с ними была полная жопа. Сам дисковод продувался воздухом, что бы обеспечить достаточную подъёмную силу для головок - должен был быть определённый напор воздуха, а что бы всякая пыль не царапнула поверхность - были воздушные фильтры, в том числе - предварительный фильтр, который в нашем помещении быстро забивался, напор воздуха падал и... головка садилась на блин. После чего - диск можно было выбрасывать. Сколько мы тогда дисков угробили, пока поняли в чём причина... И что самое противное - вроде как в диске два блина.. но пересобрать из живых не получится - на одной из поверхностей был на заводе прописан серво-сигнал - по нему позиционировались головки - разобрал диск - и все.. Отъюстировать уже никак.. Жаль не оставил себе на память хотя бы испорченных парочку
    Последний раз редактировалось Hunta; 12.05.2020 в 17:06.

  6. #16
    Guru
    Регистрация
    02.03.2015
    Адрес
    г. Караганда, Казахстан
    Сообщений
    2,321
    Спасибо Благодарностей отдано 
    35
    Спасибо Благодарностей получено 
    225
    Поблагодарили
    177 сообщений
    Mentioned
    17 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Hunta Посмотреть сообщение
    И были на этой СМ-ке диски типа RK06 (не помню их советской название)
    СМ5408 - 14М, двухдисковая кассета.
    Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)

  7. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #17
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    6,993
    Спасибо Благодарностей отдано 
    285
    Спасибо Благодарностей получено 
    631
    Поблагодарили
    531 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Похоже, судя по тому, что увидел на фотках В общем, барахло редкостное в пыльной атмосфере.

    Потом работал на СМ-1420, там стояли, опять же, судя по фоткам СМ5407 - 20-ти мб-ные монстрики У этих было аппаратное позиционирование головок (гребёнка), так то проблем с разборкой сборкой особо не было - но у них площадь головки была больше, поэтому посадить её на диск было сложней. Зато была проблема совместимости самих дисков между накопителями - периодически нужно было выставлять положение головок по эталонному диску, у которого на каждой поверхности была записана всего одна дорожка Опять же - жаль не упёр хотя бы один на память
    Последний раз редактировалось Hunta; 12.05.2020 в 17:07.

  9. #18
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    6,993
    Спасибо Благодарностей отдано 
    285
    Спасибо Благодарностей получено 
    631
    Поблагодарили
    531 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    C	RT-11 OBJECT MODULE PATCH UTILITY (PATCHO)
    C
    C	DEC-11-ORPOA-E
    C
    C	ECP, RRB, BAM
    C	APRIL 1974
    C	BC SEP 1975
    C
    C	COPYRIGHT (C) 1974,1975
    C	DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
    C
    C	THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY
    C	ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH
    C	THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE,
    C	OR ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE
    C	AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO
    C	ONE WHO AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE 
    C	SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.
    C
    C	THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO
    C	CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED
    C	AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
    C
    C	DEC ASSUMES NO RESPONSIBILITY FOR THE USE
    C	OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT
    C	WHICH IS NOT SUPPLIED BY DEC.
    C
    C
    C	MAIN DRIVER ROUTINE FOR PATCHO
    C
    	IMPLICIT INTEGER*2 (A-Z)
    	LOGICAL*1 IBUF(512),OBUF(512),FBBUF(50),B1(2),B2(2),ERROR,EOF
    	LOGICAL*4 WORD,DECSW
    	INTEGER*2 IFBBUF(25),MODNAM(2),CMBLK(12)
    	COMMON FBBUF,FBLEN,FBPTR,FBCODE,IBUF,OBUF,IPTR,OPTR,ERROR,EOF,
    	1IREC,OREC,MODNAM,LSTMOD,BUFFUL,PREVIREC,PREVIPTR
    	COMMON /CS/ NAME1(2),VALUE1,NAME2(2),VALUE2,RELATV,WORD,CMDNMB
    	COMMON /CS/ CHKSUM,DECSW
    	COMMON /SECTBL/ SECMAX  !TO PULL SECTBL INTO THE ROOT
    	COMMON /CHGTBL/ CHGMAX  !AND ALSO CHGTBL
    	EQUIVALENCE (CMBLK,NAME1)
    	DATA OPENFL/-1/  !INDICATES IF A FILE IS OPEN YET
    	DATA BUFFUL/0/  !INDICATES WHETHER A BLOCK IS PRESENT IN FBBUF
    	DATA CHANGE/0/  !INDICATES IF A CHANGE HAS BEEN MADE
    	DATA CMBLK/12*0/  !INITIALIZE SCAN COMMON BLOCK
    	DATA LSTMOD /-1/ !LIST MODE SWITCH, INITIALLY OFF
    	DATA ERROR,EOF /F,F/  !ERROR AND END-OF-FILE FLAGS
    	DATA IPTR,OPTR /513,1/  !BUFFER POINTERS
    	DATA IREC,OREC /1,1/  !AND RECORD NUMBERS
    	DATA SECMAX/0/, CHGMAX/0/  !INIT # OF CSECTS, CHANGES
    C
    C
    10	CALL GETCMD  !GET NEXT COMMAND
    	IF (CMDNMB.NE.6.AND.OPENFL) GOTO 900  !OOPS - NO FILE OPEN
    	GOTO (100,200,300,400,400,600,700),CMDNMB
    100	IF (CHANGE) CALL CLOSEF  !DUMP ANY CHANGES MADE SO FAR
    	CHANGE = 0  !INDICATE CLEAN STATE
    	CALL POINT
    	GOTO 10
    200	CALL LIST
    	GOTO 10
    300	CALL DUMP
    	GOTO 10
    400	CALL WRDBYT
    	CHANGE = -1  !INDICATE A CHANGE PENDING
    	GOTO 10
    600	DEFINE FILE 1(0,256,U,IREC)
    	DEFINE FILE 2(0,256,U,OREC)
    	CALL INBLK  !GET FIRST BLOCK
    	CALL NEXT  !AND SET UP NAME OF MODULE
    	OPENFL = 0  !ALLOW OTHER COMMANDS NOW
    	GOTO 10
    700	IF (CHANGE) CALL CLOSEF
    710	IF (EOF) GOTO 720  !UNTIL DONE
    	CALL OUTBLK  !ELSE KEEP COPYING
    	CALL INBLK
    	GOTO 710
    720	IF (BUFFUL) CALL OUTBLK  !DUMP LAST BUFFER IF NECESSARY
    	IF (OPTR.EQ.1) GOTO 740  !IF OUTPUT BUFFER EMPTY
    	DO 730 L=OPTR,512  !ZERO REMAINDER OF BUFFER
    730	OBUF(L) = .FALSE.
    	WRITE (2'OREC) OBUF  !AND WRITE IT
    740	TYPE 1010  !CHECKSUM TO ASSURE PATCH TYPED CORRECTLY
    1010	FORMAT('+ENTER CHECKSUM: ',$)
    	IF (DECSW) GOTO 800  !IF HE DOESN'T KNOW THE CHECKSUM
    	ACCEPT 1020,CHK1  !ELSE READ IT FROM THE CONSOLE
    1020	FORMAT(O6)
    	IF (CHK1.NE.CHKSUM) PAUSE '?BAD PATCH?'
    	STOP
    800	TYPE 1030,CHKSUM  !TYPE OUT CALCULATED CHECKSUM
    1030	FORMAT('+',O6)
    	STOP
    900	TYPE 1000
    1000	FORMAT('+?NO FILE OPEN?',/)
    	GOTO 10
    	END
    Из RT-11 V02C

    Ну прям моя молодость - всё что можем, пишем на фортране Всё что не можем - ... тоже на фортране

  10. #19
    Guru Аватар для form
    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    5,823
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    281
    Поблагодарили
    227 сообщений
    Mentioned
    29 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Hunta Посмотреть сообщение
    пишем на фортране
    Недавно ради интереса посмотрел на g77. Мало того, что ни о какой свободе с аргументами даже речи не идет, так еще и не поддерживается... VFC
    PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
    Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
    PMI: KDJ11-BF, MSV11-JE
    VT220, CM7209

  11. #20
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    6,993
    Спасибо Благодарностей отдано 
    285
    Спасибо Благодарностей получено 
    631
    Поблагодарили
    531 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Всё было круче

    - - - Добавлено - - -

    Дедушка SYSGEN.COM

    Код:
    	SYSGEN.CND V02.11B	RT-11 SYSGEN SCRIPT FILE
    ;
    ; COPYRIGHT (C)    1978
    ;
    ; DIGITAL EQUIPMENT CORPORATION,  MAYNARD,   MASS.
    ;
    ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
    ; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
    ;
    ;
    	#NAME	SYCND
    	#FILE	SYCND.MAC
    .SBTTL	SYSTEM CONDITIONAL FILE
    	; SYCND.MAC--SYSTEM CONDITIONAL FILE
    	;
    	; COPYRIGHT (C)    1978
    	;
    	; DIGITAL EQUIPMENT CORPORATION,  MAYNARD,   MASS.
    
    	#SET	MONITR=N
    	#SET	MTTY=N
    	#SET	BLSJFB=N
    	#SET	FBXM=N
    	#SET	TIME=N
    	#PRINT	
    	#PRINT	RT-11 SYSTEM GENERATION PROGRAM V02.11B
    	#PRINT	 
    	#ASK	Do you want the expanded form of dialogue [Y/N] (Y)?LONG/Y=Y
    	#IF	LONG
    	#PRINT	
    	#PRINT	All answers requiring a choice are indicated by [Y/N]
    	#PRINT	and require you to type either 'Y' for yes or 'N'
    	#PRINT	for no followed by a carriage return.  Answers requiring
    	#PRINT	numeric input are indicated by [D] for decimal input and
    	#PRINT	[O] for octal input.  Answers requiring a device name
    	#PRINT	response are indicated by [DD]; answers requiring a
    	#PRINT	device name followed by a unit number are indicated
    	#PRINT	by [DDU]. If you enter no response (just a CARRIAGE RETURN),
    	#PRINT	your answer will default to the response indicated in
    	#PRINT	parentheses before the question mark (e.g. [DD] (RK)?).
    	#PRINT	Your responses are checked for validity wherever possible.
    	#PRINT	 
    	#PRINT	The outputs of this SYSGEN program are two conditional
    	#PRINT	files (SYCND.MAC and SYSTBL.MAC) and three indirect
    	#PRINT	command files (SYSBLD.COM, MONBLD.COM and DEVBLD.COM)
    	#PRINT	which are used to assemble and link the monitor(s) and
    	#PRINT	device handlers for the target system. The assembly
    	#PRINT	and linking process requires a machine with at least
    	#PRINT	16K words of memory and mass storage with at least 500
    	#PRINT	free blocks on the output device and 128 free blocks
    	#PRINT	on the system device.
    	#PRINT	
    	#PRINT	The following dialogue asks questions about
    	#PRINT	the configuration for which the system is being
    	#PRINT	generated, and about monitor and device support
    	#PRINT	options you may desire.  You should have read the
    	#PRINT	RT-11 System Generation Manual before proceeding.
    	#PRINT	You can terminate SYSGEN at any time by typing CTRL/C.
    	#PRINT	 
    	#PRINT	The RT-11 system includes a variety of monitors, allowing
    	#PRINT	you to select the monitor best suited to your
    	#PRINT	application.  The monitors are customized to your configuration
    	#PRINT	by this SYSGEN process, and, while you may build any number of  
    	#PRINT	monitors, you should realize that SYSGEN places a large
    	#PRINT	demand on time and data storage.
    	#PRINT	
    	#PRINT	If you elect to build the base-line
    	#PRINT	single-job (SJ) monitor, no other monitors
    	#PRINT	may be built during the same SYSGEN pass.
    	#PRINT	 
    	#PRINT	The base-line single-job (SJ) monitor is the minimal monitor
    	#PRINT	necessary to execute standard system functions. It is intended
    	#PRINT	for systems with only 8K words of memory, or for larger
    	#PRINT	systems	that require the lowest possible monitor overhead.
    	#PRINT	Device support is limited, and some features of the
    	#PRINT	SJ monitor usable in larger configurations are omitted,
    	#PRINT	such as BATCH and VT11 support.
    	#ENDC	LONG
    SYSG$N	= 1		;INDICATE SYSGENED MONITOR
    	#PRINT	
    	#ASK	Do you want the base-line single-job monitor [Y/N] (N)?BLSJ/Y=N
    	#IF	BLSJ
    	#SET	SJ=N
    	#SET	FB=N
    	#SET	XM=N
    	#SET	TIME$R=N
    	#SET	DS=N
    	#SET	DM=N
    	#SET	RF=N
    	#SET	RX2=N
    	#SET	DP=N
    	#SET	RP3=N
    	#SET	MTSP=N
    	#SET	TM=N
    	#SET	TJU=N
    	#SET	GRAFX=N
    	#SET	CT=N
    	#SET	CR=N
    	#SET	BATC$H=N
    	#SET	ERL$G=N
    	#SET	MONITR=Y
    	#SET	BLSJFB=Y
    	#SET	MTTY=N
     ; BASE-LINE SJ MONITOR
    TIME$R	= 0		;NO TIMER SUPPORT
    MPT$Y	= 0		;NO MEMORY PARITY SUPPORT
    BATC$H	= 0		;NO BATCH SUPPORT
    ERL$G	= 0		;NO ERROR LOG SUPPORT
    ESC$P	= 0		;NO ESCAPE SEQUENCE SUPPORT
    RDF$L	= 0		;NO MESSAGE ON SYS I/O ERRORS (SJ)
    	#IFF
    	#IF	LONG
    	#PRINT	
    	#PRINT	The single-job (SJ) monitor provides an environment suitable
    	#PRINT	for the development of simple applications in FORTRAN or
    	#PRINT	BASIC.  It provides a subset of the foreground/background
    	#PRINT	(FB) features and offers maximum ability for minimum size.
    	#PRINT	Some additional features may be added during SYSGEN, but at
    	#PRINT	the cost of increased monitor size.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want the single-job (SJ) monitor [Y/N] (Y)?SJ/Y=Y
    	#IF	SJ
    	#SET	BLSJFB=Y
    	#SET	MONITR=Y
    	#ENDC	SJ
    	#IF	LONG
    	#PRINT	
    	#PRINT	The foreground/background (FB) monitor offers an extended
    	#PRINT	set of facilities which are helpful for applications
    	#PRINT	involving real-time or data acquisition. These
    	#PRINT	include timer support, serialized asynchronous I/O, and 
    	#PRINT	support for a foreground job.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want the foreground/background (FB) monitor [Y/N] (Y)?FB/Y=Y
    	#IF	FB
    	#SET	BLSJFB=Y
    	#SET	MONITR=Y
    	#SET	FBXM=Y
    	#ENDC	FB
    	#IF	LONG
    	#PRINT	
    	#PRINT	The extended memory (XM) monitor is a version of the FB
    	#PRINT	monitor which supports up to 128K words of memory. It is
    	#PRINT	useful for advanced applications that require an extended
    	#PRINT	addressing space.  The XM monitor is larger than FB and
    	#PRINT	requires a resident USR and drivers.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want the extended memory (XM) monitor [Y/N] (N)?XM/Y=N
    	#IF	XM
    	#SET	MONITR=Y
    	#SET	FBXM=Y
    	#ENDC	XM
    	#ENDC	BLSJ
    	#IFN	MONITR
    	#PRINT	
    	#PRINT	?SYSGEN-F-No monitor requested
    	#PRINT	
    	#EXIT
    	#ENDC	MONITR
    	#IFN	BLSJ
    	#IF	LONG
    	#PRINT	
    	#PRINT	There are a number of monitor options you may select:
    	#ENDC	LONG
    	#IF	SJ
    	#IF	LONG
    	#PRINT	
    	#PRINT	The following options apply only to the SJ monitor.
    	#PRINT	 
    	#PRINT	The SJ monitor normally does not have timer support.
    	#PRINT	You may optionally include the .MRKT and .CMKT requests.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want timer support in the SJ monitor [Y/N] (N)?TIME$R/Y=N
    	#IF	TIME$R
    TIME$R	= 1		;ADD TIMER SUPPORT (SJ)
    	#ENDC	TIME$R
    	#IF	LONG
    	#PRINT	
    	#PRINT	The device time-out option permits device drives to issue
    	#PRINT	mark time requests.  This feature is currently not used
    	#PRINT	by any RT-11 drivers, but is necessary for DECNET support.
    	#PRINT	Select this option if you are planning to use DECNET
    	#PRINT	with your monitor.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want device time-out support [Y/N] (N)?DEVTO/Y=N
    	#IF	DEVTO
    	#IFN	TIME
    TIM$IT	= 1		;ADD DEVICE TIMER SUPPORT
    	#SET	TIME=Y
    	#ENDC	TIME
    	#IF	SJ
    	#IFN	TIME$R
    TIME$R	= 1		;ADD TIMER SUPPORT (SJ)
    	#ENDC	TIME$R
    	#ENDC	SJ
    	#ENDC	DEVTO
    	#IF	LONG
    	#PRINT	
    	#PRINT	The SJ monitor will normally halt at the "system halt"
    	#PRINT	if there is a fatal system I/O error. This halt can
    	#PRINT	be replaced with a system error message at the cost of
    	#PRINT	about 30 words additional code in the resident
    	#PRINT	monitor. This option is highly recommended if the system
    	#PRINT	is going to be used by anyone other than the expert.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want an error message on system I/O errors [Y/N] (Y)?RDF$L/Y=Y
    	#IF	RDF$L
    RDF$L	= 1		;ADD SYSTEM I/O ERROR MESSAGE (SJ)
    	#IFF
    RDF$L	= 0		;NO SYSTEM I/O ERROR MESSAGE (SJ)
    	#ENDC	RDF$L
    	#ENDC	SJ
    	#IF	FBXM
    	#IF	LONG
    	#PRINT	
    	#PRINT	The following options apply only to the FB and XM monitors.
    	#PRINT	 
    	#PRINT	The FB and XM monitors' scheduler idle loop will display
    	#PRINT	a moving light pattern in the display register of any
    	#PRINT	PDP-11/45, 11/50, 11/55 or 11/70 processor.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want idle loop light pattern [Y/N] (N)?LIGH$T/Y=N
    	#IF	LIGH$T
    LIGH$T	= 1		;IDLE LOOP LIGHT PATTERN (FB,XM)
    	#ENDC	LIGH$T
    	#IF	LONG
    	#PRINT	
    	#PRINT	RT-11 normally supports a single terminal interfaced through
    	#PRINT	the console KL11 or DL11, which is shared by both background
    	#PRINT	and foreground jobs. You may optionally select multi-
    	#PRINT	terminal support of up to 16 terminals interfaced through
    	#PRINT	a choice of DL11 and DZ11 interfaces.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want support of more than one terminal [Y/N] (N)?MTTY/Y=N
    	#IF	MTTY
    MTT$Y	= 1		;MULTIPLE TERMINAL SUPPORT (FB,XM)
    	#ENDC	MTTY
    	#ENDC	FBXM
    	#ENDC	BLSJ
    	#IF	LONG
    	#PRINT	
    	#PRINT	The following options apply to all monitors.
    	#PRINT	 
    	#PRINT	RT-11 assumes a 60 Hz power line frequency, but can
    	#PRINT	optionally support a 50 Hz frequency.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want the optional 50 Hz clock support [Y/N] (N)?CLOCK/Y=N
    	#IF	CLOCK
    CLOCK	= 50.		;POWER LINE FREQUENCY (SJ,FB,XM)
    	#IFF
    CLOCK	= 60.		;POWER LINE FREQUENCY (SJ,FB,XM)
    	#ENDC	CLOCK
    	#IFN	BLSJ
    	#IF	LONG
    	#PRINT	
    	#PRINT	RT-11 normally uses a line clock for the system clock.
    	#PRINT	You may substitute the KW11-P programmable clock if you wish,  
    	#PRINT	in which case the KW11-P is not available for program use.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want to use the KW11-P clock as the system clock [Y/N] (N)?KW11$P/Y=N
    	#IF	KW11$P
    KW11$P	= 1		;USE KW11-P CLOCK AS SYSTEM CLOCK (SJ,FB,XM)
    	#ENDC	KW11$P
    	#ENDC	BLSJ
    	#IF	LONG
    	#PRINT	
    	#PRINT	The bootstrap optionally executes an indirect file when
    	#PRINT	starting the system.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want the startup indirect file [Y/N] (Y)?START/Y=Y
    	#IF	START
    STAR$T	= 1		;STARTUP COMMAND FILE (SJ,FB,XM)
    	#ENDC	START
    	#IFN	BLSJ
    	#IF	LONG
    	#PRINT	
    	#PRINT	RT-11 supports parity memory and processes memory
    	#PRINT	parity errors.  If error logging is present, parity errors
    	#PRINT	are also logged.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want memory parity support [Y/N] (N)?MPT$Y/Y=N
    	#IF	MPT$Y
    MPT$Y	= 1		;MEMORY PARITY (SJ,FB,XM)
    	#ENDC	MPT$Y
    	#IF	LONG
    	#PRINT	
    	#PRINT	The monitor normally halts on power recovery startup
    	#PRINT	after a power failure.  You may elect to have the monitor
    	#PRINT	print a message explaining that power failure caused the halt.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want power failure messages [Y/N] (Y)?PWF$L/Y=Y
    	#IF	PWF$L
    PWF$L	= 1		;POWER FAIL (SJ,FB,XM)
    	#ENDC	PWF$L
    	#IF	LONG
    	#PRINT	
    	#PRINT	RT-11 supports BATCH as an option. Indirect command
    	#PRINT	file support is separately available in all monitors,
    	#PRINT	and BATCH support need not be selected to obtain
    	#PRINT	indirect command file support.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want BATCH support [Y/N] (N)?BATC$H/Y=N
    	#IF	BATC$H
    BATC$H	= 1		;BATCH SUPPORT (SJ,FB,XM)
    	#ENDC	BATC$H
    	#IF	LONG
    	#PRINT	
    	#PRINT	The RT-11 terminal service is capable of recognizing
    	#PRINT	ANSI or DEC standard escape sequences and processing
    	#PRINT	those sequences according to application instructions.
    	#PRINT	This support is not necessary for normal system operation;
    	#PRINT	if your application does not make special use of escape
    	#PRINT	sequences, do not select this support.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want escape sequence processing [Y/N] (N)?ESC/Y=N
    	#IF	ESC
    	#PRINT	
    	#ASK	Do you want ANSI standard escape sequences [Y/N] (N)?ANSI/Y=N
    	#IF	ANSI
    ESC$P	= 2		;ANSI ESCAPE SEQUENCES (SJ,FB,XM)
    	#IFF
    ESC$P	= 1		;DEC ESCAPE SEQUENCES (SJ,FB,XM)
    	#PRINT	
    	#PRINT	DEC standard escape sequences assumed.
    	#ENDC	ANSI
    	#IFF
    ESC$P	= 0		;NO ESCAPE SEQUENCES (SJ,FB,XM)
    	#ENDC	ESC
    	#IF	LONG
    	#PRINT	
    	#PRINT	Selection of error logging creates the error logging
    	#PRINT	driver EL and incorporates error logging into the device
    	#PRINT	handlers. When EL is loaded and initialized, logging of
    	#PRINT	disk, DECtape and memory parity errors will occur.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want error logging [Y/N] (N)?ERL$G/Y=N
    	#IF	ERL$G
    ERL$G	= 1		;ERROR LOGGING (SJ,FB,XM)
    	#IF	SJ
    	#IFN	TIME$R
    TIME$R	= 1		;ADD TIMER SUPPORT (SJ)
    	#ENDC	TIME$R
    	#ENDC	SJ
    	#IF	LONG
    	#PRINT	
    	#PRINT	The error logger can capture either initial errors
    	#PRINT	or the most recent errors that have occured. For most
    	#PRINT	types of problems, information concerning initial
    	#PRINT	errors is most useful.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Should the error logger capture the most recent errors [Y/N] (N)?ERLW/Y=N
    	#IF	ERLW
    ERL$W	= 1		;LOG MOST RECENT ERROR (SJ,FB,XM)
    	#ENDC	ERLW
    	#IF	LONG
    	#PRINT	
    	#PRINT	Normal error logging usage requires the utility ERRUTL
    	#PRINT	to be run occasionally from the console
    	#PRINT	to write the error information out to the error log file. If
    	#PRINT	an application is to be run continuously for a long period
    	#PRINT	of time, however, the error logger has a facility that
    	#PRINT	allows the application program to dump the error log buffer
    	#PRINT	to the error file at regular intervals. Unless your
    	#PRINT	application specifically uses this feature, you do not need
    	#PRINT	this support.
    	#ENDC	LONG
    	#PRINT	
    	#PRINT	Do you want a program other than ERRUTL
    	#ASK	-   to write the error log buffer [Y/N] (N)?ERLA/Y=N
    	#IF	ERLA
    ERL$A	= 1		;AUTOMATIC ERROR LOG DUMPING (SJ,FB,XM)
    	#ENDC	ERLA
    	#IF	LONG
    	#PRINT	
    	#PRINT	The error logger requires a resident buffer to collect
    	#PRINT	errors. The buffer size may be increased to accomodate
    	#PRINT	an unusual error load.
    	#ENDC	LONG
    	#PRINT	
    	#PRINT	How many 256 word memory blocks should be
    	#ASK	-   set aside for the error buffer [D] (1)?ERLB/D=1,1,4
    	#SUBS	"ER.B"ERLB
    ERL$B	= ER.B.		;NUMBER OF BLOCKS IN ERROR LOG BUFFER
    	#ENDS
    	#IF	LONG
    	#PRINT	
    	#PRINT	The error logger can handle up to 35 individual device
    	#PRINT	units. Space can be conserved by reducing the number
    	#PRINT	of units the logger can handle to the specific number
    	#PRINT	of units present on the target configuration. Only disk
    	#PRINT	and DECtape units need be included.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	How many disk and DECtape device units can be logged [D] (10)?ERLU/D=10,1,35
    	#SUBS	"ER.U"ERLU
    ERL$U	= ER.U.		;NUMBER OF UNITS TO BE LOGGED
    	#ENDS
    	#ENDC	ERL$G
    	#ENDC	BLSJ
    	#SET	RK=N
    	#SET	RF=N
    	#SET	DT=N
    	#SET	DX=N
    	#SET	DS=N
    	#SET	DP=N
    	#SET	DM=N
    	#SET	DL=N
    	#SET	DY=N
    	#SET	DD=N
    	#SET	PD=N
    	#IF	LONG
    	#PRINT	
    	#PRINT	The following questions ask about the
    	#PRINT	peripheral devices that are to be supported by the
    	#PRINT	generated system. By selecting support for a specific
    	#PRINT	device, you make the device known to the monitor's
    	#PRINT	device tables, and you cause a device handler
    	#PRINT	to be generated for the device. If you do not select
    	#PRINT	a specific device, you will have to create the
    	#PRINT	device handler separately and use the monitor
    	#PRINT	INSTALL command when device access is desired.
    	#PRINT	
    	#PRINT	RT-11 supports the following devices as system devices:
    	#IF	BLSJ
    	#PRINT		RK  RK05 Cartridge Disk
    	#PRINT		DT  DECtape
    	#PRINT		DX  Flexible Diskette
    	#PRINT		PD  PDT Intelligent Terminal
    	#IFF
    	#PRINT		RK  RK05 Cartridge Disk
    	#PRINT		DL  RL01 Cartridge Disk
    	#PRINT		RF  RF11 Fixed-head Disk
    	#PRINT		DT  DECtape
    	#PRINT		DX  RX01 Flexible Diskette
    	#PRINT		DY  RX02 Double Density Diskette
    	#PRINT		DS  RJS03/4 Massbus Fixed-head Disk
    	#PRINT		DP  RP11 Disk Pack
    	#PRINT		DM  RK06/RK07 Cartridge Disk
    	#PRINT		DD  DECtape II Data Cartridge
    	#PRINT		PD  PDT Intelligent Terminal
    	#ENDC	BLSJ
    	#PRINT	 
    	#PRINT	You must select one as your system device; use the
    	#PRINT	two character device name as indicated above.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	What is the name of the system device [DD] (RK)?SYSDV/A=RK
    	#SUBS	"S$D."SYSDV
    $S$D.SYS	= 1		;SYSTEM DEVICE
    	#SET	S$D.=Y
    	#ENDS
    	#IF	BLSJ
    	#IFN	RK
    	#IFN	DT
    	#IFN	DX
    	#IFN	PD
    	#PRINT
    	#PRINT	?SYSGEN-F-Illegal system device for base-line monitor
    	#EXIT
    	#ENDC	PD
    	#ENDC	DX
    	#ENDC	DT
    	#ENDC	RK
    	#ENDC	BLSJ
    	#IFN	BLSJ
    	#IFN	DS
    	#IFN	RF
    	#PRINT	
    	#ASK	Do you want RJS03 or RJS04 disk support [Y/N] (N)?DS/Y=N
    	#ENDC	RF
    	#ENDC	DS
    	#IF	DS
    	#PRINT	
    	#ASK	Do you want RJS03 support (as opposed to RJS04 support) [Y/N] (Y)?DS3/Y=Y
    	#IF	DS3
    RJS0$3	= 1		;RJS DISK IS RJS03
    	#IFF
    	#PRINT	
    	#PRINT	RJS04 support assumed.
    RJS0$3	= 0		;RJS DISK IS RJS04
    	#ENDC	DS3
    	#ENDC	DS
    	#IFN	DS
    	#IFN	RF
    	#PRINT	
    	#ASK	Do you want RF11 fixed-head disk support [Y/N] (N)?RF/Y=N
    	#ENDC	RF
    	#IF	RF
    	#PRINT	
    	#ASK	How many disk platters are installed on the RF11 controller [D] (1)?RFP/D=1,1,8
    	#SUBS	"RF.P"RFP
    $RFNUM	= RF.P.		;NUMBER OF RS11 PLATTERS
    	#ENDS
    	#ENDC	RF
    	#ENDC	DS
    	#IFN	DP
    	#PRINT	
    	#ASK	Do you want RP11/RPR02 or RP11/RP03 disk support [Y/N] (N)?DP/Y=N
    	#ENDC	DP
    	#IF	DP
    	#PRINT	
    	#ASK	Do you want RPR02 support (as opposed to RPR02/RP03) [Y/N] (Y)?DP2/Y=Y
    	#IF	DP2
    RP0$3	= 0		;RP11 DISK IS RP02/RPR02
    	#IFF
    RP0$3	= 1		;RP11 DISK IS RP03
    	#PRINT	
    	#PRINT	RPR02 and RP03 support assumed.
    	#ENDC	DP2
    	#ENDC	DP
    	#ENDC	BLSJ
    	#IFN	DX
    	#PRINT	
    	#ASK	Do you want RX01/RX11 flexible diskette support [Y/N] (N)?DX/Y=N
    	#ENDC	DX
    	#IF	DX
    	#IF	LONG
    	#PRINT	
    	#PRINT	The RX11 flexible diskette subsystem supports only two
    	#PRINT	drives for each controller. If your system contains four
    	#PRINT	diskette drives, there is a second controller present
    	#PRINT	supporting the third and fourth units.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want support for a second RX11 controller [Y/N] (N)?DX2/Y=N
    	#PRINT	
    	#PRINT	What is the CSR address for the
    	#ASK	-   first RX11 controller [O] (177170)?DXC1/O=177170,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the first RX11 controller [O] (264)?DXV1/O=264,100,770
    	#SUBS	"R.C"DXC1
    DX$CSR	= R.C	;CSR OF FIRST RX11
    	#SUBS	"R.V"DXV1
    DX$VEC	= R.V		;VECTOR OF FIRST RX11
    	#ENDS
    	#IF	DX2
    DXT$O	= 1		;SECOND RX11 CONTROLLER
    	#PRINT	
    	#PRINT	What is the CSR address for the
    	#ASK	-   second RX11 controller [O] (177150)?DXC/O=177150,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the second RX11 controller [O] (270)?DXV/O=270,100,770
    	#SUBS	"R.C"DXC
    DX$CS2	= R.C	;CSR OF SECOND RX11
    	#SUBS	"R.V"DXV
    DX$VC2	= R.V		;VECTOR OF SECOND RX11
    	#ENDS
    	#ENDC	DX2
    	#ENDC	DX
    	#IFN	BLSJ
    	#IFN	DY
    	#PRINT	
    	#ASK	Do you want RX02 diskette support [Y/N] (N)?DY/Y=N
    	#ENDC	DY
    	#IF	DY
    	#IF	LONG
    	#PRINT	
    	#PRINT	The RX02 diskette subsystem supports only two drives for
    	#PRINT	each controller.  If your system contains four drives,
    	#PRINT	there is a second controller present supporting the
    	#PRINT	third and fourth units.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want support for a second RX02 controller [Y/N] (N)?DY2/Y=N
    	#IF	LONG
    	#PRINT	
    	#PRINT	The RX02 diskette supports both single and double densities
    	#PRINT	by default. You can obtain a slight performance
    	#PRINT	enhancement and a reduction in the size of the device
    	#PRINT	handler by specifying double density support only.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want RX02 double density support only [Y/N] (N)?DYD/Y=N
    	#IF	DYD
    DY$DD	= 1		;RX02 DOUBLE DENSITY ONLY
    	#ENDC	DYD
    	#PRINT	
    	#PRINT	What is the CSR address for the
    	#ASK	-   first RX02 controller [O] (177170)?DYC1/O=177170,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the first RX02 controller [O] (264)?DYV1/O=264,100,770
    	#SUBS	"R.C"DYC1
    DY$CSR	= R.C	;CSR OF FIRST RX02
    	#SUBS	"R.V"DYV1
    DY$VEC	= R.V		;VECTOR OF FIRST RX02
    	#ENDS
    	#IF	DY2
    DYT$O	= 1		;SECOND RX02 CONTROLLER
    	#PRINT	
    	#PRINT	What is the CSR address for the
    	#ASK	-   second RX02 controller [O] (177150)?DYC/O=177150,160000,177564
    	#PRINT	
    	#ASK	What is the vector address for the second RX02 controller [O] (270)?DYV/O=270,100,770
    	#SUBS	"R.C"DYC
    DY$CS2	= R.C	;CSR OF SECOND RX02
    	#SUBS	"R.V"DYV
    DY$VC2	= R.V		;VECTOR OF SECOND RX02
    	#ENDS
    	#ENDC	DY2
    	#ENDC	DY
    	#IFN	DD
    	#PRINT	
    	#ASK	Do you want DECtape II Data Cartridge support [Y/N] (N)?DD/Y=N
    	#ENDC	DD
    	#IF	DD
    	#PRINT	
    	#PRINT	What is the CSR address for the
    	#ASK	-	DECtape II controller [O] (176500)?DDC/O=176500,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the DECtape II controller [O] (300)?DDV/O=300,100,770
    	#SUBS	"R.C"DDC
    DD$CSR	= R.C	;CSR OF DECTAPE II
    	#SUBS	"R.V"DDV
    DD$VEC	= R.V		;VECTOR OF DECTAPE II
    	#ENDS
    	#ENDC	DD
    	#IFN	DL
    	#PRINT	
    	#ASK	Do you want RL01 disk support [Y/N] (N)?DL/Y=N
    	#ENDC	DL
    	#IF	DL
    	#PRINT	
    	#ASK	How many RL01 units are to be supported [D] (2)?DLUNIT/D=2,1,4
    	#SUBS	"U.N"DLUNIT
    DL$UN	= U.N		;NUMBER OF RL01 UNITS
    	#ENDC	DL
    	#ENDC	BLSJ
    	#IFN	RK
    	#PRINT	
    	#ASK	Do you want RK05/RK05F disk support [Y/N] (N)?RK/Y=N
    	#ENDC	RK
    	#IFN	DT
    	#PRINT	
    	#ASK	Do you want TC11 DECtape support [Y/N] (N)?DT/Y=N
    	#ENDC	DT
    	#IFN	BLSJ
    	#IFN	DM
    	#PRINT	
    	#ASK	Do you want RK06/RK07 disk support [Y/N] (N)?DM/Y=N
    	#ENDC	DM
    	#PRINT	
    	#ASK	Do you want magnetic tape support [Y/N] (N)?MTSP/Y=N
    	#IFN	MTSP
    	#SET	TM=N
    	#SET	TJU=N
    	#IFF
    	#IF	LONG
    	#PRINT	
    	#PRINT	RT-11 magtape support is available in two forms. The standard
    	#PRINT	form is file-structured magtape, which supports a subset of
    	#PRINT	ANSI file format. The file-structured handler may be used to
    	#PRINT	store and retrieve data in a file format usable with most
    	#PRINT	RT-11 system programs. The second form of magtape support
    	#PRINT	omits file structuring and reads and writes data directly in variable
    	#PRINT	length records. This type of support is called the "hardware
    	#PRINT	handler", and while this handler is significantly smaller than
    	#PRINT	the file-structured handler, it can not be used with any
    	#PRINT	system programs. The file-structured handler is also
    	#PRINT	capable of performing direct hardware functions.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want the file-structured magtape handler [Y/N] (Y)?MTF/Y=Y
    	#IF	MTF
    FILES	= 1		;MAGTAPE FILES SUPPORT
    	#IF	LONG
    	#PRINT	
    	#PRINT	The file-structured handler requires table space for
    	#PRINT	each magtape unit. You can minimize the size of
    	#PRINT	the magtape handler by limiting the number of units it can
    	#PRINT	simultaneously handle to the number actually present on the
    	#PRINT	target machine.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	How many magtape units are to be supported [D] (2)?DRIVEN/D=2,1,8
    	#SUBS	"D.N"DRIVEN
    DRIVEN	= D.N.		;NUMBER OF MAGTAPE UNITS
    	#ENDS
    	#ENDC	MTF
    	#PRINT	
    	#ASK	Do you want TM11 (UNIBUS) magtape support [Y/N] (Y)?TM/Y=Y
    	#IF	TM
    	#SET	TJU=N
    	#IFF
    	#PRINT	
    	#ASK	Do you want TJU16 (MASSBUS) magtape support [Y/N] (Y)?TJU/Y=Y
    	#IFN	TJU
    	#PRINT	
    	#PRINT	?SYSGEN-F-Magtape specification error
    	#PRINT	
    	#EXIT
    	#ENDC	TJU
    	#ENDC	TM
    	#ENDC	MTSP
    	#PRINT	
    	#ASK	Do you want TA11 cassette support [Y/N] (N)?CT/Y=N
    	#PRINT	
    	#ASK	Do you want VT11 or VS60 graphics support [Y/N] (N)?GRAFX/Y=N
    	#IF	GRAFX
    	#PRINT	
    	#ASK	Do you want VS60 support [Y/N] (N)?VS60$/Y=N
    	#IF	VS60$
    VS60$	= 1		;SUPPORT VS60 DISPLAY
    	#IFF
    VT11$	= 1		;SUPPORT VT11 DISPLAY
    	#PRINT	
    	#PRINT	VT11 hardware is assumed.
    	#ENDC	VS60$
    	#IF	LONG
    	#PRINT	
    	#PRINT	The VT11/VS60 is normally installed at vector 320 with
    	#PRINT	its CSR address at 172000, but these addresses may float.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	What is the CSR address for the VT11/VS60 [O] (172000)?VC/O=172000,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the VT11/VS60 [O] (320)?VV/O=320,300,770
    	#SUBS	"V.C"VC
    VT.CSR	= V.C	;VT11/VS60 CSR
    	#SUBS	"V.V"VV
    VT.VEC	= V.V		;VT11/VS60 VECTOR
    	#ENDS
    	#ENDC	GRAFX
    	#ENDC	BLSJ
    	#PRINT	
    	#ASK	Do you want line printer support [Y/N] (Y)?LP/Y=Y
    	#IF	LP
    	#IF	LONG
    	#PRINT	
    	#PRINT	The line printer vector address is normally 200
    	#PRINT	and the CSR address is normally 177514. If your printer
    	#PRINT	is installed at another vector or CSR address, you
    	#PRINT	must specify the correct values.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Does your printer have a non-standard vector or CSR address [Y/N] (N)?NSLP/Y=N
    	#IF	NSLP
    	#PRINT	
    	#ASK	What is the CSR address for the printer [O] (177514)?LPCS/O=177514,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the printer [O] (200)?LPVC/O=200,100,770
    	#SUBS	"LPC$"LPCS
    LP$CSR	= LPC$	;LINE PRINTER CSR
    	#SUBS	"LPV$"LPVC
    LP$VEC	= LPV$		;LINE PRINTER VECTOR
    	#ENDS
    	#ENDC	NSLP
    	#ENDC	LP
    	#IF	LONG
    	#PRINT	
    	#PRINT	The PC11 is a high speed paper tape reader/punch unit.
    	#PRINT	The PR11 is a similar unit with a high speed reader but no punch.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want PC11 high-speed paper tape reader/punch support [Y/N] (N)?PC/Y=N
    	#IF	PC
    	#SET	PR=N
    PR11$X	= 0		;PC11 HI-SPEED READER/PUNCH
    	#IFF
    	#PRINT	
    	#ASK	Do you want PR11 high-speed paper tape reader support [Y/N] (N)?PR/Y=N
    	#IF	PR
    PR11$X	= 1		;PR11 HI-SPEED READER
    	#ENDC	PR
    	#ENDC	PC
    	#IFN	BLSJ
    	#PRINT	
    	#ASK	Do you want card reader support [Y/N] (N)?CR/Y=N
    	#ENDC	BLSJ
    	#IF	LONG
    	#PRINT	
    	#PRINT	The null handler is a mechanism that allows logical
    	#PRINT	input and output to take place without actual physical
    	#PRINT	data transfers. It is most useful in debugging applications.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want the null handler [Y/N] (Y)?NULL/Y=Y
    	#IF	LONG
    	#PRINT	
    	#PRINT	This completes the device query. Space in the monitor is allocated
    	#PRINT	only for the devices specified, but you may allocate additional
    	#PRINT	space by requesting empty device slots. Allocate
    	#PRINT	one empty slot for each device you intend to add to
    	#PRINT	the system after it is built.
    	#ENDC	LONG	
    	#PRINT	
    	#ASK	How many extra device slots do you want [D] (0)?EMPTY/D=0,0,10
    	#IF	LONG
    	#PRINT	
    	#PRINT	The indirect command files generated by the SYSGEN program
    	#PRINT	contain commands that will delete the object modules
    	#PRINT	from which the system is built when they are
    	#PRINT	no longer needed. This measure serves to conserve disk
    	#PRINT	space while the system is being built. It is often useful,
    	#PRINT	however, to keep the object modules for later use in
    	#PRINT	patching the system. If your output device
    	#PRINT	has sufficient free space,you can elect to retain all
    	#PRINT	system object modules for future use.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want to retain the system OBJ's [Y/N] (N)?OBJ/Y=N
    	#IF	MTTY
    	#IF	LONG
    	#PRINT	
    	#PRINT	The following questions ask about the terminal
    	#PRINT	interfaces installed in your system. RT-11 supports a
    	#PRINT	combination of serial asynchronous interfaces which include
    	#PRINT	the KL11, DLV11, DLV11-E, DLV11-F, DLV11-J, and the DL11
    	#PRINT	series.  It also supports DL11-E and DLV11-E interfaces with
    	#PRINT	modem capabilities, and the DZ11 and DZV11 series of
    	#PRINT	asynchronous line multiplexors.
    	#PRINT	 
    	#PRINT	The dialogue asks first for the number of local DL11
    	#PRINT	lines, then the number of remote DL11 lines. The total
    	#PRINT	number of lines is the sum of local and remote
    	#PRINT	lines. Physical unit numbers of the DL11 lines are assigned
    	#PRINT	first to local lines and then to remote lines. This assignment
    	#PRINT	is permanent and its order cannot be changed.
    	#PRINT	
    	#PRINT	After the dialogue has established the number of lines of each
    	#PRINT	type, the CSR and vector addresses for each line must be
    	#PRINT	established. The first question corresponds to the first
    	#PRINT	local line (the console), the second to the second local
    	#PRINT	line, etc. until all local lines are accounted for. At that
    	#PRINT	point, the next response applies to the first remote
    	#PRINT	line, the second to the second remote line, etc. until all
    	#PRINT	remote lines are accounted for.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	How many local DL11's, including the console [D] (1)?DLNUM/D=1,1,8
    	#SUBS	"DLN$"DLNUM
    DL11$L	= DLN$.		;# OF LOCAL DL11 INTERFACES (MULTI-TERM SUPPORT)
    	#PRINT	
    	#ASK	How many remote DL11 lines [D] (0)?DLMDM/D=0,0,7
    	#SUBS	"DLM$"DLMDM
    DL11$M	= DLM$.		;# OF REMOTE DL11-E LINES (MULTI-TERM SUPPORT)
    DL11$N	= DLN$. + DLM$.	;TOTAL # OF DL11 LINES (MULTI-TERM SUPPORT)
    	#ENDS
    	#PRINT	
    	#PRINT	What is the CSR address for the
    	#ASK	-   first (console) DL11 [O] (177560)?DLC/O=177560,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the first (console) DL11 [O] (60)?DLV/O=60,60,770
    	#SUBS	"DL.C"DLC
    	#SUBS	"DL.V"DLV
    DLC$0	= DL.C	;CSR OF 1ST (CONSOLE) DL11 (MULTI-TERM SUPPORT)
    DLV$0	= DL.V		;VECTOR OF 1ST (CONSOLE) DL11 (MULTI-TERM SUPPORT)
    	#ENDS
    	#DECR	DLNUM
    	#IFGT	DLNUM
    	#PRINT	
    	#ASK	What is the CSR address for the next (local) DL11 [O] (176500)?DLC/O=176500,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the next (local) DL11 [O] (300)?DLV/O=300,60,770
    	#SUBS	"DL.C"DLC
    	#SUBS	"DL.V"DLV
    DLC$1	= DL.C	;CSR OF 2ND (LOCAL) DL11 (MULTI-TERM SUPPORT)
    DLV$1	= DL.V		;VECTOR OF 2ND (LOCAL) DL11 (MULTI-TERM SUPPORT)
    	#ENDS
    	#IFF
    	#IFGT	DLMDM
    	#PRINT	
    	#ASK	What is the CSR address for the next (remote) DL11 [O] (175610)?DLC/O=175610,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the next (remote) DL11 [O] (300)?DLV/O=300,60,770
    	#SUBS	"DL.C"DLC
    	#SUBS	"DL.V"DLV
    DLC$1	= DL.C	;CSR OF 2ND (REMOTE) DL11 (MULTI-TERM SUPPORT)
    DLV$1	= DL.V		;VECTOR OF 2ND (REMOTE) DL11 (MULTI-TERM SUPPORT)
    	#ENDS
    	#DECR	DLMDM
    	#ENDC	DLMDM
    	#ENDC	DLNUM
    	#DECR	DLNUM
    	#IFGT	DLNUM
    	#PRINT	
    	#ASK	What is the CSR address for the next (local) DL11 [O] (176510)?DLC/O=176510,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the next (local) DL11 [O] (310)?DLV/O=310,60,770
    	#SUBS	"DL.C"DLC
    	#SUBS	"DL.V"DLV
    DLC$2	= DL.C	;CSR OF 3RD (LOCAL) DL11 (MULTI-TERM SUPPORT)
    DLV$2	= DL.V		;VECTOR OF 3RD (LOCAL) DL11 (MULTI-TERM SUPPORT)
    	#ENDS
    	#IFF
    	#IFGT	DLMDM
    	#PRINT	
    	#ASK	What is the CSR address for the next (remote) DL11 [O] (175620)?DLC/O=175620,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the next (remote) DL11 [O] (310)?DLV/O=310,60,770
    	#SUBS	"DL.C"DLC
    	#SUBS	"DL.V"DLV
    DLC$2	= DL.C	;CSR OF 3RD (REMOTE) DL11 (MULTI-TERM SUPPORT)
    DLV$2	= DL.V		;VECTOR OF 3RD (REMOTE) DL11 (MULTI-TERM SUPPORT)
    	#ENDS
    	#DECR	DLMDM
    	#ENDC	DLMDM
    	#ENDC	DLNUM
    	#DECR	DLNUM
    	#IFGT	DLNUM
    	#PRINT	
    	#ASK	What is the CSR address for the next (local) DL11 [O] (176520)?DLC/O=176520,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the next (local) DL11 [O] (320)?DLV/O=320,60,770
    	#SUBS	"DL.C"DLC
    	#SUBS	"DL.V"DLV
    DLC$3	= DL.C	;CSR OF 4TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
    DLV$3	= DL.V		;VECTOR OF 4TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
    	#ENDS
    	#IFF
    	#IFGT	DLMDM
    	#PRINT	
    	#ASK	What is the CSR address for the next (remote) DL11 [O] (175630)?DLC/O=175630,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the next (remote) DL11 [O] (320)?DLV/O=320,60,770
    	#SUBS	"DL.C"DLC
    	#SUBS	"DL.V"DLV
    DLC$3	= DL.C	;CSR OF 4TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
    DLV$3	= DL.V		;VECTOR OF 4TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
    	#ENDS
    	#DECR	DLMDM
    	#ENDC	DLMDM
    	#ENDC	DLNUM
    	#DECR	DLNUM
    	#IFGT	DLNUM
    	#PRINT	
    	#ASK	What is the CSR address for the next (local) DL11 [O] (176530)?DLC/O=176530,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the next (local) DL11 [O] (330)?DLV/O=330,60,770
    	#SUBS	"DL.C"DLC
    	#SUBS	"DL.V"DLV
    DLC$4	= DL.C	;CSR OF 5TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
    DLV$4	= DL.V		;VECTOR OF 5TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
    	#ENDS
    	#IFF
    	#IFGT	DLMDM
    	#PRINT	
    	#ASK	What is the CSR address for the next (remote) DL11 [O] (175640)?DLC/O=175640,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the next (remote) DL11 [O] (330)?DLV/O=330,60,770
    	#SUBS	"DL.C"DLC
    	#SUBS	"DL.V"DLV
    DLC$4	= DL.C	;CSR OF 5TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
    DLV$4	= DL.V		;VECTOR OF 5TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
    	#ENDS
    	#DECR	DLMDM
    	#ENDC	DLMDM
    	#ENDC	DLNUM
    	#DECR	DLNUM
    	#IFGT	DLNUM
    	#PRINT	
    	#ASK	What is the CSR address for the next (local) DL11 [O] (176540)?DLC/O=176540,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the next (local) DL11 [O] (340)?DLV/O=340,60,770
    	#SUBS	"DL.C"DLC
    	#SUBS	"DL.V"DLV
    DLC$5	= DL.C	;CSR OF 6TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
    DLV$5	= DL.V		;VECTOR OF 6TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
    	#ENDS
    	#IFF
    	#IFGT	DLMDM
    	#PRINT	
    	#ASK	What is the CSR address for the next (remote) DL11 [O] (175650)?DLC/O=175650,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the next (remote) DL11 [O] (340)?DLV/O=340,60,770
    	#SUBS	"DL.C"DLC
    	#SUBS	"DL.V"DLV
    DLC$5	= DL.C	;CSR OF 6TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
    DLV$5	= DL.V		;VECTOR OF 6TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
    	#ENDS
    	#DECR	DLMDM
    	#ENDC	DLMDM
    	#ENDC	DLNUM
    	#DECR	DLNUM
    	#IFGT	DLNUM
    	#PRINT	
    	#ASK	What is the CSR address for the next (local) DL11 [O] (176550)?DLC/O=176550,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the next (local) DL11 [O] (350)?DLV/O=350,60,770
    	#SUBS	"DL.C"DLC
    	#SUBS	"DL.V"DLV
    DLC$6	= DL.C	;CSR OF 7TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
    DLV$6	= DL.V		;VECTOR OF 7TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
    	#ENDS
    	#IFF
    	#IFGT	DLMDM
    	#PRINT	
    	#ASK	What is the CSR address for the next (remote) DL11 [O] (175660)?DLC/O=175660,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the next (remote) DL11 [O] (350)?DLV/O=350,60,770
    	#SUBS	"DL.C"DLC
    	#SUBS	"DL.V"DLV
    DLC$6	= DL.C	;CSR OF 7TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
    DLV$6	= DL.V		;VECTOR OF 7TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
    	#ENDS
    	#DECR	DLMDM
    	#ENDC	DLMDM
    	#ENDC	DLNUM
    	#DECR	DLNUM
    	#IFGT	DLNUM
    	#PRINT	
    	#ASK	What is the CSR address for the next (local) DL11 [O] (176560)?DLC/O=176560,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the next (local) DL11 [O] (360)?DLV/O=360,60,770
    	#SUBS	"DL.C"DLC
    	#SUBS	"DL.V"DLV
    DLC$7	= DL.C	;CSR OF 8TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
    DLV$7	= DL.V		;VECTOR OF 8TH (LOCAL) DL11 (MULTI-TERM SUPPORT)
    	#ENDS
    	#IFF
    	#IFGT	DLMDM
    	#PRINT	
    	#ASK	What is the CSR address for the next (remote) DL11 [O] (175670)?DLC/O=175670,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the next (remote) DL11 [O] (360)?DLV/O=360,60,770
    	#SUBS	"DL.C"DLC
    	#SUBS	"DL.V"DLV
    DLC$7	= DL.C	;CSR OF 8TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
    DLV$7	= DL.V		;VECTOR OF 8TH (REMOTE) DL11 (MULTI-TERM SUPPORT)
    	#ENDS
    	#DECR	DLMDM
    	#ENDC	DLMDM
    	#ENDC	DLNUM
    	#IF	LONG
    	#PRINT	
    	#PRINT	RT-11 supports one DZ11-A or -B eight line multiplexor
    	#PRINT	with an additional DZ11-C or -D eight line multiplexor
    	#PRINT	for a maximum of 16 lines,or one DZV11 four line
    	#PRINT	multiplexor.  Modem support is available on
    	#PRINT	remote lines, but is limited to Bell 103 type modems or
    	#PRINT	equivalent with the "common clear to send and carrier"
    	#PRINT	option installed to operate the modem in an auto-answer mode.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want DZ11 or DZV11 multiplexor support [Y/N] (N)?DZNEED/Y=N
    	#IFN	DZNEED
    DZ11$N	= 0		;NO DZ11 OR DZV11 SUPPORT (MULTI-TERM SUPPORT)
    	#IFF	
    	#PRINT	
    	#ASK	Do you want DZ11 multiplexor support [Y/N] (Y)?DZ11/Y=Y
    	#IF	DZ11
    	#PRINT	
    	#ASK	Do you want support for two DZ11's [Y/N] (N)?DZTWO/Y=N
    	#IF	DZTWO
    DZ11$N	= 2		;# OF DZ11 MULTIPLEXORS (MULTI-TERM SUPPORT)
    	#IFF	
    DZ11$N	= 1		;# OF DZ11 MULTIPLEXORS (MULTI-TERM SUPPORT)
    	#ENDC	DZTWO
    	#IFF	
    	#PRINT	
    	#PRINT	One DZV11 four line multiplexor assumed.
    DZ11$N	= 1		;# OF DZV11 MULTIPLEXORS (MULTI-TERM SUPPORT)
    	#ENDC	DZ11
    	#IF	LONG
    	#PRINT	
    	#PRINT	The lines must be initialized to a specific baud
    	#PRINT	rate. The choices are 300, 150, and 110 baud.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want the lines initialized to 300 baud [Y/N] (Y)?B300/Y=Y
    	#IF	B300
    DZSP$D	= 2400		;INIT TO 300 BAUD (MULTI-TERM SUPPORT)
    DZST$P	= 0		;1 STOP UNIT (MULTI-TERM SUPPORT)
    	#IFF
    	#PRINT	
    	#ASK	Do you want the lines initialized to 150 baud [Y/N] (Y)?B150/Y=Y
    	#IF	B150
    DZSP$D	= 2000		;INIT TO 150 BAUD (MULTI-TERM SUPPORT)
    DZST$P	= 0		;1 STOP UNIT (MULTI-TERM SUPPORT)
    	#IFF
    DZSP$D	= 1000		;INIT TO 110 BAUD (MULTI-TERM SUPPORT)
    DZST$P	= 40		;2 STOP UNITS (MULTI-TERM SUPPORT)
    	#PRINT	
    	#PRINT	110 baud is assumed.
    	#ENDC	B150
    	#ENDC	B300
    	#IF	LONG
    	#PRINT	
    	#PRINT	The vectors and CSR addresses are assigned to the floating
    	#PRINT	device region and will vary with each installation.
    	#ENDC	LONG
    	#IFN	DZ11
    	#PRINT	
    	#ASK	What is the CSR address for the DZV11 [O] (160010)?DZ1/O=160010,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the DZV11 [O] (300)?DZV1/O=300,60,770
    	#SUBS	"DZCS1"DZ1
    	#SUBS	"DZVEC1"DZV1
    DZVC$0	= DZVEC1		;VECTOR OF FIRST DZ11 (MULTI-TERM SUPPORT)
    DZCS$0	= DZCS1	;CSR OF FIRST DZ11 (MULTI-TERM SUPPORT)
    	#ENDS
    	#IFF	
    	#PRINT	
    	#ASK	What is the CSR address for the first DZ11 [O] (160010)?DZ1/O=160010,160000,177570
    	#PRINT	
    	#ASK	What is the vector address for the first DZ11 [O] (300)?DZV1/O=300,60,770
    	#SUBS	"DZCS1"DZ1
    	#SUBS	"DZVEC1"DZV1
    DZVC$0	= DZVEC1		;VECTOR OF FIRST DZ11 (MULTI-TERM SUPPORT)
    DZCS$0	= DZCS1	;CSR OF FIRST DZ11 (MULTI-TERM SUPPORT)
    	#ENDS
    	#IF	DZTWO
    	#PRINT	
    	#ASK	What is the CSR address for the second DZ11 [O] (160020)?DZ2/O=160020,160000,177570
    	#PRINT	
    	#ASK	What is the vector address of the second DZ11 [O] (310)?DZV2/O=310,60,770
    	#SUBS	"DZCS2"DZ2
    	#SUBS	"DZVEC2"DZV2
    DZVC$1	= DZVEC2		;VECTOR OF SECOND DZ11 (MULTI-TERM SUPPORT)
    DZCS$1	= DZCS2	;CSR OF SECOND DZ11 (MULTI-TERM SUPPORT)
    	#ENDS
    	#ENDC	DZTWO
    	#ENDC	DZ11
    	#IF	LONG
    	#PRINT	
    	#PRINT	The following dialogue will ask for the number of local
    	#PRINT	DZ11 or DZV11 lines, then the number of remote lines.
    	#PRINT	The total number of lines is the sum of local and remote
    	#PRINT	lines. Physical unit numbers of the DZ11 or DZV11 lines
    	#PRINT	are assigned first to local lines and then to remote
    	#PRINT	lines. This assignment is permanent and its order cannot
    	#PRINT	be changed.
    	#ENDC	LONG
    	#IF	DZ11
    	#PRINT	
    	#ASK	How many DZ11 lines are local terminals [D] (0)?DZLCL/D=0,0,16
    	#PRINT	
    	#ASK	How many remote DZ11 lines [D] (0)?DZM/D=0,0,16
    	#IFF	
    	#PRINT	
    	#ASK	How many DZV11 lines are local terminals [D] (0)?DZLCL/D=0,0,4
    	#PRINT	
    	#ASK	How many remote DZV11 lines [D] (0)?DZM/D=0,0,4
    	#ENDC	DZ11
    	#SUBS	"DZL$"DZLCL
    DZ11$L	= DZL$.		;# OF LOCAL DZ11 LINES (MULTI-TERM SUPPORT)
    	#ENDS
    	#SUBS	"DZM$"DZM
    DZ11$M	= DZM$.		;# OF REMOTE DZ11 LINES (MULTI-TERM SUPPORT)
    	#ENDS
    	#IFGT	DZM
    	#IFN	TIME
    TIM$IT	= 1		;GENERAL DEVICE TIME OUT (MULTI-TERM SUPPORT)
    	#SET	TIME=Y
    	#ENDC	TIME
    	#ENDC	DZM
    	#ENDC	DZNEED
    	#IF	LONG
    	#PRINT	
    	#PRINT	The terminal service requires a set of input and output
    	#PRINT	ring buffers for each terminal supported. The output ring
    	#PRINT	buffer default size is 40 characters. The input ring size
    	#PRINT	depends on terminal width and amount of type-ahead
    	#PRINT	expected. The default size is 82 characters.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Size of the output buffers in characters [D] (40)?ORNG/D=40,10,132
    	#PRINT	
    	#ASK	Size of the input buffers in characters [D] (82)?IRNG/D=82,74,132
    	#SUBS	"O.R"ORNG
    	#SUBS	"I.R"IRNG
    TTYOUT	= O.R.		;SIZE OF OUTPUT RING BUFFERS(MULTI-TERM SUPPORT)
    TTYIN	= I.R.		;SIZE OF INPUT RING BUFFERS (MULTI-TERM SUPPORT)
    	#ENDS
    	#IF	LONG
    	#PRINT	
    	#PRINT	Terminal status may be obtained by doing an .MTGET request
    	#PRINT	but some applications require asynchronous notification of 
    	#PRINT	changes in terminal status. RT-11 supports asynchronous
    	#PRINT	terminal status as an option to the .MTATCH
    	#PRINT	request and provides information on buffer and modem
    	#PRINT	status as well as double CTRL/C.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want asynchronous terminal status [Y/N] (Y)?MATS/Y=Y
    	#IF	MATS
    MAT$S	= 1		;ASYNCHRONOUS TERMINAL STATUS (MULTI-TERM SUPPORT)
    	#ENDC	MATS
    	#IF	LONG
    	#PRINT	
    	#PRINT	Time-out support will cause the monitor to reset at regular
    	#PRINT	intervals any terminal that may have gone off-line. This
    	#PRINT	helps to minimize the impact of static (and similar)
    	#PRINT	problems, and is recommended if maximum availability
    	#PRINT	is important to the application.
    	#ENDC	LONG
    	#PRINT	
    	#ASK	Do you want multi-terminal time-out support [Y/N] (Y)?MTTO/Y=Y
    	#IF	MTTO
    MTI$M	= 1		;TERMINAL TIME OUT (MULTI-TERM SUPPORT)
    	#IFN	TIME
    TIM$IT	= 1		;GENERAL DEVICE TIME OUT (MULTI-TERM SUPPORT)
    	#SET	TIME=N
    	#ENDC	TIME
    	#ENDC	MTTO
    	#ENDC	MTTY
    	#CALL	SYSTBL.CND
    	#NAME	SYSBLD
    	#FILE	SYSBLD.COM
    @MONBLD
    @DEVBLD
    	#NAME	MONBLD
    	#FILE	MONBLD.COM
    !	MONBLD.COM
    !         
    	#IF	LONG
    	#PRINT	
    	#PRINT	The SYSGEN assembling and linking process requires a
    	#PRINT	source input and a binary output device, as well as an
    	#PRINT	output device for monitor link maps. You must specify
    	#PRINT	the physical name and unit number for each (for example,
    	#PRINT	RK1, DP4, etc.). For more explanation, see
    	#PRINT	Section 3.6.1 of the RT-11 System Generation Manual.
    	#ENDC	LONG
    	#PRINT	
    	#PRINT	What is the PHYSICAL name and unit of the
    	#ASK	-   source input device [DDU] (RK1)?IN/A=RK1
    	#SUBS	"IN$"IN
    ASS IN$ SRC
    	#PRINT	
    	#PRINT	What is the PHYSICAL name and unit of the
    	#ASK	-   binary output device [DDU] (RK0)?OUT/A=RK0
    	#SUBS	"OUT$"OUT
    ASS OUT$ BIN
    	#PRINT	
    	#PRINT	What is the PHYSICAL name and unit of the
    	#ASK	-   map output device [DDU] (TT)?MAP/A=TT
    	#SUBS	"MAP$"MAP
    ASS MAP$ MAP
    	#ENDS
    	#IF	BLSJ
    MACRO/OBJ:BIN:KMBL SRC:(SJ+SYCND+EDTGBL+KMON+KMOVLY)
    MACRO/OBJ:BIN:RMBL SRC:(SJ+SYCND+EDTGBL+USR+RMONSJ)
    	#SUBS	"S$D."SYSDV
    MACRO/OBJ:BIN:SYBL SRC:(SJ+SYCND+SYSDEV+S$D.)
    	#ENDS
    MACRO/OBJ:BIN:TBBL SRC:(SJ+SYCND+SYSTBL)
    MACRO/OBJ:BIN:BTBL SRC:(SJ+SYCND+BSTRAP)
    	#SUBS	"S$D."SYSDV
    LINK/EXE:BIN:S$D.MNSJ.BLG/BOU:1000/MAP:MAP:S$D.MNSJ
    BIN:(BT,RM,KM,TB,SY)BL
    	#ENDS
    OVLY0
    	#IFN	OBJ
    DELETE/NOQ BIN:(BT,RM,KM,TB,SY)BL.OBJ
    	#ENDC	OBJ
    	#ENDC	BLSJ
    	#IF	SJ
    MACRO/OBJ:BIN:KMSJ SRC:(SJ+SYCND+EDTGBL+KMON+KMOVLY)
    MACRO/OBJ:BIN:RMSJ SRC:(SJ+SYCND+EDTGBL+USR+RMONSJ)
    	#SUBS	"S$D."SYSDV
    MACRO/OBJ:BIN:SYSJ SRC:(SJ+SYCND+SYSDEV+S$D.)
    	#ENDS
    MACRO/OBJ:BIN:TBSJ SRC:(SJ+SYCND+SYSTBL)
    MACRO/OBJ:BIN:BTSJ SRC:(SJ+SYCND+BSTRAP)
    	#SUBS	"S$D."SYSDV
    LINK/EXE:BIN:S$D.MNSJ.SYG/BOU:1000/MAP:MAP:S$D.MNSJ
    BIN:(BT,RM,KM,TB,SY)SJ
    	#ENDS
    OVLY0
    	#IFN	OBJ
    DELETE/NOQ BIN:(BT,RM,KM,TB,SY)SJ.OBJ
    	#ENDC	OBJ
    	#ENDC	SJ
    	#IF	FB
    MACRO/OBJ:BIN:KMFB SRC:(FB+SYCND+EDTGBL+KMON+KMOVLY)
    MACRO/OBJ:BIN:RMFB SRC:(FB+SYCND+EDTGBL+USR+RMONFB)
    	#SUBS	"S$D."SYSDV
    MACRO/OBJ:BIN:SYFB SRC:(FB+SYCND+SYSDEV+S$D.)
    	#ENDS
    MACRO/OBJ:BIN:TBFB SRC:(FB+SYCND+SYSTBL)
    MACRO/OBJ:BIN:BTFB SRC:(FB+SYCND+BSTRAP)
    	#IF	MTTY
    MACRO/OBJ:BIN:MEFB SRC:(FB+SYCND+MTTEMT)
    MACRO/OBJ:BIN:MIFB SRC:(FB+SYCND+MTTINT)
    	#SUBS	"S$D."SYSDV
    LINK/EXE:BIN:S$D.MNFB.SYG/BOU:1000/PROMPT/MAP:MAP:S$D.MNFB BIN:BTFB
    BIN:RMFB,KMFB,MEFB,MIFB,TBFB,SYFB//
    	#ENDS
    OVLY0
    	#IFN	OBJ
    DELETE/NOQ BIN:(BT,RM,ME,MI,TB,SY)FB.OBJ
    DELETE/NOQ BIN:KMFB.OBJ
    	#ENDC	OBJ
    	#IFF
    	#SUBS	"S$D."SYSDV
    LINK/EXE:BIN:S$D.MNFB.SYG/BOU:1000/MAP:MAP:S$D.MNFB
    BIN:(BT,RM,KM,TB,SY)FB
    	#ENDS
    OVLY0
    	#IFN	OBJ
    DELETE/NOQ BIN:(BT,RM,KM,TB,SY)FB.OBJ
    	#ENDC	OBJ
    	#ENDC	MTTY
    	#ENDC	FB
    	#IF	XM
    MACRO/OBJ:BIN:KMXM SRC:(XM+SYCND+EDTGBL+KMON+KMOVLY)
    MACRO/OBJ:BIN:RMXM SRC:(XM+SYCND+EDTGBL+USR+RMONFB)
    	#SUBS	"S$D."SYSDV
    MACRO/OBJ:BIN:SYXM SRC:(XM+SYCND+SYSDEV+S$D.)
    	#ENDS
    MACRO/OBJ:BIN:TBXM SRC:(XM+SYCND+SYSTBL)
    MACRO/OBJ:BIN:BTXM SRC:(XM+SYCND+BSTRAP)
    	#IF	MTTY
    MACRO/OBJ:BIN:MEXM SRC:(XM+SYCND+MTTEMT)
    MACRO/OBJ:BIN:MIXM SRC:(XM+SYCND+MTTINT)
    	#SUBS	"S$D."SYSDV
    LINK/EXE:BIN:S$D.MNXM.SYG/BOU:1000/PROMPT/MAP:MAP:S$D.MNXM BIN:BTXM
    BIN:RMXM,KMXM,MEXM,MIXM,TBXM,SYXM//
    	#ENDS
    OVLY0
    	#IFN	OBJ
    DELETE/NOQ BIN:(BT,RM,ME,MI,TB,SY)XM.OBJ
    DELETE/NOQ BIN:KMXM.OBJ
    	#ENDC	OBJ
    	#IFF
    	#SUBS	"S$D."SYSDV
    LINK/EXE:BIN:S$D.MNXM.SYG/BOU:1000/MAP:MAP:S$D.MNXM
    BIN:(BT,RM,KM,TB,SY)XM
    	#ENDS
    OVLY0
    	#IFN	OBJ
    DELETE/NOQ BIN:(BT,RM,KM,TB,SY)XM.OBJ
    	#ENDC	OBJ
    	#ENDC	MTTY
    	#ENDC	XM
    	#NAME	DEVBLD
    	#FILE	DEVBLD.COM
    !	DEVBLD.COM
    !
    	#SUBS	"IN$"IN
    ASS IN$ SRC
    	#SUBS	"OUT$"OUT
    ASS OUT$ BIN
    	#ENDS
    	#IF	SJ
    MACRO/OBJ:BIN:TT SRC:(SYCND+TT)
    LINK/EXE:BIN:TT.SYG BIN:TT
    	#IFN	OBJ
    DELETE/NOQ BIN:TT.OBJ	
    	#ENDC	OBJ
    	#ENDC	SJ
    	#IF	BLSJ
    MACRO/OBJ:BIN:TT SRC:(SYCND+TT)
    LINK/EXE:BIN:TT.SYG BIN:TT
    	#IFN	OBJ
    DELETE/NOQ BIN:TT.OBJ
    	#ENDC	OBJ
    	#ENDC	BLSJ
    	#IF	ERL$G
    	#IF	BLSJFB
    MACRO/OBJ:BIN:EL SRC:(SYCND+EL)
    LINK/EXE:BIN:EL.SYG BIN:EL
    	#IFN	OBJ
    DELETE/NOQ BIN:EL.OBJ	
    	#ENDC	OBJ
    	#ENDC	BLSJFB
    	#IF	XM
    MACRO/OBJ:BIN:ELX SRC:(XM+SYCND+EL)
    LINK/EXE:BIN:ELX.SYG BIN:ELX
    	#IFN	OBJ
    DELETE/NOQ BIN:ELX.OBJ	
    	#ENDC	OBJ
    	#ENDC	XM
    	#ENDC	ERL$G
    	#IF	BATC$H
    	#IF	BLSJFB
    MACRO/OBJ:BIN:BA SRC:(SYCND+BA)
    LINK/EXE:BIN:BA.SYG BIN:BA
    	#IFN	OBJ
    DELETE/NOQ BIN:BA.OBJ	
    	#ENDC	OBJ
    	#ENDC	BLSJFB
    	#IF	XM
    MACRO/OBJ:BIN:BAX SRC:(XM+SYCND+BA)
    LINK/EXE:BIN:BAX.SYG BIN:BAX
    	#IFN	OBJ
    DELETE/NOQ BIN:BAX.OBJ	
    	#ENDC	OBJ
    	#ENDC	XM
    	#ENDC	BATC$H
    	#IF	LP
    	#IF	BLSJFB
    MACRO/OBJ:BIN:LP SRC:(SYCND+LP)
    LINK/EXE:BIN:LP.SYG BIN:LP
    	#IFN	OBJ
    DELETE/NOQ BIN:LP.OBJ	
    	#ENDC	OBJ
    	#ENDC	BLSJFB
    	#IF	XM
    MACRO/OBJ:BIN:LPX SRC:(XM+SYCND+LP)
    LINK/EXE:BIN:LPX.SYG BIN:LPX
    	#IFN	OBJ
    DELETE/NOQ BIN:LPX.OBJ	
    	#ENDC	OBJ
    	#ENDC	XM
    	#ENDC	LP
    	#IF	RK
    	#IF	BLSJFB
    MACRO/OBJ:BIN:RK SRC:(SYCND+RK)
    LINK/EXE:BIN:RK.SYG BIN:RK
    	#IFN	OBJ
    DELETE/NOQ BIN:RK.OBJ	
    	#ENDC	OBJ
    	#ENDC	BLSJFB
    	#IF	XM
    MACRO/OBJ:BIN:RKX SRC:(XM+SYCND+RK)
    LINK/EXE:BIN:RKX.SYG BIN:RKX
    	#IFN	OBJ
    DELETE/NOQ BIN:RKX.OBJ	
    	#ENDC	OBJ
    	#ENDC	XM	
    	#ENDC	RK
    	#IF	DL
    	#IF	BLSJFB
    MACRO/OBJ:BIN:DL SRC:(SYCND+DL)
    LINK/EXE:BIN:DL.SYG BIN:DL
    	#IFN	OBJ
    DELETE/NOQ BIN:DL.OBJ
    	#ENDC	OBJ
    	#ENDC	BLSJFB
    	#IF	XM
    MACRO/OBJ:BIN:DLX SRC:(XM+SYCND+DL)
    LINK/EXE:BIN:DLX.SYG BIN:DLX
    	#IFN	OBJ
    DELETE/NOQ BIN:DLX.OBJ
    	#ENDC	OBJ
    	#ENDC	XM
    	#ENDC	DL
    	#IF	DT
    	#IF	BLSJFB
    MACRO/OBJ:BIN:DT SRC:(SYCND+DT)
    LINK/EXE:BIN:DT.SYG BIN:DT
    	#IFN	OBJ
    DELETE/NOQ BIN:DT.OBJ	
    	#ENDC	OBJ
    	#ENDC	BLSJFB
    	#IF	XM
    MACRO/OBJ:BIN:DTX SRC:(XM+SYCND+DT)
    LINK/EXE:BIN:DTX.SYG BIN:DTX
    	#IFN	OBJ
    DELETE/NOQ BIN:DTX.OBJ	
    	#ENDC	OBJ
    	#ENDC	XM
    	#ENDC	DT
    	#IF	DS
    	#IF	BLSJFB
    MACRO/OBJ:BIN:DS SRC:(SYCND+DS)
    LINK/EXE:BIN:DS.SYG BIN:DS
    	#IFN	OBJ
    DELETE/NOQ BIN:DS.OBJ	
    	#ENDC	OBJ
    	#ENDC	BLSJFB
    	#IF	XM
    MACRO/OBJ:BIN:DSX SRC:(XM+SYCND+DS)
    LINK/EXE:BIN:DSX.SYG BIN:DSX
    	#IFN	OBJ
    DELETE/NOQ BIN:DSX.OBJ	
    	#ENDC	OBJ
    	#ENDC	XM
    	#ENDC	DS
    	#IF	PC
    	#IF	BLSJFB
    MACRO/OBJ:BIN:PC SRC:(SYCND+PC)
    LINK/EXE:BIN:PC.SYG BIN:PC
    	#IFN	OBJ
    DELETE/NOQ BIN:PC.OBJ	
    	#ENDC	OBJ
    	#ENDC	BLSJFB
    	#IF	XM
    MACRO/OBJ:BIN:PCX SRC:(XM+SYCND+PC)
    LINK/EXE:BIN:PCX.SYG BIN:PCX
    	#IFN	OBJ
    DELETE/NOQ BIN:PCX.OBJ	
    	#ENDC	OBJ
    	#ENDC	XM
    	#ENDC	PC
    	#IF	PR
    	#IF	BLSJFB
    MACRO/OBJ:BIN:PC SRC:(SYCND+PC)
    LINK/EXE:BIN:PC.SYG BIN:PC
    	#IFN	OBJ
    DELETE/NOQ BIN:PC.OBJ	
    	#ENDC	OBJ
    	#ENDC	BLSJFB
    	#IF	XM
    MACRO/OBJ:BIN:PCX SRC:(XM+SYCND+PC)
    LINK/EXE:BIN:PCX.SYG BIN:PCX
    	#IFN	OBJ
    DELETE/NOQ BIN:PCX.OBJ	
    	#ENDC	OBJ
    	#ENDC	XM
    	#ENDC	PR
    	#IF	DM
    	#IF	BLSJFB
    MACRO/OBJ:BIN:DM SRC:(SYCND+DM)
    LINK/EXE:BIN:DM.SYG BIN:DM
    	#IFN	OBJ
    DELETE/NOQ BIN:DM.OBJ	
    	#ENDC	OBJ
    	#ENDC	BLSJFB
    	#IF	XM
    MACRO/OBJ:BIN:DMX SRC:(XM+SYCND+DM)
    LINK/EXE:BIN:DMX.SYG BIN:DMX
    	#IFN	OBJ
    DELETE/NOQ BIN:DMX.OBJ	
    	#ENDC	OBJ
    	#ENDC	XM
    	#ENDC	DM
    	#IF	DX
    	#IF	BLSJFB
    MACRO/OBJ:BIN:DX SRC:(SYCND+DX)
    LINK/EXE:BIN:DX.SYG BIN:DX
    	#IFN	OBJ
    DELETE/NOQ BIN:DX.OBJ	
    	#ENDC	OBJ
    	#ENDC	BLSJFB
    	#IF	XM
    MACRO/OBJ:BIN:DXX SRC:(XM+SYCND+DX)
    LINK/EXE:BIN:DXX.SYG BIN:DXX
    	#IFN	OBJ
    DELETE/NOQ BIN:DXX.OBJ	
    	#ENDC	OBJ
    	#ENDC	XM
    	#ENDC	DX
    	#IF	DY
    	#IF	BLSJFB
    MACRO/OBJ:BIN:DY SRC:(SYCND+DY)
    LINK/EXE:BIN:DY.SYG BIN:DY
    	#IFN	OBJ
    DELETE/NOQ BIN:DY.OBJ
    	#ENDC	OBJ
    	#ENDC	BLSJFB
    	#IF	XM
    MACRO/OBJ:BIN:DYX SRC:(XM+SYCND+DY)
    LINK/EXE:BIN:DYX.SYG BIN:DYX
    	#IFN	OBJ
    DELETE/NOQ BIN:DYX.OBJ
    	#ENDC	OBJ
    	#ENDC	XM
    	#ENDC	DY
    	#IF	CR
    	#IF	BLSJFB
    MACRO/OBJ:BIN:CR SRC:(SYCND+CR)
    LINK/EXE:BIN:CR.SYG BIN:CR
    	#IFN	OBJ
    DELETE/NOQ BIN:CR.OBJ	
    	#ENDC	OBJ
    	#ENDC	BLSJFB
    	#IF	XM
    MACRO/OBJ:BIN:CRX SRC:(XM+SYCND+CR)
    LINK/EXE:BIN:CRX.SYG BIN:CRX
    	#IFN	OBJ
    DELETE/NOQ BIN:CRX.OBJ	
    	#ENDC	OBJ
    	#ENDC	XM
    	#ENDC	CR
    	#IF	NULL
    	#IF	BLSJFB
    MACRO/OBJ:BIN:NL SRC:(SYCND+NL)
    LINK/EXE:BIN:NL.SYG BIN:NL
    	#IFN	OBJ
    DELETE/NOQ BIN:NL.OBJ	
    	#ENDC	OBJ
    	#ENDC	BLSJFB
    	#IF	XM
    MACRO/OBJ:BIN:NLX SRC:(XM+SYCND+NL)
    LINK/EXE:BIN:NLX.SYG BIN:NLX
    	#IFN	OBJ
    DELETE/NOQ BIN:NLX.OBJ	
    	#ENDC	OBJ
    	#ENDC	XM
    	#ENDC	NULL
    	#IF	DP
    	#IF	BLSJFB
    MACRO/OBJ:BIN:DP SRC:(SYCND+DP)
    LINK/EXE:BIN:DP.SYG BIN:DP
    	#IFN	OBJ
    DELETE/NOQ BIN:DP.OBJ	
    	#ENDC	OBJ
    	#ENDC	BLSJFB
    	#IF	XM
    MACRO/OBJ:BIN:DPX SRC:(XM+SYCND+DP)
    LINK/EXE:BIN:DPX.SYG BIN:DPX
    	#IFN	OBJ
    DELETE/NOQ BIN:DPX.OBJ	
    	#ENDC	OBJ
    	#ENDC	XM
    	#ENDC	DP
    	#IF	CT
    	#IF	BLSJFB
    MACRO/OBJ:BIN:CT SRC:(SYCND+CT)
    LINK/EXE:BIN:CT.SYG BIN:CT
    	#IFN	OBJ
    DELETE/NOQ BIN:CT.OBJ	
    	#ENDC	OBJ
    	#ENDC	BLSJFB
    	#IF	XM
    MACRO/OBJ:BIN:CTX SRC:(XM+SYCND+CT)
    LINK/EXE:BIN:CTX.SYG BIN:CTX
    	#IFN	OBJ
    DELETE/NOQ BIN:CTX.OBJ	
    	#ENDC	OBJ
    	#ENDC	XM
    	#ENDC	CT
    	#IF	RF
    	#IF	BLSJFB
    MACRO/OBJ:BIN:RF SRC:(SYCND+RF)
    LINK/EXE:BIN:RF.SYG BIN:RF
    	#IFN	OBJ
    DELETE/NOQ BIN:RF.OBJ	
    	#ENDC	OBJ
    	#ENDC	BLSJFB
    	#IF	XM
    MACRO/OBJ:BIN:RFX SRC:(XM+SYCND+RF)
    LINK/EXE:BIN:RFX.SYG BIN:RFX
    	#IFN	OBJ
    DELETE/NOQ BIN:RFX.OBJ	
    	#ENDC	OBJ
    	#ENDC	XM
    	#ENDC	RF
    	#IF	MTSP
    	#IF	TM
    	#IF	BLSJFB
    MACRO/OBJ:BIN:MT SRC:(SYCND+TM)
    	#IF	MTF
    MACRO/OBJ:BIN:FSM SRC:(SYCND+FSM)
    LINK/EXE:BIN:MT.SYG BIN:(MT,FSM)
    	#IFN	OBJ
    DELETE/NOQ BIN:(FSM.OBJ,MT.OBJ)
    	#ENDC	0BJ
    	#IFF
    LINK/EXE:BIN:MTHD.SYG BIN:MT
    	#IFN	OBJ
    DELETE/NOQ BIN:MT.OBJ
    	#ENDC	OBJ
    	#ENDC	MTF
    	#ENDC	BLSJFB
    	#IF	XM
    MACRO/OBJ:BIN:MTX SRC:(XM+SYCND+TM)
    	#IF	MTF
    MACRO/OBJ:BIN:FSMX SRC:(XM+SYCND+FSM)
    LINK/EXE:BIN:MTX.SYG BIN:(MTX,FSMX)
    	#IFN	OBJ
    DELETE/NOQ BIN:(FSMX.OBJ,MTX.OBJ)
    	#ENDC	0BJ
    	#IFF
    LINK/EXE:BIN:MTHDX.SYG BIN:MTX
    	#IFN	OBJ
    DELETE/NOQ BIN:MTX.OBJ
    	#ENDC	OBJ
    	#ENDC	MTF
    	#ENDC	XM
    	#ENDC	TM
    	#IF	TJU
    	#IF	BLSJFB
    MACRO/OBJ:BIN:MM SRC:(SYCND+TJ)
    	#IF	MTF
    MACRO/OBJ:BIN:FSM SRC:(SYCND+FSM)
    LINK/EXE:BIN:MM.SYG BIN:(MM,FSM)
    	#IFN	OBJ
    DELETE/NOQ BIN:(FSM.OBJ,MM.OBJ)
    	#ENDC	0BJ
    	#IFF
    LINK/EXE:BIN:MMHD.SYG BIN:MM
    	#IFN	OBJ
    DELETE/NOQ BIN:MM.OBJ
    	#ENDC	OBJ
    	#ENDC	MTF
    	#ENDC	BLSJFB
    	#IF	XM
    MACRO/OBJ:BIN:MMX SRC:(XM+SYCND+TJ)
    	#IF	MTF
    MACRO/OBJ:BIN:FSMX SRC:(XM+SYCND+FSM)
    LINK/EXE:BIN:MMX.SYG BIN:(MMX,FSMX)
    	#IFN	OBJ
    DELETE/NOQ BIN:(FSMX.OBJ,MMX.OBJ)
    	#ENDC	0BJ
    	#IFF
    LINK/EXE:BIN:MMHDX.SYG BIN:MMX
    	#IFN	OBJ
    DELETE/NOQ BIN:MMX.OBJ
    	#ENDC	OBJ
    	#ENDC	MTF
    	#ENDC	XM
    	#ENDC	TJU
    	#ENDC	MTSP
    	#IF	LONG
    	#PRINT	
    	#PRINT	To build an entire system, mount the source and
    	#PRINT	binary disks, copy the files SYCND.MAC and SYSTBL.MAC
    	#PRINT	to the source disk, and type "@SYSBLD". To build just the monitors,
    	#PRINT	type "@MONBLD". To build just the device handlers, type
    	#PRINT	"@DEVBLD". For more information, read Section 3.6 of the
    	#PRINT	RT-11 System Generation Manual.
    	#ENDC	LONG
    	#PRINT	
    	#PRINT	END OF SYSGEN PROGRAM--Don't forget to copy DK:SYCND.MAC and
    	#PRINT		DK:SYSTBL.MAC to the source disk before executing the
    	#PRINT		command file(s). Remember that SWAP.SYS must
    	#PRINT		be on all bootable volumes.
    	#PRINT
    - - - Добавлено - - -

    И дедушка IND.SAV

    Код:
    C	SYSGEN.FOR V02-07
    C
    C	COPYRIGHT (C) 1977,1978
    C	DIGITAL EQUIPMENT CORPORATION
    C
    C	THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
    C	ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
    C	INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR ANY OTHER
    C	COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO 
    C	ANY OTHER PERSON.  NO TITLE TO  AND OWNERSHIP OF THE SOFTWARE IS
    C	HEREBY TRANSFERRED.
    C
    C	THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
    C	AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
    C	CORPORATION.
    C
    C	DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
    C	SOFTWARE  ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
    C
    C	R. BEAN     23-JAN-78  9:17
    C	MODELLED AFTER A PROGRAM BY HANK MAURER
    C
    C
    C
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLAC,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    C
    C	INITIALIZE THE VARIOUS DATA AND CONSTANT ARRAYS
    C
    	DATA LEVEL,NXTVAR,NUMSUB/1,1,0/
    	DATA ANSWER,VAR,VALUE/1000*0,600*0,100*0./
    	DATA IN,OUT,INS,LNLENG/1,2,3,1/
    C	CHANGE FOLLOWING TO CHANGE SCRIPT FILE NAME.
    	DATA FILE/'S','Y','S','G','E','N','.','C','N','D',0,0/
    	DATA CMDS/
         1  'A','S','K',0,0,0,
         1  'C','A','L','L',0,0,
         1  'D','E','C','R',0,0,
         1  'E','N','D','C',0,0,
         1  'E','N','D','S',0,0,
         1  'E','X','I','T',0,0,
         1  'F','I','L','E',0,0,
         1  'I','F',0,0,0,0,
         1  'I','F','F',0,0,0,
         1  'I','F','G','T',0,0,
         1  'I','F','N',0,0,0,
         1  'I','F','T',0,0,0,
         1  'I','F','T','F',0,0,
         1  'N','A','M','E',0,0,
         1  'P','R','I','N','T',0,
         1  'S','E','T',0,0,0,
         1  'S','U','B','S',0,0/
    	DATA SUBNAM/'*','N','O','N','E','*'/
    	DATA INSERT,FIRST/.FALSE.,.TRUE./
    	DATA INCLUD/.TRUE.,10*0/
    	DATA COND/.TRUE.,10*0/
    C
    C	INITIALIZE OPERATING VARIABLES
    C
    	VARLEN=6			!NUMBER OF CHARACTERS IN VARIABLES
    	NUMVAR=100			!NUMBER OF VARIABLES
    C
    C	OPEN THE SCRIPT FILE
    C
    	CALL ASSIGN(IN,FILE)
    C
    C	MAIN COMMAND LOOP
    C	AFTER PRESERVING PREVIOUS LINE IN LASTLN,
    C	IF NOT INSERTING FROM SECONDARY SCRIPT FILE,
    C	READ LINE FROM PRIMARY SCRIPT FILE
    C
    100	DO 105 I=1,LNLENG
    105	LASTLN(I)=LINE(I)		!PRESERVE PREVIOUS COMMAND LINE
    	LSTLEN=LNLENG			!REMEMBER LENGTH OF PREV LINE
    C
    C	NOW READ FROM PRIMARY SCRIPT
    C
    	IF(.NOT.INSERT)
         1  READ(IN,80000,END=90000,ERR=91000)LNLENG,(LINE(I),I=1,LNLENG)
    C
    C	OTHERWISE READ FROM SECONDARY SCRIPT FILE
    C
    	IF(INSERT)READ(INS,80000,END=90010,ERR=91010)LNLENG,(LINE(I),I=1,LNLENG)
    C
    C	IF COMMENT LINE, IGNORE IT
    C
    	IF(LINE(1).EQ.';')GOTO 100
    C
    C	IF LINE BEGINS WITH A FORM FEED, IGNORE THE FORM FEED
    C
    	IF(LINE(1).NE."14)GOTO 200
    	DO 110 I=2,LNLENG
    110	LINE(I-1)=LINE(I)			!SLIDE CHARS UP, OVER FORMF
    	LNLENG=LNLENG-1
    C
    C	IF SUBSTITUTION NOT ENABLED, PROCEED TO COMMAND DISPATCH
    C
    200	IF(NUMSUB.EQ.0)GOTO 350
    C
    C	SUBSTITUTION LOOP
    C	PERFORM SUBSTITUTIONS BEFORE PROCESSING LINE
    C
    	DO 300 I=1,NUMSUB
    	II=1
    C
    C	IF LINE SCAN FINISHED, PROCEED TO NEXT I
    C
    210	IF(II+PATLEN(I)-1.GT.LNLENG)GOTO 300
    C
    C	SCAN LINE FOR A PATTERN MATCH
    C
    	DO 220 J=1,PATLEN(I)
    	III=II+J-1
    	IF(LINE(III).NE.PATERN(I,J))GOTO 280
    220	CONTINUE
    	K=PATLEN(I)-REPLEN(I)			!K=LENGTH DIFF BETWEEN PATERN AND REPLACEMENT
    C
    C	DETERMINE IF THERE IS ENOUGH ROOM IN LINE FOR REPLACEMENT
    C
    	IF(K)230,240,250
    C
    C	IF REPLACEMENT LARGER THAN PATTERN, SLIDE LINE RIGHT TO MAKE ROOM
    C
    230	DO 235 J=1,LNLENG-III
    235	LINE(LNLENG-K+1-J)=LINE(LNLENG+1-J)
    240	IF(REPLEN(I).LE.0)GOTO 248		!IF REPLACEMENT NULL, JUST COLLAPSE LINE
    C
    C	OTHERWISE REPLACE PATTERN WITH REPLACEMENT
    C
    	DO 245 J=1,REPLEN(I)
    245	LINE(II+J-1)=REPLAC(I,J)
    248	LNLENG=LNLENG-K				!SHORTEN LINE LENGTH BY PATTERN/REPLACEMENT DIFFERENCE
    	II=II+REPLEN(I)
    	GOTO 290
    C
    C	COLLAPSE LINE TO MAKE PATTERN LENGTH=REPLACEMENT LENGTH
    C
    250	DO 255 J=III+1,LNLENG
    255	LINE(J-K)=LINE(J)
    	GOTO 240				!NOW REPLACE PATTERN
    280	II=II+1					!START ONE CHAR TO RIGHT
    290	IF(II.LE.LNLENG)GOTO 210		!AND LOOP
    300	CONTINUE
    350	LINE(LNLENG+1)=0				!MAKE SURE LINE STRING ZERO-TERMINATED
    C
    C	COMMAND DISPATCHER
    C	IF LINE DOES NOT BEGIN WITH A <TAB>#, WRITE IT TO OUTPUT FILE
    C
    	IF(LINE(1).NE."11.OR.LINE(2).NE.'#')GOTO 450	!"11 IS A TAB
    C
    C	FIND THE COMMAND
    C
    	DO 410 I=1,17
    	DO 400 J=1,6
    	IF(CMDS(J,I).EQ.0.AND.(LINE(J+2).EQ.0.OR.LINE(J+2).EQ."11))  !"11 IS A TAB
         1  GOTO 500				!COMMAND FOUND - CALL COMMAND SUBROUTINE
    	IF(LINE(J+2).NE.CMDS(J,I))GOTO 410
    400	CONTINUE
    410	CONTINUE
    C
    C	COMMAND NOT FOUND - PRINT ERROR MESSAGE
    C
    	CALL EPRINT(6)				!SYSGEN-F-UNDEFINED COMMAND
    	GOTO 100
    C
    C	LINE NOT A COMMAND LINE - WRITE IT TO OUTPUT FILE
    C
    450	IF(INCLUD(LEVEL))WRITE(OUT,80010,END=90020,ERR=90020)(LINE(I),I=1,LNLENG)
    	GOTO 100
    C
    C	COMMAND SUBROUTINE CALLS
    C
    500	GOTO(501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517)I
    501	CALL ASK
    	GOTO 100
    502	CALL CALLF
    	GOTO 100
    503	CALL DECR
    	GOTO 100
    504	CALL ENDC
    	GOTO 100
    505	CALL ENDS
    	GOTO 100
    506	CALL EXITS
    	GOTO 100
    507	CALL FILES
    	GOTO 100
    508	CALL IF0
    	GOTO 100
    509	CALL IFF
    	GOTO 100
    510	CALL IFGT
    	GOTO 100
    511	CALL IFN
    	GOTO 100
    512	CALL IFT
    	GOTO 100
    513	CALL IFTF
    	GOTO 100
    514	CALL NAME
    	GOTO 100
    515	CALL PRINT0
    	GOTO 100
    516	CALL SET
    	GOTO 100
    517	CALL SUB
    	GOTO 100
    C
    C	FORMAT STATEMENTS FOR COMMAND ROTUINE
    C
    80000	FORMAT(Q,100A1)			!FOR SCRIPT READS
    80010	FORMAT(100A1)			!FOR OUTPUT WRITES
    C
    C	ERROR PROCESSING ROUTINES FOR I/O STATEMENTS
    C
    90000	CALL CLOSE(IN)			!EOF FOR PRIMARY INPUT FILE
    	IF(.NOT.FIRST)CALL CLOSE(OUT)
    	GOTO 99000
    90010	INSERT=.FALSE.			!EOF FOR SECONDARY INPUT FILE
    	CALL CLOSE(INS)
    	GOTO 100
    90020	CALL EPRINT(17)			!?SYSGEN-F-OUTPUT ERROR
    	GOTO 99000
    91000	CALL EPRINT(18)			!?SYSGEN-F-INPUT ERROR
    	GOTO 99000
    91010	CALL EPRINT(16)			!?SYSGEN-F-INSERT ERROR
    99000	CALL EXIT
    	END
    
    
    	SUBROUTINE ASK
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLACE,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    	LOGICAL*1 HIVAL(10),LOWVAL(10),ALINE(80),YES(4),NO(3)
    	REAL RTMP1
    	DATA YES/'Y','E','S',0/,NO/'N','O',0/
    C
    C	ROUTINE TO PROCESS ASK COMMAND
    C	<TAB>#ASK<TAB>QUESTION?VARIABLE/T=DEF[,LOWLIM[,HILIM]]
    C
    	IF(.NOT.INCLUD(LEVEL))GOTO 1000		!IF CONDITIONAL OFF, DON'T DO
    C
    C	FIND QUESTION MARK AT END OF QUESTION
    C
    5	DO 10 LPTR=7,LNLENG
    	IF (LINE(LPTR).EQ.'?')GOTO 20
    10	CONTINUE
    15	CALL EPRINT(5)				!?SYSTEN-F-BAD #ASK IN
    	GOTO 1000
    C
    C	TYPE THE QUESTION ON THE TERMINAL
    C
    20	I=7					!QUESTION STARTS IN CHAR POSITION 7
    	IF(LINE(I).EQ.'-')I=I+1			!SKIP OVER CONTINUATION MARK IF PRESENT
    	WRITE(5,80000)(LINE(J),J=I,LPTR),"40	!"40 IS A SPACE
    	IF(LNLENG.EQ.LPTR)GOTO 15		!IF NO VARIABLE SPECIFIED
    C
    C	FIND THE VARIABLE INDEX
    C
    	LPTR=LPTR+1				!SPACE LPTR PAST ?
    	CALL FNDVAR(0)				!SETS VIDX FOR VARIABLE, MOVES  LPTR TO CHAR FOLLOWING
    	IF(CARRY.EQ.1)GOTO 1000
    	VALUE(VIDX)=0				!SET VALUE TO 0
    C
    C	ENSURE ANSWER TYPE SPECIFIED
    C
    	IF(LINE(LPTR).NE.'/')GOTO 15
    	LPTR=LPTR+1				!ADVANCE PAST "/"
    C
    C	SET FLAG DEPENDING ON ANSWER TYPE
    C
    	ATYPE=0
    	IF(LINE(LPTR).EQ.'A')ATYPE=1		!DEVICE NAME ANSWER
    	IF(LINE(LPTR).EQ.'O')ATYPE=2		!OCTAL ANSWER
    	IF(LINE(LPTR).EQ.'D')ATYPE=3		!DECIMAL ANSWER
    	IF(LINE(LPTR).EQ.'Y')ATYPE=4		!YES/NO ANSWER
    	IF(ATYPE.EQ.0)GOTO 15			!ILLEGAL TYPE CODE
    	LPTR=LPTR+1				!ADVANCE PAST TYPE CODE
    C
    C	ENSURE DEFAULT PRESENT
    C
    	IF(LINE(LPTR).NE.'=')GOTO 15
    	LPTR=LPTR+1				!ADVANCE PAST "="
    	IF(LINE(LPTR).EQ.0)GOTO 15		!NOTHING FOLLOWING "=" IS AN ERROR
    C
    C	COPY THE DEFAULT INTO ANSWER
    C
    	II=1
    	DO 30 K=LPTR,LNLENG
    	IF(LINE(K).EQ.',')GOTO 35
    	IF(II.GT.9)GOTO 15			!DEFAULT TOO LONG
    	ANSWER(VIDX,II)=LINE(K)
    30	II=II+1
    C
    C	PARSE LOW LIMIT
    C
    35	LPTR=K
    	LVCNT=0
    	IF(LINE(LPTR).EQ.0)GOTO 100		!NO RANGE VALUES
    	LPTR=LPTR+1				!STEP PAST COMMA
    	IF(LINE(LPTR).EQ.',')GOTO 15		!NO LO VALUE IS AN ERROR
    	DO 40 K=LPTR,LNLENG			!COPY LOWVAL
    	IF(LINE(K).EQ.',')GOTO 45
    	IF(LVCNT.GT.9)GOTO 15
    	LVCNT=LVCNT+1
    	LOWVAL(LVCNT)=LINE(K)
    40	CONTINUE
    C
    C	PARSE HI LIMIT
    C
    45	HVCNT=0
    	LPTR=LPTR+LVCNT
    	IF(LINE(LPTR).EQ.0)GOTO 100		!NO HIGH VALUE
    	LPTR=LPTR+1				!STEP PAST COMMA
    C
    C	COPY HIGH LIMIT TO HIVAL
    C
    	DO 50 K=LPTR,LNLENG
    	IF(HVCNT.GT.9)GOTO 15
    	HVCNT=HVCNT+1
    	HIVAL(HVCNT)=LINE(K)
    50	CONTINUE
    C
    C	GET USER'S ANSWER
    C
    100	READ(5,80010)ALLENG,(ALINE(K),K=1,ALLENG)
    	ALINE(ALLENG+1)=0			!MAKE SURE ANSWER STRING 0 TERMINATED
    C
    C	IF NO RESPONSE, USE DEFAULT
    C
    	IF(ALLENG.EQ.0)GOTO 1000
    	IF(ALLENG.GT.9)GOTO 400			!ANSWER TOO LONG
    C
    C	CHECK ANSWER FOR TYPE VALIDITY
    C
    	GOTO(200,250,300,350)ATYPE
    C
    C	ROUTINE TO CHECK ANSWER FOR ALPHA DEV NAME
    C
    200	IF(ALLENG.GT.3)GOTO 400			!ANSWER TOO LONG FOR DEV NAME
    	DO 210,I=1,2
    	IF(ALINE(I).LT.'A')GOTO 400
    210	IF(ALINE(I).GT.'Z')GOTO 400
    	IF(ALINE(3).EQ.0)GOTO 500
    	IF(ALINE(3).LT.'0')GOTO 400
    	IF(ALINE(3).GT.'7')GOTO 400
    	GOTO 500
    C
    C	ROUTINE TO CHECK ANSWER FOR OCTAL VALUE
    C
    250	DO 260 I=1,9
    	IF (ALINE(I).EQ.0)GOTO 450
    	IF(ALINE(I).LT.'0')GOTO 400
    260	IF(ALINE(I).GT.'7')GOTO 400
    	GOTO 450
    C
    C	ROUTINE TO CHECK ANSWER FOR DECIMAL VALUE
    C
    300	DO 310 I=1,9
    	IF (ALINE(I).EQ.0)GOTO 450
    	IF(ALINE(I).LT.'0')GOTO 400
    310	IF(ALINE(I).GT.'9')GOTO 400
    	GOTO 450
    C
    C	ROUTINE TO CHECK ANSWER FOR YES/NO
    C
    350	DO 355 I=1,ALLENG			!TEST FOR N OR NO ANSWER
    355	IF(ALINE(I).NE.NO(I))GOTO 360
    	GOTO 500				!ANSWER WAS A VALID NO
    360	DO 365 I=1,ALLENG			!TEST FOR Y OR YE OR YES ANSWER
    365	IF(ALINE(I).NE.YES(I))GOTO 400
    	GOTO 500				!ANSWER WAS A VALID YES
    C
    C	VALIDITY CHECK FAILED - TYPE ERROR MESSAGE
    C	AND RETRY
    C
    400	CALL EPRINT(1)				!SYSGEN-F-INVALID ANSWER;RETRY
    410	IF(LINE(7).NE.'-')GOTO 5		!IF NOT 2 LINE ASK,JUST REPROCESS COMMAND
    	WRITE(5,80030)(LASTLN(J),J=9,LSTLEN)	!2 LINE ASK-ASSUME PREVIOUS LINE
    C						!WAS A #PRINT AND REPRINT IT
    	GOTO 5					!RESTART QUESTION
    C
    C	ROUTINE TO CHECK IF OCTAL OR DECIMAL ANSWER FALLS IN RANGE
    C	AND STORE VALUE FOR VARIABLE
    C
    450	IF(LVCNT.EQ.0)GOTO 500			!NO LIMITS AVAILABLE
    	DECODE(LVCNT,80020,LOWVAL)RTMP1		!LOW VALUE TO TEMPORARY
    	DECODE(ALLENG,80020,ALINE)VALUE(VIDX)	!ANSWER VALUE
    	IF(VALUE(VIDX)-RTMP1)455,460,460	!ANSWER - LOW LIMIT
    455	CALL EPRINT(2)				!SYSGEN-F-ANSWER TOO SMALL
    	GOTO 410				!RESTART QUESTION
    460	IF(HVCNT.EQ.0)GOTO 500			!NO HILIMIT AVAL
    	DECODE(HVCNT,80020,HIVAL)RTMP1		!HI VALUE CONVERSION
    	IF(VALUE(VIDX)-RTMP1)500,500,465	!ANSWER - HI LIMIT
    465	CALL EPRINT(3)				!SYSGEN-F-ANSWER TOO LARGE
    	GOTO 410				!RETRY
    C
    C	ANSWER IS ACCEPTABLE - STORE IT FOR VARIABLE
    C
    500	DO 510 K=1,ALLENG
    510	ANSWER(VIDX,K)=ALINE(K)
    	ANSWER(VIDX,K+1)=0
    C
    C	ROUTINE FINISHED - RETURN
    C
    1000	RETURN
    C
    C	FORMAT STATEMENTS FOR ASK ROUTINE
    C
    80000	FORMAT('$',72A1)
    80010	FORMAT(Q,80A1)
    80020	FORMAT(F9.0)
    80030	FORMAT(1X,100A1)
    	END
    
    	SUBROUTINE CALLF
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLAC,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    C
    C	SUBROUTINE TO PROCESS CALL COMMAND
    C	<TAB>#CALL<TAB>FILNAM.EXT
    C
    	IF(.NOT.INCLUD(LEVEL))GOTO 1000			!CONDITIONAL OFF
    	IF(LNLENG.GE.10)GOTO 10
    	CALL EPRINT(9)					!SYSGEN-W-MISSING FILE NAME
    	GOTO 1000
    10	IF(.NOT.INSERT)GOTO 20				!MAKE SURE NOT ALREADY IN SEC. SCRIPT
    	CALL EPRINT(10)					!SYSGEN-W-NESTED #CALL?
    	GOTO 1000
    20	INSERT=.TRUE.
    	CALL ASSIGN(INS,LINE(8))
    C
    C	COMMAND DONE
    C
    1000	RETURN
    	END
    	SUBROUTINE DECR
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLAC,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    C
    C	SUBROUTINE TO PROCESS DECR COMMAND
    C	<TAB>#DECR<TAB>VARIABLE
    C
    	IF(.NOT.INCLUD(LEVEL))GOTO 1000			!MAY BE CONDITIONALIZED OUT
    	IF(LNLENG.GE.8)GOTO 10				!MAKE SURE CONDITIONAL NAMED
    	CALL EPRINT(11)					!SYSGEN-W-MISSING CONDITIONAL IN
    	GOTO 1000
    10	LPTR=8
    	CALL FNDVAR(1)					!FIND VARIABLE
    	IF(CARRY.EQ.1)GOTO 1000				!VARIABLE NOT THERE
    	VALUE(VIDX)=VALUE(VIDX)-1.			!DECREMENT VALUE
    C
    C	COMMAND DONE
    C
    1000	RETURN
    	END
    	SUBROUTINE ENDC
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLAC,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    C
    C	SUBROUTINE TO PROCESS ENDC COMMAND
    C	<TAB>#ENDC
    C
    	IF(LEVEL.GT.1)GOTO 10				!MAKE SURE NOT AT BOTTOM LEVEL
    	CALL EPRINT(15)					!?SYSGEN-W-TOO MANY #ENDC'S
    	GOTO 1000
    10	LEVEL=LEVEL-1					!DROP CONDITIONAL LEVEL
    C
    C	DONE
    C
    1000	RETURN
    	END
    	SUBROUTINE ENDS
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLAC,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    C
    C	SUBROUTINE TO PROCESS ENDS COMMAND
    C	<TAB>#ENDS
    C
    	IF(INCLUD(LEVEL))NUMSUB=0			!IF NOT CONDITIONALIZED OUT, RESET FOR NO SUBS
    	RETURN
    	END
    	SUBROUTINE EXITS
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLAC,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    C
    C	SUBROUTINE TO PROCESS #EXIT COMMAND
    C	<TAB>#EXIT
    C
    	IF(.NOT.INCLUD(LEVEL))GOTO 1000			!DON'T DO IF CONDITIONALIZED OUT
    	CALL EXIT
    1000	RETURN
    	END
    	SUBROUTINE FILES
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLAC,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    C
    C	SUBROUTINE TO PROCESS #FILE COMMAND
    C	<TAB>#FILE<TAB>FILNAM.EXT
    C
    	IF(.NOT.INCLUD(LEVEL))GOTO 1000
    	IF(LNLENG.GE.8)GOTO 10				!MAKE SURE FILE NAME SPECIFIED
    	CALL EPRINT(9)					!?SYSGEN-W-MISSING FILE NAME
    	GOTO 1000
    10	IF(.NOT.FIRST)CALL CLOSE(OUT)			!CLOSE PREVIOUS FILE
    	FIRST=.FALSE.
    	CALL ASSIGN(OUT,LINE(8))			!OPEN NEW OUTPUT FILE
    C
    C	DONE
    C
    1000	RETURN
    	END
    	SUBROUTINE IF0
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLAC,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    C
    C	SUBROUTINE TO PROCESS #IF COMMAND
    C	<TAB>#IF<TAB>VARIABLE
    C
    	IF(LEVEL.LT.11)GOTO 10
    	CALL EPRINT(12)					!SYSGEN-W-TOO MANY NESTED IF'S
    	GOTO 1000
    10	IF(LNLENG.GE.6)GOTO 20				!CHECK FOR CONDITIONAL PRESENT
    	CALL EPRINT(11)					!?SYSGEN-W-MISSING CONDITIONAL
    	GOTO 1000
    20	LPTR=6
    	IF(.NOT.INCLUD(LEVEL))GOTO 30			!IF NOT ACTIVE,DON'T LOOKUP VARIABLE
    	CALL FNDVAR(1)					!FIND VARIABLE
    	IF(CARRY.EQ.1)GOTO 1000				!OPERATION FAILED
    30	LEVEL=LEVEL+1					!NEW CONDITIONAL LEVEL
    	COND(LEVEL)=ANSWER(VIDX,1).EQ.'Y'			!COND=TRUE IF ANSWER = Y
    C	INCLUD TRUE IF PREVIOUS LEVEL TRUE
    	INCLUD(LEVEL)=COND(LEVEL).AND.INCLUD(LEVEL-1)
    C
    C	DONE
    C
    1000	RETURN
    	END
    
    	SUBROUTINE IFF
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLAC,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    C
    C	SUBROUTINE TO PROCESS THE #IFF COMMAND
    C	<TAB>#IFF
    C
    	IF(LEVEL.GT.1)INCLUD(LEVEL)=.NOT.COND(LEVEL).AND.INCLUD(LEVEL-1)
    	RETURN
    	END
    
    	SUBROUTINE IFGT
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLAC,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    C
    C	SUBROUTINE TO PROCESS THE #IFGT COMMAND
    C	<TAB>#IFGT<TAB>CONDITIONAL
    C
    	IF(LEVEL.LT.11)GOTO 10			!TEST NESTING DEPTH
    	CALL EPRINT(12)				!?SYSGEN-W-TOO MANY NESTED CONDITIONALS
    	GOTO 1000
    10	IF(LNLENG.GE.8)GOTO 20			!TEST FOR CONDITIONAL PRESENSE
    	CALL EPRINT(11)				!?SYSGEN-W-MISSING CONDITIONAL
    	GOTO 1000
    20	LPTR=8
    	IF(.NOT.INCLUD(LEVEL))GOTO 30			!IF NOT ACTIVE,DON'T LOOKUP VARIABLE
    	CALL FNDVAR(1)				!FIND THE VARIABLE
    	IF(CARRY.EQ.1)GOTO 1000			!ERROR
    30	LEVEL=LEVEL+1				!NEW CONDITIONAL LEVEL
    	COND(LEVEL)=VALUE(VIDX).GT.0.		!CONDITION TRUE IF VALUE >0
    C	INCLUDE TRUE IF PREVIOUS LEVEL TRUE
    	INCLUD(LEVEL)=COND(LEVEL).AND.INCLUD(LEVEL-1)
    C
    C	DONE
    C
    1000	RETURN
    	END
    
    
    	SUBROUTINE IFN
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLAC,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    C
    C	SUBROUTINE TO HANDLE #IFN COMMAND
    C	<TAB>#IFN<TAB>VARIABLE
    C
    	IF(LEVEL.LT.11)GOTO 10			!?SYSGEN-W-TOO MANY CONDITIONALS
    	CALL EPRINT(12)
    	GOTO 1000
    10	IF(LNLENG.GE.7)GOTO 20
    	CALL EPRINT(11)				!?SYSGEN-W-MISSING CONDITIONALS
    	GOTO 1000
    20	LPTR=7
    	IF(.NOT.INCLUD(LEVEL))GOTO 30			!IF NOT ACTIVE,DON'T LOOKUP VARIABLE
    	CALL FNDVAR(1)				!FIND VARIABLE
    	IF(CARRY.EQ.1)GOTO 1000			!VARIABLE NOT FOUND
    30	LEVEL=LEVEL+1				!BUMP CONDITIONAL LEVEL
    	COND(LEVEL)=ANSWER(VIDX,1).EQ.'N'		!COND TRUE IF VARIABLE="NO"
    C	INCLUD TRUE ONLY IF PREVIOUS LEVEL TRUE
    	INCLUD(LEVEL)=COND(LEVEL).AND.INCLUD(LEVEL-1)
    C
    C	DONE
    C
    1000	RETURN
    	END
    
    	SUBROUTINE IFT
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLAC,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    C
    C	SUBROUTINE TO PROCESS #IFT COMMAND
    C	<TAB>#IFT
    C
    	IF(LEVEL.GT.1)INCLUD(LEVEL)=COND(LEVEL).AND.INCLUD(LEVEL-1)
    	RETURN
    	END
    
    	SUBROUTINE IFTF
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLAC,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    C
    C	SUBROUTINE TO PROCESS #IFTF COMMAND
    C	<TAB>#IFTF
    C
    	IF(LEVEL.GT.1)INCLUD(LEVEL)=INCLUD(LEVEL-1)
    	RETURN
    	END
    
    	SUBROUTINE NAME
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLAC,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    C
    C	SUBROUTINE TO PROCESS #NAME COMMAND
    C	<TAB>#NAME<TAB>SECTION NAME
    C
    	IF(LEVEL.EQ.1)GOTO 10			!CHECK TO BE SURE AT BASE LEVEL
    	CALL EPRINT(4)				!?SYSGEN-F-TOO FEW ENDC'S
    10	LEVEL=1
    	DO 20 KK=1,6
    	K=LINE(KK+7)				!COPY NAME CHARS TO SUBNAME
    	IF(KK+7.GT.LNLENG)K="40			!"40 IS A SPACE
    20	SUBNAM(KK)=K
    C
    C	DONE
    C
    	RETURN
    	END
    
    	SUBROUTINE PRINT0
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLAC,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    C
    C	SUBROUTINE TO PROCESS #PRINT COMMAND
    C	<TAB>#PRINT<TAB>TEXT
    C
    	IF(INCLUD(LEVEL))WRITE(5,80000)(LINE(J),J=9,LNLENG)
    	RETURN
    80000	FORMAT(1X,100A1)
    	END
    
    	SUBROUTINE SET
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLAC,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    C
    C	SUBROUTINE TO PROCESS #SET COMMAND
    C	<TAB>#SET<TAB>VARIABLE=ANSWER
    C
    	IF(.NOT.INCLUD(LEVEL))GOTO 1000			!MAY BE CONDITIONALIZED OUT
    	IF(LNLENG.GE.7)GOTO 10				!MAKE SURE VARIABLE PRESENT
    	CALL EPRINT(11)					!?SYSGEN-F-MISSING CONDITIONAL IN
    	GOTO 1000
    10	LPTR=7
    	CALL FNDVAR(0)					!FIND VARIABLE
    	IF(CARRY.EQ.1)GOTO 1000				!FAILED
    	IF(LINE(LPTR).EQ.'=')GOTO 20
    15	CALL EPRINT(13)					!?SYSGEN-F-BAD SET IN
    	GOTO 1000
    20	IF((LNLENG-LPTR).GT.10)GOTO 15			!TOO MANY CHARS IN ANSWER
    	DO 30 KK=LPTR+1,LNLENG
    30	ANSWER(VIDX,KK-LPTR)=LINE(KK)
    C
    C	DONE
    C
    1000	RETURN
    	END
    
    	SUBROUTINE SUB
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLAC,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    C
    C	SUBROUTINE TO PROCESS THE #SUBS COMMAND
    C	<TAB>#SUBS<TAB>"PATTERN"VARIABLE
    C
    	IF(.NOT.INCLUD(LEVEL))GOTO 1000
    	IF(NUMSUB.LT.5)GOTO 3				!CHECK # OF SUBS ACTIVE
    	CALL EPRINT(12)					!?SUSGEN-F-TOO MANY NESTED SUBS
    	GOTO 1000
    3	IF(LINE(8).EQ.'"')GOTO 10
    5	CALL EPRINT(14)					!?SYSGEN-F-BAD SUBSTITUTE PATTERN
    	GOTO 1000
    10	NUMSUB=NUMSUB+1
    	DO 20 J=1,30
    	PATERN(NUMSUB,J)=LINE(8+J)
    	IF(LINE(8+J).EQ.'"')GOTO 30
    20	CONTINUE
    	NUMSUB=NUMSUB-1
    	GOTO 5						!TOO MANY CHARS IN PATTERN
    30	PATLEN(NUMSUB)=J-1
    	LPTR=8+J+1					!POINTER TO START OF VARIABLE NAME
    	CALL FNDVAR(1)					!FIND VARIABLE IN SYMBOL TABLE
    	IF(CARRY.EQ.1)GOTO 1000
    	DO 40 K=1,10
    	REPLAC(NUMSUB,K)=ANSWER(VIDX,K)			!COPY ANSWER INTO REPLACE ARRAY
    	IF(REPLAC(NUMSUB,K).NE.0)GOTO 40
    	REPLEN(NUMSUB)=K-1
    	GOTO 1000
    40	CONTINUE
    C
    C	DONE
    C
    1000	RETURN
    	END
    	SUBROUTINE FNDVAR(OLD)
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLAC,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    C
    C	SUBROUTINE TO FIND A VARIABLE NAME IN THE VARIABLE TABLE
    C
    C	INPUTS:-"LINE" ARRAY CONTAINS VARIABLE NAME
    C		 LPTR POINTS TO VARIABLE NAME IN "LINE"
    C		 VARIABLE NAME TERMINATED BY 0 OR "/" OR "="
    C		 ARGUMENT "OLD"
    C		 =0  MEANS IF VARIABLE NAME NOT IN TABLE,
    C		     CREATE A NEW ENTRY
    C		 =1  MEANS IF VARIABLE NAME NOT IN TABLE,
    C		     PRINT ERROR MESSAGE
    C	OUTPUTS:-VIDX CONTAINS INDEX TO VARIABLE IN SYMBOL TABLE
    C		 COMMON FLAG "CARRY"
    C		 =0 IF OPERATION SUCCESSFUL
    C		 =1 IF OPERATION FAILED
    C
    C	CHECK FOR TABLE OVERFLOW
    C
    	IF(NXTVAR.LT.NUMVAR)GOTO 10
    	CALL EPRINT(7)					!?SYSGEN-W-TOO MANY CONDITIONALS
    	GOTO 1000					!FAILED
    C
    C	SEARCH TABLE FOR NAME
    C
    10	DO 20 KK=1,NXTVAR
    	DO 15 JJ=0,VARLEN-1
    	IF(LINE(LPTR+JJ).EQ.0.AND.VAR(KK,JJ+1).EQ.0.OR.
         1  LINE(LPTR+JJ).EQ.'/'.AND.VAR(KK,JJ+1).EQ.0.OR.
         1  LINE(LPTR+JJ).EQ.'='.AND.VAR(KK,JJ+1).EQ.0)GOTO 40
    	IF(LINE(LPTR+JJ).NE.VAR(KK,JJ+1))GOTO 20
    15	CONTINUE
    	GOTO 40						!INNER LOOP COMPLETE MEANS VARIABLE MATCH
    20	CONTINUE
    C
    C	IF WE GET HERE, SEARCH HAS FAILED
    C
    	IF(OLD.EQ.0)GOTO 30				!CREATE NEW ENTRY
    	CALL EPRINT(8)					!?SYSGEN-W-UNDEFINED VARIABLE IN
    	GOTO 1000					!FAILED
    C
    C	CREATE NEW ENTRY FROM VARIABLE NAME
    C
    30	DO 35 JJ=0,VARLEN-1
    	IF(LINE(LPTR+JJ).EQ.0.OR.LINE(LPTR+JJ).EQ.'/'.OR.LINE(LPTR+JJ).EQ.'=')
         1  GOTO 37
    35	VAR(NXTVAR,JJ+1)=LINE(LPTR+JJ)
    37	VIDX=NXTVAR
    	NXTVAR=NXTVAR+1
    	GOTO 45						!SUCCESS
    C
    C	SEARCH SUCCEEDED
    C
    40	VIDX=KK
    45	LPTR=LPTR+JJ
    	GOTO 1010
    C
    C	RETURN AFTER SETTING FLAG
    C
    1000	CARRY=1						!OPERATION FAILED
    	RETURN
    1010	CARRY=0						!OPERATION FAILED
    	RETURN
    	END
    
    	SUBROUTINE EPRINT(ERRNUM)
    	IMPLICIT INTEGER*2(A-Z)
    	COMMON ANSWER,VAR,LINE,COND,INCLUD
    	COMMON SUBNAM,VALUE,CARRY,SUBFLG
    	COMMON PATERN,REPLAC,PATLEN,REPLEN
    	COMMON LEVEL,NXTVAR,NUMSUB,LPTR
    	COMMON VARLEN,NUMVAR,LNLENG,VIDX
    	COMMON INSERT,FIRST,I,J,K,II,JJ,KK,III
    	COMMON CMDS,FILE,IN,OUT,INS,LASTLN,LSTLEN
    	LOGICAL*1 ANSWER(100,10),VAR(100,6),LINE(100),CMDS(6,17),FIRST,
         1  COND(11),INCLUD(11),SUBNAM(6),PATERN(5,30),REPLAC(5,30),
         1  FILE(12),INSERT,SUBFLG,CARRY,LASTLN(100)
    	REAL VALUE(100)
    	INTEGER PATLEN(5),REPLEN(5)
    C
    C	SUBROUTINE TO PRINT AN ERROR MESSAGE
    C	USES ERRNUM AS INDICATOR FOR WHICH
    C	ERROR TO PRINT
    	WRITE(5,10)
    10	FORMAT (/,'$?SYSGEN-')
    	GOTO(101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,
         1    117,118)ERRNUM
    C
    101	WRITE(5,201)
    	GOTO 1000
    201	FORMAT ('+F-Inappropriate answer',/)
    C
    102	WRITE(5,202)
    	GOTO 1000
    202	FORMAT ('+F-Answer value too small',/)
    C
    103	WRITE(5,203)
    	GOTO 1000
    203	FORMAT ('+F-Answer value too large',/)
    C
    104	WRITE(5,204)SUBNAM,(LINE(K),K=1,LNLENG)
    	GOTO 1000
    204	FORMAT ('+W-Too few #ENDC''s in ',6A1,/,1X,80A1)
    C
    105	WRITE(5,205)SUBNAM,(LINE(K),K=1,LNLENG)
    	GOTO 1000
    205	FORMAT ('+W-Bad #ASK in ',6A1,/,1X,80A1)
    C
    106	WRITE(5,206)SUBNAM,(LINE(K),K=1,LNLENG)
    	GOTO 1000
    206	FORMAT ('+W-Undefined command in ',6A1,/,1X,80A1)
    C
    107	WRITE(5,207)SUBNAM,(LINE(K),K=1,LNLENG)
    	GOTO 1000
    207	FORMAT ('+W-Too many variables in ',6A1,/,1X,80A1)
    C
    108	WRITE(5,208)SUBNAM,(LINE(K),K=1,LNLENG)
    	GOTO 1000
    208	FORMAT ('+W-Undefined variable in ',6A1,/,1X,80A1)
    C
    109	WRITE(5,209)SUBNAM,(LINE(K),K=1,LNLENG)
    	GOTO 1000
    209	FORMAT ('+W-Missing file name in ',6A1,/,1X,80A1)
    C
    110	WRITE(5,210)SUBNAM,(LINE(K),K=1,LNLENG)
    	GOTO 1000
    210	FORMAT ('+W-Nested #CALL in ',6A1,/,1X,80A1)
    C
    111	WRITE(5,211)SUBNAM,(LINE(K),K=1,LNLENG)
    	GOTO 1000
    211	FORMAT ('+W-Missing variable in ',6A1,/,1X,80A1)
    C
    112	WRITE(5,212)SUBNAM,(LINE(K),K=1,LNLENG)
    	GOTO 1000
    212	FORMAT ('+W-Too many nested #IFs or #SUBs in ',6A1,/,1X,80A1)
    C
    113	WRITE(5,213)SUBNAM,(LINE(K),K=1,LNLENG)
    	GOTO 1000
    213	FORMAT ('+W-Bad #SET in ',6A1,/,1X,80A1)
    C
    114	WRITE(5,214)SUBNAM,(LINE(K),K=1,LNLENG)
    	GOTO 1000
    214	FORMAT ('+W-Bad substitute pattern in ',6A1,/,1X,80A1)
    C
    115	WRITE(5,215)SUBNAM,(LINE(K),K=1,LNLENG)
    	GOTO 1000
    215	FORMAT ('+W-Too many #ENDC''s in ',6A1,/,1X,80A1)
    C
    116	WRITE(5,216)
    	GOTO 1000
    216	FORMAT ('+F-Insert error',/)
    C
    117	WRITE(5,217)
    	GOTO 1000
    217	FORMAT ('+F-Output error',/)
    C
    118	WRITE(5,218)
    218	FORMAT ('+F-Input error',/)
    C
    C	DONE
    C
    1000	RETURN
    	END

Страница 2 из 30 ПерваяПервая 123456 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Вспомнить всё
    от Patison в разделе Люди
    Ответов: 194
    Последнее: 16.04.2023, 20:07
  2. Цифровая археология: 1801 и все-все-все
    от Vslav в разделе ДВК, УКНЦ
    Ответов: 2701
    Последнее: 22.02.2022, 17:55

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •