$CONTROL USLINIT,CODE,MAP                                      <<01549>>00010000
<<COMMAND INTERPRETER - MODULE 51>>                            <<01549>>00012000
<< HP32002C MPE SOURCE C.00.00 >>                                       00014000
$COPYRIGHT     "(C) COPYRIGHT HEWLETT-PACKARD CO. 1980. ",            & 00016000
$     "THIS PROGRAM MAY BE USED WITH ONE COMPUTER SYSTEM AT A ",      & 00018000
$     "TIME AND SHALL NOT OTHERWISE BE RECORDED, TRANSMITTED OR ",    & 00020000
$     "STORED IN A RETRIEVAL SYSTEM.  COPYING OR OTHER REPRODUCTION ",& 00022000
$     "OF THIS PROGRAM EXCEPT FOR ARCHIVAL PURPOSES IS PROHIBITED ",  & 00024000
$     "WITHOUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY."   00026000
$THIRTY                                                                 00028000
$TITLE "IMS"                                                            00030000
                                                               <<04705>>00032000
<<*********************************************************>>  <<04705>>00034000
<<                                                         >>  <<04705>>00036000
<<              CIMGR   --  Module 5C                      >>  <<04705>>00038000
<<                                                         >>  <<04705>>00040000
<<*********************************************************>>  <<04705>>00042000
                                                               <<04705>>00044000
                                                               <<04705>>00046000
                                                               <<04705>>00048000
<<*************************************************************<<U.RAO>>00050000
<<*****************  Command Interpreter IMS  *****************<<U.RAO>>00052000
<<*************************************************************<<U.RAO>>00054000
<<                                                             <<U.RAO>>00056000
<<*************************************************************<<U.RAO>>00058000
<<************************  OVERVIEW  *************************<<U.RAO>>00060000
<<*************************************************************<<U.RAO>>00062000
<<                                                             <<U.RAO>>00064000
<<WHO:                                                         <<U.RAO>>00066000
<<   Larry Birenbaum designed the basic structures of the      <<U.RAO>>00068000
<<Command Interpreter for VERSION A of MPE.  Work was begun in <<U.RAO>>00070000
<<1970 or 1971.                                                <<U.RAO>>00072000
<<   Bob Olson substantially redesigned the parsers of the     <<U.RAO>>00074000
<<Command Interpreter for VERSION B of MPE II.  Work was begun <<U.RAO>>00076000
<<in November 1976 and completed in late 1977.  The basic      <<U.RAO>>00078000
<<algorithms for executing the commands remained essentially   <<U.RAO>>00080000
<<the same even though the parsers were rewritten.  Several    <<U.RAO>>00082000
<<new commands were added at this time, as were User Defined   <<U.RAO>>00084000
<<Commands.                                                    <<U.RAO>>00086000
<<   Other people who have added commands or modified existing <<U.RAO>>00088000
<<commands for MPE IIB are Ron Hoyt and Bob Vannucci (Private  <<U.RAO>>00090000
<<Volumes, including modification of the accounting commands   <<U.RAO>>00092000
<<and STORE/RESTORE), Neal Mack (Transaction Logging user      <<U.RAO>>00094000
<<commands), Mike Philben (revision of DS commands), Ed Basart <<U.RAO>>00096000
<<(revision of HELLO, JOB, and DATA and the addition of User   <<U.RAO>>00098000
<<Defined Commands), and Bob Gerstmeyer (CLINE command).       <<U.RAO>>00100000
<<                                                             <<U.RAO>>00102000
<<WHERE:                                                       <<U.RAO>>00104000
<<   Pieces of the Command Interpreter are scattered all over  <<U.RAO>>00106000
<<the system.  This module contains the bulk of the executors. <<U.RAO>>00108000
<<The spooling commands (SHOWJOB, SHOWOUT, STREAM, and SHOWIN) <<U.RAO>>00110000
<<may be found in the SPOOLCOMS module.  The DS commands       <<U.RAO>>00112000
<<(RFA, DSLINE, REMOTE) will be found in the DS code.  STORE   <<U.RAO>>00114000
<<and RESTORE have a module of their own.  The bulk of the work<<U.RAO>>00116000
<<for User Defined Commands is done in a module called UDC.    <<U.RAO>>00118000
<<HELP resides in module HELPUSER.  JOB, HELLO and DATA are    <<U.RAO>>00120000
<<parsed by code in module NURSERY.  In general, it is better  <<U.RAO>>00122000
<<to put the executors in the same module as the routines which<<U.RAO>>00124000
<<do the work.  This will reduce confusion and simplify        <<U.RAO>>00126000
<<maintenance.  There is no inherent benefit to accumulating   <<U.RAO>>00128000
<<executors in common segments, assuming that there is         <<U.RAO>>00130000
<<non-trivial work to do.                                      <<U.RAO>>00132000
<<                                                             <<U.RAO>>00134000
<<WHY:                                                         <<U.RAO>>00136000
<<   The purpose served by the Command Interpreter is to       <<U.RAO>>00138000
<<provide the user access to the operating system functions    <<U.RAO>>00140000
<<without requiring him/her to go through the irritation of    <<U.RAO>>00142000
<<writing a program to do so.  There are three primary function<<U.RAO>>00144000
<<provided by the commands.  Most important is the ability to  <<U.RAO>>00146000
<<execute programs, evidenced by the RUN command and the variou<<U.RAO>>00148000
<<compiler commands.  Second is the ability to manage one's    <<U.RAO>>00150000
<<resources, such as files.  Finally there are a large number o<<U.RAO>>00152000
<<utility functions, primarily for status checking.  When a new<<U.RAO>>00154000
<<capability is added to the system, the user should be given  <<U.RAO>>00156000
<<commands which allow him to manipulate the capability and to <<U.RAO>>00158000
<<determine the status of the new resource created by the      <<U.RAO>>00160000
<<capability.                                                  <<U.RAO>>00162000
<<                                                             <<U.RAO>>00164000
$PAGE                                                                   00166000
<<*************************************************************<<U.RAO>>00168000
<<****************  ADDING A COMMAND TO THE CI  ***************<<U.RAO>>00170000
<<*************************************************************<<U.RAO>>00172000
<<                                                             <<U.RAO>>00174000
<<Step 1:  Designing the command.                              <<U.RAO>>00176000
<<   A reasonable and parseable command syntax is one of the   <<U.RAO>>00178000
<<important parts of designing a good command.  Your goal is   <<U.RAO>>00180000
<<to minimize user irritation when using the command.  Always  <<U.RAO>>00182000
<<remember that for most users the problem for which they are  <<U.RAO>>00184000
<<using a computer is probably solved within an application    <<U.RAO>>00186000
<<program of some sort and the Command Interpreter in general  <<U.RAO>>00188000
<<and your command in particular are necessary annoyances.     <<U.RAO>>00190000
<<You must strive to limit that annoyance to the unavoidable.  <<U.RAO>>00192000
<<   Unfortunately, there are a wide variety of ways in which  <<U.RAO>>00194000
<<you can annoy people.  Some of the solutions are mutually    <<U.RAO>>00196000
<<incompatible.  The following is a list of the issues you     <<U.RAO>>00198000
<<should consider.                                             <<U.RAO>>00200000
<<   1)  Verbose versus terse command names                    <<U.RAO>>00202000
<<       In general it is desireable to have command names     <<U.RAO>>00204000
<<       which accurately reflect the function of the          <<U.RAO>>00206000
<<       command.  The tradeoff is that verbose command        <<U.RAO>>00208000
<<       names which describe the command are easier to        <<U.RAO>>00210000
<<       pick out in documentation whereas terse names are     <<U.RAO>>00212000
<<       easier to type.  Thus the deciding factor should      <<U.RAO>>00214000
<<       be how often the user will use the command.  A        <<U.RAO>>00216000
<<       side consideration is that the use of archaic         <<U.RAO>>00218000
<<       English or bizarre abbreviations will work a          <<U.RAO>>00220000
<<       hardship on our users who are not native English      <<U.RAO>>00222000
<<       speakers.                                             <<U.RAO>>00224000
<<   2)  Keyword versus positional parameters                  <<U.RAO>>00226000
<<       Positional parameters can be dangerous, especially    <<U.RAO>>00228000
<<       when the parameters can be similar data types.        <<U.RAO>>00230000
<<       For example, a positional string of numbers can       <<U.RAO>>00232000
<<       result in erroneous operation due to the accidental   <<U.RAO>>00234000
<<       omission of a delimiter.  Keyworded parameters        <<U.RAO>>00236000
<<       can be very verbose, especially on complex commands.  <<U.RAO>>00238000
<<       They can also work a hardship when a user uses a      <<U.RAO>>00240000
<<       particular command heavily, since it drastically      <<U.RAO>>00242000
<<       enlarges the amount of typing.  This last objection   <<U.RAO>>00244000
<<       can be gotten around through the agency of User       <<U.RAO>>00246000
<<       Defined Commands.  Another major objection to         <<U.RAO>>00248000
<<       keywords is that it requires several different        <<U.RAO>>00250000
<<       delimiters, often leading to typing errors and        <<U.RAO>>00252000
<<       mental confusion.                                     <<U.RAO>>00254000
<<   3)  Delimiters & other special characters                 <<U.RAO>>00256000
<<       The typical delimiters in commands are commas to      <<U.RAO>>00258000
<<       separate positional parameters and semicolons to      <<U.RAO>>00260000
<<       separate keywords.  The file command shows this       <<U.RAO>>00262000
<<       in full generality.  Periods are sometimes            <<U.RAO>>00264000
<<       terminators (as in the LABEL option on the FILE       <<U.RAO>>00266000
<<       command) and sometimes separators, as in the logon    <<U.RAO>>00268000
<<       user ID and file names.  Blanks are tough to deal     <<U.RAO>>00270000
<<       with and should be avoided as delimiters.             <<U.RAO>>00272000
<<       Non-printing characters should be avoided at all      <<U.RAO>>00274000
<<       costs.  All commands will be terminated with a        <<U.RAO>>00276000
<<       carriage return when passed to the command parser.    <<U.RAO>>00278000
<<   4)  Hardware/software peculiarities                       <<U.RAO>>00280000
<<       Too frequently the command syntax reflects some       <<U.RAO>>00282000
<<       strange and unpleasant aspect of the mechanism        <<U.RAO>>00284000
<<       underlying the command.  We should not require the    <<U.RAO>>00286000
<<       user to be cognizant of our design problems.  To      <<U.RAO>>00288000
<<       do so violates the principle of lowering the          <<U.RAO>>00290000
<<       annoyance factor.                                     <<U.RAO>>00292000
<<   5)  Extensibility                                         <<U.RAO>>00294000
<<       No matter how well your command does its job, one     <<U.RAO>>00296000
<<       of these days someone will want to modify or          <<U.RAO>>00298000
<<       extend it.  In particular, one should be careful      <<U.RAO>>00300000
<<       about the use of delimiters in ways other than the    <<U.RAO>>00302000
<<       "traditional" way.  For example, periods, commas,     <<U.RAO>>00304000
<<       semicolons and others have fairly standardized        <<U.RAO>>00306000
<<       meanings, and to use them in a different way reduces  <<U.RAO>>00308000
<<       the options of your successor to extend your command. <<U.RAO>>00310000
<<       Another related issue is that listing formats should  <<U.RAO>>00312000
<<       be extensible.                                        <<U.RAO>>00314000
<<   6)  Defaults                                              <<U.RAO>>00316000
<<       Defaults are vital, dangerous and difficult to choose.<<U.RAO>>00318000
<<       The design goal is that the command should be simple  <<U.RAO>>00320000
<<       for simple minded users.  This implies restraint in   <<U.RAO>>00322000
<<       the use of defaults which vary depending on some other<<U.RAO>>00324000
<<       parameter to the command.  Too smart defaults can be  <<U.RAO>>00326000
<<       just as bad as no defaults, since many users will     <<U.RAO>>00328000
<<       use the command defensively to avoid surprises from   <<U.RAO>>00330000
<<       the default mechanism.  Good luck.                    <<U.RAO>>00332000
<<   7)  Ambiguity                                             <<U.RAO>>00334000
<<       Careful design will avoid the need for lookahead to   <<U.RAO>>00336000
<<       resolve abiguous situations.  Lookahead should be     <<U.RAO>>00338000
<<       avoided if at all possible, as it results in          <<U.RAO>>00340000
<<       much code with complicated data structures.           <<U.RAO>>00342000
<<   8)  Computerese                                           <<U.RAO>>00344000
<<       Keywords should be couched in English, not computerese<<U.RAO>>00346000
<<                                                             <<U.RAO>>00348000
<<In summary, the user of your command will probably not be a  <<U.RAO>>00350000
<<computer professional and probably will be annoyed at the nee<<U.RAO>>00352000
<<to use your command at all.  Simplicity, understandability an<<U.RAO>>00354000
<<regularity are the keys to good command syntax.              <<U.RAO>>00356000
<<                                                             <<U.RAO>>00358000
<<Step 2: Code the Executor.                                   <<U.RAO>>00360000
<<   For the most part this is quite straightforward.  Most of <<U.RAO>>00362000
<<the existing executors can be used as models.  There are a fe<<U.RAO>>00364000
<<good concepts to keep in mind, however.                      <<U.RAO>>00366000
<<   Generating good error messages is just as important as    <<U.RAO>>00368000
<<executing the command.  The whole error message issue is deal<<U.RAO>>00370000
<<with below.                                                  <<U.RAO>>00372000
<<   The code of the command should be easily extensible.  This<<U.RAO>>00374000
<<implies the use of a simple parsing scheme with very obvious <<U.RAO>>00376000
<<techniques.  Probably more often than any other part of the  <<U.RAO>>00378000
<<system, the CI is modified by people who have no proprietary <<U.RAO>>00380000
<<interest in it.  In the interests of reliability and         <<U.RAO>>00382000
<<maintainability, it is desireable to start with as clean code<<U.RAO>>00384000
<<as possible.  Unfortunately, no universal parsing scheme has <<U.RAO>>00386000
<<yet been developed for the CI.                               <<U.RAO>>00388000
<<   A trap to avoid is called the "parse a little, execute a  <<U.RAO>>00390000
<<little" syndrome.  It results in the need to back out of a   <<U.RAO>>00392000
<<situation when an error is detected further down stream.  A  <<U.RAO>>00394000
<<secondary problem is that it tends to result in the          <<U.RAO>>00396000
<<partial destruction of the context of the error.  A command  <<U.RAO>>00398000
<<should be parsed completely before being executed at all.    <<U.RAO>>00400000
<<   Don't worry about having particularly efficient code.  The<<U.RAO>>00402000
<<CI's execution time is trivial compared to the time it takes <<U.RAO>>00404000
<<for the user to recover from a poorly designed error message <<U.RAO>>00406000
<<or even from a poorly designed syntax.  The customer always  <<U.RAO>>00408000
<<comes first.                                                 <<U.RAO>>00410000
<<   The use of global storage is discouraged.  Most important <<U.RAO>>00412000
<<is the fact that there are some performance consequences     <<U.RAO>>00414000
<<related to the need to constantly enlarge the CI's stack.    <<U.RAO>>00416000
<<If you find you do need global storage, be sure to initialize<<U.RAO>>00418000
<<it in procedure COMMANDINTERP, as the CI is procreated and   <<U.RAO>>00420000
<<thus has no global initialization capability.  Be careful    <<U.RAO>>00422000
<<about where you put new globals.  Certain other modules such <<U.RAO>>00424000
<<as UDC know about the CI global space.                       <<U.RAO>>00426000
<<   In general, the execution part of the command should simpl<<U.RAO>>00428000
<<be a call to the appropriate user callable intrinsic.  The   <<U.RAO>>00430000
<<CI usually should not provide the user any special services  <<U.RAO>>00432000
<<that are not available programmatically.  In this way we avoi<<U.RAO>>00434000
<<such undesireable situations as users getting their accountin<<U.RAO>>00436000
<<information through a call to the REPORT command and setting <<U.RAO>>00438000
<<up their files through a call to the FILE command through the<<U.RAO>>00440000
<<COMMAND intrinsic.  See the SETJCW command for an example of <<U.RAO>>00442000
<<this.                                                        <<U.RAO>>00444000
<<   EXCHANGEDB is to be avoided if at all possible, even if   <<U.RAO>>00446000
<<you have to do data segment moves iteratively.  The speed cos<<U.RAO>>00448000
<<is nothing compared to the cost of the crash which is        <<U.RAO>>00450000
<<inevitable when doing split stack operations.  All of the CI <<U.RAO>>00452000
<<utility routines assume no split stack operation.            <<U.RAO>>00454000
<<   Similarly there is rarely any valid reason for accessing  <<U.RAO>>00456000
<<system primitives directly from the CI.  The CI should be a  <<U.RAO>>00458000
<<very high level module.  It rarely has any business rooting  <<U.RAO>>00460000
<<around in some system table.  This principle unfortunately ha<<U.RAO>>00462000
<<been rather imperfectly adhered to.                          <<U.RAO>>00464000
<<   These almost random thoughts about writing executors hardl<<U.RAO>>00466000
<<provide a good framework for writing code.  Cursory          <<U.RAO>>00468000
<<examination of some of the executors currently in the module <<U.RAO>>00470000
<<probably will give you a better idea of the tricks of the    <<U.RAO>>00472000
<<trade.  A few ideas stand out.                               <<U.RAO>>00474000
<<                                                             <<U.RAO>>00476000
<<      Code assuming someone else will be changing it.        <<U.RAO>>00478000
<<                                                             <<U.RAO>>00480000
<<      Code for good error messages, not speed.               <<U.RAO>>00482000
<<                                                             <<U.RAO>>00484000
<<      It is far better to detect a problem at the            <<U.RAO>>00486000
<<      time the command is put in than when it is             <<U.RAO>>00488000
<<      executed.  That is, at parse time as opposed           <<U.RAO>>00490000
<<      to execution time.                                     <<U.RAO>>00492000
<<                                                             <<U.RAO>>00494000
<<      Cleverness will get you in trouble, usually for        <<U.RAO>>00496000
<<      no good reason.                                        <<U.RAO>>00498000
<<                                                             <<U.RAO>>00500000
<<Step 3:  Add the command to the Command Interpreter.         <<U.RAO>>00502000
<<   Other than physically adding the executor to the system,  <<U.RAO>>00504000
<<the only task is to add the command name to the list in      <<U.RAO>>00506000
<<procedure COMSEARCH.  This procedure is called for each      <<U.RAO>>00508000
<<command to determine if it is one of the ones known to the   <<U.RAO>>00510000
<<system.  The mechanics of this process are described in that <<U.RAO>>00512000
<<procedure.  If the executor is physically outside the CI     <<U.RAO>>00514000
<<module, don't forget to add the OPTION EXTERNAL declaration. <<U.RAO>>00516000
<<Congratulations.  Now all you need to do is make sure it     <<U.RAO>>00518000
<<works.                                                       <<U.RAO>>00520000
<<                                                             <<U.RAO>>00522000
$PAGE                                                                   00524000
<<*************************************************************<<U.RAO>>00526000
<<**************  ERROR MESSAGES FROM THE CI  **************** <<U.RAO>>00528000
<<*************************************************************<<U.RAO>>00530000
<<                                                             <<U.RAO>>00532000
<<Philosophical aspects:                                       <<U.RAO>>00534000
<<     The essential goal of an error message from the CI is to<<U.RAO>>00536000
<<help the user quickly recover from his problem.  In general, <<U.RAO>>00538000
<<a good error message should indicate:                        <<U.RAO>>00540000
<<    1)  What the CI did not like.  On syntax errors this     <<U.RAO>>00542000
<<        typically is done with a caret underneath where the  <<U.RAO>>00544000
<<        problem was detected.  If the caret isn't sufficient <<U.RAO>>00546000
<<        to identify the problem then some of the text of the <<U.RAO>>00548000
<<        message should further elaborate.  On semantic errors<<U.RAO>>00550000
<<        this usually is done with the text of the message.   <<U.RAO>>00552000
<<    2)  How to recover.  This usually will take the form of  <<U.RAO>>00554000
<<        telling the user what the valid input might be.  For <<U.RAO>>00556000
<<        example, on an invalid record type in the :FILE      <<U.RAO>>00558000
<<        command, the CI will put out a message something like<<U.RAO>>00560000
<<        EXPECTED RECORD TYPE TO BE F, V OR U.                <<U.RAO>>00562000
<<        This serves to identify to the user very quickly what<<U.RAO>>00564000
<<        the valid syntax is and thus how to get on with his  <<U.RAO>>00566000
<<        business.  Sometimes it is hard to figure out what th<<U.RAO>>00568000
<<        user had in mind.  For example, it isn't really      <<U.RAO>>00570000
<<        possible to second guess the user on an unknown      <<U.RAO>>00572000
<<        command name.  In these relatively rare cases, it is <<U.RAO>>00574000
<<        sufficient to tell the user just what was wrong.     <<U.RAO>>00576000
<<        In general, if it is a syntax error of any sort, it  <<U.RAO>>00578000
<<        is possible to give a good error message outlining   <<U.RAO>>00580000
<<        what was expected.  A cop-out on this is really      <<U.RAO>>00582000
<<        sloppy workmanship.                                  <<U.RAO>>00584000
<<    3)  In many cases it is desireable to tell the user what <<U.RAO>>00586000
<<        was done about the error.  This is particularly true <<U.RAO>>00588000
<<        in the case of warnings, where the user may be left  <<U.RAO>>00590000
<<        wondering whether some default was taken.  For exampl<<U.RAO>>00592000
<<        in the accounting structure commands we ignore many  <<U.RAO>>00594000
<<        errors.  In each case it is necessary to tell the use<<U.RAO>>00596000
<<        what default we took so that he can then do an ALTxxx<<U.RAO>>00598000
<<        to fix up the particular error, if necessary.  Of    <<U.RAO>>00600000
<<        course, in each case we try to pick a reasonable     <<U.RAO>>00602000
<<        default so that he doesn't have to do any recovery.  <<U.RAO>>00604000
<<                                                             <<U.RAO>>00606000
<<In any case, messages should be very specific.  Given the    <<U.RAO>>00608000
<<very simple mechanism for generating error and warning       <<U.RAO>>00610000
<<messages, there is no acceptable excuse for generic messages.<<U.RAO>>00612000
<<Examples:                                                    <<U.RAO>>00614000
<<   "INVALID NUMBER" is unacceptable.  Such messages should be<<U.RAO>>00616000
<<of the form "EXPECTED <item> TO BE BETWEEN <n1> AND <n2>."   <<U.RAO>>00618000
<<This message should be used only once in the CI.             <<U.RAO>>00620000
<<   "UNKNOWN KEYWORD" is unacceptable.  The proper form is    <<U.RAO>>00622000
<<"EXPECTED ONE OF <item1>, <item2>....".                      <<U.RAO>>00624000
<<   In general, "<item>", "<n1>" and so forth should not be   <<U.RAO>>00626000
<<passed to CIERR as parameters but rather be embedded as part <<U.RAO>>00628000
<<of the error message.  The reason for this is that you will  <<U.RAO>>00630000
<<need to give a fuller description of the error in the Error  <<U.RAO>>00632000
<<Messages part of the MPE manual.  It is awkward at best and  <<U.RAO>>00634000
<<embarrassing at worst to have to tell the manual writer "Well<<U.RAO>>00636000
<<it could be this, or it could be that, or even this third    <<U.RAO>>00638000
<<thing."  The one exception is where truly dynamic information<<U.RAO>>00640000
<<is involved.  Examples might include configuration data and  <<U.RAO>>00642000
<<user supplied information like file names.>>                 <<U.RAO>>00644000
<<   In most cases, redundantly specified parameters should    <<U.RAO>>00646000
<<result not in a fatal error but in a warning.  If a value is <<U.RAO>>00648000
<<associated with the redundant keyword then the message should<<U.RAO>>00650000
<<specify that the last value found was used.                  <<U.RAO>>00652000
<<   Similarly unacceptable messages are                       <<U.RAO>>00654000
<<   "INSUFFICIENT PARAMETERS" - what is missing?              <<U.RAO>>00656000
<<   "INSUFFICIENT CAPABILITY" should say what capability is   <<U.RAO>>00658000
<<missing.                                                     <<U.RAO>>00660000
<<   "INSUFFICIENT RESOURCES" should say what resources are    <<U.RAO>>00662000
<<lacking.                                                     <<U.RAO>>00664000
<<And so forth for all messages.                               <<U.RAO>>00666000
<<                                                             <<U.RAO>>00668000
<<Mechanical aspects of adding error messages:                 <<U.RAO>>00670000
<<                                                             <<U.RAO>>00672000
<<1)  Numbering                                                <<U.RAO>>00674000
<<    The number chosen for a message is largely irrelevant.  I<<U.RAO>>00676000
<<    is nice, however, if it is near the other messages       <<U.RAO>>00678000
<<    associated with the same command.  Be sure to declare it <<U.RAO>>00680000
<<    as an equate in the CI globals (or SPOOLCOMS or whatever)<<U.RAO>>00682000
<<    Note that the message should be tagged as to whether it i<<U.RAO>>00684000
<<    a CIERR or CIWARN or whatever.  Put it in message set 2. <<U.RAO>>00686000
<<2)  Generation                                               <<U.RAO>>00688000
<<    There is a procedure called CIERR which is responsible fo<<U.RAO>>00690000
<<    processing related to the handling of errors.  In        <<U.RAO>>00692000
<<    particular this procedure decides whether to print the   <<U.RAO>>00694000
<<    message, abort the job, and other related cleanup        <<U.RAO>>00696000
<<    problems.  Note that it always returns to the caller if  <<U.RAO>>00698000
<<    the job is not aborted.  It is the responsibility of the <<U.RAO>>00700000
<<    caller to assure that the job is clean enough to be      <<U.RAO>>00702000
<<    aborted at the time of the call.  CIERR cannot be called <<U.RAO>>00704000
<<    in split stack mode.  See the listing of CIERR for the   <<U.RAO>>00706000
<<    details of the call.                                     <<U.RAO>>00708000
<<3)  Errors detected by other parts of the system.            <<U.RAO>>00710000
<<    Errors such as file system errors, loader errors, DS     <<U.RAO>>00712000
<<    runtime errors and private volume errors are really of   <<U.RAO>>00714000
<<    little meaning in the context of the CI.  Accordingly,   <<U.RAO>>00716000
<<    when such errors are detected, several messages may be   <<U.RAO>>00718000
<<    displayed.  This is done through the agency of routines  <<U.RAO>>00720000
<<    like FERROR', CYDIRERR', LOADERROR, and CREATEERROR.     <<U.RAO>>00722000
<<    The development of such routines is encouraged whenever  <<U.RAO>>00724000
<<    message sets outside the CI error message set is         <<U.RAO>>00726000
<<    involved.  When such a message is output, the CI should  <<U.RAO>>00728000
<<    also print a message translating the error into the      <<U.RAO>>00730000
<<    context of the command which failed.  For example, when  <<U.RAO>>00732000
<<    a purge fails for an unusual reason, we print the file   <<U.RAO>>00734000
<<    system error message as well as a message saying that the<<U.RAO>>00736000
<<    purge was not done.                                      <<U.RAO>>00738000
<<4)  General purpose parsing routines                         <<U.RAO>>00740000
<<    Some parses, such as file names, are done so often that  <<U.RAO>>00742000
<<    generalized routines exist.  Usually these will be found <<U.RAO>>00744000
<<    in the neighborhood of the error handling routines.      <<U.RAO>>00746000
<<5)  Programmatically callable commands                       <<U.RAO>>00748000
<<    For errors in programmatically callable commands you must<<U.RAO>>00750000
<<    also return the error number to the caller of the COMMAND<<U.RAO>>00752000
<<    intrinsic.  This is done by returning the number through <<U.RAO>>00754000
<<    the ERRNUM parameter to all executors.  Also it is       <<U.RAO>>00756000
<<    required that you return the parameter number in the     <<U.RAO>>00758000
<<    PARMNUM parameter.  Parameter number is roughly defined  <<U.RAO>>00760000
<<    as one for each entity such as a keyword or value past   <<U.RAO>>00762000
<<    the command name.  In other words, 1 is the first        <<U.RAO>>00764000
<<    parameter past the command name, 2 might be the value to <<U.RAO>>00766000
<<    be associated with the keyword which was parameter 1.    <<U.RAO>>00768000
<<                                                             <<U.RAO>>00770000
<<   Error message generation is one of the most important     <<U.RAO>>00772000
<<tasks to be performed by the Command Interpreter.  The best  <<U.RAO>>00774000
<<error messages are generated when the coder tries to envision<<U.RAO>>00776000
<<the user's perception of the error.  For example, in many    <<U.RAO>>00778000
<<cases it seems to the user that it was obvious what he meant <<U.RAO>>00780000
<<even though it was not expressed in correct form.  This      <<U.RAO>>00782000
<<includes redundantly specified keywords like NOCCTL in the   <<U.RAO>>00784000
<<file command.  The user does not think highly of a command   <<U.RAO>>00786000
<<parser which gives him an error message on something like tha<<U.RAO>>00788000
<<which is obviously non-fatal.  The key to success with error <<U.RAO>>00790000
<<messages is to identify errors in the user's frame of        <<U.RAO>>00792000
<<reference, not the system programmer's.                      <<U.RAO>>00794000
<<                                                             <<U.RAO>>00796000
$TITLE "GLOBAL DECLARATIONS"                                            00798000
$PAGE "GLOBAL DECLARATIONS"                                             00800000
$CONTROL MAIN=COMMAND'INTERP                                   <<06.EB>>00802000
BEGIN                                                                   00804000
      <<MISCELLANEOUS DECLARATIONS >>                                   00806000
      INTEGER                                                           00808000
      DELTAQ=Q-0,                                                       00810000
      S0=S-0,                                                           00812000
      S1=S-1,                                                           00814000
      S2=S-2,                                                           00816000
      S4=S-4,                                                           00818000
      S5=S-5,                                                           00820000
      X=X;                                                              00822000
                                                                        00824000
      LOGICAL                                                           00826000
      LS0=S-0,                                                          00828000
      LS1=S-1,                                                          00830000
      LS2=S-2,                                                          00832000
      STATUS=Q-1;                                                       00834000
                                                                        00836000
      DOUBLE                                                            00838000
      DS1=S-1;                                                 << I.A >>00840000
                                                                        00842000
      BYTE POINTER                                                      00844000
      BPS0=S-0;                                                << I.A >>00846000
                                                                        00848000
      INTEGER POINTER                                                   00850000
      PS0=S-0;                                                 << I.A >>00852000
                                                                        00854000
      DOUBLE POINTER                                                    00856000
      DPS0=S-0;                                                << I.A >>00858000
                                                                        00860000
      INTEGER ARRAY ARRDB0(*)=DB+0;                                     00862000
      INTEGER ARRAY ARRDB2(*)=DB+2;                                     00864000
      INTEGER ARRAY ARRQ0(*)=Q-0;                                       00866000
      INTEGER ARRAY ARRQP1(*)=Q+1;                                      00868000
      INTEGER ARRAY ARRQP2(*)=Q+2;                                      00870000
$INCLUDE INCLCIS                                               <<04705>>00872000
      <<EQUATES USED THROUGHOUT>>                                       00874000
                                                                        00876000
      EQUATE                                                            00878000
      << SERIES 33 CPU NUMBER RETURNED FROM 'THISCPU' >>       <<00492>>00880000
      <<CONDITION CODES>>                                               00882000
      CCE=2,                                                            00884000
      CCL=1,                                                            00886000
      CCG=0,                                                            00888000
      <<CI MESSAGE SET NUMBERS>>                               <<U.RAO>>00890000
      CIERRMSGSET=2,                                           <<U.RAO>>00892000
      CIGENERALMSGSET=7,                                       <<U.RAO>>00894000
      FSERRORMSGSET = 8,                                       <<U.RAO>>00896000
   <<EQUATES FOR GENERAL MESSAGES (NOT ERROR MESSAGES)>>       <<U.RAO>>00898000
   JOBPRIVAL       = 1,                                        <<U.RAO>>00900000
   REPORTLINE1     =   4,  <<REPORT HEADER>>                   <<U.RAO>>00902000
   REPORTLINE2     =   5,  <<REPORT HEADER>>                   <<U.RAO>>00904000
   PURGEGROUPQ     =  30,  <<PURGE GROUP ?>>                   <<RV.PV>>00906000
   << END OF PREPARE = 51, >>                                  <<U.RAO>>00908000
   << END OF SUBSYSTEM = 52, >>                                <<U.RAO>>00910000
   << END OF COMPILE = 53, >>                                  <<U.RAO>>00912000
   << END OF REMOTE PROGRAM = 54>>                             <<U.RAO>>00914000
   <<JCW = WARN, MSG 56>>                                      <<U.RAO>>00916000
   <<JCW = FATAL, MSG 57>>                                     <<U.RAO>>00918000
   <<JCW = SYSTEM, MSG 58>>                                    <<U.RAO>>00920000
   <<DS MESSAGE, MSG 59>>                                      <<U.RAO>>00922000
   <<DS MESSAGE, MSG 60>>                                      <<U.RAO>>00924000
      <<ERROR EQUATES REFER TO C.I. ERROR NUMBER>>                      00926000
                                                                        00928000
<< LISTF COMMAND >>                                            <<U.RAO>>00930000
   LISTFFSERR       = 425, <<LISTF FILE SYS ERROR>>            <<U.RAO>>00932000
   LISTFFLABIOERR  = 428,  <<IO ERROR READING FILE LABEL>>     <<U.RAO>>00934000
   NOXXXLISTED     = 431,                                      <<03.KM>>00936000
   NOGRPSLISTED    = 432,                                      <<03.KM>>00938000
   NOVSDSLISTED    = 435,                                      <<03.KM>>00940000
<< GROUP NAME ERRORS >>                                        <<U.RAO>>00942000
   GRPEXPECTALPHA  = 540  ,                                    <<U.RAO>>00944000
   FGNAMEBASE=GRPEXPECTALPHA-1,                                <<U.RAO>>00946000
<< ACCOUNT NAME ERRORS >>                                      <<U.RAO>>00948000
   ACCTEXPECTALPHA = 550  ,                                    <<U.RAO>>00950000
   FANAMEBASE=ACCTEXPECTALPHA-1,                               <<U.RAO>>00952000
   ACCTNAMETOOLONG = 552  ,                                    <<U.RAO>>00954000
<< VOLUME SET DEFINITION NAME ERRORS >>                        <<U.RAO>>00956000
   VSDEXPECTALPHA  = 570  ,                                    <<U.RAO>>00958000
   VSDNAMEBASE     = VSDEXPECTALPHA-1,                         <<U.RAO>>00960000
<< USER NAME ERRORS >>                                         <<U.RAO>>00962000
   USEREXPECTALPHA = 590,                                      <<U.RAO>>00964000
   USERNAMEBASE    = USEREXPECTALPHA-1,                        <<U.RAO>>00966000
<< OTHER SUBSYSTEM ERRORS (BASIC, SPL, RJE, ETC. >>            <<U.RAO>>00968000
   SUBSNOTFOUND    = 641,                                      <<U.RAO>>00970000
   SUBS2MP         = 642,                                      <<U.RAO>>00972000
   DUMPFILENOTOPT  = 645,                                      <<U.RAO>>00974000
   DUMPFILENOTBACKREF = 646,                                   <<U.RAO>>00976000
   DSSUBSNOTFOUND  = 647,  <<DS NOT FOUND>>                    <<U.RAO>>00978000
   SUBSYSCREATEERR = 650,  <<UNABLE TO CREATE SUBSYSTEM>>      <<U.RAO>>00980000
   SUBSYSLOADERR   = 651,  <<UNABLE TO LOAD SUBSYSTEM>>        <<U.RAO>>00982000
   SUBSNOTCREATE   = 660,  <<CREATEPROCESS FAILED ON SUBSYS.>> <<01452>>00984000
<<ORGANIZATIONAL MANAGEMENT COMMAND ERROR MESSAGES>>           <<U.RAO>>00986000
<< RESETACCT COMMAND >>                                        <<U.RAO>>00988000
   RESACCTJUSTAT   = 700,   <<EXPECTED JUST "@">>              <<U.RAO>>00990000
   RESACCTEXPECT   = 701,   <<EXPECTED CPU OR CONNECT>>        <<U.RAO>>00992000
   RESACCT2MP      = 702,                                      <<U.RAO>>00994000
<< REPORT COMMAND >>                                           <<U.RAO>>00996000
   REPORTNOTAMAT   = 705,   <<SAID "@", IS NOT AM>>            <<U.RAO>>00998000
   REPORTNOTAMLOGON= 706,   <<NOT LOGON GROUP>>                <<U.RAO>>01000000
   REPORTNOTSMAT   = 707,   <<WANTS ALL ACCTS, NOT SM>>        <<U.RAO>>01002000
   REPORTNOTSMLOGON= 708,   <<WANTS OTHER ACCT, NOT SM>>       <<U.RAO>>01004000
   REPORTEXPECTLIST= 709,   <<EXPECTED LIST FILE NAME>>        <<U.RAO>>01006000
   REPORT2MP       = 710,                                      <<U.RAO>>01008000
   REPORTEXTRANLEAF= 711,  <<EXTRANEOUS DATA IN LEAF NAME>>    <<RV.PV>>01010000
<< PURGEACCT, PURGEGROUP, PURGEUSER, PURGEVSD COMMANDS >>      <<U.RAO>>01012000
   PURGEGROUP2MP   = 715,                                      <<U.RAO>>01014000
<< LISTACCT, LISTGROUP, LISTUSER, LISTVSD COMMANDS >>          <<U.RAO>>01016000
   LISTACCTEXTRAN  = 723,  <<UNIDENTIFIABLE GARBAGE IN NAME>>  <<RV.PV>>01018000
   LISTACCTNOTAT   = 724,  <<NOT SM, CAN'T LOOK OUTSIDE ACCT>> <<RV.PV>>01020000
   LISTACCTSMLOGON = 725,  <<NOT SM, CAN'T LOOK OUTSIDE ACCT>> <<RV.PV>>01022000
   LISTACCTXPCTLST = 726,  <<EXPECTED LIST FILE>>              <<RV.PV>>01024000
   LISTACCT2MP     = 727,                                      <<RV.PV>>01026000
<< NEWACCT, NEWGROUP, NEWUSER, ALTACCT, ALTUSER, ALTGROUP >>   <<U.RAO>>01028000
   ALTACCT2MP      = 730,  <<MAX OF 71 PARAMETERS>>            <<RV.PV>>01030000
   ALTGROUP2MP     = 731,  <<DITTO>>                           <<RV.PV>>01032000
   ALTUSER2MP      = 732,                                      <<RV.PV>>01034000
   NEWACCT2MP      = 733,                                      <<RV.PV>>01036000
   NEWGROUP2MP     = 734,                                      <<RV.PV>>01038000
   NEWUSER2MP      = 735,                                      <<RV.PV>>01040000
   NEWACCTXPCTCMA  = 736,  <<EXPECT COMMA BEFORE MGR NAME>>    <<RV.PV>>01042000
   ORGCOMNOKEY     = 737,  <<EXPECTED KEYWORD>>                <<RV.PV>>01044000
   ORGCOMXPCTEQUALS= 738,  <<EXPECTED = AFTER KEYWORD>>        <<RV.PV>>01046000
   ORGCOMUNKNONKEY = 739,  <<UNKNOWN KEYWORD>>                 <<RV.PV>>01048000
   ORGCOMXPCTKEYWD = 740,  <<UNIDENTIFIABLE KEYWORD>>          <<RV.PV>>01050000
   ORGCOMUNOTACCESS= 741,  <<NOT APPROPRIATE FOR USER>>        <<RV.PV>>01052000
   ORGCOMACCESSRDND= 742,  <<ACCESS REDUNDANTLY SPECIFIED>>    <<RV.PV>>01054000
   ORGCOMUNKSUBQ   = 743,  <<UNIDENTIFIED SUBQ NAME>>          <<RV.PV>>01056000
   ORGCOMRDNDMAXPRI= 744,  <<MAXPRI REDUNDANTLY SPECIFIED>>    <<RV.PV>>01058000
   ORGCOMGNOTMAXPRI= 745,  <<NOT APPROPRIATE FOR GROUP>>       <<RV.PV>>01060000
   ORGCOMRDNDCAPKY = 746,  <<REDUNDANT CAPABILITY LIST>>       <<RV.PV>>01062000
   ORGCOMISSINGCAP = 747,  <<NO CAPABILITY SPECIFIED - IGNORED><<RV.PV>>01064000
   ORGCOMUNKCAP    = 748,  <<UNKNOWN CAPABILITY TYPE>>         <<RV.PV>>01066000
   ORGCOMCAPCONTXT = 749,  <<NOT ALLOWED CAP FOR GROUP>>       <<RV.PV>>01068000
   ORGCOMREDUNDCAP = 750,  <<REDUNDANTLY SPECIFIED CAPABILITY>><<RV.PV>>01070000
   ORGCOMFORCAIABA = 751,  <<FORCED IA & BA ON ACCOUNT>>       <<RV.PV>>01072000
   ORGCOMFORCUIABA = 752,  <<FORCED IA & BA ON USER>>          <<RV.PV>>01074000
   ORGCOMGLOCATTR  = 753,  <<INAPPROPRIATE FOR GROUPS>>        <<RV.PV>>01076000
   ORGCOMMGRMISING = 754,  <<REQUIRED MANAGER NAME MISSING>>   <<U.RAO>>01078000
   MGRNAMEBASE = ORGCOMMGRMISING-1,                            <<RV.PV>>01080000
   ORGCOMPASSNOTA  = 760,  <<PASSWORD MUST START WITH ALPHA>>  <<RV.PV>>01082000
   PASSWORDBASE    = ORGCOMPASSNOTA-1,                         <<RV.PV>>01084000
   ORGCOMRDNDPASS  = 761,  <<PASSWORD REDUNDANTLY DEFINED>>    <<RV.PV>>01086000
   ORGCOMUHOMEGRP  = 765,  <<ONLY APPROPRIATE FOR USER>>       <<RV.PV>>01088000
   ORGCOMFUNOTDBL  = 767,  <<INAPPROPRIATE FOR USER>>          <<RV.PV>>01090000
   ORGCOMFILESBASE = ORGCOMFUNOTDBL,                           <<RV.PV>>01092000
   ORGCOMUNOTVS    = 771,  <<INAPPROPRIATE FOR USER>>          <<00580>>01094000
   ORGCOMCPUNOTDBL = 773,  <<CPU INAPPROPRIATE FOR USER>>      <<RV.PV>>01096000
   ORGCOMCPUBASE   = ORGCOMCPUNOTDBL,                          <<RV.PV>>01098000
   DIRUGOTNOIABA   = 777,  << USER WITHOUT IA, BA >>           <<01320>>01100000
   DIRGGOTNOIABA   = 778,  << GROUP WITHOUT IA,BA >>           <<01320>>01102000
   ORGCOMCONNOTDBL = 779,  <<CONNECT INAPPROPRIATE FOR USER>>  <<RV.PV>>01104000
   ORGCOMCONNECTBS = ORGCOMCONNOTDBL,                          <<RV.PV>>01106000
   ALTUMGRSMCAP    = 784,  <<REMOVED SM CAP FROM HIMSELF>>     <<00539>>01108000
   ALTACCTSMCAP    = 785,  <<OVERRIDE ON REMOVAL OF SYS SM CAP><<RV.PV>>01110000
   FLIMIT'LT'USED  = 786,  <<REQUEST LESS THAN ACTUAL>>        <<RV.PV>>01112000
   ALTGRPCONNECTLM = 787,  <<EXCEEDS ACCOUNT LIMIT>>           <<04703>>01114000
   ALTGRPCPULIMITS = 788,  <<EXCEEDS ACCOUNT LIMIT>>           <<04703>>01116000
   ALTGRPFILELIMIT = 789,  <<EXCEEDS ACCOUNT LIMIT>>           <<RV.PV>>01118000
   ALTGRPEXCAP     = 790,  <<EXCEEDS ACCOUNT CAPABILITES>>     <<RV.PV>>01120000
   ALTGRPFILEACTUL = 791,  <<LIMIT LESS THAN ACTUAL>>          <<RV.PV>>01122000
   ALTUMGRAMCAP    = 792,  <<REMOVED AM CAP FROM SELF>>        <<RV.PV>>01124000
   ALTUMAXPRI      = 793,  <<EXCEEDS ACCOUNT MAXPRI>>          <<RV.PV>>01126000
   ALTUSERCAPS     = 794,  <<EXCEEDS ACCOUNT CAPABILITIES>>    <<RV.PV>>01128000
   ALTUSERLATTR    = 795,  <<EXCEEDS ACCOUNT LOCATTR>>         <<RV.PV>>01130000
   ORGCOMRDNDGROUP = 796,  <<REDUNDANTLY SPECIFIED HOME GROUP>><<U.RAO>>01132000
   ORGCOMRDNDLATTR = 797,  <<REDUNDANTLY SPECIFIED LOCATTR>>   <<U.RAO>>01134000
   ORGCOMINVLDLATR = 798,  <<INVALID INTEGER>>                 <<U.RAO>>01136000
   ORGCOMUNKGCAP   = 799,  <<INVALID GROUP CAPABILITY>>        <<07.RO>>01138000
   AM'SWITCHEDCAPS = 800,  << ALTACCT REMOVED IA/BA FROM AM>>  <<01450>>01140000
                                                                        01142000
   VSDEFSPECHAR    = 850,  <<CONTAINS SPEC CHAR(S)>>           <<RV.PV>>01144000
   VSDEFNOTALPHA   = 851,  <<FIRST CHAAR MUST BE ALPHA>>       <<RV.PV>>01146000
   VSDEFTOOLONG    = 852,  <<NAME GTR THAN 8 CHARS>>           <<RV.PV>>01148000
   VSDEFMISSNAME   = 853,  <<NAME MISSING>>                    <<RV.PV>>01150000
   VSDEFTOOMANY    = 854,  <<TOO MANY PARMS>>                  <<RV.PV>>01152000
   VSDEFTOOFEW     = 855,  <<TOO FEW PARMS>>                   <<RV.PV>>01154000
   VSDEFMISSCOLON  = 856,  <<MISSING COLON IN DEFINITION>>     <<RV.PV>>01156000
   VSDEFDUPMEMBDEF = 857,  <<DUP MEMBER DEFINITION>>           <<RV.PV>>01158000
   VSDEFUNDFNTYPE  = 858,  <<UNDEFINED DISK TYPE DESIGNATOR>>  <<RV.PV>>01160000
   VSDEFUNDFNMASTR = 859,  <<MASTER VOL UNDEFINED>>            <<RV.PV>>01162000
   VSDEFILLEGALKEY = 860,  <<ILLEGAL KEYWORD>>                 <<RV.PV>>01164000
   VSDEFMISSEQUAL  = 861,  <<MISSING EQUAL AFTER KEYWORD>>     <<RV.PV>>01166000
   VSDEFUNDFN      = 862,  <<VOLUME NAME UNIDENTIFIED>>        <<RV.PV>>01168000
   VSDEFDUPMEMB    = 863,  <<DUP CLASS MEMBER SPEC>>           <<RV.PV>>01170000
   <<864-863 ARE IN CATALOG -- WHO USES THEM??>>               <<03.KM>>01172000
   VSDNOVOLSET     = 869,  <<CLASS W/O PARENT SET>>            <<03.KM>>01174000
<< ERRORS ON $STDIN >>                                         <<U.RAO>>01176000
   ERRSTDINIO     =  901,     <<I/O ERROR ON $STDIN>>          <<U.RAO>>01178000
<< CAPABILITY ERRORS >>                                        <<U.RAO>>01180000
   INVLDRESP       = 985, <<EXPECT "YES" OR "NO">>             <<U.RAO>>01182000
<< 1000'S RESERVED FOR STORE/RESTORE >>                        <<U.RAO>>01184000
<< 1100'S RESERVED FOR PRIVATE VOLUMES MESSAGES >>             <<U.RAO>>01186000
   VCSREFNOTALPHA  = 1100, <<MUST START WITH ALPHA>>           <<RV.PV>>01188000
   VCSREFBASE      = VCSREFNOTALPHA,                           <<RV.PV>>01190000
   ORGCOMRDNDVS    = 1103, <<REDUNDANTLY SPECIFIED VS PARM>>   <<RV.PV>>01192000
   ORGCOMSPANCNTXT = 1104, <<SPAN KEYWORD OUT OF CONTEXT>>     <<RV.PV>>01194000
   ALTGRPBOUND     = 1106, <<CURRENT HVS IS BOUND>>            <<RV.PV>>01196000
   ALTGRPFDOMAIN   = 1107, <<GROUP FILE DOMAIN NOT EMPTY>>     <<RV.PV>>01198000
   ALTGRPVSNOTMNTD = 1108, <<VOL SET NOT PREVIOUSLY MOUNTED>>  <<RV.PV>>01200000
   XXXGRPSPANFAILD = 1109, <<SPAN OPERATION FAILED>>           <<RV.PV>>01202000
   LISTVBADINT      = 1110, <<BAD LEVEL # IN LISTV>>           <<RH.PV>>01204000
   LISTVINTOVFL     = 1111, <<OUT OF BOUNDS>>                  <<RH.PV>>01206000
   LISTVSMCAP       = 1112, <<NEED SM CAPABILITY>>             <<RH.PV>>01208000
   LISTVAMCAP       = 1113, <<NEED AM CAPABILITY>>             <<RH.PV>>01210000
   LISTVEXPECTFILE  = 1114, <<EXPECTED FILE NAME>>             <<RH.PV>>01212000
   LISTVFSERR       = 1115, <<LISTV FILE SYS ERROR>>           <<RH.PV>>01214000
   LISTVEXTRANEOUS  = 1116, <<UNIDENTIFIED FILESET NAME>>      <<RH.PV>>01216000
   LISTV2MP         = 1117,  <<2 MANY PARMS TO LISTV>>         <<RH.PV>>01218000
   ALTVSDVMAX       = 1118, <<MAX ALLOWABLE (8) MEMBERS>>      <<RV.PV>>01220000
   ALTVSDDUPMEMB    = 1119, <<DUP SET MEMBER SPECIFIED>>       <<RV.PV>>01222000
   ALTVCSDUPMEMB    = 1120, <<DUP CLASS MEMBER SPECIFIED>>     <<RV.PV>>01224000
   ALTVSDNOTAVSD    = 1121, <<SPECIFIED VSNAME NOT SET DEF>>   <<RV.PV>>01226000
   ALTVCSNOTAVCD    = 1122, <<SPECIFIED VCNAME NOT CLASS DEF>> <<RV.PV>>01228000
   XXXACCTSPANFAILD= 1123, <<SPAN OPERATION FAILED>>           <<RV.PV>>01230000
   XXXACCTPRMNOTOPT= 1125, <<SPAN PARAMETER NOT OPTIONAL>>     <<RV.PV>>01232000
   <<1126-1135 RESERVED FOR IMPLICITMNT ERRORS>>               <<03.KM>>01234000
   IM'MNTERR       = 1126,   <<MOUNT ERROR RECORDED IN DST>>   <<03.KM>>01236000
   IM'NODST        = 1127,   <<OUT OF DST'S>>                  <<03.KM>>01238000
   IM'NOVDS        = 1128,   <<OUT OF VIRTUAL MEM FOR DST>>    <<03.KM>>01240000
   IM'NOSPACE      = 1129,   <<OUT OF SPACE IN DST>>           <<03.KM>>01242000
   IM'SYSERR       = 1130,   <<UNKNOWN ERROR USING DST>>       <<03.KM>>01244000
<< 1200'S RESERVED FOR USER LOGGING >>                         <<U.RAO>>01246000
<< 1300'S RESERVED FOR DS >>                                   <<U.RAO>>01248000
<< 1400'S RESERVED FOR STARTDEVICE (HELLO, JOB, DATA)>>        <<U.RAO>>01250000
<< 1500 - 1529 RESERVED FOR SHOWJOB >>                         <<U.RAO>>01252000
<< 1530 - 1579 RESERVED FOR SHOWIN AND SHOWOUT >>              <<U.RAO>>01254000
<< 1580 - 1589 RESERVED FOR SHOWDEV >>                         <<U.RAO>>01256000
<< 1590 - 1609 RESERVED FOR STREAM >>                          <<U.RAO>>01258000
<< ALLOCATE AND DEALLOCATE COMMANDS >>                         <<U.RAO>>01260000
   ALLOC2MP        = 1650, <<DE/ALLOCATE MORE THAN 2 PARAMETERS<<U.RAO>>01262000
   ALLOCNOTENUF    = 1651, <<NO PARMS TO [DE]ALLOCATE>>        <<U.RAO>>01264000
   PROCNOTALL      = 1652,<<PROCEDURE NOT ALLOCATED>>          <<U.RAO>>01266000
   PROCALLOC       = 1653,<<PROCEDURE ALREADY ALLOCATED>>      <<U.RAO>>01268000
   PROGNOTALL      = 1654,<<PROGRAM NOT ALLOCATED>>            <<U.RAO>>01270000
   PROGALLOC       = 1655,<<PROGRAM ALREADY ALLOCATED>>        <<U.RAO>>01272000
   ALLOCXPROGPROC  = 1656,  <<EXPECT "PROGRAM","PROCEDURE">>   <<U.RAO>>01274000
   ALLOCNOBACKREF  = 1657, <<NO BACK REF FOR ALLOCATE>>        <<08.RO>>01276000
   ALLOCNOSYSDEF   = 1658, <<DISALLOW SYSDEF FILE FOR ALLOC>>  <<08.RO>>01278000
<< QUANTUM COMMAND >>                                          <<U.RAO>>01280000
   QUANTUM'NOMO    = 1664, <<QUANTUM REPLACED BY TUNE.>>       <<01724>>01282000
<< ALLOCATE AND DEALLOCATE  (CONT.) >>                         <<00833>>01284000
   NODEALOCPROC    = 1666, <<UNABLE TO DEALLOCATE PROCEDURE>>  <<00833>>01286000
   NOALOCPROC      = 1667, <<UNABLE TO ALLOCATE PROCEDURE>>    <<00833>>01288000
   NODEALOCPROG    = 1668, <<UNABLE TO DEALLOCATE PROGRAM>>    <<00833>>01290000
   NOALOCPROG      = 1669, <<UNABLE TO ALLOCATE PROGRAM>>      <<00833>>01292000
<< SHOWQ COMMAND >>                                            <<U.RAO>>01294000
   WARNXPARMSIGNORED=1670, <<COMMAND HAS NO PARMS, PARMS IGNORE<<U.RAO>>01296000
<< JOBPRI COMMAND >>                                           <<U.RAO>>01298000
   JOBPRI2MP       = 1700, <<MORE THAN TWO PARMS>>             <<U.RAO>>01300000
   JOBPRIUNKNOWNQ  = 1701, <<NOT ONE OF CS,DS,ES,0>>           <<U.RAO>>01302000
   JOBPRIWARNNOT0  = 1702, <<0 NOT ALLOWED, FORCED TO CS>>     <<U.RAO>>01304000
   JOBPRIDEFCSMAXDS= 1703,                                     <<U.RAO>>01306000
   JOBPRIDEFCSMAXES= 1704,                                     <<U.RAO>>01308000
   JOBPRIDEFDSMAXES= 1705,                                     <<U.RAO>>01310000
<< CLINE COMMAND >>                                            <<U.RAO>>01312000
   ERRCTABFULL     = 1760, <<CLINE EQUATION TABLE FULL>>       <<U.RAO>>01314000
   ERRCNOTFOUND    = 1761, <<BACK CLINE RE. NOT FOUND>>        <<U.RAO>>01316000
   ERR2MCREF       = 1762, <<TOO MANY BACK CLINE REFS.>>       <<U.RAO>>01318000
   ERRCLINEDESIG   = 1763, <<INVALID CLINE DESIGNATOR>>        <<U.RAO>>01320000
   CLN'NO'NAME     = 1765, <<NAME  MISSING>>                   <<U.RAO>>01322000
   CLNMBEDSPECIALS = 1766, <<EMBEDDED SPECIALS IN PROPER NAME>><<U.RAO>>01324000
   CLNLEADINGNUM   = 1767, <<NAME MAY NOT BEGIN WITH NUMERIC>> <<U.RAO>>01326000
   CLNNAME2LONG    = 1768, <<NAME > 8 CHAR LONG>>              <<U.RAO>>01328000
   CLNXPCTEQSIGN   = 1769, <<EXPECTED EQUALS SIGN>>            <<U.RAO>>01330000
   CLNKEYVALNOTOPT = 1770, <<VALUE NOT OPTIONAL>>              <<U.RAO>>01332000
   CLNBADINT       = 1772, <<BINARY FAILED ON INTEGER>>        <<U.RAO>>01334000
   CLNBNDSERR0'377 = 1773, <<OUT OF RANGE>>                    <<U.RAO>>01336000
   CLNXPCTKEY      = 1775, <<EXPECTED A KEYWORD>>              <<U.RAO>>01338000
   CLNDEV2LONG     = 1776, <<DEVICE NAME > 8 CHAR LONG>>       <<U.RAO>>01340000
   CLNDUPKEY       = 1777, <<REDUNDANT KEYWORD>>               <<U.RAO>>01342000
   CLNBNDSERR0'63  = 1778, <<INT OUT OF RANGE>>                <<U.RAO>>01344000
   CLNBNDSERR0'15  = 1779, <<INT OUT OF RANGE>>                <<U.RAO>>01346000
   CLNDRIVERNAM2LN = 1780, <<DRIVER NAME > 8 CHAR LONG>>       <<U.RAO>>01348000
   CLNBNDSERR0'127 = 1781, <<INT OUT OF RANGE>>                <<U.RAO>>01350000
   CLNREQLINE      = 1782, <<REQUIRES AT LEAST A LINE NAME>>   <<U.RAO>>01352000
   CLNREQADESIG    = 1783, <<REQUIRES ACTUAL LINE DESIGNATOR>> <<U.RAO>>01354000
   CLNBREF2MP      = 1784, <<BACK REF WITH PARMS ILLEGAL>>     <<U.RAO>>01356000
      <<PROCESSING USER DEFINED COMMANDS - TOO DEEPLY NESTED.>><<08.RO>>01358000
   COMOPENFAIL     = 1910, << ERROR OPENING COMMAND FILE >>    <<00256>>01360000
   COMLOCKFAIL     = 1912, << ERROR LOCKING COMMAND FILE >>    <<00256>>01362000
   COMUNLOCKFAIL   = 1913, << ERROR UNLOCKING COMMAND FILE >>  <<00256>>01364000
   COMREADFAIL     = 1914, << ERROR READING COMMAND FILE >>    <<00256>>01366000
   ALTUSERUNKNOWNPARM  = 1255,                                 <<04703>>01368000
   ALTACCTUNKNOWNPARM  = 1256,                                 <<04703>>01370000
   ALTGROUPUNKNOWNPARM = 1257,                                 <<04703>>01372000
   ALTUNKNOWNVSPARM    = 1258,                                 <<04703>>01374000
                                                               <<03.EB>>01376000
      <<DST ENTRIES USED THROUGHOUT>>                                   01378000
                                                                        01380000
      DDSDST=20,                                                        01382000
                                                               <<00851>>01384000
      <<Definitions for finding the PLABEL for SHOWCOM>>                01386000
                                                                        01388000
      SYSDB=%1000,                                                      01390000
      PLAB'SHOWCOM=%133,                                                01392000
      << FCONTROL DEFINITIONS >>                               <<00851>>01394000
                                                               <<00851>>01396000
      <<WORDS/FLAGS>>                                                   01398000
                                                                        01400000
      LINFO=%1167,                                                      01402000
      FLAGX=%1176,                                                      01404000
      LOGFILENO=%1205,                                                  01406000
      LOGFILESIZE=%1203,                                                01408000
      LOGPROCESS=%1150,                                                 01410000
      MAXQUEUE=%1333,                                                   01412000
      DEFAULTQUEUE=%1334,                                               01414000
      PXGWFLAGS = 6,                                                    01416000
      PCBSIZE = 16;                                            << I.A >>01418000
                                                                        01420000
      <<DEFINES USED THROUGHOUT>>                                       01422000
                                                                        01424000
      <<CODE DEFINITIONS>>                                              01426000
                                                                        01428000
      DEFINE                                                            01430000
      DUPLICATE = ASSEMBLE (DUP)#,                                      01432000
      CC = STATUS . (6:2)#,                                             01434000
      LBPARMDECS=ARRAY LPARM (*) = PARMS;                               01436000
                 BYTE ARRAY BPARM (*) = PARMS #,                        01438000
      NEXTLINE=ASSEMBLE (ZERO,DZRO);                           <<01881>>01440000
               PRINT (*, *, *)#,                               <<01881>>01442000
                                                               <<01709>>01444000
      SETXPXGLOB=PUSH (DL);                                             01446000
                 X := TOS -PS0 (-1)#,                                   01448000
<<        DEF'MOVEFROMDSEG          >>                         <<U.RAO>>01450000
<< To use, declare SUBROUTINE DEF'MOVEFROMDSEG >>              <<U.RAO>>01452000
   DEF'MOVEFROMDSEG =                                          <<U.RAO>>01454000
      MOVEFROMDSEG(TARGET,DSTN,OFFSET,COUNT);                  <<U.RAO>>01456000
         VALUE TARGET,DSTN,OFFSET,COUNT;                       <<U.RAO>>01458000
         LOGICAL TARGET,DSTN,OFFSET,COUNT;                     <<U.RAO>>01460000
      BEGIN                                                    <<U.RAO>>01462000
         X := TOS; << SAVE RETURN ADDRESS >>                   <<U.RAO>>01464000
         ASSEMBLE(MFDS 0);                                     <<U.RAO>>01466000
         TOS := X; << RESTORE RETURN ADDRESS >>                <<U.RAO>>01468000
      END #,                                                   <<U.RAO>>01470000
                                                               <<U.RAO>>01472000
<<        DEF'MOVETODSEG            >>                         <<U.RAO>>01474000
<< To use, declare SUBROUTINE DEF'MOVETODSEG >>                <<U.RAO>>01476000
   DEF'MOVETODSEG =                                            <<U.RAO>>01478000
      MOVETODSEG(DSTN,OFFSET,SOURCE,COUNT);                    <<U.RAO>>01480000
         VALUE DSTN,OFFSET,SOURCE,COUNT;                       <<U.RAO>>01482000
         LOGICAL DSTN,OFFSET,SOURCE,COUNT;                     <<U.RAO>>01484000
      BEGIN                                                    <<U.RAO>>01486000
         X := TOS;                                             <<U.RAO>>01488000
         ASSEMBLE(MTDS 0);                                     <<U.RAO>>01490000
         TOS := X;                                             <<U.RAO>>01492000
      END #,                                                   <<U.RAO>>01494000
                                                               <<U.RAO>>01496000
                                                                        01498000
      << FIELDS/FLAGS>>                                                 01500000
                                                                        01502000
      PXGFINTER = 5:1 #,                                                01504000
                                                                        01506000
<<TEST FOR INTERACTIVE USER.  LEAVES TRUE ON TOS IF>>          <<02.RO>>01508000
<<USER WAS INTERACTIVE.  GETS IT FROM PXGLOB>>                 <<02.RO>>01510000
                                                               <<02.RO>>01512000
INTERACTIVETEST =   SETXPXGLOB+PXGWFLAGS;                      <<02.RO>>01514000
                    TOS := ARRDB0(X).(PXGFINTER)#,             <<02.RO>>01516000
                                                               <<02.RO>>01518000
<<DELIMITER ARRAY DECLARATIONS>>                               <<U.RAO>>01520000
                                                               <<U.RAO>>01522000
COMMACR = [8/",",8/%15]#,                                      <<U.RAO>>01524000
COMMASEMICR = [8/",",8/";",8/%15,8/0]D#,                       <<U.RAO>>01526000
                                                               <<U.RAO>>01528000
      <<EXECUTOR PROCEDURE HEADING>>                                    01530000
                                                                        01532000
      EXECUTORHEAD =                                                    01534000
      (PARMSP,ERRNUM,PARMNUM);                                          01536000
      BYTE ARRAY PARMSP;                                                01538000
      INTEGER ERRNUM,PARMNUM #,                                         01540000
                                                                        01542000
      SMCAP = LOGICAL(ARRDB2(X).(0:1))#,                       <<U.RAO>>01544000
      AMCAP = LOGICAL(ARRDB2(X).(1:1))#,                       <<U.RAO>>01546000
                                                                        01548000
                                                              <<00.GEN>>01550000
                                                              <<00.GEN>>01552000
<<  P R O D U C E P A R M S   D E F I N I T I O N S  >>       <<00.GEN>>01554000
                                                              <<00.GEN>>01556000
       D'INX1=     PPRESULT #,                                <<00.GEN>>01558000
       D'INX2=     PPRESULT(1) #,                             <<04.GEN>>01560000
       D'TYPE=     PPRESULT(2) #,                             <<00.GEN>>01562000
       D'FNAME=    PPRESULT(3) #,                             <<00.GEN>>01564000
       D'VNAME=    PPRESULT(3) #,                             <<00.GEN>>01566000
       D'GNAME=    PPRESULT(7) #,                             <<00.GEN>>01568000
       D'UNAME=    PPRESULT(7) #,                             <<00.GEN>>01570000
       D'ANAME=    PPRESULT(11) #,                            <<00.GEN>>01572000
       G'FNAME=    PPRESULT(19) #,                            <<00.GEN>>01574000
       G'VNAME=    PPRESULT(19) #,                            <<00.GEN>>01576000
       G'GNAME=    PPRESULT(23) #,                            <<00.GEN>>01578000
       G'UNAME=    PPRESULT(23) #,                            <<00.GEN>>01580000
       G'ANAME=    PPRESULT(27) #,                            <<00.GEN>>01582000
       D'BGNAME=    BPPRESULT(14) #,                          <<00.GEN>>01584000
       D'BANAME=    BPPRESULT(22) #;                           << I.A >>01586000
                                                              <<00.GEN>>01588000
  <<LENGTH OF "DIRECSCAN" RECIP PARAMETER  >>                 <<00.GEN>>01590000
  <<AND OFFSET THEREIN TO "PPRESULT" AT END>>                 <<00.GEN>>01592000
  <<OF PARAMETER TO FACILITATE EXTENSIONS  >>                 <<00.GEN>>01594000
                                                              <<00.GEN>>01596000
                                                               <<01.PV>>01598000
                                                               <<01.PV>>01600000
<<  D I R E C T O R Y   E N T R Y   D E F I N I T I O N S  >>  <<01.PV>>01602000
EQUATE                                                         <<01.PV>>01604000
   NAMESIZE        = 4,                  <<UNPACKED REP>>      <<01.PV>>01606000
                   <<ENTRY EQUATES>>                           <<01.PV>>01608000
                                                               <<01.PV>>01610000
                                                               <<01.PV>>01612000
<< ACCOUNT ENTRY >>                                            <<01.PV>>01614000
   ANAME           = 0,                  <<NAME>>              <<01.PV>>01616000
   AGIPNTR         = ANAME+NAMESIZE,     <<GROUP INDEX PNTR>>  <<01.PV>>01618000
   AUIPNTR         = AGIPNTR+1,          <<USER INDEX PNTR>>   <<01.PV>>01620000
   ACAP            = AUIPNTR+1,          <<CAPABILITY>>        <<01.PV>>01622000
   ALATTR          = ACAP+2,                                   <<01.PV>>01624000
   APASS           = ALATTR+2,                                 <<01.PV>>01626000
   ADFSCOUNT       = APASS+NAMESIZE,     <<DISC FILE SPACE>>   <<01.PV>>01628000
   ADFSLIMIT       = ADFSCOUNT+2,                              <<01.PV>>01630000
   ACPUCOUNT       = ADFSLIMIT+2,        <<CPU TIME>>          <<01.PV>>01632000
   ACPULIMIT       = ACPUCOUNT+2,                              <<01.PV>>01634000
   ACONTIMECOUNT   = ACPULIMIT+2,        <<CONNECT TIME>>      <<01.PV>>01636000
   ACONTIMELIMIT   = ACONTIMECOUNT+2,                          <<01.PV>>01638000
   ASECW           = ACONTIMELIMIT+2,                          <<01.PV>>01640000
   AMAXJOBW        = ASECW+1,            <<MAX. JOB PRIORITY>> <<01.PV>>01642000
   ASPARE1         = AMAXJOBW+1,                               <<RV.PV>>01644000
   ASPARE2         = ASPARE1 +1,                               <<RV.PV>>01646000
   ASIZE           = ASPARE2 +1,                               <<RV.PV>>01648000
                                                               <<01.PV>>01650000
<<GROUP ENTRY>>                                                <<01.PV>>01652000
   GNAME           = 0,                  <<NAME>>              <<01.PV>>01654000
   GFIPNTR         = GNAME+NAMESIZE,     <<FILE INDEX>>        <<01.PV>>01656000
   GPASS           = GFIPNTR+1,          <<PASSWORD>>          <<01.PV>>01658000
   GDFSCOUNT       = GPASS+NAMESIZE,     <<DISC FILE SPACE>>   <<01.PV>>01660000
   GDFSLIMIT       = GDFSCOUNT+2,                              <<01.PV>>01662000
   GCPUCOUNT       = GDFSLIMIT+2,        <<CPU TIME>>          <<01.PV>>01664000
   GCPULIMIT       = GCPUCOUNT+2,                              <<01.PV>>01666000
   GCONTIMECOUNT   = GCPULIMIT+2,                              <<01.PV>>01668000
   GCONTIMELIMIT   = GCONTIMECOUNT+2,                          <<01.PV>>01670000
   GSEC            = GCONTIMELIMIT+2,                          <<01.PV>>01672000
   GCAP            = GSEC +2,                                  <<01.PV>>01674000
   GLINKAGE        = GCAP+1,                                   <<01.PV>>01676000
   GVSDIPNTR       = GLINKAGE+1,         <<VS DEF INDEX PNTR>> <<01.PV>>01678000
   GHVSNAME        = GVSDIPNTR+1,        <<HOME VS NAME>>      <<01.PV>>01680000
   GHVSANAME       = GHVSNAME,           << "   "  ACCT NAME>> <<01.PV>>01682000
   GHVSGNAME       = GHVSANAME+NAMESIZE, << "   "  GRP  NAME>> <<01.PV>>01684000
   GHVSVSNAME      = GHVSGNAME+NAMESIZE, << "   "  VS   NAME>> <<01.PV>>01686000
   GSAVEFIPNTR     = GHVSVSNAME+NAMESIZE,                      <<13.PV>>01688000
   GMOUNTREFCNTR   = GSAVEFIPNTR+1,                            <<13.PV>>01690000
   GSPARE          = GMOUNTREFCNTR+1,                          <<13.PV>>01692000
   GSIZE           = GSPARE +1;                                <<01.PV>>01694000
<<GLINKAGE DEFINITIONS>>                                       <<01.PV>>01696000
DEFINE                                                         <<01.PV>>01698000
   PVF             = 0:1 #,                                    <<01.PV>>01700000
   MVTABXF         = 8:8 #;                                    <<01.PV>>01702000
DEFINE                                                         <<10.KM>>01704000
   PVMVTABXF= 4:4 #;                   <<PVINFO FIELD>>        <<10.KM>>01706000
EQUATE                                                         <<01.PV>>01708000
   PV              = 1,                                        <<01.PV>>01710000
   VMAX            = 8,                  <<VOL MEMBERSHIP MAX>><<01.PV>>01712000
                                                               <<01.PV>>01714000
                                                               <<01.PV>>01716000
<<USER ENTRY>>                                                 <<01.PV>>01718000
   UNAME           = 0,                  <<NAME>>              <<01.PV>>01720000
   UCAP            = UNAME+NAMESIZE,     <<CAPABILITY>>        <<01.PV>>01722000
   ULATTR          = UCAP+2,                                   <<01.PV>>01724000
   UPASS           = ULATTR+2,                                 <<01.PV>>01726000
   UHGROUP         = UPASS+NAMESIZE,     <<HOME GROUP>>        <<01.PV>>01728000
   ULOGCOUNT       = UHGROUP+NAMESIZE,   <<# OF USERS LOGGED>> <<01.PV>>01730000
   UMAXJOB         = ULOGCOUNT+1,                              <<01.PV>>01732000
   USPARE          = UMAXJOB +1,                               <<01.PV>>01734000
   USIZE           = USPARE +1,                                <<01.PV>>01736000
                                                               <<01.PV>>01738000
<<VOLUME SET DEFINITION ENTRY>>                                <<01.PV>>01740000
   GVSNAME         = 0,                  <<VOLUME SET NAME>>   <<01.PV>>01742000
   GVSLINKAGEW     = GVSNAME+NAMESIZE,   <<MVTAB LINKAGE>>     <<01.PV>>01744000
   GVSINFO         = GVSLINKAGEW+1,      <<DEFINITION INFO>>   <<01.PV>>01746000
   GVSMEMBERS      = GVSINFO+1,          <<VMAX MEMBERS>>      <<01.PV>>01748000
                                         <<MEMBER INFO>>       <<01.PV>>01750000
                                         <<VMAX MEMBERS>>      <<01.PV>>01752000
   GVSVOLNAME      = GVSMEMBERS,         <<MEMBER NAME>>       <<01.PV>>01754000
   GVSVOLFLAGS     = GVSVOLNAME+NAMESIZE,<<MEMBER STAT FLAGS>> <<01.PV>>01756000
   GVSVOLINFO      = GVSVOLFLAGS+1,      <<MEMBER ATTRIBS>>    <<01.PV>>01758000
   GVSDREFCNT      = (GVSINFO-GVSNAME+1)*(VMAX+1),             <<RV.PV>>01760000
   GVSDSPARE2      = GVSDREFCNT+1,                             <<RV.PV>>01762000
   GVSDSIZE        = GVSDSPARE2+1,                             <<RV.PV>>01764000
                                                               <<01.PV>>01766000
<<VOLUME CLASS DEFINITION ENTRY>>                              <<01.PV>>01768000
   GVCNAME        = 0,                   <<VOLUME CLASS NAME>> <<01.PV>>01770000
   GVCLINKAGEW     = GVCNAME+NAMESIZE,                         <<01.PV>>01772000
   GVCINFO         = GVCLINKAGEW+1,      <<DEFINITION INFO>>   <<01.PV>>01774000
   GVCPNAME        = GVCINFO+1,          <<PARENT DEF  NAME>>  <<01.PV>>01776000
   GVCPANAME       = GVCPNAME,           <<  "    ACCT   " >>  <<01.PV>>01778000
   GVCPGNAME       = GVCPANAME+NAMESIZE, <<  "    GRP    " >>  <<01.PV>>01780000
   GVCPVSNAME      = GVCPGNAME+NAMESIZE, <<  "    VS     " >>  <<01.PV>>01782000
   GVCUNUSED       = GVCPVSNAME+NAMESIZE,                      <<01.PV>>01784000
   GVCDSIZE        = GVSDSIZE,                                 <<01.PV>>01786000
                                                               <<01.PV>>01788000
                                                               <<01.PV>>01790000
<<ENTRY TYPES>>                                                <<01.PV>>01792000
   FILELEVEL       = 0,                                        <<01.PV>>01794000
   GROUPLEVEL      = 1,                                        <<01.PV>>01796000
   ACCOUNTLEVEL    = 2,                                        <<01.PV>>01798000
   USERLEVEL       = 3,                                        <<01.PV>>01800000
   VSDEFLEVEL      = 4;                                        <<RV.PV>>01802000
                                                               <<01.PV>>01804000
<<DIRECTORY SEARCH TYPE WORD DEFINITIONS>>                     <<01.PV>>01806000
DEFINE                                                         <<01.PV>>01808000
   STARTLEVELF     = 13:3 #,                                   <<01.PV>>01810000
   ENDLEVELF       = 10:3 #,                                   <<01.PV>>01812000
   ALLFLAG         =  9:1 #,                                   <<01.PV>>01814000
   ENDLEVELFX      =  9:4 #,                                   <<01.PV>>01816000
   TOLEVELF        =  6:3 #,                                   <<01.PV>>01818000
   HITFLAG         =  5:1 #;                                   <<01.PV>>01820000
EQUATE                                                         <<01.PV>>01822000
   ALLXXX          = %(2)1000,                                 <<04.PV>>01824000
   ALLACCTS        = ALLXXX + ACCOUNTLEVEL,                    <<04.PV>>01826000
   ALLGROUPS       = ALLXXX + GROUPLEVEL,                      <<04.PV>>01828000
   ALLUSERS        = ALLXXX + USERLEVEL;                       << I.A >>01830000
EQUATE                                                         <<04178>>01832000
   PPR'LEN         = 31 +    << "ppresult" size >>             <<04178>>01834000
                     ASIZE+1+<< account entry size >>          <<04178>>01836000
                     GSIZE+1,<< group entry size   >>          <<04178>>01838000
   SYSL'PARMLEN    = 35 + PPR'LEN,<< "syslist" parm >>         <<04178>>01840000
   SYSL'PPRINX     = SYSL'PARMLEN - PPR'LEN,                   <<04178>>01842000
   RCR'PARMLEN     = 4 + PPR'LEN, << "rcreport" parm >>        <<04178>>01844000
   RCR'PPRINX      = RCR'PARMLEN - PPR'LEN,                    <<04178>>01846000
   SAVEBUFFINDEX = SYSL'PPRINX + 31;                           <<04178>>01848000
                                                               <<03.KM>>01850000
<<DIRECTORY SEARCH STATES (RETURNED BY RECIP)>>                <<03.KM>>01852000
EQUATE GOTSIR=          1,                                     << I.A >>01854000
       NEXTSON=         0,                                     <<03.KM>>01856000
       NEXTBROTHER=     2,                                     <<03.KM>>01858000
       NEXTUNCLE=       NEXTBROTHER,   <<NOT IMPLEMENTED>>     <<03.KM>>01860000
       REVISIT=         %100000,                               <<03.KM>>01862000
       ABORTSCAN=       4,                                     <<03.KM>>01864000
       NEXTSON'SIR=     NEXTSON+GOTSIR,                        <<03.KM>>01866000
       NEXTBROTHER'SIR= NEXTBROTHER+GOTSIR,                    <<03.KM>>01868000
       NEXTUNCLE'SIR=   NEXTUNCLE+GOTSIR,                      <<03.KM>>01870000
                                                               <<01.PV>>01872000
<< ORGANIZATIONAL COMMANDS :NEWXXX, :ALTXXX COMMUNICATION >>   <<RV.PV>>01874000
    VSSPECIFIED   = %100000,                                   <<RV.PV>>01876000
    SPANSPECIFIED = %040000,                                   <<RV.PV>>01878000
    ALTSPECIFIED  = %020000,                                   <<00086>>01880000
    VSMASK        = 0,                                         <<RV.PV>>01882000
    VSHANAME      = VSMASK+1,                                  <<RV.PV>>01884000
    VSHGNAME      = VSHANAME+NAMESIZE,                         <<RV.PV>>01886000
    VSHVNAME      = VSHGNAME+NAMESIZE,                         <<RV.PV>>01888000
    VSCOMMSZ'     = VSHVNAME+NAMESIZE,                         <<RV.PV>>01890000
    VSCOMMSZ      = VSCOMMSZ'+1,                               <<RV.PV>>01892000
    SPECMASKLN    = 3;                                         <<RV.PV>>01894000
$PAGE   "EXTERNAL DECLARATIONS"                                         01896000
                                                               << I.A >>01898000
<< EXTERNAL/FORWARD MPE INTRINSICS >>                          << I.A >>01900000
                                                               << I.A >>01902000
   PROCEDURE DATE'LINE(STRING);                                <<0U.EB>>01904000
      BYTE ARRAY STRING; OPTION EXTERNAL;                      <<0U.EB>>01906000
                                                               <<0U.EB>>01908000
INTRINSIC SETJCW,GETJCW;                                       << I.A >>01910000
   LOGICAL PROCEDURE BINARY (STRING, LENGTH);                           01912000
   VALUE LENGTH;                                                        01914000
   BYTE ARRAY STRING;                                                   01916000
   INTEGER LENGTH;                                                      01918000
   OPTION EXTERNAL;                                                     01920000
                                                                        01922000
   INTEGER PROCEDURE EXCHANGEDB(DSTNO);                                 01924000
   VALUE DSTNO;                                                         01926000
   INTEGER DSTNO;                                                       01928000
   OPTION EXTERNAL;                                                     01930000
                                                                        01932000
   DOUBLE PROCEDURE DBINARY(STRING,LENGTH);                             01934000
   VALUE LENGTH;                                                        01936000
   BYTE ARRAY STRING;  INTEGER LENGTH;                                  01938000
   OPTION EXTERNAL;                                                     01940000
                                                                        01942000
   INTEGER PROCEDURE ASCII (WORD, BASE, STRING);                        01944000
   VALUE WORD, BASE;                                                    01946000
   LOGICAL WORD;                                                        01948000
   INTEGER BASE;                                                        01950000
   BYTE ARRAY STRING;                                                   01952000
   OPTION EXTERNAL;                                                     01954000
                                                                        01956000
   INTEGER PROCEDURE DASCII(WORD,BASE,STRING);                          01958000
   VALUE WORD,BASE;                                                     01960000
   DOUBLE WORD;                                                         01962000
   INTEGER BASE;                                                        01964000
   BYTE ARRAY STRING;                                                   01966000
   OPTION EXTERNAL;                                                     01968000
                                                                        01970000
   INTEGER PROCEDURE READ (STRING, EXPECTEDL);                          01972000
   VALUE EXPECTEDL;                                                     01974000
   ARRAY STRING;                                                        01976000
   INTEGER EXPECTEDL;                                                   01978000
   OPTION EXTERNAL;                                                     01980000
                                                                        01982000
   PROCEDURE PRINT (STRING, LENGTH, TYPE);                              01984000
   VALUE LENGTH, TYPE;                                                  01986000
   ARRAY STRING;                                                        01988000
   INTEGER LENGTH;                                                      01990000
   LOGICAL TYPE;                                                        01992000
   OPTION EXTERNAL;                                                     01994000
                                                                        01996000
   INTEGER PROCEDURE SEARCH (TARGET, LENGTH, DICT, DEFN);               01998000
   VALUE LENGTH;                                                        02000000
   BYTE ARRAY TARGET, DICT;                                             02002000
   INTEGER LENGTH;                                                      02004000
   BYTE POINTER DEFN;                                                   02006000
   OPTION EXTERNAL, VARIABLE;                                           02008000
                                                               <<01.01>>02010000
   INTEGER PROCEDURE MYCOMMAND                                          02012000
   (COMIMAGE,DELIMS,MAXPARMS,NUMPARMS,PARMS,DICT,DEFN);                 02014000
   VALUE MAXPARMS;                                                      02016000
   BYTE ARRAY COMIMAGE,DELIMS,DICT;                                     02018000
   INTEGER MAXPARMS, NUMPARMS;                                          02020000
   DOUBLE ARRAY PARMS;                                                  02022000
   BYTE POINTER DEFN;                                                   02024000
   OPTION VARIABLE,EXTERNAL;                                            02026000
                                                                        02028000
   PROCEDURE WHO(MODE,CAP,LATTR,USERN,GROUPN,ACCTN,HOMEN,TERMNUM);      02030000
   LOGICAL MODE;                                                        02032000
   DOUBLE CAP,LATTR;                                                    02034000
   BYTE ARRAY USERN,GROUPN,ACCTN,HOMEN;                                 02036000
   LOGICAL TERMNUM;                                                     02038000
   OPTION VARIABLE,EXTERNAL;                                            02040000
                                                                        02042000
   LOGICAL PROCEDURE PARSE'DENSITY(PARM,PARMLEN,DEN'VALUE);    <<02569>>02044000
   VALUE PARMLEN;                                              <<02569>>02046000
   INTEGER DEN'VALUE,PARMLEN;                                  <<02569>>02048000
   BYTE ARRAY PARM;                                            <<02569>>02050000
   OPTION EXTERNAL;                                            <<02569>>02052000
                                                               <<02569>>02054000
   INTEGER PROCEDURE FOPEN (FILEDESIGNATOR,FOPTIONS, AOPTIONS, RECSIZE, 02056000
   DEVICE, FORMMSG, RECMODE, BLOCKFACTOR, NUMBUFFERS, FILESIZE,         02058000
   NUMEXTENTS, INITALLOC, FILECODE);                                    02060000
   VALUE FOPTIONS, AOPTIONS, RECSIZE, RECMODE, BLOCKFACTOR, NUMBUFFERS, 02062000
   FILESIZE, NUMEXTENTS, INITALLOC, FILECODE;                           02064000
   BYTE ARRAY FILEDESIGNATOR,  DEVICE, FORMMSG;                         02066000
   LOGICAL FOPTIONS, AOPTIONS;                                          02068000
   INTEGER RECSIZE, RECMODE, BLOCKFACTOR, NUMBUFFERS, NUMEXTENTS,       02070000
   INITALLOC, FILECODE;                                                 02072000
   DOUBLE FILESIZE;                                                     02074000
   OPTION VARIABLE, EXTERNAL;                                           02076000
                                                               <<00098>>02078000
   PROCEDURE FCLOSE (FILENUM, DISPOSITION, SECCODE);                    02080000
   VALUE FILENUM, DISPOSITION, SECCODE;                                 02082000
   INTEGER FILENUM, DISPOSITION, SECCODE;                               02084000
   OPTION EXTERNAL;                                                     02086000
                                                                        02088000
   PROCEDURE FWRITE(FNUM,TARGET,COUNT,CONT);                            02090000
   VALUE FNUM,COUNT,CONT;                                               02092000
   INTEGER FNUM,COUNT,CONT;                                             02094000
   ARRAY TARGET;                                                        02096000
   OPTION EXTERNAL;                                                     02098000
                                                                        02100000
   PROCEDURE FCHECK(FILENUM,ERRORCODE,TLOG,BLKNUM,NUMRECS);             02102000
   VALUE FILENUM;                                                       02104000
   INTEGER FILENUM,ERRORCODE,TLOG,NUMRECS;                              02106000
   DOUBLE BLKNUM;                                                       02108000
   OPTION VARIABLE,EXTERNAL;                                            02110000
                                                                        02112000
   PROCEDURE FGETINFO                                                   02114000
   (FNUM,FILENAME,FOPTIONS,AOPTIONS,RECSIZE,DEVTYPE,LDNUM,HDADDR,       02116000
    FILECODE,RECPTR,EOF,LIMIT,LOGCOUNT,PHYSCOUNT,BLKSIZE,EXTSIZE,       02118000
    NUMEXTENTS,USERLABELS,CREATORID,LABADDR);                           02120000
   VALUE FNUM;                                                          02122000
   INTEGER FNUM,RECSIZE,DEVTYPE,FILECODE,BLKSIZE,NUMEXTENTS,USERLABELS; 02124000
   BYTE ARRAY FILENAME,CREATORID;                                       02126000
   LOGICAL FOPTIONS,AOPTIONS,LDNUM,HDADDR,EXTSIZE;                      02128000
   DOUBLE RECPTR,EOF,LIMIT,LOGCOUNT,PHYSCOUNT,LABADDR;                  02130000
   OPTION VARIABLE,EXTERNAL;                                            02132000
                                                                        02134000
   DOUBLE PROCEDURE DIRECINSERT (TYPE, LINKAGE'INDEXP, AN,     <<38.PV>>02136000
                                 GUN, FN, E, MVTABX);          <<38.PV>>02138000
   VALUE TYPE, LINKAGE'INDEXP, MVTABX;                         <<38.PV>>02140000
   INTEGER TYPE, MVTABX;                                       <<38.PV>>02142000
   DOUBLE  LINKAGE'INDEXP;                                     <<38.PV>>02144000
   ARRAY AN, GUN, FN;                                                   02146000
   ARRAY E;                                                             02148000
   OPTION EXTERNAL, VARIABLE;                                  <<12.PV>>02150000
                                                                        02152000
   DOUBLE PROCEDURE DIRECPURGE (T, LINKAGE'INDEXP, AN,         <<38.PV>>02154000
                                GUN, FN, MVTABX);              <<38.PV>>02156000
   VALUE T, LINKAGE'INDEXP, MVTABX;                            <<38.PV>>02158000
   INTEGER T, MVTABX;                                          <<38.PV>>02160000
   DOUBLE  LINKAGE'INDEXP;                                     <<38.PV>>02162000
   ARRAY AN, GUN, FN;                                                   02164000
   OPTION EXTERNAL, VARIABLE;                                  <<21.PV>>02166000
                                                                        02168000
   DOUBLE PROCEDURE SUBQUEUE (N, C);                                    02170000
   VALUE N, C;                                                          02172000
   INTEGER N, C;                                                        02174000
   OPTION EXTERNAL;                                                     02176000
                                                                        02178000
   PROCEDURE CREATEPROCESS (ERROR,PIN,PROGNAME,OPTNUMS,OPTS);  <<01200>>02180000
   INTEGER ERROR,PIN;                                          <<01200>>02182000
   BYTE ARRAY PROGNAME;                                        <<01200>>02184000
   INTEGER ARRAY OPTNUMS;                                      <<01200>>02186000
   LOGICAL ARRAY OPTS;                                         <<01200>>02188000
   OPTION VARIABLE, EXTERNAL;                                  <<01200>>02190000
                                                               <<01200>>02192000
   PROCEDURE CREATE(PROGNAME,ENTRYNAME,PIN,PARM,FLAGS,                  02194000
   STACK,DL,MAXDATA,PRI,RANK);                                          02196000
   VALUE PARM,STACK,DL,PRI,FLAGS,MAXDATA,RANK;                          02198000
   LOGICAL PIN,PARM,FLAGS,PRI;                                          02200000
   INTEGER STACK,DL,MAXDATA,RANK;                                       02202000
   BYTE ARRAY PROGNAME, ENTRYNAME;                                      02204000
   OPTION EXTERNAL, VARIABLE;                                           02206000
                                                                        02208000
   PROCEDURE AWAKE(PCBPT,N,WTFLG);                                      02210000
   VALUE PCBPT,N,WTFLG;                                                 02212000
   INTEGER PCBPT,N,WTFLG;                                               02214000
   OPTION EXTERNAL;                                                     02216000
                                                               <<02318>>02218000
LOGICAL PROCEDURE SETCRITICAL;                                 <<02318>>02220000
OPTION EXTERNAL;                                               <<02318>>02222000
                                                                        02224000
PROCEDURE RESETCRITICAL( PARM );                               <<04792>>02226000
   VALUE PARM;  LOGICAL PARM;                                  <<04792>>02228000
OPTION EXTERNAL;                                               <<04792>>02230000
                                                               <<04792>>02232000
   LOGICAL PROCEDURE GETSIR (N);                                        02234000
   VALUE N;                                                             02236000
   LOGICAL N;                                                           02238000
   OPTION EXTERNAL;                                                     02240000
                                                                        02242000
   PROCEDURE RELSIR (N,T);                                              02244000
   VALUE N, T;                                                          02246000
   LOGICAL N, T;                                                        02248000
   OPTION EXTERNAL;                                                     02250000
                                                                        02252000
   DOUBLE PROCEDURE DIRECFIND (TYPE,LINKAGE'INDEXP,ANAME,      <<38.PV>>02254000
                               GUNAME,FNAME,ENRY);             <<38.PV>>02256000
   VALUE TYPE,LINKAGE'INDEXP;                                  <<38.PV>>02258000
   INTEGER TYPE;                                               <<38.PV>>02260000
   DOUBLE  LINKAGE'INDEXP;                                     <<38.PV>>02262000
   ARRAY ANAME,GUNAME,FNAME,ENRY;                                       02264000
   OPTION EXTERNAL;                                                     02266000
                                                                        02268000
   DOUBLE PROCEDURE DIRECSCAN (TYPE,LINKAGE'INDEXP,ANAME,      <<38.PV>>02270000
                               GUNAME,FNAME,RECIP,LDN,MVTABX); <<38.PV>>02272000
   VALUE TYPE,LINKAGE'INDEXP,MVTABX;                           <<38.PV>>02274000
   INTEGER TYPE,MVTABX;                                        <<38.PV>>02276000
   DOUBLE  LINKAGE'INDEXP;                                     <<38.PV>>02278000
   ARRAY ANAME,GUNAME,FNAME,LDN;                                        02280000
   INTEGER PROCEDURE RECIP;                                             02282000
   OPTION EXTERNAL,VARIABLE;                                   <<35.PV>>02284000
                                                                        02286000
   INTEGER PROCEDURE ADDJTENTRY(N1,N2,N3,TNO,SIZE,INFO);                02288000
   VALUE SIZE,TNO;                                                      02290000
   INTEGER SIZE,TNO;                                                    02292000
   BYTE ARRAY N1,N2,N3;                                                 02294000
   INTEGER ARRAY INFO;                                                  02296000
   OPTION EXTERNAL;                                                     02298000
                                                                        02300000
   INTEGER PROCEDURE XADDJTENTRY(N1,N2,N3,TNO,SIZE,INFO,XN1,XN2,XN3);   02302000
   VALUE SIZE,TNO;                                                      02304000
   INTEGER SIZE,TNO;                                                    02306000
   BYTE ARRAY N1,N2,N3,XN1,XN2,XN3;                                     02308000
   INTEGER ARRAY INFO;                                                  02310000
   OPTION EXTERNAL;                                                     02312000
                                                                        02314000
   INTEGER PROCEDURE XREMJTENTRY(N1,N2,N3,TNO);                         02316000
   VALUE TNO;                                                           02318000
   INTEGER TNO;                                                         02320000
   BYTE ARRAY N1,N2,N3;                                                 02322000
   OPTION EXTERNAL;                                                     02324000
                                                                        02326000
   DOUBLE PROCEDURE ATTACHIO(LDEV,QMISC,DSTX,ADDR,FUNC,CNT,P1,P2,FLAGS);02328000
   VALUE LDEV,QMISC,DSTX,ADDR,FUNC,CNT,P1,P2,FLAGS;                     02330000
   INTEGER LDEV,QMISC,DSTX,ADDR,FUNC,CNT,P1,P2,FLAGS;                   02332000
   OPTION EXTERNAL;                                                     02334000
                                                                        02336000
   INTEGER PROCEDURE ALLOCATEPROC(NAM);                                 02338000
   BYTE ARRAY NAM;                                                      02340000
   OPTION EXTERNAL;                                                     02342000
                                                                        02344000
   INTEGER PROCEDURE ALLOCATEPROG(NAM);                                 02346000
   BYTE ARRAY NAM;                                                      02348000
   OPTION EXTERNAL;                                                     02350000
                                                                        02352000
   INTEGER PROCEDURE DEALLOCATEPROC(NAM);                               02354000
   BYTE ARRAY NAM;                                                      02356000
   OPTION EXTERNAL;                                                     02358000
                                                                        02360000
   INTEGER PROCEDURE DEALLOCATEPROG(NAM);                               02362000
   BYTE ARRAY NAM;                                                      02364000
   OPTION EXTERNAL;                                                     02366000
                                                                        02368000
   PROCEDURE SHOWMQ;                                                    02370000
   OPTION EXTERNAL;                                                     02372000
                                                                        02374000
INTEGER PROCEDURE GENMSG(SETNO,MSGNO,MASK,A,B,C,D,E,           <<0U.EB>>02376000
      DEST,REPLY,BUFF,DST,IOTYPE);                             <<0U.EB>>02378000
   VALUE SETNO,MSGNO,MASK,A,B,C,D,E,DEST,REPLY,BUFF,           <<0U.EB>>02380000
      DST,IOTYPE;                                              <<0U.EB>>02382000
   LOGICAL SETNO,MSGNO,MASK,A,B,C,D,E,DEST,REPLY,BUFF,         <<0U.EB>>02384000
      DST,IOTYPE;                                              <<0U.EB>>02386000
   OPTION VARIABLE,EXTERNAL;                                   <<0U.EB>>02388000
                                                               <<U.RAO>>02390000
   PROCEDURE SUDDENDEATH(ERRORNUMBER);                                  02392000
   VALUE ERRORNUMBER;                                                   02394000
   INTEGER ERRORNUMBER;                                                 02396000
   OPTION EXTERNAL;                                                     02398000
                                                                        02400000
PROCEDURE CTRANSLATE(CODE,INSTRING,OUTSTRING,STRINGLENGTH,TABLE);       02402000
   VALUE CODE,STRINGLENGTH;                                             02404000
   INTEGER CODE,STRINGLENGTH;                                           02406000
   BYTE ARRAY INSTRING,OUTSTRING,TABLE;                                 02408000
   OPTION VARIABLE,EXTERNAL;                                            02410000
                                                                        02412000
INTEGER PROCEDURE GET'DSDEVICE( LDEV );                        <<02848>>02414000
   VALUE   LDEV;                                               <<02848>>02416000
   INTEGER LDEV;                                               <<02848>>02418000
   OPTION  PRIVILEGED, UNCALLABLE, EXTERNAL;                   <<02848>>02420000
                                                               <<02848>>02422000
PROCEDURE MOUNT (VSNAME,VSGROUP,VSACCNT,REQTYPE,GEN,           <<00211>>02424000
                 PVINFO,SOME'OTHER'PIN);                       <<00211>>02426000
   VALUE GEN,SOME'OTHER'PIN;                                   <<00211>>02428000
   INTEGER REQTYPE,GEN,PVINFO,SOME'OTHER'PIN;                  <<00211>>02430000
   BYTE ARRAY VSNAME,VSGROUP,VSACCNT;                          <<RH.PV>>02432000
   OPTION VARIABLE,EXTERNAL;                                   <<RH.PV>>02434000
                                                               <<RH.PV>>02436000
PROCEDURE DISMOUNT (VSNAME,VSGROUP,VSACCNT,REQTYPE,            <<00211>>02438000
                    MVTABX,SOME'OTHER'PIN);                    <<00211>>02440000
   VALUE MVTABX,SOME'OTHER'PIN;                                <<00211>>02442000
   INTEGER REQTYPE,MVTABX,SOME'OTHER'PIN;                      <<00211>>02444000
   BYTE ARRAY VSNAME,VSGROUP,VSACCNT;                          <<RH.PV>>02446000
   OPTION VARIABLE,EXTERNAL;                                   <<RH.PV>>02448000
                                                               <<RH.PV>>02450000
INTEGER PROCEDURE LUN (VTABINX,MVTABX);                        <<RV.PV>>02452000
    VALUE   VTABINX,MVTABX;                                    <<RV.PV>>02454000
    INTEGER VTABINX,MVTABX;                                    <<RV.PV>>02456000
    OPTION EXTERNAL;                                           <<RV.PV>>02458000
                                                               <<RV.PV>>02460000
PROCEDURE CHECKDISC(LDN,STAT);                                 <<RH.PV>>02462000
   VALUE LDN;                                                  <<RH.PV>>02464000
   INTEGER LDN;                                                <<RH.PV>>02466000
   LOGICAL STAT;                                               <<RH.PV>>02468000
   OPTION EXTERNAL;                                            <<RH.PV>>02470000
                                                               <<RH.PV>>02472000
DOUBLE PROCEDURE VTABINDEX(VID,VSID,LDN,GEN);                  <<RH.PV>>02474000
   VALUE LDN;                                                  <<RH.PV>>02476000
   INTEGER LDN,GEN;                                            <<RH.PV>>02478000
   BYTE ARRAY VID,VSID;                                        <<RH.PV>>02480000
   OPTION VARIABLE,EXTERNAL;                                   <<RH.PV>>02482000
                                                               <<RH.PV>>02484000
PROCEDURE RELCOMREC(COMFN,RECNO,ERRNO);                        <<00256>>02486000
   VALUE COMFN,RECNO; INTEGER COMFN,RECNO,ERRNO;               <<00256>>02488000
   OPTION EXTERNAL;                                            <<00256>>02490000
                                                               <<00256>>02492000
PROCEDURE FREADDIR(FILENUM,TARGET,TCOUNT,RECNUM);              <<00256>>02494000
   VALUE FILENUM,TCOUNT,RECNUM;                                <<00256>>02496000
   INTEGER FILENUM,TCOUNT;                                     <<00256>>02498000
   LOGICAL ARRAY TARGET;                                       <<00256>>02500000
   DOUBLE RECNUM;                                              <<00256>>02502000
   OPTION EXTERNAL;                                            <<00256>>02504000
                                                               <<00256>>02506000
PROCEDURE FLOCK(FILENUM,LOCKCOND);                             <<00256>>02508000
   VALUE FILENUM,LOCKCOND; INTEGER FILENUM; LOGICAL LOCKCOND;  <<00256>>02510000
   OPTION EXTERNAL;                                            <<00256>>02512000
                                                               <<00256>>02514000
PROCEDURE FUNLOCK(FILENUM);                                    <<00256>>02516000
   VALUE FILENUM; INTEGER FILENUM;                             <<00256>>02518000
   OPTION EXTERNAL;                                            <<00256>>02520000
                                                               <<00256>>02522000
PROCEDURE SEARCHCOMFILE(COMFN,UNAME,ANAME,UREC,FREC,ERRNO);    <<00884>>02524000
   VALUE COMFN;  BYTE ARRAY UNAME,ANAME;                       <<00884>>02526000
   INTEGER COMFN,UREC,FREC,ERRNO;                              <<00884>>02528000
   OPTION VARIABLE,EXTERNAL;                                   <<00884>>02530000
                                                               <<00256>>02532000
   INTEGER PROCEDURE CYIMPLCTFILE'(LHS,RHS,LENR);              <<U.RAO>>02534000
   VALUE LENR;                                                 <<U.RAO>>02536000
   INTEGER LENR;                                               <<U.RAO>>02538000
   BYTE ARRAY LHS, RHS;                                        <<U.RAO>>02540000
   OPTION PRIVILEGED, UNCALLABLE, EXTERNAL;                    << I.A >>02542000
                                                               <<U.RAO>>02544000
PROCEDURE FERROR'(FNUM,PARMNUM);                               <<U.RAO>>02546000
VALUE FNUM;                                                    <<U.RAO>>02548000
INTEGER FNUM,PARMNUM;                                          <<U.RAO>>02550000
OPTION PRIVILEGED, UNCALLABLE,EXTERNAL;                        << I.A >>02552000
                                                                        02554000
   PROCEDURE CIERR(ERRNUM,ERRADR,PARMMASK,PARM);               <<U.RAO>>02556000
   VALUE ERRNUM,PARMMASK,PARM;                                 <<U.RAO>>02558000
   INTEGER ERRNUM,PARMMASK,PARM;                               <<U.RAO>>02560000
   BYTE ARRAY ERRADR;                                          <<U.RAO>>02562000
   OPTION PRIVILEGED,UNCALLABLE,VARIABLE,EXTERNAL;             << I.A >>02564000
                                                               <<U.RAO>>02566000
LOGICAL PROCEDURE CYORGCOMS'(ERRNUM,PARMNUM,IMAGE,LEVEL,NEWENTRY,       02568000
                             VSCOMM,SPECMASK);                 <<RV.PV>>02570000
VALUE LEVEL;                                                   <<U.RAO>>02572000
INTEGER ERRNUM;                                                <<U.RAO>>02574000
INTEGER PARMNUM;                                               <<U.RAO>>02576000
BYTE ARRAY IMAGE;                                              <<U.RAO>>02578000
INTEGER LEVEL;                                                 <<U.RAO>>02580000
INTEGER ARRAY NEWENTRY;                                        <<U.RAO>>02582000
ARRAY VSCOMM;                                                  <<RV.PV>>02584000
ARRAY SPECMASK;                                                <<RV.PV>>02586000
OPTION VARIABLE,PRIVILEGED,UNCALLABLE,FORWARD;                 <<U.RAO>>02588000
                                                                        02590000
   INTEGER PROCEDURE SYSLIST (ELEMENT, LEVEL, PARMS, SIRS);             02592000
   VALUE LEVEL, PARMS, SIRS;                                            02594000
   ARRAY ELEMENT;                                                       02596000
   INTEGER LEVEL, PARMS;                                                02598000
   DOUBLE SIRS;                                                         02600000
   OPTION FORWARD, PRIVILEGED, UNCALLABLE;                              02602000
                                                                        02604000
PROCEDURE CYDIRERR'(DIRECRETURN,OKMASK,ERRNUM);                <<U.RAO>>02606000
VALUE DIRECRETURN,OKMASK;                                      <<U.RAO>>02608000
DOUBLE DIRECRETURN;                                            <<U.RAO>>02610000
INTEGER ERRNUM;                                                <<U.RAO>>02612000
LOGICAL OKMASK;                                                <<U.RAO>>02614000
OPTION PRIVILEGED,UNCALLABLE,EXTERNAL;                         << I.A >>02616000
                                                                        02618000
INTEGER PROCEDURE CHECKFILENAME'(PDEF,GPTR,APTR,ERRPTR);       <<U.RAO>>02620000
VALUE PDEF; DOUBLE PDEF;                                       <<U.RAO>>02622000
LOGICAL GPTR,APTR,ERRPTR;                                      <<U.RAO>>02624000
OPTION PRIVILEGED, UNCALLABLE, EXTERNAL;                       << I.A >>02626000
                                                               <<U.RAO>>02628000
LOGICAL PROCEDURE CIBADFILENAME(ERRNUM,PARM);                  <<U.RAO>>02630000
VALUE PARM;                                                    <<U.RAO>>02632000
INTEGER ERRNUM;                                                <<U.RAO>>02634000
DOUBLE PARM;                                                   <<U.RAO>>02636000
OPTION PRIVILEGED,UNCALLABLE,EXTERNAL;                         << I.A >>02638000
                                                               <<U.RAO>>02640000
INTEGER PROCEDURE CHECKHOMEACCT(PPRESULT);                     <<U.RAO>>02642000
INTEGER ARRAY PPRESULT;                                        <<U.RAO>>02644000
OPTION PRIVILEGED, UNCALLABLE, FORWARD;                        <<U.RAO>>02646000
                                                                        02648000
INTEGER PROCEDURE CHECKHOMEGROUP(PPRESULT);                    <<U.RAO>>02650000
INTEGER ARRAY PPRESULT;                                        <<U.RAO>>02652000
OPTION PRIVILEGED, UNCALLABLE, FORWARD;                        <<U.RAO>>02654000
                                                                        02656000
PROCEDURE LOADERROR(ERRNUM);                                   <<U.RAO>>02658000
VALUE ERRNUM; INTEGER ERRNUM;                                  <<U.RAO>>02660000
OPTION PRIVILEGED,UNCALLABLE,EXTERNAL;                         << I.A >>02662000
                                                               <<U.RAO>>02664000
LOGICAL PROCEDURE CREATEERROR;                                 <<U.RAO>>02666000
OPTION PRIVILEGED,UNCALLABLE,EXTERNAL;                         << I.A >>02668000
                                                               <<U.RAO>>02670000
   LOGICAL PROCEDURE REQUESTSERVICE;                                    02672000
   OPTION PRIVILEGED,UNCALLABLE,EXTERNAL;                      << I.A >>02674000
                                                                        02676000
   PROCEDURE CXDSLINED EXECUTORHEAD;                           <<DS0.0>>02678000
   OPTION FORWARD,PRIVILEGED,UNCALLABLE;                       <<DS0.0>>02680000
                                                               <<DS0.0>>02682000
   PROCEDURE CXREMOTED EXECUTORHEAD;                           <<DS0.0>>02684000
   OPTION FORWARD,PRIVILEGED,UNCALLABLE;                       <<DS0.0>>02686000
                                                               <<DS0.0>>02688000
   LOGICAL PROCEDURE CREATEPROC'ERR(ERROR,ERRNUM);             <<01452>>02690000
   VALUE ERROR; INTEGER ERROR,ERRNUM;                          <<01452>>02692000
   OPTION PRIVILEGED,UNCALLABLE,EXTERNAL;                      << I.A >>02694000
                                                               <<01452>>02696000
   PROCEDURE CXRFAD EXECUTORHEAD;                              <<DS0.0>>02698000
   OPTION FORWARD,PRIVILEGED,UNCALLABLE;                       <<DS0.0>>02700000
                                                                        02702000
   PROCEDURE CXSHOWCOM EXECUTORHEAD;                                    02704000
   OPTION FORWARD,PRIVILEGED,UNCALLABLE;                                02706000
                                                               <<01115>>02708000
LOGICAL PROCEDURE CISUBSYSFINISH(MESSGTYPE,ERRNUM,PARMNUM);    <<01452>>02710000
   VALUE MESSGTYPE;                                            <<01452>>02712000
   INTEGER MESSGTYPE,ERRNUM,PARMNUM;                           <<01452>>02714000
   OPTION UNCALLABLE,PRIVILEGED,EXTERNAL;                      << I.A >>02716000
                                                                        02718000
INTEGER PROCEDURE FORMACCESS'(LEVEL,ACCSTRING,SEC,NUMPARMS     << I.A >>02720000
                               ,ERRNUM);                       << I.A >>02722000
  VALUE LEVEL;                                                 << I.A >>02724000
  INTEGER LEVEL,                                               << I.A >>02726000
          NUMPARMS,                                            << I.A >>02728000
          ERRNUM;                                              << I.A >>02730000
  BYTE ARRAY ACCSTRING;                                        << I.A >>02732000
  DOUBLE SEC;                                                  << I.A >>02734000
  OPTION UNCALLABLE,PRIVILEGED,                                << I.A >>02736000
         EXTERNAL;                                             << I.A >>02738000
                                                               << I.A >>02740000
INTEGER PROCEDURE DIRMATCH(DESIGNATOR,REALNAME);               << I.A >>02742000
  VALUE DESIGNATOR,REALNAME;                                   << I.A >>02744000
  BYTE POINTER DESIGNATOR,                                     << I.A >>02746000
               REALNAME;                                       << I.A >>02748000
  OPTION UNCALLABLE,                                           << I.A >>02750000
         EXTERNAL;                                             << I.A >>02752000
                                                               << I.A >>02754000
LOGICAL PROCEDURE PRODUCEPARMS(LEAFLEVEL,QNAME,PPRESULT,       << I.A >>02756000
                               DELIM,ERRNUM);                  << I.A >>02758000
  VALUE LEAFLEVEL,QNAME;                                       << I.A >>02760000
  INTEGER LEAFLEVEL,                                           << I.A >>02762000
          ERRNUM;                                              << I.A >>02764000
  BYTE POINTER QNAME,                                          << I.A >>02766000
               DELIM;                                          << I.A >>02768000
  ARRAY PPRESULT;                                              << I.A >>02770000
  OPTION PRIVILEGED,UNCALLABLE,                                << I.A >>02772000
         EXTERNAL;                                             << I.A >>02774000
                                                               << I.A >>02776000
PROCEDURE GETDIRINFO(STARTINX,DEFLEVEL,PPRESULT);              << I.A >>02778000
  VALUE STARTINX,DEFLEVEL;                                     << I.A >>02780000
  INTEGER STARTINX,                                            << I.A >>02782000
          DEFLEVEL;                                            << I.A >>02784000
  INTEGER ARRAY PPRESULT;                                      << I.A >>02786000
  OPTION PRIVILEGED,UNCALLABLE,                                << I.A >>02788000
         EXTERNAL;                                             << I.A >>02790000
                                                               << I.A >>02792000
                                                                        02794000
$PAGE   "FILE MANAGEMENT COMMAND EXECUTORS--RESET,SAVE,PURGE,RENAME"    02796000
$CONTROL   SEGMENT  =  CICOMSYS                                         02798000
                                                               <<DS0.0>>02800000
COMMENT                                                        <<01452>>02802000
THIS PROCEDURE CREATES THE DSCOPY PROCESS AND PASSES TO IT THE <<01452>>02804000
NECESSARY INFORMATION. THE COMMAND STRING IS PASSED USING THE  <<01452>>02806000
"INFO" FACILITY IN CREATEPROCESS.                              <<01452>>02808000
;                                                              <<01452>>02810000
                                                               <<01452>>02812000
PROCEDURE CXDSCOPY EXECUTORHEAD;                               <<01452>>02814000
   OPTION PRIVILEGED,UNCALLABLE;                               <<01452>>02816000
                                                               <<01452>>02818000
BEGIN                                                          <<01452>>02820000
ARRAY NAME'(0:7);                                              <<01452>>02822000
BYTE ARRAY NAME(*) = NAME';                                    <<01452>>02824000
INTEGER PIN,                                                   <<01452>>02826000
        LEN,                                                   <<01452>>02828000
        ERROR;                                                 <<01452>>02830000
ARRAY ITEMCODES(0:10);                                         <<01452>>02832000
ARRAY ITEMS(0:10);                                             <<01452>>02834000
BYTE POINTER TEMPBP;  << POINTER TO PARAMETER STRING >>        <<01452>>02836000
                                                               <<01452>>02838000
EQUATE                                                         <<01452>>02840000
  UNKNOWN'PROG    =  6;   << CREATEPROC. CAN'T FIND PROGRAM >> <<01452>>02842000
                                                               <<01452>>02844000
<< GET ADDRESS AND LENGTH OF PARAMETER STRING >>               <<01452>>02846000
SCAN PARMSP WHILE %6440,1;  << CR, BLANK >>                    <<01452>>02848000
IF CARRY THEN   << ALL BLANKS >>                               <<01452>>02850000
   BEGIN                                                       <<01452>>02852000
   DEL;                                                        <<01452>>02854000
   @TEMPBP := @PARMSP;                                         <<01452>>02856000
   LEN := 0;                                                   <<01452>>02858000
   END                                                         <<01452>>02860000
ELSE                                                           <<01452>>02862000
   BEGIN        << SOMETHING THERE >>                          <<01452>>02864000
   @TEMPBP := TOS;                                             <<01452>>02866000
   SCAN TEMPBP UNTIL %15,1;  << CR >>                          <<01452>>02868000
   LEN := TOS - @TEMPBP;                                       <<01452>>02870000
   END;                                                        <<01452>>02872000
                                                               <<01452>>02874000
MOVE NAME := "DSCOPY.PUB.SYS ";                                <<01452>>02876000
                                                               <<01452>>02878000
MOVE ITEMCODES := (3, << FLAGS >>                              <<01452>>02880000
                  11, << INFO STRING ADDRESS >>                <<01452>>02882000
                  12, << INFO STRING LENGTH >>                 <<01452>>02884000
                   0);                                         <<01452>>02886000
                                                               <<01452>>02888000
ITEMS(0) := 1;                                                 <<01452>>02890000
ITEMS(1) := @TEMPBP;                                           <<01452>>02892000
ITEMS(2) := LEN;                                               <<01452>>02894000
ITEMS(3) := 0;                                                 <<01452>>02896000
                                                               <<01452>>02898000
SETJCW(GETJCW LAND %37777);  << CLEAR ABORT BITS >>            <<01452>>02900000
                                                               <<01452>>02902000
CREATEPROCESS (ERROR, PIN, NAME, ITEMCODES, ITEMS);            <<01452>>02904000
IF < THEN                                                      <<01452>>02906000
   BEGIN         << ERROR. PROCESS NOT CREATED >>              <<01452>>02908000
   NAME(6) := 0;                                               <<01452>>02910000
   IF ERROR = UNKNOWN'PROG THEN                                <<01452>>02912000
      CIERR( ERRNUM := SUBSNOTFOUND, , 0, @NAME )              <<01452>>02914000
   ELSE                                                        <<01452>>02916000
      BEGIN                                                    <<01452>>02918000
      CREATEPROC'ERR( ERROR, ERRNUM );                         <<01452>>02920000
      CIERR( ERRNUM := SUBSNOTCREATE, , 0, @NAME );            <<01452>>02922000
      END;                                                     <<01452>>02924000
   END                                                         <<01452>>02926000
ELSE                                                           <<01452>>02928000
   BEGIN                                                       <<01452>>02930000
   << CHECK FOR CREATEPROCESS WARNING. >>                      <<01452>>02932000
   IF > THEN CREATEPROC'ERR( -ERROR, ERRNUM );                 <<01452>>02934000
                                                               <<01452>>02936000
   AWAKE( PIN * PCBSIZE, 1, 2 );                               <<01452>>02938000
   CISUBSYSFINISH( 3, ERRNUM, PARMNUM );                       <<01452>>02940000
   END;                                                        <<01452>>02942000
                                                               <<01452>>02944000
END;  << CXDSCOPY >>                                           <<01452>>02946000
                                                               <<01452>>02948000
PROCEDURE CXRFAD EXECUTORHEAD;                                 <<DS0.0>>02950000
OPTION PRIVILEGED,UNCALLABLE;                                  <<DS0.0>>02952000
BEGIN                                                          <<DS0.0>>02954000
<<  DUMMY PROCEDURE FOR COMMANDS "REMOTE", "DSLINE", AND "RFA".         02956000
    IF THE DS/3000 SUBSYSTEM RESIDES IN THE SYSTEM THE PLABELS          02958000
    WILL BE LOCATED IN SYSTEM DB LOCATIONS 360,361, AND 362.            02960000
    IF THE PLABEL IS ZERO THE SUBSYSTEM IS NOT PRESENT AND THE          02962000
    CORRESPONDING CI ERROR NUMBER IS REPORTED.  IF THE LABEL DOES       02964000
    EXIST THE RESPECTIVE PROCEDURE IS CALLED TO PROCESS THE COMMAND.    02966000
                                                                        02968000
                                                                      >>02970000
     ENTRY                                                     <<DS0.0>>02972000
        CXDSLINED,                                             <<DS0.0>>02974000
        CXREMOTED;                                             <<DS0.0>>02976000
                                                               <<DS0.0>>02978000
     ERRNUM := 1;                                              <<DS0.0>>02980000
    CXDSLINED:                                                 <<DS0.0>>02982000
     ERRNUM := ERRNUM + 1;                                     <<DS0.0>>02984000
    CXREMOTED:                                                 <<DS0.0>>02986000
     ERRNUM := ERRNUM + %1342;                                 <<DS0.0>>02988000
     TOS := @PARMSP;                                           <<DS0.0>>02990000
     TOS := @ERRNUM;                                           <<DS0.0>>02992000
     TOS := @PARMNUM;                                          <<DS0.0>>02994000
     TOS := ABSOLUTE(ERRNUM);                                  <<DS0.0>>02996000
     IF <> THEN                                                <<DS0.0>>02998000
        BEGIN                                                  <<DS0.0>>03000000
           ERRNUM := 0;                                        <<DS0.0>>03002000
           ASSEMBLE(PCAL 0);                                   <<DS0.0>>03004000
        END                                                    <<DS0.0>>03006000
        ELSE                                                   <<DS0.0>>03008000
             CIERR(ERRNUM := DSSUBSNOTFOUND);                  <<U.RAO>>03010000
END;                                                           <<DS0.0>>03012000
$CONTROL SEGMENT=CICOMSYS                                               03014000
                                                                        03016000
  <<This procedure calls the SHOWCOM command in CS>>                    03018000
                                                                        03020000
  PROCEDURE CXSHOWCOM EXECUTORHEAD;                                     03022000
    OPTION PRIVILEGED,UNCALLABLE;                                       03024000
    BEGIN                                                               03026000
      TOS:=0;                                                           03028000
      TOS:=@PARMSP;                                                     03030000
      TOS:=@ERRNUM;                                                     03032000
      TOS:=@PARMNUM;                                                    03034000
      TOS:=ABSOLUTE(SYSDB+PLAB'SHOWCOM);                                03036000
      IF < THEN ASSEMBLE(PCAL 0)                                        03038000
           ELSE ASSEMBLE(DDEL,DDEL);                                    03040000
    END;                                                                03042000
                                                                        03044000
PROCEDURE CXCLINE EXECUTORHEAD;                                         03046000
   OPTION PRIVILEGED,UNCALLABLE;                               <<02317>>03048000
BEGIN                                                                   03050000
<< Note that this command, CLINE, is really part of the CS >>  <<U.RAO>>03052000
<< subsystem.                                   >>             <<01165>>03054000
<< September 1, 1978        Bob Gerstmyer          >>          <<01165>>03056000
     INTEGER NUMPARMS;                                                  03058000
     EQUATE MAXPARMS = 50,                                              03060000
            PARMSIZE = MAXPARMS - 1;                                    03062000
     DOUBLE ARRAY PARMS(0:PARMSIZE);                                    03064000
     LBPARMDECS;                                                        03066000
   BYTE POINTER PARMPTR;   << POINTER TO CURRENT PARAMETER >>  <<01165>>03068000
   INTEGER PARMLEN,    << LENGTH OF CURRENT PARAMETER >>       <<01165>>03070000
      NEXTDELIM;   << DELIMITER FOLLOWING CURRENT PARAMETER >> <<01165>>03072000
     LOGICAL T3;                                               <<01165>>03074000
   INTEGER BINARYDIGIT,        << USED BY BINARY INTRINSIC >>  <<01165>>03076000
      ENTRYNUM, T1, PARM'INDX;                                 <<01165>>03078000
     LOGICAL NOTFINISHED = T3,                                 <<01165>>03080000
         MOREPARMS := FALSE;<< NEED TO CALL MYCOMMAND AGAIN >> <<01165>>03082000
     LOGICAL                                                   <<01165>>03084000
         LASTPARM'DONE,<<TRUE IF LAST PARM FOR THIS KEY DONE>> <<01165>>03086000
          FLAGS := 0,                                          <<01165>>03088000
          FLAGS1 := 0,                                         <<01165>>03090000
          FLAGS2 := 0,                                         <<01165>>03092000
          COPTIONS := 0,                                       <<01165>>03094000
          AOPTIONS := 0,                                       <<01165>>03096000
          DOPTIONS := 0,                                       <<01165>>03098000
          BUFFSIZE := 0,                                       <<01165>>03100000
          NUMBUFFERS := 0,                                     <<01165>>03102000
          CTRACEINFO := 0;                                     <<01165>>03104000
     INTEGER                                                   <<01165>>03106000
          DEVLEN := 0,                                         <<01165>>03108000
          MISCLEN := 0,                                        <<01165>>03110000
          LOCIDLEN := 0,                                       <<01165>>03112000
          REMIDLEN := 0,                                       <<01165>>03114000
          DRIVERLEN := 0,                                      <<01165>>03116000
          SUPLISTLEN := 0,                                     <<01165>>03118000
          PHLISTLEN := 0,                                      <<01165>>03120000
          POLLISTLEN := 0;                                     <<01165>>03122000
   INTEGER STRINGLEN := 0,PHLISTNUM := 0;                      <<01165>>03124000
     DOUBLE                                                    <<01165>>03126000
          INSPEED := 0D,                                       <<01165>>03128000
          OUTSPEED := 0D;                                      <<01165>>03130000
     INTEGER I,LOC,LEN,LISTLEN,SEQNUM,SEQTYPE,                 <<01165>>03132000
             DIGITYPE,STRINGTYPE;                              <<01165>>03134000
   EQUATE ERRNAME=%176;                                        <<01165>>03136000
     EQUATE                                                    <<01165>>03138000
          PKEYLISTL     = 170,                                 <<01165>>03140000
          PDELIMITERSL  =   6;                                 <<01165>>03142000
     EQUATE                                                    <<01165>>03144000
          CODEMAX      = 63,                                   <<01165>>03146000
          LMODEMAX     = 15,                                   <<01165>>03148000
          PROTOMAX     = 255;                                  <<01165>>03150000
     EQUATE                                                    <<01165>>03152000
          MAXPHONELEN    = 20,                                 <<01165>>03154000
          MAXIDSEQLEN    = 16,                                 <<01165>>03156000
        << DELIMITER INDICES >>                                <<01165>>03158000
        COMMA      = 0,                                        <<01165>>03160000
        EQUALS     = 1,                                        <<01165>>03162000
        SEMICOLON  = 2,                                        <<01165>>03164000
        QUOTE      = 3,                                        <<01165>>03166000
        LEFTPAREN  = 4,                                        <<01165>>03168000
        RIGHTPAREN = 5,                                        <<01165>>03170000
        CR         = 6,                                        <<01165>>03172000
          STRING      = 0,                                     <<01165>>03174000
          DIGITS      = 1,                                     <<01165>>03176000
          HEX         = 0,                                     <<01165>>03178000
          OCTAL       = 1,                                     <<01165>>03180000
          ASCII       = 0,                                     <<01165>>03182000
          EBCDIC      = 1,                                     <<01165>>03184000
          TOEBCDIC    = 2;                                     <<01165>>03186000
     EQUATE CARRIAGERETURN = %15;                              <<01165>>03188000
     EQUATE                                                    <<01165>>03190000
          STARTOFPTRS      = 30,                               <<01165>>03192000
          LOCIDPTR         = STARTOFPTRS,                      <<01165>>03194000
          REMIDPTR         = LOCIDPTR + 1,                     <<01165>>03196000
          SUPLISTPTR       = REMIDPTR + 1,                     <<01165>>03198000
          PHLISTPTR        = SUPLISTPTR + 1,                   <<01165>>03200000
          POLLISTPTR       = PHLISTPTR + 1,                    <<01165>>03202000
          MISCPTR          = POLLISTPTR + 1,                   <<01165>>03204000
          STARTOFLISTS     = MISCPTR + 1,                      <<01165>>03206000
          MINENTRYSIZE1    = 7,                                <<01165>>03208000
          MINENTRYSIZE2    = STARTOFLISTS;                     <<01165>>03210000
     LOGICAL POINTER MISC,POLLIST;                             <<01165>>03212000
   EQUATE                                                      <<01165>>03214000
      CLN'DIALVAL       = 1769,   << EXPECT W,R,RW,NO OR 1-3 >><<01165>>03216000
      CLN'LMODEVAL   = 1769,  << EXPECT PRI,SEC,MPCNT,MPSEC,DTE,DCE >>  03218000
      CLN'CODEVAL    = 1769,  << EXPECT >>                     <<01165>>03220000
      CLN'DUALVAL    = 1769,  << EXPECT LOW OR HIGH >>         <<01165>>03222000
      CLN'PROTOVAL   = 1769,  << EXPECT BSC, MRJE, OR HPDLCI >><<01165>>03224000
      CLN'XPCTCOMMA  = 1769,  << EXPECT COMMA >>               <<01165>>03226000
      CLN'XPCTQUOTE   = 1769,   << EXPECT QUOTE >>             <<01165>>03228000
      CLN'XPCT1ALPHA  = 1769,   << EXPECT A,E,O,H >>           <<01165>>03230000
       CLNUNDEFKEYVAL  =  1769,                                <<01165>>03232000
       CLN2MP          =  1769,                                <<01165>>03234000
       CLNPARM2LONG    =  1769,                                <<01165>>03236000
       CLNBADELIMITER  =  1769,                                <<01165>>03238000
      CLN'UNDEFKEYVAL  =  1769,                                <<01165>>03240000
      CLNXPCTASTRSK    =  1769,                                <<01165>>03242000
      CLN'XPCTPAREN   =  1769,                                 <<01165>>03244000
      CLNXPCTKEYVAL   =  1769,   << KEY VALUE EXPECTED >>      <<01165>>03246000
      CLN'XPCTQU'PAR  = 1769;   << EXPECT QUOTE OR PAREN FOR STRING >>  03248000
                                                               <<01165>>03250000
     LOGICAL POINTER WFENTRY;                                  <<01165>>03252000
     BYTE POINTER FENTRY;                                      <<01165>>03254000
     BYTE ARRAY PDELIMITERS(*)=PB:=",=;""()";                  <<01165>>03256000
     BYTE ARRAY PKEYLIST (*) = PB :=                           <<01165>>03258000
          5,3,"DEV",        << KEY WORDS RECOGNIZED >>         <<01165>>03260000
          6,4,"MISC",                                          <<01165>>03262000
          5,3,"BUF",                                           <<01165>>03264000
          6,4,"DIAL",                                          <<01165>>03266000
          7,5,"PROTO",                                         <<01165>>03268000
          6,4,"CODE",                                          <<01165>>03270000
          6,4,"DUAL",                                          <<01165>>03272000
          7,5,"LMODE",                                         <<01165>>03274000
          8,6,"DRIVER",                                        <<01165>>03276000
          7,5,"SPEED",                                         <<01165>>03278000
         10,8,"DOPTIONS",                                      <<01165>>03280000
          7,5,"TRACE",                                         <<01165>>03282000
          9,7,"NOTRACE",                                       <<01165>>03284000
          6,4,"NOID",                                          <<01165>>03286000
         10,8,"TIMEOUTS",                                      <<01165>>03288000
         12,10,"NOTIMEOUTS",                                   <<01165>>03290000
          4,2,"ID",                                            <<01165>>03292000
          7,5,"LOCID",                                         <<01165>>03294000
          7,5,"REMID",                                         <<01165>>03296000
          9,7,"POLLIST",                                       <<01165>>03298000
          8,6,"PHLIST",                                        <<01165>>03300000
         10,8,"DOWNFILE",                                      <<01165>>03302000
         9,7,"SUPLIST",                                        <<01165>>03304000
          0;                                                   <<01165>>03306000
     BYTE ARRAY KEYLIST(0:PKEYLISTL);                          <<01165>>03308000
     BYTE ARRAY DELIMITERS(0:PDELIMITERSL);                    <<01165>>03310000
     BYTE ARRAY N1(0:1),N2(*)=N1;                              <<01165>>03312000
     BYTE POINTER                                              <<01165>>03314000
          DEV,                                                 <<01165>>03316000
          LIST,                                                <<01165>>03318000
          LOCID,                                               <<01165>>03320000
          REMID,                                               <<01165>>03322000
          SUPLIST,                                             <<01165>>03324000
          PHLIST,                                              <<01165>>03326000
          DRIVER,                                              <<01165>>03328000
          FORMDES,                                             <<01165>>03330000
          BACKREFNAME;                                         <<01165>>03332000
     DEFINE  << PARTIAL FIELDS >>                              <<01165>>03334000
          DIALFLD     = (12: 2)#,                              <<01165>>03336000
          CODEFLD     = (10: 6)#,                              <<01165>>03338000
          DUALFLD     = ( 4: 2)#,                              <<01165>>03340000
          LMODEFLD    = ( 6: 4)#,                              <<01165>>03342000
          PROTOFLD    = ( 0: 8)#,                              <<01165>>03344000
          INHIBTOUT   = ( 0: 1)#,                              <<01165>>03346000
          TRACEWRAP   = ( 1: 1)#,                              <<01165>>03348000
          DELIMTYPE   = (11: 5)#,                              <<01165>>03350000
          TRACESPEC   = ( 2: 1)#,                              <<01165>>03352000
          TRACETYPE   = ( 0: 1)#,                              <<01165>>03354000
          TRACEMASK   = ( 2:9)#,                                        03356000
          TRACENTNUM  = (11:5)#,                                        03358000
          INHIBIDSEQ  = ( 1: 1)#;                              <<01165>>03360000
                                                               <<01165>>03362000
SUBROUTINE CEXIT(ERRORVALUE);                                  <<01165>>03364000
VALUE ERRORVALUE; INTEGER ERRORVALUE;                          <<01165>>03366000
   BEGIN             << EXIT WITH ERROR >>                     <<01165>>03368000
   CIERR(ERRNUM := ERRORVALUE,PARMPTR);                        <<01165>>03370000
   ASSEMBLE (EXIT 3);                                          <<01165>>03372000
   END;                                                        <<01165>>03374000
                                                               <<01165>>03376000
SUBROUTINE MOVESTRING;                                         <<01165>>03378000
   << MOVE STRING POINTED TO BY PARMPTR TO LIST(LOC) >>        <<01165>>03380000
   BEGIN                                                       <<01165>>03382000
   IF STRINGTYPE = ASCII THEN                                  <<01165>>03384000
      MOVE LIST(LOC) := PARMPTR , (PARMLEN)                    <<01165>>03386000
   ELSE CTRANSLATE(TOEBCDIC,PARMPTR,LIST(LOC),PARMLEN);        <<01165>>03388000
   TOS := PARMLEN;     << ADD INTEGER TO BYTE VALUE BELOW >>   <<01165>>03390000
   LIST(LEN) := TOS + LIST(LEN);   << ADD PARAMETER LENGTH >>  <<01165>>03392000
   LOC := LOC + PARMLEN;                                       <<01165>>03394000
   STRINGLEN := STRINGLEN + PARMLEN;                           <<01165>>03396000
   END <<MOVESTRING>>;                                         <<01165>>03398000
                                                               <<01165>>03400000
SUBROUTINE CHECKNAME(ALLOWSPECIALS);                           <<01165>>03402000
VALUE ALLOWSPECIALS; LOGICAL ALLOWSPECIALS;                    <<01165>>03404000
   << CHECKS FORMALDESIGNATOR  - NO SPECIAL CHARS ALLOWED               03406000
             BACK REFERENCE    - SPECIAL CHARS ALLOWED                  03408000
   >>                                                          <<01165>>03410000
   BEGIN                                                       <<01165>>03412000
   IF PARMLEN = 0 THEN CEXIT(CLN'NO'NAME);                     <<01165>>03414000
   TOS:=PARMS(PARMNUM - 1);  << PARMNUM INCREMENTED ALREADY >> <<01165>>03416000
   TOS := TOS & LSR(5);     << SPECIAL CHAR INFO >>            <<01165>>03418000
   IF LS0 AND NOT ALLOWSPECIALS THEN                           <<01165>>03420000
        CEXIT(CLNMBEDSPECIALS);                                <<01165>>03422000
     TOS:=TOS & LSR(1);         << LOSE SPECIAL CHAR INFO >>   <<01165>>03424000
   IF LS0 THEN  <<NUMERICS>>                                   <<01165>>03426000
      IF PARMPTR = NUMERIC THEN CEXIT(CLNLEADINGNUM);          <<01165>>03428000
   IF PARMLEN > 8 THEN CEXIT(CLNNAME2LONG);                    <<01165>>03430000
   ASSEMBLE(DDEL);        <<DELETE PARMS>>                     <<01165>>03432000
END <<CHECKNAME>>;                                             <<01165>>03434000
                                                               <<01165>>03436000
SUBROUTINE TRYBINARYCONVERT(ERRVALUE);                         <<01165>>03438000
VALUE ERRVALUE; INTEGER ERRVALUE;                              <<01165>>03440000
   BEGIN                                                       <<01165>>03442000
   << ATTEMPTS TO CONVERT CURRENT PARAMETER USING BINARY INTRINSIC.     03444000
      IF NOT NUMERIC, THEN CEXIT WITH ERROR=ERRVALUE.                   03446000
      IF SUCCESSFUL, RESULT IS RETURNED IN BINARYDIGIT.            >>   03448000
   IF PARMPTR <> NUMERIC THEN CEXIT(ERRVALUE);                 <<01165>>03450000
   BINARYDIGIT := BINARY(PARMPTR,PARMLEN);                     <<01165>>03452000
   IF <> THEN CEXIT(CLNBADINT);                                <<01165>>03454000
   END;     << TRYBINARYCONVERT >>                             <<01165>>03456000
                                                               <<01165>>03458000
                                                               <<01165>>03460000
LOGICAL SUBROUTINE GETNEXTPARM;                                <<01165>>03462000
   << THIS SUBROUTINE EXTRACTS THE NEXT PARAMETER FROM PARMS AND        03464000
      DECOMPOSES THE MYCOMMAND RETURNED ENTRY. ALSO CHECKS FOR          03466000
      TOO MANY PARAMETER CASE.                                          03468000
   >>                                                          <<01165>>03470000
   BEGIN                                                       <<01165>>03472000
   IF PARMNUM >= NUMPARMS THEN                                 <<01165>>03474000
     IF MOREPARMS THEN      << MORE PARMS ARE AVAILABLE >>     <<01165>>03476000
      BEGIN                                                    <<01165>>03478000
        MYCOMMAND(PARMPTR(PARMLEN+1),DELIMITERS,MAXPARMS,      <<01165>>03480000
               NUMPARMS,PARMS);                                <<01165>>03482000
        IF = THEN MOREPARMS := FALSE;                          <<01165>>03484000
        PARMNUM := 0;                                          <<01165>>03486000
        END                                                    <<01165>>03488000
      ELSE RETURN;<<GETNEXTPARM=FALSE-NO MORE PARMS AVAILABLE>><<01165>>03490000
   GETNEXTPARM := TRUE;                                        <<01165>>03492000
   TOS := PARMS(PARMNUM);       << GET NEXT ENTRY >>           <<01165>>03494000
   NEXTDELIM := S0.DELIMTYPE;   << GET TRAILING DELIMITER >>   <<01165>>03496000
   PARMLEN := TOS & LSR(8);     << LENGTH OF ENTRY >>          <<01165>>03498000
   @PARMPTR := TOS;             << FIRST WORD OF MYCOMMAND ENTRY >>     03500000
   PARMNUM := PARMNUM + 1;                                     <<01165>>03502000
   IF PARMNUM > MAXPARMS THEN CEXIT(CLN2MP);   << TOO MANY PARA<<01165>>03504000
   END <<GETNEXTPARM>>;                                        <<01165>>03506000
                                                               <<01165>>03508000
SUBROUTINE CHECKBACKREF;                                       <<01165>>03510000
   BEGIN                                                       <<01165>>03512000
   << CHECKS BACK REFERENCED LINE DESIGNATOR.                           03514000
      PROCESSING ENDS IN THIS SUBROUTINE        >>             <<01165>>03516000
   GETNEXTPARM;                                                <<01165>>03518000
   IF PARMLEN = 0 THEN CEXIT(CLNREQADESIG);                    <<01165>>03520000
   IF PARMPTR <> "*" THEN CEXIT(CLNXPCTASTRSK);                <<01165>>03522000
   IF NUMPARMS > 2 THEN                                        <<01165>>03524000
      BEGIN                                                    <<01165>>03526000
      @PARMPTR := @PARMPTR + PARMLEN;   << UPDATE FOR CEXIT >> <<01165>>03528000
      CEXIT(CLNBREF2MP);                                       <<01165>>03530000
      END;                                                     <<01165>>03532000
    @BACKREFNAME := @BACKREFNAME + 1;                          <<01165>>03534000
    @PARMPTR := @PARMPTR + 1;       << MOVE PAST ASTERISK >>   <<01165>>03536000
    PARMLEN := PARMLEN - 1;                                    <<01165>>03538000
    CHECKNAME(ERRCLINEDESIG);                                  <<01165>>03540000
    TOS := MINENTRYSIZE1;                                      <<04689>>03542000
    PUSH(S); DUPLICATE;                                        <<01165>>03544000
    @WFENTRY := TOS;                                           <<01165>>03546000
    @FENTRY := TOS & LSL(1);                                   <<01165>>03548000
    ASSEMBLE(ADDS 0);                                          <<01165>>03552000
    WFENTRY := 1;                                              <<01165>>03554000
    WFENTRY(1) := %1000;                                       <<01165>>03556000
    WFENTRY(2) := PARMLEN;                                     <<01165>>03558000
    MOVE FENTRY(6) := BACKREFNAME , (PARMLEN);                 <<01165>>03560000
    TOS := PARMLEN;                                            <<01165>>03562000
    DUPLICATE;                                                 <<01165>>03564000
    IF TOS THEN TOS := TOS + 1;     << MAKE LENGTH EVEN >>     <<01165>>03566000
    TOS := TOS & LSR(1);                                       <<01165>>03568000
    T1 := TOS + 3;                                             <<01165>>03570000
    T1 := XADDJTENTRY(FORMDES,N1,N2,-4,T1,WFENTRY,             <<01165>>03572000
                      BACKREFNAME,N1,N2);                      <<01165>>03574000
    TOS := MINENTRYSIZE1;                                      <<04689>>03576000
    ASSEMBLE (SUBS 0); << REMOVE WFENTRY FROM TOP OF STACK >>  <<04689>>03578000
      CASE * T1 OF                                             <<01165>>03580000
      BEGIN                                                    <<01165>>03582000
           RETURN;                                             <<01165>>03584000
           BEGIN   <<TABLE FULL>>                              <<01165>>03586000
           CIERR(ERRNUM := ERRCTABFULL);                       <<01165>>03588000
           RETURN                                              <<01165>>03590000
           END;                                                <<01165>>03592000
           ;                                                   <<01165>>03594000
           BEGIN   <<BACK REF NOT FOUND>>                      <<01165>>03596000
           CIERR(ERRNUM := ERRCNOTFOUND);                      <<01165>>03598000
           RETURN                                              <<01165>>03600000
           END;                                                <<01165>>03602000
           BEGIN   <<TOO MANY CLINE EQUATIONS IN TABLE >>      <<01165>>03604000
           CIERR(ERRNUM := ERR2MCREF);                         <<01165>>03606000
           RETURN                                              <<01165>>03608000
           END;                                                <<01165>>03610000
      END;         << CASE STATEMENT >>                        <<01165>>03612000
      RETURN;                                                  <<01165>>03614000
    END;   << CHECKBACKREF >>                                  <<01165>>03616000
                                                               <<01165>>03618000
SUBROUTINE TRACEPARMS;                                         <<01165>>03620000
   << HANDLES THE SPECIFIED TRACE PARAMETERS >>                <<01165>>03622000
   BEGIN                                                       <<01165>>03624000
   GETNEXTPARM;                                                <<01165>>03626000
   IF NEXTDELIM <> COMMA AND PARMLEN = 0 THEN CEXIT(CLN'XPCTCOMMA);     03628000
   PARM'INDX := -1;                                            <<01165>>03630000
   WHILE (PARM'INDX := PARM'INDX + 1) <= 3 DO                  <<01165>>03632000
      BEGIN                                                    <<01165>>03634000
      IF PARMLEN <> 0 THEN                                     <<01165>>03636000
         CASE * PARM'INDX OF                                   <<01165>>03638000
            BEGIN                                              <<01165>>03640000
                BEGIN    << "ALL" SPECIFIED >>                 <<01165>>03642000
                IF PARMPTR = "ALL" THEN CTRACEINFO.TRACETYPE := 1       03644000
                ELSE CEXIT(CLN'UNDEFKEYVAL);                   <<01165>>03646000
                END;                                           <<01165>>03648000
                BEGIN    << TRACE MASK SPECIFIED >>            <<01165>>03650000
                TRYBINARYCONVERT(CLNUNDEFKEYVAL);              <<01165>>03652000
                IF BINARYDIGIT > %777  THEN CEXIT(CLNBNDSERR0'127);     03654000
                CTRACEINFO.TRACEMASK := BINARYDIGIT;           <<01165>>03656000
                END;                                           <<01165>>03658000
                BEGIN    << NUM TRACE ENTRIES SPEC >>          <<01165>>03660000
                TRYBINARYCONVERT(CLNUNDEFKEYVAL);              <<01165>>03662000
                IF BINARYDIGIT > 256 THEN CEXIT(CLNBNDSERR0'377);       03664000
                CTRACEINFO.TRACENTNUM := BINARYDIGIT;          <<01165>>03666000
                END;                                           <<01165>>03668000
                IF PARMPTR = "WRAP" THEN CTRACEINFO.TRACEWRAP := 1      03670000
                ELSE CEXIT(CLNUNDEFKEYVAL);                    <<01165>>03672000
            END <<CASE>>;                                      <<01165>>03674000
         IF NEXTDELIM <> COMMA THEN PARM'INDX := 3             <<01165>>03676000
         ELSE GETNEXTPARM;                                     <<01165>>03678000
      END;      << DO WHILE PARM'INDX < 3 >>                   <<01165>>03680000
   END;      << TRACEPARMS >>                                  <<01165>>03682000
                                                               <<01165>>03684000
SUBROUTINE EXTRACTARG(NOTOPTIONAL);                            <<01165>>03686000
VALUE NOTOPTIONAL; LOGICAL NOTOPTIONAL;                        <<01165>>03688000
   BEGIN                                                       <<01165>>03690000
   << GETS ARGUMENT OF KEY WORD (IF ANY) >>                    <<01165>>03692000
   IF NEXTDELIM <> EQUALS THEN                                 <<01165>>03694000
      BEGIN    << EQUAL SIGN EXPECTED >>                       <<01165>>03696000
      @PARMPTR := @PARMPTR + PARMLEN;    << UPDATE FOR CEXIT >><<01165>>03698000
      CEXIT(CLNXPCTEQSIGN);                                    <<01165>>03700000
      END;                                                     <<01165>>03702000
   GETNEXTPARM;                                                <<01165>>03704000
   IF PARMLEN = 0 AND NOTOPTIONAL THEN CEXIT(CLNKEYVALNOTOPT); <<01165>>03706000
   END <<EXTRACTARG>>;                                         <<01165>>03708000
SUBROUTINE CHECKSTRINGSEQ;                                     <<01165>>03710000
   << PARMPTR POINTS TO "A,E,O,H" CHARACTER >>                 <<01165>>03712000
   << CHECKS ASCII STRINGS (LENGTHS AND DELIMITERS) >>         <<01165>>03714000
   BEGIN                                                       <<01165>>03716000
   NOTFINISHED := TRUE; STRINGLEN := 0;                        <<01165>>03718000
   LEN := LOC; LIST(LEN) := 0;                                 <<01165>>03720000
   LOC := LOC + 1;                                             <<01165>>03722000
   WHILE NOTFINISHED DO                                        <<01165>>03724000
      BEGIN                                                    <<01165>>03726000
      GETNEXTPARM;                                             <<01165>>03728000
      IF NEXTDELIM <> QUOTE THEN                               <<01165>>03730000
         BEGIN        << ERROR - NEEDED QUOTE >>               <<01165>>03732000
         @PARMPTR := @PARMPTR + PARMLEN;     << UPDATE FOR CEXIT >>     03734000
         CEXIT(CLN'XPCTQUOTE);                                 <<01165>>03736000
         END;                                                  <<01165>>03738000
      IF PARMLEN <> 0 THEN MOVESTRING;                         <<01165>>03740000
      GETNEXTPARM;                                             <<01165>>03742000
      << DOES THIS WORK ??? >>                                 <<01165>>03744000
      IF NEXTDELIM = QUOTE AND PARMLEN = 0 THEN                <<01165>>03746000
         BEGIN     << DOUBLE QUOTES >>                         <<01165>>03748000
         PARMLEN := 1;                                         <<01165>>03750000
         MOVESTRING;                                           <<01165>>03752000
         END                                                   <<01165>>03754000
       ELSE NOTFINISHED := FALSE;                              <<01165>>03756000
       END;                                                    <<01165>>03758000
    END;      << CHECKSTRINGSEQ >>                             <<01165>>03760000
                                                               <<01165>>03762000
SUBROUTINE CHECKDIGITSEQ;                                      <<01165>>03764000
<< CHECKS NUMERIC STRING (OCTAL OR HEX) FOR BOUNDS VIOLATION.           03766000
   CONVERTS TO DESIRED FORM.                                            03768000
>>                                                             <<01165>>03770000
   BEGIN                                                       <<01165>>03772000
   LOC := LOC + 1; STRINGLEN := 1;                             <<01165>>03774000
   DO BEGIN                                                    <<01165>>03776000
      GETNEXTPARM;                                             <<01165>>03778000
      IF NEXTDELIM <> COMMA AND NEXTDELIM <> RIGHTPAREN THEN   <<01165>>03780000
         BEGIN                                                 <<01165>>03782000
         @PARMPTR := @PARMPTR + PARMLEN; << UPDATE FOR CEXIT >><<01165>>03784000
         CEXIT(CLNBADELIMITER);                                <<01165>>03786000
         END;                                                  <<01165>>03788000
      IF PARMLEN = 0 THEN CEXIT(CLNKEYVALNOTOPT);              <<01165>>03790000
      IF DIGITYPE = OCTAL THEN                                 <<01165>>03792000
         BEGIN                                                 <<01165>>03794000
         IF (LEN := PARMLEN) > 3 THEN CEXIT(CLNPARM2LONG);     <<01165>>03796000
         I := -1; WHILE (I := I + 1) < LEN DO                  <<01165>>03798000
            IF PARMPTR(I) > %67 THEN CEXIT(CLNUNDEFKEYVAL);    <<01165>>03800000
         TOS := BINARY(PARMPTR,PARMLEN);                       <<01165>>03802000
         IF <> THEN CEXIT(CLNBADINT);                          <<01165>>03804000
         I := X := 0;                                          <<01165>>03806000
         DO BEGIN                                              <<01165>>03808000
            TOS := 10;                                         <<01165>>03810000
            ASSEMBLE(DIV);                                     <<01165>>03812000
            I := I + (TOS & LSL(X));                           <<01165>>03814000
            X := X + 3;                                        <<01165>>03816000
            DUPLICATE;                                         <<01165>>03818000
            END UNTIL TOS = 0;                                 <<01165>>03820000
         ASSEMBLE(DEL);                                        <<01165>>03822000
         IF NOT (0<=I<=%377) THEN CEXIT(CLNBNDSERR0'377);      <<01165>>03824000
         LIST(LOC) := I;                                       <<01165>>03826000
         END                                                   <<01165>>03828000
      ELSE                                                     <<01165>>03830000
         BEGIN      << DIGITYPE  IS HEX  >>                    <<01165>>03832000
         IF NOT (1<=PARMLEN<=2) THEN CEXIT(CLNPARM2LONG);      <<01165>>03834000
         IF (%60<=INTEGER(PARMPTR)<=%71) THEN   << IT'S 0-9 >> <<01165>>03836000
            TOS := PARMPTR - %60                               <<01165>>03838000
         ELSE IF (%101<=INTEGER(PARMPTR)<=%106) THEN << A-E >> <<01165>>03840000
              TOS := PARMPTR - %67                             <<01165>>03842000
         ELSE CEXIT(CLNUNDEFKEYVAL);                           <<01165>>03844000
         IF PARMLEN = 2 THEN                                   <<01165>>03846000
            BEGIN                                              <<01165>>03848000
            TOS := TOS & LSL(4);    << MULTIPLY DIGIT BY 16 >> <<01165>>03850000
            @PARMPTR := @PARMPTR + 1;<< MOVE TO SECOND DIGIT >><<01165>>03852000
            IF (%60<=INTEGER(PARMPTR)<=%71) THEN << IT'S 0-9 >><<01165>>03854000
               TOS := PARMPTR - %60                            <<01165>>03856000
            ELSE IF(%101<=INTEGER(PARMPTR)<=%106) THEN<< A-E >><<01165>>03858000
               TOS := PARMPTR - %67                            <<01165>>03860000
            ELSE CEXIT(CLNUNDEFKEYVAL);                        <<01165>>03862000
            END                                                <<01165>>03864000
         ELSE TOS := 0;                                        <<01165>>03866000
         LIST(LOC) := TOS + TOS;                               <<01165>>03868000
         END;                                                  <<01165>>03870000
      LOC := LOC + 1;                                          <<01165>>03872000
      END UNTIL (LISTLEN := LISTLEN + 1) > MAXIDSEQLEN OR      <<01165>>03874000
          NEXTDELIM = RIGHTPAREN;                              <<01165>>03876000
   IF NEXTDELIM <> RIGHTPAREN THEN CEXIT(CLN'XPCTPAREN);       <<01165>>03878000
   LIST(LOC - LISTLEN) := LISTLEN - 1;                         <<01165>>03880000
   GETNEXTPARM;                                                <<01165>>03882000
   END;      << CHECKDIGITSEQ >>                               <<01165>>03884000
                                                               <<01165>>03886000
SUBROUTINE CHECKSEQUENCE;                                      <<01165>>03888000
   BEGIN                                                       <<01165>>03890000
   IF PARMLEN = 0 THEN     <<MAYBE SPECIAL CHARACTER>>         <<01165>>03892000
      BEGIN                                                    <<01165>>03894000
      IF NEXTDELIM = QUOTE THEN                                <<01165>>03896000
         BEGIN     << QUOTED STRING >>                         <<01165>>03898000
         SEQTYPE := STRING;                                    <<01165>>03900000
         STRINGTYPE := ASCII;                                  <<01165>>03902000
         END                                                   <<01165>>03904000
      ELSE IF NEXTDELIM = LEFTPAREN THEN                       <<01165>>03906000
         BEGIN     << DIGIT STRING >>                          <<01165>>03908000
         SEQTYPE := DIGITS;                                    <<01165>>03910000
         DIGITYPE := OCTAL;                                    <<01165>>03912000
         END                                                   <<01165>>03914000
      ELSE CEXIT(CLN'XPCTQU'PAR);                              <<01165>>03916000
      END                                                      <<01165>>03918000
   ELSE IF PARMPTR = ALPHA AND PARMLEN = 1 THEN                <<01165>>03920000
      BEGIN     << ONE ALPHA CHARACTER >>                      <<01165>>03922000
      IF PARMPTR = "A" THEN                                    <<01165>>03924000
         BEGIN                                                 <<01165>>03926000
         SEQTYPE := STRING;                                    <<01165>>03928000
         STRINGTYPE := ASCII;                                  <<01165>>03930000
         END                                                   <<01165>>03932000
      ELSE IF PARMPTR = "E" THEN                               <<01165>>03934000
         BEGIN                                                 <<01165>>03936000
         SEQTYPE := STRING;                                    <<01165>>03938000
         STRINGTYPE := EBCDIC;                                 <<01165>>03940000
         END                                                   <<01165>>03942000
      ELSE IF PARMPTR = "O" THEN                               <<01165>>03944000
         BEGIN                                                 <<01165>>03946000
         SEQTYPE := DIGITS;                                    <<01165>>03948000
         DIGITYPE := OCTAL;                                    <<01165>>03950000
         END                                                   <<01165>>03952000
      ELSE IF PARMPTR = "H" THEN                               <<01165>>03954000
         BEGIN                                                 <<01165>>03956000
         SEQTYPE := DIGITS;                                    <<01165>>03958000
         DIGITYPE := HEX;                                      <<01165>>03960000
         END                                                   <<01165>>03962000
      ELSE CEXIT(CLN'XPCT1ALPHA);                              <<01165>>03964000
                                                               <<01165>>03966000
      << FIRST ALPHA CHARACTER OK >>                           <<01165>>03968000
      IF SEQTYPE = STRING AND NEXTDELIM <> QUOTE THEN          <<01165>>03970000
         CEXIT(CLN'XPCTQUOTE);                                 <<01165>>03972000
      IF SEQTYPE = DIGITS AND NEXTDELIM <> LEFTPAREN THEN      <<01165>>03974000
         CEXIT(CLN'XPCTPAREN);                                 <<01165>>03976000
        END       << END ONE ALPHA CHARACTER >>                <<01165>>03978000
     ELSE CEXIT(CLN'XPCT1ALPHA);                               <<01165>>03980000
     IF SEQTYPE = STRING THEN CHECKSTRINGSEQ                   <<01165>>03982000
     ELSE CHECKDIGITSEQ;                                       <<01165>>03984000
   END <<CHECKSEQUENCE>>;                                      <<01165>>03986000
                                                               <<01165>>03988000
SUBROUTINE PROCKEY;                                            <<01165>>03990000
   << PROCESS ALL KEY WORDS ALLOWED IN :CLINE >>               <<01165>>03992000
   BEGIN                                                       <<01165>>03994000
   TOS := FLAGS;                                               <<01165>>03996000
   WHILE GETNEXTPARM DO                                        <<01165>>03998000
      BEGIN                                                    <<01165>>04000000
      IF PARMLEN = 0 THEN CEXIT(CLNXPCTKEY);                   <<01165>>04002000
      ENTRYNUM := SEARCH(PARMPTR,PARMLEN,KEYLIST);             <<01165>>04004000
      CASE ENTRYNUM OF                                         <<01165>>04006000
         BEGIN                                                 <<01165>>04008000
                                                               <<01165>>04010000
         CEXIT(CLNXPCTKEY);                                    <<01165>>04012000
                                                               <<01165>>04014000
         BEGIN            << DEV >>                            <<01165>>04016000
         EXTRACTARG(1);                                        <<01165>>04018000
         IF (DEVLEN := PARMLEN) > 8 THEN CEXIT(CLNDEV2LONG);   <<01165>>04020000
          @DEV := @PARMPTR;                                    <<01165>>04022000
          ASSEMBLE(TSBC 15);                                   <<01165>>04024000
          END;                                                 <<01165>>04026000
                                                               <<01165>>04028000
         BEGIN          << MISC >>                             <<01165>>04030000
         EXTRACTARG(1);                                        <<01165>>04032000
         IF NEXTDELIM <> COMMA THEN CEXIT(CLN'XPCTCOMMA);      <<01165>>04034000
         LASTPARM'DONE := FALSE;     << MORE MISCARRAY VALUES YET >>    04036000
         @MISC := (@PARMPTR - 1)&LSR(1); LOC := 0;             <<01165>>04038000
         DO BEGIN                                              <<01165>>04040000
            TRYBINARYCONVERT(CLNUNDEFKEYVAL);                  <<01165>>04042000
            MISC(LOC) := BINARYDIGIT;                          <<01165>>04044000
            LOC := LOC + 1;                                    <<01165>>04046000
            IF NEXTDELIM = COMMA THEN GETNEXTPARM              <<01165>>04048000
            ELSE LASTPARM'DONE := TRUE;   << NO MORE MISCARRAY <<01165>>04050000
            END UNTIL LASTPARM'DONE;                           <<01165>>04052000
         TOS := LOC;     << CHECK FOR ODD NUMBER OF VALUES >>  <<01165>>04054000
         IF TOS THEN CEXIT(CLNXPCTKEYVAL);                     <<01165>>04056000
         MISCLEN := LOC;                                       <<01165>>04058000
         TOS := FLAGS2;                                        <<01165>>04060000
         ASSEMBLE(TSBC  0);                                    <<01165>>04062000
         FLAGS2 := TOS;                                        <<01165>>04064000
         END;                                                  <<01165>>04066000
                                                               <<01165>>04068000
         BEGIN          << BUFF >>                             <<01165>>04070000
         DUPLICATE;                                            <<01165>>04072000
         TOS:=TOS LAND %6;                                     <<01165>>04074000
         IF TOS <> 0 THEN CEXIT(CLNDUPKEY);                    <<01165>>04076000
         EXTRACTARG(0);                                        <<01165>>04078000
         IF PARMLEN <> 0 THEN                                  <<01165>>04080000
            BEGIN    << FIRST PARAMETER, NUMBUFFS, EXPECTED >> <<01165>>04082000
            TRYBINARYCONVERT(CLNUNDEFKEYVAL);                  <<01165>>04084000
            NUMBUFFERS := BINARYDIGIT;                         <<01165>>04086000
            ASSEMBLE(TSBC 14);                                 <<01165>>04088000
            END                                                <<01165>>04090000
         ELSE IF NEXTDELIM = SEMICOLON THEN CEXIT(CLNXPCTKEYVAL);       04092000
         IF NEXTDELIM = COMMA THEN                             <<01165>>04094000
            BEGIN   << SECOND PARAMETER, BUFFSIZE, EXPECTED >> <<01165>>04096000
            GETNEXTPARM;                                       <<01165>>04098000
            IF PARMLEN = 0 THEN CEXIT(CLNXPCTKEYVAL);          <<01165>>04100000
            TRYBINARYCONVERT(CLNUNDEFKEYVAL);                  <<01165>>04102000
            BUFFSIZE := BINARYDIGIT;                           <<01165>>04104000
            ASSEMBLE(TSBC 13);                                 <<01165>>04106000
            END;                                               <<01165>>04108000
         END;                                                  <<01165>>04110000
                                                               <<01165>>04112000
         BEGIN          << DIAL >>                             <<01165>>04114000
         EXTRACTARG(1);                                        <<01165>>04116000
         IF PARMLEN = 1 THEN                                   <<01165>>04118000
            BEGIN                                              <<01165>>04120000
            IF PARMPTR = "W" THEN TOS := 0                     <<01165>>04122000
            ELSE IF PARMPTR = "R" THEN TOS := 1                <<01165>>04124000
            ELSE CEXIT(CLN'DIALVAL);                           <<01165>>04126000
            END                                                <<01165>>04128000
         ELSE IF PARMLEN = 2 THEN                              <<01165>>04130000
            BEGIN                                              <<01165>>04132000
            IF PARMPTR = "RW" THEN TOS := 2                    <<01165>>04134000
            ELSE IF PARMPTR = "NO" THEN TOS := 3               <<01165>>04136000
            ELSE CEXIT(CLN'DIALVAL);                           <<01165>>04138000
            END                                                <<01165>>04140000
         ELSE CEXIT(CLN'DIALVAL);                              <<01165>>04142000
         AOPTIONS.DIALFLD := TOS;                              <<01165>>04144000
         ASSEMBLE(TSBC 12);                                    <<01165>>04146000
         END;                                                  <<01165>>04148000
                                                               <<01165>>04150000
         BEGIN          << PROTO >>                            <<01165>>04152000
         EXTRACTARG(1);                                        <<01165>>04154000
         IF PARMPTR = "BSC" THEN TOS := 1                      <<01165>>04156000
         ELSE IF PARMPTR = "MRJE" THEN TOS := 2                <<01165>>04158000
         ELSE IF PARMPTR = "HPDLC1" THEN TOS := 3              <<01165>>04160000
         ELSE                                                  <<01165>>04162000
            BEGIN       << PROTOCOL NUMBER SPECIFIED >>        <<01165>>04164000
            TRYBINARYCONVERT(CLN'PROTOVAL);                    <<01165>>04166000
            IF NOT (0 <=BINARYDIGIT <=PROTOMAX) THEN           <<01165>>04168000
               CEXIT(CLNBNDSERR0'377)                          <<01165>>04170000
            ELSE TOS:=BINARYDIGIT;                             <<01165>>04172000
            END;                                               <<01165>>04174000
         AOPTIONS.PROTOFLD := TOS;                             <<01165>>04176000
         ASSEMBLE(TSBC 11);                                    <<01165>>04178000
         END;                                                  <<01165>>04180000
                                                               <<01165>>04182000
          BEGIN          << CODE >>                            <<01165>>04184000
          EXTRACTARG(1);                                       <<01165>>04186000
          IF PARMPTR = "SENSE" THEN TOS := 1                   <<01165>>04188000
          ELSE IF PARMPTR = "ASCII" THEN TOS := 2              <<01165>>04190000
          ELSE IF PARMPTR = "EBCDIC" THEN TOS := 3             <<01165>>04192000
          ELSE                                                 <<01165>>04194000
             BEGIN    << CODE SPECIFIED BY NUMBER >>           <<01165>>04196000
             TRYBINARYCONVERT(CLN'CODEVAL);                    <<01165>>04198000
             IF NOT (0 <= BINARYDIGIT <= CODEMAX) THEN         <<01165>>04200000
                CEXIT(CLNBNDSERR0'63)                          <<01165>>04202000
             ELSE TOS:=BINARYDIGIT;                            <<01165>>04204000
             END;                                              <<01165>>04206000
         COPTIONS.CODEFLD := TOS;                              <<01165>>04208000
         ASSEMBLE(TSBC 10);                                    <<01165>>04210000
         END;                                                  <<01165>>04212000
                                                               <<01165>>04214000
         BEGIN          << DUAL >>                             <<01165>>04216000
         EXTRACTARG(1);                                        <<01165>>04218000
         IF NOT (3 <= PARMLEN <= 4) THEN CEXIT(CLN'DUALVAL);   <<01165>>04220000
         IF PARMPTR = "LOW" THEN TOS := 1                      <<01165>>04222000
         ELSE IF PARMPTR = "HIGH" THEN TOS := 2                <<01165>>04224000
         ELSE CEXIT(CLN'DUALVAL);                              <<01165>>04226000
         COPTIONS.DUALFLD := TOS;                              <<01165>>04228000
         ASSEMBLE(TSBC  9);                                    <<01165>>04230000
         END;                                                  <<01165>>04232000
                                                               <<01165>>04234000
         BEGIN          << LMODE >>                            <<01165>>04236000
         EXTRACTARG(1);                                        <<01165>>04238000
         IF PARMPTR = "PRI" THEN TOS := 1                      <<01165>>04240000
         ELSE IF PARMPTR = "SEC" THEN TOS := 2                 <<01165>>04242000
         ELSE IF PARMPTR = "MPCNT" THEN TOS := 3               <<01165>>04244000
         ELSE IF PARMPTR = "MPSEC" THEN TOS := 4               <<01165>>04246000
         ELSE IF PARMPTR = "DTE" THEN TOS := 5                 <<01165>>04248000
         ELSE IF PARMPTR = "DCE" THEN TOS := 6                 <<01165>>04250000
         ELSE                                                  <<01165>>04252000
            BEGIN      << LOCAL MODE NUMBER SPECIFIED >>       <<01165>>04254000
            TRYBINARYCONVERT(CLN'LMODEVAL);                    <<01165>>04256000
            IF NOT (0<= BINARYDIGIT <=LMODEMAX) THEN           <<01165>>04258000
               CEXIT(CLNBNDSERR0'15)                           <<01165>>04260000
            ELSE TOS:=BINARYDIGIT;                             <<01165>>04262000
            END;                                               <<01165>>04264000
         COPTIONS.LMODEFLD := TOS;                             <<01165>>04266000
         ASSEMBLE(TSBC  8);                                    <<01165>>04268000
         END;                                                  <<01165>>04270000
                                                               <<01165>>04272000
         BEGIN          << DRIVER >>                           <<01165>>04274000
         EXTRACTARG(1);                                        <<01165>>04276000
         IF (DRIVERLEN := PARMLEN) > 8 THEN CEXIT(CLNDRIVERNAM2LN);     04278000
         @DRIVER := @PARMPTR;                                  <<01165>>04280000
         ASSEMBLE(TSBC  7);                                    <<01165>>04282000
         END;                                                  <<01165>>04284000
                                                               <<01165>>04286000
         BEGIN          << SPEED >>                            <<01165>>04288000
         DUPLICATE;                                            <<01165>>04290000
         IF (TOS LAND %14000) <> 0 THEN CEXIT(CLNDUPKEY);      <<01165>>04292000
         EXTRACTARG(0);                                        <<01165>>04294000
         IF PARMLEN <> 0 THEN                                  <<01165>>04296000
            BEGIN    << FIRST PARM, INSPEED, EXPECTED >>       <<01165>>04298000
            TOS := DBINARY(PARMPTR,PARMLEN);                   <<01165>>04300000
            IF <> THEN CEXIT(CLNBADINT);                       <<01165>>04302000
            INSPEED := TOS;                                    <<01165>>04304000
            ASSEMBLE(TSBC 4);                                  <<01165>>04306000
            END                                                <<01165>>04308000
         ELSE IF NEXTDELIM = SEMICOLON THEN CEXIT(CLNXPCTKEYVAL);       04310000
         IF NEXTDELIM = COMMA THEN                             <<01165>>04312000
            BEGIN  << SECOND PARAMETER, OUTSPEED, EXPECTED >>  <<01165>>04314000
            GETNEXTPARM;                                       <<01165>>04316000
            IF PARMLEN = 0 THEN CEXIT(CLNXPCTKEYVAL);          <<01165>>04318000
            TOS := DBINARY(PARMPTR,PARMLEN);                   <<01165>>04320000
            IF <> THEN CEXIT(CLNBADINT);                       <<01165>>04322000
            OUTSPEED := TOS;                                   <<01165>>04324000
            ASSEMBLE(TSBC 3);                                  <<01165>>04326000
            END;                                               <<01165>>04328000
          END;                                                 <<01165>>04330000
                                                               <<01165>>04332000
         BEGIN          << DOPTIONS >>                         <<01165>>04334000
         EXTRACTARG(1);                                        <<01165>>04336000
         TRYBINARYCONVERT(CLNUNDEFKEYVAL);                     <<01165>>04338000
         DOPTIONS := BINARYDIGIT;                              <<01165>>04340000
         ASSEMBLE(TSBC 2);                                     <<01165>>04342000
         END;                                                  <<01165>>04344000
                                                               <<01165>>04346000
         BEGIN          << TRACE >>                            <<01165>>04348000
         COPTIONS.TRACESPEC := TRUE;                           <<01165>>04350000
         IF NEXTDELIM = EQUALS THEN                            <<01165>>04352000
            BEGIN                                              <<01165>>04354000
            TRACEPARMS;                                        <<01165>>04356000
            ASSEMBLE(TSBC  0);                                 <<01165>>04358000
            END;                                               <<01165>>04360000
         ASSEMBLE(TSBC  1);                                    <<01165>>04362000
         END;    << END OF "TRACE" SPECIFIED >>                <<01165>>04364000
                                                               <<01165>>04366000
         BEGIN          << NOTRACE >>                          <<01165>>04368000
         ASSEMBLE(TSBC  1);                                    <<01165>>04370000
         END;                                                  <<01165>>04372000
                                                               <<01165>>04374000
         BEGIN          << NOID >>                             <<01165>>04376000
         COPTIONS.INHIBIDSEQ := TRUE;                          <<01165>>04378000
         TOS := FLAGS1;                                        <<01165>>04380000
         ASSEMBLE(TSBC 15);                                    <<01165>>04382000
         FLAGS1 := TOS;                                        <<01165>>04384000
         END;                                                  <<01165>>04386000
                                                               <<01165>>04388000
         BEGIN      << TIMEOUTS >>                             <<01165>>04390000
         TOS := FLAGS1;                                        <<01165>>04392000
         ASSEMBLE(TSBC 14);                                    <<01165>>04394000
         COPTIONS.INHIBTOUT := 0;                              <<01165>>04396000
         FLAGS1 := TOS;                                        <<01165>>04398000
         END;                                                  <<01165>>04400000
                                                               <<01165>>04402000
         BEGIN      << NO TIME OUTS >>                         <<01165>>04404000
         TOS := FLAGS1;                                        <<01165>>04406000
         ASSEMBLE(TSBC 14);                                    <<01165>>04408000
         COPTIONS.INHIBTOUT := 1;                              <<01165>>04410000
         FLAGS1 := TOS;                                        <<01165>>04412000
         END;                                                  <<01165>>04414000
                                                               <<01165>>04416000
         BEGIN          << ID >>                               <<01165>>04418000
         TOS := FLAGS1;                                        <<01165>>04420000
         ASSEMBLE(TSBC 15);                                    <<01165>>04422000
         FLAGS1 := TOS;                                        <<01165>>04424000
         END;                                                  <<01165>>04426000
                                                               <<01165>>04428000
         BEGIN          << LOCID >>                            <<01165>>04430000
         EXTRACTARG(0);                                        <<01165>>04432000
         @LIST := @LOCID := @PARMPTR - 1; LOC := 0;            <<01165>>04434000
         CHECKSEQUENCE;                                        <<01165>>04436000
         LOCIDLEN := STRINGLEN + 1;                            <<01165>>04438000
         TOS := FLAGS2;                                        <<01165>>04440000
         ASSEMBLE(TSBC  6);                                    <<01165>>04442000
         FLAGS2 := TOS;                                        <<01165>>04444000
         END;                                                  <<01165>>04446000
                                                               <<01165>>04448000
         BEGIN          << REMID >>                            <<01165>>04450000
         EXTRACTARG(0);                                        <<01165>>04452000
         @LIST := @REMID := @PARMPTR - 1; LOC := 1;            <<01165>>04454000
   SEQNUM := LISTLEN := 0;                                     <<01165>>04456000
   LASTPARM'DONE := FALSE;   << HAVEN'T COMPLETED ALL REMOTE IDS >>     04458000
   DO BEGIN                                                    <<01165>>04460000
      SEQNUM := SEQNUM + 1;                                    <<01165>>04462000
      CHECKSEQUENCE;                                           <<01165>>04464000
      LISTLEN := LISTLEN + STRINGLEN +1;                       <<01165>>04466000
      IF NEXTDELIM = COMMA THEN GETNEXTPARM                    <<01165>>04468000
      ELSE LASTPARM'DONE := TRUE;<< NO MORE REMOTE IDS LEFT >> <<01165>>04470000
      END UNTIL LASTPARM'DONE;                                 <<01165>>04472000
         REMID := SEQNUM;                                      <<01165>>04474000
         REMIDLEN := LISTLEN + 1;                              <<01165>>04476000
         TOS := FLAGS2;                                        <<01165>>04478000
         ASSEMBLE(TSBC  5);                                    <<01165>>04480000
         FLAGS2 := TOS;                                        <<01165>>04482000
         END;                                                  <<01165>>04484000
                                                               <<01165>>04486000
         BEGIN          << POLLIST >>                          <<01165>>04488000
         END;                                                  <<01165>>04490000
                                                               <<01165>>04492000
         BEGIN          << PHLIST >>                           <<01165>>04494000
         EXTRACTARG(1);                                        <<01165>>04496000
         LASTPARM'DONE := FALSE;  << MORE PHONE NUMBERS YET >> <<01165>>04498000
         @PHLIST := @PARMPTR - 1; LOC := 0;                    <<01165>>04500000
         DO BEGIN                                              <<01165>>04502000
            IF PARMLEN > MAXPHONELEN THEN CEXIT(CLNPARM2LONG); <<01165>>04504000
            PHLIST(LOC) := PARMLEN;                            <<01165>>04506000
            MOVE PHLIST(LOC+1) := PARMPTR, (PARMLEN);          <<01165>>04508000
            LOC := LOC + PARMLEN + 1;                          <<01165>>04510000
            PHLISTNUM := PHLISTNUM + 1;                        <<01165>>04512000
            IF NEXTDELIM = COMMA THEN GETNEXTPARM              <<01165>>04514000
            ELSE LASTPARM'DONE := TRUE;                        <<01165>>04516000
            END UNTIL LASTPARM'DONE;                           <<01165>>04518000
         PHLISTLEN := LOC;                                     <<01165>>04520000
         TOS := FLAGS2;                                        <<01165>>04522000
         ASSEMBLE(TSBC  1);                                    <<01165>>04524000
         FLAGS2 := TOS;                                        <<01165>>04526000
         END;                                                  <<01165>>04528000
                                                               <<01165>>04530000
         BEGIN      << DOWN FILE NAME >>                       <<01165>>04532000
         END;                                                  <<01165>>04534000
                                                               <<01165>>04536000
         BEGIN      << SUPLIST >>                              <<01165>>04538000
         END;                                                  <<01165>>04540000
                                                               <<01165>>04542000
      END <<CASE>>;                                            <<01165>>04544000
     END;    << END OF GETNEXTPARM = TRUE >>                   <<01165>>04546000
      << NO MORE PARAMETERS TO PROCESS >>                      <<01165>>04548000
     FLAGS := TOS;                                             <<01165>>04550000
     IF NEXTDELIM <> CR THEN CEXIT(CLNBADELIMITER);            <<01165>>04552000
END <<PROCKEY>>;                                               <<01165>>04554000
                                                               <<01165>>04556000
         << ****   MAIN OF CXCLINE   **** >>                   <<01165>>04558000
     MOVE KEYLIST:=PKEYLIST,(PKEYLISTL);                       <<01165>>04560000
     MOVE DELIMITERS:=PDELIMITERS,(PDELIMITERSL);              <<01165>>04562000
     DELIMITERS(PDELIMITERSL) := CARRIAGERETURN;               <<01165>>04564000
     PARMNUM := 0;                                             <<01165>>04566000
     MYCOMMAND(PARMSP,DELIMITERS,MAXPARMS,NUMPARMS,PARMS);     <<01165>>04568000
     IF <> THEN MOREPARMS := TRUE;  <<MORE THAN MAXPARM PARAMETERS>>    04570000
     IF NUMPARMS = 0 THEN CEXIT(CLNREQLINE);                   <<01165>>04572000
     GETNEXTPARM;                                              <<01165>>04574000
     CHECKNAME(ERRNAME);                                       <<01165>>04576000
     N1 := " ";     <<FOR JOBTABLE PROCEDURES>>                <<01165>>04578000
     @FORMDES := LPARM;                                        <<01165>>04580000
     IF NEXTDELIM = EQUALS THEN                                <<01165>>04582000
        CHECKBACKREF;    << BACK REFERENCE INDICATED >>        <<01165>>04584000
     PROCKEY;         << PROCESS ALL KEY WORDS >>              <<01165>>04586000
     TOS := 0;                                                 <<01165>>04588000
     PUSH(S); DUPLICATE;                                       <<01165>>04590000
     @WFENTRY := TOS;                                          <<01165>>04592000
     @FENTRY := TOS & LSL(1);                                  <<01165>>04594000
     TOS := MINENTRYSIZE2 +                                    <<01165>>04596000
            (LOCIDLEN + 1) & LSR(1) +                          <<01165>>04598000
            (REMIDLEN + 1) & LSR(1) +                          <<01165>>04600000
            (SUPLISTLEN + 1) & LSR(1) +                        <<01165>>04602000
            (PHLISTLEN + 2) & LSR(1) +                         <<01165>>04604000
            (POLLISTLEN + 1) +                                 <<01165>>04606000
            (MISCLEN + 1);                                     <<01165>>04608000
     ASSEMBLE(ADDS 0);                                         <<01165>>04610000
     WFENTRY := FLAGS;                                         <<01165>>04612000
     WFENTRY(1) := FLAGS1;                                     <<01165>>04614000
     WFENTRY(2) := DEVLEN;                                     <<01165>>04616000
     IF DEVLEN <> 0 THEN MOVE FENTRY(14) := DEV , (DEVLEN);    <<01165>>04618000
     WFENTRY(11) := FLAGS2;                                    <<01165>>04620000
     WFENTRY(12) := DRIVERLEN & LSL(8);                        <<01165>>04622000
     IF DRIVERLEN <> 0 THEN MOVE FENTRY(26) := DRIVER , (DRIVERLEN);    04624000
     WFENTRY(17) := STARTOFPTRS;     <<LEQLISTPRT>>;           <<01165>>04626000
     WFENTRY(X := X + 1) := COPTIONS;                          <<01165>>04628000
     WFENTRY(X := X + 1) := AOPTIONS;                          <<01165>>04630000
     WFENTRY(X := X + 1) := DOPTIONS;                          <<01165>>04632000
     WFENTRY(X := X + 1) := NUMBUFFERS;                        <<01165>>04634000
     WFENTRY(X := X + 1) := BUFFSIZE;                          <<01165>>04636000
     TOS := OUTSPEED; TOS := INSPEED;                          <<01165>>04638000
     ASSEMBLE(XCH);                                            <<01165>>04640000
     WFENTRY(X := X + 1) := TOS;                               <<01165>>04642000
     WFENTRY(X := X + 1) := TOS;                               <<01165>>04644000
     ASSEMBLE(XCH);                                            <<01165>>04646000
     WFENTRY(X := X + 1) := TOS;                               <<01165>>04648000
     WFENTRY(X := X + 1) := TOS;                               <<01165>>04650000
     WFENTRY(X := X + 1) := 0;    << NOT CURRENTLY USED >>     <<01165>>04652000
     WFENTRY(X := X + 1) := 0;   << NOT CURRENTLY USED >>      <<01165>>04654000
     WFENTRY(X := X + 1) := CTRACEINFO;                        <<01165>>04656000
     LOC := STARTOFLISTS & LSL(1);                             <<01165>>04658000
     IF LOCIDLEN <> 0 THEN                                     <<01165>>04660000
        BEGIN                                                  <<01165>>04662000
        MOVE FENTRY(LOC) := LOCID , (LOCIDLEN);                <<01165>>04664000
        WFENTRY(LOCIDPTR) := LOC & LSR(1);                     <<01165>>04666000
        LOC := (LOC + LOCIDLEN + 1) & LSR(1) & LSL(1);         <<01165>>04668000
        END                                                    <<01165>>04670000
     ELSE WFENTRY(LOCIDPTR) := 0;                              <<01165>>04672000
     IF REMIDLEN <> 0 THEN                                     <<01165>>04674000
        BEGIN                                                  <<01165>>04676000
        MOVE FENTRY(LOC) := REMID , (REMIDLEN);                <<01165>>04678000
        WFENTRY(REMIDPTR) := LOC & LSR(1);                     <<01165>>04680000
        LOC := (LOC + REMIDLEN + 1) & LSR(1) & LSL(1);         <<01165>>04682000
        END                                                    <<01165>>04684000
     ELSE WFENTRY(REMIDPTR) := 0;                              <<01165>>04686000
     IF SUPLISTLEN <> 0 THEN                                   <<01165>>04688000
        BEGIN                                                  <<01165>>04690000
        MOVE FENTRY(LOC) := SUPLIST , (SUPLISTLEN);            <<01165>>04692000
        WFENTRY(SUPLISTPTR) := LOC & LSR(1);                   <<01165>>04694000
        LOC := (LOC + SUPLISTLEN + 1) & LSR(1) & LSL(1);       <<01165>>04696000
        END                                                    <<01165>>04698000
     ELSE WFENTRY(SUPLISTPTR) := 0;                            <<01165>>04700000
     IF PHLISTLEN <> 0 THEN                                    <<01165>>04702000
        BEGIN                                                  <<01165>>04704000
        MOVE FENTRY(LOC+1) := PHLIST , (PHLISTLEN);            <<01165>>04706000
        FENTRY(LOC) := PHLISTNUM;                              <<01165>>04708000
        WFENTRY(PHLISTPTR) := LOC & LSR(1);                    <<01165>>04710000
        LOC := (LOC + PHLISTLEN + 2) & LSR(1) & LSL(1);        <<01165>>04712000
        END                                                    <<01165>>04714000
     ELSE WFENTRY(PHLISTPTR) := 0;                             <<01165>>04716000
     LOC := LOC & LSR(1);     << FOR WORD ARRAYS >>            <<01165>>04718000
     IF POLLISTLEN <> 0 THEN                                   <<01165>>04720000
        BEGIN                                                  <<01165>>04722000
        MOVE WFENTRY(LOC+1) := POLLIST , (POLLISTLEN);         <<01165>>04724000
        WFENTRY(LOC) := POLLISTLEN;                            <<01165>>04726000
        WFENTRY(POLLISTPTR) := LOC;                            <<01165>>04728000
        LOC := LOC + POLLISTLEN + 1;                           <<01165>>04730000
        END                                                    <<01165>>04732000
     ELSE WFENTRY(POLLISTPTR) := 0;                            <<01165>>04734000
     IF MISCLEN <> 0 THEN                                      <<01165>>04736000
        BEGIN                                                  <<01165>>04738000
        MOVE WFENTRY(LOC+1) := MISC , (MISCLEN);               <<01165>>04740000
        WFENTRY(LOC) := MISCLEN;                               <<01165>>04742000
        WFENTRY(MISCPTR) := LOC;                               <<01165>>04744000
        LOC := LOC + MISCLEN + 1;                              <<01165>>04746000
        END                                                    <<01165>>04748000
     ELSE WFENTRY(MISCPTR) := 0;                               <<01165>>04750000
     TOS := ADDJTENTRY(FORMDES,N1,N2,-4,LOC,WFENTRY);          <<01165>>04752000
     IF TOS <> 0 THEN CIERR(ERRNUM := ERRCTABFULL);            <<01165>>04754000
     RETURN;                                                   <<01165>>04756000
END <<CXCLINE>>;                                                        04758000
$PAGE "FILE MANAGEMENT COMMAND EXECUTORS--RESET,SAVE,PURGE,RENAME"      04760000
                                                               <<04.KM>>04762000
                                                               <<04.KM>>04764000
$CONTROL  SEGMENT=CISYSMGR                                     <<04.KM>>04766000
<<********************************************************************>>04768000
<< I M P L I C I T M N T >>                                    <<04.KM>>04770000
                                                               <<04.KM>>04772000
LOGICAL PROCEDURE IMPLICITMNT(GROUP,ACCT,MOUNTDST,PV'ERROR);   <<04.KM>>04774000
  ARRAY GROUP,ACCT;                                            <<04.KM>>04776000
  INTEGER MOUNTDST,PV'ERROR;                                   <<04.KM>>04778000
  OPTION PRIVILEGED,UNCALLABLE;                                <<04.KM>>04780000
BEGIN                                                          <<04.KM>>04782000
  COMMENT:                                                     <<04.KM>>04784000
                                                               <<04.KM>>04786000
    IMP-MOUNT DST:                                             <<04.KM>>04788000
                                                               <<04.KM>>04790000
    *********************                                      <<04.KM>>04792000
    * DSTLEN          --+-------+                              <<04.KM>>04794000
    * DSTINFOLEN      --+-----+ :                              <<04.KM>>04796000
    * DSTENTLEN         *     : :                              <<04.KM>>04798000
    * DSTENTLOC       --+---+ : :                              <<04.KM>>04800000
    * DSTENTCNT         *   : : :                              <<04.KM>>04802000
    * DSTERRCNT         *   : : :                              <<04.KM>>04804000
    * DSTMAXLEN         *   : : :                              <<04.KM>>04806000
    *         :         *   : : :                              <<04.KM>>04808000
    *===================*   : : :                              <<04.KM>>04810000
    *         :         * <-+-+ :  (FIRST AVAIL ENTRY)         <<04.KM>>04812000
    *-------------------*   :   :                              <<04.KM>>04814000
    * DSTENTERR         *   :   :                              <<04.KM>>04816000
    * DSTENTPVINFO      *   :   :                              <<04.KM>>04818000
    * DSTENTGRP  (4WDS) *   :   :                              <<04.KM>>04820000
    * DSTENTACCT (4WDS) *   :   :                              <<04.KM>>04822000
    *         :         *   :   :                              <<04.KM>>04824000
    *-------------------*   :   :                              <<04.KM>>04826000
    *         :         * <-+   :  (NEXT AVAIL ENTRY)          <<04.KM>>04828000
    *===================*       :                              <<04.KM>>04830000
    *         :         * <-----+  (AVAIL DST SPACE)           <<04.KM>>04832000
    *********************                                      <<04.KM>>04834000
                                                               <<04.KM>>04836000
                                                               <<04.KM>>04838000
    PROCEDURE IMPLICITLY MOUNTS HOME-VOL-SET OF SPECIFIED      <<04.KM>>04840000
    GROUP/ACCT.  GROUP/ACCT AND MOUNT STATUS MAY BE RECORDED IN<<04.KM>>04842000
    SPCEIFIED DATA-SEG FOR SUBSEQUENT IMPLICIT DISMOUNT.  "DB" <<04.KM>>04844000
    MUST BE POINTING TO THE STACK.                             <<04.KM>>04846000
                                                               <<04.KM>>04848000
    GROUP=    NAME OF HOME-VOL-SET GROUP                       <<04.KM>>04850000
                                                               <<04.KM>>04852000
    ACCT=     NAME OF HOME-VOL-SET ACCT                        <<04.KM>>04854000
                                                               <<04.KM>>04856000
    MOUNTDST= DST# OF DATA-SEG IN WHICH WE TRACK HOME-VOL-SETS <<04.KM>>04858000
              IMPLICITLY MOUNTED AND ERRORS ENCOUNTERED.  ENTRY<<04.KM>>04860000
              VALUES ARE:                                      <<04.KM>>04862000
                -1= DON'T USE DATA-SEG                         <<04.KM>>04864000
                 0= ALLOCATE DATA-SEG -- "MOUNTDST" IS NEW DST#<<04.KM>>04866000
                    ON EXIT                                    <<04.KM>>04868000
                >0= DST# OF PREVIOUSLY ALLOCATED DATA-SEG      <<04.KM>>04870000
                                                               <<04.KM>>04872000
    PV'ERROR= DEPENDS ON "IMPLICITMNT", VIZ:                   <<04.KM>>04874000
                TRUE=  "PV'ERROR" IS PVINFO FROM MOUNT         <<04.KM>>04876000
                       INTRINSIC                               <<04.KM>>04878000
                FALSE= "PV'ERROR" IS AN ERROR CODE.            <<04.KM>>04880000
              ERROR CODES ARE:                                 <<04.KM>>04882000
                <0= MOUNT ERROR (IFF "MOUNTDST" IS -1)         <<04.KM>>04884000
                 0= NO DATA-SEG ERROR -- MOUNT ERROR RECORDED  <<04.KM>>04886000
                    IN DATA-SEG                                <<04.KM>>04888000
                 1= OUT OF DST'S -- NO DATA-SEG ALLOCATED & NO <<04.KM>>04890000
                    MOUNT ATTEMPTED                            <<04.KM>>04892000
                 2= OUT OF VDS -- NO DATA-SEG ALLOCATED & NO   <<04.KM>>04894000
                    MOUNT ATTEMPTED                            <<04.KM>>04896000
                 3= OUT OF SPACE IN DATA-SEG -- NO MOUNT       <<04.KM>>04898000
                    ATTEMPTED                                  <<04.KM>>04900000
                 4= SYSTEM ERROR                               <<04.KM>>04902000
                                                               <<04.KM>>04904000
    IMPLICITMNT= TRUE:  MOUNT SUCCESSFUL                       <<04.KM>>04906000
               = FALSE: MOUNT UNSUCCESSFUL.  IF "PV'ERROR" IS  <<04.KM>>04908000
                        ZERO, MOUNT ERROR IS RECORDED IN       <<04.KM>>04910000
                        DATA-SEG                               <<04.KM>>04912000
                                                               <<04.KM>>04914000
    "IMPLICITMNT" SHOULD BE CALLED DURING A SYSTEM DIRECTORY   <<04.KM>>04916000
    FILE SEARCH WHEN WE WANT TO BRANCH OFF TO A PV DIRECTORY.  <<04.KM>>04918000
    (NOTE THAT CALLER IS RESPONSIBLE FOR DETERMINING THAT GROUP<<04.KM>>04920000
    RESIDES ON A VOL SET.)  WE BIND VOL SET TO GROUP.  THUS,   <<04.KM>>04922000
    CALLER INITIATES THE PV DIRECTORY SEARCH BY "REDOING" THE  <<04.KM>>04924000
    GROUP ENTRY.  IF "IMPLICITMNT" RETURNS FALSE, IT IS NOT    <<04.KM>>04926000
    NECESSARY TO "REVISIT" GROUP ENTRY.                        <<04.KM>>04928000
                                                               <<04.KM>>04930000
    IMPLICITLY MOUNTING HOME-VOL-SET PREVENTS PHYSICAL DISMOUNT<<04.KM>>04932000
    OF VOL SET DURING THE REMAINDER OF THE FILE SEARCH.  WE DO <<04.KM>>04934000
    THIS CONDITIONALLY SO THAT WE CANNOT CAUSE A PHYSICAL      <<04.KM>>04936000
    MOUNT.  THAT IS, OUR MOUNT WILL SUCCEED IFF THE VOL SET IS <<04.KM>>04938000
    ALREADY MOUNTED BY SOME USER (WITH UV CAP).  THUS, CURRENT <<04.KM>>04940000
    USER NEED NOT HAVE UV-CAP FOR FILE SEARCH SINCE HE CANNOT  <<04.KM>>04942000
    TIE UP PV RESOURCE (THEORETICALLY).                        <<04.KM>>04944000
    ;                                                          <<04.KM>>04946000
                                                               <<04.KM>>04948000
  <<**************************>>                               <<04.KM>>04950000
  <<  LOCAL "DST" STRUCTURES  >>                               <<04.KM>>04952000
  <<**************************>>                               <<04.KM>>04954000
                                                               <<04.KM>>04956000
  EQUATE  DSTFUDGE=   4,               <<KLUDGE, "EXPANDDST">> <<04.KM>>04958000
          PAGESIZE=   64,              <<EXPANSION UNIT>>      <<04.KM>>04960000
          SEGSIZE=    4000,            <<DATA-SEG SIZE>>       <<04.KM>>04962000
          INFOSIZE=   16;                                      <<04.KM>>04964000
                                                               <<04.KM>>04966000
  INTEGER ARRAY IMPINFO(0:INFOSIZE-1)= Q;                      <<04.KM>>04968000
  INTEGER IMPLEN=     IMPINFO;                                 <<04.KM>>04970000
  EQUATE  IMPINFOLEN= INFOSIZE,                                <<04.KM>>04972000
          IMPENTLEN=  16;                                      <<04.KM>>04974000
  INTEGER IMPENTLOC=  IMPINFO+3,                               <<04.KM>>04976000
          IMPENTCNT=  IMPENTLOC+1,                             <<04.KM>>04978000
          IMPERRCNT=  IMPENTCNT+1;                             <<04.KM>>04980000
  EQUATE  IMPMAXLEN=  (SEGSIZE+PAGESIZE-1)/PAGESIZE*PAGESIZE;  <<04.KM>>04982000
                                                               <<04.KM>>04984000
  INTEGER ARRAY ENTINFO(0:IMPENTLEN-1)= Q;                     <<04.KM>>04986000
  INTEGER ENTERR=           ENTINFO,                           <<04.KM>>04988000
          ENTPVINFO=        ENTERR+1;                          <<04.KM>>04990000
  INTEGER ARRAY ENTNAME(*)= ENTPVINFO+1;                       <<04.KM>>04992000
                                                               <<04.KM>>04994000
  <<******************>>                                       <<04.KM>>04996000
  <<  DST STRUCTURES  >>                                       <<04.KM>>04998000
  <<******************>>                                       <<04.KM>>05000000
                                                               <<04.KM>>05002000
  EQUATE  DSTINFO=    0;                                       << I.A >>05004000
  INTEGER DSTENTINFO;                                          <<04.KM>>05006000
                                                               <<04.KM>>05008000
  << ALLOCATION VALUES >>                                      <<04.KM>>05010000
                                                               <<04.KM>>05012000
  EQUATE  INCALLOC=    (IMPENTLEN+PAGESIZE-1)/PAGESIZE *       <<04.KM>>05014000
                         PAGESIZE,                             <<04.KM>>05016000
          MAXALLOC=    IMPMAXLEN+DSTFUDGE;                     <<04.KM>>05018000
  DEFINE  MINALLOC=    (INCALLOC-INITALLOC) #;                 <<04.KM>>05020000
  INTEGER INITALLOC;                                           <<04.KM>>05022000
  ARRAY   INITINFO(*)= PB:=                                    <<04.KM>>05024000
    0,IMPINFOLEN,IMPENTLEN,IMPINFOLEN,0,0,IMPMAXLEN;           <<04.KM>>05026000
                                                               <<04.KM>>05028000
  <<**************************>>                               <<04.KM>>05030000
  <<  OTHER LOCAL STRUCTURES  >>                               <<04.KM>>05032000
  <<**************************>>                               <<04.KM>>05034000
                                                               <<04.KM>>05036000
  EQUATE NOMOUNT= 0,                                           <<04.KM>>05038000
         NODST=   IM'MNTERR-IM'NODST,                          <<04.KM>>05040000
         NOVDS=   IM'MNTERR-IM'NOVDS,                          <<04.KM>>05042000
         NOSPACE= IM'MNTERR-IM'NOSPACE,                        <<04.KM>>05044000
         SYSERR=  IM'MNTERR-IM'SYSERR;                         <<04.KM>>05046000
                                                               <<04.KM>>05048000
  EQUATE CONDMOUNT'BIND= -3,                                   <<04.KM>>05050000
         ANYGEN=         -1;                                   <<04.KM>>05052000
  BYTE ARRAY HOMEVS(0:7);                                      <<04.KM>>05054000
  INTEGER REQ'ERROR:= CONDMOUNT'BIND;                          <<04.KM>>05056000
  INTEGER POINTER PS0= S-0;                                    <<04.KM>>05058000
                                                               <<04.KM>>05060000
  ARRAY ZEROES(*)=PB:= IMPENTLEN(0);                           <<04.KM>>05062000
  INTRINSIC GETDSEG,FREEDSEG;                                  <<04.KM>>05064000
  INTEGER PROCEDURE ALTDSEGSIZE(DST,INCSIZE);                  <<04.KM>>05066000
    VALUE DST,INCSIZE; INTEGER DST,INCSIZE; OPTION EXTERNAL;   <<04.KM>>05068000
                                                               <<04.KM>>05070000
  SUBROUTINE DEF'MOVEFROMDSEG;                                 <<04.KM>>05072000
  SUBROUTINE DEF'MOVETODSEG;                                   <<04.KM>>05074000
                                                               <<04.KM>>05076000
                                                               <<04.KM>>05078000
  <<****************>>                                         <<04.KM>>05080000
  << SUBROUTINE MIN >>                                         <<04.KM>>05082000
  <<****************>>                                         <<04.KM>>05084000
                                                               <<04.KM>>05086000
  INTEGER SUBROUTINE MIN(I,J); VALUE I,J; INTEGER I,J;         <<04.KM>>05088000
  BEGIN                                                        <<04.KM>>05090000
    MIN:=IF I<=J THEN I ELSE J;                                <<04.KM>>05092000
  END <<SUBROUTINE MIN>>;                                      <<04.KM>>05094000
                                                               <<04.KM>>05096000
                                                               <<04.KM>>05098000
  <<************************>>                                 <<04.KM>>05100000
  << SUBROUTINE ALLOCATEDST >>                                 <<04.KM>>05102000
  <<************************>>                                 <<04.KM>>05104000
                                                               <<04.KM>>05106000
  LOGICAL SUBROUTINE ALLOCATEDST;                              <<04.KM>>05108000
  BEGIN                                                        <<04.KM>>05110000
    COMMENT:                                                   <<04.KM>>05112000
      ALLOCATEDST= TRUE:  DATA-SEG ALLOCATED                   <<04.KM>>05114000
                   FALSE: COULD NOT ALLOCATE DATA-SEG.         <<04.KM>>05116000
                          "PV'ERROR" IS SET TO APPROPRIATE     <<04.KM>>05118000
                          VALUE.                               <<04.KM>>05120000
                                                               <<04.KM>>05122000
      WE USE (CALLABLE) "GETDSEG" HERE SO THAT DATA-SEG WILL BE<<04.KM>>05124000
      RELEASED AUTOMATICALLY IF PROCESS TERMINATES ABNORMALLY  <<04.KM>>05126000
      (HIGHLY UNEXPECTED!).  CONSEQUENTLY, WE MUST DECREASE    <<04.KM>>05128000
      SIZE OF DATA-SEG AFTER ALLOCATION;                       <<04.KM>>05130000
                                                               <<04.KM>>05132000
    ALLOCATEDST:=TRUE;                                         <<04.KM>>05134000
    INITALLOC:=-MAXALLOC;                                      <<04.KM>>05136000
    GETDSEG(MOUNTDST,INITALLOC,0);                             <<04.KM>>05138000
    IF <> THEN                                                 <<04.KM>>05140000
      BEGIN                                                    <<04.KM>>05142000
      PV'ERROR:=IF > OR MOUNTDST=%2000 THEN SYSERR             <<04.KM>>05144000
                ELSE IF MOUNTDST=%2001 THEN NODST              <<04.KM>>05146000
                ELSE NOVDS;                                    <<04.KM>>05148000
      ALLOCATEDST:=MOUNTDST:=0;                                <<04.KM>>05150000
      END                                                      <<04.KM>>05152000
    ELSE                                                       <<04.KM>>05154000
      BEGIN                                                    <<04.KM>>05156000
      MOVE IMPINFO:=INITINFO,(IMPINFOLEN);                     <<04.KM>>05158000
      DO IMPLEN:=ALTDSEGSIZE(MOUNTDST,MINALLOC) UNTIL >=;      <<04.KM>>05160000
      IF > THEN                                                <<04.KM>>05162000
        BEGIN                                                  <<04.KM>>05164000
        PV'ERROR:=SYSERR;                                      <<04.KM>>05166000
        FREEDSEG(MOUNTDST,0);                                  <<04.KM>>05168000
        ALLOCATEDST:=MOUNTDST:=0;                              <<04.KM>>05170000
        END;                                                   <<04.KM>>05172000
      END;                                                     <<04.KM>>05174000
  END <<SUBROUTINE ALLOCATEDST>>;                              <<04.KM>>05176000
                                                               <<04.KM>>05178000
                                                               <<04.KM>>05180000
  <<**********************>>                                   <<04.KM>>05182000
  << SUBROUTINE EXPANDDST >>                                   <<04.KM>>05184000
  <<**********************>>                                   <<04.KM>>05186000
                                                               <<04.KM>>05188000
  LOGICAL SUBROUTINE EXPANDDST;                                <<04.KM>>05190000
  BEGIN                                                        <<04.KM>>05192000
    COMMENT:                                                   <<04.KM>>05194000
      EXPANDDST= TRUE:  DATA-SEG EXPANDED FOR AT LEAST ONE     <<04.KM>>05196000
                        ENTRY                                  <<04.KM>>05198000
                 FALSE: COULD NOT EXPAND DATA-SEG.  "PV'ERROR" <<04.KM>>05200000
                        IS SET TO APPROPRIATE VALUE.           <<04.KM>>05202000
                                                               <<04.KM>>05204000
      ON ENTRY, "IMPENTLOC" IS INDEX OF LAST+1 WORD OF NEXT    <<04.KM>>05206000
      DST ENRTY.                                               <<04.KM>>05208000
                                                               <<04.KM>>05210000
      WE MUST AVOID USING THE "DSTFUDGE" AREA.  THIS AVOIDS    <<04.KM>>05212000
      BUGS RELATING TO ATTEMPTING TO USE THE ENTIRE DATA-SEG.  <<04.KM>>05214000
      (NOTE THAT IF/WHEN THESE BUGS ARE FIXED, THE "MIN"       <<04.KM>>05216000
      FUNCTION CAN BE REPLACED WITH SIMPLY "INCALLOC");        <<04.KM>>05218000
                                                               <<04.KM>>05220000
    EXPANDDST:=TRUE;                                           <<04.KM>>05222000
    IF IMPENTLOC<=IMPMAXLEN THEN                               <<04.KM>>05224000
      BEGIN                                                    <<04.KM>>05226000
      DO                                                       <<04.KM>>05228000
        IMPLEN:=ALTDSEGSIZE(MOUNTDST,                          <<04.KM>>05230000
                            MIN(INCALLOC,IMPMAXLEN-IMPLEN))    <<04.KM>>05232000
      UNTIL >=;                                                <<04.KM>>05234000
      END;                                                     <<04.KM>>05236000
    IF IMPENTLOC>IMPLEN THEN                                   <<04.KM>>05238000
      BEGIN                                                    <<04.KM>>05240000
      PV'ERROR:=NOSPACE;                                       <<04.KM>>05242000
      EXPANDDST:=FALSE;                                        <<04.KM>>05244000
      END;                                                     <<04.KM>>05246000
  END <<SUBROUTINE EXPANDDST>>;                                <<04.KM>>05248000
                                                               <<04.KM>>05250000
                                                               <<04.KM>>05252000
  <<************************>>                                 <<04.KM>>05254000
  << SUBROUTINE GETDSTENTRY >>                                 <<04.KM>>05256000
  <<************************>>                                 <<04.KM>>05258000
                                                               <<04.KM>>05260000
  LOGICAL SUBROUTINE GETDSTENTRY;                              <<04.KM>>05262000
  BEGIN                                                        <<04.KM>>05264000
    COMMENT:                                                   <<04.KM>>05266000
      GETDSTENTRY= TRUE:  NEW ENTRY ADDED TO DATA-SEG          <<04.KM>>05268000
                   FALSE: COULD NOT ALLOCATE OR EXPAND         <<04.KM>>05270000
                          DATA-SEG.                            <<04.KM>>05272000
                          "PV'ERROR" SET TO APPROPRIATE VALUE. <<04.KM>>05274000
                                                               <<04.KM>>05276000
      IF "MOUNTDST" IS ZERO, ALLOCATE DATA-SEG.  IF NECESSARY, <<04.KM>>05278000
      EXPAND DATA-SEG.  UPDATE PARAMETRIC INFORMATION AND      <<04.KM>>05280000
      INITIALIZE NEW ENTRY TO "MOUNTED" CONDITION.  NOTE THAT  <<04.KM>>05282000
      WE ALSO ALTER CERTAIN GLOBALS, VIZ:  "IMPINFO" &         <<04.KM>>05284000
      "ENTINFO".                                               <<04.KM>>05286000
                                                               <<04.KM>>05288000
      ON EXIT, "IMPENTLOC" IS INDEX OF LAST+1 WORD OF NEXT     <<04.KM>>05290000
      DST ENTRY, REGARDLESS OF SUCCESS OF "GETDSTENTRY";       <<04.KM>>05292000
                                                               <<04.KM>>05294000
    GETDSTENTRY:=FALSE;                                        <<04.KM>>05296000
    IF MOUNTDST>0                                              <<04.KM>>05298000
       THEN MOVEFROMDSEG(@IMPINFO,MOUNTDST,DSTINFO,IMPINFOLEN);<<04.KM>>05300000
    IF MOUNTDST>0 OR ALLOCATEDST THEN                          <<04.KM>>05302000
      BEGIN                                                    <<04.KM>>05304000
      DSTENTINFO:=IMPENTLOC;                                   <<04.KM>>05306000
      IMPENTLOC:=IMPENTLOC+IMPENTLEN;                          <<04.KM>>05308000
      IMPENTCNT:=IMPENTCNT+1;                                  <<04.KM>>05310000
      IF IMPENTLOC<=IMPLEN OR EXPANDDST THEN                   <<04.KM>>05312000
        BEGIN                                                  <<04.KM>>05314000
        ENTERR:=0;                                             <<04.KM>>05316000
        ENTPVINFO:=0;                                          <<04.KM>>05318000
        MOVE ENTNAME:=GROUP,(4),2;                             <<04.KM>>05320000
        MOVE * := ACCT,(4),2;                                  <<04.KM>>05322000
        MOVE * := ZEROES,(@ENTINFO(IMPENTLEN)-@PS0); <<0-FILL>><<04.KM>>05324000
        GETDSTENTRY:=TRUE;                                     <<04.KM>>05326000
      END;                                                     <<04.KM>>05328000
    END;                                                       <<04.KM>>05330000
  END <<SUBROUTINE GETDSTENTRY>>;                              <<04.KM>>05332000
                                                               <<04.KM>>05334000
                                                               <<04.KM>>05336000
  <<*********************>>                                    <<04.KM>>05338000
  << MAIN PROCEDURE BODY >>                                    <<04.KM>>05340000
  <<*********************>>                                    <<04.KM>>05342000
                                                               <<04.KM>>05344000
  IMPLICITMNT:=FALSE;                                          <<04.KM>>05346000
  IF MOUNTDST<0 OR GETDSTENTRY THEN                            <<04.KM>>05348000
    BEGIN                                                      <<04.KM>>05350000
    MOVE HOMEVS:="*       ";                                   <<04.KM>>05352000
    MOUNT(HOMEVS,GROUP,ACCT,REQ'ERROR,ANYGEN,PV'ERROR);        <<04.KM>>05354000
    IF >= THEN                                                 <<04.KM>>05356000
      BEGIN                                                    <<04.KM>>05358000
      IMPLICITMNT:=TRUE;                                       <<04.KM>>05360000
      ENTPVINFO:=PV'ERROR;                                     <<04.KM>>05362000
      END                                                      <<04.KM>>05364000
    ELSE IF MOUNTDST<0 THEN PV'ERROR:=-REQ'ERROR               <<04.KM>>05366000
    ELSE                                                       <<04.KM>>05368000
      BEGIN                                                    <<04.KM>>05370000
      PV'ERROR:=NOMOUNT;                                       <<04.KM>>05372000
      ENTERR:=REQ'ERROR;                                       <<04.KM>>05374000
      IMPERRCNT:=IMPERRCNT+1;                                  <<04.KM>>05376000
      END;                                                     <<04.KM>>05378000
    IF MOUNTDST>0 THEN                                         <<04.KM>>05380000
      BEGIN                                                    <<04.KM>>05382000
      MOVETODSEG(MOUNTDST,DSTENTINFO,@ENTINFO,IMPENTLEN);      <<04.KM>>05384000
      MOVETODSEG(MOUNTDST,DSTINFO,@IMPINFO,IMPINFOLEN);        <<04.KM>>05386000
      END;                                                     <<04.KM>>05388000
    END;                                                       <<04.KM>>05390000
END <<PROCEDURE IMPLICITMNT>>;                                 <<04.KM>>05392000
                                                               <<04.KM>>05394000
                                                               <<04.KM>>05396000
                                                               <<01.KM>>05398000
                                                               <<01.KM>>05400000
$CONTROL  SEGMENT=CISYSMGR                                     <<01.KM>>05402000
                                                               <<01.KM>>05404000
INTEGER PROCEDURE LISTVSDEFN(PARMS);                           <<RH.PV>>05406000
   INTEGER ARRAY PARMS;                                        <<RH.PV>>05408000
   OPTION PRIVILEGED, UNCALLABLE;                              <<RH.PV>>05410000
BEGIN                                                          <<RH.PV>>05412000
   EQUATE NOERROR=  0,                                         <<03.KM>>05414000
          IOERROR=  1,                                         <<03.KM>>05416000
          NOVOLSET= 2;                                         <<03.KM>>05418000
   INTEGER I,GEN,LOC,CNTRL,STYPE,MVTABX;                       << I.A >>05420000
   LOGICAL VMASK,TMASK,STATUS,VCLASS;                          <<RH.PV>>05422000
   LOGICAL                                                     <<03513>>05424000
          FLOPPY'FLAG;                                         <<03513>>05426000
   DOUBLE DIRESULT;                                            <<RH.PV>>05428000
   DOUBLE VTABINFO = DIRESULT;                                 <<RH.PV>>05430000
   INTEGER                                                     <<RH.PV>>05432000
        VTABINFO1 = VTABINFO;                                  << I.A >>05434000
   EQUATE VSDEFNSIZE = 56;                                     <<07.KM>>05436000
   ARRAY WNAME(0:4);                                           <<03.KM>>05438000
   BYTE ARRAY NAME(*)= WNAME;                                  <<03.KM>>05440000
   ARRAY VSDEFN(0:VSDEFNSIZE-1);                               <<RH.PV>>05442000
   BYTE ARRAY VSDEFNB(*) = VSDEFN;                             <<RH.PV>>05444000
   EQUATE MAXVOLNUM = 8;  <<MEMBERS PER VOLUME SET>>           <<RH.PV>>05446000
   INTEGER ARRAY LDEV(0:MAXVOLNUM);                            <<RH.PV>>05448000
   INTEGER ARRAY STATN(0:MAXVOLNUM);                           <<RH.PV>>05450000
   ARRAY BUF(0:35);                                            <<RH.PV>>05452000
   BYTE ARRAY BUFB(*) = BUF;                                   <<RH.PV>>05454000
   ARRAY BUF7902(0:16);                                        <<03513>>05456000
   BYTE ARRAY BUFB7902(*) = BUF7902; << FOR HP7902 SPECI.>>    <<03513>>05458000
   DOUBLE ARRAY DPARMS(*) = PARMS;                             <<RH.PV>>05460000
   INTEGER ARRAY                                               <<RH.PV>>05462000
        VSNAME(*)    = PARMS,                                  <<RH.PV>>05464000
        CURRENTG(*)  = PARMS(4),                               <<RH.PV>>05466000
        CURRENTA(*)  = PARMS(8);                               <<RH.PV>>05468000
   BYTE ARRAY                                                  <<RH.PV>>05470000
        VSID(*)      = VSNAME;                                 << I.A >>05472000
   ARRAY MASTER(0:11);  <<MASTER REFERENCE>>                   <<RH.PV>>05474000
   BYTE ARRAY MASTERB(*) = MASTER;                             <<RH.PV>>05476000
   ARRAY TITLE1(*)=PB:=                                        <<RH.PV>>05478000
     " VOLSET        MEMBERS      TYPE     LDEV    STATUS ";   <<RH.PV>>05480000
   ARRAY TITLE2(*)=PB:=                                        <<RH.PV>>05482000
     " --------      --------   --------   ----   -------- ";  <<RH.PV>>05484000
   ARRAY TITLE3(*)=PB:=                                        <<RH.PV>>05486000
     " VOLCLASS      MASTER REFERENCE           ";             <<RH.PV>>05488000
   ARRAY TITLE4(*)=PB:=                                        <<RH.PV>>05490000
     " --------      --------------------       ";             <<RH.PV>>05492000
   ARRAY AGTITLE (*)=PB:=                                      <<RH.PV>>05494000
       " ACCOUNT=              GROUP=              (CONT.)";   <<RH.PV>>05496000
   DEFINE                                                      <<RH.PV>>05498000
        AVAILF   = ( 3:1)#,                                    <<RH.PV>>05500000
        CLASSF   = ( 0:1)#,                                    <<RH.PV>>05502000
        VMASKF   = ( 8:8)#;                                    <<RH.PV>>05504000
   EQUATE  << VOLUME SET DEFINITION INFORMATION >>             <<RH.PV>>05506000
        VDMISC  =  4,  << MVTAB INDEX >>                       <<RH.PV>>05508000
        VDINFO  =  5;  << NUM. VOLS., VOL. MASK >>             <<RH.PV>>05510000
   EQUATE                                                      <<RH.PV>>05512000
        ACCTPOS  =  5,                                         <<RH.PV>>05514000
        GROUPPOS = 15;                                         <<RH.PV>>05516000
   EQUATE                                                      <<RH.PV>>05518000
        DIRDST     =  20,                                      <<RH.PV>>05520000
        LONGDEV    = 128,                                      <<RH.PV>>05522000
        VDVENTSIZE =   6;  <<VOL. ENTRY IN VS DEFINITION>>     <<RH.PV>>05524000
                                                               <<RH.PV>>05526000
   EQUATE TYPELEN = 8;                                         <<RH.PV>>05528000
   BYTE ARRAY TYPEKEY(*)=PB:=                                  <<RH.PV>>05530000
        "FIXED HD",                                            <<RH.PV>>05532000
        "7900(U) ",                                            <<03513>>05534000
        "7900(L) ",                                            <<03513>>05536000
        "7900    ",                                            <<RH.PV>>05538000
        "ISS     ",                                            <<RH.PV>>05540000
        "HP7905  ",                                            <<RH.PV>>05542000
        "7905(F) ",                                            <<RH.PV>>05544000
        "7905(T) ",                                            <<RH.PV>>05546000
        "7905(SD)",                                            <<RH.PV>>05548000
        "HP7920  ",                                            <<03.KM>>05550000
        "HP7925  ",                                            <<00263>>05552000
        "HP7906  ",                                            <<00263>>05554000
    21 ("        "), <<UNASSIGNED PSEUDO SUBTYPES 12-31>>      <<00263>>05556000
        "HP9895/ ",                                            <<03513>>05558000
    23 ("        "),                                           <<03513>>05560000
        "HP7933  ";                                                     05562000
   EQUATE STATLEN = 8;                                         <<RH.PV>>05564000
   EQUATE                                                      <<03513>>05566000
        FLOPPYLEN   = 17,                                      <<03513>>05568000
        FLOPPY      = 33;                                      <<03513>>05570000
   BYTE ARRAY STATKEY(*)=PB:=                                  <<RH.PV>>05572000
        "SYSTEM  ",                                            <<RH.PV>>05574000
        "OFF-LINE",                                            <<RH.PV>>05576000
        "SERIAL  ",                                            <<RH.PV>>05578000
        "RESERVED",                                            <<RH.PV>>05580000
        "DOWNED  ",                                            <<RH.PV>>05582000
        "DOWN-PND",                                            <<RH.PV>>05584000
        "MOUNTED ",                                            <<RH.PV>>05586000
        "PV-AVAIL";                                            <<RH.PV>>05588000
   DEFINE                                                      <<RH.PV>>05590000
        P'GANAME   = PARMS ( 4) #,                             <<03.KM>>05592000
        SIRS       = DPARMS( 8) #,                             <<RH.PV>>05594000
        DETAIL     = PARMS (12) #,                             <<RH.PV>>05596000
        DETAILEN   = PARMS (13) #,                             <<RH.PV>>05598000
        NEWAG      = PARMS (14) #,                             <<RH.PV>>05600000
        ENTADDR    = PARMS (15) #,                             <<RH.PV>>05602000
        FILENUM    = PARMS (18) #,                             <<RH.PV>>05604000
        DEVSIZE    = PARMS (19) #,   <<BYTES>>                 <<RH.PV>>05606000
        LINENUM    = PARMS (20) #,                             <<RH.PV>>05608000
        NUMPERLINE = PARMS (21) #,                             <<RH.PV>>05610000
        P'VCNAME   = PARMS (27) #,                             <<03.KM>>05612000
        P'VSNAME   = PARMS (31) #;                             <<03.KM>>05614000
   DEFINE                                                      <<RH.PV>>05616000
        PAGEJECT = BEGIN                                       <<RH.PV>>05618000
                   FWRITE(FILENUM,BUF,0,%61);                  <<01.RO>>05620000
                   IF <> THEN CXEXIT(IOERROR);                 <<03.KM>>05622000
                   LINENUM:=1;                                 <<RH.PV>>05624000
                   END#,                                       <<RH.PV>>05626000
                                                               <<RH.PV>>05628000
        SPACE    = BEGIN                                       <<RH.PV>>05630000
                   FWRITE(FILENUM,BUF,0,%40);                  <<01.RO>>05632000
                   IF <> THEN CXEXIT(IOERROR);                 <<03.KM>>05634000
                   LINENUM:=LINENUM+1;                         <<RH.PV>>05636000
                   END#,                                       <<RH.PV>>05638000
                                                               <<RH.PV>>05640000
        DBLSPACE = BEGIN                                       <<RH.PV>>05642000
                   FWRITE(FILENUM,BUF,0,%60);                  <<01.RO>>05644000
                   IF <> THEN CXEXIT(IOERROR);                 <<03.KM>>05646000
                   LINENUM:=LINENUM+2;                         <<RH.PV>>05648000
                   END#;                                       <<RH.PV>>05650000
                                                               <<RH.PV>>05652000
   SUBROUTINE CXEXIT(EXITYPE);                                 <<RH.PV>>05654000
   VALUE EXITYPE; INTEGER EXITYPE;                             <<RH.PV>>05656000
   BEGIN                                                       <<RH.PV>>05658000
      LISTVSDEFN:=EXITYPE;                                     <<RH.PV>>05660000
      ASSEMBLE(EXIT 1);                                        <<RH.PV>>05662000
   END <<CXEXIT>>;                                             <<RH.PV>>05664000
                                                               <<RH.PV>>05666000
   SUBROUTINE MOVEFDS(TOADDR,FRADDR,LEN);                      <<RH.PV>>05668000
   VALUE TOADDR,FRADDR,LEN;                                    <<RH.PV>>05670000
   INTEGER TOADDR,FRADDR,LEN;                                  <<RH.PV>>05672000
   BEGIN                                                       <<RH.PV>>05674000
      TOS:=TOADDR;                                             <<RH.PV>>05676000
      TOS:=DIRDST;                                             <<RH.PV>>05678000
      TOS:=S4;                                                 <<RH.PV>>05680000
      TOS:=S4;                                                 <<RH.PV>>05682000
      ASSEMBLE(MFDS 4);                                        <<RH.PV>>05684000
   END <<MOVEFDS>>;                                            <<RH.PV>>05686000
                                                               <<RH.PV>>05688000
   SUBROUTINE GETINFO;                                         <<RH.PV>>05690000
   BEGIN                                                       <<RH.PV>>05692000
      MOVEFDS(@VSDEFN,ENTADDR,VSDEFNSIZE);                     <<RH.PV>>05694000
      TOS := SIRS;                                             <<RH.PV>>05696000
      RELSIR (*, *);                                           <<RH.PV>>05698000
      VMASK:=VSDEFN(VDINFO).VMASKF;                            <<RH.PV>>05700000
      IF (VCLASS:=VSDEFN(VDMISC).CLASSF) THEN                  <<RH.PV>>05702000
         BEGIN                                                 <<RH.PV>>05704000
         MVTABX:=0;  <<CLASS AREN'T MARKED AS MOUNTED>>        <<RH.PV>>05706000
         MOVE NAME:=VSDEFNB,(8);  <<SAVE CLASS NAME>>          <<RH.PV>>05708000
         MOVE MASTER:=VSDEFN(6),(12);                          <<RH.PV>>05710000
         DIRESULT:=DIRECFIND(%40,0D,VSDEFN(6),VSDEFN(10),      <<38.PV>>05712000
                             VSDEFN(14),VSDEFN);               <<RH.PV>>05714000
         IF <> THEN                                            <<RH.PV>>05716000
            BEGIN                                              <<RH.PV>>05718000
            MOVE P'VCNAME:=WNAME,(4);                          <<03.KM>>05720000
            MOVE P'GANAME:=MASTER,(8);                         <<03.KM>>05722000
            MOVE P'VSNAME:=MASTER(8),(4);                      <<03.KM>>05724000
            CXEXIT(NOVOLSET);                                  <<03.KM>>05726000
            END;                                               <<RH.PV>>05728000
         END                                                   <<RH.PV>>05730000
      ELSE                                                     <<RH.PV>>05732000
         MVTABX:=VSDEFN(VDMISC).(MVTABXF);                     <<RH.PV>>05734000
      IF DETAIL = 0 THEN RETURN;  <<NAMES ONLY>>               <<RH.PV>>05736000
      IF DETAIL = 2 AND MVTABX <> 0 THEN                       <<RH.PV>>05738000
         BEGIN                                                 <<RH.PV>>05740000
         I:=0;                                                 <<RH.PV>>05742000
         TMASK:=VMASK;  <<USE TEMPORARY COPY OF VMASK>>        <<RH.PV>>05744000
         WHILE TMASK <> 0 DO                                   <<RH.PV>>05746000
            BEGIN                                              <<RH.PV>>05748000
            I:=I+1;                                            <<RH.PV>>05750000
            IF TMASK THEN                                      <<RH.PV>>05752000
               BEGIN                                           <<RH.PV>>05754000
               LDEV:=0; GEN:=-1;  <<FOR VTABINDEX PROC.>>      <<RH.PV>>05756000
               TOS:=VTABINDEX(VSDEFNB((I*6) & LSL(1)),         <<RH.PV>>05758000
                              VSID,LDEV,GEN);                  <<RH.PV>>05760000
               IF (VTABINFO:=TOS) <> 0D THEN <<MOUNTED MEMBER>><<RH.PV>>05762000
                  BEGIN                                        <<RH.PV>>05764000
                  STATN(I):=15;                                <<RH.PV>>05766000
                  LDEV(I):=VTABINFO1.(0:8);                    <<RH.PV>>05768000
                  CHECKDISC(LDEV(I),STATUS);                   <<RH.PV>>05770000
                  STATUS.AVAILF:=1; <<ASSUME PV AVAIL>>        <<07.KM>>05772000
                  WHILE NOT STATUS DO                          <<RH.PV>>05774000
                     BEGIN                                     <<RH.PV>>05776000
                     STATN(I):=STATN(I)-1;                     <<RH.PV>>05778000
                     STATUS:=STATUS & LSR(1);                  <<RH.PV>>05780000
                     END;                                      <<RH.PV>>05782000
                  STATN(I):=10-STATN(I);                       <<RH.PV>>05784000
                  END;                                         <<RH.PV>>05786000
               END;                                            <<RH.PV>>05788000
            TMASK:=TMASK & LSR(1);                             <<RH.PV>>05790000
            END;                                               <<RH.PV>>05792000
         END;                                                  <<RH.PV>>05794000
   END <<GETINFO>>;                                            <<RH.PV>>05796000
                                                               <<RH.PV>>05798000
   SUBROUTINE PRINTAG(LENGTH);                                 <<RH.PV>>05800000
   VALUE LENGTH;                                               <<RH.PV>>05802000
   INTEGER LENGTH;                                             <<RH.PV>>05804000
   << PRINT "ACCOUNT/GROUP" TITLE >>                           <<RH.PV>>05806000
   BEGIN                                                       <<RH.PV>>05808000
      MOVE BUF := AGTITLE,(LENGTH);                            <<RH.PV>>05810000
      MOVE BUF (ACCTPOS) := CURRENTA, (4);                     <<RH.PV>>05812000
      MOVE BUF (GROUPPOS) := CURRENTG, (4);                    <<RH.PV>>05814000
      FWRITE(FILENUM,BUF,LENGTH,0);                            <<RH.PV>>05816000
      IF <> THEN CXEXIT(IOERROR);                              <<03.KM>>05818000
      LINENUM:=LINENUM+1;                                      <<RH.PV>>05820000
      SPACE;                                                   <<RH.PV>>05822000
   END <<PRINTAG>>;                                            <<RH.PV>>05824000
                                                               <<RH.PV>>05826000
   SUBROUTINE PRINTITLE;                                       <<RH.PV>>05828000
   BEGIN                                                       <<RH.PV>>05830000
      IF DETAIL <> 3 THEN                                      <<RH.PV>>05832000
         MOVE BUF:=TITLE1,(DETAILEN)                           <<RH.PV>>05834000
      ELSE                                                     <<RH.PV>>05836000
         MOVE BUF:=TITLE3,(DETAILEN);                          <<RH.PV>>05838000
      FWRITE(FILENUM,BUF,DETAILEN,0);                          <<RH.PV>>05840000
      IF DETAIL <> 3 THEN                                      <<RH.PV>>05842000
         MOVE BUF:=TITLE2,(DETAILEN)                           <<RH.PV>>05844000
      ELSE                                                     <<RH.PV>>05846000
         MOVE BUF:=TITLE4,(DETAILEN);                          <<RH.PV>>05848000
      FWRITE(FILENUM,BUF,DETAILEN,0);                          <<RH.PV>>05850000
      NUMPERLINE:=0;                                           <<RH.PV>>05852000
      SPACE;                                                   <<RH.PV>>05854000
   END <<PRINTITLE>>;                                          <<RH.PV>>05856000
                                                               <<RH.PV>>05858000
   SUBROUTINE FILLNAME;                                        <<RH.PV>>05860000
   BEGIN                                                       <<RH.PV>>05862000
      BUF:="  "; MOVE BUF(1):=BUF,(26);       <<BLANK NAME>>   <<RH.PV>>05864000
      NAME(8):=" ";                                            <<RH.PV>>05866000
      IF NOT VCLASS THEN MOVE NAME:=VSDEFNB,(8);               <<RH.PV>>05868000
      MOVE BUFB(1):=NAME WHILE AN,1;                           <<RH.PV>>05870000
      IF VCLASS AND DETAIL <> 3 THEN MOVE * :="(C)",2;         <<RH.PV>>05872000
      IF MVTABX <> 0 THEN  << MOUNTED >>                       <<RH.PV>>05874000
         MOVE * :="*"                                          <<RH.PV>>05876000
      ELSE                                                     <<RH.PV>>05878000
         MOVE * :=" ";                                         <<RH.PV>>05880000
      IF (NUMPERLINE:=NUMPERLINE-1) < 0 THEN                   <<RH.PV>>05882000
      NUMPERLINE:=IF DETAIL = 0 THEN                           <<RH.PV>>05884000
                  IF DEVSIZE >= LONGDEV THEN 8 ELSE 5 ELSE 0;  <<RH.PV>>05886000
      CNTRL:=IF NUMPERLINE = 0 THEN 0 ELSE %320;               <<RH.PV>>05888000
      IF VCLASS AND DETAIL = 3 THEN  <<LOOK AT CLASS DEFN>>    <<RH.PV>>05890000
      BEGIN                                                    <<RH.PV>>05892000
           I:=3;                                               <<RH.PV>>05894000
           TOS:=@BUFB(15);  <<MASTER NAME LOCATION>>           <<RH.PV>>05896000
           WHILE (I:=I-1) >= 0 DO  <<FORMAT NAME FOR PRINT>>   <<RH.PV>>05898000
           BEGIN                                               <<RH.PV>>05900000
                MOVE NAME:=MASTERB(I*8),(8);                   <<RH.PV>>05902000
                MOVE * :=NAME WHILE AN,1;                      <<RH.PV>>05904000
                IF I > 0 THEN                                  <<RH.PV>>05906000
                   MOVE * :=".",2                              <<RH.PV>>05908000
                ELSE                                           <<RH.PV>>05910000
                   MOVE * :=" ";                               <<RH.PV>>05912000
           END;                                                <<RH.PV>>05914000
      END;                                                     <<RH.PV>>05916000
   END <<FILLNAME>>;                                           <<RH.PV>>05918000
                                                               <<RH.PV>>05920000
   SUBROUTINE PRINTINFO;                                       <<RH.PV>>05922000
   BEGIN                                                       <<RH.PV>>05924000
        MOVE BUF := "  ";                                      <<03513>>05926000
        MOVE BUF(1) := BUF,(35);                               <<03513>>05928000
        MOVE BUF7902 := "  ";                                  <<03513>>05930000
        MOVE BUF7902(1) := BUF7902,(16);                       <<03513>>05932000
      IF DETAIL = 3 AND NOT VCLASS THEN RETURN;                <<RH.PV>>05934000
      IF NEWAG <> 0 THEN  <<NEW GROUP/ACCOUNT>>                <<RH.PV>>05936000
         BEGIN                                                 <<RH.PV>>05938000
         NEWAG:=0;                                             <<RH.PV>>05940000
         IF (2<=LINENUM<=52) THEN DBLSPACE ELSE                <<RH.PV>>05942000
         IF (53<=LINENUM<=61) THEN PAGEJECT;                   <<RH.PV>>05944000
         PRINTAG(19);                                          <<RH.PV>>05946000
         PRINTITLE;                                            <<RH.PV>>05948000
         END                                                   <<RH.PV>>05950000
      ELSE                                                     <<RH.PV>>05952000
         IF (59<=LINENUM<=61) THEN                             <<RH.PV>>05954000
            BEGIN                                              <<RH.PV>>05956000
            PAGEJECT;                                          <<RH.PV>>05958000
            PRINTAG(25);                                       <<RH.PV>>05960000
            PRINTITLE;                                         <<RH.PV>>05962000
            END;                                               <<RH.PV>>05964000
      I:=0;  <<VOLUME MEMBER COUNT>>                           <<RH.PV>>05966000
      FILLNAME;                                                <<RH.PV>>05968000
      IF (1<=DETAIL<=2) THEN                                   <<RH.PV>>05970000
      WHILE VMASK <> 0 DO                                      <<RH.PV>>05972000
         BEGIN                                                 <<RH.PV>>05974000
         IF (I:=I+1) = 2 THEN MOVE BUFB(1):=BUFB,(12);         <<RH.PV>>05976000
         IF VMASK THEN                                         <<RH.PV>>05978000
            BEGIN                                              <<RH.PV>>05980000
            LOC:=I * VDVENTSIZE;                               <<RH.PV>>05982000
        << THE SUBTYPE IS STORED IN VSDEF ENTRY AS A PSEUDO >> <<03513>>05984000
        << SUBTYPE.  THE ALGORITHM IS AS FOLLOWS.           >> <<03513>>05986000
        << [PSEUDO SUB-TYPE] = ([ACTUAL TYPE]  * 16) +      >> <<03513>>05988000
        <<                     [ACTUAL SUBTYPE]             >> <<03513>>05990000
        <<                                                  >> <<03513>>05992000
        << STYPE = PSEUDO SUBTYPE + 1                       >> <<03513>>05994000
            STYPE:=VSDEFN(LOC+VDINFO).(0:8)+1;                 <<RH.PV>>05996000
            MOVE BUFB(15):=VSDEFNB(LOC & LSL(1)),(8);          <<RH.PV>>05998000
        <<**************************************************>> <<03513>>06000000
        <<               K L U D G E                        >> <<03513>>06002000
        << THE FOLLOWING IS A KLUDGE TO ACCOMODATE BOTH THE >> <<03513>>06004000
        << HP9895 AND HP7902 FLOPPY DRIVES.  BOTH DEVICES   >> <<03513>>06006000
        << HAVE THE SAME TYPE AND SUBTYPE WHICH CAUSES THE  >> <<03513>>06008000
        << ALGORITHM TO INDEX TO THE SAME PLACE IN THE ARRAY>> <<03513>>06010000
        << TYPEKEY.  WHEN THE HP7902 IS NO LONGER SUPPORTED >> <<03513>>06012000
        << THIS KLUDGE SHOULD BE REMOVED.  AFTER THE KLUDGE >> <<03513>>06014000
        << IS REMOVED THE CODE SHOULD READ AS FOLLOWS:      >> <<03513>>06016000
        << MOVE BUFB(26) := TYPEKEY(STYPE * TYPELEN),       >> <<03513>>06018000
        <<                  (TYPELEN);                      >> <<03513>>06020000
        <<**************************************************>> <<03513>>06022000
                                                               <<03513>>06024000
        IF STYPE = FLOPPY THEN                                 <<03513>>06026000
           FLOPPY'FLAG := TRUE;                                <<03513>>06028000
            MOVE BUFB(26):=TYPEKEY(STYPE * TYPELEN),           <<RH.PV>>06030000
                           (TYPELEN);                          <<RH.PV>>06032000
            IF DETAIL = 2 AND MVTABX <> 0 THEN                 <<RH.PV>>06034000
               BEGIN                                           <<RH.PV>>06036000
               ASCII(LDEV(I),-10,BUFB(39));                    <<RH.PV>>06038000
               MOVE BUFB(44):=STATKEY(STATN(I) * STATLEN),     <<RH.PV>>06040000
                              (STATLEN);                       <<RH.PV>>06042000
               END;                                            <<RH.PV>>06044000
        IF VMASK&LSR(1) <> 0 THEN                              <<03513>>06046000
           BEGIN                                               <<03513>>06048000
           FWRITE(FILENUM,BUF,DETAILEN,0);                     <<03513>>06050000
           IF FLOPPY'FLAG THEN                                 <<03513>>06052000
              BEGIN                                            <<03513>>06054000
              MOVE BUFB7902(26):= "HP7902  ";                  <<03513>>06056000
              FWRITE(FILENUM,BUF7902,FLOPPYLEN,0);             <<03513>>06058000
              FLOPPY'FLAG := FALSE;                            <<03513>>06060000
              END;                                             <<03513>>06062000
         END;                                                  <<03513>>06064000
            END;                                               <<RH.PV>>06066000
         VMASK:=VMASK&LSR(1);                                  <<07.KM>>06068000
         END;                                                  <<RH.PV>>06070000
      FWRITE(FILENUM,BUF,DETAILEN,CNTRL);                      <<RH.PV>>06072000
         IF FLOPPY'FLAG THEN                                   <<03513>>06074000
            BEGIN                                              <<03513>>06076000
            MOVE BUFB7902(26) := "HP7902  ";                   <<03513>>06078000
            FWRITE(FILENUM,BUF7902,FLOPPYLEN,CNTRL);           <<03513>>06080000
            FLOPPY'FLAG := FALSE;                              <<03513>>06082000
            END;                                               <<03513>>06084000
   END <<PRINTINFO>>;                                          <<RH.PV>>06086000
                                                               <<RH.PV>>06088000
   GETINFO;  <<OBTAIN DEFINITION INFORMATION>>                 <<RH.PV>>06090000
   PRINTINFO;                                                  <<RH.PV>>06092000
   CXEXIT(NOERROR);                                            <<03.KM>>06094000
END <<PROCEDURE LISTVSDEFN>>;                                  <<03.KM>>06096000
                                                               <<01.KM>>06098000
                                                               <<01.KM>>06100000
$CONTROL  SEGMENT=CISYSMGR                                     <<01.KM>>06102000
                                                               <<01.KM>>06104000
                                                               <<RH.PV>>06106000
INTEGER PROCEDURE LISTVSINFO(ELEMENT,LEVEL,PARMS,SIRS);        <<RH.PV>>06108000
   VALUE LEVEL, PARMS, SIRS;                                   <<RH.PV>>06110000
   INTEGER ARRAY ELEMENT;                                      <<RH.PV>>06112000
   INTEGER LEVEL, PARMS;                                       <<RH.PV>>06114000
   DOUBLE SIRS;                                                <<RH.PV>>06116000
   OPTION PRIVILEGED, UNCALLABLE;                              <<RH.PV>>06118000
BEGIN                                                          <<RH.PV>>06120000
   DEFINE P'GOTENTRY= LPARMS(24) #;                            <<03.KM>>06122000
   ARRAY LEAFNAME(*)= S-3;                                    <<00.GEN>>06124000
   DOUBLE DS3= S-3;                                           <<00.GEN>>06126000
   INTEGER X=X;                                               <<00.GEN>>06128000
   INTEGER POINTER PPRESULT;                                  <<00.GEN>>06130000
                                                              <<00.GEN>>06132000
   LOGICAL NEWMASK := 0;                                       <<RH.PV>>06134000
   DEFINE                                                      <<RH.PV>>06136000
        NEWACCNT = NEWMASK.(15:1)#,                            <<RH.PV>>06138000
        NEWGROUP   = NEWMASK.(14:1)#;                          <<RH.PV>>06140000
   INTEGER ELEMENTADDR = Q-8;                                  <<RH.PV>>06142000
   INTEGER ARRAY RPARMS(*);                                    <<RH.PV>>06144000
   LOGICAL ARRAY LPARMS(*) = RPARMS;                           <<RH.PV>>06146000
   DOUBLE ARRAY                                                <<RH.PV>>06148000
        PARMSD(*) = RPARMS,                                    <<RH.PV>>06150000
        DELEMENT(*) = ELEMENT;                                 <<RH.PV>>06152000
   EQUATE DIRDST = 20;                                         <<RH.PV>>06154000
                                                               <<RH.PV>>06156000
   IF REQUESTSERVICE THEN                                      <<RH.PV>>06158000
      BEGIN                                                    <<RH.PV>>06160000
      TOS := 5;                                                <<RH.PV>>06162000
      GO TO EXIT2;                                             <<RH.PV>>06164000
      END;                                                     <<RH.PV>>06166000
   TOS := DELEMENT (1);                                       <<00.GEN>>06168000
   TOS := DELEMENT;                                           <<00.GEN>>06170000
   EXCHANGEDB(0);                                             <<00.GEN>>06172000
   @RPARMS := @ARRQ0(PARMS - DELTAQ);                         <<00.GEN>>06174000
                                                              <<00.GEN>>06176000
   @PPRESULT:=@RPARMS(SYSL'PPRINX);                           <<00.GEN>>06178000
   IF LOGICAL(D'TYPE.(ALLFLAG)) THEN                          <<00.GEN>>06180000
   BEGIN                                                      <<00.GEN>>06182000
     COMMENT:                                                 <<00.GEN>>06184000
       (S-3,S-2) = LAST 4 BYTES OF LEAF NAME                  <<00.GEN>>06186000
       (S-1,S-0) = FIRST 4 BYTES OF LEAF NAME;                <<00.GEN>>06188000
                                                              <<00.GEN>>06190000
     TOS:=DS3;                         <<CORRECT STR ORDER>>   <<03.KM>>06192000
     CASE *LEVEL OF BEGIN                                     <<00.GEN>>06194000
       TOS:=-1;                        <<SHOULDN'T HAPPEN>>    <<03.KM>>06196000
       TOS:=DIRMATCH(G'GNAME,LEAFNAME);                       <<00.GEN>>06198000
       TOS:=DIRMATCH(G'ANAME,LEAFNAME);                       <<00.GEN>>06200000
       TOS:=-1;                        <<SHOULDN'T HAPPEN>>    <<03.KM>>06202000
       TOS:=DIRMATCH(G'VNAME,LEAFNAME);                       <<00.GEN>>06204000
     END;                                                     <<00.GEN>>06206000
     X:=TOS;                           <<SET CC ON TOS>>      <<00.GEN>>06208000
     DDEL;                                                    <<00.GEN>>06210000
     IF <> THEN                        <<DIRMATCH<>0>>        <<00.GEN>>06212000
     BEGIN                                                    <<00.GEN>>06214000
       TOS:=IF < THEN NEXTUNCLE'SIR ELSE NEXTBROTHER'SIR;      <<03.KM>>06216000
       GO EXIT1;                                              <<00.GEN>>06218000
     END;                                                     <<00.GEN>>06220000
   END;                                                       <<00.GEN>>06222000
                                                              <<00.GEN>>06224000
   IF LEVEL <> VSDEFLEVEL THEN                                 <<RH.PV>>06226000
      BEGIN                                                    <<RH.PV>>06228000
      IF LEVEL = ACCOUNTLEVEL THEN NEWACCNT:=TRUE;             <<RH.PV>>06230000
      IF LEVEL = GROUPLEVEL THEN NEWGROUP := TRUE;             <<RH.PV>>06232000
      END;                                                     <<RH.PV>>06234000
   IF NEWMASK <> 0 THEN  <<NEW ACCOUNT/GROUP>>                 <<RH.PV>>06236000
      BEGIN                                                    <<RH.PV>>06238000
      LPARMS (14) := LPARMS (14) LOR NEWMASK;                  <<RH.PV>>06240000
      PARMSD (2 + (2 * NEWMASK.(15:1))) := TOS;                <<RH.PV>>06242000
      PARMSD(X+1) := TOS;                                      <<RH.PV>>06244000
      TOS := 1;                                                <<RH.PV>>06246000
      GO TO EXIT1;                                             <<RH.PV>>06248000
      END                                                      <<RH.PV>>06250000
   ELSE                                                        <<RH.PV>>06252000
      BEGIN                                                    <<RH.PV>>06254000
      PARMSD:=TOS;                                             <<RH.PV>>06256000
      PARMSD(1):=TOS;                                          <<RH.PV>>06258000
      END;                                                     <<RH.PV>>06260000
   PARMSD (8) := SIRS;                                         <<RH.PV>>06262000
   RPARMS (15) := ELEMENTADDR;                                 <<RH.PV>>06264000
   P'GOTENTRY:=TRUE;                                           <<03.KM>>06266000
   TOS := LISTVSDEFN(RPARMS);                                  <<RH.PV>>06268000
   IF S0=0 THEN TOS:=TOS+NEXTSON                               <<06.KM>>06270000
   ELSE                                                        <<03.KM>>06272000
      BEGIN                                                    <<03.KM>>06274000
      RPARMS(1):=-TOS;                                         <<03.KM>>06276000
      TOS:=ABORTSCAN;                                          <<03.KM>>06278000
      END;                                                     <<03.KM>>06280000
EXIT1:                                                         <<RH.PV>>06282000
   EXCHANGEDB(DIRDST);                                         <<RH.PV>>06284000
EXIT2:                                                         <<RH.PV>>06286000
   LISTVSINFO := TOS;                                          <<RH.PV>>06288000
END << LISTVSINFO >>;                                          <<RH.PV>>06290000
                                                               <<01.KM>>06292000
                                                               <<01.KM>>06294000
$CONTROL  SEGMENT=CISYSMGR                                     <<01.KM>>06296000
                                                               <<01.KM>>06298000
                                                               <<RH.PV>>06300000
PROCEDURE CXLISTVS EXECUTORHEAD;                               <<RH.PV>>06302000
OPTION PRIVILEGED, UNCALLABLE;                                 <<RH.PV>>06304000
BEGIN                                                          <<RH.PV>>06306000
DOUBLE DL := COMMASEMICR;                                      <<RH.PV>>06308000
INTEGER NUMPARMS;                                              <<RH.PV>>06310000
DOUBLE ARRAY PARMS(0:3)=Q;                                     <<RH.PV>>06312000
INTEGER ARRAY RECIPPARMS(0:SYSL'PARMLEN-1);                   <<00.GEN>>06314000
INTEGER ARRAY PPRESULT(*)=RECIPPARMS(SYSL'PPRINX);            <<00.GEN>>06316000
DEFINE P'GNAME=    RECIPPARMS(4) #,                            <<03.KM>>06318000
       P'ANAME=    RECIPPARMS(8) #,                            <<03.KM>>06320000
       P'FILENUM=  RECIPPARMS(18) #,                           <<04.KM>>06322000
       P'GOTENTRY= RECIPPARMS(24) #,                           <<03.KM>>06324000
       P'VCNAME=   RECIPPARMS(27) #,                           <<03.KM>>06326000
       P'VSNAME=   RECIPPARMS(31) #;                           <<03.KM>>06328000
EQUATE IOERROR=  -1;                                           << I.A >>06330000
ARRAY WBUF(0:17);                                              <<03.KM>>06332000
BYTE ARRAY BUF(*)= WBUF;                                       <<03.KM>>06334000
BYTE POINTER NEXT,                                             <<03.KM>>06336000
             LAST;                                             <<03.KM>>06338000
BYTE POINTER LEAFNAME = PARMS;                                 <<RH.PV>>06340000
INTEGER LEAFNAMECHAR = PARMS+1;                                <<RH.PV>>06342000
BYTE LEAFNAMELEN = PARMS+1;                                    <<RH.PV>>06344000
BYTE POINTER LISTLEVEL = PARMS+2;                              <<RH.PV>>06346000
BYTE LISTLEVELLEN = PARMS+3;                                   <<RH.PV>>06348000
BYTE POINTER LISTVILE = PARMS+2;  <<TRICKY BIT>>               <<RH.PV>>06350000
INTEGER LISTVILECHAR = PARMS+3;                                <<RH.PV>>06352000
BYTE POINTER EXTRAPARM = PARMS+6;                              <<RH.PV>>06354000
BYTE EXTRAPARMLEN = PARMS+7;                                   <<RH.PV>>06356000
EQUATE COMMA = 0, SEMI = 1, CR = 2;                            <<RH.PV>>06358000
BYTE POINTER DELIM;                                           <<00.GEN>>06360000
INTEGER LEV := VSDEFLEVEL;  <<ASSUME VS DEFINITION>>           <<RH.PV>>06362000
INTEGER FNUM := 2;  <<DEFAULT TO $STDLIST>>                    <<U.RAO>>06364000
LOGICAL STDLIST := TRUE;  <<DEFAULT TO $STDLIST>>              <<U.RAO>>06366000
ARRAY DATEBUF(0:13);  <<FOR TIME STAMP FOR OUTPUT>>            <<02.RO>>06368000
INTEGER DEV := 0;  <<LIST FILE DEVICE TYPE>>                   <<03.RO>>06370000
                                                               <<03.KM>>06372000
                                                               <<03.KM>>06374000
  <<*******************>>                                      <<03.KM>>06376000
  << SUBROUTINE APPEND >>                                      <<03.KM>>06378000
  <<*******************>>                                      <<03.KM>>06380000
                                                               <<03.KM>>06382000
  LOGICAL SUBROUTINE APPEND(NAME,SUFFIX,BUF);                  <<03.KM>>06384000
    VALUE SUFFIX; BYTE ARRAY NAME,BUF; INTEGER SUFFIX;         <<03.KM>>06386000
  BEGIN                                                        <<03.KM>>06388000
    IF NAME(7)=" " THEN MOVE BUF:=NAME WHILE ANS,1             <<03.KM>>06390000
    ELSE MOVE BUF:=NAME,(8),2;                                 <<03.KM>>06392000
    @LAST:=TOS;                                                <<03.KM>>06394000
    LAST:=SUFFIX;                                              <<03.KM>>06396000
    APPEND:=@LAST(1);                                          <<03.KM>>06398000
  END <<SUBROUTINE APPEND>>;                                   <<03.KM>>06400000
                                                               <<03.KM>>06402000
                                                               <<03.KM>>06404000
  <<***********************>>                                  <<03.KM>>06406000
  << SUBROUTINE CLASSERROR >>                                  <<03.KM>>06408000
  <<***********************>>                                  <<03.KM>>06410000
                                                               <<03.KM>>06412000
  SUBROUTINE CLASSERROR;                                       <<03.KM>>06414000
  BEGIN                                                        <<03.KM>>06416000
    IF LOGICAL(P'GOTENTRY) THEN FWRITE(FNUM,WBUF,0,0);         <<03.KM>>06418000
    @NEXT:=APPEND(P'VSNAME,".",BUF);                           <<03.KM>>06420000
    @NEXT:=APPEND(P'GNAME,".",NEXT);                           <<03.KM>>06422000
    @NEXT:=APPEND(P'ANAME,0,NEXT);                             <<03.KM>>06424000
    APPEND(P'VCNAME,0,NEXT);                                   <<03.KM>>06426000
    CIERR((ERRNUM:=VSDNOVOLSET),,2,@BUF);                      <<03.KM>>06428000
  END <<SUBROUTINE CLASSERROR>>;                               <<03.KM>>06430000
                                                               <<03.KM>>06432000
                                                               <<03.KM>>06434000
  <<*********************>>                                    <<03.KM>>06436000
  << MAIN PROCEDURE BODY >>                                    <<03.KM>>06438000
  <<*********************>>                                    <<03.KM>>06440000
                                                                        06442000
<<INITIALIZE PARMS ARRAY>>                                     <<RH.PV>>06444000
PARMS := 0D;                                                   <<RH.PV>>06446000
TOS := @PARMS+2;                                               <<RH.PV>>06448000
TOS := @PARMS+1;                                               <<RH.PV>>06450000
TOS := 6;                                                      <<RH.PV>>06452000
ASSEMBLE(MOVE);                                                <<RH.PV>>06454000
MYCOMMAND(PARMSP,DL,4,NUMPARMS,PARMS);                         <<RH.PV>>06456000
PARMNUM := 1;                                                  <<RH.PV>>06458000
IF NOT PRODUCEPARMS(LEV,PARMSP,PPRESULT,DELIM,ERRNUM) THEN    <<00.GEN>>06460000
    RETURN;  <<ERROR IN PARSING LEAFNAME>>                     <<RH.PV>>06462000
IF (NUMPARMS > 0) AND  <<NOT JUST A CR>>                       <<RH.PV>>06464000
   (@DELIM < @LEAFNAME+INTEGER(LEAFNAMELEN)) THEN             <<00.GEN>>06466000
   BEGIN  <<EXTRANEOUS STUFF IN LEAFNAME>>                     <<RH.PV>>06468000
   TOS := ERRNUM := LISTVEXTRANEOUS;                           <<RH.PV>>06470000
   TOS := @DELIM;                                             <<00.GEN>>06472000
   CIERR(*,*);                                                 <<RH.PV>>06474000
   RETURN                                                      <<RH.PV>>06476000
   END;                                                        <<RH.PV>>06478000
                                                               <<RH.PV>>06480000
IF NUMPARMS=0 THEN LEAFNAMECHAR := CR;                         <<RH.PV>>06482000
                                                               <<RH.PV>>06484000
<<CHECK FOR LISTLEVEL, IF ANY>>                                <<RH.PV>>06486000
IF LEAFNAMECHAR.(11:5)=COMMA THEN  <<LISTLEVEL PRESENT>>       <<RH.PV>>06488000
   BEGIN                                                       <<RH.PV>>06490000
   PARMNUM := 2;                                               <<RH.PV>>06492000
   TOS := BINARY(LISTLEVEL,INTEGER(LISTLEVELLEN));             <<RH.PV>>06494000
   IF < THEN   <<BAD CHAR IN CONVERT>>                         <<RH.PV>>06496000
      BEGIN                                                    <<RH.PV>>06498000
      CIERR(ERRNUM := LISTVBADINT, LISTLEVEL);                 <<RH.PV>>06500000
      RETURN                                                   <<RH.PV>>06502000
      END;                                                     <<RH.PV>>06504000
   IF > THEN  <<INTEGER OUT OF BOUNDS>>                        <<RH.PV>>06506000
      BEGIN                                                    <<RH.PV>>06508000
      CIERR(ERRNUM := LISTVINTOVFL,LISTLEVEL);                 <<RH.PV>>06510000
      RETURN                                                   <<RH.PV>>06512000
      END;                                                     <<RH.PV>>06514000
   IF S0 > 3 THEN TOS := 3;  <<MAX LEVEL>>                     <<RH.PV>>06516000
   IF S0 < 0 THEN  <<LISTVS, -1 CASE?>>                        <<RH.PV>>06518000
      BEGIN  <<CHECK CAPABILITY>>                              <<RH.PV>>06520000
      IF D'TYPE.(STARTLEVELF) = 0 THEN  <<SYSTEM LEVEL FILE>> <<00.GEN>>06522000
         BEGIN                                                 <<RH.PV>>06524000
         SETXPXGLOB;                                           <<03.KM>>06526000
         IF NOT SMCAP THEN                                     <<RH.PV>>06528000
            BEGIN                                              <<RH.PV>>06530000
            CIERR(ERRNUM := LISTVSMCAP);                       <<RH.PV>>06532000
            RETURN                                             <<RH.PV>>06534000
            END;                                               <<RH.PV>>06536000
         END                                                   <<RH.PV>>06538000
      ELSE                                                     <<03.KM>>06540000
         BEGIN                                                 <<03.KM>>06542000
         SETXPXGLOB;                                           <<03.KM>>06544000
         IF NOT AMCAP AND NOT SMCAP THEN                       <<03.KM>>06546000
            BEGIN                                              <<03.KM>>06548000
            CIERR(ERRNUM:=LISTVAMCAP);                         <<03.KM>>06550000
            RETURN;                                            <<03.KM>>06552000
            END;                                               <<03.KM>>06554000
         END;                                                  <<03.KM>>06556000
      RECIPPARMS(13) := 0;                                     <<RH.PV>>06558000
      END;  <<LISTVS, -1 CASE>>                                <<RH.PV>>06560000
   PARMS := PARMS(1);                                          <<RH.PV>>06562000
   PARMS(1) := PARMS(2);  <<FIXUP FOR MISSING LISTLEVEL>>      <<RH.PV>>06564000
   END                                                         <<RH.PV>>06566000
ELSE                                                           <<RH.PV>>06568000
   TOS := 0;   <<LISTLEVEL DEFAULT>>                           <<RH.PV>>06570000
RECIPPARMS(12) := S0;  <<LISTLEVEL IN BINARY>>                 <<RH.PV>>06572000
CASE TOS OF                                                    <<RH.PV>>06574000
   BEGIN                                                       <<RH.PV>>06576000
   RECIPPARMS(13) := 7;                                        <<RH.PV>>06578000
   RECIPPARMS(13) := 17;                                       <<RH.PV>>06580000
   RECIPPARMS(13) := 26;                                       <<RH.PV>>06582000
   RECIPPARMS(13) := 21;                                       <<RH.PV>>06584000
   END;                                                        <<RH.PV>>06586000
<<WE HAVE NOW PROCESSED THE LISTLEVEL. NOW DO LISTVILE>>       <<RH.PV>>06588000
PARMNUM := PARMNUM+1;                                          <<RH.PV>>06590000
IF LEAFNAMECHAR.(11:5)=SEMI THEN  <<PROBABLY IS ONE>>          <<RH.PV>>06592000
   BEGIN                                                       <<RH.PV>>06594000
   IF CIBADFILENAME(ERRNUM,PARMS(1)) THEN RETURN;              <<RH.PV>>06596000
   STDLIST := FALSE;   <<VALID LIST FILE NAME PROVIDED>>       <<U.RAO>>06598000
   END                                                         <<RH.PV>>06600000
ELSE IF LEAFNAMECHAR.(11:5)=COMMA THEN  <<ERROR>>              <<RH.PV>>06602000
   BEGIN                                                       <<RH.PV>>06604000
   CIERR(ERRNUM := LISTVEXPECTFILE, LISTVILE);                 <<RH.PV>>06606000
   RETURN                                                      <<RH.PV>>06608000
   END;                                                        <<U.RAO>>06610000
                                                               <<RH.PV>>06612000
IF (LISTVILECHAR.(11:5) <> CR) AND (EXTRAPARMLEN<>0) THEN      <<RH.PV>>06614000
   BEGIN                                                       <<RH.PV>>06616000
   PARMNUM := PARMNUM+1;                                       <<RH.PV>>06618000
   CIERR(ERRNUM := LISTV2MP,EXTRAPARM);                        <<RH.PV>>06620000
   RETURN                                                      <<RH.PV>>06622000
   END;                                                        <<RH.PV>>06624000
PARMNUM := 0;                                                  <<RH.PV>>06626000
                                                               <<RH.PV>>06628000
IF NOT STDLIST THEN                                            <<U.RAO>>06630000
   BEGIN   <<OPEN LIST FILE FOR RECIPPARMS>>                   <<U.RAO>>06632000
   FNUM := FOPEN(LISTVILE, %2504, %101);                       <<00267>>06634000
   IF CARRY THEN  <<OPEN FAILED ON USER DEFINED LIST FILE>>    <<U.RAO>>06636000
      BEGIN                                                    <<U.RAO>>06638000
      FERROR'(FNUM, PARMNUM);                                  <<U.RAO>>06640000
      CIERR(ERRNUM := LISTVFSERR);                             <<U.RAO>>06642000
      RETURN;                                                  <<U.RAO>>06644000
      END;                                                     <<U.RAO>>06646000
   END;                                                        <<U.RAO>>06648000
P'FILENUM:=FNUM;                                               <<04.KM>>06650000
                                                               <<RH.PV>>06652000
FGETINFO(FNUM,,,,RECIPPARMS(19),DEV);                          <<03.RO>>06654000
TOS := RECIPPARMS(19);                                         <<RH.PV>>06656000
IF < THEN TOS := -TOS                                          <<RH.PV>>06658000
ELSE TOS := TOS&LSL(1);  <<CONVERT TO BYTE COUNT>>             <<RH.PV>>06660000
RECIPPARMS(19) := TOS;  <<LINE LENGTH>>                        <<RH.PV>>06662000
                                                               <<RH.PV>>06664000
<<SET OTHER FILE ATTRIBUTES>>                                  <<RH.PV>>06666000
RECIPPARMS(20) := 1;                                           <<RH.PV>>06668000
RECIPPARMS(21) := 0;                                           <<RH.PV>>06670000
MOVE RECIPPARMS := D'FNAME,(4),2;                             <<00.GEN>>06672000
MOVE * := D'GNAME,(4),2;                                      <<00.GEN>>06674000
MOVE * := D'ANAME,(4);                                        <<00.GEN>>06676000
RECIPPARMS(14) := 3;  <<NEW ACCOUNT/GROUP FLAG>>               <<RH.PV>>06678000
RECIPPARMS(15) := 0;  <<CALL TO LISTVSDEFN>>                   <<RH.PV>>06680000
<<SET UP TYPE>>                                                <<RH.PV>>06682000
RECIPPARMS (22) := D'TYPE;                                    <<00.GEN>>06684000
RECIPPARMS(SAVEBUFFINDEX) := 0;  << see syslist >>             <<04178>>06686000
RECIPPARMS(SAVEBUFFINDEX + ASIZE + 1) := 0;                    <<04178>>06688000
                                                               <<RH.PV>>06690000
<<TIME STAMP LIST FILE IF NOT INTERACTIVE OR IF LIST >>        <<02.RO>>06692000
<<FILE NAME WAS SUPPLIED.>>                                    <<02.RO>>06694000
INTERACTIVETEST;                                               <<02.RO>>06696000
IF NOT TOS <<NOT INTERACTIVE>> AND STDLIST OR                  <<03.RO>>06698000
   NOT STDLIST AND DEV.(8:8) >= 8 THEN                         <<03.RO>>06700000
   BEGIN                                                       <<02.RO>>06702000
   DATE'LINE(DATEBUF);                                         <<02.RO>>06704000
   FWRITE(FNUM, DATEBUF, -27, %60);                            <<02.RO>>06706000
   END;                                                        <<02.RO>>06708000
                                                               <<02.RO>>06710000
<<NOW SET UP COMMON DIRECSCAN STUFF ON STACK>>                 <<RH.PV>>06712000
TOS := 0D;  <<RETURN VALUE>>                                   <<RH.PV>>06714000
TOS := D'TYPE;                                                <<00.GEN>>06716000
TOS.(HITFLAG) := 1;                                            <<RH.PV>>06718000
TOS := D'INX1.(MVTABXF);               <<LINKAGE>>            <<04.GEN>>06720000
TOS := D'INX2;                         <<INDEXP>>             <<05.GEN>>06722000
TOS := @D'ANAME;                                              <<00.GEN>>06724000
TOS := @D'GNAME;                                              <<00.GEN>>06726000
TOS := @D'FNAME;                                              <<00.GEN>>06728000
IF RECIPPARMS(12)<0 THEN  <<LISTVS , -1>>                      <<RH.PV>>06730000
   TOS := DIRECSCAN(*,*,*,*,*,SYSLIST,RECIPPARMS)              <<RH.PV>>06732000
ELSE                                                           <<RH.PV>>06734000
   TOS := DIRECSCAN(*,*,*,*,*,LISTVSINFO,RECIPPARMS);          <<RH.PV>>06736000
IF <> THEN   <<DIRECTORY ERROR>>                               <<RH.PV>>06738000
   BEGIN                                                       <<RH.PV>>06740000
   IF NOT STDLIST THEN FCLOSE(FNUM, 0, 0);                     <<U.RAO>>06742000
   CYDIRERR'(*,%120000,ERRNUM);                                <<RH.PV>>06744000
   RETURN;                                                     <<RH.PV>>06746000
   END;                                                        <<RH.PV>>06748000
DDEL;                                                          <<RH.PV>>06750000
IF RECIPPARMS(1)<=IOERROR THEN                                 <<03.KM>>06752000
   BEGIN                                                       <<RH.PV>>06754000
   IF < THEN CLASSERROR                                        <<03.KM>>06756000
   ELSE                                                        <<03.KM>>06758000
      BEGIN                                                    <<03.KM>>06760000
      FERROR'(FNUM,PARMNUM);                                   <<03.KM>>06762000
      CIERR(ERRNUM := LISTVFSERR,,%10000,PARMNUM);             <<03.KM>>06764000
      END;                                                     <<03.KM>>06766000
   RETURN                                                      <<RH.PV>>06768000
   END;                                                        <<RH.PV>>06770000
IF LOGICAL(P'GOTENTRY) THEN FWRITE(FNUM,RECIPPARMS,0,0)        <<03.KM>>06772000
ELSE CIERR(ERRNUM := -NOVSDSLISTED);                           <<04790>>06774000
             <<XPARENT TO PROGRAMMATIC CALL FOR UPWARD COMPAT>><<03.KM>>06776000
IF NOT STDLIST THEN                                            <<U.RAO>>06778000
   BEGIN                                                       <<U.RAO>>06780000
   FCLOSE(FNUM, 0, 0);                                         <<U.RAO>>06782000
   IF CARRY THEN                                               <<U.RAO>>06784000
      BEGIN                                                    <<U.RAO>>06786000
      FERROR'(FNUM, PARMNUM);  <<REPORT REASON FOR CLOSE FAILUR<<U.RAO>>06788000
      CIERR(ERRNUM := LISTVFSERR);                             <<U.RAO>>06790000
      END;                                                     <<U.RAO>>06792000
   END;                                                        <<U.RAO>>06794000
END;  <<CXLISTVS>>                                             <<RH.PV>>06796000
                                                               <<RH.PV>>06798000
$PAGE    "SUBSYSTEM EXECUTORS"                                          06800000
<<    IMPLEMENTATION DETAILS ON THE COMMANDS                   <<03.RO>>06802000
<<            RUN, PREPRUN OR PREP                             <<03.RO>>06804000
<<               OR SUBSYSTEMS                                 <<03.RO>>06806000
<<                                                             <<03.RO>>06808000
<<        RUN, PREPRUN AND PREP COMMANDS                       <<03.RO>>06810000
<<                                                             <<03.RO>>06812000
<<There is really nothing very unusual or interesting about    <<03.RO>>06814000
<<these particular commands.  In essence they parse the user's <<03.RO>>06816000
<<request and translate it almost verbatim into requests to    <<03.RO>>06818000
<<the segmenter and the CREATE and AWAKE intrinsics.  The only <<03.RO>>06820000
<<information needed to understand these commands is the       <<03.RO>>06822000
<<details on the segmenter and create functions.               <<03.RO>>06824000
<<                                                             <<03.RO>>06826000
<<                   SUBSYSTEMS                                <<03.RO>>06828000
<<                                                             <<03.RO>>06830000
<<The subsystem commands are mildly interesting but mostly     <<03.RO>>06832000
<<just complicated.  I will use :SPL, :SPLPREP and :SPLGO as   <<03.RO>>06834000
<<examples.  All of the rest follow the same general pattern   <<03.RO>>06836000
<<with minor deviations for special problems.                  <<03.RO>>06838000
<<                                                             <<03.RO>>06840000
<<The major problem in the subsystem commands is to handle     <<03.RO>>06842000
<<the file names passed as parameters.  Since the subsystems   <<03.RO>>06844000
<<cannot be passed strings as parameters, the communication    <<03.RO>>06846000
<<is done through the job global file equate table. In         <<03.RO>>06848000
<<general the executor sets up file equates for each of        <<03.RO>>06850000
<<the parameters according to an agreed upon scheme.  For      <<03.RO>>06852000
<<example, in the case of SPL the first parameter, if          <<03.RO>>06854000
<<present, is equated to SPLTEXT, the second to SPLUSL and     <<03.RO>>06856000
<<so forth.  The presence or absence of a given parameter      <<03.RO>>06858000
<<is indicated to the subsystem through a bit map in the       <<03.RO>>06860000
<<PARM parameter in the CREATE intrinsic call.  The            <<03.RO>>06862000
<<correspondence typically is                                  <<03.RO>>06864000
<<          bit 15 = xxxTEXT                                   <<03.RO>>06866000
<<          bit 14 = xxxLIST                                   <<03.RO>>06868000
<<          bit 13 = xxxUSL                                    <<03.RO>>06870000
<<          bit 12 = xxxMAST                                   <<03.RO>>06872000
<<          bit 11 = xxxNEW                                    <<03.RO>>06874000
<<The file equate itself is done by procedure CYIMPLCTFILE'.   <<03.RO>>06876000
<<On completion of the command the file equate is              <<03.RO>>06878000
<<deleted by procedure DELIMPFILE.  Final cleanup is usually   <<03.RO>>06880000
<<done by procedure CISUBSYSFINISH.                            <<03.RO>>06882000
<<                                                             <<03.RO>>06884000
$CONTROL SEGMENT = CISYSMGR                                    <<U.RAO>>06886000
PROCEDURE CXSYSDUMP EXECUTORHEAD;                                       06888000
   OPTION PRIVILEGED, UNCALLABLE;                                       06890000
BEGIN                                                                   06892000
   BYTE POINTER FNAME;                                                  06894000
   LOGICAL DL := %26015;                                                06896000
   INTEGER NUMPARMS;                                                    06898000
   DOUBLE ARRAY PARMS(0:2);                                    <<U.RAO>>06900000
   LBPARMDECS;                                                          06902000
   LOGICAL TEMP;                                                        06904000
   BYTE ARRAY LHS(0:15);                                                06906000
   INTEGER PARM := 0, PIN;                                              06908000
   BYTE ARRAY TAPFIL(0:8) = PB := "DUMPTAPE ";                          06910000
   BYTE ARRAY AUXLIST(0:8) = PB := "SYSDLIST ";                         06912000
   BYTE BLANK := " ";                                                   06914000
SUBROUTINE CLEANUP;                                                     06916000
BEGIN MOVE LHS := TAPFIL , (9);                                         06918000
      XREMJTENTRY(LHS,BLANK,BLANK,3);                                   06920000
      IF PARM = 0 THEN RETURN;                                          06922000
      MOVE LHS := AUXLIST , (9);                                        06924000
      XREMJTENTRY(LHS,BLANK,BLANK,3)                                    06926000
END;                                                                    06928000
   MYCOMMAND(PARMSP,DL,3,NUMPARMS,PARMS);                      <<U.RAO>>06930000
   IF NUMPARMS > 2 THEN  <<TOO MANY PARAMETERS>>               <<U.RAO>>06932000
      BEGIN                                                    <<U.RAO>>06934000
      PARMNUM := 3;                                            <<U.RAO>>06936000
      TOS := ERRNUM := SUBS2MP;                                <<U.RAO>>06938000
      TOS := LPARM(4);  <<ADDRESS OF 3RD PARM>>                <<U.RAO>>06940000
      CIERR(*,*,%10000,2);                                     <<U.RAO>>06942000
      RETURN                                                   <<U.RAO>>06944000
      END;                                                     <<U.RAO>>06946000
   IF (NUMPARMS=0) OR ((TEMP := LOGICAL(BPARM(2)))=0) THEN     <<U.RAO>>06948000
      BEGIN  <<DUMP FILE SPECIFICATION MISSING>>               <<U.RAO>>06950000
      PARMNUM := 1;                                            <<U.RAO>>06952000
      CIERR(ERRNUM := DUMPFILENOTOPT,PARMSP);                  <<U.RAO>>06954000
      RETURN;                                                  <<U.RAO>>06956000
      END;                                                     <<U.RAO>>06958000
   @FNAME := LPARM;                                                     06960000
   IF FNAME <> "*" AND FNAME<>"$NULL" THEN <<MUST BE BACKREF>> <<U.RAO>>06962000
      BEGIN                                                    <<U.RAO>>06964000
      PARMNUM := 1;                                            <<U.RAO>>06966000
      CIERR(ERRNUM := DUMPFILENOTBACKREF, FNAME);              <<U.RAO>>06968000
      RETURN                                                   <<U.RAO>>06970000
      END;                                                     <<U.RAO>>06972000
   MOVE LHS := TAPFIL , (9);                                            06974000
   ERRNUM := CYIMPLCTFILE'(LHS,FNAME,TEMP);                    <<U.RAO>>06976000
   IF <> THEN   <<ERROR IN NAME>>                              <<U.RAO>>06978000
      BEGIN                                                    <<U.RAO>>06980000
      PARMNUM :=1;                                             <<U.RAO>>06982000
      RETURN                                                   <<U.RAO>>06984000
      END;                                                     <<U.RAO>>06986000
   IF (NUMPARMS=1) OR ((TEMP := LOGICAL(BPARM(6)))=0) THEN     <<U.RAO>>06988000
      GO TO SKIP;  <<NO AUXILIARY LIST FILE>>                  <<U.RAO>>06990000
   @FNAME := LPARM(2);                                                  06992000
   MOVE LHS := AUXLIST , (9);                                           06994000
   ERRNUM := CYIMPLCTFILE'(LHS,FNAME,TEMP);                    <<U.RAO>>06996000
   IF <> THEN   <<ERROR IN NAME>>                              <<U.RAO>>06998000
      BEGIN                                                    <<U.RAO>>07000000
      CLEANUP;                                                 <<U.RAO>>07002000
      PARMNUM :=2;                                             <<U.RAO>>07004000
      RETURN                                                   <<U.RAO>>07006000
      END;                                                     <<U.RAO>>07008000
   PARM := 2;                                                           07010000
SKIP:                                                                   07012000
   MOVE LHS := "SYSDUMP.PUB.SYS ";                                      07014000
   SETJCW(GETJCW LAND %37777);  <<CLEAR JCW ABORT BITS>>       <<02.MM>>07016000
      TOS := TOS + 0;            <<CLEAR CARRY>>                        07018000
   CREATE(LHS,,PIN,PARM,1);                                             07020000
      IF CARRY THEN                                                     07022000
            BEGIN                                              <<U.RAO>>07024000
            LHS(7) := 0;    <<SET UP AS PARM TO GENMSG>>       <<U.RAO>>07026000
            IF CREATEERROR THEN                                <<U.RAO>>07028000
               CIERR(ERRNUM := SUBSYSCREATEERR,,0,@LHS)        <<U.RAO>>07030000
            ELSE                                               <<U.RAO>>07032000
               CIERR(ERRNUM := SUBSYSLOADERR,,0,@LHS);         <<U.RAO>>07034000
            CLEANUP;                                           <<U.RAO>>07036000
            RETURN                                             <<U.RAO>>07038000
      END;                                                              07040000
      IF < THEN                                                         07042000
            BEGIN                                              <<U.RAO>>07044000
         LHS(7) := 0;                                          <<U.RAO>>07046000
         CIERR(ERRNUM := SUBSNOTFOUND,,0,@LHS);                <<U.RAO>>07048000
         CLEANUP;                                                       07050000
         RETURN;                                               <<U.RAO>>07052000
      END;                                                              07054000
   NEXTLINE;                                                            07056000
   AWAKE(PIN*PCBSIZE,1,2);                                              07058000
                                                                        07060000
      CLEANUP;                                                          07062000
CISUBSYSFINISH(3, ERRNUM, PARMNUM);                            <<U.RAO>>07064000
END;                                                                    07066000
$CONTROL SEGMENT=CISYSMGR                                      <<U.RAO>>07068000
      PROCEDURE CXALLOCATE EXECUTORHEAD;                                07070000
      OPTION PRIVILEGED, UNCALLABLE;                                    07072000
      BEGIN                                                             07074000
      COMMENT                                                           07076000
      CXALLOCATE IS THE EXECUTOR FOR ALLOCATE AND DEALLOCATE            07078000
      COMMAND FORMAT                                                    07080000
      ALLOCATE[[PROGRAM/PROCEDURE],] NAME                               07082000
      DEALLOCATE[[PROGRAM/PROCEDURE],] NAME                             07084000
      ;                                                                 07086000
      ENTRY CXDEALLOCATE;                                               07088000
      INTEGER NUMPARMS,TEMP;                                            07090000
      LOGICAL DEALOC := FALSE;                                 <<U.RAO>>07092000
      DOUBLE ARRAY PARMS(0:2);                                 <<U.RAO>>07094000
      INTEGER ARRAY IPARM(*)=PARMS;                                     07096000
      BYTE ARRAY BPARM(*)=PARMS;                                        07098000
      BYTE POINTER NAME,PNAME;                                          07100000
      LOGICAL DUMMY;  <<USED WHEN CHECKING PROGRAM FILE NAME>> <<08.RO>>07102000
      BYTE POINTER ERRPTR;  <<RETURN FROM CHECKFILENAME'>>     <<08.RO>>07104000
      LOGICAL LERRPTR = ERRPTR;                                <<08.RO>>07106000
                                                                        07108000
      GO TO PROCESS;                                                    07110000
CXDEALLOCATE:                                                           07112000
      DEALOC:=DEALOC+1;<<DE ALLOCATE IN PROCESS>>                       07114000
PROCESS:                                                                07116000
      MYCOMMAND(PARMSP,,3,NUMPARMS,PARMS);                     <<U.RAO>>07118000
      IF NUMPARMS > 2 THEN                                     <<U.RAO>>07120000
         BEGIN                                                 <<U.RAO>>07122000
         PARMNUM := 3;                                         <<U.RAO>>07124000
         TOS := ERRNUM := ALLOC2MP;                            <<U.RAO>>07126000
         TOS := IPARM(4);                                      <<U.RAO>>07128000
         CIERR(*,*);                                           <<U.RAO>>07130000
         RETURN;                                               <<U.RAO>>07132000
         END;                                                  <<U.RAO>>07134000
      IF NUMPARMS < 1 THEN                                     <<U.RAO>>07136000
         BEGIN  <<AT LEAST ONE IS REQUIRED>>                   <<U.RAO>>07138000
         PARMNUM := 1;                                         <<U.RAO>>07140000
         CIERR(ERRNUM := ALLOCNOTENUF, PARMSP);                <<U.RAO>>07142000
         RETURN;                                               <<U.RAO>>07144000
         END;                                                  <<U.RAO>>07146000
      IF=THEN                                                           07148000
        BEGIN                                                           07150000
        @PNAME:=IPARM;<<GET NAME>>                                      07152000
        GO TO TRYPROG;<<DEFAULT CASE PROGRAM>>                          07154000
        END;                                                            07156000
      @NAME:=IPARM;<<GET PROCEDURE/PROGRAM>>                            07158000
      @PNAME:=IPARM(2);<<GET PROGRAM NAME>>                             07160000
      TEMP:=BPARM(X);<<GET LENGTH>>                                     07162000
      IF (TEMP=9) AND (NAME="PROCEDURE") THEN                           07164000
         BEGIN<<PROCEDURE ALLOCATION/DEALLOCATION>>                     07166000
         TOS:=IF DEALOC THEN DEALLOCATEPROC(PNAME)                      07168000
                        ELSE ALLOCATEPROC(PNAME);                       07170000
         IF <> THEN                                                     07172000
            BEGIN<<ERROR>>                                              07174000
            DUPLICATE;<<MAKE COPY>>                                     07176000
            TOS:= IF DEALOC THEN 86 ELSE 84;<<GET CORRECT COMPARE>>     07178000
            IF TOS=TOS THEN<<CHECK FOR ERRORS>>                         07180000
            CIERR((IF DEALOC THEN ERRNUM := -PROCNOTALL        <<04790>>07182000
                            ELSE ERRNUM := -PROCALLOC), PNAME) <<04790>>07184000
            ELSE                                               <<00833>>07186000
               BEGIN                                           <<00833>>07188000
               LOADERROR(*);                                   <<00833>>07190000
               CIERR(ERRNUM := IF DEALOC THEN NODEALOCPROC     <<00833>>07192000
                               ELSE NOALOCPROC);               <<00833>>07194000
               END;                                            <<00833>>07196000
            END;                                                        07198000
         END                                                            07200000
      ELSE IF (TEMP=7) AND (NAME="PROGRAM") THEN                        07202000
TRYPROG: BEGIN <<PROGRAM ALLOCATION/DEALLOCATION>>                      07204000
         ERRNUM := CHECKFILENAME'(PARMS(NUMPARMS-1) & LSR(8),  <<08.RO>>07206000
            DUMMY, DUMMY, LERRPTR);<<CHECK FOR VALID FILE NAME><<08.RO>>07208000
         IF <> THEN  <<UNACCEPTABLE FILE NAME>>                <<08.RO>>07210000
            BEGIN   <<PUT OUT APPROPRIATE ERROR, RETURN>>      <<08.RO>>07212000
            IF < THEN  <<ILLEGAL FILE NAME SPECIFICATION>>     <<08.RO>>07214000
               CIERR(ERRNUM, ERRPTR)                           <<08.RO>>07216000
            ELSE IF ERRNUM = 0 THEN  <<BACK REFERENCED FILE>>  <<08.RO>>07218000
               CIERR(ERRNUM := ALLOCNOBACKREF, PNAME)          <<08.RO>>07220000
            ELSE <<SYSTEM DEFINED FILE, AS $NULL>>             <<08.RO>>07222000
               CIERR(ERRNUM := ALLOCNOSYSDEF, PNAME);          <<08.RO>>07224000
            PARMNUM := NUMPARMS;                               <<08.RO>>07226000
            RETURN;                                            <<08.RO>>07228000
            END;                                               <<08.RO>>07230000
         TOS:= IF DEALOC THEN DEALLOCATEPROG(PNAME)                     07232000
                         ELSE ALLOCATEPROG(PNAME);                      07234000
         IF <> THEN                                                     07236000
            BEGIN<<ERROR>>                                              07238000
            DUPLICATE;<<MAKE COPY>>                                     07240000
            TOS:=IF DEALOC THEN 82 ELSE 80;<<GET CORRECT COMPARE>>      07242000
            IF TOS=TOS THEN<<CHECK FOR ERROR>>                          07244000
            CIERR((IF DEALOC THEN ERRNUM := -PROGNOTALL        <<04790>>07246000
                            ELSE ERRNUM := -PROGALLOC), PNAME) <<04790>>07248000
            ELSE                                               <<00833>>07250000
               BEGIN                                           <<00833>>07252000
               LOADERROR(*);                                   <<00833>>07254000
               CIERR(ERRNUM := IF DEALOC THEN NODEALOCPROG     <<00833>>07256000
                               ELSE NOALOCPROG);               <<00833>>07258000
               END;                                            <<00833>>07260000
            END;                                                        07262000
         END                                                   <<U.RAO>>07264000
      ELSE   <<UNKNOWN KEYWORD>>                               <<U.RAO>>07266000
         CIERR(ERRNUM := ALLOCXPROGPROC, NAME);                <<U.RAO>>07268000
      END;<<CXALLOCATE/CXDEALLOCATE>>                                   07270000
                                                               <<RH.PV>>07272000
$CONTROL SEGMENT=CISYSMGR                                      <<U.RAO>>07274000
      PROCEDURE CXQUANTUM EXECUTORHEAD;                        <<RH.PV>>07276000
      OPTION PRIVILEGED,UNCALLABLE;                            <<RH.PV>>07278000
      BEGIN                                                    <<RH.PV>>07280000
      COMMENT                                                  <<RH.PV>>07282000
      CXQUANTUM IS THE EXECUTOR FOR THE QUANTUM COMMAND        <<RH.PV>>07284000
      COMMAND FORMAT                                           <<RH.PV>>07286000
      QUANTUM TIME SLICE,TERMINAL PRI,NORMAL PRI,CPU BOUND PRI <<RH.PV>>07288000
      ;                                                                 07290000
                                                               <<01724>>07292000
<< THIS COMMAND HAS BEEN REPLACED BY THE TUNE COMMAND. >>      <<01724>>07294000
<< (SEE MODULE OPCOMMAND, 85) >>                               <<01724>>07296000
                                                               <<01724>>07298000
CIERR(ERRNUM := QUANTUM'NOMO);                                 <<01724>>07300000
                                                               <<01724>>07302000
      END;<<QUANTUM>>                                                   07304000
      PROCEDURE CXSHOWQ EXECUTORHEAD;                                   07306000
      OPTION PRIVILEGED,UNCALLABLE;                                     07308000
      BEGIN                                                             07310000
      COMMENT                                                           07312000
      CXSHOWQ IS THE EXECUTOR FOR THE SHOW QUE COMMAND                  07314000
      COMMAND FORMAT                                                    07316000
      SHOWQUE                                                           07318000
      ;                                                                 07320000
      LOGICAL DL:=%6400;                                                07322000
      ARRAY DATEBUF(0:13);  <<FOR TIME STAMP>>                 <<02.RO>>07324000
                                                                        07326000
      MYCOMMAND(PARMSP,DL,0);<<CHECK COMMAND FOR VALIDITY>>             07328000
      IF <> THEN CIERR(ERRNUM := -WARNXPARMSIGNORED,PARMSP);   <<04790>>07330000
      INTERACTIVETEST;                                         <<02.RO>>07332000
      IF NOT TOS THEN   <<NOT INTERACTIVE, TIME STAMP>>        <<02.RO>>07334000
         BEGIN                                                 <<02.RO>>07336000
         DATE'LINE(DATEBUF);                                   <<02.RO>>07338000
         PRINT(DATEBUF, -27, %60);                             <<02.RO>>07340000
         END;                                                  <<02.RO>>07342000
      SHOWMQ;                                                  <<U.RAO>>07344000
      END;<<CXSHOWQ>>                                                   07346000
$CONTROL SEGMENT=CISYSMGR                                      <<U.RAO>>07348000
      PROCEDURE SHOWLOGFILE;                                            07350000
      OPTION PRIVILEGED, UNCALLABLE;                                    07352000
      BEGIN                                                             07354000
      COMMENT                                                           07356000
      ISSUES A MESSAGE SHOWING NAME OF CURRENT LOG FILE AS WELL         07358000
      AS PERCENTAGE OF USE.                                             07360000
      IF NO LOGGING THEN RETURNS APPROPPRIATE MESSAGE.                  07362000
      IF LOGGING RETURNS CCE,OTHERWISE CCL.                             07364000
      ;                                                                 07366000
      ARRAY WBUF (0:14);                                                07368000
      INTEGER T;                                                        07370000
      BYTE ARRAY BUF(*)=WBUF,TEMP(0:4),LOGN(*)=BUF(12),PC(*)=BUF(20),   07372000
      MES1(0:10)=PB:="NO LOGGING";                                      07374000
      BYTE ARRAY MES0(0:28)=PB:="LOG FILE LOG0000 IS   % FULL";         07376000
                                                                        07378000
      INTEGER SUBROUTINE PERCENT(TOTAL,NUMBER);                         07380000
      VALUE TOTAL,NUMBER;                                               07382000
      DOUBLE TOTAL,NUMBER;                                              07384000
      BEGIN<< COMPUTES THE % FOR THE % FULL MESSAGE>>                   07386000
      PERCENT:=INTEGER(FIXR((REAL(NUMBER)/REAL(TOTAL))*REAL(100)));     07388000
      END;  << P E R C E N T  >>                                        07390000
      STATUS.(6:2) := CCE; <<SET NORMAL PRINT OUT STATUS>>              07392000
      IF NOT(ABSOLUTE(LINFO)) THEN                                      07394000
         BEGIN                            <<NO LOGGING>>                07396000
         MOVE BUF(0):=MES1(0),(10);                                     07398000
         PRINT (WBUF, -10, 0);<<PRINT NO LOGGING MSG>>                  07400000
         STATUS.(6:2):=CCL;                                             07402000
         IF ABSOLUTE(FLAGX).(11:2)=0 THEN RETURN ELSE STATUS.(6:2):=CCG;07404000
         END;                                                           07406000
      MOVE BUF(0):=MES0(0),(28);        <<TRANSFER MESSAGE>>            07408000
      T:=ASCII(ABSOLUTE(LOGFILENO),10,TEMP);<<CONVERT LOG# TO ASCII>>   07410000
      MOVE LOGN(3):=TEMP(T-1),(-T);    <<LOG FILE NUMBER>>              07412000
      ASSEMBLE(ZERO);                                                   07414000
      TOS:=ABSOLUTE(LOGFILESIZE);<<GET BLOCK SIZE>>                     07416000
      TOS:=ABSOLUTE(X:=X+1);                                            07418000
      TOS:=ABSOLUTE(X:=X+2);<<GET BLOCK COUNT>>                         07420000
      TOS:=ABSOLUTE(X:=X+1);                                            07422000
      TOS:=PERCENT(*,*);<<CHANGE TO %>>                                 07424000
      ASSEMBLE(ZERO,XCH);                                               07426000
      T:=ASCII(*,10,TEMP);<<CONVERT % TO ASCII>>                        07428000
      MOVE PC(1):=TEMP(T-1),(-T);                                       07430000
      PRINT (WBUF, -28, 0);<<PRINT LOGGING MESSAGE>>                    07432000
      END;<<SHOWLOGFILE>>                                               07434000
      PROCEDURE CXSHOWLOG EXECUTORHEAD;                                 07436000
      OPTION PRIVILEGED,UNCALLABLE;                                     07438000
      BEGIN                                                             07440000
      COMMENT                                                           07442000
      CXSHOWLOG IS THE EXECUTOR FOR THE SHOWLOG,SWITCHLOG&RESUMELOG     07444000
      COMMANDS                                                          07446000
      COMMAND FORMAT                                                    07448000
      SHOWLOG                                                           07450000
      RESUMELOG                                                         07452000
      SWITCHLOG                                                         07454000
      ;                                                                 07456000
      ENTRY CXRESUMELOG,CXSWITCHLOG;                                    07458000
      LOGICAL DL:=%6400,SWITCHLOG:=0,RESUMELOG:=0;                      07460000
      DEFINE DISAPROC  = ASSEMBLE(PSDB)#,                      <<04789>>07462000
             ENAPROC   = ASSEMBLE(PSEB)#;                      <<04789>>07464000
      EQUATE BUFSIR    = 26;                                   <<04789>>07466000
      INTEGER                                                  <<04789>>07468000
         S;                                                    <<04789>>07470000
                                                                        07472000
      GO TO PROCESS;                                                    07474000
CXRESUMELOG:<<ENTRY POINT FOR RESUMELOG COMMAND>>                       07476000
      RESUMELOG:=RESUMELOG+1;<<SET FLAG>>                               07478000
      GO TO PROCESS;                                                    07480000
CXSWITCHLOG:<<ENTRY POINT FOR SWITCHLOG COMMAND>>                       07482000
      SWITCHLOG:=SWITCHLOG+1;<<SET FLAG>>                               07484000
PROCESS:                                                                07486000
      MYCOMMAND(PARMSP,DL,0);<<CHECK COMMAND FOR VALIDITY>>             07488000
      IF <> THEN CIERR(ERRNUM := -WARNXPARMSIGNORED,PARMSP);   <<04790>>07490000
      IF SWITCHLOG THEN                                                 07492000
         BEGIN<<SWITCHLOG>>                                             07494000
         SHOWLOGFILE;<<PRINT OUT STATISTICS>>                           07496000
         IF=THEN                                                        07498000
            BEGIN<<LOGGING ENABLED CREATE NEW FILE>>                    07500000
            S := GETSIR(BUFSIR);   << GET BUFFER SIR>>         <<04789>>07502000
            DISAPROC;  << THIS IS DONE TO PREVENT THE >>       <<04789>>07504000
                       << LOG PROCESS OR SYSTEM LOGGING>>      <<04789>>07506000
                       << FROM RUNNING.                >>      <<04789>>07508000
            RELSIR(BUFSIR,S);  << RELEASE BUFFER SIR   >>      <<04789>>07510000
            ABSOLUTE(FLAGX).(14:1):=1;<<SET SWITCH LOG FLAG>>           07512000
            AWAKE(ABSOLUTE(LOGPROCESS),%20,0);<<DO SWITCH>>             07514000
            ENAPROC;  << ALLOW LOG PROCESS TO RUN  >>          <<04789>>07516000
            END;                                                        07518000
         END                                                            07520000
      ELSE IF RESUMELOG THEN                                            07522000
         BEGIN<<RESUME LOG FILE>>                                       07524000
         IF ABSOLUTE(LINFO) THEN RETURN;<<LOGGING INHIBITED>>           07526000
         TOS:=ABSOLUTE(FLAGX);                                          07528000
         ASSEMBLE(TBC 12);                                              07530000
         IF <> THEN RETURN;<<HARD ERROR>>                               07532000
         ASSEMBLE(TBC 11);                                              07534000
         IF = THEN RETURN;<<WE ARE ON AND WORKING>>                     07536000
         ASSEMBLE(SED 0);                                               07538000
         AWAKE(ABSOLUTE(LOGPROCESS),%20,0);<<RESUME>>                   07540000
         ASSEMBLE(SED 1);                                               07542000
         END                                                            07544000
     ELSE SHOWLOGFILE;<<SHOW LOG FILE>>                                 07546000
     END;<<CXSHOWLOG/CXRESUMELOG/CXSWITCHLOG>>                          07548000
$CONTROL SEGMENT=CISYSMGR                                      <<U.RAO>>07550000
PROCEDURE CXJOBPRI EXECUTORHEAD;                               <<U.RAO>>07552000
OPTION PRIVILEGED,UNCALLABLE;                                  <<U.RAO>>07554000
BEGIN                                                          <<U.RAO>>07556000
                                                               <<U.RAO>>07558000
LOGICAL DL := %26015; <<COMMA, CR>>                            <<U.RAO>>07560000
INTEGER NUMPARMS,                                              <<U.RAO>>07562000
        NEWMAXQ,  <<LOCAL TEMP FOR MAX JOB QUEUE>>             <<U.RAO>>07564000
        NEWDEFQ;  <<LOCAL TEMP FOR DEFAULT JOB QUEUE>>         <<U.RAO>>07566000
DOUBLE ARRAY PARMS(0:2) = Q;                                   <<U.RAO>>07568000
BYTE POINTER BMAXQ = PARMS;                                    <<U.RAO>>07570000
BYTE LENMAXQPARM = PARMS+1;                                    <<U.RAO>>07572000
BYTE POINTER BDEFQ = PARMS+2;                                  <<U.RAO>>07574000
BYTE LENDEFQPARM = PARMS+3;                                    <<U.RAO>>07576000
BYTE POINTER BADPARM = PARMS+4;                                <<U.RAO>>07578000
EQUATE CS=150,                                                 <<08.EB>>07580000
       DS=200,                                                 <<08.EB>>07582000
       ES=250;                                                 <<U.RAO>>07584000
EQUATE QNAMELEN=20;                                            <<U.RAO>>07586000
BYTE ARRAY QNAMEP(0:QNAMELEN-1)=PB :=                          <<U.RAO>>07588000
   5,2,"CS",CS,                                                <<U.RAO>>07590000
   5,2,"DS",DS,                                                <<U.RAO>>07592000
   5,2,"ES",ES,                                                <<U.RAO>>07594000
   4,1,"0",0,                                                  <<U.RAO>>07596000
   0;                                                          <<U.RAO>>07598000
BYTE ARRAY QNAME(0:QNAMELEN-1);                                <<U.RAO>>07600000
                                                               <<U.RAO>>07602000
                                                               <<U.RAO>>07604000
MYCOMMAND(PARMSP,DL,3,NUMPARMS,PARMS);                         <<U.RAO>>07606000
IF NUMPARMS > 2 THEN                                           <<U.RAO>>07608000
   BEGIN                                                       <<U.RAO>>07610000
   PARMNUM := 3;                                               <<U.RAO>>07612000
   CIERR(ERRNUM := JOBPRI2MP,BADPARM);                         <<U.RAO>>07614000
   END                                                         <<U.RAO>>07616000
ELSE                                                           <<U.RAO>>07618000
   BEGIN                                                       <<U.RAO>>07620000
   <<0, 1, OR 2 PARAMETERS.  IF PARAMETERS ARE PASSED, VALIDATE<<U.RAO>>07622000
   <<IF INVALID, PRINT MESSAGE AND RETURN.  OTHERWISE, IF PARAM<<U.RAO>>07624000
   <<PASSED, SET THE NEW VALUES.  IN ANY CASE, PRINT THE NEW VA<<U.RAO>>07626000
   NEWMAXQ := ABSOLUTE(MAXQUEUE);                              <<U.RAO>>07628000
   NEWDEFQ := ABSOLUTE(DEFAULTQUEUE);                          <<U.RAO>>07630000
   MOVE QNAME := QNAMEP, (QNAMELEN);  <<INIT NAME ARRAY>>      <<U.RAO>>07632000
   IF NUMPARMS >= 1 THEN                                       <<U.RAO>>07634000
      BEGIN  <<SOME PARMS EXIST>>                              <<U.RAO>>07636000
      IF LENMAXQPARM > 0 THEN                                 <<U.RAO>> 07638000
         BEGIN  <<MAX QUEUE PARM PRESENT>>                     <<U.RAO>>07640000
         TOS := 0;                                             <<U.RAO>>07642000
         IF SEARCH(BMAXQ,LENMAXQPARM,QNAME,BPS0) = 0 THEN      <<U.RAO>>07644000
            BEGIN <<UNKNOWN QUEUE NAME>>                       <<U.RAO>>07646000
            PARMNUM := 1;                                      <<U.RAO>>07648000
            CIERR(ERRNUM := JOBPRIUNKNOWNQ, BMAXQ);            <<U.RAO>>07650000
            RETURN                                             <<U.RAO>>07652000
            END;                                               <<U.RAO>>07654000
         NEWMAXQ := INTEGER(BPS0);                             <<U.RAO>>07656000
         DEL;                                                  <<U.RAO>>07658000
         END;                                                  <<U.RAO>>07660000
      IF (NUMPARMS=2) AND (LENDEFQPARM>0) THEN                 <<U.RAO>>07662000
         BEGIN <<DEFAULT QUEUE PARM APPARENTLY PRESENT>>       <<U.RAO>>07664000
         TOS := 0;                                             <<U.RAO>>07666000
         IF SEARCH(BDEFQ,LENDEFQPARM,QNAME,BPS0) = 0 THEN      <<U.RAO>>07668000
            BEGIN  <<UNKNOWN QUEUE NAME>>                      <<U.RAO>>07670000
            PARMNUM := 2;                                      <<U.RAO>>07672000
            CIERR(ERRNUM := JOBPRIUNKNOWNQ, BDEFQ);            <<U.RAO>>07674000
            RETURN                                             <<U.RAO>>07676000
            END;                                               <<U.RAO>>07678000
         IF BPS0 = 0 THEN                                      <<U.RAO>>07680000
            BEGIN <<0 ILLEGAL FOR DEFAULT QUEUE>>              <<U.RAO>>07682000
            CIERR(ERRNUM := -JOBPRIWARNNOT0, BDEFQ);           <<04790>>07684000
            NEWDEFQ := CS;                                     <<U.RAO>>07686000
            END                                                <<U.RAO>>07688000
         ELSE                                                  <<U.RAO>>07690000
            NEWDEFQ := INTEGER(BPS0);                          <<U.RAO>>07692000
         DEL;                                                  <<U.RAO>>07694000
         END;                                                  <<U.RAO>>07696000
      IF NEWDEFQ < NEWMAXQ THEN                                <<U.RAO>>07698000
         BEGIN                                                 <<U.RAO>>07700000
         <<DEFAULT PRIORITY HAS LOWER VALUE AND THUS EXCEEDS TH<<U.RAO>>07702000
         <<IMPOSED BY THE MAXQ PRIORITY.  PRINT ERROR MSG, RETU<<U.RAO>>07704000
         IF NEWDEFQ + NEWMAXQ < CS+ES THEN                     <<U.RAO>>07706000
            CIERR(ERRNUM := JOBPRIDEFCSMAXDS)                  <<04790>>07708000
         ELSE IF = THEN                                        <<U.RAO>>07710000
            CIERR(ERRNUM := JOBPRIDEFCSMAXES)                  <<04790>>07712000
         ELSE                                                  <<U.RAO>>07714000
            CIERR(ERRNUM := JOBPRIDEFDSMAXES);                 <<04790>>07716000
         RETURN                                                <<U.RAO>>07718000
         END;                                                  <<U.RAO>>07720000
      END;                                                     <<U.RAO>>07722000
   <<AT THIS POINT WE HAVE GOOD VALUES.  IT REMAINS TO SET THE <<U.RAO>>07724000
   <<GLOBALS, PRINT THE CURRENT (NEW) VALUES, THEN RETURN>>    <<U.RAO>>07726000
   ABSOLUTE(MAXQUEUE) := NEWMAXQ;                              <<U.RAO>>07728000
   ABSOLUTE(DEFAULTQUEUE) := NEWDEFQ;                          <<U.RAO>>07730000
   QNAME(4) := QNAME(9) := QNAME(14) := 0;  <<FOR GENMSG>>     <<U.RAO>>07732000
   @BMAXQ := (IF NEWMAXQ > DS THEN @QNAME(12)                  <<U.RAO>>07734000
         ELSE IF = THEN @QNAME(7)                              <<U.RAO>>07736000
         ELSE IF NEWMAXQ > 0 THEN @QNAME(2)                    <<U.RAO>>07738000
         ELSE @QNAME(17));                                     <<U.RAO>>07740000
   @BDEFQ := (IF NEWDEFQ > DS THEN @QNAME(12)                  <<U.RAO>>07742000
         ELSE IF = THEN @QNAME(7)                              <<U.RAO>>07744000
         ELSE @QNAME(2));                                      <<U.RAO>>07746000
   GENMSG( CIGENERALMSGSET, JOBPRIVAL, 0, @BMAXQ, @BDEFQ );    <<01525>>07748000
   END;                                                        <<U.RAO>>07750000
END;  <<CXJOBPRI>>                                             <<U.RAO>>07752000
$PAGE   "ORGANIZATIONAL MANAGEMENT COMMANDS"                            07754000
$CONTROL SEGMENT= CIORGMAN                                              07756000
INTEGER PROCEDURE CHECK'N'MOVENAME (SOURCE,SLNGTH,             <<RV.PV>>07758000
                             TARGET,TARGETINCRDECR,MAXPARTS);  <<RV.PV>>07760000
    VALUE   SLNGTH,TARGETINCRDECR,MAXPARTS;                    <<RV.PV>>07762000
    INTEGER SLNGTH,TARGETINCRDECR,MAXPARTS;                    <<RV.PV>>07764000
    BYTE ARRAY SOURCE;                                         <<RV.PV>>07766000
    ARRAY TARGET;                                              <<RV.PV>>07768000
    OPTION PRIVILEGED, UNCALLABLE;                             <<04.RO>>07770000
    BEGIN                                                      <<RV.PV>>07772000
        BYTE ARRAY                                             <<RV.PV>>07774000
            STRING (0:SLNGTH);                                 <<RV.PV>>07776000
        DOUBLE ARRAY                                           <<RV.PV>>07778000
            PARMS (0:MAXPARTS);                                <<RV.PV>>07780000
        DOUBLE                                                 <<RV.PV>>07782000
            PARM;                                              <<RV.PV>>07784000
        INTEGER                                                <<RV.PV>>07786000
            RESULT = CHECK'N'MOVENAME,                         <<RV.PV>>07788000
            NUMPARMS,                                          <<RV.PV>>07790000
            PARM0 = PARM,                                      <<RV.PV>>07792000
            DL := [8/".", 8/%15],                              <<RV.PV>>07794000
            PNUM := 0;                                         <<RV.PV>>07796000
        LOGICAL                                                <<RV.PV>>07798000
            PARM1 = PARM0+1;                                   <<RV.PV>>07800000
        BYTE POINTER                                           <<RV.PV>>07802000
            HERE = PARM0;                                      <<RV.PV>>07804000
        DEFINE                                                 <<RV.PV>>07806000
            BADEXIT = BEGIN                                    <<RV.PV>>07808000
                          CC := CCL;                           <<RV.PV>>07810000
                          RETURN;                              <<RV.PV>>07812000
                      END #,                                   <<RV.PV>>07814000
            LNGTH = PARM1.(0:8) #,                             <<RV.PV>>07816000
            SPEC = PARM1.(10:1) #;                             <<RV.PV>>07818000
        EQUATE                                                 <<RV.PV>>07820000
            EXPECTALPHA = 0, <<START OF NAME MUST BE ALPHA>>   <<RV.PV>>07822000
            SPECHAR     = 1, <<CONTAINS SPEC CHAR(S)>>         <<RV.PV>>07824000
            NAMETOOLONG = 2; <<EXCEEDS 8 BYTES>>               <<RV.PV>>07826000
<<>>                                                           <<RV.PV>>07828000
        CC := CCE; <<OK UNTIL FAILURE>>                        <<RV.PV>>07830000
        MOVE STRING := SOURCE, (SLNGTH);                       <<RV.PV>>07832000
        STRING (SLNGTH) := %15;                                <<RV.PV>>07834000
        MYCOMMAND (STRING,DL,MAXPARTS,NUMPARMS,PARMS);         <<RV.PV>>07836000
        IF > THEN                                              <<RV.PV>>07838000
        BEGIN                                                  <<RV.PV>>07840000
            RESULT := NAMETOOLONG;                             <<RV.PV>>07842000
            BADEXIT;                                           <<RV.PV>>07844000
        END;                                                   <<RV.PV>>07846000
        IF NUMPARMS = 0 THEN RETURN;                           <<RV.PV>>07848000
        DO BEGIN                                               <<RV.PV>>07850000
               PARM := PARMS (PNUM);                           <<RV.PV>>07852000
               IF HERE <> ALPHA THEN                           <<RV.PV>>07854000
                IF LNGTH = 1 AND PNUM=0 AND HERE = "@" THEN    <<RV.PV>>07856000
                ELSE                                           <<RV.PV>>07858000
                BEGIN                                          <<RV.PV>>07860000
                    RESULT := EXPECTALPHA;                     <<RV.PV>>07862000
                    BADEXIT;                                   <<RV.PV>>07864000
                END                                            <<RV.PV>>07866000
               ELSE                                            <<RV.PV>>07868000
                IF SPEC THEN                                   <<RV.PV>>07870000
                BEGIN                                          <<RV.PV>>07872000
                    RESULT := SPECHAR;                         <<RV.PV>>07874000
                    BADEXIT;                                   <<RV.PV>>07876000
                END                                            <<RV.PV>>07878000
                ELSE                                           <<RV.PV>>07880000
                 IF LNGTH > 8 THEN                             <<RV.PV>>07882000
                  BEGIN                                        <<RV.PV>>07884000
                     RESULT := NAMETOOLONG;                    <<RV.PV>>07886000
                     BADEXIT;                                  <<RV.PV>>07888000
                 END;                                          <<RV.PV>>07890000
               TOS := @TARGET & LSL (1);                       <<RV.PV>>07892000
               MOVE * := HERE, (LNGTH);                        <<RV.PV>>07894000
               @TARGET := @TARGET + TARGETINCRDECR;            <<RV.PV>>07896000
           END UNTIL (PNUM:=PNUM+1) = NUMPARMS;                <<RV.PV>>07898000
        RESULT := NUMPARMS;                                    <<RV.PV>>07900000
    END;<<OF CHECK'N'MOVENAME>>                                <<RV.PV>>07902000
LOGICAL PROCEDURE CYORGCOMS'(ERRNUM,PARMNUM,IMAGE,LEVEL,NEWENTRY,       07904000
                             VSCOMM,SPECMASK);                 <<RV.PV>>07906000
<<THIS PROCEDURE PARSES THE PARAMETER LIST SUPPLIED WITH :NEWXXXX>>     07908000
<<AND :ALTXXX COMMANDS FOR ACCOUNTS, GROUPS AND USERS.  ALL DETECTED>>  07910000
<<ERRORS ARE REPORTED IN THIS PROCEDURE.  A RETURN VALUE OF TRUE>>      07912000
<<INDICATES THAT NO ERRORS WERE DETECTED.>>                    <<U.RAO>>07914000
VALUE LEVEL;                                                   <<U.RAO>>07916000
INTEGER ERRNUM;  <<THE USUAL ERRNUM>>                          <<U.RAO>>07918000
INTEGER PARMNUM; <<THE USUAL PARMNUM>>                         <<U.RAO>>07920000
BYTE ARRAY IMAGE;  <<THE PARAMETER IMAGE TO BE PARSED>>        <<U.RAO>>07922000
INTEGER LEVEL;  <<THE LEVEL OF OPERATION - 1=G,2=A,3=U>>       <<U.RAO>>07924000
INTEGER ARRAY NEWENTRY;  <<WHERE THE PARSED INFO IS TO GO>>    <<U.RAO>>07926000
ARRAY VSCOMM;  <<SUPPLIED BY :XXXACCT & :XXXGROUP COMMANDS>>   <<RV.PV>>07928000
ARRAY SPECMASK;   <<THIS IS SUPPLIED BY :ALTXXX COMMANDS.  >>  <<RV.PV>>07930000
  <<IT INDICATES EVERY WORD OF NEWENTRY WHICH WAS SUPPLIED BY THE USER>>07932000
   <<THIS IS SO THAT ONLY CHANGED ITEMS ARE ENTERED IN THE DIRECTORY>>  07934000
OPTION VARIABLE,PRIVILEGED,UNCALLABLE;                         <<U.RAO>>07936000
                                                               <<U.RAO>>07938000
BEGIN                                                          <<U.RAO>>07940000
<<MYCOMMAND VARIABLES>>                                        <<U.RAO>>07942000
INTEGER NUMPARMS;  <<ACTUAL NUMBER OF PARMS DETECTED>>         <<U.RAO>>07944000
DOUBLE ARRAY PARMS(0:70);  <<APPROXIMATE MAXIMUM ON POSSIBLE PARMS>>    07946000
DOUBLE DL := [8/";",8/"=",8/",",8/":"]D;                       <<U.RAO>>07948000
LOGICAL DLEXTENSION := %6400;  <<CARRIAGE RETURN>>             <<U.RAO>>07950000
EQUATE SEMICOLON=0,   <<INDEXES IN THE DL ARRAY>>              <<U.RAO>>07952000
       EQUALS   =1,                                            <<U.RAO>>07954000
       COMMA    =2,                                            <<U.RAO>>07956000
       COLON    =3,                                            <<U.RAO>>07958000
       CR       =4;                                            <<U.RAO>>07960000
<<VARIABLES FOR GLOBAL PARSE>>                                 <<U.RAO>>07962000
DEFINE GROUP = LEVEL=GROUPLEVEL#,                              <<U.RAO>>07964000
       ACCOUNT = LEVEL=ACCOUNTLEVEL#,                          <<U.RAO>>07966000
       USER = LEVEL=USERLEVEL#;                                <<U.RAO>>07968000
INTEGER NEXTDELIM;  <<HOLDS DL INDEX OF NEXT DELIMITER>>       <<U.RAO>>07970000
BYTE POINTER PARMPTR;  <<POINTS TO START OF CURRENT PARAMETER>>         07972000
INTEGER PARMLEN;    <<LENGTH OF CURRENT PARAMETER>>            <<U.RAO>>07974000
LOGICAL EMBEDDEDSPECIAL;  <<FOR CHECKING NAMES FOR SPECIALS>>  <<U.RAO>>07976000
DEFINE RESULTADR= INTEGER(DEFN(LEVEL))#;  <<OFFSET IN NEWENTRY><<U.RAO>>07978000
BYTE POINTER DEFN;  <<POINTS INTO KEYDICT DEFN ARRAY>>         <<U.RAO>>07980000
ARRAY TEMPSPECMASK (0:SPECMASKLN-1);                           <<RV.PV>>07982000
<<MISC VARIABLES>>                                             <<U.RAO>>07984000
BYTE POINTER BNEWENTRY := @NEWENTRY;                           <<U.RAO>>07986000
DOUBLE POINTER GSECURITY := @NEWENTRY(GSEC);                   <<U.RAO>>07988000
INTEGER ACCTSECDEF := [2/1,2/1,2/1,2/1,2/1,2/1];               <<01.RO>>07990000
DOUBLE GROUPSECDEF := [5/2,5/2,5/2,5/2,5/2,5/2]D;              <<01.RO>>07992000
BYTE ARRAY                                                     <<RV.PV>>07994000
    BVSHANAME (*) = VSCOMM (VSHANAME),                         <<RV.PV>>07996000
    BVSHGNAME (*) = VSCOMM (VSHGNAME);                         <<RV.PV>>07998000
EQUATE UNOTDBL = 0,  <<USER NOT ALLOWED DOUBLE INTEGER>>       <<U.RAO>>08000000
       DBLINVALID = 1,  <<PROBLEM WITH STRING>>                <<U.RAO>>08002000
       DBLNEG  = 2,  <<DOUBLE INTEGER IS NEGATIVE>>            <<U.RAO>>08004000
       REDUNDANT = 3,<<REDUNDANTLY DEFINED KEYWORD>>           <<U.RAO>>08006000
       EXPECTALPHA = 1, <<START OF NAME MUST BE ALPHA>>        <<U.RAO>>08008000
       NAMEMISSING = 2, <<EXPECTED NAME>>                      <<U.RAO>>08010000
       NAMETOOLONG = 3,  <<EXCEEDS 8 BYTES>>                   <<U.RAO>>08012000
       EMBEDSPEC = 5;  <<EMBEDDED SPECIAL IN NAME>>            <<U.RAO>>08014000
BYTE POINTER CAPDEFN;  <<POINTER TO DEFINITION WORD OF CAPDICT><<U.RAO>>08016000
LOGICAL PMASK = Q-4;  <<OPTION VARIABLE WORD>>                 <<U.RAO>>08018000
DOUBLE SEC;  <<THE SECURITY WORD DUMMY>>                       <<U.RAO>>08020000
INTEGER SEC1 = SEC;  <<USED FOR GROUP SECURITY>>               <<U.RAO>>08022000
LOGICAL VSPARMACCT; << TRUE IF VS= PARM ON XXXACCT COMMAND >>  <<01460>>08024000
INTEGER ADJUST;<<USED FOR CAPABILITY LIST PARSE>>              <<U.RAO>>08026000
EQUATE CAPDICTLEN = 91;                                        <<00506>>08028000
BYTE ARRAY CAPDICTX(0:CAPDICTLEN-1) = PB :=                    <<U.RAO>>08030000
   <<DEFINITION PART IS BIT POSITION IN CAP MATRIX>>           <<U.RAO>>08032000
   5,2,"SF",15,                                                <<U.RAO>>08034000
   5,2,"ND",14,                                                <<U.RAO>>08036000
   5,2,"CS",13,                                                <<U.RAO>>08038000
   5,2,"BA",23,                                                <<U.RAO>>08040000
   5,2,"IA",24,                                                <<U.RAO>>08042000
   5,2,"PM",25,                                                <<U.RAO>>08044000
   5,2,"MR",28,                                                <<U.RAO>>08046000
   5,2,"DS",30,                                                <<U.RAO>>08048000
   5,2,"PH",31,                                                <<U.RAO>>08050000
   5,2,"UV",7,                                                 <<RH.PV>>08052000
   5,2,"CV",6,                                                 <<RH.PV>>08054000
   5,2,"OP",5,                                                 <<U.RAO>>08056000
   5,2,"DI",4,                                                 <<U.RAO>>08058000
   5,2,"GL",3,                                                 <<U.RAO>>08060000
   5,2,"AL",2,                                                 <<U.RAO>>08062000
   5,2,"AM",1,                                                 <<U.RAO>>08064000
   5,2,"SM",0,                                                 <<U.RAO>>08066000
   5,2,"LG",8,                                                 <<00506>>08068000
   0;                                                          <<U.RAO>>08070000
BYTE ARRAY CAPDICT(0:CAPDICTLEN-1);                            <<U.RAO>>08072000
EQUATE SUBQLEN = 21;                                           <<U.RAO>>08074000
BYTE ARRAY SUBQX(0:SUBQLEN-1) = PB :=                          <<U.RAO>>08076000
   4,2,"ES",                                                   <<U.RAO>>08078000
   4,2,"DS",                                                   <<U.RAO>>08080000
   4,2,"CS",                                                   <<U.RAO>>08082000
   4,2,"BS",                                                   <<U.RAO>>08084000
   4,2,"AS",                                                   <<U.RAO>>08086000
   0;                                                          <<U.RAO>>08088000
BYTE ARRAY SUBQA(0:SUBQLEN-1);                                 <<U.RAO>>08090000
   EQUATE            KEYDICTL          = 117;                  <<RV.PV>>08092000
   BYTE ARRAY        KEYDICTX (0:KEYDICTL-1) = PB :=           <<01.PV>>08094000
         10, 4, "PASS", 4, GPASS,APASS,UPASS,                  <<01.PV>>08096000
         11, 5, "FILES", 2, GDFSLIMIT,ADFSLIMIT,"X",           <<01.PV>>08098000
         9, 3, "CPU", 2, GCPULIMIT,ACPULIMIT,"X",              <<01.PV>>08100000
         13, 7, "CONNECT", 2, GCONTIMELIMIT,ACONTIMELIMIT,"X", <<01.PV>>08102000
         <<LEN=2 FOR A & U>>                                   <<01.PV>>08104000
         9,3,"CAP",1,GCAP,ACAP,UCAP,                           <<01.PV>>08106000
         <<LEN=2 FOR G>>                                       <<01.PV>>08108000
         12,6,"ACCESS",1,GSEC,ASECW,"X",                       <<01.PV>>08110000
         12, 6, "MAXPRI", 1, "X", AMAXJOBW,UMAXJOB,            <<01.PV>>08112000
         13, 7, "LOCATTR", 2, "X",ALATTR,ULATTR,               <<01.PV>>08114000
         8, 2, "VS",12,GHVSNAME,"X","X",                       <<01460>>08116000
         10, 4, "HOME", 4, "X","X",UHGROUP,                    <<01.PV>>08118000
              0,0,0;                                           <<P.RAO>>08120000
   BYTE ARRAY        KEYDICT (0:KEYDICTL-1);                   <<01.PV>>08122000
   EQUATE            SUBKEYDICTL          = 14;                <<00086>>08124000
   BYTE ARRAY        SUBKEYDICTX (0:SUBKEYDICTL-1) = PB :=     <<RV.PV>>08126000
         6, 4, "SPAN",                                         <<00086>>08128000
         5, 3, "ALT",                                          <<00086>>08130000
              0,0,0;                                           <<RV.PV>>08132000
   BYTE ARRAY        SUBKEYDICT (0:SUBKEYDICTL-1);             <<RV.PV>>08134000
DEFINE MAX = 32767,-1#;                                        <<U.RAO>>08136000
   INTEGER ARRAY     INITIALGROUP (0:GSIZE-1) = PB :=          <<01.PV>>08138000
                                       "        ",             <<U.RAO>>08140000
                                       0,                      <<U.RAO>>08142000
                                       "        ",             <<U.RAO>>08144000
                                       0, 0,                   <<U.RAO>>08146000
                                       MAX,                    <<U.RAO>>08148000
                                       0, 0,                   <<U.RAO>>08150000
                                       MAX,                    <<U.RAO>>08152000
                                       0, 0,                   <<U.RAO>>08154000
                                       MAX,                    <<U.RAO>>08156000
                                       [5/2,5/2,4/1],          <<U.RAO>>08158000
                                       [1/0,5/2,5/2,5/2],      <<U.RAO>>08160000
                                       [6/0, 10/%(2)0110000000],        08162000
                                       0, 0,                   <<01.PV>>08164000
                                       "        ",             <<01.PV>>08166000
                                       "        ",             <<01.PV>>08168000
                                       "        ",             <<01.PV>>08170000
                                       0, 0, 0;                <<16.PV>>08172000
   INTEGER ARRAY     INITIALACCT (0:ASIZE-1) = PB :=           <<01460>>08174000
                                       "        ",             <<U.RAO>>08176000
                                       0,                      <<U.RAO>>08178000
                                       0,                      <<U.RAO>>08180000
                                       [7/%(2)0111000,7/0,2/%(2)11],    08182000
                                       [6/0, 10/%(2)0110000000],        08184000
                                       0, 0,                   <<U.RAO>>08186000
                                       "        ",             <<U.RAO>>08188000
                                       0, 0,                   <<U.RAO>>08190000
                                       MAX,                    <<U.RAO>>08192000
                                       0, 0,                   <<U.RAO>>08194000
                                       MAX,                    <<U.RAO>>08196000
                                       0, 0,                   <<U.RAO>>08198000
                                       MAX,                    <<U.RAO>>08200000
                                       [2/1,2/1,2/1,2/1,2/1,   <<U.RAO>>08202000
                                        2/1],                  <<U.RAO>>08204000
                                       150,    <<"CS">>        <<U.RAO>>08206000
                                       0,                      <<U.RAO>>08208000
                                       0;                      <<01460>>08210000
   INTEGER ARRAY     INITIALUSER (0:USIZE-1) = PB :=           <<01.PV>>08212000
                                       "        ",             <<U.RAO>>08214000
                                       [7/0,7/0,2/%(2)11],     <<U.RAO>>08216000
                                       [6/0, 10/%(2)0110000000],        08218000
                                       0, 0,                   <<U.RAO>>08220000
                                       "        ",             <<U.RAO>>08222000
                                       "        ",             <<U.RAO>>08224000
                                       0,                      <<U.RAO>>08226000
                                       150,    <<"CS">>        <<U.RAO>>08228000
                                       0;                      <<U.RAO>>08230000
                                                               <<U.RAO>>08232000
<<                 *********************                   >>  <<U.RAO>>08234000
<<                 *    SETSPECMASK    *                   >>  <<U.RAO>>08236000
<<                 *********************                   >>  <<U.RAO>>08238000
                                                               <<U.RAO>>08240000
LOGICAL SUBROUTINE SETSPECMASK(COUNT);                         <<U.RAO>>08242000
VALUE COUNT;                                                   <<U.RAO>>08244000
INTEGER COUNT;  <<NUMBER OF WORDS IN ITEM>>                    <<U.RAO>>08246000
<<THIS SUBROUTINE SETS THE BITS IN SPECMASK CORRESPONDING>>    <<U.RAO>>08248000
<<TO THE NEW ITEMS IN NEWENTRY.  IT RETURNS FALSE IF THOSE>>   <<U.RAO>>08250000
<<BITS WERE ALREADY SET, INDICATING REDUNDANTLY DEFINED KEYWORD<<U.RAO>>08252000
BEGIN                                                          <<U.RAO>>08254000
SETSPECMASK := TRUE;  <<NOT REDUNDANTLY DEFINED ITEM>>         <<U.RAO>>08256000
TOS := DEFN (LEVEL);  <<DISPLACEMENT WITHIN ENTRY>>            <<RV.PV>>08258000
DO BEGIN  <<UNTIL COUNT IS 0>>                                 <<RV.PV>>08260000
       TOS := S0 & LSR (4); <<DISPL DIV 16>>                   <<RV.PV>>08262000
       TOS := TEMPSPECMASK (S0); <<APPROPRIATE MASK WORD>>     <<RV.PV>>08264000
       X := LS2 LAND %17; <<DISPL MOD 16>>                     <<RV.PV>>08266000
       ASSEMBLE (TSBC 0,X); <<SET APPROPRIATE BIT>>            <<RV.PV>>08268000
       IF <> THEN S5 := 0; <<SETSPECMASK := 0>>                <<RV.PV>>08270000
       ASSEMBLE (XCH, STAX);                                   <<RV.PV>>08272000
       TEMPSPECMASK (X) := TOS; <<UPDATE MASK WORD>>           <<RV.PV>>08274000
       TOS := TOS+1;  <<INCREM DISPL>>                         <<RV.PV>>08276000
   END UNTIL (S2 := S2-1) = 0;                                 <<RV.PV>>08278000
DEL; <<DISPL>>                                                 <<RV.PV>>08280000
END;  <<SUBROUTINE SETSPECMASK>>                               <<U.RAO>>08282000
                                                               <<U.RAO>>08284000
<<                 *********************                   >>  <<U.RAO>>08286000
<<                 *       NEXT        *                   >>  <<U.RAO>>08288000
<<                 *********************                   >>  <<U.RAO>>08290000
                                                               <<U.RAO>>08292000
SUBROUTINE NEXT;                                               <<U.RAO>>08294000
<<THIS SUBROUTINE SIMPLY DECOMPOSES THE DATA RETURNED BY>>     <<U.RAO>>08296000
<<MYCOMMAND INTO INDIVIDUAL ITEMS FOR THE NEXT PARAMETER>>     <<U.RAO>>08298000
BEGIN                                                          <<U.RAO>>08300000
TOS := PARMS(PARMNUM);                                         <<U.RAO>>08302000
EMBEDDEDSPECIAL := S0.(10:1);                                  <<U.RAO>>08304000
NEXTDELIM := S0.(11:5);                                        <<U.RAO>>08306000
PARMLEN := TOS&LSR(8);                                         <<U.RAO>>08308000
@PARMPTR := TOS;                                               <<U.RAO>>08310000
PARMNUM := PARMNUM+1;                                          <<U.RAO>>08312000
END;  <<SUBROUTINE NEXT>>                                      <<U.RAO>>08314000
                                                               <<U.RAO>>08316000
<<                 *********************                   >>  <<U.RAO>>08318000
<<                 *     CHECKNAME     *                   >>  <<U.RAO>>08320000
<<                 *********************                   >>  <<U.RAO>>08322000
                                                               <<U.RAO>>08324000
LOGICAL SUBROUTINE CHECKNAME(DELTA,TARGET,MISSINGOK);          <<U.RAO>>08326000
VALUE MISSINGOK,DELTA;                                         <<U.RAO>>08328000
INTEGER DELTA; <<ERROR DELTA CONVERTS COMMON ERRORS INTO DETAILED>>     08330000
LOGICAL ARRAY TARGET;  <<WHERE THE RESULTING STRING GOES. 4 WORDS>>     08332000
LOGICAL MISSINGOK;  <<TRUE => NULL STRING OK, SUCH AS HOME=;>> <<U.RAO>>08334000
<<THIS SUBROUTINE PARSES UP TO 8 CHARACTERS AS A NAME OF SOME>><<U.RAO>>08336000
<<SORT.  IF VALID, THE NAME IS MOVED INTO TARGET.  IF ERROR,>> <<U.RAO>>08338000
<<CALL CIERR, RETURN FALSE>>                                   <<U.RAO>>08340000
BEGIN                                                          <<U.RAO>>08342000
CHECKNAME := FALSE;                                            <<U.RAO>>08344000
IF PARMLEN=0 THEN                                              <<U.RAO>>08346000
   IF NOT MISSINGOK THEN                                       <<U.RAO>>08348000
      CIERR(ERRNUM:=NAMEMISSING+DELTA,PARMPTR)                 <<U.RAO>>08350000
   ELSE  <<OK FOR IT TO BE MISSING>>                           <<U.RAO>>08352000
      BEGIN  <<RETURN BLANKS, RETURN TRUE>>                    <<U.RAO>>08354000
      CHECKNAME := TRUE;                                       <<U.RAO>>08356000
      MOVE TARGET := "        ";                               <<U.RAO>>08358000
      END                                                      <<U.RAO>>08360000
ELSE IF PARMPTR <> ALPHA THEN                                  <<U.RAO>>08362000
   CIERR(ERRNUM := EXPECTALPHA+DELTA,PARMPTR)                  <<U.RAO>>08364000
ELSE IF PARMLEN > 8 THEN                                       <<U.RAO>>08366000
   CIERR(ERRNUM := NAMETOOLONG+DELTA,PARMPTR)                  <<U.RAO>>08368000
ELSE IF EMBEDDEDSPECIAL THEN                                   <<U.RAO>>08370000
   CIERR(ERRNUM := EMBEDSPEC+DELTA, PARMPTR)                   <<U.RAO>>08372000
ELSE                                                           <<U.RAO>>08374000
   BEGIN  <<LOOKS LIKE LEGAL NAME>>                            <<U.RAO>>08376000
   MOVE TARGET := "        ";                                  <<U.RAO>>08378000
   TOS := @TARGET&LSL(1);  <<MAKE BYTE ADDRESS>>               <<U.RAO>>08380000
   MOVE * := PARMPTR,(PARMLEN);                                <<U.RAO>>08382000
   CHECKNAME := TRUE;                                          <<U.RAO>>08384000
   END;                                                        <<U.RAO>>08386000
END;  <<SUBROUTINE CHECKNAME>>                                 <<U.RAO>>08388000
                                                               <<U.RAO>>08390000
<<                 *********************                   >>  <<U.RAO>>08392000
<<                 *   DOACCESSLIST    *                   >>  <<U.RAO>>08394000
<<                 *********************                   >>  <<U.RAO>>08396000
                                                               <<U.RAO>>08398000
SUBROUTINE DOACCESSLIST;                                       <<U.RAO>>08400000
BEGIN                                                          <<U.RAO>>08402000
IF USER THEN                                                   <<U.RAO>>08404000
   BEGIN  <<NOT VALID OPTION FOR USER - WARN AND IGNORE>>      <<U.RAO>>08406000
   CIERR(ERRNUM := -ORGCOMUNOTACCESS,PARMPTR);                 <<04790>>08408000
   NEXT;  <<SKIP TO START OF ACCESS LIST>>                     <<U.RAO>>08410000
   IF PARMLEN <> 0 THEN  <<NON-NULL ACCESS LIST, ATTEMPT RECOVERY>>     08412000
      BEGIN                                                    <<U.RAO>>08414000
      FORMACCESS'(LEVEL,PARMPTR,SEC,ADJUST,ERRNUM);  <<TO SKIP LIST>>   08416000
      PARMNUM := PARMNUM+ADJUST-2;                             <<U.RAO>>08418000
      END                                                      <<U.RAO>>08420000
   ELSE PARMNUM := PARMNUM-1;                                  <<U.RAO>>08422000
   END                                                         <<U.RAO>>08424000
ELSE                                                           <<U.RAO>>08426000
   BEGIN                                                       <<U.RAO>>08428000
   NEXT;  <<SKIP TO START OF ACCESS LIST>>                     <<U.RAO>>08430000
   IF PARMLEN <> 0 THEN  <<ACCESS LIST PRESENT EVIDENTLY>>     <<U.RAO>>08432000
      BEGIN                                                    <<U.RAO>>08434000
      TOS := @NEWENTRY(RESULTADR);  <<TO GET DEFAULT FROM NEWENTRY>>    08436000
      SEC := DPS0;                                             <<U.RAO>>08438000
      FORMACCESS'(LEVEL,PARMPTR,SEC,ADJUST,ERRNUM);            <<U.RAO>>08440000
      PARMNUM := ADJUST+PARMNUM-2;                             <<U.RAO>>08442000
      IF ERRNUM > 0 THEN   <<BAIL OUT>>                        <<U.RAO>>08444000
         BEGIN                                                 <<U.RAO>>08446000
         DEL;  <<POP STACKED POINTER>>                         <<U.RAO>>08448000
         RETURN                                                <<U.RAO>>08450000
         END;                                                  <<U.RAO>>08452000
      IF ACCOUNT THEN  <<ONLY 1 WORD MASK>>                    <<U.RAO>>08454000
         BEGIN                                                 <<U.RAO>>08456000
         PS0 := SEC1;                                          <<U.RAO>>08458000
         DEL;                                                  <<U.RAO>>08460000
         END                                                   <<U.RAO>>08462000
      ELSE                                                     <<U.RAO>>08464000
         BEGIN                                                 <<U.RAO>>08466000
         DPS0 := SEC;                                          <<U.RAO>>08468000
         DEL;                                                  <<U.RAO>>08470000
         END;                                                  <<U.RAO>>08472000
      END                                                      <<U.RAO>>08474000
   ELSE  <<NO ACCESS LIST PRESENT, USE DEFAULT>>               <<01.RO>>08476000
      BEGIN                                                    <<01.RO>>08478000
      IF ACCOUNT THEN                                          <<01.RO>>08480000
         NEWENTRY(ASECW) := ACCTSECDEF                         <<01.RO>>08482000
      ELSE                                                     <<01.RO>>08484000
         GSECURITY := GROUPSECDEF;                             <<01.RO>>08486000
      PARMNUM := PARMNUM-1;  <<BACK UP>>                       <<01.RO>>08488000
      END;                                                     <<01.RO>>08490000
   TOS := 0;  <<RETURN SPACE FOR SETSPECMASK>>                 <<U.RAO>>08492000
   IF ACCOUNT THEN TOS := 1 ELSE TOS := 2;  <<# WORDS IN LIST>><<U.RAO>>08494000
   IF NOT SETSPECMASK(*) THEN                                  <<04790>>08496000
         CIERR(ERRNUM := -ORGCOMACCESSRDND,PARMPTR);           <<04790>>08498000
   END;                                                        <<U.RAO>>08500000
NEXT;  <<MOVE POINTERS TO SEMICOLON>>                          <<U.RAO>>08502000
END;  <<DOACCESSLIST>>                                         <<U.RAO>>08504000
                                                               <<U.RAO>>08506000
SUBROUTINE DOMAXPRI;                                           <<U.RAO>>08508000
<<                 *********************                   >>  <<U.RAO>>08510000
<<                 *     DOMAXPRI      *                   >>  <<U.RAO>>08512000
<<                 *********************                   >>  <<U.RAO>>08514000
                                                               <<U.RAO>>08516000
BEGIN                                                          <<U.RAO>>08518000
IF GROUP THEN  <<NOT APPROPRIATE FOR GROUP>>                   <<U.RAO>>08520000
   BEGIN                                                       <<U.RAO>>08522000
   CIERR(-ORGCOMGNOTMAXPRI,PARMPTR);                           <<U.RAO>>08524000
   NEXT                                                        <<U.RAO>>08526000
   END                                                         <<U.RAO>>08528000
ELSE                                                           <<U.RAO>>08530000
   BEGIN                                                       <<U.RAO>>08532000
   NEXT;                                                       <<U.RAO>>08534000
   IF PARMLEN > 0 THEN                                         <<U.RAO>>08536000
      BEGIN                                                    <<U.RAO>>08538000
      MOVE SUBQA := SUBQX,(SUBQLEN);                           <<U.RAO>>08540000
      IF SEARCH(PARMPTR,PARMLEN,SUBQA)=0 THEN                  <<U.RAO>>08542000
         CIERR(ERRNUM := ORGCOMUNKSUBQ,PARMPTR)                <<U.RAO>>08544000
      ELSE                                                     <<U.RAO>>08546000
         BEGIN                                                 <<U.RAO>>08548000
         TOS := SUBQUEUE(4,PARMPTR);  <<GET PRIORITY NUMBER>>  <<U.RAO>>08550000
         TOS := TOS LAND %377;                                 <<U.RAO>>08552000
         NEWENTRY(RESULTADR) := TOS;                           <<U.RAO>>08554000
         DEL;                                                  <<U.RAO>>08556000
         END;                                                  <<U.RAO>>08558000
      END                                                      <<01.RO>>08560000
   ELSE                                                        <<01.RO>>08562000
      NEWENTRY(RESULTADR) := 150;  <<CS>>                      <<01.RO>>08564000
   IF (ERRNUM = 0) AND NOT SETSPECMASK(DEFN) THEN              <<U.RAO>>08566000
      CIERR(ERRNUM := -ORGCOMRDNDMAXPRI);                      <<04790>>08568000
   END;                                                        <<U.RAO>>08570000
END;                                                           <<U.RAO>>08572000
                                                               <<U.RAO>>08574000
<<                 *********************                   >>  <<U.RAO>>08576000
<<                 *     DOCAPLIST     *                   >>  <<U.RAO>>08578000
<<                 *********************                   >>  <<U.RAO>>08580000
                                                               <<U.RAO>>08582000
SUBROUTINE DOCAPLIST;  <<CAPABILITY LIST PARSER>>              <<U.RAO>>08584000
BEGIN                                                          <<U.RAO>>08586000
TOS := PARMS(PARMNUM);                                                  08588000
DELB;  <<POOP POINTER WORD>>                                            08590000
IF (S0.(0:8)=0) AND ((S0.(11:5)=CR) OR (S0.(11:5)=SEMICOLON)) THEN      08592000
   BEGIN  <<USE DEFAULT CAPLIST>>                              <<U.RAO>>08594000
   IF GROUP THEN TOS := 1 ELSE TOS := 2;                       <<U.RAO>>08596000
   IF NOT SETSPECMASK(*) THEN CIERR(ERRNUM:= -ORGCOMRDNDCAPKY);<<04790>>08598000
   NEXT;  <<MOVE TO NEXT KEY ENTRY DELIMITER>>                 <<U.RAO>>08600000
   RETURN                                                      <<U.RAO>>08602000
   END;                                                        <<U.RAO>>08604000
DEL;    <<POP DATA WORD>>                                      <<U.RAO>>08606000
TOS := 0D;  <<TEMP SPACE FOR CAPABILITY MATRIX>>               <<U.RAO>>08608000
MOVE CAPDICT := CAPDICTX,(CAPDICTLEN);                         <<U.RAO>>08610000
DO BEGIN  <<UNTIL NEXTDELIM <> COMMA>>                         <<U.RAO>>08612000
   NEXT; <<GET NEXT CAPABILITY TYPE>>                                   08614000
   IF PARMLEN = 0 THEN   <<EVIDENTLY MISSING>>                 <<U.RAO>>08616000
      CIERR(ERRNUM := -ORGCOMISSINGCAP,PARMPTR)                <<04790>>08618000
   ELSE  <<SOMETHING THERE>>                                   <<U.RAO>>08620000
      BEGIN                                                    <<U.RAO>>08622000
      IF SEARCH(PARMPTR,PARMLEN,CAPDICT,CAPDEFN)=0 THEN        <<U.RAO>>08624000
         BEGIN  <<UNKNOWN PARAMETER>>                          <<U.RAO>>08626000
         DDEL;  <<POP TEMP MATRIX>>                            <<U.RAO>>08628000
         IF GROUP THEN                                         <<07.RO>>08630000
            CIERR(ERRNUM := ORGCOMUNKGCAP,PARMPTR)             <<07.RO>>08632000
         ELSE  <<USER OR ACCOUNT>>                             <<07.RO>>08634000
            CIERR(ERRNUM := ORGCOMUNKCAP, PARMPTR);            <<07.RO>>08636000
         RETURN                                                <<U.RAO>>08638000
         END;                                                  <<U.RAO>>08640000
      X := CAPDEFN;  <<BIT POSITION IN MATRIX>>                <<U.RAO>>08642000
      IF X < 16 THEN  <<IN ATTRIBUTES WORD>>                   <<U.RAO>>08644000
         BEGIN                                                 <<U.RAO>>08646000
         IF GROUP THEN CIERR(ERRNUM:=-ORGCOMCAPCONTXT,PARMPTR);<<04790>>08648000
         ASSEMBLE(XCH);  <<PUT ATTRIBUTES WORD ON TOS>>        <<U.RAO>>08650000
         END;                                                  <<U.RAO>>08652000
      ASSEMBLE(TSBC 0,X);                                      <<U.RAO>>08654000
      IF <> THEN CIERR(ERRNUM := -ORGCOMREDUNDCAP,PARMPTR);    <<04790>>08656000
      IF X < 16 THEN                                           <<00263>>08658000
      BEGIN                                                    <<00263>>08660000
          ASSEMBLE (XCH); <<PUT ATTRIBUTES WORD BACK>>         <<00263>>08662000
      END;                                                     <<00263>>08664000
      END;                                                     <<U.RAO>>08666000
   END UNTIL NEXTDELIM <> COMMA;                               <<U.RAO>>08668000
ASSEMBLE(XCH);                                                 <<02373>>08670000
IF LS0.(6:1) THEN << IF CV >>                                  <<02373>>08672000
   LS0.(7:1) := TRUE; << GIVE UV ALSO >>                       <<02373>>08674000
ASSEMBLE(XCH);                                                 <<02373>>08676000
IF DS1 = 0D THEN   <<NO CAPS SPECIFIED, TAKE DEFAULT>>         <<U.RAO>>08678000
   BEGIN                                                       <<U.RAO>>08680000
   IF GROUP THEN TOS := TOS+1 ELSE TOS := TOS+2;  <<TRICK>>    <<U.RAO>>08682000
   IF NOT SETSPECMASK(*) THEN CIERR(ERRNUM :=-ORGCOMRDNDCAPKY);<<04790>>08684000
   RETURN                                                      <<U.RAO>>08686000
   END;                                                        <<U.RAO>>08688000
IF NOT (GROUP) AND (S0.(7:2)=FALSE) THEN                       <<U.RAO>>08690000
   BEGIN  <<NEITHER IA NOR BA SPECIFIED>>                      <<U.RAO>>08692000
   IF ACCOUNT THEN CIERR(ERRNUM := -ORGCOMFORCAIABA)           <<04790>>08694000
   ELSE CIERR(ERRNUM := -ORGCOMFORCUIABA);                     <<04790>>08696000
   TOS.(7:2) := TRUE;                                          <<U.RAO>>08698000
   END;                                                        <<U.RAO>>08700000
IF GROUP THEN  <<ONLY 1 WORD>>                                 <<U.RAO>>08702000
   BEGIN                                                       <<U.RAO>>08704000
   NEWENTRY(RESULTADR) := TOS;                                 <<U.RAO>>08706000
   DEL;                                                        <<U.RAO>>08708000
                       << REDUNDANT >>                         <<04790>>08710000
   IF NOT SETSPECMASK(1) THEN CIERR(ERRNUM := -ORGCOMRDNDCAPKY)<<04790>>08712000
   END                                                         <<U.RAO>>08714000
ELSE                                                           <<U.RAO>>08716000
   BEGIN  <<2 WORDS>>                                          <<U.RAO>>08718000
   IF ACCOUNT THEN                                             <<U.RAO>>08720000
      BEGIN  <<FORCE AM CAPABILITY>>                           <<U.RAO>>08722000
      ASSEMBLE(XCH);                                           <<U.RAO>>08724000
      TOS.(1:1) := TRUE;                                       <<U.RAO>>08726000
      ASSEMBLE(XCH);                                           <<U.RAO>>08728000
      END;                                                     <<U.RAO>>08730000
   NEWENTRY(RESULTADR+1) := TOS;                               <<U.RAO>>08732000
   NEWENTRY(X:=X-1) := TOS;                                    <<U.RAO>>08734000
   IF NOT SETSPECMASK(2) THEN CIERR(ERRNUM :=-ORGCOMRDNDCAPKY);<<04790>>08736000
   END;                                                        <<U.RAO>>08738000
END;  <<SUBROUTINE DOCAPLIST>>                                 <<U.RAO>>08740000
                                                               <<U.RAO>>08742000
<<                 *********************                   >>  <<U.RAO>>08744000
<<                 *     DODOUBLE      *                   >>  <<U.RAO>>08746000
<<                 *********************                   >>  <<U.RAO>>08748000
                                                               <<U.RAO>>08750000
SUBROUTINE DODOUBLE(ERRDELTA);                                 <<U.RAO>>08752000
VALUE ERRDELTA;                                                <<U.RAO>>08754000
INTEGER ERRDELTA;  <<OFFSET FOR TAILORING ERROR MESSAGES>>     <<U.RAO>>08756000
<<THIS SUBROUTINE PROCESSES DOUBLE INTEGERS FOR CPU, CONNECT,>><<U.RAO>>08758000
<<FILES OPTIONS.  IT DOES NOT HANDLE LOCAL ATTRIBUTE OPTION>>  <<U.RAO>>08760000
BEGIN                                                          <<U.RAO>>08762000
IF USER THEN  <<HAS NO MEANING FOR USER DEFINITION>>           <<U.RAO>>08764000
   BEGIN                                                       <<U.RAO>>08766000
   CIERR(ERRNUM := -(UNOTDBL+ERRDELTA), PARMPTR);              <<04790>>08768000
   NEXT;  <<ATTEMPT RECOVERY>>                                 <<U.RAO>>08770000
   END                                                         <<U.RAO>>08772000
ELSE                                                           <<U.RAO>>08774000
   BEGIN                                                       <<U.RAO>>08776000
   NEXT;                                                       <<U.RAO>>08778000
   IF PARMLEN <> 0 THEN <<I.E., PARM PRESENT THUS NO DEFAULT>> <<U.RAO>>08780000
      BEGIN                                                    <<U.RAO>>08782000
      TOS := DBINARY(PARMPTR, PARMLEN);                        <<U.RAO>>08784000
      IF <> THEN   <<DBINARY FAILED>>                          <<U.RAO>>08786000
         BEGIN                                                 <<U.RAO>>08788000
         DDEL;  <<POP RESULT;                                  <<U.RAO>>08790000
         CIERR(ERRNUM := DBLINVALID+ERRDELTA, PARMPTR);        <<U.RAO>>08792000
         END                                                   <<U.RAO>>08794000
      ELSE                                                     <<U.RAO>>08796000
         BEGIN                                                 <<U.RAO>>08798000
         ASSEMBLE(DDUP);                                       <<U.RAO>>08800000
         NEWENTRY(RESULTADR+1) := TOS;                         <<U.RAO>>08802000
         NEWENTRY(X := X-1) := TOS;                            <<U.RAO>>08804000
         IF TOS < 0D THEN    <<NEGATIVE NUMBER NOT ALLOWED>>   <<U.RAO>>08806000
            CIERR(ERRNUM := DBLNEG+ERRDELTA, PARMPTR);         <<U.RAO>>08808000
         END;                                                  <<U.RAO>>08810000
      END;                                                     <<U.RAO>>08812000
   IF (ERRNUM=0) AND NOT SETSPECMASK(DEFN) THEN                <<U.RAO>>08814000
            << REDUNDANTLY DEFINED KEYWORD >>                  <<04790>>08816000
      CIERR(ERRNUM := -(REDUNDANT+ERRDELTA));                  <<04790>>08818000
   END;                                                        <<U.RAO>>08820000
END;                                                           <<U.RAO>>08822000
                                                               <<U.RAO>>08824000
<<                 *********************                   >>  <<U.RAO>>08826000
<<                 *     DOLOCATTR     *                   >>  <<U.RAO>>08828000
<<                 *********************                   >>  <<U.RAO>>08830000
                                                               <<U.RAO>>08832000
SUBROUTINE DOLOCATTR;  <<LOCAL ATTRIBUTES - A DOUBLE INTEGER>> <<U.RAO>>08834000
BEGIN                                                          <<U.RAO>>08836000
IF GROUP THEN                                                  <<U.RAO>>08838000
   BEGIN  <<NOT APPROPRIATE FOR GROUP>>                        <<U.RAO>>08840000
   CIERR(ERRNUM := -ORGCOMGLOCATTR,PARMPTR);                   <<04790>>08842000
   NEXT;  <<ATTEMPT RECOVERY>>                                 <<U.RAO>>08844000
   END                                                         <<U.RAO>>08846000
ELSE                                                           <<U.RAO>>08848000
   BEGIN                                                       <<U.RAO>>08850000
   NEWENTRY(RESULTADR) := 0;                                   <<01.RO>>08852000
   NEWENTRY(RESULTADR+1) := 0;  <<ZERO ENTRY>>                 <<01.RO>>08854000
   NEXT;                                                       <<U.RAO>>08856000
   IF PARMLEN <> 0 THEN  <<EXISTS, DON'T USE DEFAULT>>         <<U.RAO>>08858000
      BEGIN                                                    <<U.RAO>>08860000
      TOS := DBINARY(PARMPTR,PARMLEN);                         <<U.RAO>>08862000
      IF <> THEN                                               <<U.RAO>>08864000
         BEGIN                                                 <<U.RAO>>08866000
         DDEL;                                                 <<U.RAO>>08868000
         CIERR(ERRNUM := ORGCOMINVLDLATR,PARMPTR)              <<U.RAO>>08870000
         END                                                   <<U.RAO>>08872000
      ELSE                                                     <<U.RAO>>08874000
         BEGIN                                                 <<U.RAO>>08876000
         NEWENTRY(RESULTADR+1) := TOS;                         <<U.RAO>>08878000
         NEWENTRY(X := X-1) := TOS;                            <<U.RAO>>08880000
         END;                                                  <<U.RAO>>08882000
      END;                                                     <<U.RAO>>08884000
   IF (ERRNUM=0) AND NOT SETSPECMASK(DEFN) THEN  <<REDUNDANT>> <<U.RAO>>08886000
      CIERR(ERRNUM := -ORGCOMRDNDLATTR);                       <<04790>>08888000
   END;                                                        <<U.RAO>>08890000
END;  <<SUBROUTINE DOLOCATTR>>                                 <<U.RAO>>08892000
                                                               <<U.RAO>>08894000
<<                 *********************                   >>  <<U.RAO>>08896000
<<                 *     MAIN BODY     *                   >>  <<U.RAO>>08898000
<<                 *********************                   >>  <<U.RAO>>08900000
                                                               <<U.RAO>>08902000
<<MAIN BODY OF PROCEDURE                                     >><<U.RAO>>08904000
<<THERE ARE THREE MAIN TASKS:                                >><<U.RAO>>08906000
<<  1)  INITIALIZE NEWENTRY TO DEFAULTS                      >><<U.RAO>>08908000
<<  2)  FIND AND VALIDATE REQUIRED PARAMETERS                >><<U.RAO>>08910000
<<        (THAT IS, ITEM NAME AND, IF NEWACCT, MANAGER'S NAME>><<U.RAO>>08912000
<<  3)  PARSE OPTIONAL PARMS. THIS IS MOSTLY DONE BY         >><<U.RAO>>08914000
<<        SUBROUTINES.                                       >><<U.RAO>>08916000
PARMNUM := 0;                                                  <<U.RAO>>08918000
CYORGCOMS' := FALSE;                                           <<U.RAO>>08920000
CASE LEVEL-1 OF                                                <<U.RAO>>08922000
   BEGIN  <<INITIALIZE NEWENTRY WITH DEFAULTS IN PB>>          <<U.RAO>>08924000
   MOVE NEWENTRY := INITIALGROUP,(GSIZE);                      <<U.RAO>>08926000
   MOVE NEWENTRY := INITIALACCT,(ASIZE);                       <<U.RAO>>08928000
   MOVE NEWENTRY := INITIALUSER,(USIZE);                       <<U.RAO>>08930000
   END;                                                        <<U.RAO>>08932000
IF PMASK.(14:1) THEN                                           <<RV.PV>>08934000
BEGIN                                                          <<RV.PV>>08936000
    VSCOMM (VSMASK) := 0;                                      <<RV.PV>>08938000
    VSCOMM (VSHANAME) := "  ";                                 <<RV.PV>>08940000
    MOVE VSCOMM (VSHANAME+1) :=                                <<RV.PV>>08942000
         VSCOMM (VSHANAME), ((NAMESIZE*3)-1);                  <<RV.PV>>08944000
END;                                                           <<RV.PV>>08946000
MOVE TEMPSPECMASK := SPECMASKLN (0); <<INITIALIZE>>            <<RV.PV>>08948000
IF PMASK THEN MOVE SPECMASK := TEMPSPECMASK, (SPECMASKLN);     <<RV.PV>>08950000
VSPARMACCT := FALSE; << NO VS= YET >>                          <<01460>>08952000
                                                               <<U.RAO>>08954000
<<NOW CRUNCH PARAMETER IMAGE>>                                 <<U.RAO>>08956000
TOS := @IMAGE;  <<SET UP PARMS IN CASE ALL MISSING>>           <<U.RAO>>08958000
TOS := CR;                                                     <<U.RAO>>08960000
PARMS := TOS;                                                  <<U.RAO>>08962000
MYCOMMAND(IMAGE,DL,70,NUMPARMS,PARMS);                         <<U.RAO>>08964000
IF <> THEN  <<TOO MANY PARAMETERS>>                            <<U.RAO>>08966000
   BEGIN                                                       <<U.RAO>>08968000
   PARMNUM := 72;                                              <<U.RAO>>08970000
   IF PMASK THEN     <<:ALTXXX COMMAND>>                       <<U.RAO>>08972000
      IF ACCOUNT THEN TOS := ALTACCT2MP                        <<U.RAO>>08974000
      ELSE IF < THEN TOS := ALTGROUP2MP                        <<U.RAO>>08976000
      ELSE TOS := ALTUSER2MP                                   <<U.RAO>>08978000
   ELSE  <<:NEWXXX COMMAND>>                                   <<U.RAO>>08980000
      IF ACCOUNT THEN TOS := NEWACCT2MP                        <<U.RAO>>08982000
      ELSE IF < THEN TOS := NEWGROUP2MP                        <<U.RAO>>08984000
      ELSE TOS := NEWUSER2MP;                                  <<U.RAO>>08986000
   ERRNUM := S0;                                               <<U.RAO>>08988000
   CIERR(*);                                                   <<U.RAO>>08990000
   RETURN                                                      <<U.RAO>>08992000
   END;                                                        <<U.RAO>>08994000
                                                               <<U.RAO>>08996000
<<NOW WE LOOK FOR REQUIRED ITEMS, FIRST THE ITEM NAME>>        <<U.RAO>>08998000
NEXT;  <<SET UP FIRST PARM>>                                   <<U.RAO>>09000000
TOS := 0;  <<RETURN SPACE FOR CHECKNAME>>                      <<U.RAO>>09002000
IF ACCOUNT THEN TOS := FANAMEBASE                              <<U.RAO>>09004000
ELSE IF GROUP THEN TOS := FGNAMEBASE                           <<U.RAO>>09006000
ELSE TOS := USERNAMEBASE;                                      <<U.RAO>>09008000
IF NOT CHECKNAME(*,NEWENTRY,FALSE) THEN RETURN;  <<ERROR DETECTED>>     09010000
                                                               <<U.RAO>>09012000
<<IF NEWACCT THEN LOOK FOR MANAGER'S NAME>>                    <<U.RAO>>09014000
IF (ACCOUNT) AND NOT PMASK THEN  <<:NEWACCT COMMAND>>          <<U.RAO>>09016000
   BEGIN                                                       <<U.RAO>>09018000
   IF NEXTDELIM <> COMMA THEN  <<SYNTAX ERROR, AT LEAST>>      <<U.RAO>>09020000
      BEGIN                                                    <<U.RAO>>09022000
      CIERR(ERRNUM := NEWACCTXPCTCMA,PARMPTR(PARMLEN));        <<U.RAO>>09024000
      RETURN                                                   <<U.RAO>>09026000
      END;                                                     <<U.RAO>>09028000
   NEXT;  <<ACTUALLY GET NAME>>                                <<U.RAO>>09030000
   IF NOT CHECKNAME(MGRNAMEBASE,NEWENTRY(ASIZE),FALSE) THEN RETURN;     09032000
   END;                                                        <<U.RAO>>09034000
                                                               <<U.RAO>>09036000
<<NOW FINISH UP INITIALIZATION STAGE>>                         <<U.RAO>>09038000
<<PROBLEM IS TO SET SPECIAL SECURITY MASK FOR SYS ACCOUNT AND>><<U.RAO>>09040000
<<PUB GROUP>>                                                  <<U.RAO>>09042000
IF (ACCOUNT) AND (BNEWENTRY = "SYS ") THEN                     <<U.RAO>>09044000
   BEGIN  <<SET UP SPECIAL SECURITY>>                          <<01.RO>>09046000
   ACCTSECDEF := [2/2,2/1,2/1,2/1,2/2,2/1];                    <<01.RO>>09048000
   NEWENTRY(ASECW) := ACCTSECDEF;                              <<01.RO>>09050000
   END                                                         <<01.RO>>09052000
ELSE IF (GROUP) AND (BNEWENTRY = "PUB ") THEN                  <<U.RAO>>09054000
   BEGIN                                                       <<01.RO>>09056000
   GROUPSECDEF := [5/16,5/6,5/6,5/6,5/16,5/6]D;                <<01.RO>>09058000
   GSECURITY := GROUPSECDEF;                                   <<01.RO>>09060000
   END;                                                        <<01.RO>>09062000
                                                               <<U.RAO>>09064000
<<NOW WE FINALLY GET AROUND TO PARSING THE OPTIONAL PARMS>>    <<U.RAO>>09066000
MOVE KEYDICT := KEYDICTX,(KEYDICTL);                           <<U.RAO>>09068000
MOVE SUBKEYDICT := SUBKEYDICTX, (SUBKEYDICTL);                 <<RV.PV>>09070000
WHILE NEXTDELIM = SEMICOLON DO                                 <<U.RAO>>09072000
   BEGIN                                                       <<U.RAO>>09074000
   NEXT;  <<GET KEYWORD>>                                      <<U.RAO>>09076000
   IF PARMLEN = 0 THEN                                         <<U.RAO>>09078000
      BEGIN                                                    <<U.RAO>>09080000
      CIERR(ERRNUM := ORGCOMNOKEY,PARMPTR);                    <<U.RAO>>09082000
      RETURN                                                   <<U.RAO>>09084000
      END;                                                     <<U.RAO>>09086000
   IF NEXTDELIM <> EQUALS THEN  <<MISSING EQUAL SIGN AFTER KEY><<U.RAO>>09088000
      BEGIN                                                    <<U.RAO>>09090000
      CIERR(ERRNUM := ORGCOMXPCTEQUALS, PARMPTR(PARMLEN));     <<U.RAO>>09092000
      RETURN                                                   <<U.RAO>>09094000
      END;                                                     <<U.RAO>>09096000
   CASE SEARCH(PARMPTR,PARMLEN,KEYDICT,DEFN) OF                <<U.RAO>>09098000
      BEGIN                                                    <<U.RAO>>09100000
                                                               <<U.RAO>>09102000
      <<CASE 0 --- UNKNOWN KEYWORD>>                           <<U.RAO>>09104000
      << Case 0 --- Unknown keyword >>                         <<04703>>09106000
      BEGIN                                                    <<04703>>09108000
      IF LEVEL = 3 THEN                                        <<04703>>09110000
         CIERR(ERRNUM:=ALTUSERUNKNOWNPARM,PARMPTR);            <<04703>>09112000
      IF LEVEL = 2 THEN                                        <<04703>>09114000
         CIERR(ERRNUM:=ALTACCTUNKNOWNPARM,PARMPTR);            <<04703>>09116000
      IF LEVEL = 1 THEN                                        <<04703>>09118000
         CIERR(ERRNUM:=ALTGROUPUNKNOWNPARM,PARMPTR);           <<04703>>09120000
      END; << CASE 0 >>                                        <<04703>>09122000
                                                               <<U.RAO>>09124000
      BEGIN  <<PASSWORD, A STRING>>                            <<U.RAO>>09126000
      NEXT;   <<POINT TO PASSWORD VALUE>>                      <<U.RAO>>09128000
      IF CHECKNAME(PASSWORDBASE,NEWENTRY(RESULTADR),TRUE) THEN <<U.RAO>>09130000
         IF NOT SETSPECMASK(DEFN) THEN                         <<U.RAO>>09132000
            CIERR(ERRNUM := -(ORGCOMRDNDPASS));                <<04790>>09134000
      END;                                                     <<U.RAO>>09136000
                                                               <<U.RAO>>09138000
      <<FILES - FILE LIMITS IN SECTORS, A DOUBLE INTEGER>>     <<U.RAO>>09140000
      DODOUBLE(ORGCOMFILESBASE);                               <<U.RAO>>09142000
                                                               <<U.RAO>>09144000
      <<CPU - CPU USAGE LIMIT IN SECONDS, A DOUBLE INTEGER>>   <<U.RAO>>09146000
      DODOUBLE(ORGCOMCPUBASE);                                 <<U.RAO>>09148000
                                                               <<U.RAO>>09150000
      <<CONNECT - CONNECT TIME USAGE, A DOUBLE INTEGER>>       <<U.RAO>>09152000
      DODOUBLE(ORGCOMCONNECTBS);                               <<U.RAO>>09154000
                                                               <<U.RAO>>09156000
      <<CAPABILITY LIST>>                                      <<U.RAO>>09158000
      DOCAPLIST;                                               <<U.RAO>>09160000
                                                               <<U.RAO>>09162000
      <<ACCESS LIST>>                                          <<U.RAO>>09164000
      DOACCESSLIST;                                            <<U.RAO>>09166000
                                                               <<U.RAO>>09168000
      <<MAXPRI>>                                               <<U.RAO>>09170000
      DOMAXPRI;                                                <<U.RAO>>09172000
                                                               <<U.RAO>>09174000
      <<LOCAL ATTRIBUTES>>                                     <<U.RAO>>09176000
      DOLOCATTR;                                               <<U.RAO>>09178000
                                                               <<U.RAO>>09180000
      <<VS - HOME VOLUME SET>>                                 <<U.RAO>>09182000
      BEGIN <<VS>>                                             <<RV.PV>>09184000
      IF USER THEN                                             <<00580>>09186000
      BEGIN  <<NOT VALID OPTION FOR USER - WARN AND IGNORE>>   <<00580>>09188000
          CIERR (ERRNUM := -ORGCOMUNOTVS,PARMPTR);             <<04790>>09190000
          << TRY TO RECOVER >>                                 <<00580>>09192000
          NEXT; << SKIP VSNAME >>                              <<00580>>09194000
          << SKIP 'SPAN' IF PRESENT >>                         <<00580>>09196000
          IF NEXTDELIM = COLON THEN NEXT;                      <<00580>>09198000
      END                                                      <<00580>>09200000
      ELSE                                                     <<00580>>09202000
      BEGIN                                                    <<00580>>09204000
          NEXT;                                                <<RV.PV>>09206000
          TOS := CHECK'N'MOVENAME (PARMPTR,PARMLEN,            <<RV.PV>>09208000
                                   VSCOMM (VSHVNAME),-4,3);    <<RV.PV>>09210000
          IF <> THEN                                           <<RV.PV>>09212000
           CIERR (ERRNUM := TOS+VCSREFBASE,PARMPTR)            <<RV.PV>>09214000
          ELSE                                                 <<RV.PV>>09216000
          BEGIN  << NO ERROR IN VOLSET >>                      <<01460>>09218000
                                                               <<01460>>09220000
               << CHECK FOR REDUNDANTLY SPECIFIED VS= >>       <<01460>>09222000
               IF (GROUP) THEN                                 <<01460>>09224000
               BEGIN                                           <<01460>>09226000
                   IF NOT SETSPECMASK(DEFN) THEN               <<01460>>09228000
                      CIERR(ERRNUM := -ORGCOMRDNDVS);          <<04790>>09230000
               END      << OF GROUP REDUNDANT CHECK >>         <<01460>>09232000
               ELSE                                            <<01460>>09234000
               BEGIN    << ACCOUNT CHECK >>                    <<01460>>09236000
                   VSPARMACCT.(15:1) := 1; << GOT VS= PARM >>  <<01460>>09238000
                   IF <> THEN CIERR(ERRNUM := -ORGCOMRDNDVS);  <<04790>>09240000
               END;                                            <<01460>>09242000
                                                               <<01460>>09244000
               <<# OF NAMES GOES TO VSMASK.(14:2)>>            <<RV.PV>>09246000
               VSCOMM (VSMASK) := VSSPECIFIED LOR LS0;         <<RV.PV>>09248000
               CASE TOS OF                                     <<RV.PV>>09250000
               BEGIN                                           <<RV.PV>>09252000
                   ; <<NO NAME SUPPLIED. ATTEMPT TO RESET HVS>><<RV.PV>>09254000
                   WHO (,,,,BVSHGNAME,BVSHANAME);              <<RV.PV>>09256000
                   WHO (,,,,,BVSHANAME);                       <<RV.PV>>09258000
                   ; <<ALL NAMES SUPPLIED>>                    <<RV.PV>>09260000
               END;                                            <<RV.PV>>09262000
               IF NEXTDELIM = COLON THEN                       <<RV.PV>>09264000
               BEGIN                                           <<RV.PV>>09266000
                   NEXT;                                       <<RV.PV>>09268000
                   IF (TOS := SEARCH (PARMPTR,PARMLEN,         <<00086>>09270000
                              SUBKEYDICT)) <> 0 THEN           <<00086>>09272000
                    IF (VSCOMM (VSMASK) LAND 3) <> 0 THEN      <<RV.PV>>09274000
                    BEGIN                                      <<00086>>09276000
                        CASE (S0-1) OF                         <<00086>>09278000
                        BEGIN                                  <<00086>>09280000
                            TOS := SPANSPECIFIED; <<1>>        <<00086>>09282000
                            TOS := ALTSPECIFIED;  <<2>>        <<00086>>09284000
                        END;                                   <<00086>>09286000
                        VSCOMM (VSMASK) := VSCOMM (VSMASK) LOR LS0;     09288000
                        DEL; <<VALUE FROM CASE STMT>>          <<00086>>09290000
                    END                                        <<00086>>09292000
                    ELSE                                       <<RV.PV>>09294000
                     CIERR (ERRNUM:=ORGCOMSPANCNTXT)           <<RV.PV>>09296000
                   ELSE                                        <<RV.PV>>09298000
                     CIERR(ERRNUM:=ALTUNKNOWNVSPARM,PARMPTR);  <<04703>>09300000
                   DEL; <<RETURN FROM SEARCH>>                 <<00086>>09302000
               END;                                            <<RV.PV>>09304000
          END;  << OF NO ERROR IN VOLSET >>                    <<01460>>09306000
      END;                                                     <<00580>>09308000
      END;<<OF VS>>                                            <<RV.PV>>09310000
                                                               <<RV.PV>>09312000
      <<HOME GROUP SPECIFICATION>>                             <<U.RAO>>09314000
      IF NOT(USER) THEN                                        <<U.RAO>>09316000
         BEGIN  <<INAPPROPRIATE KEYWORD>>                      <<U.RAO>>09318000
         CIERR(ERRNUM := -ORGCOMUHOMEGRP,PARMPTR);             <<04790>>09320000
         NEXT;                                                 <<U.RAO>>09322000
         END                                                   <<U.RAO>>09324000
      ELSE                                                     <<U.RAO>>09326000
         BEGIN                                                 <<U.RAO>>09328000
         NEXT;                                                 <<U.RAO>>09330000
         IF CHECKNAME(FGNAMEBASE,NEWENTRY(RESULTADR),TRUE) THEN<<U.RAO>>09332000
            IF NOT SETSPECMASK(DEFN) THEN  <<REDUNDANT>>       <<U.RAO>>09334000
               CIERR(ERRNUM := -ORGCOMRDNDGROUP);              <<04790>>09336000
         END;                                                  <<U.RAO>>09338000
                                                               <<U.RAO>>09340000
      END;  <<OF CASE STATEMENT ON KEYWORDS>>                  <<U.RAO>>09342000
   IF ERRNUM > 0 THEN RETURN;  <<SOME FATAL ERROR ALONG THE WAY<<U.RAO>>09344000
   END;  <<OF WHILE LOOP ON SEMICOLON>>                        <<U.RAO>>09346000
                                                               <<U.RAO>>09348000
<<NOW FINAL CLEANUP BEFORE EXIT>>                              <<U.RAO>>09350000
IF NEXTDELIM <> CR THEN   <<GARBAGE IN STRING>>                <<U.RAO>>09352000
   BEGIN                                                       <<U.RAO>>09354000
   NEXT;                                                       <<U.RAO>>09356000
   CIERR(ERRNUM := ORGCOMXPCTKEYWD,PARMPTR)                    <<U.RAO>>09358000
   END                                                         <<U.RAO>>09360000
ELSE                                                           <<U.RAO>>09362000
   BEGIN                                                       <<U.RAO>>09364000
   PARMNUM := 0;                                               <<U.RAO>>09366000
   CYORGCOMS' := TRUE;                                         <<U.RAO>>09368000
   IF PMASK THEN                                               <<RV.PV>>09370000
   BEGIN <<ONLY THE ONES NEEDED>>                              <<RV.PV>>09372000
       X := SPECMASKLN-1;                                      <<RV.PV>>09374000
       DO                                                      <<RV.PV>>09376000
        SPECMASK (X) := SPECMASK (X) XOR TEMPSPECMASK (X)      <<RV.PV>>09378000
       UNTIL (X:=X-1) < 0;                                     <<RV.PV>>09380000
   END;                                                        <<RV.PV>>09382000
   END;                                                        <<U.RAO>>09384000
END;  <<CYORGCOMS'>>                                           <<U.RAO>>09386000
PROCEDURE CAP'ERR(ERRNUM,CAP'DENIED);                          <<00879>>09388000
VALUE ERRNUM;                                                  <<00879>>09390000
INTEGER ERRNUM;           <<ERRNUM FOR CIERR>>                 <<00879>>09392000
INTEGER ARRAY CAP'DENIED; <<2 WORD ARRAY OF DENIED CAP>>       <<00879>>09394000
OPTION UNCALLABLE,PRIVILEGED;                                  <<00879>>09396000
BEGIN                                                          <<00879>>09398000
   COMMENT:                                                    <<00879>>09400000
      THIS PROCEDURE HANDLES CAPABILITY ERRORS FOR THE         <<00879>>09402000
      ORGANIZATION MANAGEMENT COMMANDS.;                       <<00879>>09404000
   EQUATE                                                      <<00879>>09406000
      CAPLEN     = 3,                                          <<00879>>09408000
      CAPDICTLEN = CAPLEN*32;                                  <<00879>>09410000
   BYTE ARRAY CAPDICT(0:CAPDICTLEN-1) = PB :=                  <<00879>>09412000
      <<0>> "SM,",                                             <<00879>>09414000
      <<1>> "AM,",                                             <<00879>>09416000
      <<2>> "AL,",                                             <<00879>>09418000
      <<3>> "GL,",                                             <<00879>>09420000
      <<4>> "DI,",                                             <<00879>>09422000
      <<5>> "OP,",                                             <<00879>>09424000
      <<6>> "CV,",                                             <<00879>>09426000
      <<7>> "UV,",                                             <<00879>>09428000
      <<8>> "LG,",                                             <<01724>>09430000
      <<9>> "   ",                                             <<00879>>09432000
      <<10>>"   ",                                             <<00879>>09434000
      <<11>>"   ",                                             <<00879>>09436000
      <<12>>"   ",                                             <<00879>>09438000
      <<13>>"CS,",                                             <<00879>>09440000
      <<14>>"ND,",                                             <<00879>>09442000
      <<15>>"SF,",                                             <<00879>>09444000
      <<16>>"   ",                                             <<00879>>09446000
      <<17>>"   ",                                             <<00879>>09448000
      <<18>>"   ",                                             <<00879>>09450000
      <<19>>"   ",                                             <<00879>>09452000
      <<20>>"   ",                                             <<00879>>09454000
      <<21>>"   ",                                             <<00879>>09456000
      <<22>>"   ",                                             <<00879>>09458000
      <<23>>"BA,",                                             <<00879>>09460000
      <<24>>"IA,",                                             <<00879>>09462000
      <<25>>"PM,",                                             <<00879>>09464000
      <<26>>"   ",                                             <<00879>>09466000
      <<27>>"   ",                                             <<00879>>09468000
      <<28>>"MR,",                                             <<00879>>09470000
      <<29>>"   ",                                             <<00879>>09472000
      <<30>>"DS,",                                             <<00879>>09474000
      <<31>>"PH,";                                             <<00879>>09476000
   BYTE ARRAY STRING(0:CAPDICTLEN-1);                          <<00879>>09478000
   INTEGER                                                     <<00879>>09480000
      INX,                                                     <<00879>>09482000
      CAP'NUM,                                                 <<00879>>09484000
      I;                                                       <<00879>>09486000
                                                               <<00879>>09488000
   << >>                                                       <<00879>>09490000
   INX := -3;                                                  <<00879>>09492000
   STRING := " ";                                              <<00879>>09494000
   MOVE STRING(1) := STRING(0),(CAPDICTLEN-1);                 <<00879>>09496000
   FOR I := 0 UNTIL 1 DO                                       <<00879>>09498000
      BEGIN                                                    <<00879>>09500000
      CAP'NUM := I*16-1; << INIT TO LEFT MOST BIT POSITION >>  <<00879>>09502000
      TOS := CAP'DENIED(I);                                    <<00879>>09504000
      WHILE S0 <> 0 DO                                         <<00879>>09506000
         BEGIN                                                 <<00879>>09508000
         X := CAP'NUM;                                         <<00879>>09510000
         ASSEMBLE (SCAN ,X);                                   <<00879>>09512000
         CAP'NUM := X;<<CAP'NUM GETS BIT POSITION OF NEXT CAP>><<00879>>09514000
         MOVE STRING(INX:=INX+CAPLEN):=CAPDICT(CAP'NUM*CAPLEN) <<00879>>09516000
                                         ,(CAPLEN);            <<00879>>09518000
         END;                                                  <<00879>>09520000
      DEL;  << REMOVE CAP'DENIED(I) >>                         <<00879>>09522000
      END;                                                     <<00879>>09524000
   STRING(INX+2) := 0;                                         <<00879>>09526000
   CIERR(ERRNUM,,0,@STRING);                                   <<00879>>09528000
                                                               <<00879>>09530000
END; << CAP'ERROR >>                                           <<00879>>09532000
$CONTROL SEGMENT=CIALTORG                                               09534000
INTEGER PROCEDURE GET'PUT'NAME (HEREINFO, THERE,               <<RV.PV>>09536000
                                WHICHKIND, WHERE);             <<RV.PV>>09538000
    VALUE   HEREINFO, WHICHKIND, WHERE;                        <<RV.PV>>09540000
    DOUBLE  HEREINFO;                                          <<RV.PV>>09542000
    ARRAY   THERE;                                             <<RV.PV>>09544000
    INTEGER WHICHKIND, WHERE;                                  <<RV.PV>>09546000
    OPTION PRIVILEGED, INTERNAL;                               <<RV.PV>>09548000
    BEGIN                                                      <<RV.PV>>09550000
        BYTE POINTER                                           <<RV.PV>>09552000
            WHEREADR = WHERE,                                  <<RV.PV>>09554000
            HERE = HEREINFO;                                   <<RV.PV>>09556000
        LOGICAL                                                <<RV.PV>>09558000
            ERRNO,                                             <<RV.PV>>09560000
            PARM1 = HERE+1;                                    <<RV.PV>>09562000
        DEFINE                                                 <<RV.PV>>09564000
            LNGTH = PARM1.(0:8) #,                             <<RV.PV>>09566000
            SPEC  = PARM1.(10:1) #,                            <<RV.PV>>09568000
            DELNO = PARM1.(11:5) #;                            <<RV.PV>>09570000
                                                               <<RV.PV>>09572000
        CC := CCE;                                             <<RV.PV>>09574000
        THERE := "  ";                                         <<RV.PV>>09576000
        MOVE THERE (1) := THERE, (NAMESIZE-1);                 <<RV.PV>>09578000
        GET'PUT'NAME := DELNO;                                 <<RV.PV>>09580000
        IF LNGTH = 0 THEN                                      <<RV.PV>>09582000
        BEGIN <<OMMITTED>>                                     <<RV.PV>>09584000
            CIERR (VSDEFMISSNAME,HERE,0, @WHICHKIND);          <<04790>>09586000
            CC := CCG;                                         <<RV.PV>>09588000
        END                                                    <<RV.PV>>09590000
        ELSE                                                   <<RV.PV>>09592000
        BEGIN                                                  <<RV.PV>>09594000
            IF SPEC OR HERE <> ALPHA OR LNGTH > 8 THEN         <<RV.PV>>09596000
            BEGIN  <<ILLEGAL NAME>>                            <<RV.PV>>09598000
                ERRNO := IF SPEC THEN VSDEFSPECHAR ELSE        <<RV.PV>>09600000
                          IF HERE <> ALPHA THEN VSDEFNOTALPHA  <<RV.PV>>09602000
                                           ELSE VSDEFTOOLONG;  <<RV.PV>>09604000
                CIERR (ERRNO, WHEREADR,0, WHICHKIND);          <<04790>>09606000
                CC := CCL;                                     <<RV.PV>>09608000
            END                                                <<RV.PV>>09610000
            ELSE                                               <<RV.PV>>09612000
            BEGIN                                              <<RV.PV>>09614000
                TOS := @THERE & LSL (1); <<BYTE POINTER>>      <<RV.PV>>09616000
                MOVE * := HERE, (LNGTH);                       <<RV.PV>>09618000
            END;                                               <<RV.PV>>09620000
        END;                                                   <<RV.PV>>09622000
    END;<<OF GET'PUT'NAME>>                                    <<RV.PV>>09624000
LOGICAL PROCEDURE CYCLASS (HEREINFO, VSDEF, VCDEF, PARMSP);    <<RV.PV>>09626000
    VALUE   HEREINFO;                                          <<RV.PV>>09628000
    DOUBLE  HEREINFO;                                          <<RV.PV>>09630000
    ARRAY   VSDEF, VCDEF;                                      <<RV.PV>>09632000
    BYTE ARRAY PARMSP;                                         <<RV.PV>>09634000
    OPTION PRIVILEGED, INTERNAL;                               <<RV.PV>>09636000
    BEGIN                                                      <<RV.PV>>09638000
        ENTRY CYCLASS';                                        <<RV.PV>>09640000
        BYTE POINTER                                           <<RV.PV>>09642000
            WHERE',                                            <<RV.PV>>09644000
            HERE = HEREINFO,                                   <<RV.PV>>09646000
            STRING;                                            <<RV.PV>>09648000
        DOUBLE                                                 <<RV.PV>>09650000
                  <<  =      :      ,      CR >>               <<RV.PV>>09652000
            X1 := [8/%75, 8/%72, 8/%54, 8/%15] D;              <<RV.PV>>09654000
        LOGICAL                                                <<RV.PV>>09656000
            FOUND,                                             <<RV.PV>>09658000
            MV := FALSE,                                       <<RV.PV>>09660000
            STOP = CYCLASS,                                    <<RV.PV>>09662000
            PARM1 = HERE+1;                                    <<RV.PV>>09664000
        EQUATE                                                 <<RV.PV>>09666000
            CR = %15,                                          <<RV.PV>>09668000
            GVSMEMBSZ = GVSINFO-GVSNAME+1;                     <<RV.PV>>09670000
        DEFINE                                                 <<RV.PV>>09672000
            BAD'RETURN = BEGIN STOP := TRUE; RETURN; END #,    <<RV.PV>>09674000
            WHERE = @PARMSP+(@HERE-@STRING) #,                 <<RV.PV>>09676000
            LNGTH = PARM1.(0:8) #;                             << I.A >>09678000
        BYTE ARRAY                                             <<RV.PV>>09680000
            CLASS' (0:5),                                      <<RV.PV>>09682000
            BVSDEF (*) = VSDEF,                                <<RV.PV>>09684000
            BVCDEF (*) = VCDEF,                                <<RV.PV>>09686000
            DELIMS (*) = X1;                                   <<RV.PV>>09688000
        INTEGER                                                <<RV.PV>>09690000
            CLASS = CLASS',                                    <<RV.PV>>09692000
            NUM'MEMBERS,                                       <<RV.PV>>09694000
            GVCINFO' := 0,                                     <<RV.PV>>09696000
            VOLCNT := 0,                                       <<RV.PV>>09698000
            NUMPARMS,                                          <<RV.PV>>09700000
            PNUM := 0;                                         <<RV.PV>>09702000
        DOUBLE ARRAY                                           <<RV.PV>>09704000
            PARMS (0:VMAX+1); <<INCLUDES KEYWORD PARAMETER>>   <<RV.PV>>09706000
                                                               <<RV.PV>>09708000
                                                               <<RV.PV>>09710000
        IF FALSE THEN                                          <<RV.PV>>09712000
    CYCLASS':                                                  <<RV.PV>>09714000
         MV := TRUE;                                           <<RV.PV>>09716000
        MOVE CLASS' := ("CLASS",0);                            <<RV.PV>>09718000
        TOS := (LNGTH+2) & LSR (1);                            <<RV.PV>>09720000
        PUSH (S);                                              <<RV.PV>>09722000
        @STRING := TOS & LSL (1);                              <<RV.PV>>09724000
        ASSEMBLE (ADDS 0);                                     <<RV.PV>>09726000
        MOVE STRING := HERE, (LNGTH);                          <<RV.PV>>09728000
        @PARMSP := @HERE;                                      <<RV.PV>>09730000
        STRING (LNGTH) := CR;                                  <<RV.PV>>09732000
        MYCOMMAND (STRING, DELIMS, VMAX+2, NUMPARMS, PARMS);   <<RV.PV>>09734000
        IF > THEN                                              <<RV.PV>>09736000
        BEGIN <<TOO MANY PARAMETERS>>                          <<RV.PV>>09738000
            CIERR (VSDEFTOOMANY, HERE, 0, CLASS);              <<RV.PV>>09740000
            BAD'RETURN;                                        <<RV.PV>>09742000
        END;                                                   <<RV.PV>>09744000
        IF NUMPARMS < 3 THEN                                   <<RV.PV>>09746000
        BEGIN <<NOT ENOUGH PARAMETERS>>                        <<RV.PV>>09748000
            CIERR (VSDEFTOOFEW, HERE, 0, CLASS);               <<RV.PV>>09750000
            BAD'RETURN;                                        <<RV.PV>>09752000
        END;                                                   <<RV.PV>>09754000
        PNUM := PNUM + 1; <<GET PAST KEYWORD>>                 <<RV.PV>>09756000
        HEREINFO := PARMS (PNUM);  <<GET VOLUME CLASS NAME>>   <<RV.PV>>09758000
        TOS := GET'PUT'NAME (HEREINFO, VCDEF (GVCNAME),        <<RV.PV>>09760000
                             CLASS, WHERE);                    <<RV.PV>>09762000
        IF <> THEN                                             <<RV.PV>>09764000
        BEGIN <<ILLEGAL NAME>>                                 <<RV.PV>>09766000
            DEL;                                               <<RV.PV>>09768000
            BAD'RETURN;                                        <<RV.PV>>09770000
        END;                                                   <<RV.PV>>09772000
        IF TOS <> 1 THEN                                       <<RV.PV>>09774000
        BEGIN <<MISSING :>>                                    <<RV.PV>>09776000
            @WHERE' := WHERE;                                  <<RV.PV>>09778000
            CIERR (VSDEFMISSCOLON, WHERE', 0, CLASS);          <<RV.PV>>09780000
            BAD'RETURN;                                        <<RV.PV>>09782000
        END;                                                   <<RV.PV>>09784000
        NUM'MEMBERS := VSDEF (GVSINFO).(0:4);                  <<RV.PV>>09786000
        PNUM := PNUM + 1; <<GET PAST VOL CLASS NAME>>          <<RV.PV>>09788000
        <<START OF LOOP TO GET AND ANALYZE MEMBERS>>           <<RV.PV>>09790000
        DO BEGIN                                               <<RV.PV>>09792000
               VOLCNT := VOLCNT+1;                             <<RV.PV>>09794000
               HEREINFO := PARMS (PNUM);                       <<RV.PV>>09796000
               GET'PUT'NAME (HEREINFO, VCDEF (GVCPNAME),       <<RV.PV>>09798000
                                    CLASS, WHERE);             <<RV.PV>>09800000
               IF <> THEN <<ILLEGAL NAME>> BAD'RETURN;         <<RV.PV>>09802000
               TOS := 1; <<START SCAN AT 1ST MEMBER ENTRY>>    <<RV.PV>>09804000
               DO BEGIN                                        <<RV.PV>>09806000
                      FOUND := BVSDEF (S0*(GVSMEMBSZ*2)) =     <<RV.PV>>09808000
                             BVCDEF (GVCPNAME*2), (NAMESIZE*2);<<RV.PV>>09810000
                      TOS := TOS+1;                            <<RV.PV>>09812000
                  END UNTIL FOUND OR S0 > NUM'MEMBERS;         <<RV.PV>>09814000
               IF NOT FOUND THEN                               <<RV.PV>>09816000
               BEGIN <<VNAME SPECIFICATION UNIDENTIFIED>>      <<RV.PV>>09818000
                   DEL;                                        <<RV.PV>>09820000
                   @WHERE' := WHERE;                           <<RV.PV>>09822000
                   CIERR (VSDEFUNDFN, WHERE');                 <<RV.PV>>09824000
                   BAD'RETURN;                                 <<RV.PV>>09826000
               END;                                            <<RV.PV>>09828000
               X := TOS-1; <<POSITION OF MEMBER DEFINITION>>   <<RV.PV>>09830000
               MV := MV LOR (LOGICAL (X) = 1);                 <<RV.PV>>09832000
               X := 16-X;  <<FOR SETTING VCLASS MASK>>         <<RV.PV>>09834000
               TOS := GVCINFO';                                <<RV.PV>>09836000
               ASSEMBLE (TSBC 0, X);                           <<RV.PV>>09838000
               IF <> THEN                                      <<RV.PV>>09840000
               BEGIN <<DUPLICATE MEMBER SPECIFICATION>>        <<RV.PV>>09842000
                   DEL;                                        <<RV.PV>>09844000
                   @WHERE' := WHERE;                           <<RV.PV>>09846000
                   CIERR (VSDEFDUPMEMB, WHERE');               <<RV.PV>>09848000
                   BAD'RETURN;                                 <<RV.PV>>09850000
               END;                                            <<RV.PV>>09852000
               GVCINFO' := TOS;                                <<RV.PV>>09854000
           END UNTIL STOP OR (PNUM:=PNUM+1) >= NUMPARMS;       <<RV.PV>>09856000
        IF NOT STOP THEN                                       <<RV.PV>>09858000
        BEGIN                                                  <<RV.PV>>09860000
            IF NOT MV THEN                                     <<RV.PV>>09862000
            BEGIN <<MASTER VOLUME UNDEFINED>>                  <<RV.PV>>09864000
                CIERR (VSDEFUNDFNMASTR);                       <<RV.PV>>09866000
                BAD'RETURN;                                    <<RV.PV>>09868000
            END;                                               <<RV.PV>>09870000
            GVCINFO'.(0:4) := VOLCNT;                          <<RV.PV>>09872000
            VCDEF (GVCINFO) := GVCINFO';                       <<RV.PV>>09874000
        END;                                                   <<RV.PV>>09876000
    END;<<OF CYCLASS>>                                         <<RV.PV>>09878000
LOGICAL PROCEDURE CYMEMBERS (HEREINFO, VSDEF,                  <<RV.PV>>09880000
                             DISKTYPES, PARMSP);               <<RV.PV>>09882000
    VALUE   HEREINFO;                                          <<RV.PV>>09884000
    DOUBLE  HEREINFO;                                          <<RV.PV>>09886000
    ARRAY   VSDEF;                                             <<RV.PV>>09888000
    BYTE ARRAY DISKTYPES, PARMSP;                              <<RV.PV>>09890000
    OPTION PRIVILEGED, INTERNAL;                               <<RV.PV>>09892000
    BEGIN                                                      <<RV.PV>>09894000
        ENTRY CYMEMBERS';                                      <<RV.PV>>09896000
        BYTE POINTER                                           <<RV.PV>>09898000
            WHERE',                                            <<RV.PV>>09900000
            HERE = HEREINFO,                                   <<RV.PV>>09902000
            STRING,                                            <<RV.PV>>09904000
            DEFN;                                              <<RV.PV>>09906000
        POINTER                                                <<RV.PV>>09908000
            MV := 0;  <<MASTER VOL MEMBER TEMP POSITION>>      <<RV.PV>>09910000
        DOUBLE                                                 <<RV.PV>>09912000
                  <<  =      :      ,      CR >>               <<RV.PV>>09914000
            X1 := [8/%75, 8/%72, 8/%54, 8/%15] D;              <<RV.PV>>09916000
        LOGICAL                                                <<RV.PV>>09918000
            SKIPMV := FALSE,                                   <<RV.PV>>09920000
            STOP = CYMEMBERS,                                  <<RV.PV>>09922000
            PARM1 = HERE+1;                                    <<RV.PV>>09924000
        EQUATE                                                 <<RV.PV>>09926000
            CR = %15,                                          <<RV.PV>>09928000
            GVSMEMBSZ = GVSINFO-GVSNAME+1;                     <<RV.PV>>09930000
        DEFINE                                                 <<RV.PV>>09932000
            BAD'RETURN = BEGIN STOP := TRUE; RETURN; END #,    <<RV.PV>>09934000
            WHERE = @PARMSP+(@HERE-@STRING) #,                 <<RV.PV>>09936000
            LNGTH = PARM1.(0:8) #;                             << I.A >>09938000
        BYTE ARRAY                                             <<RV.PV>>09940000
            MEMBERS' (0:7),                                    <<RV.PV>>09942000
            BVSDEF (*) = VSDEF,                                <<RV.PV>>09944000
            DELIMS (*) = X1;                                   <<RV.PV>>09946000
        INTEGER                                                <<RV.PV>>09948000
            MEMBERS = MEMBERS',                                <<RV.PV>>09950000
            VOLCNT := 0,                                       <<RV.PV>>09952000
            NUMPARMS,                                          <<RV.PV>>09954000
            PNUM := 0;                                         <<RV.PV>>09956000
        DOUBLE ARRAY                                           <<RV.PV>>09958000
            PARMS (0:VMAX*2); <<INCLUDES KEYWORD PARAMETER>>   <<RV.PV>>09960000
                                                               <<RV.PV>>09962000
                                                               <<RV.PV>>09964000
        IF FALSE THEN                                          <<RV.PV>>09966000
    CYMEMBERS':                                                <<RV.PV>>09968000
         SKIPMV := TRUE;                                       <<RV.PV>>09970000
        MOVE MEMBERS' := ("MEMBERS",0);                        <<RV.PV>>09972000
        TOS := (LNGTH+2) & LSR (1);                            <<RV.PV>>09974000
        PUSH (S);                                              <<RV.PV>>09976000
        @STRING := TOS & LSL (1);                              <<RV.PV>>09978000
        ASSEMBLE (ADDS 0);                                     <<RV.PV>>09980000
        MOVE STRING := HERE, (LNGTH);                          <<RV.PV>>09982000
        @PARMSP := @HERE;                                      <<RV.PV>>09984000
        STRING (LNGTH) := CR;                                  <<RV.PV>>09986000
        MYCOMMAND (STRING, DELIMS, (VMAX*2)+1,                 <<RV.PV>>09988000
                   NUMPARMS,PARMS);                            <<RV.PV>>09990000
        IF > THEN                                              <<RV.PV>>09992000
        BEGIN <<TOO MANY PARAMETERS>>                          <<RV.PV>>09994000
            CIERR (VSDEFTOOMANY, HERE, 0, MEMBERS);            <<RV.PV>>09996000
            BAD'RETURN;                                        <<RV.PV>>09998000
        END;                                                   <<RV.PV>>10000000
        IF NUMPARMS < 3 THEN                                   <<RV.PV>>10002000
        BEGIN <<NOT ENOUGH PARAMETERS>>                        <<RV.PV>>10004000
            CIERR (VSDEFTOOFEW, HERE, 0, MEMBERS);             <<RV.PV>>10006000
            BAD'RETURN;                                        <<RV.PV>>10008000
        END;                                                   <<RV.PV>>10010000
        PNUM := PNUM + 1; <<GET PAST KEYWORD>>                 <<RV.PV>>10012000
        <<START OF LOOP TO GET AND ANALYZE MEMBERS>>           <<RV.PV>>10014000
        DO BEGIN                                               <<RV.PV>>10016000
               VOLCNT := VOLCNT+1;                             <<RV.PV>>10018000
               HEREINFO := PARMS (PNUM);                       <<RV.PV>>10020000
               TOS := GET'PUT'NAME (HEREINFO,                  <<RV.PV>>10022000
                    VSDEF (VOLCNT*GVSMEMBSZ), MEMBERS, WHERE); <<RV.PV>>10024000
               IF <> THEN                                      <<RV.PV>>10026000
               BEGIN <<ILLEGAL NAME>>                          <<RV.PV>>10028000
                   DEL;                                        <<RV.PV>>10030000
                   BAD'RETURN;                                 <<RV.PV>>10032000
               END;                                            <<RV.PV>>10034000
               IF TOS <> 1 THEN                                <<RV.PV>>10036000
               BEGIN <<MISSING :>>                             <<RV.PV>>10038000
                   @WHERE' := WHERE;                           <<RV.PV>>10040000
                   CIERR (VSDEFMISSCOLON, WHERE', 0, MEMBERS); <<RV.PV>>10042000
                   BAD'RETURN;                                 <<RV.PV>>10044000
               END;                                            <<RV.PV>>10046000
               TOS := 1; <<START SCAN AT 1ST MEMBER ENTRY>>    <<RV.PV>>10048000
               WHILE S0 < VOLCNT DO                            <<RV.PV>>10050000
               BEGIN                                           <<RV.PV>>10052000
                   IF BVSDEF (S0*(GVSMEMBSZ*2)) =              <<RV.PV>>10054000
                    BVSDEF (VOLCNT*(GVSMEMBSZ*2)), (NAMESIZE*2)<<RV.PV>>10056000
                   THEN                                        <<RV.PV>>10058000
                   BEGIN <<DUPLICATE MEMBER DEFINITION>>       <<RV.PV>>10060000
                       DEL;                                    <<RV.PV>>10062000
                       @WHERE' := WHERE;                       <<RV.PV>>10064000
                       CIERR (VSDEFDUPMEMBDEF, WHERE', 0, MEMBERS);     10066000
                       BAD'RETURN;                             <<RV.PV>>10068000
                   END;                                        <<RV.PV>>10070000
                   TOS := TOS+1;                               <<RV.PV>>10072000
               END;                                            <<RV.PV>>10074000
               DEL;                                            <<RV.PV>>10076000
               IF BVSDEF (VOLCNT*(GVSMEMBSZ*2)) =              <<RV.PV>>10078000
                  BVSDEF (GVSNAME), (NAMESIZE*2) THEN          <<RV.PV>>10080000
                @MV := @VSDEF (VOLCNT*GVSMEMBSZ);              <<RV.PV>>10082000
               HEREINFO := PARMS (PNUM+1);                     <<RV.PV>>10084000
               TOS := 0; <<RETURN FOR SEARCH>>                 <<RV.PV>>10086000
               TOS := HEREINFO;                                <<RV.PV>>10088000
               TOS := TOS & LSR (8); <<LENGTH OF PARAMETER>>   <<RV.PV>>10090000
               IF SEARCH (*, *, DISKTYPES, DEFN) = 0 THEN      <<RV.PV>>10092000
               BEGIN <<ILLEGAL DISK TYPE DESIGNATOR>>          <<RV.PV>>10094000
                   @WHERE' := WHERE;                           <<RV.PV>>10096000
                   CIERR (VSDEFUNDFNTYPE, WHERE', 0, MEMBERS); <<RV.PV>>10098000
                   BAD'RETURN;                                 <<RV.PV>>10100000
               END;                                            <<RV.PV>>10102000
               VSDEF ((VOLCNT*GVSMEMBSZ)+GVSINFO).(0:8):= DEFN;<<RV.PV>>10104000
           END UNTIL STOP OR (PNUM:=PNUM+2) >= NUMPARMS;       <<RV.PV>>10106000
        IF NOT STOP THEN                                       <<RV.PV>>10108000
        BEGIN                                                  <<RV.PV>>10110000
            IF NOT SKIPMV THEN                                 <<RV.PV>>10112000
            BEGIN                                              <<RV.PV>>10114000
                IF @MV = 0 THEN                                <<RV.PV>>10116000
                BEGIN <<MASTER VOLUME UNDEFINED>>              <<RV.PV>>10118000
                    CIERR (VSDEFUNDFNMASTR);                   <<RV.PV>>10120000
                    BAD'RETURN;                                <<RV.PV>>10122000
                END;                                           <<RV.PV>>10124000
                IF @MV <> @VSDEF (GVSVOLNAME) THEN             <<RV.PV>>10126000
                BEGIN <<MV ENTRY NEEDS TO GO TO 1ST SLOT>>     <<RV.PV>>10128000
                    TOS := MV (GVSINFO); <<SAVE INFO WORD>>    <<RV.PV>>10130000
                    MOVE MV := VSDEF (GVSVOLNAME), (GVSMEMBSZ);<<RV.PV>>10132000
                    MOVE VSDEF (GVSVOLNAME) :=                 <<RV.PV>>10134000
                         VSDEF (GVSNAME), (NAMESIZE);          <<RV.PV>>10136000
                    VSDEF (GVSVOLINFO) := TOS;                 <<RV.PV>>10138000
                END;                                           <<RV.PV>>10140000
            END;                                               <<RV.PV>>10142000
            TOS := %177777D;                                   <<RV.PV>>10144000
            DS1 := DS1 & DLSL (VOLCNT);                        <<RV.PV>>10146000
            DEL;                                               <<RV.PV>>10148000
            VSDEF (GVSINFO).(0:4) := VOLCNT;                   <<RV.PV>>10150000
            VSDEF (X).(8:8) := TOS; <<SET MASK>>               <<RV.PV>>10152000
        END;                                                   <<RV.PV>>10154000
    END;<<OF CYMEMBERS>>                                       <<RV.PV>>10156000
PROCEDURE CXNEWVSET EXECUTORHEAD;                              <<RV.PV>>10158000
    OPTION PRIVILEGED, UNCALLABLE;                             <<RV.PV>>10160000
    BEGIN                                                      <<RV.PV>>10162000
        DOUBLE                                                 <<RV.PV>>10164000
            PARM;                                              <<RV.PV>>10166000
        BYTE POINTER                                           <<RV.PV>>10168000
            JUNKBP,                                            <<RV.PV>>10170000
            STRING = PARM;                                     <<RV.PV>>10172000
        DOUBLE POINTER                                         <<RV.PV>>10174000
            JUNKDP;                                            <<RV.PV>>10176000
        INTEGER                                                <<RV.PV>>10178000
            JUNK,                                              <<RV.PV>>10180000
            PNUM,                                              <<RV.PV>>10182000
            PARM1 = STRING+1,                                  <<RV.PV>>10184000
            X1 := [8/%73, 8/%15], <<; CR>>                     <<RV.PV>>10186000
            NUMPARMS;                                          <<RV.PV>>10188000
        LOGICAL                                                <<RV.PV>>10190000
            CLASS := FALSE,                                    <<RV.PV>>10192000
            STOP := FALSE;                                     <<RV.PV>>10194000
        INTEGER ARRAY                                          <<RV.PV>>10196000
            ACCOUNT (0:NAMESIZE-1),                            <<RV.PV>>10198000
            GROUP (0:NAMESIZE-1),                              <<RV.PV>>10200000
            VSDEF (0:GVSDSIZE-1),                              <<RV.PV>>10202000
            VCDEF (0:GVCDSIZE-1);                              <<RV.PV>>10204000
        DOUBLE ARRAY                                           <<RV.PV>>10206000
            PARMS (0:2);                                       <<RV.PV>>10208000
        EQUATE                                                 <<RV.PV>>10210000
            CR = %15,                                          <<RV.PV>>10212000
            KEYDICTL = 17,                                     <<RV.PV>>10214000
        DISKTYPESL = 64;                                       <<03513>>10216000
        DEFINE                                                 <<RV.PV>>10218000
            LNGTH = PARM1.(0:8) #;                             << I.A >>10220000
        BYTE ARRAY                                             <<RV.PV>>10222000
            VSET' (0:4),                                       <<RV.PV>>10224000
            BACCOUNT (*) = ACCOUNT,                            <<RV.PV>>10226000
            BGROUP (*) = GROUP,                                <<RV.PV>>10228000
            KEYDICT (0:KEYDICTL-1),                            <<RV.PV>>10230000
            DISKTYPES (0:DISKTYPESL-1),                        <<RV.PV>>10232000
            DELIMS (*) = X1;                                   <<RV.PV>>10234000
        INTEGER                                                <<RV.PV>>10236000
            VSET = VSET';                                      <<RV.PV>>10238000
        INTEGER ARRAY                                          <<RV.PV>>10240000
            INITVSDEF (0:GVSINFO) = PB :=                      <<RV.PV>>10242000
                "        ",                                    <<RV.PV>>10244000
                0,0;                                           <<RV.PV>>10246000
        INTEGER ARRAY                                          <<RV.PV>>10248000
            INITVCDEF (0:GVCUNUSED-1) = PB :=                  <<RV.PV>>10250000
                "        ",                                    <<RV.PV>>10252000
                %100000,0,                                     <<RV.PV>>10254000
                "        ", "        ", "        ";            <<RV.PV>>10256000
        BYTE ARRAY                                             <<RV.PV>>10258000
            KEYDICTX (0:KEYDICTL-1) = PB :=                    <<RV.PV>>10260000
                9,7,"MEMBERS",                                 <<RV.PV>>10262000
                7,5,"CLASS",                                   <<RV.PV>>10264000
                0;                                             <<RV.PV>>10266000
        BYTE ARRAY                                             <<RV.PV>>10268000
    COMMENT                                                    <<00263>>10270000
                                                               <<00263>>10272000
    PSEUDO SUBTYPES FOR THE DIFFERENT DISCS DEFINED            <<00263>>10274000
    BELOW WHERE DEVLOPED AS FOLLOWS:                           <<00263>>10276000
                                                               <<00263>>10278000
    [PSEUDO SUBTYPE] = ([ACTUAL TYPE] * 16) + [ACTUAL SUBTYPE] <<00263>>10280000
                                                               <<00263>>10282000
    ;                                                          <<00263>>10284000
                                                               <<00263>>10286000
            DISKTYPESX (0:DISKTYPESL-1) = PB :=                <<RV.PV>>10288000
                9,6,"HP7905",4,                                <<RV.PV>>10290000
                9,6,"HP7920",8,                                <<RV.PV>>10292000
                9,6,"HP7925",9,                                <<03.KM>>10294000
                9,6,"HP7906",10,                               <<00263>>10296000
                9,6,"HP7902",32,                               <<00263>>10298000
                9,6,"HP9895",32,                               <<01850>>10300000
            9,6,"HP7933",56,                                            10302000
                0;                                             <<RV.PV>>10304000
                                                               <<RV.PV>>10306000
                                                               <<RV.PV>>10308000
        MOVE VSET' := ("VSET",0);                              <<RV.PV>>10310000
        VSDEF := 0;                                            <<RV.PV>>10312000
        MOVE VSDEF (1) := VSDEF, (GVSDSIZE-1);                 <<RV.PV>>10314000
        TOS := VMAX;                                           <<RV.PV>>10316000
        DO BEGIN                                               <<RV.PV>>10318000
               MOVE VSDEF (S0*(GVSINFO+1)) :=                  <<RV.PV>>10320000
                    INITVSDEF, (GVSINFO+1);                    <<RV.PV>>10322000
               TOS := TOS-1;                                   <<RV.PV>>10324000
           END UNTIL <;                                        <<RV.PV>>10326000
        DEL;                                                   <<RV.PV>>10328000
        VCDEF := 0;                                            <<RV.PV>>10330000
        MOVE VCDEF (1) := VCDEF, (GVCDSIZE-1);                 <<RV.PV>>10332000
        MOVE VCDEF := INITVCDEF, (GVCUNUSED);                  <<RV.PV>>10334000
        MYCOMMAND (PARMSP, DELIMS, 3<<MAXPARMS>>,              <<RV.PV>>10336000
                             NUMPARMS, PARMS);                 <<RV.PV>>10338000
        IF > THEN                                              <<RV.PV>>10340000
        BEGIN <<TOO MANY PARAMETERS>>                          <<RV.PV>>10342000
            CIERR (ERRNUM := VSDEFTOOMANY, PARMSP, 0, VSET);   <<04790>>10344000
            RETURN;                                            <<RV.PV>>10346000
        END;                                                   <<RV.PV>>10348000
        IF NUMPARMS < 2 THEN                                   <<RV.PV>>10350000
        BEGIN <<NOT ENOUGH PARAMETERS>>                        <<RV.PV>>10352000
            CIERR (ERRNUM := VSDEFTOOFEW, PARMSP, 0, VSET);    <<04790>>10354000
            RETURN;                                            <<RV.PV>>10356000
        END;                                                   <<RV.PV>>10358000
        TOS := GET'PUT'NAME (PARMS, VSDEF (GVSNAME),           <<RV.PV>>10360000
                             VSET, STRING);                    <<RV.PV>>10362000
        IF <> THEN                                             <<RV.PV>>10364000
        BEGIN <<ILLEGAL OR OMMITTED NAME>>                     <<RV.PV>>10366000
            DEL;                                               <<RV.PV>>10368000
            RETURN;                                            <<RV.PV>>10370000
        END;                                                   <<RV.PV>>10372000
        PNUM := 1;  <<START AFTER VS DEFINITION NAME>>         <<RV.PV>>10374000
        MOVE KEYDICT := KEYDICTX, (KEYDICTL);                  <<RV.PV>>10376000
        MOVE DISKTYPES := DISKTYPESX, (DISKTYPESL);            <<RV.PV>>10378000
    << THE FOLLOWING SECTION OF CODE PARSES THE PARMS >>       <<03513>>10380000
    << FOR "MEMBERS" AND "CLASS" PARMS.               >>       <<03513>>10382000
        DO BEGIN                                               <<RV.PV>>10384000
               PARM := PARMS (PNUM); <<CURRENT PARAMETER>>     <<RV.PV>>10386000
               TOS := (LNGTH+2) & LSR (1);                     <<RV.PV>>10388000
               PUSH (S);                                       <<RV.PV>>10390000
               @JUNKBP := TOS & LSL (1);                       <<RV.PV>>10392000
               ASSEMBLE (ADDS 0); <<ROOM FOR TEMP PARSE>>      <<RV.PV>>10394000
               X1 := %036415; << = CR >>                       <<RV.PV>>10396000
               MOVE JUNKBP := STRING, (LNGTH);                 <<RV.PV>>10398000
               JUNKBP (LNGTH) := CR;                           <<RV.PV>>10400000
               TOS := 4;                                       <<RV.PV>>10402000
               PUSH (S);                                       <<RV.PV>>10404000
               @JUNKDP := TOS;                                 <<RV.PV>>10406000
               ASSEMBLE (ADDS 0);                              <<RV.PV>>10408000
               MYCOMMAND (JUNKBP, DELIMS, 2<<MAXPARMS>>,       <<RV.PV>>10410000
                          JUNK, JUNKDP);                       <<RV.PV>>10412000
               IF > THEN                                       <<RV.PV>>10414000
               BEGIN <<TOO MANY PARAMETERS>>                   <<RV.PV>>10416000
                   CIERR (ERRNUM :=VSDEFTOOMANY,STRING,0,VSET);<<04790>>10418000
                   RETURN;                                     <<RV.PV>>10420000
               END;                                            <<RV.PV>>10422000
               IF JUNK < 2 THEN                                <<RV.PV>>10424000
               BEGIN <<NOT ENOUGH PARAMETERS>>                 <<RV.PV>>10426000
                   CIERR (ERRNUM := VSDEFTOOFEW,STRING,0,VSET);<<04790>>10428000
                   RETURN;                                     <<RV.PV>>10430000
               END;                                            <<RV.PV>>10432000
               TOS := JUNKDP;                                  <<RV.PV>>10434000
               DEL;                                            <<RV.PV>>10436000
               @JUNKBP := TOS;                                 <<RV.PV>>10438000
               TOS := 0;  <<FOR RETURN FROM SEARCH>>           <<RV.PV>>10440000
               TOS := JUNKDP; <<1ST PAIR OF PARM WORDS>>       <<RV.PV>>10442000
               TOS := TOS & LSR (8); <<LENGTH OF PARAMETER>>   <<RV.PV>>10444000
               TOS := SEARCH (*, *, KEYDICT);                  <<RV.PV>>10446000
               IF S0 = 0 THEN                                  <<RV.PV>>10448000
               BEGIN <<ILLEGAL KEYWORD>>                       <<RV.PV>>10450000
                   DEL;                                        <<RV.PV>>10452000
                   CIERR (ERRNUM := VSDEFILLEGALKEY, STRING);  <<04790>>10454000
                   RETURN;                                     <<RV.PV>>10456000
               END;                                            <<RV.PV>>10458000
               TOS := JUNKDP;                                  <<RV.PV>>10460000
               DELB;                                           <<RV.PV>>10462000
               IF TOS.(11:5) <> 0 THEN                         <<RV.PV>>10464000
               BEGIN <<KEYWORD NOT FOLLOWED BY AN = >>         <<RV.PV>>10466000
                   CIERR (ERRNUM := VSDEFMISSEQUAL, STRING);   <<04790>>10468000
                   RETURN;                                     <<RV.PV>>10470000
               END;                                            <<RV.PV>>10472000
               X := TOS;                                       <<RV.PV>>10474000
               TOS := ((LNGTH+2) & LSR (1)) + 4;               <<RV.PV>>10476000
               ASSEMBLE (SUBS 0); <<CUT BACK STACK STORAGE>>   <<RV.PV>>10478000
               CASE X OF                                       <<RV.PV>>10480000
               BEGIN                                           <<RV.PV>>10482000
                   ;  <<TAKEN CARE OF ABOVE>>                  <<RV.PV>>10484000
                   BEGIN <<MEMBERS>>                           <<RV.PV>>10486000
                       STOP := CYMEMBERS (PARM, VSDEF,         <<RV.PV>>10488000
                                          DISKTYPES, PARMSP);  <<RV.PV>>10490000
                   END;                                        <<RV.PV>>10492000
                   BEGIN <<CLASS>>                             <<RV.PV>>10494000
                       STOP := CYCLASS (PARM, VSDEF,           <<RV.PV>>10496000
                                        VCDEF, PARMSP);        <<RV.PV>>10498000
                       CLASS := TRUE;                          <<RV.PV>>10500000
                   END;                                        <<RV.PV>>10502000
               END;<<OF CASE ON KEYWORD>>                      <<RV.PV>>10504000
           END UNTIL STOP OR (PNUM:=PNUM+1) >= NUMPARMS;       <<RV.PV>>10506000
        IF NOT STOP THEN                                       <<RV.PV>>10508000
        BEGIN                                                  <<RV.PV>>10510000
            WHO (, , , ,BGROUP, BACCOUNT);                     <<RV.PV>>10512000
            TOS := 0;  TOS.(ENDLEVELF) := VSDEFLEVEL;          <<RV.PV>>10514000
            TOS := DIRECINSERT (S0, 0D, ACCOUNT, GROUP, VSDEF, <<38.PV>>10516000
                                VSDEF (GVSLINKAGEW));          <<RV.PV>>10518000
            IF <> THEN                                         <<RV.PV>>10520000
            BEGIN                                              <<RV.PV>>10522000
                IF S0 = 2 THEN SUDDENDEATH (505);              <<RV.PV>>10524000
                CYDIRERR' (*, %147000, ERRNUM);                <<RV.PV>>10526000
            END ELSE DDEL;                                     <<RV.PV>>10528000
            IF CLASS THEN                                      <<RV.PV>>10530000
            BEGIN                                              <<RV.PV>>10532000
                MOVE VCDEF (GVCPANAME) := ACCOUNT, (NAMESIZE); <<RV.PV>>10534000
                MOVE VCDEF (GVCPGNAME) := GROUP, (NAMESIZE);   <<RV.PV>>10536000
                MOVE VCDEF (GVCPVSNAME) :=                     <<RV.PV>>10538000
                     VSDEF (GVSNAME), (NAMESIZE);              <<RV.PV>>10540000
                TOS := DIRECINSERT (S0, 0D, ACCOUNT, GROUP,    <<38.PV>>10542000
                             VCDEF, VCDEF (GVCLINKAGEW));      <<RV.PV>>10544000
                IF <> THEN                                     <<RV.PV>>10546000
                BEGIN                                          <<RV.PV>>10548000
                    TOS := DIRECPURGE (S2, 0D, ACCOUNT,        <<38.PV>>10550000
                                       GROUP, VSDEF);          <<RV.PV>>10552000
                    IF <> THEN SUDDENDEATH (502);              <<RV.PV>>10554000
                    DDEL;                                      <<RV.PV>>10556000
                    IF S0 = 2 THEN SUDDENDEATH (503);          <<RV.PV>>10558000
                    CYDIRERR' (*, %147000, ERRNUM);            <<RV.PV>>10560000
                    DEL;                                       <<RV.PV>>10562000
                END ELSE ASSEMBLE (DDEL, DEL)                  <<RV.PV>>10564000
            END ELSE DEL;                                      <<RV.PV>>10566000
        END;                                                   <<RV.PV>>10568000
    END;<<OF CXNEWVSET>>                                       <<RV.PV>>10570000
INTEGER PROCEDURE CYALTVS (ELEMENT,LEVEL,PARMS,SIRS);          <<RV.PV>>10572000
    VALUE   LEVEL,PARMS,SIRS;                                  <<RV.PV>>10574000
    INTEGER ARRAY   ELEMENT;                                   <<RV.PV>>10576000
    INTEGER LEVEL,PARMS;                                       <<RV.PV>>10578000
    DOUBLE  SIRS;                                              <<RV.PV>>10580000
    OPTION PRIVILEGED, UNCALLABLE;                             <<04.RO>>10582000
    BEGIN                                                      <<RV.PV>>10584000
        LOGICAL                                                <<RV.PV>>10586000
            DADIRTY = DB+145;                                  <<38.PV>>10588000
        INTEGER                                                <<RV.PV>>10590000
            VSVOLCNT,                                          <<RV.PV>>10592000
            ALTVOLCNT,                                         <<RV.PV>>10594000
            VOLCNT,                                            <<RV.PV>>10596000
            JUNK := 1; <<REL DISP OF 1ST NEW MEMBER>>          <<RV.PV>>10598000
        INTEGER ARRAY                                          <<RV.PV>>10600000
            VSDEF (*);                                         <<RV.PV>>10602000
        BYTE ARRAY                                             <<RV.PV>>10604000
            BVSDEF (*) = VSDEF;                                <<RV.PV>>10606000
        DEFINE                                                 <<RV.PV>>10608000
            RESULT = ARRQ0 (PARMS-1) #;                        <<RV.PV>>10610000
        EQUATE                                                 <<RV.PV>>10612000
            GVSMEMBSZ = GVSINFO-GVSNAME+1,                     <<RV.PV>>10614000
            DIRDST = 20;                                       <<RV.PV>>10616000
                                                               <<RV.PV>>10618000
        CYALTVS := 5; <<SIR NOT RELEASED, STOP SCAN>>          <<RV.PV>>10620000
        PARMS := PARMS - DELTAQ;                               <<RV.PV>>10622000
        IF LEVEL <> VSDEFLEVEL THEN RETURN;                    <<RV.PV>>10624000
        IF ELEMENT (GVCLINKAGEW) >= 0 THEN                     <<RV.PV>>10626000
        BEGIN <<SET DEFINITION>>                               <<RV.PV>>10628000
            VSVOLCNT := ELEMENT (GVCINFO).(0:4);               <<RV.PV>>10630000
            ALTVOLCNT := ARRQ0 (X+PARMS).(0:4);                <<RV.PV>>10632000
            IF (VOLCNT := VSVOLCNT + ALTVOLCNT) > VMAX THEN    <<RV.PV>>10634000
            BEGIN                                              <<RV.PV>>10636000
                DDEL;                                          <<RV.PV>>10638000
                RESULT := ALTVSDVMAX;                          <<RV.PV>>10640000
                RETURN;                                        <<RV.PV>>10642000
            END;                                               <<RV.PV>>10644000
            EXCHANGEDB (0);                                    <<RV.PV>>10646000
            TOS := GVSDSIZE;                                   <<RV.PV>>10648000
            @VSDEF := @S0;                                     <<RV.PV>>10650000
            @BVSDEF := @VSDEF & LSL (1);                       <<RV.PV>>10652000
            ASSEMBLE (ADDS 0);                                 <<RV.PV>>10654000
            TOS := @VSDEF;     <<D>>                           <<RV.PV>>10656000
            TOS := DIRDST;     <<C>>                           <<RV.PV>>10658000
            TOS := @ELEMENT;   <<B>>                           <<RV.PV>>10660000
            TOS := GVSDSIZE;   <<A>>                           <<RV.PV>>10662000
            ASSEMBLE (MFDS); <<MOVE TO LOCAL STORE>>           <<RV.PV>>10664000
            DO BEGIN <<CHECK AND UPDATE SET DEFINITION ENTRY>> <<RV.PV>>10666000
                   VSVOLCNT := VSVOLCNT+1;                     <<RV.PV>>10668000
                   MOVE VSDEF (VSVOLCNT*GVSMEMBSZ) :=          <<RV.PV>>10670000
                        ARRQ0 (PARMS+(JUNK*GVSMEMBSZ)),        <<RV.PV>>10672000
                        (GVSMEMBSZ);                           <<RV.PV>>10674000
                   TOS := 1; <<START SCAN AT 1ST MEMBER ENTRY>><<RV.PV>>10676000
                   WHILE S0 < VSVOLCNT DO                      <<RV.PV>>10678000
                   BEGIN                                       <<RV.PV>>10680000
                       IF BVSDEF ((S0*GVSMEMBSZ)*2) =          <<RV.PV>>10682000
                          BVSDEF ((VSVOLCNT*GVSMEMBSZ)*2),     <<RV.PV>>10684000
                          (NAMESIZE*2) THEN                    <<RV.PV>>10686000
                       BEGIN <<DUPLICATE MEMBER DEFINITION>>   <<RV.PV>>10688000
                           DEL; <<SCAN CONTROL COUNTER>>       <<RV.PV>>10690000
                           RESULT := ALTVSDDUPMEMB;            <<RV.PV>>10692000
                           EXCHANGEDB (DIRDST);                <<RV.PV>>10694000
                           RETURN;                             <<RV.PV>>10696000
                       END;                                    <<RV.PV>>10698000
                       TOS := TOS+1; <<CHECK NEXT ONE>>        <<RV.PV>>10700000
                   END;                                        <<RV.PV>>10702000
                   DEL; <<SCAN CONTROL COUNTER>>               <<RV.PV>>10704000
                   JUNK := JUNK+1; <<NEXT NEW MEMBER>>         <<RV.PV>>10706000
               END UNTIL VSVOLCNT >= VOLCNT;                   <<RV.PV>>10708000
            TOS := VSDEF (GVSINFO).(8:8); <<OLD MASK>>         <<RV.PV>>10710000
            TOS := %100000;                                    <<RV.PV>>10712000
            S0 := S0 & ASR (ALTVOLCNT); <<MASK EXPANSION>>     <<RV.PV>>10714000
            DS1 := DS1 & DLSL (ALTVOLCNT); <<EXPAND MASK>>     <<RV.PV>>10716000
            DEL; <<MASK EXPANSION>>                            <<RV.PV>>10718000
            S0.(0:4) := VOLCNT; <<COMPLETE GVSINFO>>           <<RV.PV>>10720000
            VSDEF (GVSINFO) := TOS;                            <<RV.PV>>10722000
            TOS := DIRDST;    <<D>>                            <<RV.PV>>10724000
            TOS := @ELEMENT;  <<C>>                            <<RV.PV>>10726000
            TOS := @VSDEF;    <<B>>                            <<RV.PV>>10728000
            TOS := GVSDSIZE;  <<A>>                            <<RV.PV>>10730000
            ASSEMBLE (MTDS); <<UPDATE DDS>>                    <<RV.PV>>10732000
            EXCHANGEDB (DIRDST);                               <<RV.PV>>10734000
            DADIRTY := TRUE;                                   <<RV.PV>>10736000
        END ELSE RESULT := ALTVSDNOTAVSD;                      <<RV.PV>>10738000
    END;<<OF CYALTVS>>                                         <<RV.PV>>10740000
INTEGER PROCEDURE CYALTVC (ELEMENT,LEVEL,PARMS,SIRS);          <<RV.PV>>10742000
    VALUE   LEVEL,PARMS,SIRS;                                  <<RV.PV>>10744000
    INTEGER ARRAY   ELEMENT;                                   <<RV.PV>>10746000
    INTEGER LEVEL,PARMS;                                       <<RV.PV>>10748000
    DOUBLE  SIRS;                                              <<RV.PV>>10750000
    OPTION PRIVILEGED, UNCALLABLE;                             <<04.RO>>10752000
    BEGIN                                                      <<RV.PV>>10754000
        LOGICAL                                                <<RV.PV>>10756000
            DADIRTY = DB+145;                                  <<38.PV>>10758000
        INTEGER                                                <<RV.PV>>10760000
            VOLCNT;                                            <<RV.PV>>10762000
        DEFINE                                                 <<RV.PV>>10764000
            RESULT = ARRQ0 (PARMS-1) #;                        <<RV.PV>>10766000
                                                               <<RV.PV>>10768000
        CYALTVC := 5; <<SIR NOT RELEASED, STOP SCAN>>          <<RV.PV>>10770000
        PARMS := PARMS - DELTAQ;                               <<RV.PV>>10772000
        IF LEVEL <> VSDEFLEVEL THEN RETURN;                    <<RV.PV>>10774000
        IF ELEMENT (GVCLINKAGEW) < 0 THEN                      <<RV.PV>>10776000
        BEGIN <<CLASS DEFINITION>>                             <<RV.PV>>10778000
            TOS := ELEMENT (GVCINFO);                          <<RV.PV>>10780000
            TOS := ARRQ0 (X+PARMS);                            <<RV.PV>>10782000
            VOLCNT := S0.(0:4) + S1.(0:4);                     <<RV.PV>>10784000
            IF (LS0.(8:8) LAND LS1.(8:8)) <> 0 THEN            <<RV.PV>>10786000
            BEGIN                                              <<RV.PV>>10788000
                DDEL;                                          <<RV.PV>>10790000
                RESULT := ALTVCSDUPMEMB;                       <<RV.PV>>10792000
                RETURN;                                        <<RV.PV>>10794000
            END;                                               <<RV.PV>>10796000
            S0 := LS0.(8:8) LOR LS1.(8:8);                     <<RV.PV>>10798000
            S0.(0:4) := VOLCNT;                                <<RV.PV>>10800000
            ELEMENT (GVCINFO) := TOS;                          <<RV.PV>>10802000
            DEL;                                               <<RV.PV>>10804000
            DADIRTY := TRUE;                                   <<RV.PV>>10806000
        END ELSE RESULT := ALTVCSNOTAVCD;                      <<RV.PV>>10808000
    END;<<OF CYALTVC>>                                         <<RV.PV>>10810000
PROCEDURE CXALTVSET EXECUTORHEAD;                              <<RV.PV>>10812000
    OPTION PRIVILEGED, UNCALLABLE;                             <<RV.PV>>10814000
    BEGIN                                                      <<RV.PV>>10816000
        LOGICAL ARRAY                                          <<RV.PV>>10818000
            COMMARY (0:1+(GVSDSIZE-1)) = Q,                    <<RV.PV>>10820000
            RESULT (*) = COMMARY,                              <<RV.PV>>10822000
            DSPARMS (*) = RESULT (1),                          <<RV.PV>>10824000
            VCDEF (*) = DSPARMS,                               <<RV.PV>>10826000
            VSDEF' (*) = VCDEF,                                <<RV.PV>>10828000
            VSDEF (0:GVSDSIZE-1),                              <<RV.PV>>10830000
            ACCOUNT (0:NAMESIZE-1),                            <<RV.PV>>10832000
            GROUP (0:NAMESIZE-1),                              <<RV.PV>>10834000
            VSNAME (0:NAMESIZE-1);                             <<RV.PV>>10836000
        DOUBLE                                                 <<RV.PV>>10838000
            PARM;                                              <<RV.PV>>10840000
        BYTE POINTER                                           <<RV.PV>>10842000
            JUNKBP,                                            <<RV.PV>>10844000
            STRING = PARM;                                     <<RV.PV>>10846000
        DOUBLE POINTER                                         <<RV.PV>>10848000
            JUNKDP;                                            <<RV.PV>>10850000
        INTEGER                                                <<RV.PV>>10852000
            JUNK,                                              <<RV.PV>>10854000
            PNUM := 0,                                         <<RV.PV>>10856000
            PARM1 = STRING+1,                                  <<RV.PV>>10858000
            X1 := [8/";", 8/%15], <<; CR>>                     <<RV.PV>>10860000
            NUMPARMS;                                          <<RV.PV>>10862000
        LOGICAL                                                <<RV.PV>>10864000
            STOP := FALSE;                                     <<RV.PV>>10866000
        DOUBLE ARRAY                                           <<RV.PV>>10868000
            PARMS (0:3);                                       <<RV.PV>>10870000
        EQUATE                                                 <<RV.PV>>10872000
            GVSMEMBSZ = GVSINFO-GVSNAME+1,                     <<RV.PV>>10874000
            CR = %15,                                          <<RV.PV>>10876000
            KEYDICTL = 35,                                     <<RV.PV>>10878000
        DISKTYPESL = 64;                                       <<03513>>10880000
        DEFINE                                                 <<RV.PV>>10882000
            LNGTH = PARM1.(0:8) #;                             << I.A >>10884000
        BYTE ARRAY                                             <<RV.PV>>10886000
            ALTVSET' (0:7),                                    <<RV.PV>>10888000
            KEYDICT (0:KEYDICTL-1),                            <<RV.PV>>10890000
            DISKTYPES (0:DISKTYPESL-1),                        <<RV.PV>>10892000
            DELIMS (*) = X1;                                   <<RV.PV>>10894000
        INTEGER                                                <<RV.PV>>10896000
            ALTVSET = ALTVSET';                                <<RV.PV>>10898000
        INTEGER ARRAY                                          <<RV.PV>>10900000
            INITVSDEF (0:GVSINFO) = PB :=                      <<RV.PV>>10902000
                "        ",                                    <<RV.PV>>10904000
                0,0;                                           <<RV.PV>>10906000
        INTEGER ARRAY                                          <<RV.PV>>10908000
            INITVCDEF (0:GVCUNUSED-1) = PB :=                  <<RV.PV>>10910000
                "        ",                                    <<RV.PV>>10912000
                %100000,0,                                     <<RV.PV>>10914000
                "        ", "        ", "        ";            <<RV.PV>>10916000
        BYTE ARRAY                                             <<RV.PV>>10918000
            KEYDICTX (0:KEYDICTL-1) = PB :=                    <<RV.PV>>10920000
                13,11,"EXPANDCLASS",                           <<RV.PV>>10922000
                10,8,"ADDCLASS",                               <<RV.PV>>10924000
                11,9,"EXPANDSET",                              <<RV.PV>>10926000
                0;                                             <<RV.PV>>10928000
    COMMENT                                                    <<00263>>10930000
                                                               <<00263>>10932000
    PSEUDO SUBTYPES FOR THE DIFFERENT DISCS DEFINED            <<00263>>10934000
    BELOW WHERE DEVLOPED AS FOLLOWS:                           <<00263>>10936000
                                                               <<00263>>10938000
    [PSEUDO SUBTYPE] = ([ACTUAL TYPE] * 16) + [ACTUAL SUBTYPE] <<00263>>10940000
                                                               <<00263>>10942000
    ;                                                          <<00263>>10944000
                                                               <<00263>>10946000
        BYTE ARRAY                                             <<RV.PV>>10948000
            DISKTYPESX (0:DISKTYPESL-1) = PB :=                <<RV.PV>>10950000
                9,6,"HP7905",4,                                <<RV.PV>>10952000
                9,6,"HP7920",8,                                <<RV.PV>>10954000
                9,6,"HP7925",9,                                <<03.KM>>10956000
                9,6,"HP7906",10,                               <<00263>>10958000
                9,6,"HP7902",32,                               <<00263>>10960000
            9,6,"HP9895",32,                                   <<03513>>10962000
            9,6,"HP7933",56,                                            10964000
                0;                                             <<RV.PV>>10966000
                                                               <<RV.PV>>10968000
                                                               <<RV.PV>>10970000
        MOVE ALTVSET' := ("ALTVSET",0);                        <<RV.PV>>10972000
        MYCOMMAND (PARMSP, DELIMS, 4<<MAXPARMS>>,              <<RV.PV>>10974000
                             NUMPARMS, PARMS);                 <<RV.PV>>10976000
        IF > THEN                                              <<RV.PV>>10978000
        BEGIN <<TOO MANY PARAMETERS>>                          <<RV.PV>>10980000
            CIERR (ERRNUM := VSDEFTOOMANY, PARMSP, 0, ALTVSET);<<04790>>10982000
            RETURN;                                            <<RV.PV>>10984000
        END;                                                   <<RV.PV>>10986000
        IF NUMPARMS < 2 THEN                                   <<RV.PV>>10988000
        BEGIN <<NOT ENOUGH PARAMETERS>>                        <<RV.PV>>10990000
            CIERR (ERRNUM := VSDEFTOOFEW, PARMSP, 0, ALTVSET); <<04790>>10992000
            RETURN;                                            <<RV.PV>>10994000
        END;                                                   <<RV.PV>>10996000
        PARM := PARMS (PNUM);                                  <<RV.PV>>10998000
    << MOVE STRING TO VSNAME IS WHAT'S DONE HERE >>            <<03513>>11000000
        TOS := GET'PUT'NAME (PARMS, VSNAME,                    <<RV.PV>>11002000
                             ALTVSET, STRING);                 <<RV.PV>>11004000
        IF <> THEN                                             <<RV.PV>>11006000
        BEGIN <<ILLEGAL OR OMMITTED NAME>>                     <<RV.PV>>11008000
            DEL;                                               <<RV.PV>>11010000
            RETURN;                                            <<RV.PV>>11012000
        END;                                                   <<RV.PV>>11014000
        WHO (, , , , GROUP,ACCOUNT);                           <<RV.PV>>11016000
        PNUM := PNUM + 1;  <<START AFTER VS DEFINITION NAME>>  <<RV.PV>>11018000
    << INITIALIZE KEYDICTX AND DISKTYPESX FROM PB  >>          <<03513>>11020000
    << RELATIVE ARRAY TO DB RELATIVE ARRAY.        >>          <<03513>>11022000
        MOVE KEYDICT := KEYDICTX, (KEYDICTL);                  <<RV.PV>>11024000
        MOVE DISKTYPES := DISKTYPESX, (DISKTYPESL);            <<RV.PV>>11026000
    << THE FOLLOWING SECTION OF CODE PARSES THE PARMS >>       <<03513>>11028000
    << FOR "ADDCLASS", "EXPANDCLASS", AND "EXPANDSET".>>       <<03513>>11030000
        DO BEGIN                                               <<RV.PV>>11032000
               PARM := PARMS (PNUM); <<CURRENT PARAMETER>>     <<RV.PV>>11034000
            << CHANGE TO A WORD LENGTH  >>                     <<03513>>11036000
               TOS := (LNGTH+2) & LSR (1);                     <<RV.PV>>11038000
               PUSH (S);                                       <<RV.PV>>11040000
               @JUNKBP := TOS & LSL (1);                       <<RV.PV>>11042000
               ASSEMBLE (ADDS 0); <<ROOM FOR TEMP PARSE>>      <<RV.PV>>11044000
               X1 := [8/"=", 8/CR];                            <<RV.PV>>11046000
               MOVE JUNKBP := STRING, (LNGTH);                 <<RV.PV>>11048000
               JUNKBP (LNGTH) := CR;                           <<RV.PV>>11050000
               TOS := 4;                                       <<RV.PV>>11052000
               PUSH (S);                                       <<RV.PV>>11054000
               @JUNKDP := TOS;                                 <<RV.PV>>11056000
               ASSEMBLE (ADDS 0);                              <<RV.PV>>11058000
               MYCOMMAND (JUNKBP, DELIMS, 2<<MAXPARMS>>,       <<RV.PV>>11060000
                          JUNK, JUNKDP);                       <<RV.PV>>11062000
               IF > THEN                                       <<RV.PV>>11064000
               BEGIN <<TOO MANY PARAMETERS>>                   <<RV.PV>>11066000
                  CIERR(ERRNUM:=VSDEFTOOMANY,STRING,0,ALTVSET);<<04790>>11068000
                   RETURN;                                     <<RV.PV>>11070000
               END;                                            <<RV.PV>>11072000
               IF JUNK < 2 THEN                                <<RV.PV>>11074000
               BEGIN <<NOT ENOUGH PARAMETERS>>                 <<RV.PV>>11076000
                   CIERR(ERRNUM:=VSDEFTOOFEW,STRING,0,ALTVSET);<<04790>>11078000
                   RETURN;                                     <<RV.PV>>11080000
               END;                                            <<RV.PV>>11082000
               TOS := JUNKDP;                                  <<RV.PV>>11084000
               DEL;                                            <<RV.PV>>11086000
               @JUNKBP := TOS;                                 <<RV.PV>>11088000
               TOS := 0;  <<FOR RETURN FROM SEARCH>>           <<RV.PV>>11090000
               TOS := JUNKDP; <<1ST PAIR OF PARM WORDS>>       <<RV.PV>>11092000
               TOS := TOS & LSR (8); <<LENGTH OF PARAMETER>>   <<RV.PV>>11094000
               TOS := SEARCH (*, *, KEYDICT);                  <<RV.PV>>11096000
            << ENTRY NUMBER IS RETURNED TO TOS  >>             <<03513>>11098000
               IF S0 = 0 THEN                                  <<RV.PV>>11100000
               BEGIN <<ILLEGAL KEYWORD>>                       <<RV.PV>>11102000
                   DEL;                                        <<RV.PV>>11104000
                   CIERR (ERRNUM := VSDEFILLEGALKEY, STRING);  <<04790>>11106000
                   RETURN;                                     <<RV.PV>>11108000
               END;                                            <<RV.PV>>11110000
               TOS := JUNKDP;                                  <<RV.PV>>11112000
               DELB;                                           <<RV.PV>>11114000
               IF TOS.(11:5) <> 0 THEN                         <<RV.PV>>11116000
               BEGIN <<KEYWORD NOT FOLLOWED BY AN = >>         <<RV.PV>>11118000
                   CIERR (ERRNUM := VSDEFMISSEQUAL, STRING);   <<04790>>11120000
                   RETURN;                                     <<RV.PV>>11122000
               END;                                            <<RV.PV>>11124000
               X := TOS;                                       <<RV.PV>>11126000
            << X IS ENTRY VALUE FROM KEYDICT    >>             <<03513>>11128000
               TOS := ((LNGTH+2) & LSR (1)) + 4;               <<RV.PV>>11130000
               ASSEMBLE (SUBS 0); <<CUT BACK STACK STORAGE>>   <<RV.PV>>11132000
               CASE X OF  <<"KEYWORD">>                        <<RV.PV>>11134000
               BEGIN                                           <<RV.PV>>11136000
                   ;  <<TAKEN CARE OF ABOVE>>                  <<RV.PV>>11138000
                   BEGIN <<EXPANDCLASS>>                       <<RV.PV>>11140000
                       TOS := 0;  TOS.(ENDLEVELF) := VSDEFLEVEL;        11142000
                       IF (TOS := DIRECFIND (S0,0D,ACCOUNT,GROUP,       11144000
                                           VSNAME,VSDEF)) <> 0D THEN    11146000
                       BEGIN                                   <<RV.PV>>11148000
                           IF S0=2 AND GROUPLEVEL<=S1<=ACCOUNTLEVEL     11150000
                            THEN SUDDENDEATH (504);            <<RV.PV>>11152000
                           CYDIRERR' (*,%120000,ERRNUM);       <<RV.PV>>11154000
                           DEL; <<TYPE>>                       <<RV.PV>>11156000
                           STOP := TRUE;                       <<RV.PV>>11158000
                       END ELSE                                <<RV.PV>>11160000
                       IF INTEGER(VSDEF(GVSLINKAGEW)) >= 0 THEN<<01.RO>>11162000
                        BEGIN <<ITS A VOLUME SET DEF ENTRY>>   <<RV.PV>>11164000
                            VCDEF := 0;                        <<RV.PV>>11166000
                            MOVE VCDEF (1) := VCDEF, (GVCDSIZE-1);      11168000
                            MOVE VCDEF := INITVCDEF, (GVCUNUSED);       11170000
                            IF NOT STOP := CYCLASS' (PARM,VSDEF,VCDEF,  11172000
                                                     PARMSP) THEN       11174000
                            BEGIN                                       11176000
                                ASSEMBLE (CAB); <<STILL SET UP>>        11178000
                                TOS.(TOLEVELF) := VSDEFLEVEL;           11180000
                                RESULT := 0;                            11182000
                                TOS := DIRECSCAN (*,0D,ACCOUNT,GROUP,   11184000
                                           VCDEF,CYALTVC,DSPARMS);      11186000
                                IF <> THEN                              11188000
                                BEGIN                                   11190000
                                    IF S0=2 AND                         11192000
                                       GROUPLEVEL<=S1<=ACCOUNTLEVEL     11194000
                                     THEN SUDDENDEATH (505);            11196000
                                    CYDIRERR' (*,%120000,ERRNUM);       11198000
                                    DEL; <<TYPE>>                       11200000
                                    STOP := TRUE;                       11202000
                                END ELSE                                11204000
                                BEGIN                                   11206000
                                    DDEL; DEL;                          11208000
                                    IF STOP := (RESULT <> 0) THEN       11210000
                                  CIERR(ERRNUM:=RESULT,STRING);<<04790>>11212000
                                END;                                    11214000
                            END; <<NOT STOP>>                           11216000
                        END ELSE                                        11218000
                        BEGIN <<NOT A SET DEFINITION>>                  11220000
                            STOP := FALSE;                              11222000
                           CIERR(ERRNUM:=ALTVSDNOTAVSD,PARMSP);<<04790>>11224000
                        END;                                            11226000
                   END; <<EXPANDCLASS>>                                 11228000
                   BEGIN <<ADDCLASS>>                                   11230000
                       TOS := 0;  TOS.(ENDLEVELF) := VSDEFLEVEL;        11232000
                       IF (TOS := DIRECFIND (S0,0D,ACCOUNT,GROUP,       11234000
                                           VSNAME,VSDEF)) <> 0D THEN    11236000
                       BEGIN                                   <<RV.PV>>11238000
                           IF S0=2 AND GROUPLEVEL<=S1<=ACCOUNTLEVEL     11240000
                            THEN SUDDENDEATH (504);            <<RV.PV>>11242000
                           CYDIRERR' (*,%120000,ERRNUM);       <<RV.PV>>11244000
                           DEL; <<TYPE>>                       <<RV.PV>>11246000
                           STOP := TRUE;                       <<RV.PV>>11248000
                       END ELSE                                <<RV.PV>>11250000
                       IF INTEGER(VSDEF(GVSLINKAGEW)) >= 0 THEN<<01.RO>>11252000
                        BEGIN <<ITS A VOLUME SET DEFINITION>>           11254000
                            VCDEF := 0;                                 11256000
                            MOVE VCDEF (1) := VCDEF, (GVCDSIZE-1);      11258000
                            MOVE VCDEF := INITVCDEF, (GVCUNUSED);       11260000
                            IF NOT STOP := CYCLASS (PARM, VSDEF,        11262000
                                                    VCDEF, PARMSP) THEN 11264000
                            BEGIN                                       11266000
                                MOVE VCDEF (GVCPANAME) :=               11268000
                                     ACCOUNT , (NAMESIZE);              11270000
                                MOVE VCDEF (GVCPGNAME) :=               11272000
                                     GROUP, (NAMESIZE);                 11274000
                                MOVE VCDEF (GVCPVSNAME) :=              11276000
                                     VSDEF (GVSNAME), (NAMESIZE);       11278000
                                ASSEMBLE (CAB); <<STILL SET UP>>        11280000
                                TOS.(TOLEVELF) := VSDEFLEVEL;           11282000
                                TOS:=DIRECINSERT (*, 0D, ACCOUNT, GROUP,11284000
                                          VCDEF, VCDEF (GVCLINKAGEW));  11286000
                                IF <> THEN                              11288000
                                BEGIN                                   11290000
                                    IF S0 = 2 THEN SUDDENDEATH (505);   11292000
                                    CYDIRERR' (*, %147000, ERRNUM);     11294000
                                    DEL;                                11296000
                                END ELSE ASSEMBLE (DDEL, DEL);          11298000
                            END;  <<NOT STOP>>                          11300000
                        END ELSE                                        11302000
                        BEGIN <<NOT SET DEFINITION ENTRY>>              11304000
                            STOP := TRUE;                               11306000
                           CIERR(ERRNUM:=ALTVSDNOTAVSD,PARMSP);<<04790>>11308000
                        END;                                            11310000
                   END; <<ADDCLASS>>                                    11312000
                   BEGIN <<EXPANDSET>>                                  11314000
                       TOS := VMAX;                                     11316000
                       DO BEGIN                                         11318000
                              MOVE VSDEF' (S0*(GVSMEMBSZ)) :=           11320000
                                   INITVSDEF, (GVSMEMBSZ);              11322000
                              TOS := TOS-1;                             11324000
                          END UNTIL <;                                  11326000
                       DEL; <<LOOP CONTROL>>                            11328000
                       IF NOT STOP := CYMEMBERS' (PARM,VSDEF',          11330000
                                       DISKTYPES,PARMSP) THEN           11332000
                       BEGIN                                            11334000
                           RESULT := 0;                                 11336000
                           TOS := 0;  TOS.(TOLEVELF) := VSDEFLEVEL;     11338000
                           TOS.(ENDLEVELF) := VSDEFLEVEL;               11340000
                           TOS := DIRECSCAN (S0,0D,ACCOUNT,GROUP,       11342000
                                             VSNAME,CYALTVS,DSPARMS);   11344000
                           IF <> THEN                                   11346000
                           BEGIN                               <<RV.PV>>11348000
                               IF S0 = 2 AND                   <<RV.PV>>11350000
                                  GROUPLEVEL<=S1<=ACCOUNTLEVEL <<RV.PV>>11352000
                                THEN SUDDENDEATH (505);        <<RV.PV>>11354000
                               CYDIRERR' (*,%120000,ERRNUM);   <<RV.PV>>11356000
                               DEL; <<TYPE>>                   <<RV.PV>>11358000
                               STOP := TRUE;                   <<RV.PV>>11360000
                           END ELSE                            <<RV.PV>>11362000
                           BEGIN                               <<RV.PV>>11364000
                               DDEL; DEL;                      <<RV.PV>>11366000
                               IF STOP := (RESULT <> 0) THEN   <<RV.PV>>11368000
                                CIERR (ERRNUM :=RESULT,STRING);<<04790>>11370000
                           END;                                <<RV.PV>>11372000
                       END; <<NOT STOP>>                       <<RV.PV>>11374000
                   END;  <<EXPANDSET>>                         <<RV.PV>>11376000
               END;<<OF CASE ON KEYWORD>>                      <<RV.PV>>11378000
           END UNTIL STOP OR (PNUM:=PNUM+1) >= NUMPARMS;       <<RV.PV>>11380000
    END;<<OF CXALTVSET>>                                       <<RV.PV>>11382000
                                                               <<RV.PV>>11384000
$CONTROL SEGMENT=CIORGMAN                                      <<U.RAO>>11386000
PROCEDURE CXNEWACCT EXECUTORHEAD;                                       11388000
   OPTION PRIVILEGED,UNCALLABLE;                                        11390000
BEGIN                                                                   11392000
   INTEGER           SAVESIR;                                           11394000
   EQUATE            DIRSIR            = 8;                             11396000
   LOGICAL ARRAY     VSCOMM (0:VSCOMMSZ-1);                    <<RV.PV>>11398000
   INTEGER ARRAY     GROUP (0:GSIZE-1),                        <<01.PV>>11400000
                     ACCOUNT (0:ASIZE-1),                      <<01.PV>>11402000
                     USER (0:USIZE-1); <<MUST FOLLOW ACCT>>    <<01.PV>>11404000
   DOUBLE ARRAY      DUSER (*)         = USER;                          11406000
   DOUBLE ARRAY      DGROUP1 (*)       = GROUP (1);                     11408000
   DOUBLE            INITIALGSEC       := [5/16,5/6,5/6,5/6,5/16,5/6]D; 11410000
   BYTE ARRAY        BHVSANAME (*)     = VSCOMM (VSHANAME),    <<RV.PV>>11412000
                     BHVSGNAME (*)     = VSCOMM (VSHGNAME),    <<RV.PV>>11414000
                     BHVSVNAME (*)     = VSCOMM (VSHVNAME);    <<RV.PV>>11416000
   EQUATE                                                      <<RV.PV>>11418000
       CONDMOUNT = 3,                                          <<RV.PV>>11420000
       CONDDISMOUNT = 3;                                       <<RV.PV>>11422000
   LOGICAL                                                     <<RV.PV>>11424000
       MOUNTED := FALSE,                                       <<00263>>11426000
       PVINFO,                                                 <<RV.PV>>11428000
       REQTYPE := CONDMOUNT;                                   <<RV.PV>>11430000
   DEFINE                                                      <<RV.PV>>11432000
       MVTABX   = PVINFO.(4:4) #,                              <<RV.PV>>11434000
       VSSPECIFIED   = VSCOMM (VSMASK).(0:1) #,                <<RV.PV>>11436000
       SPANSPECIFIED = VSCOMM (VSMASK).(1:1) #;                << I.A >>11438000
   SUBROUTINE RELRESOURCES;                                    <<RV.PV>>11440000
       BEGIN                                                   <<RV.PV>>11442000
           IF NOT MOUNTED THEN RETURN;                         <<00263>>11444000
           REQTYPE := CONDDISMOUNT;                            <<RV.PV>>11446000
           DISMOUNT (BHVSVNAME, BHVSGNAME, BHVSANAME, REQTYPE);<<RV.PV>>11448000
           IF <> THEN                                          <<RV.PV>>11450000
           BEGIN                                               <<RV.PV>>11452000
               <<REQTYPE CONTAINS ERROR CODE. MAP TO CIERR>>   <<RV.PV>>11454000
               CIERR (ERRNUM);                                 <<RV.PV>>11456000
           END;                                                <<RV.PV>>11458000
       END;<<OF RELRESOURCES>>                                 <<RV.PV>>11460000
                                                                        11462000
<< >>                                                                   11464000
IF CYORGCOMS' (ERRNUM,PARMNUM,PARMSP,ACCOUNTLEVEL,             <<RV.PV>>11466000
               ACCOUNT,VSCOMM) THEN                            <<RV.PV>>11468000
   BEGIN  <<PARM LIST PARSED OK>>                              <<U.RAO>>11470000
   SAVESIR := GETSIR (DIRSIR);                                          11472000
   TOS := 0; TOS.(ENDLEVELF) := ACCOUNTLEVEL;                  <<01.PV>>11474000
   TOS := DIRECINSERT (S0, 0D, ACCOUNT, ARRDB0, ARRDB0,        <<38.PV>>11476000
                       ACCOUNT (AGIPNTR));                     <<01.PV>>11478000
   IF <> THEN << ACCOUNT INSERT FAILED >>                      <<01096>>11480000
         BEGIN                                                 <<01096>>11482000
            RELSIR(DIRSIR,SAVESIR);                            <<01187>>11484000
            GO TO DOERR;                                       <<01096>>11486000
         END;                                                  <<01096>>11488000
   DDEL; DEL;                                                  <<01.PV>>11490000
   MOVE GROUP := "PUB ";                                                11492000
   GROUP (2) := "  ";                                                   11494000
   MOVE GROUP (3) := GROUP (2), (6);                                    11496000
   MOVE GROUP (GDFSCOUNT) := ACCOUNT (ADFSCOUNT), (12);        <<01.PV>>11498000
   DGROUP1 (GSEC/2) := INITIALGSEC;                            <<01.PV>>11500000
   GROUP (GCAP) := ACCOUNT (ACAP+1);                           <<01.PV>>11502000
   GROUP (GLINKAGE) := 0;                                      <<01.PV>>11504000
   GROUP (GHVSNAME) := "  ";                                   <<RV.PV>>11506000
   MOVE GROUP (GHVSNAME+1):=GROUP (GHVSNAME),((NAMESIZE*3)-1); <<RV.PV>>11508000
   GROUP (GSPARE) := GROUP (GMOUNTREFCNTR) :=                  <<RV.PV>>11510000
                     GROUP (GSAVEFIPNTR) := 0;                 <<RV.PV>>11512000
   TOS := 0; TOS.(ENDLEVELF) := GROUPLEVEL;                    <<01.PV>>11514000
   TOS := DIRECINSERT (S0, 0D, ACCOUNT, GROUP, ARRDB0,         <<38.PV>>11516000
                       GROUP (GFIPNTR));                       <<01.PV>>11518000
   IF <> THEN GOTO PURGEA;                                              11520000
   DDEL; DEL;                                                  <<01.PV>>11522000
   MOVE USER (UCAP) := ACCOUNT (ACAP),(4);                     <<01.PV>>11524000
   USER (UPASS) := "  ";                                       <<01.PV>>11526000
   MOVE USER(9) := USER(8), (7);                                        11528000
   DUSER (UHGROUP/2) := "PUB ";                                <<01.PV>>11530000
   USER (ULOGCOUNT) := 0;                                      <<01.PV>>11532000
   USER (UMAXJOB) := ACCOUNT (AMAXJOBW);                       <<01.PV>>11534000
   USER (USPARE) := 0;                                         <<01.PV>>11536000
   IF VSSPECIFIED THEN                                         <<RV.PV>>11538000
   BEGIN <<VS SPECIFIED>>                                      <<RV.PV>>11540000
       IF SPANSPECIFIED THEN                                   <<RV.PV>>11542000
       BEGIN <<SPAN SPECIFIED>>                                <<RV.PV>>11544000
           MOUNT (BHVSVNAME, BHVSGNAME, BHVSANAME,             <<RV.PV>>11546000
                  REQTYPE, 0<<GEN>>, PVINFO);                  <<RV.PV>>11548000
           IF < THEN                                           <<RV.PV>>11550000
           BEGIN                                               <<RV.PV>>11552000
               <<TRANSLATE ERROR IN REQTYPE TO CIERR>>         <<RV.PV>>11554000
               << Cierr cannot be called at this point   >>    <<01315>>11556000
               << because in batch we abort. We have to  >>    <<01315>>11558000
               << release the DIRSIR and purge the acct. >>    <<01315>>11560000
               ERRNUM := ALTGRPVSNOTMNTD;                      <<01315>>11562000
               GO TO PURGEA;                                   <<00263>>11564000
           END;                                                <<RV.PV>>11566000
           MOUNTED := TRUE;                                    <<00263>>11568000
       END <<WILL NEED TO DISMOUNT LATER>>                     <<RV.PV>>11570000
       ELSE                                                    <<RV.PV>>11572000
       BEGIN <<SPAN NOT OPTIONAL>>                             <<RV.PV>>11574000
           CIERR (ERRNUM := -XXXACCTPRMNOTOPT);                <<04790>>11576000
       END;                                                    <<RV.PV>>11578000
   END;<<OF VSSPECIFIED>>                                      <<RV.PV>>11580000
   TOS := 0; TOS.(ENDLEVELF) := USERLEVEL;                     <<01.PV>>11582000
   TOS := DIRECINSERT (S0, 0D, ACCOUNT, USER, ARRDB0,          <<38.PV>>11584000
                       USER (UCAP));                           <<01.PV>>11586000
   IF <> THEN                                                           11588000
                                                                        11590000
PURGEA:                                                                 11592000
      BEGIN                                                             11594000
      << We have the DIRSIR and we are just about  >>          <<01187>>11596000
      << to call DIRECPURGE which aquires the FISIR>>          <<01187>>11598000
      << This would result in a lockout,since FISIR>>          <<01187>>11600000
      << has a lower logical rank than the DIRSIR. >>          <<01187>>11602000
      << In order to avoid this release the DIRSIR.>>          <<01187>>11604000
      RELSIR(DIRSIR,SAVESIR);                                  <<01187>>11606000
      TOS := 0; TOS.(ENDLEVELF) := ACCOUNTLEVEL;               <<01.PV>>11608000
      TOS := DIRECPURGE (S0, 0D, ACCOUNT, ARRDB0, ARRDB0);     <<38.PV>>11610000
      << If purge does not suceed, there are two   >>          <<01187>>11612000
      << reasons: (1)another process purged it from>>          <<01187>>11614000
      << under us, or (2) because entry is in use. >>          <<01187>>11616000
      << If (2) then bad news, time to die.        >>          <<01187>>11618000
      IF <> AND S0 <> 2 THEN SUDDENDEATH(502);                 <<01187>>11620000
      DDEL;  DEL;                                              <<01.PV>>11622000
      RELRESOURCES;                                            <<RV.PV>>11624000
DOERR:                                                                  11626000
      IF ERRNUM <> 0 THEN                                      <<01315>>11628000
         BEGIN                                                 <<01315>>11630000
            CIERR(ERRNUM);                                     <<01315>>11632000
            RETURN;                                            <<01315>>11634000
         END;                                                  <<01315>>11636000
      << DIRECTORY PROBLEM DEFINED BY S-2, S-1, S-0 >>                  11638000
      IF (S0 = 1) AND (S2 <> %20) THEN SUDDENDEATH(503);                11640000
      CYDIRERR'(*,%147000,ERRNUM);                             <<U.RAO>>11642000
      END                                                      <<U.RAO>>11644000
   ELSE                                                        <<U.RAO>>11646000
      BEGIN                                                    <<RV.PV>>11648000
          DDEL;                                                <<RV.PV>>11650000
          RELSIR (DIRSIR,SAVESIR);                             <<RV.PV>>11652000
          IF SPANSPECIFIED THEN                                <<RV.PV>>11654000
          BEGIN                                                <<RV.PV>>11656000
              TOS.(ENDLEVELF) := ACCOUNTLEVEL;                 <<RV.PV>>11658000
              TOS := DIRECINSERT (S0,0D,ACCOUNT,ARRDB0,ARRDB0, <<RV.PV>>11660000
                                  ACCOUNT (AGIPNTR),MVTABX);   <<RV.PV>>11662000
              IF <> THEN                                       <<RV.PV>>11664000
              BEGIN <<INSERT ERROR ON NON-SYSVS DIRECTORY>>    <<RV.PV>>11666000
                  CYDIRERR' (*,%167000,ERRNUM);                <<RV.PV>>11668000
                  DEL;                                         <<RV.PV>>11670000
                  CIERR (ERRNUM := -XXXACCTSPANFAILD);         <<04790>>11672000
              END ELSE ASSEMBLE (DDEL,DEL);                    <<RV.PV>>11674000
              RELRESOURCES;                                    <<RV.PV>>11676000
          END <<OF SPANSPECIFIED>> ELSE DEL;                   <<RV.PV>>11678000
      END;                                                     <<RV.PV>>11680000
   END;                                                        <<RV.PV>>11682000
END;   <<CXNEWACCT>>                                           <<U.RAO>>11684000
PROCEDURE CXNEWGROUP EXECUTORHEAD;                                      11686000
   OPTION PRIVILEGED,UNCALLABLE;                                        11688000
BEGIN                                                                   11690000
   LOGICAL ARRAY     VSCOMM (0:VSCOMMSZ-1);                    <<RV.PV>>11692000
   INTEGER ARRAY     GROUP (0:GSIZE-1);                        <<01.PV>>11694000
   INTEGER ARRAY     ACCOUNT (0:ASIZE-1);                      <<01.PV>>11696000
   LOGICAL ARRAY     LGROUP (*)        = GROUP;                         11698000
   LOGICAL ARRAY     LACCOUNT (*)      = ACCOUNT;                       11700000
   BYTE ARRAY        BACCOUNT (*)      = ACCOUNT,              <<RV.PV>>11702000
                     BHVSANAME (*)     = VSCOMM (VSHANAME),    <<RV.PV>>11704000
                     BHVSGNAME (*)     = VSCOMM (VSHGNAME),    <<RV.PV>>11706000
                     BHVSVNAME (*)     = VSCOMM (VSHVNAME);    <<RV.PV>>11708000
   DOUBLE ARRAY      DGROUPX (*)       = GROUP (GDFSLIMIT),    <<01.PV>>11710000
                     DACCOUNTX (*)     = ACCOUNT (ADFSLIMIT);  <<01.PV>>11712000
   INTEGER ARRAY     CAP'DENIED(0:1);                          <<00879>>11714000
   EQUATE                                                      <<RV.PV>>11716000
       CONDMOUNT = 3,                                          <<RV.PV>>11718000
       CONDDISMOUNT = 3;                                       <<RV.PV>>11720000
   LOGICAL                                                     <<RV.PV>>11722000
       PVINFO,                                                 <<RV.PV>>11724000
       REQTYPE := CONDMOUNT;                                   <<RV.PV>>11726000
   DEFINE                                                      <<RV.PV>>11728000
       MVTABX   = PVINFO.(4:4) #,                              <<RV.PV>>11730000
       VSSPECIFIED   = VSCOMM (VSMASK).(0:1) #,                <<RV.PV>>11732000
        NUMNAMES = VSCOMM (VSMASK).(14:2)#,                    <<04745>>11734000
       SPANSPECIFIED = VSCOMM (VSMASK).(1:1) #;                << I.A >>11736000
   SUBROUTINE RELRESOURCES;                                    <<RV.PV>>11738000
       BEGIN                                                   <<RV.PV>>11740000
           IF NOT SPANSPECIFIED THEN RETURN;                   <<RV.PV>>11742000
           REQTYPE := CONDDISMOUNT;                            <<RV.PV>>11744000
           DISMOUNT (BHVSVNAME, BHVSGNAME, BHVSANAME, REQTYPE);<<RV.PV>>11746000
           IF <> THEN                                          <<RV.PV>>11748000
           BEGIN                                               <<RV.PV>>11750000
               <<REQTYPE CONTAINS ERROR CODE. MAP TO CIERR>>   <<RV.PV>>11752000
               CIERR (ERRNUM);                                 <<RV.PV>>11754000
           END;                                                <<RV.PV>>11756000
       END;<<OF RELRESOURCES>>                                 <<RV.PV>>11758000
                                                                        11760000
<< >>                                                                   11762000
<<                                                           >><<04745>>11764000
<< * Fix information:                                        >><<04745>>11766000
<<                                                           >><<04745>>11768000
<<   :NEWGROUP with VS= specified will not mark the group if >><<04745>>11770000
<<   a VOLSET is not specified.                              >><<04745>>11772000
<<                                                           >><<04745>>11774000
IF CYORGCOMS' (ERRNUM,PARMNUM,PARMSP,GROUPLEVEL,               <<RV.PV>>11776000
               GROUP,VSCOMM) THEN                              <<RV.PV>>11778000
   BEGIN                                                       <<U.RAO>>11780000
   <<THE FIRST MAJOR TASK IS TO VALIDATE ANY NEW FILE, CPU  >> <<U.RAO>>11782000
   <<OR CONNECT LIMITS TO VERIFY THAT THEY DO NOT EXCEED    >> <<U.RAO>>11784000
   <<THE ACCOUNT LIMITS.  TO DO THIS WE USE DIRECFIND TO GET>> <<U.RAO>>11786000
   <<THE CURRENT ACCOUNT VALUES.                            >> <<U.RAO>>11788000
   <<FIRST STEP IS TO SET UP FOR DIRECFIND OF ACCOUNT>>        <<U.RAO>>11790000
   << DO VOLUME THING >>                                                11792000
   WHO (, , , , , BACCOUNT);                                            11794000
   TOS := 0; TOS.(ENDLEVELF) := ACCOUNTLEVEL;                  <<01.PV>>11796000
   IF (DIRECFIND (S0, 0D, ACCOUNT, ARRDB0, ARRDB0,             <<38.PV>>11798000
                  ACCOUNT)) <> 0D THEN                         <<01.PV>>11800000
   SUDDENDEATH(504);                                                    11802000
   DEL;                                                        <<01.PV>>11804000
   <<NOW CHECK LIMITS>>                                        <<U.RAO>>11806000
   IF DACCOUNTX(4) < DGROUPX(4) THEN                          <<U.RAO>> 11808000
      BEGIN                                                    <<U.RAO>>11810000
      IF DGROUPX(4) <> %17777777777D THEN  <<WARN>>            <<U.RAO>>11812000
         CIERR(ERRNUM := -ALTGRPCPULIMITS);                    <<04790>>11814000
      DGROUPX(4) := DACCOUNTX(4);                              <<U.RAO>>11816000
      END;                                                     <<U.RAO>>11818000
   IF DACCOUNTX(2) < DGROUPX(2) THEN                          <<U.RAO>> 11820000
      BEGIN                                                    <<U.RAO>>11822000
      IF DGROUPX(2) <> %17777777777D THEN  <<WARN>>            <<U.RAO>>11824000
         CIERR(ERRNUM := -ALTGRPCONNECTLM);                    <<04790>>11826000
      DGROUPX(2) := DACCOUNTX(2);                              <<U.RAO>>11828000
      END;                                                     <<U.RAO>>11830000
   IF DACCOUNTX < DGROUPX THEN                                <<U.RAO>> 11832000
      BEGIN                                                    <<U.RAO>>11834000
      IF DGROUPX <> %17777777777D THEN <<WARN>>                <<U.RAO>>11836000
         CIERR(ERRNUM := -ALTGRPFILELIMIT);                    <<04790>>11838000
      DGROUPX := DACCOUNTX;                                    <<U.RAO>>11840000
      END;                                                     <<U.RAO>>11842000
   IF (LGROUP(GCAP) LOR LACCOUNT(ACAP+1)) <> LACCOUNT(ACAP+1) THEN      11844000
      BEGIN  <<CAPABILITIES EXCEED ACCOUNTS>>                  <<U.RAO>>11846000
      CAP'DENIED := 0; << 1ST WORD OF CAPABILITIES >>          <<00879>>11848000
      CAP'DENIED(1) := LGROUP(GCAP) XOR                        <<00879>>11850000
                       (LGROUP(GCAP) LAND LACCOUNT(ACAP+1));   <<00879>>11852000
      CAP'ERR(-ALTGRPEXCAP,CAP'DENIED);                        <<00879>>11854000
      LGROUP(GCAP) := LGROUP(GCAP) LAND LACCOUNT(ACAP+1);      <<00879>>11856000
      END;                                                     <<U.RAO>>11858000
   IF VSSPECIFIED THEN                                         <<RV.PV>>11860000
   BEGIN <<VS SPECIFIED>>                                      <<RV.PV>>11862000
       MOVE GROUP (GHVSANAME):=VSCOMM (VSHANAME), (NAMESIZE*3);<<RV.PV>>11864000
       IF SPANSPECIFIED THEN                                   <<RV.PV>>11866000
       BEGIN <<SPAN SPECIFIED>>                                <<RV.PV>>11868000
           MOUNT (BHVSVNAME, BHVSGNAME, BHVSANAME,             <<RV.PV>>11870000
                  REQTYPE, 0<<GEN>>, PVINFO);                  <<RV.PV>>11872000
           IF < THEN                                           <<RV.PV>>11874000
           BEGIN                                               <<RV.PV>>11876000
               <<TRANSLATE ERROR IN REQTYPE TO CIERR>>         <<RV.PV>>11878000
               CIERR (ERRNUM := ALTGRPVSNOTMNTD);              <<04790>>11880000
               RETURN;                                         <<RV.PV>>11882000
           END;                                                <<RV.PV>>11884000
       END;<<WILL NEED TO DISMOUNT LATER>>                     <<RV.PV>>11886000
        IF NUMNAMES <> 0 THEN                                  <<04745>>11888000
           GROUP (GLINKAGE) := %100000;                        <<04745>>11890000
   END;<<OF VSSPECIFIED>>                                      <<RV.PV>>11892000
   TOS := 0; TOS.(ENDLEVELF) := GROUPLEVEL;                    <<01.PV>>11894000
   TOS := DIRECINSERT (S0, 0D, ACCOUNT, GROUP, ARRDB0,         <<38.PV>>11896000
                       GROUP (GFIPNTR));                       <<01.PV>>11898000
   IF <> THEN                                                           11900000
      BEGIN                                                             11902000
      IF S0 = 2 THEN SUDDENDEATH(505);                                  11904000
      CYDIRERR'(*,%147000,ERRNUM);                             <<U.RAO>>11906000
      DEL;                                                     <<RV.PV>>11908000
      RELRESOURCES;                                            <<RV.PV>>11910000
      END ELSE                                                 <<RV.PV>>11912000
      BEGIN                                                    <<RV.PV>>11914000
          DDEL;                                                <<RV.PV>>11916000
          IF SPANSPECIFIED THEN                                <<RV.PV>>11918000
          BEGIN                                                <<RV.PV>>11920000
              GROUP (GLINKAGE) := 0;                           <<RV.PV>>11922000
              TOS := DIRECINSERT (S0,0D,ACCOUNT,GROUP,ARRDB0,  <<RV.PV>>11924000
                                  GROUP (GFIPNTR),MVTABX);     <<RV.PV>>11926000
              IF <> THEN                                       <<RV.PV>>11928000
              BEGIN <<INSERT ERROR ON NON-SYSVS DIRECTORY>>    <<RV.PV>>11930000
                  CYDIRERR' (*,%167000,ERRNUM);                <<RV.PV>>11932000
                  DEL;                                         <<RV.PV>>11934000
                  CIERR (ERRNUM := -XXXGRPSPANFAILD)           <<04790>>11936000
              END ELSE ASSEMBLE (DDEL,DEL);                    <<RV.PV>>11938000
              RELRESOURCES;                                    <<RV.PV>>11940000
          END <<OF SPANSPECIFIED>> ELSE DEL;                   <<RV.PV>>11942000
      END;                                                     <<RV.PV>>11944000
   END;                                                        <<U.RAO>>11946000
END;   <<CXNEWGROUP>>                                          <<U.RAO>>11948000
PROCEDURE  CXNEWUSER EXECUTORHEAD;                                      11950000
   OPTION PRIVILEGED,UNCALLABLE;                                        11952000
BEGIN                                                                   11954000
   INTEGER ARRAY     ACCOUNT (0:ASIZE-1),                      <<01.PV>>11956000
                     USER (0:USIZE-1);                         <<01.PV>>11958000
   LOGICAL ARRAY     LUSERX (*)        = USER (UCAP),          <<01.PV>>11960000
                     LACCOUNTX (*)     = ACCOUNT (ACAP);       <<01.PV>>11962000
   BYTE ARRAY        BACCOUNT (*)      = ACCOUNT;                       11964000
   INTEGER ARRAY     CAP'DENIED(0:1);                          <<00879>>11966000
                                                                        11968000
<< >>                                                                   11970000
IF CYORGCOMS'(ERRNUM,PARMNUM,PARMSP,USERLEVEL,USER) THEN       <<U.RAO>>11972000
   BEGIN  <<PARAMETER LIST PARSED OK>>                         <<U.RAO>>11974000
   <<BEFORE INSERTION OF A NEW USER, CHECK THE REQUESTED>>     <<U.RAO>>11976000
   <<USER BOUNDS AGAINST THE ACCOUNT BOUNDS>>                  <<U.RAO>>11978000
   WHO (, , , , , BACCOUNT);                                            11980000
   TOS := 0; TOS.(ENDLEVELF) := ACCOUNTLEVEL;                  <<01.PV>>11982000
   IF DIRECFIND (S0, 0D, ACCOUNT, ARRDB0, ARRDB0, ACCOUNT)     <<38.PV>>11984000
                 <> 0D THEN                                    <<01.PV>>11986000
    SUDDENDEATH(504);                                                   11988000
   DEL;                                                        <<01.PV>>11990000
   <<CHECK USER CAPABILITIES AGAINST ACCOUNT CAPABILITIES>>    <<U.RAO>>11992000
   IF ((LUSERX LOR LACCOUNTX) <> LACCOUNTX) OR                 <<U.RAO>>11994000
      ((LUSERX(1) LOR LACCOUNTX(1)) <> LACCOUNTX(1)) THEN      <<U.RAO>>11996000
         BEGIN  <<FORCE TO ACCOUNT CAPS>>                      <<U.RAO>>11998000
         CAP'DENIED := LUSERX XOR (LUSERX LAND LACCOUNTX);     <<00879>>12000000
         CAP'DENIED(1) := LUSERX(1) XOR                        <<00879>>12002000
                          (LUSERX(1) LAND LACCOUNTX(1));       <<00879>>12004000
         CAP'ERR(-ALTUSERCAPS,CAP'DENIED);                     <<00879>>12006000
         LUSERX := LUSERX LAND LACCOUNTX; << INTERSECTION >>   <<00879>>12008000
         LUSERX(1) := LUSERX(1) LAND LACCOUNTX(1);             <<00879>>12010000
         END;                                                  <<U.RAO>>12012000
   <<CHECK LOCAL ATTRIBUTES>>                                  <<U.RAO>>12014000
   IF ((LUSERX(2) LOR LACCOUNTX(2)) <> LACCOUNTX(2)) OR        <<U.RAO>>12016000
      ((LUSERX(3) LOR LACCOUNTX(3)) <> LACCOUNTX(3)) THEN      <<U.RAO>>12018000
         BEGIN   <<LOCAL ATTRIBUTES DON'T MATCH>>              <<U.RAO>>12020000
         CIERR(ERRNUM := -ALTUSERLATTR);                       <<04790>>12022000
         LUSERX(2) := LACCOUNTX(2) LAND LUSERX(2);             <<01316>>12024000
         LUSERX(3) := LACCOUNTX(3) LAND LUSERX(3);             <<01316>>12026000
         END;                                                  <<U.RAO>>12028000
   IF USER (UMAXJOB).(8:8) < ACCOUNT (AMAXJOBW).(8:8) THEN     <<01.PV>>12030000
      BEGIN                                                    <<U.RAO>>12032000
      CIERR(ERRNUM :=    -ALTUMAXPRI);                         <<04790>>12034000
      USER(UMAXJOB).(8:8) := ACCOUNT(AMAXJOBW).(8:8);          <<U.RAO>>12036000
      END;                                                     <<U.RAO>>12038000
   TOS := 0; TOS.(ENDLEVELF) := USERLEVEL;                     <<01.PV>>12040000
   TOS := DIRECINSERT (S0, 0D, ACCOUNT, USER,                  <<38.PV>>12042000
                       ARRDB0, USER (UCAP));                   <<01.PV>>12044000
   IF <> THEN                                                           12046000
      CYDIRERR' (*, %147000, ERRNUM)                           <<U.RAO>>12048000
   ELSE DDEL;                                                  <<01.PV>>12050000
   DEL;                                                        <<01.PV>>12052000
   END;                                                        <<U.RAO>>12054000
END;   <<CXNEWUSER>>                                           <<U.RAO>>12056000
$CONTROL SEGMENT=CIALTORG                                      <<U.RAO>>12058000
   INTEGER PROCEDURE SYSLIST (ELEMENT, LEVEL, PARMS, SIRS);             12060000
      VALUE LEVEL, PARMS, SIRS;                                         12062000
      ARRAY ELEMENT;                                                    12064000
      INTEGER LEVEL, PARMS;                                             12066000
      DOUBLE SIRS;                                                      12068000
   OPTION PRIVILEGED,UNCALLABLE;                                        12070000
BEGIN                                                                   12072000
   INTEGER ARRAY     PBUF (0:35)       = Q,                             12074000
                     TBUF (*)          = PBUF(28);                      12076000
   EQUATE FINFOSIZE=128;                                     <<01.02>>  12078000
   DEFINE P'GANAME=     ARRQ0(PARMS+4) #,                      <<03.KM>>12080000
          P'GNAME=      ARRQ0(PARMS+4) #,                      <<03.KM>>12082000
          P'ANAME=      ARRQ0(PARMS+8) #,                      <<03.KM>>12084000
          P'FILENUM=    ARRQ0(PARMS+18) #,                     <<04.KM>>12086000
          P'GLINKAGEW=  ARRQ0(PARMS+23) #,                     <<03.KM>>12088000
          P'GOTENTRY=   ARRQ0(PARMS+24) #,                     <<03.KM>>12090000
          P'IMPMNTDST=  ARRQ0(PARMS+25) #,                     <<03.KM>>12092000
          P'IMPMNTERR=  ARRQ0(PARMS+26) #,                     <<03.KM>>12094000
          P'IMPMNTNAME= ARRQ0(PARMS+27) #,                     <<03.KM>>12096000
          P'ACC'SAVE'COUNT = ARRQ0(PARMS+SAVEBUFFINDEX) #,     <<04178>>12098000
          P'ACC'SAVE = ARRQ0(PARMS+SAVEBUFFINDEX+1) #,         <<04178>>12100000
          P'GRP'SAVE'COUNT=ARRQ0(PARMS+SAVEBUFFINDEX+ASIZE+1)#,<<04178>>12102000
          P'GRP'SAVE = ARRQ0(PARMS+SAVEBUFFINDEX+ASIZE+2) #;   <<04178>>12104000
   DEFINE PVGROUP=    LOGICAL(P'GLINKAGEW.(PVF)) #,            <<03.KM>>12106000
          RELEASESIR=                                          <<03.KM>>12108000
            BEGIN                                              <<03.KM>>12110000
            TOS:=SIRS;                                         <<03.KM>>12112000
            IF <> THEN RELSIR(*,*) ELSE DDEL;                  <<03.KM>>12114000
            END #,                                             <<04178>>12116000
          EXIT'IF'BREAK =                                      <<04178>>12118000
             IF REQUESTSERVICE THEN                            <<04178>>12120000
                BEGIN                                          <<04178>>12122000
                   RTN := 4;                                   <<04178>>12124000
                   GO TO EXIT1;                                <<04178>>12126000
                END #;                                         <<04178>>12128000
   INTEGER PVINFO'ERROR;                                       <<10.KM>>12130000
  INTEGER RTN; <<RETURN VALUE>>                                <<03.MM>>12132000
   EQUATE NOMOUNT= 0;                                          <<03.KM>>12134000
   INTEGER POINTER PPRESULT;                                  <<00.GEN>>12136000
   INTEGER ARRAY DDS(*);                                     <<01.02>>  12138000
   INTEGER ARRAY ELEMENT'BUFF(*);                            <<01.02>>  12140000
   INTEGER DAXSIZE';                                         <<01.02>>  12142000
   INTEGER           REM,                                               12144000
                     CNT,                                               12146000
                     DAXSIZE           = DB+146;               <<38.PV>>12148000
   BYTE ARRAY        BPBUF (*)         = PBUF,                          12150000
                     BTBUF (*)         = TBUF;                          12152000
                                                                        12154000
                                                                        12156000
SUBROUTINE DEF'MOVEFROMDSEG;                                  <<00.GEN>>12158000
                                                              <<00.GEN>>12160000
                                                              <<00.GEN>>12162000
SUBROUTINE PRINTLINE (ELEM, LEN);                                       12164000
   VALUE LEN;                                                           12166000
   INTEGER ARRAY ELEM;                                                  12168000
   INTEGER LEN;                                                         12170000
BEGIN                                                                   12172000
   MOVE TBUF:=ELEM,(LEN);                                    <<01.02>>  12174000
   PBUF := "  ";                                                        12176000
   MOVE PBUF (1) := PBUF, (27);                                         12178000
   MOVE TBUF(LEN) := PBUF, (8-LEN);                                     12180000
   CNT := 0;                                                            12182000
   DO BEGIN                                                             12184000
      TOS := 0;                                                         12186000
      TOS := BTBUF (CNT & LSL(1));                                      12188000
      IF < THEN BTBUF(X) := ".";                                        12190000
      TOS := TOS & LSL(8);                                              12192000
      TOS := BTBUF (X +1);                                              12194000
      IF < THEN BTBUF (X) := ".";                                       12196000
      TOS := TOS LOR TOS;                                               12198000
      ASCII (*, 8, BPBUF (CNT *7));                                     12200000
      CNT := CNT +1;                                                    12202000
      END                                                               12204000
   UNTIL CNT = LEN;                                                     12206000
   FWRITE(P'FILENUM,PBUF,36,0);                                <<04.KM>>12208000
   IF <> THEN GO TO STOPEXIT;                                <<01.02>>  12210000
   END    <<PRINTLINE>>;                                                12212000
                                                                        12214000
                                                                        12216000
SUBROUTINE PRINTENTRY (ELEM, LEN);                                      12218000
   VALUE LEN;                                                           12220000
   INTEGER ARRAY ELEM;                                                  12222000
   INTEGER LEN;                                                         12224000
BEGIN                                                                   12226000
   REM := LEN;                                                          12228000
   WHILE REM > 8 DO                                                     12230000
      BEGIN                                                             12232000
      PRINTLINE (ELEM (LEN -REM), 8);                                   12234000
      REM := REM -8;                                                    12236000
      END;                                                              12238000
   IF REM > 0 THEN PRINTLINE (ELEM (LEN-REM), REM);                     12240000
   END    <<PRINTENTRY>>;                                               12242000
LOGICAL SUBROUTINE AT'NAME(LEVEL);                             <<03.MM>>12244000
  VALUE LEVEL;                                                 <<03.MM>>12246000
  INTEGER LEVEL;                                               <<03.MM>>12248000
BEGIN                                                          <<03.MM>>12250000
  COMMENT:                                                     <<03.MM>>12252000
    THIS SUBROUTINE RETURNS TRUE IF THE NAME AT LEVEL          <<03.MM>>12254000
    'LEVEL' USED FOR THE DIRECTORY SEARCH IS A '@',            <<03.MM>>12256000
    OTHERWISE IT RETURNS FALSE.                                <<03.MM>>12258000
    ;                                                          <<03.MM>>12260000
  AT'NAME:=FALSE;  <<IN CASE OF ERROR IN CALL>>                <<03.MM>>12262000
  CASE LEVEL OF                                                <<03.MM>>12264000
    BEGIN                                                      <<03.MM>>12266000
    <<0>> AT'NAME:=IF D'FNAME.(0:8) = "@" THEN TRUE ELSE FALSE;<<03.MM>>12268000
    <<1>> AT'NAME:=IF D'GNAME.(0:8) = "@" THEN TRUE ELSE FALSE;<<03.MM>>12270000
    <<2>> AT'NAME:=IF D'ANAME.(0:8) = "@" THEN TRUE ELSE FALSE;<<03.MM>>12272000
    <<3>> AT'NAME:=IF D'UNAME.(0:8) = "@" THEN TRUE ELSE FALSE;<<03.MM>>12274000
    <<4>> AT'NAME:=IF D'VNAME.(0:8) = "@" THEN TRUE ELSE FALSE;<<03.MM>>12276000
    END;                                                       <<03.MM>>12278000
END <<SUBROUTINE AT'NAME>>;                                    <<03.MM>>12280000
                                                               <<03.MM>>12282000
                                                               <<03.MM>>12284000
                                                                        12286000
   IF REQUESTSERVICE THEN                                               12288000
      BEGIN                                                             12290000
      RTN:=5;                                                  <<03.MM>>12292000
      GO TO EXIT;                                                       12294000
      END;                                                              12296000
   PARMS := PARMS -INTEGER(DELTAQ);                                     12298000
   DAXSIZE':=DAXSIZE;                                         <<00.GEN>>12300000
   EXCHANGEDB(0);       <<DB TO STACK>>                       <<00.GEN>>12302000
   TOS:=DAXSIZE';                                             <<00.GEN>>12304000
   @ELEMENT'BUFF:=@S0;                                        <<00.GEN>>12306000
   ASSEMBLE(ADDS 0);                                          <<00.GEN>>12308000
   MOVEFROMDSEG(@ELEMENT'BUFF,DDSDST,@ELEMENT,DAXSIZE');      <<00.GEN>>12310000
                                                              <<00.GEN>>12312000
   @PPRESULT:=@ARRQ0(PARMS+SYSL'PPRINX);                      <<00.GEN>>12314000
   IF LOGICAL(D'TYPE.(ALLFLAG)) THEN                          <<00.GEN>>12316000
   BEGIN                                                      <<00.GEN>>12318000
     CASE *LEVEL OF BEGIN                                     <<00.GEN>>12320000
       TOS:=DIRMATCH(G'FNAME,ELEMENT'BUFF);                   <<00.GEN>>12322000
       TOS:=DIRMATCH(G'GNAME,ELEMENT'BUFF);                   <<00.GEN>>12324000
       TOS:=DIRMATCH(G'ANAME,ELEMENT'BUFF);                   <<00.GEN>>12326000
       TOS:=DIRMATCH(G'UNAME,ELEMENT'BUFF);                   <<00.GEN>>12328000
       TOS:=DIRMATCH(G'VNAME,ELEMENT'BUFF);                   <<00.GEN>>12330000
     END;                                                     <<00.GEN>>12332000
     IF TOS<>0 THEN                                           <<00.GEN>>12334000
     BEGIN                                                    <<00.GEN>>12336000
       RTN:=IF < THEN NEXTUNCLE'SIR ELSE NEXTBROTHER'SIR;      <<03.MM>>12338000
       GO EXIT1;                                              <<00.GEN>>12340000
     END;                                                     <<00.GEN>>12342000
   END;                                                       <<00.GEN>>12344000
                                                              <<00.GEN>>12346000
   IF LEVEL = ARRQ0(PARMS+22).(TOLEVELF) THEN                  <<03.MM>>12348000
      BEGIN                                                    <<03.MM>>12350000
      P'GOTENTRY:=TRUE;                                        <<03.MM>>12352000
      RELEASESIR;                                              <<03.MM>>12354000
      RTN:=0;                                                  <<03.MM>>12356000
      TOS := FINFOSIZE;                                        <<04178>>12358000
      @DDS := @S0;                                             <<04178>>12360000
      ASSEMBLE(ADDS 0);                                        <<04178>>12362000
      IF P'ACC'SAVE'COUNT <> 0 THEN << dump account entry >>   <<04178>>12364000
         BEGIN                                                 <<04178>>12366000
            DDS := "A ";                                       <<04178>>12368000
            MOVE DDS(1) := " =  ";                             <<04178>>12370000
            MOVE DDS(3) := P'ANAME,(4);                        <<04178>>12372000
            EXIT'IF'BREAK;                                     <<04178>>12374000
            FWRITE(P'FILENUM,DDS,-14,0);                       <<04178>>12376000
            IF <> THEN GO TO STOPEXIT;                         <<04178>>12378000
            PRINTENTRY(P'ACC'SAVE,P'ACC'SAVE'COUNT);           <<04178>>12380000
            P'ACC'SAVE'COUNT := 0;                             <<04178>>12382000
         END;                                                  <<04178>>12384000
      IF P'GRP'SAVE'COUNT <> 0 THEN  << dump group entry >>    <<04178>>12386000
         BEGIN                                                 <<04178>>12388000
            DDS := "G ";                                       <<04178>>12390000
            MOVE DDS(1) := " =  ";                             <<04178>>12392000
            MOVE DDS(3) := P'GNAME,(4);                        <<04178>>12394000
            EXIT'IF'BREAK;                                     <<04178>>12396000
            FWRITE(P'FILENUM,DDS,-14,0);                       <<04178>>12398000
            IF <> THEN GO TO STOPEXIT;                         <<04178>>12400000
            PRINTENTRY(P'GRP'SAVE,P'GRP'SAVE'COUNT);           <<04178>>12402000
            P'GRP'SAVE'COUNT := 0;                             <<04178>>12404000
         END;                                                  <<04178>>12406000
      CASE LEVEL OF                                            <<04178>>12408000
         BEGIN                                                 <<04178>>12410000
            TOS := "F ";                                       <<04178>>12412000
            TOS := "G ";                                       <<04178>>12414000
            TOS := "A ";                                       <<04178>>12416000
            TOS := "U ";                                       <<04178>>12418000
            TOS := "VS";                                       <<04178>>12420000
         END;                                                  <<04178>>12422000
      DDS := TOS;                                              <<04178>>12424000
      MOVE DDS(1) := " =  ";                                   <<04178>>12426000
      MOVE DDS(3) := ELEMENT'BUFF,(4);                         <<04178>>12428000
      EXIT'IF'BREAK;                                           <<04178>>12430000
      FWRITE(P'FILENUM,DDS,-14,0);                             <<04178>>12432000
      IF <> THEN                                               <<04178>>12434000
STOPEXIT:                                                      <<04178>>12436000
         BEGIN                                                 <<04178>>12438000
            ARRQ0(PARMS + 1) := -1;                            <<04178>>12440000
            RTN := 4;                                          <<04178>>12442000
            GO TO EXIT1;                                       <<04178>>12444000
         END;                                                  <<04178>>12446000
      PRINTENTRY(ELEMENT'BUFF,DAXSIZE');                       <<04178>>12448000
      IF LEVEL = 0 THEN                                        <<04178>>12450000
         BEGIN                                                 <<04178>>12452000
            TOS := 0D;  << RETURUN FOR ATTACHIO >>             <<04178>>12454000
            TOS := LUN(ELEMENT'BUFF(4).(0:8),                  <<04178>>12456000
                       P'GLINKAGEW.(MVTABXF));                 <<04178>>12458000
            TOS := ATTACHIO(*,0,0,@DDS,0,FINFOSIZE,            <<04178>>12460000
                            ELEMENT'BUFF(4).(8:8),             <<04178>>12462000
                            ELEMENT'BUFF(5),1);                <<04178>>12464000
            ASSEMBLE(DEL);                                     <<04178>>12466000
            IF TOS.(13:3) <> 1 THEN                            <<04178>>12468000
               BEGIN                                           <<04178>>12470000
                  CIERR(LISTFFLABIOERR);                       <<04790>>12472000
                  RTN := 0;                                    <<04178>>12474000
                  GO TO OKEXIT;                                <<04178>>12476000
               END;                                            <<04178>>12478000
            PRINTENTRY(DDS,FINFOSIZE);                         <<04178>>12480000
         END;                                                  <<04178>>12482000
      END                                                      <<03.MM>>12484000
   ELSE                                                        <<03.MM>>12486000
      BEGIN                                                    <<03.MM>>12488000
      IF LEVEL=ACCOUNTLEVEL THEN                               <<03.MM>>12490000
        BEGIN                                                  <<03.MM>>12492000
        MOVE P'ANAME:=ELEMENT'BUFF,(4);                        <<03.MM>>12494000
        IF AT'NAME(LEVEL) THEN                                 <<03.MM>>12496000
          BEGIN                                                <<03.MM>>12498000
          P'ACC'SAVE'COUNT := DAXSIZE';                        <<04178>>12500000
          MOVE P'ACC'SAVE := ELEMENT'BUFF,(DAXSIZE');          <<04178>>12502000
          RELEASESIR;                                          <<03.MM>>12504000
          RTN:=NEXTSON;                                        <<03.MM>>12506000
          END                                                  <<03.MM>>12508000
        ELSE RTN:=NEXTSON'SIR;                                 <<03.MM>>12510000
        END                                                    <<03.MM>>12512000
      ELSE IF ARRQ0(X).(TOLEVELF)<>FILELEVEL THEN              <<03.MM>>12514000
        BEGIN <<GROUP LEVEL>>                                  <<03.MM>>12516000
        MOVE P'GNAME:=ELEMENT'BUFF,(4);                        <<03.MM>>12518000
        IF AT'NAME(LEVEL) THEN                                 <<03.MM>>12520000
          BEGIN                                                <<03.MM>>12522000
          P'GRP'SAVE'COUNT := DAXSIZE';                        <<04178>>12524000
          MOVE P'GRP'SAVE := ELEMENT'BUFF,(DAXSIZE');          <<04178>>12526000
          RELEASESIR;                                          <<03.MM>>12528000
          RTN:=NEXTSON;                                        <<03.MM>>12530000
          END                                                  <<03.MM>>12532000
        ELSE RTN:=NEXTSON'SIR;                                 <<03.MM>>12534000
        END                                                    <<03.MM>>12536000
      ELSE                                                     <<04.KM>>12538000
        BEGIN <<GROUP LEVEL>>                                  <<04.KM>>12540000
        IF AT'NAME(LEVEL) THEN                                 <<04178>>12542000
           BEGIN                                               <<04178>>12544000
              P'GRP'SAVE'COUNT := DAXSIZE';                    <<04178>>12546000
              MOVE P'GRP'SAVE := ELEMENT'BUFF,(DAXSIZE');      <<04178>>12548000
           END;                                                <<04178>>12550000
        P'GLINKAGEW:=ELEMENT'BUFF(GLINKAGE);                   <<04.KM>>12552000
        MOVE P'GNAME:=ELEMENT'BUFF,(4);                        <<04.KM>>12554000
        RELEASESIR;                                            <<04.KM>>12556000
        IF NOT PVGROUP THEN RTN:=NEXTSON                       <<03.MM>>12558000
        ELSE IF IMPLICITMNT(P'GNAME,P'ANAME,P'IMPMNTDST,       <<04.KM>>12560000
                            PVINFO'ERROR) THEN                 <<10.KM>>12562000
          BEGIN                                                <<04.KM>>12564000
          P'GLINKAGEW.(MVTABXF):=PVINFO'ERROR.(PVMVTABXF);     <<10.KM>>12566000
          RTN:=REVISIT;                                        <<03.MM>>12568000
          END                                                  <<04.KM>>12570000
        ELSE IF PVINFO'ERROR=NOMOUNT THEN                      <<10.KM>>12572000
          BEGIN                                                <<04.KM>>12574000
          P'IMPMNTERR:=PVINFO'ERROR;                           <<10.KM>>12576000
          RTN:=REVISIT;                <<DDS USED BY "MOUNT">> <<03.MM>>12578000
          END                                                  <<04.KM>>12580000
        ELSE                                                   <<04.KM>>12582000
          BEGIN                                                <<04.KM>>12584000
          P'IMPMNTERR:=PVINFO'ERROR;                           <<10.KM>>12586000
          MOVE P'IMPMNTNAME:=P'GANAME,(8);                     <<04.KM>>12588000
          RTN:=ABORTSCAN;                                      <<03.MM>>12590000
          END;                                                 <<04.KM>>12592000
        END <<GROUP LEVEL>>;                                   <<04.KM>>12594000
      END;                                                     <<04.KM>>12596000
OKEXIT:                                                                 12598000
EXIT1:                                                       <<01.02>>  12600000
   EXCHANGEDB(DDSDST);                                       <<01.02>>  12602000
EXIT:                                                                   12604000
   SYSLIST:=RTN;                                               <<03.MM>>12606000
   END    <<SYSLIST>>;                                                  12608000
INTEGER PROCEDURE CYALTORG (ELEMENT, LEVEL, PARMS, SIRS);               12610000
   VALUE LEVEL, PARMS, SIRS;                                            12612000
   ARRAY ELEMENT;                                                       12614000
   INTEGER LEVEL, PARMS;                                                12616000
   DOUBLE SIRS;                                                         12618000
   OPTION PRIVILEGED,UNCALLABLE;                                        12620000
BEGIN                                                                   12622000
   LOGICAL           DADIRTY           = DB+145;               <<38.PV>>12624000
   INTEGER                                                     <<RV.PV>>12626000
       ALTNTRYX,                                               <<RV.PV>>12628000
       XX;                                                     <<RV.PV>>12630000
   EQUATE                                                      <<RV.PV>>12632000
       SPECMASKLN' = SPECMASKLN-1;                             <<RV.PV>>12634000
                                                                        12636000
                                                                        12638000
   PARMS := PARMS - DELTAQ;                                    <<RV.PV>>12640000
   ALTNTRYX := PARMS + SPECMASKLN;                             <<RV.PV>>12642000
   IF LEVEL < ACCOUNTLEVEL THEN                                <<RV.PV>>12644000
      IF ARRQ0 (PARMS).(11:2) = 3 THEN                         <<RV.PV>>12646000
         BEGIN    <<LIMIT SPECIFIED>>                                   12648000
         XX := 9;                                              <<RV.PV>>12650000
         GOTO CHECKC;                                                   12652000
         END;                                                           12654000
   IF = THEN                                                            12656000
      IF ARRQ0 (PARMS+1).(0:2) = 3 THEN                        <<RV.PV>>12658000
         BEGIN    <<NEW ACCT LIM SPECIFIED>>                            12660000
         XX := 14;                                             <<RV.PV>>12662000
CHECKC:  TOS := ELEMENT(XX);  TOS := ELEMENT(X:=X+1);          <<RV.PV>>12664000
         TOS := ARRQ0 (XX+2+ALTNTRYX);  TOS := ARRQ0 (X:=X+1); <<RV.PV>>12666000
         ASSEMBLE (DCMP);                                               12668000
         IF > THEN                                                      12670000
            BEGIN                                                       12672000
            ARRQ0 (PARMS-1) := 1;  <<SIGNAL LIM ERROR>>                 12674000
            CYALTORG := 5;                                              12676000
            RETURN;                                                     12678000
            END;                                                        12680000
         END;                                                           12682000
  <<MAX JOB PRI IS JUST A BYTE.  THE OTHER BYTE IN THE>>       <<02331>>12684000
  <<WORD IS USED FOR FLAGS.  TO AVOID DESTROYING THOSE>>       <<02331>>12686000
  <<FLAGS, WE OVERLAY LEFT BYTE OF THE NEW WORD WITH THE>>     <<02331>>12688000
  <<LEFT BYTE OF THE EXISTING WORD. NOTE THAT THIS ONLY >>     <<02331>>12690000
  <<WORKS WHILE THE DIRECTORY IS LOCKED.                >>     <<02331>>12692000
    IF LEVEL = ACCOUNTLEVEL OR LEVEL=USERLEVEL THEN            <<02331>>12694000
       CASE LEVEL OF                                           <<02331>>12696000
          BEGIN                                                <<02331>>12698000
          ; <<FILELEVEL = 0 >>                                 <<02331>>12700000
          ; <<GROUPLEVEL = 1 >>                                <<02331>>12702000
          ARRQ0(ALTNTRYX+AMAXJOBW) :=                          <<02331>>12704000
              LOGICAL(ARRQ0(ALTNTRYX+AMAXJOBW)).(8:8) LOR      <<02331>>12706000
              (ELEMENT(AMAXJOBW) LAND %177400);                <<02331>>12708000
          ARRQ0(ALTNTRYX+UMAXJOB) :=                           <<02331>>12710000
              LOGICAL(ARRQ0(ALTNTRYX+UMAXJOB)).(8:8) LOR       <<02331>>12712000
              (ELEMENT(UMAXJOB) LAND %177400);                 <<02331>>12714000
          ; <<VSDEFLEVEL = 4 >>                                <<02331>>12716000
          END;                                                 <<02331>>12718000
   TOS := SPECMASKLN';   <<SET UP LOOP LIMIT>>                 <<RV.PV>>12720000
   DO BEGIN <<ALL MASK WORDS>>                                 <<RV.PV>>12722000
          TOS := ARRQ0 (PARMS+(SPECMASKLN'-S0)); <<MASK WORD>> <<RV.PV>>12724000
          XX := (SPECMASKLN'-S1) & LSL (4); <<WORD OFFSET>>    <<RV.PV>>12726000
          ASSEMBLE (TEST);                                     <<RV.PV>>12728000
          DO BEGIN <<EACH MASK WORD>>                          <<RV.PV>>12730000
                 IF < THEN ELEMENT (XX) := ARRQ0 (XX+ALTNTRYX);<<RV.PV>>12732000
                 XX:=XX+1;  <<NEXT WORD>>                      <<RV.PV>>12734000
                 TOS := TOS & LSL (1);                         <<RV.PV>>12736000
             END UNTIL =;                                      <<RV.PV>>12738000
          DEL;  <<MASK WORD>>                                  <<RV.PV>>12740000
       END UNTIL (TOS:=TOS-1) < 0;                             <<RV.PV>>12742000
   DEL;  <<LOOP LIMIT>>                                        <<RV.PV>>12744000
   <<RETURN UPDATED ENTRY>>                                    <<RV.PV>>12746000
   CASE LEVEL OF                                               <<RV.PV>>12748000
   BEGIN                                                       <<RV.PV>>12750000
       ;                                                       <<RV.PV>>12752000
       XX := GSIZE-1;                                          <<RV.PV>>12754000
       XX := ASIZE-1;                                          <<RV.PV>>12756000
       XX := USIZE-1;                                          <<RV.PV>>12758000
   END;                                                        <<RV.PV>>12760000
   DO                                                          <<RV.PV>>12762000
    ARRQ0 (XX+ALTNTRYX) := ELEMENT (XX)                        <<RV.PV>>12764000
   UNTIL (XX:=XX-1) < 0;                                       <<RV.PV>>12766000
   DADIRTY.(15:1) := TRUE;                                     <<RV.PV>>12768000
   CYALTORG := 1;                                                       12770000
   END    <<CYALTORG>>;                                                 12772000
INTEGER PROCEDURE CYLOWERALT( ELEMENT, LEVEL, PARMS, SIRS );   <<01320>>12774000
   VALUE LEVEL, PARMS, SIRS;                                   <<01320>>12776000
   LOGICAL ARRAY ELEMENT;                                      <<01320>>12778000
   INTEGER LEVEL, PARMS;                                       <<01320>>12780000
   DOUBLE SIRS;                                                <<01320>>12782000
   OPTION PRIVILEGED, UNCALLABLE;                              <<01320>>12784000
BEGIN                                                          <<01320>>12786000
                                                               <<01320>>12788000
   << CHANGES HAVE BEEN MADE TO AN ACCOUNT'S CAPABILITIES  >>  <<01320>>12790000
   << AND/OR LOCAL ATTRIBUTES.  FOR THOSE CAPS/ATTRS THAT  >>  <<01320>>12792000
   << HAVE BEEN DELETED FROM ACCOUNT, REMOVE THEM FROM THE >>  <<01320>>12794000
   << GROUPS/USERS IN THAT ACCOUNT.                        >>  <<01320>>12796000
                                                               <<01320>>12798000
   LOGICAL                                                     <<01320>>12800000
      DOUSER,            << VISITING USER OR GROUP?        >>  <<01320>>12802000
      EXTRACAPS,         << TEMP STORAGE.                  >>  <<01450>>12804000
      DADIRTY = DB+145;  << FOR MARKING CHANGES TO ENTRY.  >>  <<01320>>12806000
                                                               <<01320>>12808000
   DEFINE                                                      <<01320>>12810000
      AM'SWITCHED'IA'BA  =  ARRQ0(PARMS+5) #,                  <<01450>>12812000
                                                               <<01320>>12814000
                                                               <<01320>>12816000
      GOT'IA'OR'BA  =  ARRQ0(PARMS+4) #;                       <<01450>>12818000
                                                               <<01450>>12820000
                                                               <<01450>>12822000
   PARMS := PARMS - DELTAQ;  << ARRANGE POINTERS TO PARMS  >>  <<01320>>12824000
   DOUSER := IF LEVEL = USERLEVEL THEN TRUE ELSE FALSE;        <<01320>>12826000
                                                               <<01320>>12828000
   IF DOUSER THEN                                              <<01320>>12830000
   BEGIN            << CHANGE ALL CAPS/ATTRS OF USER.      >>  <<01320>>12832000
      ELEMENT( UCAP ) := ELEMENT( UCAP )                       <<01320>>12834000
                         LAND LOGICAL( ARRQ0( PARMS ) );       <<01320>>12836000
      ELEMENT(UCAP+1) := ELEMENT(UCAP+1)                       <<01320>>12838000
                         LAND LOGICAL( ARRQ0(PARMS+1) );       <<01320>>12840000
      ELEMENT( ULATTR ) := ELEMENT( ULATTR )                   <<01320>>12842000
                           LAND LOGICAL( ARRQ0(PARMS+2) );     <<01320>>12844000
      ELEMENT(ULATTR+1) := ELEMENT(ULATTR+1)                   <<01320>>12846000
                           LAND LOGICAL( ARRQ0(PARMS+3) );     <<01320>>12848000
      IF ELEMENT(UCAP+1).(7:2) = 0 THEN  << NO IA OR BA.  >>   <<01450>>12850000
      BEGIN                                                    <<01450>>12852000
                                                               <<01450>>12854000
                                                               <<01450>>12856000
         IF ELEMENT(UCAP).(1:1) = 1 THEN << USER WAS AM.  >>   <<01450>>12858000
         BEGIN                                                 <<01450>>12860000
                                                               <<01450>>12862000
            EXTRACAPS := 0;                                    <<01450>>12864000
            EXTRACAPS.(7:2) := LOGICAL(ARRQ0(PARMS+1)).(7:2);  <<01450>>12866000
            ELEMENT(UCAP+1)                                    <<01450>>12868000
               := ELEMENT(UCAP+1) LOR EXTRACAPS;               <<01450>>12870000
                                                               <<01450>>12872000
            AM'SWITCHED'IA'BA := INTEGER( TRUE );              <<01450>>12874000
                                                               <<01450>>12876000
         END                                                   <<01450>>12878000
         ELSE   GOT'IA'OR'BA := INTEGER( FALSE );              <<01450>>12880000
                                                               <<01450>>12882000
                                                               <<01450>>12884000
      END;                                                     <<01450>>12886000
                                                               <<01450>>12888000
                                                               <<01450>>12890000
                                                               <<01320>>12892000
   END                                                         <<01450>>12894000
   ELSE   << CHANGE GROUP'S CAPABILITIES. >>                   <<01450>>12896000
   BEGIN                                                       <<01450>>12898000
      ELEMENT( GCAP ) := ELEMENT( GCAP )                       <<01450>>12900000
                         LAND LOGICAL( ARRQ0(PARMS+1) );       <<01450>>12902000
      IF ELEMENT( GCAP ).(7:2) = 0   << CHECK FOR USELESS >>   <<01450>>12904000
         THEN GOT'IA'OR'BA := INTEGER( FALSE ); << GROUPS >>   <<01450>>12906000
   END;                                                        <<01450>>12908000
                                                               <<01450>>12910000
   DADIRTY := TRUE;                                            <<01450>>12912000
   CYLOWERALT := 1;    << NO SIRS RELEASED, CONTINUE      >>   <<01450>>12914000
                                                               <<01450>>12916000
END;  << CYLOWERALT >>                                         <<01450>>12918000
                                                               <<01450>>12920000
                                                               <<01450>>12922000
PROCEDURE CXALTACCT EXECUTORHEAD;                                       12924000
   OPTION PRIVILEGED,UNCALLABLE;                                        12926000
BEGIN                                                                   12928000
                                                               <<01450>>12930000
   LOGICAL ARRAY     COMMARY (0:VSCOMMSZ+1+SPECMASKLN+(ASIZE-1)) = Q,   12932000
                     VSCOMM (*)        = COMMARY,              <<RV.PV>>12934000
                     RESULT (*)        = COMMARY (VSCOMMSZ'),  <<RV.PV>>12936000
                     DSPARMS (*)       = RESULT (1),           <<RV.PV>>12938000
                     ACCOUNT (*)       = DSPARMS (SPECMASKLN); << I.A >>12940000
   BYTE ARRAY        BACCT (*)         = ACCOUNT,              <<RV.PV>>12942000
                     BHVSANAME (*)     = VSCOMM (VSHANAME),    <<RV.PV>>12944000
                     BHVSGNAME (*)     = VSCOMM (VSHGNAME),    <<RV.PV>>12946000
                     BHVSVNAME (*)     = VSCOMM (VSHVNAME);    <<RV.PV>>12948000
   EQUATE                                                      <<RV.PV>>12950000
       CONDMOUNT = 3,                                          <<RV.PV>>12952000
       CONDDISMOUNT = 3;                                       <<RV.PV>>12954000
   LOGICAL                                                     <<RV.PV>>12956000
       ALLL,                                                   <<01320>>12958000
       PVINFO,                                                 <<RV.PV>>12960000
       REQTYPE := CONDMOUNT;                                   <<RV.PV>>12962000
   DEFINE                                                      <<RV.PV>>12964000
       GOT'IA'OR'BA = CAPLAPARMS(4)  #,                        <<01320>>12966000
       AM'SWITCHED'IA'BA = CAPLAPARMS(5)  #,                   <<01450>>12968000
       MVTABX   = PVINFO.(4:4) #,                              <<RV.PV>>12970000
       VSSPECIFIED   = VSCOMM (VSMASK).(0:1) #,                <<RV.PV>>12972000
       SPANSPECIFIED = VSCOMM (VSMASK).(1:1) #,                <<RV.PV>>12974000
       ALTSPECIFIED  = VSCOMM (VSMASK).(2:1) #;                << I.A >>12976000
                                                               <<01320>>12978000
   LOGICAL ARRAY                                               <<01320>>12980000
       CAPLAPARMS(0:4),                                        <<01320>>12982000
       ALL(*)   =   ALLL;                                      <<01320>>12984000
                                                               <<01320>>12986000
   SUBROUTINE RELRESOURCES;                                    <<RV.PV>>12988000
       BEGIN                                                   <<RV.PV>>12990000
           IF NOT (SPANSPECIFIED LOR ALTSPECIFIED) THEN RETURN;<<00086>>12992000
           REQTYPE := CONDDISMOUNT;                            <<RV.PV>>12994000
           DISMOUNT (BHVSVNAME, BHVSGNAME, BHVSANAME, REQTYPE);<<RV.PV>>12996000
           IF <> THEN                                          <<RV.PV>>12998000
           BEGIN                                               <<RV.PV>>13000000
               <<REQTYPE CONTAINS ERROR CODE. MAP TO CIERR>>   <<RV.PV>>13002000
               CIERR (ERRNUM);                                 <<RV.PV>>13004000
           END;                                                <<RV.PV>>13006000
       END;<<OF RELRESOURCES>>                                 <<RV.PV>>13008000
<< >>                                                                   13010000
RESULT := 0;                                                   <<RV.PV>>13012000
IF CYORGCOMS' (ERRNUM,PARMNUM,PARMSP,ACCOUNTLEVEL,ACCOUNT,     <<RV.PV>>13014000
               VSCOMM,DSPARMS) THEN                            <<RV.PV>>13016000
   BEGIN                                                       <<U.RAO>>13018000
   IF BACCT="SYS " AND DSPARMS.(ACAP:2)=3 AND                  <<U.RAO>>13020000
         NOT ACCOUNT(ACAP).(0:1) THEN                          <<07.RO>>13022000
      BEGIN <<ATTEMPT TO REMOVE SM CAP FROM SYS ACCOUNT>>      <<U.RAO>>13024000
      CIERR(ERRNUM := -ALTACCTSMCAP);                          <<04790>>13026000
      ACCOUNT(ACAP).(0:1) := 1;  <<SM CAP>>                    <<U.RAO>>13028000
      END;                                                     <<U.RAO>>13030000
   IF VSSPECIFIED THEN                                         <<RV.PV>>13032000
       BEGIN                                                   <<00086>>13034000
       IF SPANSPECIFIED OR ALTSPECIFIED THEN                   <<00086>>13036000
       BEGIN <<SPAN SPECIFIED>>                                <<RV.PV>>13038000
           MOUNT (BHVSVNAME, BHVSGNAME, BHVSANAME,             <<RV.PV>>13040000
                  REQTYPE, 0<<GEN>>, PVINFO);                  <<RV.PV>>13042000
           IF < THEN                                           <<RV.PV>>13044000
           BEGIN                                               <<RV.PV>>13046000
               <<TRANSLATE ERROR IN REQTYPE TO CIERR>>         <<RV.PV>>13048000
               CIERR (ERRNUM := ALTGRPVSNOTMNTD);              <<04790>>13050000
               RETURN;                                         <<RV.PV>>13052000
           END;                                                <<RV.PV>>13054000
       END <<WILL NEED TO DISMOUNT LATER>>                     <<RV.PV>>13056000
       ELSE                                                    <<RV.PV>>13058000
       BEGIN <<SPAN NOT OPTIONAL>>                             <<RV.PV>>13060000
           CIERR (ERRNUM := -XXXACCTPRMNOTOPT);                <<04790>>13062000
       END;                                                    <<RV.PV>>13064000
   END;<<OF VSSPECIFIED>>                                      <<RV.PV>>13066000
   TOS := 0;                                                   <<U.RAO>>13068000
   TOS.(TOLEVELF) := ACCOUNTLEVEL;                             <<U.RAO>>13070000
   TOS.(ENDLEVELF) := ACCOUNTLEVEL;                            <<U.RAO>>13072000
   TOS := DIRECSCAN (S0,0D,ACCOUNT,ARRDB0,ARRDB0,CYALTORG,     <<00086>>13074000
             DSPARMS,IF ALTSPECIFIED THEN MVTABX ELSE 0);      <<00086>>13076000
   IF <> THEN                                                  <<RV.PV>>13078000
   BEGIN <<DIRECSCAN FAILED>>                                  <<RV.PV>>13080000
       CYDIRERR' (*,%120000,ERRNUM);                           <<RV.PV>>13082000
       DEL;                                                    <<RV.PV>>13084000
   END                                                         <<RV.PV>>13086000
   ELSE                                                        <<RV.PV>>13088000
   BEGIN                                                       <<RV.PV>>13090000
       DDEL;                                                   <<RV.PV>>13092000
       IF RESULT <> 0 THEN                                     <<RV.PV>>13094000
       BEGIN                                                   <<RV.PV>>13096000
           DEL;                                                <<RV.PV>>13098000
           CIERR (ERRNUM := FLIMIT'LT'USED);                   <<RV.PV>>13100000
       END                                                     <<RV.PV>>13102000
       ELSE                                                    <<RV.PV>>13104000
       BEGIN                                                   <<01320>>13106000
                                                               <<01320>>13108000
                                                               <<01320>>13110000
       IF DSPARMS.(6:4) <> 0   THEN                            <<01320>>13112000
       BEGIN   << CAPS OR LOCAL ATTRIBUTES HAVE CHANGED.  >>   <<01320>>13114000
               << "BUBBLE" CHANGES DOWN TO USER/GROUPS.   >>   <<01320>>13116000
          CAPLAPARMS      := ACCOUNT( ACAP );                  <<01320>>13118000
          CAPLAPARMS(1)   := ACCOUNT(ACAP+1);                  <<01320>>13120000
          CAPLAPARMS(2)   := ACCOUNT( ALATTR );                <<01320>>13122000
          CAPLAPARMS(3)   := ACCOUNT(ALATTR+1);                <<01320>>13124000
          GOT'IA'OR'BA    := TRUE;                             <<01320>>13126000
          AM'SWITCHED'IA'BA := FALSE;                          <<01450>>13128000
          ALL := "@ ";                                         <<01320>>13130000
          TOS := 0;                                            <<01320>>13132000
          TOS.(TOLEVELF  ) := USERLEVEL;                       <<01320>>13134000
          TOS.(ENDLEVELFX) := ALLUSERS;                        <<01320>>13136000
          TOS := DIRECSCAN( S0, 0D, ACCOUNT, ALL, ARRDB0,      <<01320>>13138000
                            CYLOWERALT, CAPLAPARMS,            <<01320>>13140000
                       IF ALTSPECIFIED THEN MVTABX ELSE 0 );   <<01320>>13142000
          IF <> THEN                                           <<01320>>13144000
          BEGIN                                                <<01320>>13146000
             CYDIRERR'( *, %120000, ERRNUM );                  <<01320>>13148000
             DEL;                                              <<01320>>13150000
             RELRESOURCES;                                     <<01320>>13152000
             RETURN;                                           <<01320>>13154000
          END;                                                 <<01320>>13156000
          IF AM'SWITCHED'IA'BA                                 <<01450>>13158000
            THEN CIERR( ERRNUM := -AM'SWITCHEDCAPS );          <<01450>>13160000
          IF NOT GOT'IA'OR'BA                                  <<01450>>13162000
             THEN CIERR( ERRNUM := -DIRUGOTNOIABA );           <<01320>>13164000
          DDEL;                                                <<01320>>13166000
          TOS.(TOLEVELF  ) := GROUPLEVEL;                      <<01320>>13168000
          TOS.(ENDLEVELFX) := ALLGROUPS;                       <<01320>>13170000
          GOT'IA'OR'BA := TRUE;                                <<01320>>13172000
          TOS := DIRECSCAN( S0, 0D, ACCOUNT, ALL, ARRDB0,      <<01320>>13174000
                            CYLOWERALT, CAPLAPARMS,            <<01320>>13176000
                       IF ALTSPECIFIED THEN MVTABX ELSE 0 );   <<01320>>13178000
          IF <> THEN                                           <<01320>>13180000
          BEGIN                                                <<01320>>13182000
             CYDIRERR'( *, %120000, ERRNUM );                  <<01320>>13184000
             DEL;                                              <<01320>>13186000
             RELRESOURCES;                                     <<01320>>13188000
             RETURN;                                           <<01320>>13190000
          END;                                                 <<01320>>13192000
          IF NOT GOT'IA'OR'BA                                  <<01320>>13194000
             THEN CIERR( ERRNUM := -DIRGGOTNOIABA );           <<01320>>13196000
          DDEL;   DEL;                                         <<01320>>13198000
                                                               <<01320>>13200000
       END;  << "BUBBLING" CHANGES DOWN.  >>                   <<01320>>13202000
                                                               <<01320>>13204000
        IF SPANSPECIFIED THEN                                  <<RV.PV>>13206000
        BEGIN                                                  <<RV.PV>>13208000
            ACCOUNT (ADFSCOUNT) := 0;  ACCOUNT (X:=X+1) := 0;  <<RV.PV>>13210000
            ACCOUNT (ACPUCOUNT) := 0;  ACCOUNT (X:=X+1) := 0;  <<RV.PV>>13212000
            ACCOUNT (ACONTIMECOUNT):=0; ACCOUNT (X:=X+1):=0;   <<RV.PV>>13214000
            TOS.(TOLEVELF) := 0;                               <<RV.PV>>13216000
            TOS := DIRECINSERT (S0,0D,ACCOUNT,ARRDB0,ARRDB0,   <<38.PV>>13218000
                                ACCOUNT (AGIPNTR),MVTABX);     <<RV.PV>>13220000
            IF <> THEN                                         <<RV.PV>>13222000
            BEGIN <<INSERT ERROR ON NON-SYSVS DIRECTORY>>      <<RV.PV>>13224000
                CYDIRERR' (*,%167000,ERRNUM);                  <<RV.PV>>13226000
                DEL;                                           <<RV.PV>>13228000
                CIERR (ERRNUM := -XXXACCTSPANFAILD);           <<04790>>13230000
            END ELSE ASSEMBLE (DDEL,DEL);                      <<RV.PV>>13232000
        END <<OF SPANSPECIFIED>> ELSE DEL;                     <<RV.PV>>13234000
                                                               <<01320>>13236000
       END;   << RESULT = 0 CASE.  >>                          <<01320>>13238000
                                                               <<01320>>13240000
   END;                                                        <<RV.PV>>13242000
   RELRESOURCES;                                               <<00086>>13244000
   END;                                                        <<RV.PV>>13246000
END;   <<CXALTACCT>>                                           <<U.RAO>>13248000
PROCEDURE CXALTGROUP EXECUTORHEAD;                                      13250000
   OPTION PRIVILEGED,UNCALLABLE;                                        13252000
BEGIN                                                                   13254000
   LOGICAL ARRAY     COMMARY (0:VSCOMMSZ+1+SPECMASKLN+(GSIZE-1)) = Q,   13256000
                     VSCOMM (*)        = COMMARY,              <<RV.PV>>13258000
                     RESULT (*)        = COMMARY (VSCOMMSZ'),  <<RV.PV>>13260000
                     DSPARMS (*)       = RESULT (1),           <<RV.PV>>13262000
                     NTRY (0:GSIZE-1);                         <<RV.PV>>13264000
   INTEGER ARRAY     GROUP (*)         = DSPARMS (SPECMASKLN), <<RV.PV>>13266000
                     ACCOUNT (0:ASIZE-1);                      <<01.PV>>13268000
   BYTE ARRAY        BACCOUNT (*)      = ACCOUNT,              <<RV.PV>>13270000
                     BHVSANAME (*)     = VSCOMM (VSHANAME),    <<RV.PV>>13272000
                     BHVSGNAME (*)     = VSCOMM (VSHGNAME),    <<RV.PV>>13274000
                     BHVSVNAME (*)     = VSCOMM (VSHVNAME);    <<RV.PV>>13276000
   LOGICAL ARRAY     LGROUP (*)        = GROUP,                         13278000
                     LACCOUNT (*)      = ACCOUNT;                       13280000
   DOUBLE ARRAY      DACCOUNTX (*)     = ACCOUNT (ADFSLIMIT),  <<01.PV>>13282000
                     DGROUPX (*)       = GROUP (GDFSLIMIT),    <<RV.PV>>13284000
                     DGDFSCOUNT (*)    = NTRY (GDFSCOUNT);     <<RV.PV>>13286000
   LOGICAL           DSPARMS1          = DSPARMS +1;                    13288000
                                                               <<00879>>13290000
   INTEGER ARRAY     CAP'DENIED(0:1);                          <<00879>>13292000
   EQUATE                                                      <<RV.PV>>13294000
       CONDMOUNT = 3,                                          <<RV.PV>>13296000
       CONDDISMOUNT = 3;                                       <<RV.PV>>13298000
   LOGICAL                                                     <<RV.PV>>13300000
       GLINKAGE',                                              <<RV.PV>>13302000
       PVINFO,                                                 <<RV.PV>>13304000
       REQTYPE := CONDMOUNT;                                   <<RV.PV>>13306000
   DEFINE                                                      <<RV.PV>>13308000
       MVTABX   = PVINFO.(4:4) #,                              <<RV.PV>>13310000
       VSSPECIFIED   = VSCOMM (VSMASK).(0:1) #,                <<RV.PV>>13312000
       SPANSPECIFIED = VSCOMM (VSMASK).(1:1) #,                <<RV.PV>>13314000
       ALTSPECIFIED  = VSCOMM (VSMASK).(2:1) #,                <<00086>>13316000
       NUMNAMES      = VSCOMM (VSMASK).(14:2) #;               <<RV.PV>>13318000
   SUBROUTINE RELRESOURCES;                                    <<RV.PV>>13320000
       BEGIN                                                   <<RV.PV>>13322000
           IF NOT (SPANSPECIFIED LOR ALTSPECIFIED) THEN RETURN;<<00086>>13324000
           REQTYPE := CONDDISMOUNT;                            <<RV.PV>>13326000
           DISMOUNT (BHVSVNAME, BHVSGNAME, BHVSANAME, REQTYPE);<<RV.PV>>13328000
           IF <> THEN                                          <<RV.PV>>13330000
           BEGIN                                               <<RV.PV>>13332000
               <<REQTYPE CONTAINS ERROR CODE. MAP TO CIERR>>   <<RV.PV>>13334000
               CIERR (ERRNUM);                                 <<RV.PV>>13336000
           END;                                                <<RV.PV>>13338000
       END;<<OF RELRESOURCES>>                                 <<RV.PV>>13340000
RESULT := 0;                                                   <<RV.PV>>13342000
IF CYORGCOMS'(ERRNUM,PARMNUM,PARMSP,GROUPLEVEL,GROUP,          <<U.RAO>>13344000
              VSCOMM,DSPARMS) THEN  <<LIST PARSED OK>>         <<RV.PV>>13346000
   BEGIN                                                       <<U.RAO>>13348000
   <<THE FIRST MAJOR TASK IS TO VALIDATE ANY NEW FILE, CPU  >> <<U.RAO>>13350000
   <<OR CONNECT LIMITS TO VERIFY THAT THEY DO NOT EXCEED    >> <<U.RAO>>13352000
   <<THE ACCOUNT LIMITS.  TO DO THIS WE USE DIRECFIND TO GET>> <<U.RAO>>13354000
   <<THE CURRENT ACCOUNT VALUES.  INCIDENTALLY, THE CURRENT >> <<U.RAO>>13356000
   <<ACTUAL FILE LIMITS ARE CHECKED IN CYALTORG, NOT HERE.  >> <<U.RAO>>13358000
   <<FIRST STEP IS TO SET UP FOR DIRECFIND OF ACCOUNT>>        <<U.RAO>>13360000
   WHO(,,,,,BACCOUNT);  <<LOGON ACCOUNT>>                      <<U.RAO>>13362000
   TOS := 0; TOS.(ENDLEVELF) := ACCOUNTLEVEL;                  <<U.RAO>>13364000
   IF DIRECFIND(S0,0D,ACCOUNT,ARRDB0,ARRDB0,ACCOUNT) <> 0D THEN<<38.PV>>13366000
      SUDDENDEATH(504);  <<DISCREPANCY BETWEEN WHO & DIRECFIND><<U.RAO>>13368000
   DEL;  <<POP LEVEL WORD>>                                    <<U.RAO>>13370000
   <<NOW CHECK LIMITS>>                                        <<U.RAO>>13372000
   IF DSPARMS1.(3:1) AND (DACCOUNTX(4)<DGROUPX(4)) THEN        <<U.RAO>>13374000
      BEGIN                                                    <<U.RAO>>13376000
      CIERR(ERRNUM := -ALTGRPCPULIMITS);                       <<04790>>13378000
      DGROUPX(4) := DACCOUNTX(4);                              <<U.RAO>>13380000
      END;                                                     <<U.RAO>>13382000
   IF DSPARMS AND (DACCOUNTX(2)<DGROUPX(2)) THEN               <<U.RAO>>13384000
      BEGIN                                                    <<U.RAO>>13386000
      CIERR(ERRNUM := -ALTGRPCONNECTLM);                       <<04790>>13388000
      DGROUPX(2) := DACCOUNTX(2);                              <<U.RAO>>13390000
      END;                                                     <<U.RAO>>13392000
   IF DSPARMS.(11:1) AND (DACCOUNTX<DGROUPX) THEN              <<U.RAO>>13394000
      BEGIN                                                    <<U.RAO>>13396000
      CIERR(ERRNUM := -ALTGRPFILELIMIT);                       <<04790>>13398000
      DGROUPX := DACCOUNTX;                                    <<U.RAO>>13400000
      END;                                                     <<U.RAO>>13402000
   IF DSPARMS1.(7:1) AND                                       <<U.RAO>>13404000
         ((LGROUP(GCAP) LOR LACCOUNT(ACAP+1)) <> LACCOUNT(ACAP+1)) THEN 13406000
      BEGIN  <<CAPABILITIES EXCEED ACCOUNTS>>                  <<U.RAO>>13408000
      CAP'DENIED := 0; << 1ST WORD OF CAPABILITIES >>          <<00879>>13410000
      CAP'DENIED(1) := LGROUP(GCAP) XOR                        <<00879>>13412000
                       (LGROUP(GCAP) LAND LACCOUNT(ACAP+1));   <<00879>>13414000
      CAP'ERR(-ALTGRPEXCAP,CAP'DENIED);                        <<00879>>13416000
      LGROUP(GCAP) := LGROUP(GCAP) LAND LACCOUNT(ACAP+1);      <<U.RAO>>13418000
      END;                                                     <<U.RAO>>13420000
   IF VSSPECIFIED THEN                                         <<RV.PV>>13422000
   BEGIN <<VS SPECIFIED>>                                      <<RV.PV>>13424000
       IF SPANSPECIFIED OR ALTSPECIFIED THEN                   <<00086>>13426000
       BEGIN                                                   <<00086>>13428000
           MOUNT (BHVSVNAME, BHVSGNAME, BHVSANAME,             <<RV.PV>>13430000
                  REQTYPE, 0<<GEN>>, PVINFO);                  <<RV.PV>>13432000
           IF < THEN                                           <<RV.PV>>13434000
           BEGIN                                               <<RV.PV>>13436000
               <<TRANSLATE ERROR IN REQTYPE TO CIERR>>         <<RV.PV>>13438000
               CIERR(ERRNUM:=ALTGRPVSNOTMNTD);                 <<04791>>13440000
               RETURN;                                         <<RV.PV>>13442000
           END;                                                <<RV.PV>>13444000
       END;<<WILL NEED TO DISMOUNT LATER>>                     <<RV.PV>>13446000
       TOS := 0;  TOS.(ENDLEVELF) := GROUPLEVEL;               <<RV.PV>>13448000
       IF (TOS := DIRECFIND (S0,0D,ACCOUNT,GROUP,              <<38.PV>>13450000
                             ARRDB0,NTRY)) <> 0D THEN          <<RV.PV>>13452000
       BEGIN <<OBJECT GROUP NOT FOUND>>                        <<RV.PV>>13454000
           CYDIRERR' (*,%120000,ERRNUM);                       <<RV.PV>>13456000
           DEL;                                                <<RV.PV>>13458000
           RELRESOURCES;                                       <<RV.PV>>13460000
           RETURN;                                             <<RV.PV>>13462000
       END;                                                    <<RV.PV>>13464000
       GLINKAGE' := NUMNAMES <> 0  <<SETS OR RESETS PVF>>      <<00086>>13466000
                    LAND NOT ALTSPECIFIED;                     <<00086>>13468000
       IF NTRY (GLINKAGE).(PVF) = PV THEN                      <<RV.PV>>13470000
        IF NTRY (GMOUNTREFCNTR) > 0 THEN                       <<RV.PV>>13472000
        BEGIN <<CURRENTLY BOUND TO HVS>>                       <<RV.PV>>13474000
            <<CANNOT BE DONE WHILE BOUND TO HVS>>              <<RV.PV>>13476000
            CIERR(ERRNUM:=ALTGRPBOUND);                        <<04791>>13478000
            RELRESOURCES;                                      <<RV.PV>>13480000
            RETURN;                                            <<RV.PV>>13482000
        END                                                    <<RV.PV>>13484000
        ELSE                                                   <<RV.PV>>13486000
       ELSE                                                    <<RV.PV>>13488000
        IF GLINKAGE' THEN <<ASSINGING TO A NON-SYSVS>>         <<RV.PV>>13490000
         IF DGDFSCOUNT > 0D THEN                               <<RV.PV>>13492000
         BEGIN <<CANNOT ASSIGN WHILE FILE TREE NOT NULL>>      <<RV.PV>>13494000
             CIERR(ERRNUM:=ALTGRPFDOMAIN);                     <<04791>>13496000
             RELRESOURCES;                                     <<RV.PV>>13498000
             RETURN;                                           <<RV.PV>>13500000
         END;                                                  <<RV.PV>>13502000
       GROUP (GLINKAGE) := GLINKAGE' LAND %100000;             <<RV.PV>>13504000
       MOVE GROUP (GHVSANAME):=VSCOMM (VSHANAME), (NAMESIZE*3);<<RV.PV>>13506000
        IF NOT ALTSPECIFIED THEN                                        13508000
        BEGIN                                                           13510000
       TOS := GLINKAGE & LSR (4);                              <<RV.PV>>13512000
       TOS := DSPARMS (S0);                                    <<RV.PV>>13514000
       X := GLINKAGE LAND %17;                                 <<RV.PV>>13516000
       ASSEMBLE (TSBC 0,X); <<SET SPECMASK FOR GLINKAGE>>      <<RV.PV>>13518000
       ASSEMBLE (XCH,STAX);                                    <<RV.PV>>13520000
       DSPARMS (X) := TOS;                                     <<RV.PV>>13522000
        END;                                                            13524000
   END;<<OF VSSPECIFIED>>                                      <<RV.PV>>13526000
   <<NOW ACTUALLY ATTEMPT MODIFICATION>>                       <<RV.PV>>13528000
   TOS := 0;                                                   <<U.RAO>>13530000
   TOS.(TOLEVELF) := GROUPLEVEL;                               <<U.RAO>>13532000
   TOS.(ENDLEVELF) := GROUPLEVEL;                              <<U.RAO>>13534000
   TOS := DIRECSCAN (S0,0D,ACCOUNT,GROUP,ARRDB0,CYALTORG,      <<00086>>13536000
             DSPARMS,IF ALTSPECIFIED THEN MVTABX ELSE 0);      <<00086>>13538000
   IF <> THEN                                                  <<U.RAO>>13540000
      BEGIN  <<DIRECTORY PROBLEM>>                             <<U.RAO>>13542000
      IF (DS1 = [16/2,16/2]D) AND (NOT ALTSPECIFIED) THEN      <<00855>>13544000
         SUDDENDEATH(505);  << NON-EXISTENT ACCOUNT >>         <<00855>>13546000
      CYDIRERR'(*,%120000,ERRNUM);                             <<U.RAO>>13548000
      DEL;                                                     <<RV.PV>>13550000
      END                                                      <<U.RAO>>13552000
   ELSE                                                        <<RV.PV>>13554000
   BEGIN                                                       <<RV.PV>>13556000
       DDEL; <<RETURN FROM DIRECSCAN>>                         <<RV.PV>>13558000
       IF RESULT <> 0 THEN                                     <<RV.PV>>13560000
       BEGIN                                                   <<RV.PV>>13562000
           DEL;                                                <<RV.PV>>13564000
           CIERR (ERRNUM := ALTGRPFILEACTUL);                  <<RV.PV>>13566000
       END                                                     <<RV.PV>>13568000
       ELSE                                                    <<RV.PV>>13570000
        IF SPANSPECIFIED THEN                                  <<RV.PV>>13572000
        BEGIN                                                  <<RV.PV>>13574000
            GROUP (GDFSCOUNT) := 0;  GROUP (X:=X+1) := 0;      <<RV.PV>>13576000
            GROUP (GCPUCOUNT) := 0;  GROUP (X:=X+1) := 0;      <<00086>>13578000
            GROUP (GCONTIMECOUNT) := 0; GROUP (X:=X+1) := 0;   <<RV.PV>>13580000
            GROUP (GLINKAGE) := 0;                             <<RV.PV>>13582000
            TOS.(TOLEVELF) := 0;                               <<RV.PV>>13584000
            TOS := DIRECINSERT (S0,0D,ACCOUNT,GROUP,ARRDB0,    <<38.PV>>13586000
                                GROUP (GFIPNTR),MVTABX);       <<RV.PV>>13588000
            IF <> THEN                                         <<RV.PV>>13590000
            BEGIN <<INSERT ERROR ON NON-SYSVS DIRECTORY>>      <<RV.PV>>13592000
                CYDIRERR' (*,%167000,ERRNUM);                  <<RV.PV>>13594000
                DEL;                                           <<RV.PV>>13596000
                CIERR (ERRNUM := -XXXGRPSPANFAILD)             <<04790>>13598000
            END ELSE ASSEMBLE (DDEL,DEL);                      <<RV.PV>>13600000
        END <<OF SPANSPECIFIED>> ELSE DEL;                     <<RV.PV>>13602000
   END;                                                        <<RV.PV>>13604000
   RELRESOURCES;                                               <<00086>>13606000
   END;                                                        <<U.RAO>>13608000
END;  <<CXALTGROUP>>                                           <<U.RAO>>13610000
PROCEDURE CXALTUSER EXECUTORHEAD;                                       13612000
   OPTION PRIVILEGED,UNCALLABLE;                                        13614000
BEGIN                                                                   13616000
   LOGICAL ARRAY     DSPARMS (0:(USIZE-1)+SPECMASKLN) = Q;     <<RV.PV>>13618000
   INTEGER ARRAY     USER (*)          = DSPARMS (SPECMASKLN), <<RV.PV>>13620000
                     ACCOUNT (0:ASIZE-1);                      <<01.PV>>13622000
   BYTE ARRAY        BACCOUNT (*)      = ACCOUNT;                       13624000
   BYTE ARRAY        BUSER (*)         = USER,                          13626000
                     BME (0:7);                                         13628000
   DOUBLE            CAP;                                               13630000
   LOGICAL ARRAY     LUSERX (*)        = USER (UCAP),          <<01.PV>>13632000
                     LACCOUNTX (*)     = ACCOUNT (ACAP);       <<01.PV>>13634000
                                                               <<00879>>13636000
   INTEGER ARRAY     CAP'DENIED(0:1);                          <<00879>>13638000
                                                                        13640000
<< >>                                                                   13642000
IF CYORGCOMS' (ERRNUM,PARMNUM,PARMSP,USERLEVEL,USER,,DSPARMS) THEN      13644000
   BEGIN  <<PARAMETER LIST PARSED OK>>                         <<U.RAO>>13646000
   WHO ( , CAP, , BME, , BACCOUNT);                                     13648000
   IF DSPARMS.(4:2) <> 0 THEN                                  <<01319>>13650000
   BEGIN     << CHANGES TO THE USER'S CAPABILITIES.   >>       <<01319>>13652000
                                                               <<01319>>13654000
                                                               <<01319>>13656000
      IF ( BUSER = "MANAGER " LAND BACCOUNT = "SYS " ) AND     <<01319>>13658000
           LUSERX.(0:1) <> 1    THEN                           <<01319>>13660000
      BEGIN  << ATTEMPT TO REMOVE "SM" FROM MANAGER.SYS.   >>  <<01319>>13662000
         CIERR( ERRNUM := ALTUMGRSMCAP );                      <<01319>>13664000
         RETURN;                                               <<01319>>13666000
      END;                                                     <<01319>>13668000
                                                               <<01319>>13670000
      IF BME = BUSER,(8)  AND  LUSERX.(1:1) <> 1  THEN         <<01319>>13672000
      BEGIN  << ATTEMPT TO REMOVE "AM" FROM CALLER.        >>  <<01319>>13674000
         CIERR( ERRNUM := ALTUMGRAMCAP );                      <<01319>>13676000
         RETURN;                                               <<01319>>13678000
      END;                                                     <<01319>>13680000
                                                               <<01319>>13682000
   END;                                                        <<01319>>13684000
                                                               <<01319>>13686000
   TOS := 0; TOS.(ENDLEVELF) := ACCOUNTLEVEL;                  <<01.PV>>13688000
   IF DIRECFIND (S0, 0D, ACCOUNT, ARRDB0, ARRDB0,              <<38.PV>>13690000
                 ACCOUNT) <> 0D THEN                           <<01.PV>>13692000
   SUDDENDEATH(504);                                                    13694000
   DEL;                                                        <<01.PV>>13696000
   IF DSPARMS.(4:1) THEN  <<UCAP CHANGED, CHECK>>              <<U.RAO>>13698000
      BEGIN   <<AGAINST ACCOUNT CAP>>                          <<U.RAO>>13700000
      TOS := LUSERX LOR LACCOUNTX;                             <<U.RAO>>13702000
      TOS := LUSERX(1) LOR LACCOUNTX(1);                       <<U.RAO>>13704000
      TOS := LACCOUNTX;                                        <<U.RAO>>13706000
      TOS := LACCOUNTX(1);                                     <<U.RAO>>13708000
      ASSEMBLE(DCMP);  <<COMPARE 2 CAP MASKS>>                 <<U.RAO>>13710000
      IF <> THEN   <<USER GIVEN TOO HIGH CAP>>                 <<U.RAO>>13712000
         BEGIN  <<FORCE TO ACCOUNT CAPS>>                      <<U.RAO>>13714000
         CAP'DENIED := LUSERX XOR (LUSERX LAND LACCOUNTX);     <<00879>>13716000
         CAP'DENIED(1) := LUSERX(1) XOR                        <<00879>>13718000
                          (LUSERX(1) LAND LACCOUNTX(1));       <<00879>>13720000
         CAP'ERR(-ALTUSERCAPS,CAP'DENIED);                     <<00879>>13722000
         LUSERX := LACCOUNTX LAND LUSERX;  <<INTERSECTION>>    <<U.RAO>>13724000
         LUSERX(1) := LACCOUNTX(1) LAND LUSERX(1);             <<U.RAO>>13726000
         END                                                   <<U.RAO>>13728000
      END;   <<CHECK OF USER CAPABILITIES>>                    <<U.RAO>>13730000
   IF DSPARMS.(6:1) THEN <<USER LOC ATTR CHANGED, CHECK>>      <<U.RAO>>13732000
      BEGIN   <<AGAINST ACCOUNT LOC ATTRIBUTES>>               <<U.RAO>>13734000
      TOS := LUSERX(2) LOR LACCOUNTX(2);                       <<U.RAO>>13736000
      TOS := LUSERX(3) LOR LACCOUNTX(3);                       <<U.RAO>>13738000
      TOS := LACCOUNTX(2);                                     <<U.RAO>>13740000
      TOS := LACCOUNTX(3);                                     <<U.RAO>>13742000
      ASSEMBLE(DCMP);                                          <<U.RAO>>13744000
      IF <> THEN  <<USER LOC ATTR EXCEEDS ACCOUNT>>            <<U.RAO>>13746000
         BEGIN                                                 <<U.RAO>>13748000
         CIERR(ERRNUM := -ALTUSERLATTR);                       <<04790>>13750000
         LUSERX(2) := LACCOUNTX(2) LAND LUSERX(2);             <<U.RAO>>13752000
         LUSERX(3) := LACCOUNTX(3) LAND LUSERX(3);             <<U.RAO>>13754000
         END                                                   <<U.RAO>>13756000
      END;                                                     <<U.RAO>>13758000
   IF DSPARMS(1).(1:1) THEN                                             13760000
      IF USER (UMAXJOB).(8:8) < ACCOUNT (AMAXJOBW).(8:8) THEN  <<01.PV>>13762000
         BEGIN                                                 <<U.RAO>>13764000
         CIERR(ERRNUM := -ALTUMAXPRI);                         <<04790>>13766000
         USER(UMAXJOB).(8:8) := ACCOUNT(AMAXJOBW).(8:8);       <<U.RAO>>13768000
         END;                                                  <<U.RAO>>13770000
   TOS := 0;                                                   <<01.PV>>13772000
   TOS.(TOLEVELF) := USERLEVEL; TOS.(ENDLEVELF) := USERLEVEL;  <<01.PV>>13774000
   TOS := DIRECSCAN (S0, 0D, ACCOUNT, USER, ARRDB0,            <<38.PV>>13776000
                     CYALTORG, DSPARMS);                       <<01.PV>>13778000
   IF <> THEN                                                           13780000
      BEGIN                                                             13782000
      IF DS1 = [16/2, 16/2]D THEN SUDDENDEATH(505);                     13784000
      CYDIRERR'(*,%120000,ERRNUM);                             <<U.RAO>>13786000
      END ELSE DDEL;                                           <<01.PV>>13788000
   DEL;                                                        <<01.PV>>13790000
   END;                                                        <<U.RAO>>13792000
END;   <<CXALTUSER>>                                           <<U.RAO>>13794000
PROCEDURE CXLISTACCT EXECUTORHEAD;                             <<U.RAO>>13796000
OPTION PRIVILEGED,UNCALLABLE;                                  <<U.RAO>>13798000
BEGIN                                                          <<U.RAO>>13800000
ENTRY CXLISTGROUP,                                             <<U.RAO>>13802000
      CXLISTUSER;                                              <<07.KM>>13804000
INTEGER DL := COMMACR;                                         <<U.RAO>>13806000
INTEGER NUMPARMS,                                              <<04.KM>>13808000
        FNUM;                                                  <<04.KM>>13810000
INTEGER TYPE := ACCOUNTLEVEL;                                  <<U.RAO>>13812000
INTEGER ARRAY SLPARMS(0:SYSL'PARMLEN-1);                      <<00.GEN>>13814000
INTEGER ARRAY PPRESULT(*)=SLPARMS(SYSL'PPRINX);               <<00.GEN>>13816000
DEFINE P'FILENUM=  SLPARMS(18) #,                              <<04.KM>>13818000
       P'GOTENTRY= SLPARMS(24) #;                              <<03.KM>>13820000
DOUBLE ARRAY PARMS(0:2) = Q;                                   <<U.RAO>>13822000
BYTE POINTER LEAF = PARMS;                                     <<U.RAO>>13824000
BYTE LEAFNAMELEN = PARMS+1;                                    <<U.RAO>>13826000
BYTE POINTER LISTFILE = PARMS+2;                               <<U.RAO>>13828000
BYTE LISTFILELEN = PARMS+3;                                    <<U.RAO>>13830000
BYTE POINTER EXTRAPARM = PARMS+4;                              <<U.RAO>>13832000
ARRAY DATEBUF(0:13);  <<FOR TIME STAMP IF REQUIRED>>           <<02.RO>>13834000
INTEGER DEV := 0;  <<DEVICE TYPE IF LISTFILE SPECIFIED>>       <<03.RO>>13836000
BYTE POINTER DELIM;                                           <<00.GEN>>13838000
                                                               <<U.RAO>>13840000
SUBROUTINE LISTFSERR;  <<HANDLES FILE SYSTEM ERRORS>>          <<U.RAO>>13842000
BEGIN                                                          <<U.RAO>>13844000
FERROR'(FNUM,PARMNUM);                                         <<00582>>13846000
CIERR(ERRNUM := LISTFFSERR,,%10000,PARMNUM);                   <<U.RAO>>13848000
FCLOSE(FNUM,0,0);                                              <<00582>>13850000
ASSEMBLE(EXIT 3);  <<BAIL OUT>>                                <<U.RAO>>13852000
END;                                                           <<U.RAO>>13854000
                                                               <<U.RAO>>13856000
   GOTO START;  <<NEWACCT ENTRY>>                              <<U.RAO>>13858000
                                                               <<U.RAO>>13860000
CXLISTGROUP:                                                   <<U.RAO>>13862000
   TYPE := GROUPLEVEL;                                         <<U.RAO>>13864000
   GOTO START;                                                 <<U.RAO>>13866000
                                                               <<U.RAO>>13868000
CXLISTUSER:                                                    <<U.RAO>>13870000
   TYPE := USERLEVEL;                                          <<U.RAO>>13872000
   GOTO START;                                                 <<U.RAO>>13874000
                                                               <<U.RAO>>13876000
   TYPE := VSDEFLEVEL;                                         <<U.RAO>>13878000
   GOTO START;                                                 <<U.RAO>>13880000
                                                               <<U.RAO>>13882000
START:                                                         <<U.RAO>>13884000
                                                               <<U.RAO>>13886000
MYCOMMAND(PARMSP,DL,3,NUMPARMS,PARMS);                         <<U.RAO>>13888000
PARMNUM := 1;                                                  <<U.RAO>>13890000
IF NOT PRODUCEPARMS(TYPE,PARMSP,PPRESULT,DELIM,ERRNUM)        <<00.GEN>>13892000
   THEN RETURN;                                               <<00.GEN>>13894000
IF NUMPARMS > 0 THEN                                           <<U.RAO>>13896000
   BEGIN  <<CHECK OUT PARMS>>                                  <<U.RAO>>13898000
   IF @DELIM < INTEGER(LEAFNAMELEN)+@LEAF THEN                <<00.GEN>>13900000
      BEGIN  <<EXTRANEOUS STUFF IN LEAF NAME>>                 <<U.RAO>>13902000
      TOS := ERRNUM := LISTACCTEXTRAN;                         <<U.RAO>>13904000
      TOS := @DELIM;                                          <<00.GEN>>13906000
      CIERR(*,*);                                              <<U.RAO>>13908000
      RETURN;                                                  <<U.RAO>>13910000
      END;                                                     <<U.RAO>>13912000
   IF LEAFNAMELEN > 0 THEN  <<SOME NAME SPECIFIED>>            <<U.RAO>>13914000
      BEGIN  <<CHECK FOR SM CAPABILITY>>                       <<U.RAO>>13916000
      SETXPXGLOB;                                              <<U.RAO>>13918000
      IF NOT SMCAP THEN                                        <<U.RAO>>13920000
         IF CHECKHOMEACCT(PPRESULT) >= 3 THEN                  <<U.RAO>>13922000
            BEGIN                                              <<U.RAO>>13924000
            IF = THEN ERRNUM := LISTACCTNOTAT                  <<U.RAO>>13926000
                 ELSE ERRNUM := LISTACCTSMLOGON;               <<U.RAO>>13928000
            CIERR(ERRNUM, LEAF);                               <<U.RAO>>13930000
            RETURN                                             <<U.RAO>>13932000
            END;                                               <<U.RAO>>13934000
      END;                                                     <<U.RAO>>13936000
   IF NUMPARMS > 1 THEN  <<CHECK FOR LIST FILE>>               <<U.RAO>>13938000
      IF LISTFILELEN = 0 THEN                                  <<U.RAO>>13940000
         BEGIN                                                 <<U.RAO>>13942000
         PARMNUM := 2;                                         <<U.RAO>>13944000
         CIERR(ERRNUM := LISTACCTXPCTLST, LISTFILE);           <<U.RAO>>13946000
         RETURN                                                <<U.RAO>>13948000
         END;                                                  <<U.RAO>>13950000
   IF NUMPARMS > 2 THEN                                        <<U.RAO>>13952000
      BEGIN  <<TOO MANY PARAMETERS>>                           <<U.RAO>>13954000
      PARMNUM := 3;                                            <<U.RAO>>13956000
      CIERR(ERRNUM := LISTACCT2MP, EXTRAPARM);                 <<U.RAO>>13958000
      RETURN                                                   <<U.RAO>>13960000
      END;                                                     <<U.RAO>>13962000
   END;  <<PARSE OF PARAMETERS>>                               <<U.RAO>>13964000
IF TYPE = ACCOUNTLEVEL THEN  <<CHECK FOR PROPER DEFAULT>>      <<04.RO>>13966000
   BEGIN                                                       <<04.RO>>13968000
   SETXPXGLOB;                                                 <<04.RO>>13970000
   IF NOT SMCAP THEN  <<REDUCE DEFAULT TO LOGON ACCOUNT>>      <<04.RO>>13972000
      IF D'ANAME = "@ " THEN                                   <<04.RO>>13974000
         BEGIN  <<REPLACE WITH ACCOUNT NAME>>                  <<05.RO>>13976000
         WHO(,,,,,D'ANAME);                                    <<05.RO>>13978000
         WHO(,,,,,G'ANAME);                                    <<05.RO>>13980000
         END;                                                  <<05.RO>>13982000
   END;                                                        <<05.RO>>13984000
<<NOW OPEN LIST FILE>>                                         <<U.RAO>>13986000
IF NUMPARMS = 2 THEN  <<LISTFILE NAME PRESENT>>                <<U.RAO>>13988000
   BEGIN                                                       <<03.RO>>13990000
   FNUM := FOPEN(LISTFILE, %504, %102, 36);                    <<04.KM>>13992000
   IF CARRY THEN LISTFSERR;                                    <<03.RO>>13994000
   FGETINFO(FNUM,,,,,DEV);  <<GET DEVICE TYPE INFO>>           <<04.KM>>13996000
   IF CARRY THEN LISTFSERR;                                    <<03.RO>>13998000
   END                                                         <<03.RO>>14000000
ELSE                                                           <<U.RAO>>14002000
   FNUM := 2;  <<DEFAULT OF $STDLIST (BUT NO OPEN)>>           <<04.KM>>14004000
<<IF NOT INTERACTIVE OR USER SUPPLIED A LIST FILE, >>          <<02.RO>>14006000
<<TIME STAMP THE OUTPUT OF THE PROCEDURE>>                     <<02.RO>>14008000
INTERACTIVETEST;                                               <<02.RO>>14010000
IF NOT TOS  <<NOT INTERACTIVE>> AND NUMPARMS <> 2 OR           <<03.RO>>14012000
   NUMPARMS = 2 AND DEV.(8:8) >= 8 <<NOT DISC>> THEN           <<03.RO>>14014000
   BEGIN                                                       <<02.RO>>14016000
   DATE'LINE(DATEBUF);                                         <<02.RO>>14018000
   FWRITE(FNUM, DATEBUF, -27, %60);                            <<04.KM>>14020000
   END;                                                        <<02.RO>>14022000
                                                               <<02.RO>>14024000
SLPARMS(1) := 0;                                               <<U.RAO>>14026000
SLPARMS (22) := D'TYPE;                                       <<00.GEN>>14028000
SLPARMS (23) := 0;         <<GLINKAGE INITIALIZATION>>         <<RV.PV>>14030000
SLPARMS(SAVEBUFFINDEX) := 0;  << see syslist >>                <<04178>>14032000
SLPARMS(SAVEBUFFINDEX + ASIZE + 1) := 0;                       <<04178>>14034000
P'GOTENTRY:=FALSE;                                             <<03.KM>>14036000
P'FILENUM:=FNUM;                                               <<04.KM>>14038000
TOS := 0D;                                                     <<38.PV>>14040000
TOS := D'TYPE;                                                <<00.GEN>>14042000
TOS := D'INX1.(MVTABXF);               <<LINKAGE>>            <<05.GEN>>14044000
TOS := D'INX2;                         <<INDEXP>>             <<05.GEN>>14046000
TOS := DIRECSCAN (*,*,D'ANAME,D'GNAME,D'FNAME,                <<00.GEN>>14048000
                  SYSLIST,SLPARMS);                           <<00.GEN>>14050000
IF <> THEN                                                     <<U.RAO>>14052000
   BEGIN  <<DIRECTORY PROBLEM>>                                <<U.RAO>>14054000
   IF FNUM<>2 THEN  <<NOT $STDLIST, CLOSE FILE>>               <<04.KM>>14056000
      BEGIN                                                    <<U.RAO>>14058000
      FCLOSE(FNUM, 0, 0);                                      <<04.KM>>14060000
      IF CARRY THEN                                            <<U.RAO>>14062000
         LISTFSERR;                                            <<U.RAO>>14064000
      END;                                                     <<U.RAO>>14066000
   CYDIRERR'(*, %120000, ERRNUM);                              <<U.RAO>>14068000
   END                                                         <<U.RAO>>14070000
ELSE                                                           <<U.RAO>>14072000
   BEGIN  <<WENT FINE, LET'S GET OUT OF HERE>>                 <<U.RAO>>14074000
   IF SLPARMS(1)<0 THEN LISTFSERR;                             <<04.KM>>14076000
   IF NOT LOGICAL(P'GOTENTRY) THEN                             <<03.KM>>14078000
      BEGIN                                                    <<03.KM>>14080000
      CIERR(ERRNUM := -NOXXXLISTED-TYPE);                      <<04790>>14082000
             <<XPARENT TO PROGRAMMATIC CALL FOR UPWARD COMPAT>><<03.KM>>14084000
      END;                                                     <<03.KM>>14086000
   IF FNUM<>2 THEN   <<NOT $STDLIST, CLOSE LIST FILE>>         <<04.KM>>14088000
      BEGIN                                                    <<U.RAO>>14090000
      FCLOSE(FNUM, 1, 0);                                      <<04.KM>>14092000
      IF CARRY THEN                                            <<U.RAO>>14094000
         LISTFSERR;                                            <<U.RAO>>14096000
      END;                                                     <<U.RAO>>14098000
   END                                                         <<U.RAO>>14100000
END;  <<CXLISTACCT/LISTUSER/LISTGROUP/LISTVSD>>                <<RV.PV>>14102000
$CONTROL SEGMENT=CIORGMAN                                      <<U.RAO>>14104000
                                                               <<00256>>14106000
                                                               <<00256>>14108000
PROCEDURE RELEASECOMRECS(LEVEL,BTARGET);                       <<00256>>14110000
VALUE LEVEL;                                                   <<00256>>14112000
INTEGER LEVEL;                                                 <<00256>>14114000
BYTE ARRAY BTARGET;                                            <<00256>>14116000
OPTION UNCALLABLE;                                             <<00256>>14118000
   BEGIN                                                       <<00256>>14120000
   COMMENT                                                     <<00256>>14122000
      THIS PROCEDURE RETURNS RECORDS IN COMMAND.PUB.SYS        <<00256>>14124000
      TO THE FREE LIST. IF LEVEL = USERLEVEL, THE RECORDS      <<00256>>14126000
      FOR THIS USER WILL BE RELEASED UNLESS HE IS TRYING       <<00256>>14128000
      TO PURGE HIMSELF. IF LEVEL = ACCTLEVEL, ALL ENTRIES      <<00256>>14130000
      FOR THIS ACCOUNT WILL BE RELEASED.                       <<00256>>14132000
      ;                                                        <<00256>>14134000
                                                               <<04792>>14136000
<< Note:  the caller is made CRITICAL while COMMAND.PUB.SYS  >><<04792>>14138000
<< is locked.  This prevents a BREAKJOB from hanging up      >><<04792>>14140000
<< users logging on or doing SETCATALOGs.                    >><<04792>>14142000
                                                               <<04792>>14144000
   EQUATE                                                      <<00256>>14146000
      COMRECSIZE   = 20,                                       <<00256>>14148000
      COMRECSIZEM1 = COMRECSIZE -1,                            <<00256>>14150000
      COMLINK      = 0,                                        <<00256>>14152000
      EOFFOUND     = 5;                                        <<00256>>14154000
   ARRAY REC(0:COMRECSIZEM1);                                  <<00256>>14156000
   BYTE ARRAY                                                  <<00256>>14158000
      BUSER(0:7),                                              <<00256>>14160000
      BACCT(0:7);                                              <<00256>>14162000
   LOGICAL                                                     <<00256>>14164000
      OLDCRIT,                                                 <<04792>>14166000
      UNLOCKOK,                                                <<04792>>14168000
      COMFILELOCKED,                                           <<00256>>14170000
      COMFILEOPEN,                                             <<00256>>14172000
      MOREENTRIES;                                             <<00256>>14174000
   INTEGER                                                     <<00256>>14176000
      COMFN,                                                   <<00256>>14178000
      ERRNO,                                                   <<00256>>14180000
      HEADREC := 0,                                            <<00884>>14182000
      ERR;                                                     <<00256>>14184000
                                                               <<00256>>14186000
   SUBROUTINE ERROR(ERRNO);                                    <<00256>>14188000
   VALUE ERRNO; INTEGER ERRNO;                                 <<00256>>14190000
      BEGIN                                                    <<00256>>14192000
      FCHECK(COMFN,ERR);                                       <<00256>>14194000
      GENMSG(FSERRORMSGSET,ERR);                               <<00256>>14196000
      GENMSG(CIERRMSGSET,ERRNO);                               <<00256>>14198000
      END;  << ERROR >>                                        <<00256>>14200000
                                                               <<00256>>14202000
   SUBROUTINE OPENCOMFILE;                                     <<00256>>14204000
      BEGIN                                                    <<00256>>14206000
      MOVE REC := "COMMAND.PUB.SYS ";                          <<00256>>14208000
      COMFN := FOPEN(REC,1,%346);  <<OLD,SHR,LOCK,EXEC>>       <<00256>>14210000
      IF <> THEN                                               <<00256>>14212000
         BEGIN                                                 <<00256>>14214000
         ERROR(COMOPENFAIL);                                   <<00256>>14216000
         GO OUTL;                                              <<00256>>14218000
         END                                                   <<00256>>14220000
      ELSE COMFILEOPEN:=TRUE;                                  <<00256>>14222000
      END;  << OPENCOMFILE >>                                  <<00256>>14224000
                                                               <<00256>>14226000
   SUBROUTINE CLOSECOMFILE;                                    <<00256>>14228000
      BEGIN                                                    <<00256>>14230000
      FCLOSE(COMFN,0,0);                                       <<00256>>14232000
      END;  << CLOSECOMFILE >>                                 <<00256>>14234000
                                                               <<00256>>14236000
   SUBROUTINE LOCKCOMFILE;                                     <<00256>>14238000
      BEGIN                                                    <<00256>>14240000
      OLDCRIT := SETCRITICAL;                                  <<04792>>14242000
      FLOCK(COMFN,TRUE);  <<UNCONDITIONAL>>                    <<00256>>14244000
      IF <> THEN                                               <<00256>>14246000
         BEGIN                                                 <<00256>>14248000
         ERROR(COMLOCKFAIL);                                   <<00256>>14250000
         GO OUTL;                                              <<00256>>14252000
         END                                                   <<00256>>14254000
      ELSE COMFILELOCKED := TRUE;                              <<00256>>14256000
      END;  << LOCKCOMFILE >>                                  <<00256>>14258000
                                                               <<00256>>14260000
   SUBROUTINE UNLOCKCOMFILE;                                   <<00256>>14262000
      BEGIN                                                    <<00256>>14264000
      FUNLOCK(COMFN);                                          <<00256>>14266000
      IF <> THEN UNLOCKOK := FALSE                             <<04792>>14268000
            ELSE UNLOCKOK := TRUE;                             <<04792>>14270000
      RESETCRITICAL( OLDCRIT );                                <<04792>>14272000
      IF NOT UNLOCKOK THEN                                     <<04792>>14274000
         BEGIN                                                 <<00256>>14276000
         ERROR(COMUNLOCKFAIL);                                 <<00256>>14278000
         GO OUT;                                               <<00256>>14280000
         END;                                                  <<00256>>14282000
      END;  << UNLOCKCOMFILE >>                                <<00256>>14284000
                                                               <<00256>>14286000
   SUBROUTINE RELEASERECS;                                     <<00256>>14288000
      BEGIN                                                    <<00256>>14290000
      << THIS SUBROUTINE RETURNS ALL RECORDS HELD BY A USER >> <<00256>>14292000
      << IN COMMAND.PUB.SYS TO THE FREE LIST. >>               <<00256>>14294000
                                                               <<00256>>14296000
      IF COMFN <> 0 THEN                                       <<00256>>14298000
         DO BEGIN                                              <<00256>>14300000
            FREADDIR(COMFN,REC,COMRECSIZE,DOUBLE(HEADREC));    <<00256>>14302000
            IF <> THEN ERROR (COMREADFAIL);                    <<00256>>14304000
            RELCOMREC(COMFN,HEADREC,ERRNO);                    <<00256>>14306000
            COMFILELOCKED := FALSE;  << RELCOMREC UNLOCKS IT >><<00256>>14308000
            IF ERRNO <> 0 THEN ERROR(ERRNO);                   <<00256>>14310000
            HEADREC := REC(COMLINK);                           <<00256>>14312000
            END                                                <<00256>>14314000
         UNTIL HEADREC = 0;                                    <<00256>>14316000
      END;  << RELEASERECS >>                                  <<00256>>14318000
                                                               <<00256>>14320000
   <<  RELEASECOMRECS  MAIN  BODY  >>                          <<00256>>14322000
                                                               <<00256>>14324000
   COMFILEOPEN:=COMFILELOCKED:=FALSE;                          <<00256>>14326000
                                                               <<00256>>14328000
   IF LEVEL = ACCOUNTLEVEL THEN                                <<00256>>14330000
      BEGIN                                                    <<00256>>14332000
      OPENCOMFILE;                                             <<00256>>14334000
      MOREENTRIES := TRUE;                                     <<00256>>14336000
      HEADREC := 0;                                            <<00256>>14338000
      DO BEGIN                                                 <<00256>>14340000
         LOCKCOMFILE;                                          <<00256>>14342000
         HEADREC := HEADREC + 1;  << MOVE RECORD PTR TO NEXT >><<00256>>14344000
         SEARCHCOMFILE(COMFN,,BTARGET,HEADREC,,ERRNO);         <<00884>>14346000
         IF ERRNO = 0 THEN                                     <<00256>>14348000
            RELEASERECS     << RETURN RECORDS TO FREE LIST >>  <<00256>>14350000
         ELSE                                                  <<00256>>14352000
         IF ERRNO = EOFFOUND THEN                              <<00256>>14354000
            MOREENTRIES :=FALSE                                <<00256>>14356000
         ELSE                                                  <<00256>>14358000
            ERROR(ERRNO);                                      <<00256>>14360000
         END                                                   <<00256>>14362000
      UNTIL NOT MOREENTRIES;                                   <<00256>>14364000
      END                                                      <<00256>>14366000
                                                               <<00256>>14368000
   ELSE                                                        <<00256>>14370000
   IF LEVEL = USERLEVEL THEN                                   <<00256>>14372000
      BEGIN                                                    <<00256>>14374000
      WHO(,,,BUSER,,BACCT);                                    <<00256>>14376000
      IF BUSER <> BTARGET,(8) THEN                             <<00256>>14378000
         BEGIN                                                 <<00256>>14380000
         OPENCOMFILE;                                          <<00256>>14382000
         LOCKCOMFILE;                                          <<00256>>14384000
         SEARCHCOMFILE(COMFN,BTARGET,BACCT,HEADREC,,ERRNO);    <<00884>>14386000
         IF ERRNO = 0 THEN                                     <<00256>>14388000
            RELEASERECS                                        <<00256>>14390000
         ELSE                                                  <<00256>>14392000
         IF ERRNO <> EOFFOUND THEN                             <<00256>>14394000
            ERROR(ERRNO);                                      <<00256>>14396000
         END;                                                  <<00256>>14398000
      END;                                                     <<00256>>14400000
                                                               <<00256>>14402000
   OUTL:   <<  EXIT FOR ERRORS  >>                             <<00256>>14404000
   IF COMFILELOCKED THEN UNLOCKCOMFILE;                        <<00256>>14406000
   OUT:    <<  EXIT FOR UNLOCK FAIL >>                         <<00256>>14408000
   IF COMFILEOPEN THEN CLOSECOMFILE;                           <<00256>>14410000
                                                               <<00256>>14412000
   END;  << RELEASECOMRECS >>                                  <<00256>>14414000
                                                               <<00256>>14416000
PROCEDURE CXPURGEACCT EXECUTORHEAD;                            <<00256>>14418000
OPTION PRIVILEGED,UNCALLABLE;                                  <<U.RAO>>14420000
BEGIN                                                          <<U.RAO>>14422000
ENTRY CXPURGEUSER,                                             <<U.RAO>>14424000
      CXPURGEGROUP,                                            <<RV.PV>>14426000
      CXPURGEVSET;                                             <<RV.PV>>14428000
                                                               <<U.RAO>>14430000
<<VARIABLES FOR THE PARSE>>                                    <<U.RAO>>14432000
DOUBLE DL := [8/";", 8/"=", 8/",", 8/%15] D;                   <<RV.PV>>14434000
DOUBLE ARRAY PARMS (0:3) = Q;                                  <<RV.PV>>14436000
BYTE SAVE'BYTE;                                                <<01034>>14438000
BYTE POINTER PARM;   <<POINTS TO START OF CURRENT PARAMETER>>  <<RV.PV>>14440000
INTEGER                                                        <<RV.PV>>14442000
    NEXTDELIM,  <<HOLDS DL INDEX OF NEXT DELIMITER>>           <<RV.PV>>14444000
    PARMLEN,    <<LENGTH OF CURRENT PARAMETER>>                <<RV.PV>>14446000
    PARMPTR = PARM;                                            <<RV.PV>>14448000
BYTE POINTER EXTRAPARM = PARMS+6;                              <<RV.PV>>14450000
INTEGER NUMPARMS;                                              <<U.RAO>>14452000
LOGICAL EMBEDEDSPECIAL;                                        <<U.RAO>>14454000
                                                               <<U.RAO>>14456000
<<VARIABLES FOR THE PURGE>>                                    <<U.RAO>>14458000
INTEGER TYPE := ACCOUNTLEVEL;  <<TYPE OF PURGE>>               <<U.RAO>>14460000
LOGICAL INTERACTIVE;  <<USED FOR VERIFICATION MESSAGE>>        <<U.RAO>>14462000
DOUBLE REPLY;                                                  <<U.RAO>>14464000
BYTE ARRAY BREPLY(*) = REPLY;                                  <<U.RAO>>14466000
INTEGER ARRAY TARGET(0:3);                                     <<U.RAO>>14468000
BYTE ARRAY BTARGET(*)=TARGET;                                  <<U.RAO>>14470000
INTEGER ARRAY ACCOUNT(0:3);                                    <<U.RAO>>14472000
BYTE ARRAY BACCOUNT(*) = ACCOUNT;                              <<U.RAO>>14474000
INTEGER ARRAY GROUP (0:3);                                     <<RV.PV>>14476000
BYTE ARRAY BGROUP (*) = GROUP;                                 <<RV.PV>>14478000
INTEGER ERRORBASE := FANAMEBASE;                               <<U.RAO>>14480000
<<DECLARATIONS FOR VS PROCESSING>>                             <<RV.PV>>14482000
DEFINE PURGESTATUS= S0.(6:2) #;                                <<07.KM>>14484000
INTEGER S0= S-0;                                               <<07.KM>>14486000
EQUATE                <<INDEXES IN THE DL ARRAY>>              <<RV.PV>>14488000
    CONDMOUNT = 3,                                             <<RV.PV>>14490000
    CONDDISMOUNT = 3,                                          <<RV.PV>>14492000
    SEMICOLON = 0,                                             <<RV.PV>>14494000
    EQUALS    = 1;                                             << I.A >>14496000
LOGICAL                                                        <<RV.PV>>14498000
    MOUNTED := FALSE,                                          <<RV.PV>>14500000
    REQTYPE := CONDMOUNT,                                      <<RV.PV>>14502000
    PVINFO := 0;                                               <<RV.PV>>14504000
DEFINE                                                         <<RV.PV>>14506000
       MVTABX   = PVINFO.(4:4) #;                              << I.A >>14508000
ARRAY                                                          <<RV.PV>>14510000
    VSREFNAME (0:(NAMESIZE*3)-1),                              <<RV.PV>>14512000
    VSVNAME (*) = VSREFNAME,                                   <<RV.PV>>14514000
    VSGNAME (*) = VSVNAME (NAMESIZE),                          <<RV.PV>>14516000
    VSANAME (*) = VSGNAME (NAMESIZE);                          <<RV.PV>>14518000
                                                               <<RV.PV>>14520000
SUBROUTINE NEXT;                                               <<RV.PV>>14522000
    <<THIS SUBROUTINE SIMPLY DECOMPOSES THE DATA RETURNED BY>> <<RV.PV>>14524000
    <<MYCOMMAND INTO INDIVIDUAL ITEMS FOR THE NEXT PARAMETER>> <<RV.PV>>14526000
    BEGIN                                                      <<RV.PV>>14528000
        TOS := PARMS (PARMNUM);                                <<RV.PV>>14530000
EMBEDEDSPECIAL := S0.(10:1);  <<EMBEDDED SPECIAL BIT FROM MYCOM<<U.RAO>>14532000
        NEXTDELIM := S0.(11:5);                                <<RV.PV>>14534000
        PARMLEN := TOS & LSR (8);                              <<RV.PV>>14536000
        PARMPTR := TOS;                                        <<RV.PV>>14538000
        PARMNUM := PARMNUM + 1;                                <<RV.PV>>14540000
    END;  <<SUBROUTINE NEXT>>                                  <<RV.PV>>14542000
                                                               <<U.RAO>>14544000
GOTO START;  <<PURGEACCOUNT STUFF ALREADY INITIALIZED>>        <<U.RAO>>14546000
                                                               <<U.RAO>>14548000
CXPURGEGROUP:                                                  <<U.RAO>>14550000
   TYPE := GROUPLEVEL;                                         <<U.RAO>>14552000
   ERRORBASE := FGNAMEBASE;                                    <<U.RAO>>14554000
   GO TO START;                                                <<U.RAO>>14556000
                                                               <<U.RAO>>14558000
CXPURGEUSER:                                                   <<U.RAO>>14560000
   TYPE := USERLEVEL;                                          <<U.RAO>>14562000
   ERRORBASE := USERNAMEBASE;                                  <<U.RAO>>14564000
   GO TO START;                                                <<RV.PV>>14566000
CXPURGEVSET:                                                   <<RV.PV>>14568000
   TYPE := VSDEFLEVEL;                                         <<RV.PV>>14570000
   ERRORBASE := VSDNAMEBASE;                                   <<RV.PV>>14572000
                                                               <<U.RAO>>14574000
START:                                                         <<U.RAO>>14576000
                                                               <<U.RAO>>14578000
MYCOMMAND (PARMSP,DL,4,NUMPARMS,PARMS);                        <<RV.PV>>14580000
PARMNUM := 0;                                                  <<RV.PV>>14582000
NEXT;                                                          <<RV.PV>>14584000
IF TYPE > USERLEVEL AND NUMPARMS > 1 OR NUMPARMS > 3 THEN      <<RV.PV>>14586000
   BEGIN                                                       <<U.RAO>>14588000
   PARMNUM := 2;                                               <<U.RAO>>14590000
   CIERR(ERRNUM := PURGEGROUP2MP-1+TYPE, EXTRAPARM);           <<U.RAO>>14592000
   END                                                         <<U.RAO>>14594000
ELSE IF NUMPARMS < 1 THEN <<REQUIRES AT LEAST ONE PARM>>       <<RV.PV>>14596000
   CIERR(ERRNUM := ERRORBASE+2, PARMSP(1))                     <<U.RAO>>14598000
ELSE IF INTEGER (PARMLEN) > 8 THEN                             <<RV.PV>>14600000
   CIERR(ERRNUM := ERRORBASE+3, PARM)                          <<RV.PV>>14602000
ELSE IF PARM <> ALPHA THEN  <<NAME STARTS WITH NONALPHA>>      <<RV.PV>>14604000
   CIERR (ERRNUM := ERRORBASE+1, PARM)                         <<RV.PV>>14606000
ELSE IF EMBEDEDSPECIAL THEN                                    <<U.RAO>>14608000
   CIERR(ERRNUM := ERRORBASE+5, PARM)                          <<U.RAO>>14610000
ELSE                                                           <<U.RAO>>14612000
   BEGIN                                                       <<U.RAO>>14614000
   TARGET := "  ";                                             <<U.RAO>>14616000
   MOVE TARGET(1) := TARGET,(3);                               <<U.RAO>>14618000
   ACCOUNT := "  ";                                            <<U.RAO>>14620000
   MOVE ACCOUNT(1) := ACCOUNT,(3);                             <<U.RAO>>14622000
   MOVE BTARGET := PARM, (INTEGER (PARMLEN));                  <<RV.PV>>14624000
   WHO (INTERACTIVE,,,,BGROUP,BACCOUNT);                       <<RV.PV>>14626000
   IF INTERACTIVE THEN                                         <<U.RAO>>14628000
      DO BEGIN  <<VERIFY PURGE>>                               <<U.RAO>>14630000
         REPLY := "NO  ";                                      <<U.RAO>>14632000
            SAVE'BYTE := PARM(INTEGER(PARMLEN));               <<01034>>14634000
         PARM(INTEGER(PARMLEN)) := 0; <<STOPPER FOR GENMSG>>   <<00832>>14636000
         GENMSG(CIGENERALMSGSET,PURGEGROUPQ-1+TYPE,            <<U.RAO>>14638000
            0,PARMPTR,,,,,,,,,%100000);                        <<RV.PV>>14640000
            PARM(INTEGER(PARMLEN)) := SAVE'BYTE;<<PUT IT BACK>><<01034>>14642000
         READ(REPLY,-4);                                       <<U.RAO>>14644000
         IF <> THEN << EOF OR IO ERROR ON $STDIN >>            <<00832>>14646000
            BEGIN   << ABORT PURGE >>                          <<00832>>14648000
            IF < THEN CIERR(ERRNUM := ERRSTDINIO);             <<04790>>14650000
            RETURN;                                            <<00832>>14652000
            END;                                               <<00832>>14654000
         MOVE BREPLY := BREPLY WHILE AS;                       <<U.RAO>>14656000
         IF REPLY = "NO  " THEN RETURN;                        <<U.RAO>>14658000
         IF REPLY <> "YES " THEN CIERR(-INVLDRESP);            <<U.RAO>>14660000
         END UNTIL REPLY = "YES ";                             <<U.RAO>>14662000
                                                               <<U.RAO>>14664000
   IF NUMPARMS > 1 THEN                                        <<RV.PV>>14666000
   BEGIN <<VS PARAMETER SEQUENCE>>                             <<RV.PV>>14668000
       IF NEXTDELIM <> SEMICOLON THEN                          <<RV.PV>>14670000
       BEGIN                                                   <<RV.PV>>14672000
           CIERR (ERRNUM := ORGCOMXPCTKEYWD,PARM (1));         <<RV.PV>>14674000
           RETURN;                                             <<RV.PV>>14676000
       END;                                                    <<RV.PV>>14678000
       NEXT;                                                   <<RV.PV>>14680000
       IF PARM = "VS" AND PARMLEN = 2 THEN ELSE                <<RV.PV>>14682000
       BEGIN                                                   <<RV.PV>>14684000
           CIERR (ERRNUM := ORGCOMXPCTKEYWD,PARM);             <<RV.PV>>14686000
           RETURN;                                             <<RV.PV>>14688000
       END;                                                    <<RV.PV>>14690000
       IF NEXTDELIM <> EQUALS THEN                             <<RV.PV>>14692000
       BEGIN                                                   <<RV.PV>>14694000
           CIERR (ERRNUM := ORGCOMXPCTEQUALS,PARM (1));        <<RV.PV>>14696000
           RETURN;                                             <<RV.PV>>14698000
       END;                                                    <<RV.PV>>14700000
       VSREFNAME := "  ";                                      <<RV.PV>>14702000
       MOVE VSREFNAME (1) := VSREFNAME, ((NAMESIZE*3)-1);      <<RV.PV>>14704000
       MOVE VSVNAME := "@   "; <<SET UP DEFAULT>>              <<RV.PV>>14706000
       NEXT;                                                   <<RV.PV>>14708000
       TOS := CHECK'N'MOVENAME (PARM,PARMLEN,VSREFNAME,4,3);   <<RV.PV>>14710000
       IF <> THEN                                              <<RV.PV>>14712000
       BEGIN                                                   <<RV.PV>>14714000
           CIERR (ERRNUM := TOS+VCSREFBASE,PARM);              <<RV.PV>>14716000
           RETURN;                                             <<RV.PV>>14718000
       END;                                                    <<RV.PV>>14720000
       CASE TOS OF                                             <<RV.PV>>14722000
       BEGIN                                                   <<RV.PV>>14724000
           WHO (,,,,VSGNAME,VSANAME); <<0 NAMES SUPPLIED>>     <<RV.PV>>14726000
           WHO (,,,,VSGNAME,VSANAME); <<1 NAME SUPPLIED>>      <<RV.PV>>14728000
           WHO (,,,,,VSANAME);        <<2 NAMES SUPPLIED>>     <<RV.PV>>14730000
           ;                          <<ALL NAMES SUPPLIED>>   <<RV.PV>>14732000
       END;                                                    <<RV.PV>>14734000
       MOUNT (VSVNAME,VSGNAME,VSANAME,REQTYPE,0<<GEN>>,PVINFO);<<RV.PV>>14736000
       IF < THEN                                               <<RV.PV>>14738000
       BEGIN                                                   <<RV.PV>>14740000
           CIERR (ERRNUM := ALTGRPVSNOTMNTD);                  <<RV.PV>>14742000
           RETURN;                                             <<RV.PV>>14744000
       END;                                                    <<RV.PV>>14746000
       MOUNTED := TRUE;                                        <<RV.PV>>14748000
   END;<<OF VS SEQUENCE>>                                      <<RV.PV>>14750000
   <<NOW DO PURGE>>                                            <<U.RAO>>14752000
   TOS := 0D;   <<RESULT SPACE FOR DIRECPURGE>>                <<U.RAO>>14754000
   TOS := 0;  TOS.(ENDLEVELF) := TYPE;  <<KIND OF PURGE>>      <<U.RAO>>14756000
   TOS := 0D;  <<NULL INDEX>>                                  <<38.PV>>14758000
   IF TYPE = ACCOUNTLEVEL THEN                                 <<U.RAO>>14760000
      BEGIN                                                    <<U.RAO>>14762000
      TOS := @TARGET;                                          <<U.RAO>>14764000
      TOS := 0;  <<GROUP NAME IS NULL>>                        <<U.RAO>>14766000
      TOS := 0;  <<THIRD NAME IS NULL>>                        <<RV.PV>>14768000
      END                                                      <<U.RAO>>14770000
   ELSE                                                        <<U.RAO>>14772000
    IF TYPE = GROUPLEVEL OR TYPE = USERLEVEL THEN              <<RV.PV>>14774000
      BEGIN  <<GET LOGON ACCOUNT TOO>>                         <<U.RAO>>14776000
      TOS := @ACCOUNT;                                         <<U.RAO>>14778000
      TOS := @TARGET; <<GROUP NAME>>                           <<RV.PV>>14780000
      TOS := 0;       <<THIRD NAME IS NULL>>                   <<RV.PV>>14782000
      END                                                      <<RV.PV>>14784000
    ELSE                                                       <<RV.PV>>14786000
    BEGIN <<TYPE IS VSDEFLEVEL OR VSLISTLEVEL>>                <<RV.PV>>14788000
        TOS := @ACCOUNT;                                       <<RV.PV>>14790000
        TOS := @GROUP;                                         <<RV.PV>>14792000
        TOS := @TARGET;                                        <<RV.PV>>14794000
    END;                                                       <<RV.PV>>14796000
   TOS := DIRECPURGE (*,*,*,*,*,MVTABX);                       <<RV.PV>>14798000
                                                               <<07.KM>>14800000
   PUSH(STATUS);                                               <<07.KM>>14802000
                                                               <<00256>>14804000
   IF MOUNTED THEN                                             <<RV.PV>>14806000
   BEGIN                                                       <<RV.PV>>14808000
       REQTYPE := CONDDISMOUNT;                                <<RV.PV>>14810000
       DISMOUNT (VSVNAME,VSGNAME,VSANAME,REQTYPE);             <<RV.PV>>14812000
       IF <> AND PURGESTATUS=CCE THEN                          <<07.KM>>14814000
       BEGIN                                                   <<RV.PV>>14816000
           CIERR (ERRNUM := 0<<DISMOUNT PROBLEM>>);            <<RV.PV>>14818000
           RETURN;                                             <<RV.PV>>14820000
       END;                                                    <<RV.PV>>14822000
   END;<<OF MOUNTED>>                                          <<RV.PV>>14824000
   SET(STATUS);                                                <<07.KM>>14826000
                                                               <<07.KM>>14828000
<< IF PURGE SUCEEDED THEN TAKE OUT COMMAND.PUB.SYS RECORDS >>  <<01096>>14830000
                                                               <<01096>>14832000
IF <> THEN CYDIRERR'(*,%120400,ERRNUM)                         <<01096>>14834000
ELSE                                                           <<01096>>14836000
   RELEASECOMRECS(TYPE,BTARGET);                               <<01096>>14838000
   END;                                                        <<U.RAO>>14840000
END;  <<CXPURGEACCT, CXPURGEGROUP, CXPURGEUSER>>               <<U.RAO>>14842000
$CONTROL SEGMENT=CISYSMGR                                      <<U.RAO>>14844000
INTEGER PROCEDURE RCREPORT (ELEMENT, LEVEL, PARMS, SIRINFO);            14846000
   VALUE LEVEL, PARMS, SIRINFO;                                << ... >>14848000
   ARRAY ELEMENT;                                              << ... >>14850000
   INTEGER LEVEL;                                                       14852000
   INTEGER PARMS;                                                       14854000
   DOUBLE SIRINFO;                                                      14856000
   OPTION PRIVILEGED, UNCALLABLE;                                       14858000
BEGIN                                                                   14860000
   DEFINE P'GOTENTRY= ARRQ0(PARMS+3) #;                        <<04.KM>>14862000
   ARRAY ARRS11(*)= S-11,                                     <<00.GEN>>14864000
         ARRS16(*)= S-16;                                     <<00.GEN>>14866000
   DOUBLE ARRAY      DELEMENT (*)      = ELEMENT;                       14868000
   DEFINE            FILENUM           = ARRQ0 (PARMS) #,               14870000
                     WRITESIZE         = ARRQP1 (PARMS) #,              14872000
                     COMPLCODE         = ARRQP2 (PARMS) #,              14874000
                     BINARYOUTPUT      = WRITESIZE = 17 #;              14876000
   INTEGER POINTER   INFO;                                              14878000
   INTEGER POINTER PPRESULT;                                  <<00.GEN>>14880000
   DOUBLE POINTER    DINFO2;                                            14882000
   INTEGER POINTER   BUF;                                               14884000
   BYTE POINTER      BBUF,                                              14886000
                     BBUF2,                                             14888000
                     TBBUF;                                             14890000
                                                              <<00.GEN>>14892000
                                                              <<00.GEN>>14894000
SUBROUTINE DEF'MOVEFROMDSEG;                                  <<00.GEN>>14896000
                                                              <<00.GEN>>14898000
                                                                        14900000
   IF REQUESTSERVICE THEN                                               14902000
      BEGIN                                                             14904000
      RCREPORT:=5;                                                      14906000
      RETURN;                                                           14908000
      END;                                                              14910000
   PARMS := PARMS -INTEGER(DELTAQ);                                     14912000
   TOS := LEVEL;                                                        14914000
   TOS := DELEMENT;                                                     14916000
   TOS := DELEMENT (1);                                                 14918000
   EXCHANGEDB(0);                                             <<00.GEN>>14920000
   ASSEMBLE(ADDS 12);                                         <<00.GEN>>14922000
   @INFO:=@ARRS16;                                            <<00.GEN>>14924000
   @DINFO2:=@ARRS11;                                          <<00.GEN>>14926000
   MOVEFROMDSEG(@DINFO2,DDSDST,                               <<00.GEN>>14928000
                @ELEMENT+(IF LEVEL=1 THEN 9 ELSE 14),12);     <<00.GEN>>14930000
   TOS := SIRINFO;                                             <<03.KM>>14932000
   IF <> THEN RELSIR (*, *) ELSE DDEL;                         <<03.KM>>14934000
                                                              <<00.GEN>>14936000
   @PPRESULT:=@ARRQ0(PARMS+RCR'PPRINX);                       <<00.GEN>>14938000
   IF LOGICAL(D'TYPE.(ALLFLAG)) THEN                          <<00.GEN>>14940000
   BEGIN                                                      <<00.GEN>>14942000
     CASE *LEVEL OF BEGIN                                     <<00.GEN>>14944000
       TOS:=-1;                        <<SHOULDN'T HAPPEN>>    <<03.KM>>14946000
       TOS:=DIRMATCH(G'GNAME,INFO(1));                        <<06.GEN>>14948000
       TOS:=DIRMATCH(G'ANAME,INFO(1));                        <<06.GEN>>14950000
       TOS:=-1;                        <<SHOULDN'T HAPPEN>>    <<03.KM>>14952000
       TOS:=-1;                        <<SHOULDN'T HAPPEN>>    <<03.KM>>14954000
     END;                                                     <<00.GEN>>14956000
     IF TOS<>0 THEN                                           <<00.GEN>>14958000
     BEGIN                                                    <<00.GEN>>14960000
       RCREPORT:=IF < THEN NEXTUNCLE ELSE NEXTBROTHER;         <<03.KM>>14962000
       EXCHANGEDB(DDSDST);                                    <<00.GEN>>14964000
       RETURN;                                                <<00.GEN>>14966000
     END;                                                     <<00.GEN>>14968000
   END;                                                       <<00.GEN>>14970000
                                                              <<00.GEN>>14972000
   IF BINARYOUTPUT THEN                                                 14974000
      TOS := @INFO                                                      14976000
   ELSE                                                                 14978000
      BEGIN                                                             14980000
      TOS := 44;                                                        14982000
      @TBBUF := (@BBUF2 := (@BBUF := (@BUF := @S0) &LSL(1)) +21) +45;   14984000
      ASSEMBLE (ADDS 0);                                                14986000
      BUF := "  ";                                                      14988000
      MOVE BUF (1) := BUF, (32);                                        14990000
      TOS := @BUF;                                                      14992000
      IF LEVEL = 1 THEN                                                 14994000
         BEGIN                                                          14996000
         BBUF (3) := "/";                                               14998000
         TOS := TOS +2;                                                 15000000
         END;                                                           15002000
      MOVE * := INFO (1), (4);                                          15004000
      X := 5;                                                           15006000
      DO BEGIN                                                          15008000
         TOS := @BBUF2 + (X *9);                                        15010000
         TOS := @TBBUF;                                                 15012000
         TOS := DASCII (DINFO2 (X), 10, BPS0);                          15014000
         IF S0 > 8 THEN                                                 15016000
            BEGIN                                                       15018000
            ASSEMBLE (DDEL);                                            15020000
            TOS := TOS -2;                                              15022000
            MOVE * := "**";                                             15024000
            END                                                         15026000
         ELSE                                                           15028000
            BEGIN                                                       15030000
            S2 := S2 - S0;                                              15032000
            MOVE * := *, (TOS);                                         15034000
            END;                                                        15036000
         X := X -1;                                                     15038000
         END                                                            15040000
      UNTIL <;                                                          15042000
      TOS := @BUF;                                                      15044000
      END;                                                              15046000
   IF LEVEL=GROUPLEVEL THEN P'GOTENTRY:=TRUE;                  <<03.KM>>15048000
   TOS := FILENUM;                                                      15050000
                                                               <<00506>>15052000
   ASSEMBLE (XCH);                                                      15054000
   FWRITE (*, *, WRITESIZE, 0);                                         15056000
   IF <> THEN                                                  <<02365>>15058000
      BEGIN                                                             15060000
      COMPLCODE := 1;                                                   15062000
      RCREPORT := 4;                                                    15064000
      END;                                                              15066000
   EXCHANGEDB (DDSDST);                                                 15068000
   END    <<RCREPORT>>;                                                 15070000
INTEGER PROCEDURE CHECKHOMEACCT(PPRESULT);                     <<U.RAO>>15072000
INTEGER ARRAY PPRESULT;                                        <<U.RAO>>15074000
OPTION PRIVILEGED, UNCALLABLE;                                 <<U.RAO>>15076000
BEGIN                                                          <<U.RAO>>15078000
<<THIS PROCEDURE CHECKS THE PARAMETERS OF PPRESULT TO VERIFY>> <<U.RAO>>15080000
<<THAT THE USER HAS SPECIFIED HIS LOGON ACCOUNT.            >> <<U.RAO>>15082000
<<IT IS USED TO VERIFY THAT AN ACCOUNT MANAGER IS NOT       >> <<U.RAO>>15084000
<<ATTEMPTING TO ACCESS AN ACCOUNT OUTSIDE HIS OWN, A        >> <<U.RAO>>15086000
<<CAPABILITY RESTRICTED TO SYSTEM MANAGERS.                 >> <<U.RAO>>15088000
<<THE PROCEDURE RETURNS:                                    >> <<U.RAO>>15090000
<<     0 => NO ERRORS                                       >> <<U.RAO>>15092000
<<     3 => USER SPECIFIED "@" ACCOUNTS                     >> <<U.RAO>>15094000
<<     4 => USER SPECIFIED NON-LOGON ACCOUNT                >> <<U.RAO>>15096000
                                                               <<U.RAO>>15098000
BYTE ARRAY LOACCT(0:7);                                        <<U.RAO>>15100000
BYTE ARRAY BPPRESULT(*)=PPRESULT;                             <<00.GEN>>15102000
                                                              <<00.GEN>>15104000
                                                              <<00.GEN>>15106000
CHECKHOMEACCT := 0;                                            <<U.RAO>>15108000
IF D'TYPE.(ENDLEVELFX) = ALLACCTS THEN                        <<00.GEN>>15110000
   CHECKHOMEACCT := 3                                          <<U.RAO>>15112000
ELSE IF D'ANAME <> "  " THEN  <<NON-NULL ACCOUNT NAME>>       <<00.GEN>>15114000
   BEGIN                                                       <<U.RAO>>15116000
   WHO(,,,,,LOACCT);                                           <<U.RAO>>15118000
   IF D'BANAME<>LOACCT,(8) THEN CHECKHOMEACCT:=4;             <<00.GEN>>15120000
   END                                                         <<U.RAO>>15122000
END;                                                           <<U.RAO>>15124000
INTEGER PROCEDURE CHECKHOMEGROUP(PPRESULT);                    <<U.RAO>>15126000
INTEGER ARRAY PPRESULT;                                        <<U.RAO>>15128000
OPTION PRIVILEGED, UNCALLABLE;                                 <<U.RAO>>15130000
BEGIN                                                          <<U.RAO>>15132000
<<THIS PROCEDURE CHECKS THE PARAMETERS OF PPRESULT TO >>       <<U.RAO>>15134000
<<VERIFY THAT THE USER HAS SPECIFIED HIS LOGON GROUP  >>       <<U.RAO>>15136000
<<THE PROCEDURE RETURNS:                              >>       <<U.RAO>>15138000
<<         0 => NO ERRORS DETECTED                    >>       <<U.RAO>>15140000
<<         1 => USER SPECIFIED "@" GROUPS             >>       <<U.RAO>>15142000
<<         2 => USER SPECIFIED NON-LOGON GROUP        >>       <<U.RAO>>15144000
<<         3 => USER SPECIFIED "@" ACCOUNTS           >>       <<U.RAO>>15146000
<<         4 => USER SPECIFIED NON-LOGON ACCOUNT      >>       <<U.RAO>>15148000
BYTE ARRAY LOGRP(0:7);                                         <<U.RAO>>15150000
BYTE ARRAY BPPRESULT(*)=PPRESULT;                             <<00.GEN>>15152000
                                                              <<00.GEN>>15154000
                                                              <<00.GEN>>15156000
CHECKHOMEGROUP := 0;                                           <<U.RAO>>15158000
IF D'TYPE.(ENDLEVELFX) = ALLGROUPS THEN                       <<00.GEN>>15160000
   CHECKHOMEGROUP := 1                                         <<U.RAO>>15162000
ELSE IF D'GNAME <> "  " THEN                                  <<00.GEN>>15164000
   BEGIN                                                       <<U.RAO>>15166000
   WHO(,,,,LOGRP);                                             <<U.RAO>>15168000
   IF D'BGNAME<>LOGRP,(8) THEN                                <<00.GEN>>15170000
      CHECKHOMEGROUP := 2                                      <<U.RAO>>15172000
   ELSE                                                        <<U.RAO>>15174000
      CHECKHOMEGROUP := CHECKHOMEACCT(PPRESULT);               <<U.RAO>>15176000
   END                                                         <<U.RAO>>15178000
END;                                                           <<U.RAO>>15180000
PROCEDURE CXREPORT EXECUTORHEAD;                               <<U.RAO>>15182000
OPTION PRIVILEGED,UNCALLABLE;                                  <<U.RAO>>15184000
BEGIN                                                          <<U.RAO>>15186000
BYTE POINTER DELIM;                                           <<00.GEN>>15188000
DOUBLE DL := [8/";", 8/"=", 8/",", 8/%15] D;                   <<00086>>15190000
INTEGER NUMPARMS;  <<RETURNED BY MYCOMMAND>>                   <<U.RAO>>15192000
INTEGER ARRAY RECIPPARMS(0:RCR'PARMLEN-1);                    <<00.GEN>>15194000
INTEGER ARRAY PPRESULT(*)=RECIPPARMS(RCR'PPRINX);             <<00.GEN>>15196000
DEFINE FNUM =      RECIPPARMS #,                              <<00.GEN>>15198000
       WRITESIZE = RECIPPARMS(1) #,                           <<00.GEN>>15200000
       COMPLCODE = RECIPPARMS(2) #,                            <<03.KM>>15202000
       P'GOTENTRY= RECIPPARMS(3) #;                            <<03.KM>>15204000
DOUBLE ARRAY PARMS (0:4) = Q;                                  <<00129>>15206000
BYTE POINTER PARM;   <<POINTS TO START OF CURRENT PARAMETER>>  <<00086>>15208000
DEFINE REPORTSTATUS= S0.(6:2) #;                               <<00086>>15210000
INTEGER S0= S-0;                                               <<00086>>15212000
INTEGER                                                        <<00086>>15214000
    NEXTDELIM,  <<HOLDS DL INDEX OF NEXT DELIMITER>>           <<00086>>15216000
    PARMLEN,    <<LENGTH OF CURRENT PARAMETER>>                <<00086>>15218000
    PARMPTR = PARM;                                            <<00086>>15220000
BYTE POINTER LEAF = PARM;                                      <<00129>>15222000
INTEGER LEAFNAMELEN = PARMLEN;                                 <<00129>>15224000
BYTE POINTER LISTFILE := 0;                                    <<00129>>15226000
INTEGER LISTFILELEN = PARMLEN;                                 <<00129>>15228000
BYTE POINTER EXTRAPARM = PARMS+8;                              <<00129>>15230000
LOGICAL FOPTIONS;                                              <<U.RAO>>15232000
INTEGER CLOSEOPTION := 0;                                     <<01067>> 15234000
EQUATE NEWFILE        = 0,                                     <<01067>>15236000
       TEMP'DOMAIN    = 2,                                     <<01067>>15238000
       CUR'DOMAIN     = 0;                                     <<01067>>15240000
ARRAY DATEBUF(0:13);   <<FOR TIME STAMP, IF REQUIRED>>         <<02.RO>>15242000
INTEGER DEV := 0;  <<DEVICE TYPE OF LISTFILE>>                 <<03.RO>>15244000
<<DECLARATIONS FOR VS PROCESSING>>                             <<00086>>15246000
EQUATE                <<INDEXES IN THE DL ARRAY>>              <<00086>>15248000
    CONDMOUNT = 3,                                             <<00086>>15250000
    CONDDISMOUNT = 3,                                          <<00086>>15252000
    SEMICOLON = 0,                                             <<00086>>15254000
    EQUALS    = 1,                                             <<00086>>15256000
    COMMA     = 2;                                             << I.A >>15258000
LOGICAL                                                        <<00086>>15260000
    MOUNTED := FALSE,                                          <<00086>>15262000
    REQTYPE := CONDMOUNT,                                      <<00086>>15264000
    PVINFO := 0;                                               <<00086>>15266000
DEFINE                                                         <<00086>>15268000
       MVTABX   = PVINFO.(4:4) #;                              << I.A >>15270000
ARRAY                                                          <<00086>>15272000
    VSREFNAME (0:(NAMESIZE*3)-1),                              <<00086>>15274000
    VSVNAME (*) = VSREFNAME,                                   <<00086>>15276000
    VSGNAME (*) = VSVNAME (NAMESIZE),                          <<00086>>15278000
    VSANAME (*) = VSGNAME (NAMESIZE);                          <<00086>>15280000
                                                               <<00086>>15282000
SUBROUTINE NEXT;                                               <<00086>>15284000
    <<THIS SUBROUTINE SIMPLY DECOMPOSES THE DATA RETURNED BY>> <<00086>>15286000
    <<MYCOMMAND INTO INDIVIDUAL ITEMS FOR THE NEXT PARAMETER>> <<00086>>15288000
    BEGIN                                                      <<00086>>15290000
        TOS := PARMS (PARMNUM);                                <<00086>>15292000
        NEXTDELIM := S0.(11:5);                                <<00086>>15294000
        PARMLEN := TOS & LSR (8);                              <<00086>>15296000
        PARMPTR := TOS;                                        <<00086>>15298000
        PARMNUM := PARMNUM + 1;                                <<00086>>15300000
    END;  <<SUBROUTINE NEXT>>                                  <<00086>>15302000
                                                               <<00086>>15304000
                                                               <<U.RAO>>15306000
SUBROUTINE LISTFSERR;                                          <<U.RAO>>15308000
<<MANAGES LIST FILE I/O ERROR>>                                <<U.RAO>>15310000
BEGIN                                                          <<U.RAO>>15312000
FERROR'(FNUM,PARMNUM);                                         <<U.RAO>>15314000
CIERR(ERRNUM := LISTFFSERR,,%10000,PARMNUM);                   <<U.RAO>>15316000
ASSEMBLE(EXIT 3);                                              <<U.RAO>>15318000
END;                                                           <<U.RAO>>15320000
                                                               <<U.RAO>>15322000
MYCOMMAND (PARMSP,DL,4,NUMPARMS,PARMS);                        <<00129>>15324000
PARMNUM := 0;                                                  <<00129>>15326000
NEXT;                                                          <<00129>>15328000
IF NOT PRODUCEPARMS(1,PARMSP,PPRESULT,DELIM,ERRNUM)            <<01.KM>>15330000
   THEN RETURN;                                               <<00.GEN>>15332000
IF NUMPARMS>0 AND @DELIM<@LEAF(LEAFNAMELEN) THEN               <<01.KM>>15334000
   BEGIN                                                       <<01.KM>>15336000
   TOS := ERRNUM := REPORTEXTRANLEAF;                          <<01.KM>>15338000
   TOS := @DELIM;                                              <<01.KM>>15340000
   CIERR(*,*);                                                 <<01.KM>>15342000
   RETURN;                                                     <<01.KM>>15344000
   END;                                                        <<01.KM>>15346000
                                                               <<01.KM>>15348000
IF NUMPARMS=0 OR LEAFNAMELEN=0 THEN                            <<01.KM>>15350000
   BEGIN                                                       <<01.KM>>15352000
   COMMENT:                                                    <<01.KM>>15354000
     NO GROUP DESIGNATOR:  "PRODUCEPARMS" SET DEFAULT TO       <<01.KM>>15356000
     "@.LAN".  THIS IS FINE FOR ACCT MGR.  FOR STANDARD        <<01.KM>>15358000
     USER WE WANT "LGN.LAN".  FOR SM WE WANT "@.@";            <<01.KM>>15360000
                                                               <<01.KM>>15362000
   SETXPXGLOB;                                                 <<01.KM>>15364000
   IF ARRDB2(X).(0:2)<1 THEN            <<STD USER>>           <<01.KM>>15366000
      BEGIN                                                    <<01.KM>>15368000
      GETDIRINFO(0,2,PPRESULT);                                <<01.KM>>15370000
      D'TYPE.(ENDLEVELFX):=GROUPLEVEL;                         <<01.KM>>15372000
      END                                                      <<01.KM>>15374000
   ELSE IF > THEN                       <<SYS MGR>>            <<01.KM>>15376000
      BEGIN                                                    <<01.KM>>15378000
      MOVE D'ANAME:="@       ";                                <<01.KM>>15380000
      MOVE G'ANAME:="@       ";                                <<01.KM>>15382000
      D'TYPE.(ENDLEVELFX):=ALLACCTS;                           <<01.KM>>15384000
      END;                                                     <<01.KM>>15386000
   END                                                         <<01.KM>>15388000
ELSE                                                           <<01.KM>>15390000
   BEGIN                               <<CHECK CAPS>>          <<01.KM>>15392000
   SETXPXGLOB;                                                 <<U.RAO>>15394000
   IF ARRDB2(X).(0:2) < 1 THEN  <<PLAIN USER>>                 <<U.RAO>>15396000
      BEGIN                                                    <<U.RAO>>15398000
      X:=CHECKHOMEGROUP(PPRESULT)-1;                           <<01.KM>>15400000
      IF >= THEN                                               <<U.RAO>>15402000
         BEGIN  <<FOUND ERROR CONDITION>>                      <<U.RAO>>15404000
         CASE X OF                                             <<01.KM>>15406000
            BEGIN                                              <<U.RAO>>15408000
            TOS := REPORTNOTAMAT;                              <<U.RAO>>15410000
            TOS := REPORTNOTAMLOGON;                           <<U.RAO>>15412000
            TOS := REPORTNOTSMAT;                              <<U.RAO>>15414000
            TOS := REPORTNOTSMLOGON;                           <<U.RAO>>15416000
            END;                                               <<U.RAO>>15418000
         ERRNUM := TOS;                                        <<U.RAO>>15420000
         CIERR(ERRNUM, LEAF);                                  <<U.RAO>>15422000
         RETURN                                                <<U.RAO>>15424000
         END;                                                  <<U.RAO>>15426000
      END                                                      <<U.RAO>>15428000
   ELSE IF = AND CHECKHOMEACCT(PPRESULT)>=3 THEN               <<01.KM>>15430000
      BEGIN                            <<WRONG ACCT FOR AM>>   <<01.KM>>15432000
      IF = THEN ERRNUM := REPORTNOTSMAT                        <<U.RAO>>15434000
           ELSE ERRNUM := REPORTNOTSMLOGON;                    <<U.RAO>>15436000
      CIERR(ERRNUM, LEAF);                                     <<U.RAO>>15438000
      RETURN                                                   <<U.RAO>>15440000
      END;                                                     <<U.RAO>>15442000
   END;  <<VALIDATION OF LEAF NAME ACCESS>>                    <<U.RAO>>15444000
IF NUMPARMS > 1 THEN                                           <<00129>>15446000
BEGIN                                                          <<00129>>15448000
    IF NEXTDELIM = COMMA THEN                                  <<00129>>15450000
    BEGIN                                                      <<00129>>15452000
        NEXT;                                                  <<00129>>15454000
        IF LISTFILELEN = 0 THEN                                <<00129>>15456000
        BEGIN  <<MISSING LIST FILE NAME>>                      <<00129>>15458000
            PARMNUM := 2;                                      <<00129>>15460000
            CIERR(ERRNUM := REPORTEXPECTLIST, LISTFILE);       <<00129>>15462000
            RETURN;                                            <<00129>>15464000
        END;                                                   <<00129>>15466000
        @LISTFILE := @PARM;                                    <<00129>>15468000
    END ELSE NUMPARMS := 3; <<FAKE>>                           <<00129>>15470000
    IF NUMPARMS > 2 THEN                                       <<00129>>15472000
    BEGIN <<VS PARAMETER SEQUENCE>>                            <<00129>>15474000
        IF NEXTDELIM <> SEMICOLON THEN                         <<00129>>15476000
        BEGIN                                                  <<00129>>15478000
            CIERR (ERRNUM := ORGCOMXPCTKEYWD,PARM (1));        <<00129>>15480000
            RETURN;                                            <<00129>>15482000
        END;                                                   <<00129>>15484000
        NEXT;                                                  <<00129>>15486000
        IF PARM = "VS" AND PARMLEN = 2 THEN ELSE               <<00129>>15488000
        BEGIN                                                  <<00129>>15490000
            CIERR (ERRNUM := ORGCOMXPCTKEYWD,PARM);            <<00129>>15492000
            RETURN;                                            <<00129>>15494000
        END;                                                   <<00129>>15496000
        IF NEXTDELIM <> EQUALS THEN                            <<00129>>15498000
        BEGIN                                                  <<00129>>15500000
            CIERR (ERRNUM := ORGCOMXPCTEQUALS,PARM (1));       <<00129>>15502000
            RETURN;                                            <<00129>>15504000
        END;                                                   <<00129>>15506000
        VSREFNAME := "  ";                                     <<00129>>15508000
        MOVE VSREFNAME (1) := VSREFNAME, ((NAMESIZE*3)-1);     <<00129>>15510000
        MOVE VSVNAME := "@   "; <<SET UP DEFAULT>>             <<00129>>15512000
        NEXT;                                                  <<00129>>15514000
        TOS := CHECK'N'MOVENAME (PARM,PARMLEN,VSREFNAME,4,3);  <<00129>>15516000
        IF <> THEN                                             <<00129>>15518000
        BEGIN                                                  <<00129>>15520000
            CIERR (ERRNUM := TOS+VCSREFBASE,PARM);             <<00129>>15522000
            RETURN;                                            <<00129>>15524000
        END;                                                   <<00129>>15526000
        CASE TOS OF                                            <<00129>>15528000
        BEGIN                                                  <<00129>>15530000
            WHO (,,,,VSGNAME,VSANAME);<<0 NAMES SUPPLIED>>     <<00129>>15532000
            WHO (,,,,VSGNAME,VSANAME);<<1 NAME SUPPLIED>>      <<00129>>15534000
            WHO (,,,,,VSANAME);       <<2 NAMES SUPPLIED>>     <<00129>>15536000
            ;                         <<ALL NAMES SUPPLIED>    <<00129>>15538000
        END;                                                   <<00129>>15540000
        MOUNT (VSVNAME,VSGNAME,VSANAME,REQTYPE,                <<00129>>15542000
               -1<<GEN>>,PVINFO);                              <<00129>>15544000
        IF < THEN                                              <<00129>>15546000
        BEGIN                                                  <<00129>>15548000
            CIERR (ERRNUM := ALTGRPVSNOTMNTD);                 <<00129>>15550000
            RETURN;                                            <<00129>>15552000
        END;                                                   <<00129>>15554000
        MOUNTED := TRUE;                                       <<00129>>15556000
    END;<<OF VS SEQUENCE>>                                     <<00129>>15558000
    IF NUMPARMS > 4 THEN                                       <<00129>>15560000
    BEGIN  <<TOO MANY PARAMETERS>>                             <<00129>>15562000
        PARMNUM := 5;                                          <<00129>>15564000
        CIERR (ERRNUM := REPORT2MP, EXTRAPARM);                <<00129>>15566000
        RETURN;                                                <<00129>>15568000
    END;                                                       <<00129>>15570000
END;                                                           <<00129>>15572000
                                                               <<01.KM>>15574000
D'TYPE.(HITFLAG):=1;                                           <<01.KM>>15576000
D'TYPE.(STARTLEVELF):=0;                                       <<01.KM>>15578000
                                                               <<U.RAO>>15580000
<<NOW OPEN LIST FILE, GET RELEVANT INFO, PUT OUT HEADER>>      <<U.RAO>>15582000
IF @LISTFILE <> 0 THEN  <<LISTFILE PRESENT>>                   <<00129>>15584000
   BEGIN  <<MUST OPEN A REAL FILE>>                            <<U.RAO>>15586000
   FNUM := FOPEN(LISTFILE,%2504,%101);                         <<01067>>15588000
   IF CARRY THEN LISTFSERR;  <<OPEN FAILED>>                   <<U.RAO>>15590000
   END                                                         <<U.RAO>>15592000
ELSE                                                           <<U.RAO>>15594000
   FNUM := 2;                                                  <<U.RAO>>15596000
FGETINFO(FNUM,,FOPTIONS,,,DEV);                                <<03.RO>>15598000
IF CARRY THEN LISTFSERR;                                       <<U.RAO>>15600000
CLOSEOPTION.(13:3) := IF FOPTIONS.(14:2) = NEWFILE THEN        <<01067>>15602000
                      TEMP'DOMAIN ELSE CUR'DOMAIN;             <<01067>>15604000
IF FOPTIONS.(13:1) THEN  <<ASCII FILE>>                        <<U.RAO>>15606000
   BEGIN                                                       <<U.RAO>>15608000
   <<IF NOT INTERACTIVE OR IF TO LIST FILE THEN TIME STAMP>>   <<02.RO>>15610000
   INTERACTIVETEST;                                            <<02.RO>>15612000
   IF NOT TOS  <<NOT INTERACTIVE>> AND @LISTFILE = 0 OR        <<00129>>15614000
      @LISTFILE <> 0 AND DEV.(8:8) >= 8 <<NOT DISC>> THEN      <<00129>>15616000
      BEGIN                                                    <<02.RO>>15618000
      DATE'LINE(DATEBUF);                                      <<02.RO>>15620000
      FWRITE(FNUM, DATEBUF, -27, %60);                         <<02.RO>>15622000
      END;                                                     <<02.RO>>15624000
   GENMSG(CIGENERALMSGSET,REPORTLINE1,,,,,,,-FNUM);            <<U.RAO>>15626000
   GENMSG(CIGENERALMSGSET,REPORTLINE2,,,,,,,-FNUM);            <<U.RAO>>15628000
   WRITESIZE := 33;                                            <<U.RAO>>15630000
   END                                                         <<U.RAO>>15632000
ELSE WRITESIZE := 17;  <<BINARY>>                              <<U.RAO>>15634000
COMPLCODE := 0;                                                <<U.RAO>>15636000
P'GOTENTRY:=FALSE;                                             <<03.KM>>15638000
TOS := DIRECSCAN(D'TYPE,0D,D'ANAME,D'GNAME,ARRDB0,            <<00.GEN>>15640000
                 RCREPORT,RECIPPARMS,MVTABX);                  <<00086>>15642000
PUSH (STATUS);                                                 <<00086>>15644000
IF MOUNTED THEN                                                <<00086>>15646000
BEGIN                                                          <<00086>>15648000
    REQTYPE := CONDDISMOUNT;                                   <<00086>>15650000
    DISMOUNT (VSVNAME,VSGNAME,VSANAME,REQTYPE);                <<00086>>15652000
    IF <> AND REPORTSTATUS = CCE THEN                          <<00086>>15654000
    BEGIN                                                      <<00086>>15656000
        CIERR (ERRNUM := 0<<DISMOUNT PROBLEM>>);               <<00086>>15658000
        RETURN;                                                <<00086>>15660000
    END;                                                       <<00086>>15662000
END;<<OF MOUNTED>>                                             <<00086>>15664000
SET (STATUS);                                                  <<00086>>15666000
IF <> THEN                                                     <<U.RAO>>15668000
   BEGIN                                                       <<U.RAO>>15670000
   IF FNUM <> 2 THEN                                           <<U.RAO>>15672000
      FCLOSE(FNUM, 0, 0);                                      <<U.RAO>>15674000
   CYDIRERR'(*,%120000,ERRNUM);                                <<U.RAO>>15676000
   RETURN;                                                     <<U.RAO>>15678000
   END;                                                        <<U.RAO>>15680000
IF COMPLCODE <> 0 THEN LISTFSERR;                              <<U.RAO>>15682000
IF NOT LOGICAL(P'GOTENTRY) THEN CIERR(ERRNUM := -NOGRPSLISTED);<<04790>>15684000
             <<XPARENT TO PROGRAMMATIC CALL FOR UPWARD COMPAT>><<04.KM>>15686000
IF FNUM <> 2 THEN                                              <<U.RAO>>15688000
   BEGIN  <<CLOSE REAL FILE>>                                  <<U.RAO>>15690000
   FCLOSE(FNUM,CLOSEOPTION,0);                                 <<01067>>15692000
   IF CARRY THEN LISTFSERR;                                    <<U.RAO>>15694000
   END;                                                        <<U.RAO>>15696000
PARMNUM := 0;                                                  <<U.RAO>>15698000
END;  <<CXREPORT>>                                             <<U.RAO>>15700000
$CONTROL SEGMENT=CIALTORG                                      <<U.RAO>>15702000
INTEGER PROCEDURE RCRESETACCT (ELEMENT,LEVEL,PARMS,SIRINFO);            15704000
   VALUE LEVEL,PARMS,SIRINFO;                                           15706000
   INTEGER LEVEL, PARMS;                                                15708000
   ARRAY ELEMENT;                                                       15710000
   DOUBLE SIRINFO;                                                      15712000
   OPTION UNCALLABLE;                                                   15714000
BEGIN                                                                   15716000
   LOGICAL ARRAY     LARRQ0(*)         =Q-0;                            15718000
   DEFINE            FLAGS             = LARRQ0 (PARMS) #;              15720000
   LOGICAL           DADIRTY           =DB+145;                <<38.PV>>15722000
   PARMS := PARMS -INTEGER(DELTAQ);                                     15724000
   TOS := @ELEMENT + (IF LEVEL =2 THEN 18 ELSE 13);                     15726000
   IF FLAGS & LSR(1) THEN                                               15728000
      DPS0 := 0D;                                                       15730000
   TOS:=TOS+4;                                                          15732000
   IF FLAGS THEN                                                        15734000
      DPS0 := 0D;                                                       15736000
   DADIRTY := TRUE;                                                     15738000
   RCRESETACCT := 1;                                                    15740000
   END  << RCRESETACCT>>;                                               15742000
PROCEDURE CXRESETACCT EXECUTORHEAD;                                     15744000
   OPTION PRIVILEGED, UNCALLABLE;                                       15746000
BEGIN                                                                   15748000
   <<TYPE WORD: FIELD LENGTHS>>                                <<01.PV>>15750000
   EQUATE                                                      <<01.PV>>15752000
      HITX   = 1,                                              <<01.PV>>15754000
      TOX    = 3,                                              <<01.PV>>15756000
      ALLX   = 1,                                              <<01.PV>>15758000
      ENDX   = 3,                                              <<01.PV>>15760000
      STARTX = 3;                                              <<01.PV>>15762000
   INTEGER           TYPE              := [HITX/TRUE,          <<01.PV>>15764000
                                           TOX/GROUPLEVEL,     <<01.PV>>15766000
                                           ALLX/TRUE,          <<01.PV>>15768000
                                           ENDX/ACCOUNTLEVEL,  <<01.PV>>15770000
                                           STARTX/FALSE];      <<01.PV>>15772000
LOGICAL FLAGS := 3;  <<INIT TO BOTH CPU AND CONNECT>>          <<U.RAO>>15774000
DOUBLE ARRAY PARMS(0:2) = Q;                                   <<U.RAO>>15776000
BYTE POINTER ACCT = PARMS;                                     <<U.RAO>>15778000
BYTE ACCTNAMELEN = PARMS+1;                                    <<U.RAO>>15780000
BYTE POINTER CPUCONNECT = PARMS+2;                             <<U.RAO>>15782000
BYTE CPUCONNECTLEN = PARMS+3;                                  <<U.RAO>>15784000
BYTE POINTER EXTRAPARM = PARMS+4;                              <<U.RAO>>15786000
LOGICAL DL := COMMACR;                                         <<U.RAO>>15788000
INTEGER NUMPARMS;                                              <<U.RAO>>15790000
ARRAY LACCT(0:4);                                              <<U.RAO>>15792000
                                                               <<U.RAO>>15794000
LACCT := "  ";                                                 <<U.RAO>>15796000
MOVE LACCT(1) := LACCT,(4);                                    <<U.RAO>>15798000
MYCOMMAND(PARMSP,DL,3,NUMPARMS,PARMS);                         <<U.RAO>>15800000
IF NUMPARMS > 0 THEN                                           <<U.RAO>>15802000
   BEGIN                                                       <<U.RAO>>15804000
   IF INTEGER(ACCTNAMELEN) > 0 THEN                            <<U.RAO>>15806000
      BEGIN   <<ACCOUNT NAME PRESENT>>                         <<U.RAO>>15808000
      IF ACCT <> "@" THEN                                      <<U.RAO>>15810000
         BEGIN  <<SPECIFIC ACCOUNT DESIRED>>                   <<U.RAO>>15812000
         TYPE.(ENDLEVELF) := GROUPLEVEL;                       <<U.RAO>>15814000
         IF ACCTNAMELEN > 8 THEN                               <<U.RAO>>15816000
            BEGIN                                              <<U.RAO>>15818000
            PARMNUM := 1;                                      <<U.RAO>>15820000
            CIERR(ERRNUM := ACCTNAMETOOLONG, ACCT);            <<U.RAO>>15822000
            RETURN                                             <<U.RAO>>15824000
            END;                                               <<U.RAO>>15826000
         IF ACCT <> ALPHA THEN                                 <<U.RAO>>15828000
            BEGIN                                              <<U.RAO>>15830000
            PARMNUM := 1;                                      <<U.RAO>>15832000
            CIERR(ERRNUM := ACCTEXPECTALPHA, ACCT);            <<U.RAO>>15834000
            RETURN;                                            <<U.RAO>>15836000
            END;                                               <<U.RAO>>15838000
         TOS := @LACCT&LSL(1);                                 <<U.RAO>>15840000
         MOVE * := ACCT,(INTEGER(ACCTNAMELEN));                <<U.RAO>>15842000
         END                                                   <<U.RAO>>15844000
      ELSE   <<ACCT IS "@">>                                   <<U.RAO>>15846000
         IF ACCTNAMELEN > 1 THEN                               <<U.RAO>>15848000
            BEGIN                                              <<U.RAO>>15850000
            PARMNUM := 1;                                      <<U.RAO>>15852000
            CIERR(ERRNUM := RESACCTJUSTAT, ACCT(1));           <<U.RAO>>15854000
            RETURN                                             <<U.RAO>>15856000
            END;                                               <<U.RAO>>15858000
      END;                                                     <<U.RAO>>15860000
   IF NUMPARMS > 1 THEN  <<CPU OR CONNECT>>                    <<U.RAO>>15862000
      BEGIN                                                    <<U.RAO>>15864000
      IF (INTEGER(CPUCONNECTLEN) = 3)  AND                     <<U.RAO>>15866000
            (CPUCONNECT = "CPU") THEN                          <<U.RAO>>15868000
         FLAGS := 2                                            <<U.RAO>>15870000
      ELSE IF (CPUCONNECTLEN = 7) AND                          <<U.RAO>>15872000
            (CPUCONNECT = "CONNECT") THEN                      <<U.RAO>>15874000
         FLAGS := 1                                            <<U.RAO>>15876000
      ELSE  <<???>>                                            <<U.RAO>>15878000
         BEGIN                                                 <<U.RAO>>15880000
         PARMNUM := 2;                                         <<U.RAO>>15882000
         CIERR(ERRNUM := RESACCTEXPECT, CPUCONNECT);           <<U.RAO>>15884000
         RETURN                                                <<U.RAO>>15886000
         END;                                                  <<U.RAO>>15888000
      IF NUMPARMS > 2 THEN   <<TOO MANY PARMS>>                <<U.RAO>>15890000
         BEGIN                                                 <<U.RAO>>15892000
         PARMNUM := 3;                                         <<U.RAO>>15894000
         CIERR(ERRNUM := RESACCT2MP, EXTRAPARM);               <<U.RAO>>15896000
         RETURN                                                <<U.RAO>>15898000
         END;                                                  <<U.RAO>>15900000
      END;                                                     <<U.RAO>>15902000
   END;  <<ALL PARMS NOW PARSED AND VERIFIED>>                 <<U.RAO>>15904000
TOS := DIRECSCAN (TYPE,0D,LACCT,ARRDB0,ARRDB0,                 <<38.PV>>15906000
                  RCRESETACCT,FLAGS);                          <<38.PV>>15908000
IF <> THEN CYDIRERR'(*,%120000,ERRNUM);                        <<U.RAO>>15910000
END;                                                           <<U.RAO>>15912000
$PAGE       "ERROR HANLDERS AND MISC ROUTINES"                          15914000
$CONTROL SEGMENT=MAIN                                                   15916000
END.                                                                    15918000
