Trailing-Edge
-
PDP-10 Archives
-
tops10and20_integ_tools_v9_3-aug-86
-
tools/crc/ind/indgen.cmd
There are no other files named indgen.cmd in the archive.
.IFNDF p1 .goto start
.if p1 <> "debug" .goto start
.sets crefs "" ;no cref
.setf cref
.setf long
.sett brief
.sett ucan
.goto dbg
.start: ;
; INDGEN Version 2(35)-3 generating IND Version 4(600)-3
;
; This command file is used to generate your customised version of IND,
; the advanced INDirect file utility inspired by RSX. You will be asked
; a number of questions relevant to its operation. Some questions require
; a numeric answer, some a yes/no answer, and some a text string. If you
; press RETURN in response to a yes/no question, NO is assumed. For
; numeric questions of the form
;
; * Number of terminals ?[# R:10:20 D:15]
;
; the two figures after R: indicate an acceptable range for your answer,
; and the figure after the D: is the default (hit carriage return for
; this.) For text string questions, the figures after the R: indicate an
; acceptable range for the number of characters in your answer.
;
; You can save all your answers for later easy use by answering YES to
; question 3.
;
; By default, INDGEN will type a long explanation of each question
; before it asks you anything. If you are familiar with this procedure,
; you can suppress the explanation and just have the questions by
; answering YES to the first question.
;
.sett long
.ask brief Suppress expanded explanations ?
.ift brief .setf long
.iff long .goto 120
;
; You may wish to have a listing of the IND source produced. This is
; useful if you wish to understand its finer points.
;
.120: .ask cref Do you want a CREF listing?
.sets crefs ""
.ift cref .sets crefs "/cref"
.Sets RELDIR "K:"
.Gosub Trels
.If Havrels = 1 .Goto A7
.Sets RELDIR "DSK:"
.Gosub Trels
.If Havrels = 1 .Goto a6
.IFF long .goto a5
;
; You need to specify a directory name or logical name which can be
; used to find the files GETDDT.REL and INDERR.REL. These files are
; required by IND to load successfully.
;
.A5: .Asks RELDIR Where are the files INDERR and GETDDT ?
.Gosub Trels
.IF Havrels = 1 .Goto a6
;
; The files cannot be found there. Please try again
;
.Goto a5
.Trels:.Setn Havrels 1
.Testfile 'reldir'INDERR.REL
.If <FILESTAT> <> 1 .Setn Havrels 0
.Testfile 'reldir'GETDDT.REL
.IF <FILESTAT> <> 1 .Setn Havrels 0
.Return
.A6: DEFINE K: 'RELDIR'
.A7: .iff long .goto a10
;
; You may have "saved" your answers to this procedure on an earlier run.
; By answering YES, you can use those answers again, and skip much of this
; procedure.
;
.a10: .ask ucan Use "canned" answer file ?
.iff ucan .goto a30
.dbg: .call ind-canned-answers
;
; IND canned answer file generated by 'guser' on 'gdate' at 'gtime'.
;
.setf canned
.goto a36
.a30: .iff long .goto a32
;
; You may not have created this file before, but as you have just seen,
; you can save a copy of all your answers to be used the next time you
; generate IND. Answer YES to get the (recommended) saved answer file.
;
.a32: .ask canned Create "canned" answer file ?
.iff canned .goto a36
.open ind-canned-answers.cmd
.a36: .iff long .goto 10
;
; By default, IND allows a user to exit a command file prematurely
; by typing CTRL/Z in response to a question. Your command files can turn
; this feature on and off during execution. To turn it off by default,
; so that a command file cannot be exited until the end, respond YES
; to the following question.
;
.10: .ifndf ctrlz .ask ctrlz Disallow ^Z exits by default ?
.iff long .goto 20
;
; IND usually does not display its internal directives as it executes
; them, only EXEC commands and questions. You can turn this on with the
; .ENABLE TRACE directive. To make TRACE mode the default, answer YES
; to this question.
;
.20: .ifndf disp .ask disp Display IND directives by default ?
.iff long .goto 30
.disable substitution
;
; By default, symbol substitution, the feature whereby parameters may
; be used in IND files, is turned on. This makes the character '
; (apostrophe) have a special meaning, making some command files fail.
; This feature can be turned on and off at runtime. To turn it off
; intially, answer yes to the next question
;
.enable substitution
.30: .ifndf subs .ask subs Disable substitution initially?
.disable substitution
.iff long .goto 35
;
; You may wish to alter the character that IND uses to delimit
; symbol names to be substituted. By default it is ' (apostrophe.)
; It can be changed at execution time by the .SETQUOTE directive.
; This question allows you to alter the default.
;
.35: .ifndf quochar .asks quochar Substitution delimiter ? [D:']
.if quochar eq "" .sets quochar "'"
.code quoval quochar
.enable substitution
.iff long .goto 40
;
; There is a maximum limit on the number of characters in a string
; variable. This does not affect storage greatly, but affects the number
; of times the garbage collector runs.
;
.40: .ifndf mslen .askn [20:200:100] mslen Maximum length of string variable
.iff long .goto 50
;
; IND allows subroutines to be invoked by the .GOSUB and .RETURN
; directives. This parameter controls how deeply they may be nested.
;
.50: .ifndf gosub .ASKN [1:100:4] gosub GOSUB nesting depth
.iff long .goto 55
;
; Command files are permitted to call other command files also. This
; allows you to write "command procedures"that can be freely used by other
; command files. This question determines how deep you allow this nesting
; to go.
;
.55: .ifndf mxcal .askn [1:10:4] mxcal CALL nesting depth
.iff long .goto 60
;
; IND must use a stack to evaluate numeric expressions. This parameter
; controls how many nested sets of brackets are permitted in a numeric
; expression. The default should be large enough for all purposes.
;
.60: .ifndf mxbrk .askn [5:100:25] mxbrk Maximum nested brackets in numeric expressions
.iff long .goto 70
;
; This controls INDs ability to call itself. The default should be taken
; unless you have modified IND.
;
.70: .ifndf Stack .askn [50:500:200] Stack Stack size
.iff long .goto 80
;
; When IND is invoked with a command of the form IND TEST, it assumes
; a default file type of .CMD. This question allows you to change this
; default to any string.
;
.80: .sets <strdef> "CMD"
.ifndf deftyp .asks [0:39] deftyp Default file type for command files [D:CMD]
.purge <strdef>
.iff long .goto 90
;
; IND usually accepts commands the width of a terminal screen. You may
; change the maximum length of a command with this question.
;
.90: .ifndf maxcmd .askn [80:200:100] maxcmd Maximum length of IND command
.iff long .goto 100
;
; The next few questions all relate to the maximum number of variables of
; a particular type you are allowed in your program. This affects the size
; of IND quite substantially.
;
.100: .ifndf lgcsiz .askn [10:1000:100] lgcsiz Maximum number of logical variables
.ifndf numsiz .askn [10:1000:100] numsiz Maximum number of numeric variables
.ifndf strsiz .askn [10:1000:200] strsiz Maximum number of string variables
.ifndf filsiz .askn [1:20:10] filsiz Maximum number of filename variables
.ifndf fltsiz .askn [10:1000:100] fltsiz Maximum number of floating-point variables
.ifndf labsiz .askn [20:1000:300] labsiz Maximum number of labels in a command file
.iff long .goto 110
;
; The next question is about the POOL, an area of storage reserved for
; strings. The size of this affects 2 things:
; (1) The maximum number of characters in all string variables put
; together - the number is an absolute upper bound, never reached
; due to overhead ;
; (2) The number of times the garbage collector runs to collect unused
; space.
;
; If your applications redefine string symbols frequently, it is worth
; increasing the size of the pool. Increasing it also increases the
; swapping load caused by IND.
;
.110: .ifndf strspc .askn [mslen*5:mslen*strsiz:mslen*(strsiz/10)] strspc Size of string POOL
.iff long .goto logfil
;
; IND is capable of recording the names of all people who use it in
; a logfile. This should be on PS:, and should have a protection allowing
; all people to append to it. You need not have this feature.
;
.logfil: .ifndf logf .ASK logf Do you want the logfile feature ?
.iff logf .goto qtget
.iff long .goto lfget
;
; Enter the name of the logfile desired. The default is
; PS:<OPERATOR>IND-USERS.TXT
;
.lfget:.sets <strdef> "PS:<OPERATOR>IND-USERS.TXT"
.IFNDF lfnam .asks lfnam Name of user record file
.PURGE <STRDEF>
.qtget:.ifndf lfnam .sets lfnam ""
.iff long .goto qtask
;
; IND needs a special EXEC with the prompt removed to implement the
; .ENABLE QUIET directive well. This is sent on the distribution tape.
; If you do not want to use it, just type return in response to the
; next question.
;
.qtask: .ifndf qtnam .asks qtnam Name of quiet EXEC:
.if qtnam eq "" .sets qtnam "SYSTEM:EXEC.EXE"
.iff long .goto aboask
;
; IND, like any program, can occasionally run away, often because the
; input given to it does not make sense. You can abort IND with a control
; character, which is usually CTRL/A (like MIC) but can be changed to
; any other. The facility can also be turned off at runtime.
; You type in the corresponding printing character to the aborting one.
; IE if you want CTRL/Y to abort IND, type Y.
; Type return for CTRL/A.
;
.aboask: .sets <strdef> "A"
.ifndf aboch .asks [1:1] aboch Enter the printing character whose control will abort:
.code abochr aboch
.setn abochr abochr-64
.if abochr < 0 .goto badabo
.if abochr > 25 .goto badabo
.if aboch = "C" .goto badabo
.if aboch = "O" .goto badabo
.if aboch = "T" .goto badabo
.if aboch = "S" .goto badabo
.if aboch = "Q" .goto badabo
.goto abook
.badabo:;
; You cannot use CTRL/'aboch'.
; Try something else.
.purge aboch
.goto aboask
.abook:.WORK:;
; working....
;
.iff canned .goto b115
.ift ucan .goto b115
.enable data
.;
.; Canned answers for INDGEN generated by '<user>' on '<date>'
.;
.sets guser "'<user>'"
.sets gdate "'<date>'"
.sets gtime "'<time>'"
.setn maxcmd 'maxcmd'
.setn mxbrk 'mxbrk'
.setn mslen 'mslen'
.setn gosub 'gosub'
.setn mxcal 'mxcal'
.setn stack 'stack'
.sets deftyp "'deftyp'"
.setn lgcsiz 'lgcsiz'
.setn numsiz 'numsiz'
.setn fltsiz 'fltsiz'
.setn strsiz 'strsiz'
.setn filsiz 'filsiz'
.setn labsiz 'labsiz'
.setn strspc 'strspc'
.setn quoval 'quoval'
.sets qtnam "'qtnam'"
.sets aboch "'aboch'"
.setn abochr 'abochr'
.disable substitution
.sets quochar "'quochar'"
.enable substitution
.disable data
.ift ctrlz .data .sett ctrlz
.iff ctrlz .data .setf ctrlz
.ift subs .data .sett subs
.iff subs .data .setf subs
.ift disp .data .sett disp
.iff disp .data .setf disp
.ift logf .data .sett logf
.iff logf .data .setf logf
.ift logf .data .sets lfnam "'lfnam'"
.iff logf .data .sets lfnam ""
.close
.b115: .open indsym.mac.-1
.setn $ctrlz 0
.ift ctrlz .setn $ctrlz -1
.setn $subs 0
.ift subs .setn $subs -1
.setn $disp 0
.ift disp .setn $disp -1
.IFDF P1 .if p1 eq "debug" .setf logf
.setn $logf 0
.ift logf .setn $logf 1
.setn mxbrk mxbrk*2
.setn maxcmd maxcmd/5
.;.status
.;.ask ok Symbols ok ?
.;.iff ok .stop
.setn impure maxcmd+filsiz+labsiz+strsiz+lgcsiz+numsiz+fltsiz+mxbrk+stack
.setn impure impure+(maxcmd*3)+gosub+(mslen*4)+((strspc/5)*2)
.setn impure impure+(2*(filsiz+labsiz+strsiz+lgcsiz+numsiz+fltsiz))+(mslen*5)
.setn impure impure+50+(3*14)+mxcal
.setn impag impure/512
.if impure ne impag*512 .setn impag impag+1
.;
.; Size of impure data area =~ 'impure' words ('impag' pages)
.;
.enable data
universal indsym - data for IND tables
.DIRECTIVE .NOBIN
;
; This file was generated by IND on '<date>' at '<time>' by '<user>'
;
; System: '<system>'
;
$ctrlz=='$ctrlz' ;default for control-z exits
$disp=='$disp' ;no display of commands
$$subst=='$subs' ;allow substitution
logg=='$logf' ;log of users required
define lfnam,<[asciz/'lfnam'/]> ;name of logfile
mslen==^d'mslen' ;maximum string length
mxcnst=='gosub' ;maximum GOSUB nesting
mxcal==^d'mxcal' ;maximum .CALL nest depth
numsl==^d'mxbrk' ;depth of numeric parse stack
slen==^d'stack' ;big stack for parsing ?
define deftyp,<$defty 'deftyp'>
define $defty(type<cmd>),<-1,,[asciz/type/]> ;default command file name
define qtnam,<asciz/'qtnam'/> ;name of quiet EXEC
maxcom==^d'maxcmd' ;max length of command line in words
asklen==^d'maxcmd' ;maximum length of question in words
lgcsiz==^d'lgcsiz' ;maximum number of logical symbols
numsiz==^d'numsiz' ;maximum number of numerivc symbols
strsiz==^d'strsiz' ;maximum number of string symbols
filsiz==^d'filsiz' ;maximum number of file symbols
labsiz==^d'labsiz' ;maximum number of labels
fltsiz==^d'fltsiz' ;maximum number of real symbols
maxchr==^d9 ;maximum number of characters in asymbol name
;(should be multiple of 5 -1)
strspc==^d'strspc' ;size of string storage in characters
$subdl==^d'quoval' ;code for character to delimit substitution
; ("'quochar'")
aboch==^d'abochr' ;code for character to abort IND
; (ctrl/'aboch')
end
.disable data
.close
;
; We will now compile and load IND. This takes 50 CPU seconds on a 2060 -
; if the load is high or you have a KS, or both, you may wish to take a
; break.
;
; Commencing IND loading on '<date>' at '<time>' by '<user>'
; on system '<system>'
;
compile indsym
load'crefs'/compile ind
save
.ask success Did IND load succesfully?
.iff success .goto 999
.iff cref .goto 140
r cref
ind=ind
print ind.lst/notify
information (about) output-requests
.140: delete ind.rel,indsym.rel,indsym.unv
;
; Your IND system is now complete. You may test it by repeating this
; procedure ! Have fun...
;
.stop
.999: ;
; We will exit while you correct the problems. Repeat the procedure when
; you are satisified.
;