Тогда не зачёт.
Говоря про PDP-11, думаю, не сильно ошибусь, если скажу, что подавляющее количество людей будет подразумевать как компы, так и процессора. Семейство PDP-11. Rainbow к нему не относится.
Так что по прежнему один - и на порядок, а то и больше коммерчески самый успешный - на втором месте - семейство (процессоров и компов) PDP-8.
И тогда нам повезло - мы наняли Гарольда Макфарланда, протеже К. Гордона Белла, что бы он работал со мной. Гарольд работал над несколькими архитектурами в институте Карнеги-Меллона. Одна из них, нравившаяся ему, была настолько сложной и запутанной, что я не мог понять, как писать для неё программы - кто знает, она могла быть самой лучшей, но этого мы никогда не узнаем. Другая архитектура Гарольда была по существу тем, что стало 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.
Я бы сказал, что это документированное поведение многих процессоров, в частности, всех 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
"Дисплеи - это отдельная история - кубинские не работали, когда было жарко, советские, когда холодно..."
Моя первая работа - на химфаке МГУ - привезли нам это чудо, порядки десяти штук. Не завёлся ни один Приехали два спеца с Кубы, вводить в эксплуатацию С ними приехали две здоровых коробки, набитые платами. Метод ремонт на 90 процентов - замены плат Не помню насчёт работоспособности в жару или в холод
Третья работа - в Саратове - был комплекс СМ-1600 (если мне не изменяет память - четыре стойки, мегабайт памяти). Крутая особенность - полная неработоспособность холодной. Помещение зимой сильно остывало, я приходил часам к восьми, включал СМ-ку, включал пару обогревателей и.... мы ждали примерно до обеда - пока в помещении не станет достаточно тепло для работы нашего ЧУДА. Зато летом было всё тип-топ - какая бы жара не стояла (окна нараспашку, потом был кондиционер, но он не сильно спасал) - ни малейшего сбоя И были на этой СМ-ке диски типа RK06 (не помню их советское название) - вот с ними была полная жопа. Сам дисковод продувался воздухом, что бы обеспечить достаточную подъёмную силу для головок - должен был быть определённый напор воздуха, а что бы всякая пыль не царапнула поверхность - были воздушные фильтры, в том числе - предварительный фильтр, который в нашем помещении быстро забивался, напор воздуха падал и... головка садилась на блин. После чего - диск можно было выбрасывать. Сколько мы тогда дисков угробили, пока поняли в чём причина... И что самое противное - вроде как в диске два блина.. но пересобрать из живых не получится - на одной из поверхностей был на заводе прописан серво-сигнал - по нему позиционировались головки - разобрал диск - и все.. Отъюстировать уже никак.. Жаль не оставил себе на память хотя бы испорченных парочку
Последний раз редактировалось Hunta; 12.05.2020 в 17:06.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Похоже, судя по тому, что увидел на фотках В общем, барахло редкостное в пыльной атмосфере.
Потом работал на СМ-1420, там стояли, опять же, судя по фоткам СМ5407 - 20-ти мб-ные монстрики У этих было аппаратное позиционирование головок (гребёнка), так то проблем с разборкой сборкой особо не было - но у них площадь головки была больше, поэтому посадить её на диск было сложней. Зато была проблема совместимости самих дисков между накопителями - периодически нужно было выставлять положение головок по эталонному диску, у которого на каждой поверхности была записана всего одна дорожка Опять же - жаль не упёр хотя бы один на память
Последний раз редактировалось Hunta; 12.05.2020 в 17:07.
Из RT-11 V02CКод: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
Ну прям моя молодость - всё что можем, пишем на фортране Всё что не можем - ... тоже на фортране
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
Всё было круче
- - - Добавлено - - -
Дедушка 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
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)