Copyright c Xerox Corporation 1980Inter-Office MemorandumToMesa UsersDateOctober 27, 1980FromJohn WickLocationPalo AltoSubjectMesa 6.0 Change SummaryOrganizationSDD/SS/MesaXEROX Filed on: [Iris]Doc>Summary60.bravo (and .press)This memo outlines changes made in Mesa since the last release (Mesa 5.0, April 9, 1979). The firstsection lists references which should be consulted for more detailed information. The secondsection contains an overview of the changes. The final section describes operational differenceswhich you must know in order to use Mesa 6.0.For most programs, you should be able to begin converting to Mesa 6.0 after reading only thismemo; then consult the various updates when details of new features are required. If yourapplication relies on the extended memory support previously provided by XMesa, you willprobably need to read the System and XMesa updates before converting.ReferencesThe following documents can be found on Doc>. (In Palo Alto, the official Mesa release directoryis maintained on Iris (there is also a copy on Ivy); in El Segundo, it is on Isis. For other locations, consult your supportgroup.) In addition, the file Mesa60.press is a compilation of this and other material (about 75pages); hardcopy is available through your support group.Mesa 6.0 Change Summary. Summary60.pressMesa 6.0 Compiler Update. Compiler60.pressMesa 6.0 Binder Update. Binder60.pressMesa 6.0 System Update. System60.pressMesa 6.0 XMesa Update. XMesa60.pressMesa 6.0 Debugger Update. Debugger60.pressMesa 6.0 Utilities Update. Utilities60.pressMesa 6.0 Pup and Ftp Update. PupFtp60.pressThe above memos describe changes since the last release. The Doc> directory also includesnew versions of the following documents:Mesa System Documentation. System.pressMesa Debugger Documentation. Debugger.pressMesa User's Handbook. Muhb.pressMesa Pup Package Functional Specification. Pup.press!pX qp]g~ri cs]pX -s7Bp ]s]p-s7Bp Ys]t-s 7Bp Sup MsF6 GpI F$;" D}N B- ?%8 =D <8H :E 6Kr 2p'v pw2 1yF7 /pv p1 .M9*xXpv)xpv'#xpv %5xpv #Gxpv !Yxpvkxpv}xpv /p=v p (9xXpv Kxpv ]xpv ox)pv=d Mesa 6.0 Change Summary2Mesa Ftp Functional Specification. Ftp.pressIntegrated Mesa Environment. CommandCentral.press (in Utilities60.press)Performance Mesaurement Tool. PerformanceTool.pressControl Transfer Counting Tool. XferCounter.pressDebugger: Extended Features. XDF.press (in Debugger60.press)Because the language changes are upward compatible with Mesa 5.0, a new version of the MesaLanguage Manual will not be issued with this release; consult the Compiler Update and the BinderUpdate for information on additions to Mesa and C/Mesa.HighlightsThe primary emphasis in this release has been on the following areas:A number of significant new language features are included: extended defaults, floating pointsupport, machine dependent records and enumerated types, dynamic storage allocation, sequences,and exported types. Less major revisions and extensions have been made in the following areas:syntactic and semantic glitches, keyword array constructors, packed array representation, successorand predecessor operations, the DIRECTORY statement, implicitly imported interfaces, type TEXT, loopcontrol variables, extended NIL, the REJECT statement, and the ABORTED signal. The languagechanges are compatible with Mesa 5.0, and will not affect existing source code (there are some minorexceptions; see below). In addition, the Compiler's user interface and command line syntax havechanged substantially. See the Compiler Update and Appendix A of the Mesa User's Handbook fordetails.A Mesa source formatter is available with this release. It establishes a standard representation forsource text, and will produce both plain and formatted .bravo and .press files. Completedocumentation can be found in Appendix B of the Mesa User's Handbook.The Binder has been updated to agree with the Compiler's treatment of the DIRECTORY statementand its user interface and command line syntax. In addition, it now supports multiple controlmodules in a single configuration. See the Binder Update and Appendix C of the Mesa User'sHandbook for details.Support for extended memory beyond 64K, formerly provided by XMesa, is now part of thestandard system. The BasicMesa configuration has been abandoned in favor of facilities whichdynamically delete non-essential components of the system. Support for subdirectories, fastdirectory scanning, floating point, Pup checksums, and 3K RAMs have been added. (Appendix G ofthe Mesa User's Handbook details extensions made to RunMesa.) Other than memory allocationfacilities, changes to the System and Pup and Ftp interfaces are minor; see the updates for details.The Debugger has a new user interface, a new interpreter, and a simple cut and paste editor. TheDebugger's command language is essentially unchanged, but several extensions in windowoperations and source window facilities have been added. A description of the new FileTool isattached to the Debugger Update.Several new commands have been added to the Lister, and the IncludeChecker has been extensivelymodified to support large configurations more efficiently. A new package, CommandCentral, isavailable for use with the Debugger; it serves as a small executive for controlling the editing,compilation, binding, and debugging of applications software. This package greatly speeds up theeditcompilebinddebug cycle when small changes are involved. Documentation is attached tothe Utilities Update. ftGbxX!pv`0xpvpvp^Bxpv\TxpvZfxpvpvp WOx Upp2xpx Sp1 Or L5pE H1, G?1. EB CC BIsp1sp @spspsp  >Ow =Sp- ;xpxp : 6a 57vpvp 3g0xp 0/sp .qW ," x px +"p '"4 &,-0 $2* ":wp !6xpC ); @ U &O' 9yp Jxp 7( T8y p J S ^> xp X p=\oMesa 6.0 Change Summary3A new mode has been added to the Control Transfer Counting Tool which allows modules to beassigned to groups and information to be collected on cross group as well as cross module transfers.The performance measurement tools are documented separately as described in the first section ofthis memo.Operational ChangesThis section summarizes important operational differences which you must know in order to useMesa 6.0; do not begin to convert to Mesa 6.0 until you have read it. More complete information iscontained in the update memos listed in the first section of this document.GeneralOn large programs, performance of the Mesa 6.0 Compiler and Debugger on 64K Altos isconsiderably worse than in Mesa 5.0; an extended memory machine with a minimum of 128K isrecommended.Alto Operating System version 18 and Executive version 11 or later are required to run Mesa 6.0.The new file creation date standard is now supported. The compiler inserts the creation date of thesource file into the .bcd (as does the Binder), and the Debugger checks that the source and objectfile versions match. The IncludeChecker also makes use of these dates. Therefore, you must use aneditor and a file server that support the file date standard. If you use dump files, be sure you havethe latest version of Ftp.LanguageWith two exceptions, Mesa 5.0 source files are compatible with Mesa 6.0. In file names in theDIRECTORY statement, names inside angle brackets are no longer ignored; they are treated assubdirectories of the Alto file system (use of this feature is not recommended). The following newreserved words have been added: FREE, PRED, PROC, REJECT, SEQUENCE, SUCC, UNCOUNTED, andZONE.CompilerThe order of evaluating the items in constructors (including argument lists) and the operands ofinfix operators (except AND and OR) has been changed, particularly in cases involving embeddedprocedure calls; it is no longer always left to right. In particular, expressions of the form word _get[s]*256+get[s] are suspect, and probably incorrect.Except during initialization, constructors for records containing MONITORLOCKs, CONDITIONs, andPORTs are not allowed (to prevent unintentionally overwriting these fields with their default values).Such records must be assigned to fieldbyfield.For element sizes of four bits or less, the internal representation of packed arrays has changed.This is a potential problem in reading files containing packed arrays created by earlier versions ofMesa.The Compiler no longer supports interactive command input; it reads commands only from thecommand line, and does not use the keyboard or display (limited feedback is via the cursor). Thecommand language has been extended and switch processing has changed. The /c switch has beendeleted; global switches must now be specified with a null file name, e.g. Compile /p Defs Impl. ftG bpE `v5/ ^!? ]( Xr Up!< Sx]:Mesa 6.0 Change Summary4Switches are restricted to a single letter. Do not use complete switch names such as /pause (eachletter will be interpreted as a separate switch). Until you understand the full syntax of thecommand language, it is best to group all global switches at the beginning of the command linefollowing a single slash.The log is now written on Compiler.log, not Mesa.typescript; separate .errlog files arestill produced. The error log (if any) is deleted if the compilation is successful; conversely, if thecompilation fails, the .bcd (if any) is deleted.The implementation of floating point has changed considerably; the IEEE standard format is nowused, and the compiler generates calls directly to user-supplied microcode (this will produceundefined results if the proper microcode is not loaded). Calls to software floating point as in Mesa5.0 can be generated with the /-f switch. Do not use type REAL without first consulting with thesupplier of your floating point package.Because of bug fixes, previously acceptable programs may no longer compile.BinderThe Binder is now available only as a .bcd file; you must have Mesa.image to run it. Like theCompiler, the Binder takes commands only from the command line and does not use the keyboardor display; it writes its log file on Binder.log.The meaning of switches used to copy code and symbols has changed substantially; read the BinderUpdate if you use these options. Compressed symbols have been compressed still further to includeonly procedure and signal names (without parameters or results); this substantially reduces the sizeof these .symbol files.Because of bug fixes, previously acceptable configurations may no longer bind.SystemMesa 6.0 is compatible with XMesa 5.0 microcode version 39 (but some new features are notavailable with the old microcode; e.g., extended memory BITBLT).Features previously implemented by BasicMesa and XMesa are now a standard part ofMesa.image. MakeImage is no longer a part of the standard system; ImageMaker must beloaded or bound with the client configuration if it is needed.The standard system now supports only command line input; the MesaExec can be loaded toprovide interactive input. The command line switch /b can be used to convert the standard systemto a basic one. The /k switch will disable the allocation of space for the Debugger's bitmap onextended memory machines (see below).The default maximum numbers of processes (75) and modules (384) have been increased. Aversion of the System called SmallMesa allows 33 processes and 256 modules.Interface changes are described in the System Update. ftG bp+x)vp `vP ^%9 ]( Yv pvp vp X2*= Vvp S<^ Q2+ OG NFvp xsx" L( IPpK EQt Bp&vpv p @[B >&v p ;e;x 9pK 8d 6ovp 3 N /!t +p/* *+8sp &203! %5v pyp,y p #> ?-yp vp+ vp, I% T Syp% 'x p F =UN!Mesa 6.0 Change Summary5DebuggerThe Debugger has also been enhanced to take advantage of extended memory. If you have morethan two banks (128K) of memory, see the installation section of the Debugger Update for anexplanation of the options available; otherwise, the standard defaults will "do the right thing".The Debugger now requires a strike font named SysFont.strike or MesaFont.strike; aversion of Gacha10 is available on MesaFont.strike. Additional fonts are available on[Maxc]. (Strike fonts that include kerning are not supported.)The selection scheme and the assignment of function keys and mouse buttons has changed.Clicking RED once selects a character, clicking twice selects a word, three times a line, etc.; theselection can be extended to the left or right with BLUE. The menu button is now YELLOW(formerly BLUE). FL4 is no longer the stuff key; use FR4 (Spare2) or Keyset2.Scrollbars no longer occupy a dedicated part of the window, but instead come up on top of the leftedge. To obtain a scroll bar, move left just past the edge of the window, then move right slightly,back into the window.New source window menu commands have been added, and they have been factored into severalmenus. The Debugger's wisk window has been replaced by a more general Split menucommand. There are now also Normalize Insertion and Normalize Selection commands.The interpreter can now be used when in Display Stack and Display Process subcommandmode. Several commands now invoke the interpreter automatically (e.g., Octal Read: @p, n:SIZE[R]). The interpreter does procedure calls (the Interpret Call command has beendeleted).The constructs ABS, ERROR, LONG, LOOPHOLE, MAX, MIN, NIL, POINTER TO, PROC, PROCEDURE, SIGNAL,WORD, and open and half open intervals have been added to the interpreter's grammar. Typeexpressions following % must be enclosed in parentheses. The interpreter syntax Expression?replaces the Interpret Expression command.Each breakpoint is now assigned a unique number used for displaying and clearing it. There arenew commands for attaching conditions to break and tracepoints. Break/Tracepoints can no longerbe set by typing a source line, and the Break Module and Break Procedure commands andcorresponding Trace and Clear commands have been deleted; the menu commands must beused. Clear All Entries/Xits clears both break and tracepoints.Tracepoints now automatically invoke the normal Display Stack command processor (withsubcommand p(arameters), v(ariables), or r(esults) as appropriate). The q(uit)subcommand (not b(reak)) exits to the Debugger's command level; it no longer continuesexecution of the client.If the source window is loaded with the s(ource) subcommand of Display Stack, the windowwill remember the appropriate context for setting breakpoints. For an exit break, the s(ource)subcommand now displays the declaration line of the procedure.The Debugger no longer ignores case, and the case commands have been deleted; identifiers must betyped with their correct capitalization. ftG b ^p#8 ]( 7xp [a X2" v pvp Vvp$ Tvp9 Q? OspS NF.sps Lp spsp!spspsp IPE GR F B> A "%vp ?dvpvp <v pvp :n@v 8p.v p  7 3spspspspspspspspspspsp 2)sp L 0yp&y .p vp +P )F (=(v pvp & vpvp6 $vp# !0v p  v pv pvpv Qpvp?  ['vpv p 1&v  p> :x ( >ZtMesa 6.0 Change Summary6Distribution:Mesa UsersMesa GroupSDSupport ftG bp `vX ^ ](B \ *$Copyright c Xerox Corporation 1980Inter-Office MemorandumToMesa UsersDateOctober 27, 1980FromEd SatterthwaiteLocationPalo AltoSubjectMesa 6.0 Compiler UpdateOrganizationPARC/CSLXEROX Filed on: [Iris]Doc>Compiler60c.bravo, Compiler60d.bravo, and Compiler60.pressThis memo describes changes to the Mesa language and compiler that have been made since therelease of Mesa 5.0 (April 9, 1979).Definitions of syntactic phrase classes used but not defined in this document come from the MesaLanguage Manual, Version 5.0, Appendix F.CompatibilityBecause of changes in symbol table and BCD formats, you must recompile all existing Mesaprograms after obtaining recompiled versions of the interfaces and packages that they depend upon.Language ChangesOur goal for language compatibility has been to accept any valid Mesa 5 source program as a validMesa 6 source program. We are aware of the following incompatibilities:There are some new reserved words, as follows:FREE PRED PROC REJECT SEQUENCE SUCC UNCOUNTED ZONESome of the quoted file names that appear in DIRECTORY clauses have differentinterpretations. Text inside angle brackets is no longer ignored; it is treated as the name of alocal subdirectory (but we do not recommend using local subdirectories for Mesa programs atthe present time).The orders of evaluating the items in constructors (including argument lists) and the operandsof infix operators (except AND and OR) have changed somewhat. In particular, programs thatassumed a left-to-right order of procedure calls in these contexts (e.g., Divide[Pop[], Pop[]]) areunlikely to work correctly.The assignment operation is no longer available for updating objects containing MONITORLOCKor CONDITION values; updating of such objects must be done component-by-component.The granularity of packed arrays has changed. If the components of a packed array can bestored in four or less bits, the storage structures defined by the declaration of that array willdiffer between Mesa 5 and Mesa 6. This is a potential problem in reading files created byearlier versions of Mesa. Also, the DESCRIPTOR operator cannot be applied to packed arraysoccupying less than a word.!pX qp]g~ri cs]pX -s7Bp ]s]p-s7Bp Ys]t-s 7BpSup N#sFT Gp4' F$ B[w A p ;r 8p"sp. 63/ 2tX /hpa -HL+EX.B(sFGL&OpG-spHL$S L#[L!YL^L7spsp0L*wpwpwpLLm3s Lpsp)LKYL\LO LUs p,L =d  Mesa 6.0 Compiler Update2If you have been using type REAL, check with the supplier of your floating point package todetermine the effect of Mesa 6 changes in that area.Bug FixesA large number of Mesa 5 bugs have been fixed. The most notable of these involveexpansion of inline procedures that are defined in DEFINITIONS modules,expansion of inline procedures when an argument is itself an expanded inline,proper retention of the tag of a variant record within an arm of a discriminating selection,proper identification of object files that have been renamed.Because of certain bug fixes, the compiler may reject previously acceptable programs or may issuenew warning messages.As usual, the list of compiler-related change requests closed by Mesa 6.0 will appear separately aspart of the Software Release Description.Language RationalizationMesa 6 attempts to remove certain minor anomalies and to add some obvious generalizations to theexisting language.Syntactic Glitches RemovedList Punctuation: For most lists that are explicitly bracketed by symbols other than [ and ], theallowable forms are described by the following meta-BNF:list ::= empty | item | item separator listIn other words, the list may be empty or may be a sequence of items separated by, and optionallyterminated by, a separator. This rule now applies to the following constructs: form separator notesVariantList,CatchSeries;ANY must come lastChoiceSeries;ExitSeries;StatementSeries;StmtChoiceSeries;ChoiceList,ExprChoiceList,When the bracketing symbols are [ and ] or when the length of a list is significant, a trailingseparator is not allowed unless it is semantically meaningful (as in constructors and extractors), butempty lists are allowed. This change affects the following syntactic entities:UsingClause: The form USING [ ] is now permitted (e.g., to emphasize that an interface isonly being exported).VariantFieldList: In the declaration of a variant record, the form [ ] (empty brackets) maybe used instead of NULL (and is recommended). ftGLbpsp;L`v4 \TtX YpQLV3s pLTMLQ\LO= KD J# F6- E-) ?ri  * [>N*Mesa 6.0 Compiler Update4New Language FeaturesExtended DefaultsYou can associate a default initial value with a type (not just with a field of a record). If a type isconstructed from other types using one of Mesa's type operators (e.g., RECORD), the default valuefor that type is determined by the default values of the component types and by rules associatedwith each operator. When you declare a named type, you have the option of explicitly specifying adefault for that type.With this extension, you will find that uses of defaults in Mesa generally fall into two classes.Default values for fields of records make the corresponding constructors more concise and moreconvenient to use. On the other hand, the usual reason for associating a default initial value with atype is to ensure that storage allocated for that type is well-formed, i.e., that any variable of such atype always has a meaningful value. There is some interaction between these uses; the default valueof a record type is partly determined by any default values specified for its fields, and a record fieldmay inherit its default value from the type of that field. The details appear below.The rules for inheritance of defaults are designed to provide the following property (currently notquite preserved by sequence or variant record types): if a type T has been given a non-NULL defaultvalue, any type derived from T will have a defined and non-NULL default value for any embeddedcomponent of type T. Because of the potential cascading effect implied by this, you shouldcarefully consider the relative costs and benefits of specifying a default, especially one that does notinclude NULL as an alternative.Defaults are ignored in determining equivalence and conformance of types. Thus it is possible tohave two compatible types with different default initializations.Specification of Default InitializationNone of the built-in types (INTEGER, CARDINAL, BOOLEAN, CHARACTER, STRING and REAL) has adefault initial value.The following rules determine the default initial value of a type designated by an expressioninvolving a type operator:The default initial value for a type constructed using RECORD (or ARRAY) is defined field-by-field (or element-by-element). For each field (element), it is the default value for that field ifthere is one; otherwise, it is the default initial value for the type of that field (element) or isundefined if there is no such default.The default initial value for any port type, constructed using PORT, is NIL (see below).Types constructed using other operators have no implied default initialization.The default initial value of a type designated by a declared type identifier T depends upon the formof the declaration of T, as follows:T: TYPE = TypeExpr; T receives all the attributes of TypeExpr including any default.T: TYPE = TypeExpr _ e; T receives all the attributes of TypeExpr except that its default initial value is e. ftG ari ]tX Zfp#E XGsp  WE UpO S Pz;& NM M,&@ K,< I Y H6%C FU C@ V A%wpsp ?wp sp >Jwp > <Z :sp 7#> 6A 2wX' /hpspspspspspsp - *r1, (L&OspspL$ZL#@#L!Y&LX?spsp LcO A wp mwp @wpXspwp@wwpwp@wpspwpwp@ wpwp*wp :>ZLMesa 6.0 Compiler Update5ExamplesFlag: TYPE = BOOLEAN _ FALSE;Rec1: TYPE = RECORD [f: Flag];-- default value is [f: FALSE]Rec2: TYPE = RECORD [f: Flag] _ [ ];-- ditto (the field defaults)Rec3: TYPE = RECORD [f: Flag] _ [TRUE];-- explicit defaultRec4: TYPE = Rec3;-- default value is [f: TRUE]Rec5: TYPE = Rec3 _ [f: FALSE];-- default value is [f: FALSE]Any DefaultSpecification is acceptable in a type declaration (see Mesa Language Manual, Version5.0, page 37). A declaration giving a type T a NULL default cannot, however, equate T to a typewith a default that does not include NULL. A default appearing in a type definition within aDEFINITIONS module must be either NULL or an expression with a compile-time constant value.Default values associated with types are usedto initialize local variables of procedures and programs, in the absence of explicit initialization,to initialize variables that are dynamically allocated using NEW, in the absence of explicitinitialization (see below),to construct records (except argument and result records), in the absence of an explicit valuefor a field in the constructor and of a default value for that field in the record declaration,to construct arrays, in the absence of an explicit value for an element (see below).Defaults in Argument and Result RecordsYou may specify default values for the fields of argument and result records. Such default valuesmust be constructed from constants or variables that are declared outside of the procedure typedefinition. In particular, you cannot use a value of another field of the same record or, in the caseof a result record, a value from the associated argument record to define such a default. You may omit a field in the constructor of an argument or result record only if the definition ofthat record specifies an explicit default value for the field; default initial values associated with thetypes of such fields are not inherited (for example, this protects you from assigning a value to areturn variable and then forgetting to mention it in a RETURN statement, causing the default for itstype to be returned). On the other hand, protection against ill-formed storage is inherited; you maynot void or elide a field unless the type of that field allows a NULL initialization. Any defaults that you specify in the declaration of a result record serve two purposes. Since thefields of such a record can be used as local variables within the procedure body, a defaultspecification affects the initialization of those variables; in addition, it allows abbreviation in theconstructors of the corresponding return records. The precise rules are the following:Upon entry to a procedure, each field of the result record is initialized with the default valuespecified for that field, if any; otherwise, with the default initial value for the type of thatfield, if there is one; otherwise, its initial value is undefined.If a RETURN is followed by an explicit constructor, the default specifications appearing in thedeclaration of the result record control the values of any omitted or elided fields, even if otherassignments have been made to the result variables within the procedure body. If the RETURNstands by itself, without such a constructor, or if the RETURN is implicit, the return record isconstructed using the current values of the result variables. ftG bw@_pXspspsp@]wpspspwp.wsp@\Twpspspwp.@Zwpspspwpsp.@Ywpspwp.wpsp@W^wpspwpwsp.wpsp Txp'w Rhp!wpsp!wp P%sp ( Os psp5 KX-LIP<(LF&spLE-LBILA 9&L>T ;AwX' 7p=% 6K/0 4f 2Z / S .U ,_wpwp. *7sp  )7wp 'iAsp $b "s@ g %WLZLDL[BLsp9L9LwpwL8psLp- sp"LC>  =XMesa 6.0 Compiler Update6ExamplesT: TYPE = INTEGER _ 1;Proc1: PROC [i: INTEGER _ 0, j: T];Proc2: PROC RETURNS [m: T, n: INTEGER _ 2] = { -- m initialized to 1 (from T), n to 2 Proc1[j: 3];-- Proc1[i:0, j:3]; Proc1[i: 3];-- illegal (j does not default to 1) ... m _ 4; n _ 5; ... RETURN;-- returns [4, 5] ... RETURN [m, n];-- also returns [4, 5] ... RETURN [m];-- returns [4, 2] ... RETURN [NULL, n];-- illegal (declaration of T disallows voiding of m) ... RETURN [, n];-- ditto (m does not default to 1 or 4) ... RETURN [6, 7];-- returns [6, 7] ... };-- implicitly returns [4, 5]Defaults and Variant RecordsYou may specify a default for the entire variant part in the declaration of a variant record type. Inthe absence of such a specification, the default value of that part, including the tag, is undefinedwith respect to the undiscriminated record type.The default initial value of a discriminated variant record type has a tag value corresponding to thediscriminating adjective, and defaults for the other fields of the variant part are those implied by thefields selected by that tag. In particular, the declaration or allocation of a variable with discriminated record typesets the tag correctly.ExampleVRec: TYPE = RECORD [ common: INTEGER _ 0, variant: SELECT tag: * FROM red => [r1: BOOLEAN _ FALSE], green => [g1: INTEGER _ 0] ENDCASE _ red[TRUE] | NULL];v: VRec;-- initial value is [common: 0, variant: red[r1: TRUE]]v1: VRec _ [common: 10];-- initial value is [common: 10, variant: red[r1: TRUE]]v2: VRec _ [variant: NULL];-- tag and variant part are undefined, v2.common = 0v3: VRec _ NULL;-- illegal (declaration of common does not allow NULL)rv: red VRec;-- initial value is [common: 0, variant: red[r1: FALSE]]gv: green VRec;-- initial value is [common: 0, variant: green[g1: 0]]Defaulted Array ElementsElements in an array constructor may be voided or elided. Omission of elements is permitted in akeyword constructor (see below) but not in a positional constructor. The empty constructor ([ ]) is akeyword constructor with all items omitted. An elided or omitted element receives the default valuefor the type of the components of the array (if any); the value of a voided element is undefined.ALL abbreviates a positional constructor of the appropriate length; thus ALL[ ] elides all elements(defaulting if possible) and ALL[NULL] voids all positions. ftG bwL_pXspspL](wpspwpspwpwpLZwpspspwpwpwpspLYwpwpwpwpLW^wpwp wpwpwpLUwpwp wpLTLRhwpwpLPsFp XLOsFpXwpwp LMrsFpXwp LKsFpXspwp wpwpLJ#sFpXwp' wpwpLH|sFpX LF  Cw @7p51 >O <0 941 7K 6Kv1* 4 1wL/!pXspspL-zwpspL+wpspwpsL*+pwpwpspspL(wpwpspL&spwpspspL$awpwp wpwpwpwpspL"wpwpwp wpwpwpwpspL!wpwpwpsp 'wpwpLkwpwpsp wpspLwpwp wpwpwpwpspLwpw p wpwpwpwp w p.3 #C 1"B B ;sp8 sp spsp L=\Mesa 6.0 Compiler Update7Keyword Array ConstructorsYou can use keyword array constructors when the index type of the array is an enumeration orsubrange thereof. The acceptable keywords are the constants appearing in the enumeration. In thecase of a subrange, the endpoints must be defined by expressions involving only those constants, theoperators FIRST, LAST, SUCC and PRED, and identifiers equated by declaration to such expressions.If the component type of the array has a defined default value (including NULL), keyword items canbe omitted; the corresponding elements receive the default value.Packed ArraysIf you specify the PACKED attribute for an array type, the granularity of packing is 1, 2, 4, 8 or 16nbits and is determined by the component type of the array (formerly just 8 or 16n bits).The value of the construct SIZE[T, n] is the size, in words, of the storage required by a packed arrayof n items of type T. (SIZE[T] continues to yield the number of words occupied by a single item oftype T.)ExampleBit: TYPE = BOOLEAN _ FALSE;BitSet: TYPE = PACKED ARRAY Color OF Bit;AllBits: BitSet = ALL[TRUE];threeBits: BitSet _ [yellow: TRUE, red: TRUE, blue: TRUE]; Successor and Predecessor OperationsThe operators SUCC and PRED operate upon values of any ordered type except REAL. For numericand character types, SUCC[x] and PRED[x] are equivalent to x+1 and x1 respectively. Forenumerated types, the values are the successor and predecessor of x in the enumeration; a boundsfault occurs if there is no such element and you requested bounds checking.DirectoriesYou can now override the association established by the DIRECTORY clause between the names ofincluded modules and the names of the files containing those modules. Any file names implied byconvention can be omitted entirely; they will be computed from the interface identifiers.SyntaxIncludeList::=IncludeItem|IncludeList , IncludeItemIncludeItem::=identifier UsingClause|identifier : FROM FileName UsingClause|identifier : TYPE UsingClause|identifier : TYPE identifier UsingClauseUsingClause::=empty | USING [ IdList ] | USING [ ]The (initial) identifier in an IncludeItem names a module. If you specify the name of the filecontaining that module when you invoke the compiler (as a keyword parameter with keywordidentifier, see below), that name is used, even if a FileName appears in the IncludeItem.Otherwise, if such a FileName appears, it is used. If you supply neither a compile-time argumentnor a FileName, the name identifier.bcd is used. ftG bX ^p:" ](I [U Y spspspsp= X22sp VA RhtX Opsp;w Mrp/!wp J#spwpwp> H|wpwpspwp( Fwp CwLA pXspspspL?dwpspsF pXwpspwpL=wpwpspspL<w pwpwspwpspwpsp 7t$ 4p spsp(sp 2spwpspwpwpwp 1U-wp /)wp +t (=p7sp &` $Y "swLx p'x Q'XL p'x /' sx ' sx ' sxLe p'xsx sx p x px p5 o7! x pxpx p xp' yxp y p 2>]Mesa 6.0 Compiler Update8One approach to describing systems built from collections of Mesa modules views the DIRECTORYclause as the declaration of (compile-time) formal parameters of type TYPE. Mesa 6 provides thefinal two forms of IncludeItem primarily for compatibility with this view. The identifier precedingthe colon names the formal parameter; it is also used to derive a file name as described above. Theidentifier following TYPE constrains the set of acceptable actual parameters; it must match theModuleName used in the definition of the module that you intend to include (see the MesaLanguage Manual, Version 5.0, Section 7.2).You can use the final form to change the name by which one module is known within another,notably to avoid duplicate names in a DIRECTORY clause. For example, you might need to referencetwo different versions or parameterizations of an interface Defs within a single program. TheIncludeItemsLongDefs: TYPE Defs,ShortDefs: TYPE Defsdeclare LongDefs and ShortDefs as identifiers within that program of possibly different modules,each with the ModuleId Defs. As IncludeItems, the formsidentifieridentifier: TYPEeach abbreviateidentifer: TYPE identifierand the name in the DIRECTORY must be identical to the ModuleId if you use one of these forms.Implicitly Imported InterfacesAn implicitly imported interface is one from which imported values are required for binding thefree variables of another, explicitly imported interface. For example, interface D1 might importinterface D2 to gain access to a procedure or exported variable supplied by the latter. D2 is thenimplicitly imported by any program module M that imports D1 (see the Mesa Language Manual,Version 5.0, Section 7.4.4).In Mesa 6, the free variables of D2 that are used by D1 are bound to the principal instance of D2 inM. An import is a principal instance if it is the only instance of that interface imported by amodule or if it is unnamed. Furthermore, if M imports no instances of D2, a principal instance willbe created automatically. If module M has no other reason to mention D2, D2 then need notappear in either the DIRECTORY or the IMPORTS list of M. Explicitly importing a principal instanceof D2 in such a situation is not an error, and you must do so ifyou plan to use positional notation to specify the imports of M in a C/Mesa configurationdescription, since the positions of automatically created interface instances are not defined, oryou already import more than one instance of D2, each of which is named.In a C/Mesa configuration, principal instances of interfaces are not supplied automatically; you must import themexplicitly if they cross (sub)configuration boundaries. ftG bp"2s `vpEsp ^x px p ](04 [x p sp< Yx pIw X2p T6$ S<%sp2 Q&wp Ox pLMrwpXspwLK pspw IPpwpwp, G xpwpx p LE-w LC pXs A pL>w pspw <pspxp 7t 4p_ 2 Dwp 1U wp!,wp /wp wp w . p *!wpwpwpwp )wp*5 'iwp$wpwp %$wpwpwp $ spspwp, "swp;L>wpLQAL-wp vAzv '8p =Q+`Mesa 6.0 Compiler Update9Real NumbersMesa 6 has adopted the proposed IEEE standard for floating-point arithmetic (see, e.g., Coonen, Animplementation guide to a proposed standard for floating-point arithmetic, Computer, January 1980,pp. 68-79). In support of this, the language provides floating-point literals and the compilerperforms a limited number of operations upon floating-point constants.Syntaxprimary::=... | realLiteralrealLiteral::=unscaledReal|unscaledReal scaleFactor|wholeNumber scaleFactorunscaledReal::=wholeNumber fraction| fractionfraction::=. wholeNumberscaleFactor::=E optSign wholeNumber | e optSign wholeNumberoptSign::=empty | + | wholeNumber::=digit | wholeNumber digitAn unscaledReal has its usual interpretation as a decimal number. The scaleFactor, if present,indicates the power of 10 by which the unscaledReal or wholeNumber is to be multiplied toobtain the value of the literal.Mesa 6 represents REAL numbers by 32 bit approximations as defined in the IEEE standard. Therounding mode used to convert literals is "round-to-nearest." A literal that overflows the internalrepresentation is an error; one that underflows is replaced by its so-called "denormalized"approximation. In Mesa 6, the value of the unscaledReal in a literal must be a valid LONGINTEGER when the decimal point is deleted.No spaces are allowed within a realLiteral. Note that such a literal can begin, but not end, with adecimal point. Thus the interpretation of [0...1) is unambiguous (but perhaps surprising; use [0 .. .1)or [0.0..0.1) instead).OperationsThe compiler performs the following operations involving floating-point constants:Unary negation (with 0 = 0)ABSFixed-to-Float (in "round-to-nearest" mode).Other operations are deferred until runtime, even if all their operands are constant, so that theprogrammer can control the treatment of rounding and exceptions (see the proposed standard).Unless you specify the compilation option -f (see below), the compiler generates instructions for floating-pointoperations that require hardware or microcode support. If you are in doubt about the state of your machine orits microcode, see a local floating-point expert. ftG bX ^p-5 ](Kwp [ S YF W^wLTx p'xXLRh p'x P' O'LL p'x Jp'xLH| p'x LF '-LC ' LA ' =px p4x p <'x px p :n 7spG 5xG 3 B  2),x ps 0p# -3x p) +*> ) &w #GpRL XxpL%sL}p, a [?Lv,DLkLB1 =SMesa 6.0 Compiler Update10Machine Dependent EnumerationsSometimes a programmer can enumerate the values of some type but requires control of theencoding of each value or of the number of bits used to represent the type (usually for futureexpansion). Mesa 6 provides machine-dependent enumerations for such applications.SyntaxEnumerationTC::=MachineDependent { ElementList }MachineDependent::=empty | MACHINE DEPENDENTElementList::=Element | ElementList , ElementElement::=identifier|identifier ( Expression )|( Expression )ExamplesStatus: TYPE = MACHINE DEPENDENT {off(0), ready(1), busy(2), finished(4), broken(7)}Color: TYPE = MACHINE DEPENDENT {red, blue, green, (255)}-- reserve 8 bitsEach Expression in an EnumerationTC must denote a compile-time constant, the value of which isan unsigned integer.In an enumerated type with the MACHINE DEPENDENT attribute, the values used to represent theenumeration constants are assigned according to the following rules. If a parenthesized expressionfollows the element identifier, the value of that expression is used; otherwise, the representation ofan element is one greater than the representation of the preceding element. If you specify only arepresentation, the corresponding element (normally a place holder) is anonymous. If therepresentation of the initial element is not given, the value zero is used.You cannot explicitly specify the representation of any element unless the attribute MACHINEDEPENDENT appears in the type constructor. Two element identifiers cannot be represented by thesame value (either given explicitly or determined implicitly as described above). The ordering ofelements determined by position in the ElementList must agree with the ordering determined bythe (unsigned) arithmetic ordering of the representations.Sparse EnumerationsA machine-dependent enumerated type is sparse if there are gaps within the set of values used torepresent the constants of that type or if the smallest such value is not zero. Mesa 6 takes thefollowing position on gaps: they are filled by valid but anonymous elements of the enumeratedtype. These elements can be generated only by the operators FIRST, SUCC and PRED (or by theiteration forms that implicitly use these operators).If you use a sparse enumerated type as the index type of an array, the array itself will havecomponents for all elements of the enumeration, including the anonymous ones. The latterare awkward to access (except through ALL) and may cause problems in constructors,comparison operations, etc., as well as wasted space. (For example, ARRAY Color OF INTEGERwould occupy 256 words.) ftG? bX ^p> ](N [R YwLVx p'xpXx pLTx p'xsFLQx p'xpXx pxLO p'x Mrp'x px p K'x p IPwLFpspsFpXwpwpwpwpwpLDZwpspsFpXwpwpwp5 A x px p; ?d <sp, :nE 8<* 7 X 5x R  3K 03"s .pS -3J +&x p+ ): &wX #Gp'wp & ! T N Q!spspsp 5L/S LYLsp)L9EspwpsLp D J=TaMesa 6.0 Compiler Update11Machine Dependent RecordsMachine-dependent records are provided for situations in which the exact position of each field isimportant. In Mesa 6, you can explicitly specify word- and bit-positions in the declaration of therecord type. This form provides better documentation and usually is easier to use than theprevious, purely positional form. You should use it in preference to the old form, which remainsfor compatiblity.SyntaxVariantFieldList::=CommonPart FieldId : Access VariantPart|VariantPart|NamedFieldList|UnnamedFieldList|emptyCommonPart::=NamedFieldList , | emptyNamedFieldList::=NamedField | NamedFieldList , NamedFieldNamedField::=FieldIdList :Access TypeSpecification DefaultOptionFieldIdList::=FieldId | FieldIdList , FieldIdFieldId::=identifier | identifier ( FieldPosition )Tag::=FieldId | ...FieldPosition::=Expression : Expression .. Expression|ExpressionExamplesInterruptWord: TYPE = MACHINE DEPENDENT RECORD [ channel (0: 8..10): [0..nChannels),-- nChannels <= 8 device (0: 0..7): DeviceNumber, stopCode (0: 11..15): MACHINE DEPENDENT {finishedOK(0), errorStop(1), powerOff(3)}, command (1: 0..31): ChannelCommand];Node: TYPE = MACHINE DEPENDENT RECORD [ type (0: 0..15): TypeIndex, rator (1: 0..13): OpName, rands (1: 14..47): SELECT valence (1: 14..15): * FROM nonary => [], unary => [left (1: 16..31): POINTER TO Node], binary => [left (1: 16..31), right (1: 32..47): POINTER TO Node] ENDCASE]An identifier with an explicitly specified FieldPosition can occur only in the declaration of a fieldof a record defined to have the MACHINE DEPENDENT attribute. If the position of any field of arecord is specified, the positions of all must be. Each Expression in a FieldPosition must denote acompile-time constant, the value of which is an unsigned integer.The first expression appearing in a FieldPosition specifies the (zero-origin) record-relative index ofthe word containing the start of the field; the second and third specify the indices (zero-origin) ofthe first and last bits of the field with respect to that word. The second and third expressions mayspecify a bit offset greater than the word size if the word offset is adjusted accordingly. Similarly,the difference between the second and third expressions may exceed the word size. If the bit ftG? bX ^pQ ](): [[ Y!@ X2 UwLS p'x px px pL<x p'xpxL9 p'x px px 7p'x 4wL2) pspsFpXL0wpwp'wpL.wp w pL-3wp sFpXw pwpwpL+wp w pL)wpspsFpXL'iwp wpL%wp wpL$wp spwpsL"spwpL wpwp sF pXwpL%wpwp wp sF pXwpL}sp /+x p- spsp # "x px p 9A $x p5 CE @% 25 M] > =]Mesa 6.0 Compiler Update12positions are not specified, a specification of 0..n*WordSize-1 is assumed, where n is the minimumnumber of words required by the type of the field.Each field must be at least wide enough to store any value of the corresponding type. Values arestored right-justified within the fields. The current implementation of Mesa imposes the followingadditional restrictions on the sizes and alignment of fields:A field smaller than a word (16 bits) cannot cross a word boundary.Any field occupying a word or more must begin at bit zero of a word and have a size that isa multiple of the word size.A variant part may begin at any bit position (as determined by its tag field).If the sizes of all variants of a record type are less then a word, those sizes must be equal;otherwise, the size of each variant of the type must be a multiple of the word length.In the definition of a machine-dependent record type, explicitly specified field positions must notoverlap. For a variant record type, this requirement applies to the variant part (including the tag)considered in conjunction with the fields of the common part; the tag and fields particular to eachvariant must lie entirely within the variant part.The order of fields in a record type declaration need not agree with the order of those fields in therepresentation of the record; however, no gaps are permitted. For variant records, the fields of atleast one variant (including the tag field) must fill the position specified for the variant part.Dynamic Storage AllocationIn Mesa 6, you can use special constructs to describe the dynamic allocation and deallocation ofvariables. You are still responsible for managing the storage and guarding against danglingpointers; the new features handle certain routine aspects of allocation and deallocation (such ascomputing sizes), provide proper default initialization of newly allocated variables, and reduce thetotal number of LOOPHOLEs required to deal with an allocator. ZonesAllocation and deallocation are done with respect to zones. A zone need not be associated with anyspecific storage area; it is just an object characterized by procedures for allocation and deallocationas described below. The storage managed by a zone in Mesa 6 is said to be uncounted. In suchzones, object management is the responsibility of the programmer, who must explicitly program thedeallocation.To use an uncounted zone, you must provide the procedures that manage the zone and implementthe required set of operations. Many users will be able to import a suitable implementation from astandard package; the details of writing such packages are discussed below.A zone object has a value and a type. You will normally obtain a zone value by calling aprocedure exported by some package implementing zones. Typically, such a procedure constructs azone (and perhaps an initial storage pool) according to user-supplied parameters.The type of a zone value must belong to a new class of types, called zone types. Mesa 6 providestwo such types, UNCOUNTED ZONE and MDSZone. Transactions with objects having these types aregenerally in terms of LONG POINTER and POINTER values respectively (see below). ftG? bp3w pwp `v2 ](F [*9 Y=LW^CLT4'LS<LPNLNF1-LL/' IP] GG FE DZ2 A O ?dB" =b 9tX 6Kp9' 4S 2X 1U:* /sp' ,_w )p5wp' 'iQ %:wp $I "s %C }03 K &3 I 9Q D Cs pwp/ s psp! T=Y.Mesa 6.0 Compiler Update13Syntactically, UNCOUNTED ZONE is a type constructor. MDSZone is a predeclared identifier; you may think of it as asynonym for MDS RELATIVE UNCOUNTED ZONE (which you currently cannot write directly).You may declare variables having zone types (for which fixed initialization is recommended). Zonetypes may also be used to construct other types. In particular, you may choose to deal with pointers to zones;the NEW and FREE constructs described below provide automatic dereferencing. Allocating StorageThe operator NEW allocates new storage of a specified type, initializes it appropriately, and returns apointer to that storage. The NEW operation is considered an attribute of a zone, which must bespecified explicitly.SyntaxPrimary::=...|Variable . NEW [ TypeSpecification Initialization OptCatch ]|( Expression ) . NEW [ TypeSpecification Initialization OptCatch ]Initialization::=empty | _ InitExpr | = InitExprOptCatch::=empty | ! CatchSeriesThe value of the Variable or Expression identifies the zone to be used, either directly or after anarbitrary number of dereferencing operations. The TypeSpecification determines the type of theallocated object. If an InitExpr is provided, it must conform to the specified type and its value isused to initialize the new object; otherwise, the default value associated with that type (if any) isused. Only signals raised or propagated by the allocation procedure activate a CatchSeriesattached to NEW.The value of the Primary is a pointer to the newly allocated object. The type of that pointerdepends upon the type of the zone and the form of the Initialization. If the argument of NEW issome type T, the type of the result isLONG POINTER TO T, if the type of the zone is equivalent to UNCOUNTED ZONEPOINTER TO T, if the type of the zone is equivalent to MDSZone.If you specify fixed (=) initialization, the result is a read-only pointer with type LONG POINTER TOREADONLY T or POINTER TO READONLY T respectively.The InitExpr cannot be the special form for string body initialization ([ Expression ]). You can,however, allocate string bodies with dynamically computed sizes by using a new form ofTypeSpecification (see below). If you do so, the Initialization must be empty.Releasing StorageUncounted zones have FREE operations. When applied to an object, this operation releases thestorage allocated for that object.SyntaxStatement::=...|Variable . FREE [ Expression OptCatch ]|( Expression ) . FREE [ Expression OptCatch ]The zone used in a FREE operation is determined as described for NEW; it should be the zone fromwhich the variable was originally allocated. The argument of FREE is the address of a pointer to thevariable to be deallocated; FREE sets the pointer to NIL and deallocates the storage for the variable. ftG? bAvsvsvzv6 ` zvsv- ]p\ \2v+ Zfsvsv=p WwX Sp spW R"sp> Pz MwMKxp cxIp cxpXspxpx pxpH6 cx pspxpx pxpMEx p cxpxpxMC@p cxpx ?pxpx p( >J-xp <xpD :K 9T:x 7p sp 4^xp 9 2!x psp 1 wpL.sFpXwp+sFL, pXwp+wp )As 'pwpspwp $xp:x p #B !Yxp!x p  wX psp, " wLxp w xpXsxp x pspx pxp sp*sp >spwp 3 spsp. =^Mesa 6.0 Compiler Update14Only signals raised or propagated by the deallocation procedure activate a CatchSeries on a FREE.Implementing Uncounted ZonesThis section describes the assumptions currently made by the compiler about the user-suppliedimplementations of uncounted zones. These assumptions are compatible with the style of "object-oriented" programming that has proven successful in a number of applications. You need to readthis section only if you are designing the interface between a storage management package and thezone features of the language.An uncounted zone dealing with LONG POINTER values is represented by a two word value, whichthe compiler assumes to be a long pointer compatible with the following skeletal structure:UncountedZoneRep: TYPE = LONG POINTER TO MACHINE DEPENDENT RECORD [ procs (0:0..31): LONG POINTER TO MACHINE DEPENDENT RECORD [ alloc (0): PROC [zone: UncountedZoneRep, size: CARDINAL] RETURNS [LONG POINTER], dealloc (1): PROC [zone: UncountedZoneRep, object: LONG POINTER] -- possibly followed by other fields-- ], data (2:0..31): LONG POINTER-- optional, see below -- possibly followed by other fields-- ];If z is an uncounted zone, the code generated for p _ z.NEW[T] is equivalent top _ z^.procs^.alloc[z, SIZE[T]]and the code generated by z.FREE[@p] is equivalent to{temp: LONG POINTER _ p; p _ NIL; z^.procs^.dealloc[z, temp]}.Within this framework, you may design a representation of zone objects appropriate for yourstorage manager. In general, you should create an instance of a finger (the record with fields procsand data) for each instance of a zone. The record designated by the procs pointer can be shared byall zones with the same implementation. The data pointer normally designates a particular zoneand/or the state information characterizing that zone. Note that the compiler makes no assumptionsabout the designated object and does not generate any code referencing the data field. The extralevel of indirection provided by that field is not obligatory; you may replace it with stateinformation contained directly in the finger (but following the procs field).The compiler assumes a similar (but single word) representation for an MDSZone value; theskeletal structure is as follows: MDSZoneRep: TYPE = POINTER TO MACHINE DEPENDENT RECORD [ procs (0:0..15): POINTER TO MACHINE DEPENDENT RECORD [ alloc (0): PROC [zone: MDSZoneRep, size: CARDINAL] RETURNS [POINTER], dealloc (1): PROC [zone: MDSZoneRep, object: POINTER] -- possibly followed by other fields-- ], data (1:0..15): POINTER-- optional -- possibly followed by other fields-- ]; ftG? bpKx psp ^wX [pG YT X20/ VI T Qs p1 ODLMrwpXspsF$pXLKwp sF*LJ#pXw pspwpwpwpspspsFpLH|Xw pspwpwpwpsFpXspLFwp)LE-wp sF .pXLC- @7wp.wpwpspwpL=wpwpwpwpwpspwp ;AwpspwpL8wpsF pXwpwpspwpwpwpwpwp 5x= 3Awp w 2)pwpU!Mesa 6.0 Compiler Update16SeqTag ::=identifier : Access BoundsType |COMPUTED BoundsTypeBoundsType ::=IndexTypeTypeSpecification ::=. . . |TypeIdentifier [ Expression ]The TypeSpecification in VariantPart establishes the type of the sequence elements. TheBoundsType appearing in the SeqTag determines the type of the indices used to select from thoseelements. It is also the type of a tag value that is associated with each particular sequence object toencode the length of that object. For any such object, all valid indices are smaller than the value ofthe tag. If T is the BoundsType, the sequence type is effectively a union of array types with theindex typesT[FIRST[T] .. FIRST[T]), T[FIRST[T] .. SUCC[FIRST[T]]), ... T[FIRST[T] .. LAST[T])and a sequence with tag value v has index type T[FIRST[T]..v). Note that the smallest interval in thisunion is empty.If you use the first form of SeqTag, the value of the tag is stored with the sequence and isavailable for subscript checking. In the form using COMPUTED, no such value is stored, and nobounds checking is possible.Examples:StackRep: TYPE = RECORD [ top: INTEGER _ 1, item: SEQUENCE size: [0..LAST[INTEGER]] OF T]Number: TYPE = RECORD [ sign: {plus, minus}, magnitude: SELECT kind: * FROM short => [val: [0..1000)], long => [val: LONG CARDINAL], extended => [val: SEQUENCE length: CARDINAL OF CARDINAL] ENDCASE]WordSeq: TYPE = RECORD [SEQUENCE COMPUTED CARDINAL OF Word]The final example illustrates the recommended method for imposing an indexable structure on raw storage.If S is a type containing a sequence field, and n is an expression with a type conforming toCARDINAL, both S and S[n] are TypeSpecifications. They denote different types, however, and thevalid uses of those types are different, as described below.MACHINE DEPENDENT SequencesYou may declare a field with a sequence type within a MACHINE DEPENDENT record. Such a fieldmust come last, both in the declaration and in the layout of the record, and the total length of arecord with a zero-component sequence part must be a multiple of the word length. If youexplicitly specify bit positions, the size of the sequence field also must describe a zero-lengthsequence; i.e., it must account for just the space occupied by the tag field (if any). fpG?LbuqX u ququ `vqu tqu L] q uLYq uX2qu qu q Tuqu q Scardinality(Ti), and you have requested bounds checking.If FIRST[Ti] = 0, SUCCn[FIRST[Ti]] is just n, i.e., the interpretation of the tag is most intuitive if Ti isa zero-origin subrange. Usually you will specify a BoundsType (e.g., CARDINAL) with a range thatcomfortably exceeds the maximum expected sequence length. If, however, some maximum lengthN is important to you, you should consider using [0..N] as the BoundsType; then the value of thetag field in a sequence of length n (n < N) is just n and the valid indices are in the interval [0..n). fpG? bqL^rqXtqtFqXL](rq tqL[rq tqrqtF qXrqLX2rqtqtFqXLVrqtqLTrqtFqXtFqXtF q QrX NFqrq&rqrq L3rqrq Jtqrq* IP'7tq G)tq"rqrq F; B tqrqrq tq' A rqrq! =rqtqrqrq t qrqtqrq <rq0tqrqrq :n rq+L7XIL5x*t6s5xqtqrq rqL28 /^rq . tqO ,_42 *O t )q %L#GrqXtFqXrqrqtqrq.rqrqL rqtF qXrqtqrqrqrqrqrqtqLQrqtF qXrqrqtqrqrq  rqR [tqu qrs[quq 'ts'qtqrs'q@rs'q rqv \r qrs\qrq$ 1tqrs1qts1qtqrs1q rq;rs1q fu qtq T rq4rqu q p rqrqvqrq rq/rq )=\Mesa 6.0 Compiler Update18Operations on SequencesYou can use a sequence-containing type S only as the argument of the type constructor POINTER TO.Note that the type of z.NEW[S[n]] is POINTER TO S (not POINTER TO S[n]). If the type of an objectis S, the operations defined upon that object areordinary access to fields in the common partreadonly access to the tag field (if not COMPUTED)indexing of the sequence fieldconstructing a descriptor for the components of the sequence field (if not COMPUTED).There are no other operations upon either type S or the sequence type embedded within S. Inparticular, you cannot assign or compare sequences or sequence-containing records (except byexplicitly programming operations on the components).Indexing: You may use indexing to select elements of the sequence-containing field of a record byusing ordinary subscript notation, e.g., s.seq[i]. The type of the indexing expression i must conformto the BoundsType appearing in the declaration of the sequence field and must be less than thevalue of the tag, as described above. The result designates a variable with the type of the sequenceelements. A bounds fault occurs if the index is out of range, the sequence is not COMPUTED, andyou have requested bounds checking.By convention, the indexing operation upon sequences extends to records containing sequence-valued fields. Thus you need not supply the field name in the indexing operation. Note too thatboth indexing and field selection provide automatic dereferencing.Examples:ps^.item[ps.top] ps.item[ps.top] ps[ps.top] -- all equivalentDescriptors: You may apply the DESCRIPTOR operator to the sequence field of a record; the result isa descriptor for the elements of that field. The resulting value has a descriptor type with index andcomponent types and PACKED attribute equal to the corresponding attributes of the sequence type.By extension, DESCRIPTOR may be applied to a sequence-containing record to obtain a descriptor forthe sequence part. The DESCRIPTOR operator does not automatically dereference its argument.You cannot use the single-argument form of the DESCRIPTOR operator if the sequence is COMPUTED.The multiple-argument form remains available for constructing such descriptor values explicitly (andwithout type checking).In any new programming, you should consider the following style recommendation: use sequence-containing types forallocation of arrays with dynamically computed size; use array descriptor types only for parameter passing.Examples:DESCRIPTOR[pn^] DESCRIPTOR[pn.sons] -- equivalentString Bodies and TEXTThe type StringBody provided by previous versions of Mesa illustrates the intended properties anduses of sequences. For compatibility reasons, it has not been redefined as a sequence; thedeclarations of the types STRING and StringBody remain as follows: fpG? br ^q'rq.t q ](rqtqrqrqt qrqt qrqrq [rq-LYX,LV)tqLTLQKtq NF/rq&rq L2* J5 Grq L F)rqrqrq&rq DZu qM BT A Ktqr ?dq# <4( :n># 8B 5x2rqrqrqrqXrqrqrqrqrqrqrq /r q t q: .f ,_tq0 * t qC )t q1 %/t qtq $=' "s Hsq k qAt qrqXt qrqrq p qr qJ )W tqr q 2 :>Z`Mesa 6.0 Compiler Update19STRING: TYPE = POINTER TO StringBody;StringBody: TYPE = MACHINE DEPENDENT RECORD [ length (0): CARDINAL _ 0, maxlength (1): --READONLY-- CARDINAL, text (2): PACKED ARRAY [0..0) OF CHARACTER]The operations upon sequence-containing types have, however, been extended to StringBody so thatits operational behavior is similar. In these extensions, the common part of the record consists ofthe field length, maxlength serves as the tag, and text is the collection of indexable components(packed characters). Thus z.NEW[StringBody[n]] creates a StringBody with maxlength = n andreturns a STRING; if s is a STRING, s[i] is an indexing operation upon the text of s, DESCRIPTOR[s^]creates a DESCRIPTOR FOR PACKED ARRAY OF CHARACTER, etc.There are two anomalies arising from the actual declaration of StringBody: s.text[i] never uses bounds checking,and DESCRIPTOR[s.text] produces a descriptor for an array of length 0. Use s[i] and DESCRIPTOR[s^] instead.Type TEXTThe type TEXT, which describes a structure similar to a StringBody as a true sequence, is predeclaredin Mesa 6. Its components length and maxLength are declared to have a type compatible witheither signed or unsigned numbers (but with only half the range of INTEGER or CARDINAL).TEXT: TYPE = MACHINE DEPENDENT RECORD [ length (0): [0..LAST[INTEGER]] _ 0, text (1): PACKED SEQUENCE maxLength (1): [0..LAST[INTEGER]] OF CHARACTER]Exported TypesAn exported type is a type designated by an identifier that is declared in an interface andsubsequently bound to some concrete type supplied by a module exporting that interface. This isanalogous to the current treatment of procedures in interfaces, where the implementations ofprocedures (i.e., the procedure bodies) do not appear in the interface but are defined separately.The advantages are twofold:The internal structure of the type is guaranteed to be invisible to clients of the interface.There are no compilation dependencies between the definition of the concrete type and theinterface module. The definition of that type can be changed and/or recompiled at any time(perhaps subject to a size constraint; see below) without requiring recompilation of either theinterface or any client of the interface.The uses of an exported type are the same as those of any other type, e.g, to construct other types.The value provided by the interface is constant but has no accessible internal structure. In Mesa 6,there are two other important differences between exported procedures and exported types.The first is a restriction necessary to ensure type safety across module boundaries. Differentexporters of an interface can supply different implementations of any particular procedure in thatinterface. In Mesa 6, this is not true for exported types; all exporters of a particular type within aconfiguration must supply the same concrete type, which is called the standard implementation ofthat exported type. Because of this restriction, clients can safely interassign values with exportedtype T, no matter how obtained. In addition, any exporter of T may convert a value of type T to avalue of the concrete type it uses to represent T and conversely.The second difference is that it is not necessary to import an interface to access an exported typedefined within it or to distinguish among values of such a type coming from different imported fpG?LbtqXtqtFqXr L_ qtqtFqXL]rqtqL\TrqtFqLZXrqtFqXtqtq W^<r q U:* Trqrqrq* Rhrqtqr qrq r qrqrq P tqrqtqrqrqrqt qrq O t(qLLs?w swswswswsLKat swsws.wswst sws H6rt Dqtqr q# C@rqrq  A 6tqtqL?tqXtqtFqXL=vrq tqtqL;rqtFqXrq tqtqtqtq 7p 4^qr q A 2r q * 10, /hN -L+EX]L(-,L'#IL%|CL#) M 7. 7Y  Q AP r#q- : rq K14 rq8rqrq 0rq ;( 3+ > >]LMesa 6.0 Compiler Update20instances. This is another consequence of the fact that, in Mesa 6, all interfaces must reference thestandard implementation of the exported type.Interface ModulesAn exported type is declared in an interface (DEFINITIONS) module using one of the following twoforms:T: TYPE;T: TYPE [ Expression ];The first of these introduces a type T, no properties of which are known in the interface or to anyclient of the interface. In particular, the size of T is not known; this is adequate (and desirable) ifthe interface and clients deal only with values of type POINTER TO T.The second form specifies the size of the values used in the representation of the type. The valueof Expression, which must denote a compile-time constant with an unsigned integer value, givesthis size in units of machine words. Supplying the size of an exported type is a shorthand forexporting a set of fundamental operations (creation, _ , =, and #) upon that type. In Mesa 6, theeventual concrete type must supply the standard implementations of these operations, which aredefined as follows:creationallocate the specified number of words, with no initialization_copy an uninterpreted bit string=, #compare uninterpreted bit stringsNote that a type with non-NULL default value does not have the standard creation operation. Such types cannot beexported with known size. You should therefore consider writing your interfaces in terms of POINTER TO T, where Tis a completely opaque exported type and not subject to these restrictions.Client ModulesA client has no knowledge of the type T beyond those properties specified in the interface. If thesize is not specified there, no operations on T are permitted. If the size is available from theinterface, SIZE[T] is legal; also declaration of variables (including record fields and arraycomponents) and the operations _, =, # are defined for type T.Implementation ModulesAn implementor exports a type T to some interface Defs by declaring the type with the requiredidentifier, the PUBLIC attribute, and a value that is the concrete type; e.g., inT: PUBLIC TYPE = S;S specifies the concrete type. If the size of T appears in the interface, the definition of T in theexporter must specify a type with that size and with the standard fundamental operations (thecompiler checks this).Within an exporter, Defs.T and T conform freely and are assignment compatible. Otherwise, Defs.Tis treated opaquely there and is not equivalent to T (except for the purpose of checking exports).You should therefore attempt to write an exporting module entirely in terms of concrete types.Consider the following example: fpG? bqb `v- ](r Yq" t q' X2LUrqtqLTrqtqru rq Qrqrq9 O5rq NF8t qrq K8+ J#u q< H| S FS E-&rq CLA X>L>L<! 8sts3 7Dt swsw 6(sK 2r /qrq< ..rq# ,_& tqrqF' *W<RMesa 6.0 Compiler Update21Interface Module (Defs):T: TYPE;H: TYPE = POINTER TO T;R: TYPE = RECORD [f: H, ...];Proc1: PROC [h: H];Proc2: PROC [r: POINTER TO R];...Exporting Module:T: PUBLIC TYPE = RECORD [v: ...];P: TYPE = POINTER TO T;Proc1: PUBLIC PROC [h: P] = {... h.v ...};Proc2: PUBLIC PROC [r: POINTER TO Defs.R] = { q: P = r.f; ... q.v ...};...If the type of h were Defs.H in the implementation of Proc1, the reference to h.v would be illegal.By defining a type such as P and using it within the exporter instead of H, you can avoid most suchproblems. (Note that Proc1 is still exported with the proper type.) This strategy of creatingconcrete types in one-to-one correspondence to interface types involving T fails for record typessuch as R (because of the uniqueness rule for record constructors). In this example, you must useDefs.R to define the type of r in the implementation of Proc2, but a reference to r.f.v is illegal. Insuch cases, a LOOPHOLE-free implementation may require redundant assignments, such as the one toq. Alternatively, you should consider making the record type another exported type, and definingits concrete type within the exporter also.BindingFor each interface containing some exported type T, all exporters of that interface must provideequivalent concrete types for T (the binder and loader check this). In Mesa 6, the concrete typesmust in fact be identical; if two modules export T, they must obtain the same concrete definition ofT, e.g., from another shared interface module (typically, a private one).Control VariablesYou can now declare the control variable of a loop as part of the FOR clause attached to that loop.Such an identifier cannot be accessed outside the loop and cannot be updated except by the FORclause in which it is declared.SyntaxIteration::=FOR identifier Direction IN LoopRange|FOR identifier : TypeExpression Direction IN LoopRangeAssignation::=FOR identifier _ Expression , Expression|FOR identifier : TypeExpression _ Expression , ExpressionThe forms of Iteration and Assignation with ": TypeExpression" declare a new control variable.That variable cannot be explicitly updated (except by the FOR clause itself). Its scope is the entireLoopStmt introduced by the Iteration or Assignation including any LoopExitsClause. Note,however, that the value of a control variable used in an Iteration is undefined in the FinishedExit. fpG?LbqXrq_rqtq]rqtqtF qXrq\TrqtqtqrqZrqtqrqYrqtqrqtF qXrqW^LTRhrqtF qXtqrqPrqtqtF qXrqOrqtF qXrqrqrqMrrqtF qXrqtFqXrqKrqrqrqJ#rqrqH| E-rqrqrqrqrq Crq! rq Arq- @7+rq >rqP YMesa 6.0 Compiler Update22Extended NILIn Mesa 6, null values are available for all address-containing types. An address-containing type isone constructed using POINTER, DESCRIPTOR, PROCEDURE, PROGRAM, SIGNAL, ERROR, PROCESS,PORT, ZONE or a LONG or subrange form of one of the preceding. The built-in type STRING isaddress-containing. A relative pointer or relative descriptor type is not considered to be address-containing in Mesa6.Null values are denoted as follows:If T designates any address-containing type, NIL[T] denotes the corresponding null value.Whenever T is implied by context, NIL abbreviates NIL[T].If T is not implied by context, NIL means NIL[POINTER TO UNSPECIFIED] and thus continues tomatch any POINTER or LONG POINTER type.A fault will occur if you attempt to dereference a null value and have requested NIL checking; afault will occur unconditionally if you attempt to transfer control through a null value.Reject StatementWithin a catch phrase, you can use the statement REJECT to explicitly reject a signal, i.e., toterminate execution of that catch phrase and propagate the signal to the enclosing one. (Note thateach catch phrase is currently terminated by an implicit REJECT.)Process ExtensionsAborting a process now raises the predeclared signal ABORTED. The predeclared typesMONITORLOCK and CONDITION are now defined with default initialization. The only client-visiblefield is timeout in CONDITION; its default initial value is 100 ticks.Restrictions on AssignmentThe assignment operations defined upon certain types have been restricted so that variables of thosetypes can be initialized (either explicitly or by default) when they are created but cannotsubsequently be updated. A variable is considered to be created at its point of declaration or, fordynamically allocated objects, by the corresponding NEW operation.In Mesa 6, the following types have restricted assignment operations:MONITORLOCKCONDITIONany type constructed using PORTany type constructed using SEQUENCEany type constructed using ARRAY in which the component type has a restricted assignmentoperation.any type constructed using RECORD in which one of the field types has a restricted assignmentoperation.Note that the restrictions upon assignment for a type do not impose restrictions upon assignment tocomponent types. Thus selective updating of fields of a variable may be possible even when the fpG? bX ^qb ](tqt qtqtqtqtqtq [tqtqtq>tq Ys)8 XU U*qX#LRrq)tqrq'LP4rqtq tqrqLMrqtqtqtqLL tqt q H7rqtq GY BpX ?q1tq( >P <\9tq 89pX 4q;5tq< 3Ct qtq7 1rqtq) -zp *+q[ (C &d %54tq !ELkt LLuqXtLqtLqtq +L L]tq1 L ;Z ? h L=\8Mesa 6.0 Compiler Update23entire variable cannot be updated; e.g., the timeout field of a CONDITION variable can be updated byordinary assignment. Also, you may apply the operator @ to obtain the address of the entirevariable in such a situation.Operational ChangesUser InterfaceThe standard Mesa 6 Compiler reads commands only from the executive's command line; it nolonger supports interactive input. During compilation, the display and keyboard are disabled. Thecursor provides a limited amount of feedback; it moves down the screen to indicate progressthrough a sequence of commands and to the right as errors are detected. At the end ofcompilation, the message "Type Key" is displayed in a flashing cursor if there are errors and youhave requested the compiler to pause. Typing Shift-Swat aborts the Executive's currentcommand sequence; Ctrl-Swat invokes the Mesa Debugger; any other character causes normalexit from the compiler.A summary of compilation commands is written on the file Compiler.log (formerly,Mesa.typescript).Command Line ArgumentsThe Mesa 6 Compiler allows you to control the association between modules and file names at thetime you invoke the compiler. The compiler accepts a series of commands, each of which has theformoutputFile _ inputFile[id1: file1, ..., idn: filen]/switchesOnly inputFile is mandatory; it names the file containing the source text of the module to becompiled, and its default extension is .mesa. Any warning or error messages are written on thefile outputRoot.errlog, where outputRoot is the string obtained by deleting any extensionfrom outputFile, if given, otherwise from inputFile. If there are no errors or warnings, anyexisting error log with the same name is deleted at the end of the compilation.If a list of keyword arguments appears between brackets, each item establishes a correspondencebetween the name idi of an included module, as it appears in the DIRECTORY of the sourceprogram, and a file with name filei; the default extension for such file names is .bcd. (If thename of an included module is not mentioned on the command line, its file name is computedfrom information in the DIRECTORY statement; see above).The optional switches are a sequence of zero or more letters. Each letter is interpreted as aseparate switch designator, and each may optionally be preceded by - or ~ to invert the sense ofthe switch.If outputFile (and _) are omitted, the object code and symbol tables are written on the fileinputRoot.bcd, where inputRoot is inputFile with any extension deleted. Otherwise codeand symbols are written on outputFile, for which a default extension of .bcd is supplied. Ifthe compiler detects any errors, the output file is not written and any existing file with the samename is deleted.The compiler accepts a sequence of one or more commands from the executive's command line(through the file Com.cm). Commands are separated by semicolons, but you may omit a semicolon fpG? bq-rq tq `vB ^ Yxi UppX R"qF PzC NF M,M K&; I%y q H6yq" F C@:;0y q Ayqu =vpX :'qE 8B 6L4^y3t4^y3t4^y3t4^y3t4^y 12qyq8 /'yq3 -yqy q1 ,<y qyq* *O 'F S %y%t%q-tq #y#Gt#qyq " G btq  yqI lCyqyq  vy qyqH y qyqyq, ( y q#yq 30  .+ yq : =]osMesa 6.0 Compiler Update24between any two successive identifiers (file names or switches), or between a ] and an identifier (butnot between an identifier and a /). Note that any required semicolon in an Alto Executivecommand must be quoted.You can set global switches by a command with an empty file name. In the form /switches,each letter designates a different switch. Unless a command to change the global switch settingscomes first in the sequence of commands, you must separate it from the preceding command by anexplicit semicolon. Note that the form switch/c is no longer available for setting global switches.SwitchesThe following compilation options have been added:SwitchOption Controlled fimplementation of floating-point operations ltreatment of long pointers ywarning on runtime callsIf the f switch is set, the compiler generates byte code instructions for floating-point operations(these require microcode support); otherwise, it generates calls through the system dispatch vector(SD) to software routines implementing such operations. If the a and l switches are both set, thecompiler generates code using an variant of the Alto Mesa instruction set that implements longpointer accesses to a virtual memory larger than 64K (code generated using the l switch cannot beexecuted on an Alto, even if long pointers are not used). If you specify -a, the l switch is ignored.The y switch indicates that a warning message should be issued whenever the compiler generatescode to invoke a runtime procedure (including some "instructions" which are actually implementedin software).The default settings for these switches are f, -l and -y.Distribution: Mesa Users Mesa Group SD Support fpG? bqM `vyq9 ^ [Hyq Y"? X2P Vsts4 Rhp OqX2Lr rJ#qy q,IyJ#Gy q (\GQcG E-y q ByqH A @# ?d@yqyq =// <A Copyright c Xerox Corporation 1980Inter-Office MemorandumToMesa UsersDateOctober 27, 1980FromBrian Lewis, Ed SatterthwaiteLocationPalo AltoSubjectMesa 6.0 Binder UpdateOrganizationSDD/SS/MesaXEROX Filed on: [Iris]Doc>Binder60.bravo (and .press)This memo describes changes to the C/Mesa language and the Binder that have been made sincethe release of Mesa 5.0 (April 9, 1979).Definitions of syntactic phrase classes used but not defined in this document come from the MesaLanguage Manual, Version 5.0, Section 7.7.CompatibilityBecause of changes in BCD formats, you must rebind all your existing Mesa configurations afterobtaining recompiled versions of their components. There is one potential incompatibility:Some of the quoted file names that appear in DIRECTORY clauses have differentinterpretations. Text inside angle brackets is no longer ignored; it is treated as the name of alocal subdirectory (but we do not recommend using local subdirectories for Mesa programs atthe present time).A number of bugs have been fixed. As usual, the list of Binder-related change requests closed byMesa 6.0 will appear separately as part of the Software Release Description. The most notableinvolvecorrectly checking the types of interfaces when positional notation is used,proper treatment of named imports or exports of a configuration,proper identification of object files that have been renamed.Because of bug fixes, the Binder may reject previously acceptable configuration descriptions or mayissue new warning messages. A number of error or warning messages now use symbolic nameswhenever the corresponding symbol tables are available.!pX qp]g~ri cs]pX -s7Bp ]s]p-s7Bp Ys]t-s 7Bp Sup N#sF5 Gp:! F( B[v A p ;r 8psp"# 6[L4^G-spHL2S L1[L/h ,L *rI (L&OLL#@L!Y=  J cB 7p=d Mesa 6.0 Binder Update2New Language FeaturesBracket SymbolsThe bracket pair { } can be used in place of BEGIN END.SyntaxCBody::=BEGIN CStatementSeries END|{ CStatementSeries }Multiple Control ModulesYou can now specify an ordered list of control modules for any configuration.SyntaxControlClause::=CONTROL IdList|emptyIdList::=identifier | IdList , identifierWhen a (sub)configuration is started, either explicitly or as the result of a start trap (see the MesaLanguage Manual, Version 5.0, Section 7.8.4), each of the modules named in the ControlClause isstarted in order.Note that, if there are calls from a control module to one of its successors in the list, the order ofstarting will not necessarily follow the order of the ControlClause. In starting a configuration, anycontrol modules that have already been started are skipped.Operational ChangesThe Binder is now available only as a .bcd file; you must have Mesa.image to run it. Whencompressing symbols, SymbolCompressor.bcd must be loaded first; see the description of the /x switch below.User InterfaceThe Binder now reads commands only from the Alto Executive's command line; it no longersupports interactive input. At the start of the first binding, the message "Bind" is displayed in thecursor. If there are any warnings, "Warning" is displayed, and if there are errors "Errors" is shown.At the end of binding, the message "Type Key" is displayed in a flashing cursor if there are errorsand you have requested the Binder to pause. Typing Shift-Swat aborts the executive's currentcommand sequence; Ctrl-Swat invokes the Mesa Debugger; any other character causes normalexit from the Binder.A summary of binder commands is written on the file Binder.log (formerlyMesa.typescript). ftG ari ]tX Zfp/spsp WvLUpw p'sws Sw'pwp Ot LXpM IvLGbw p'sw E'LC@ p'wpw ?pbv >Jp.w p < 9T=) 75w p# 6; 0ri -zp xpx p y +sy-sy 'tX $ap: "R !U kM x p xp" u '4x p xpw 8>RMesa 6.0 Binder Update3CommandsThe Mesa 6.0 Binder allows you to control the names and contents of various output files when youinvoke it; it accepts a series of commands, each of which usually has one of the following forms:inputFile/switchesoutputFile _ inputFile/switches[key1: file1, ... keym: filem] _ inputFile/switches(It is also possible to control the association between included modules and configurations and theirfile names; this is described below.) In the last form, key is one of bcd, code, or symbols.The string inputFile names the file containing the source text of the configuration description,and its default extension is .config.There is a principal output file, the name of which is determined as follows:If you use the first command form, it is inputRoot.bcd, where inputRoot is the stringobtained by deleting any extension from inputFile.If you use the second form, it is outputFile, with default extension .bcd.If you use the third form and keyi is bcd, it is filei, with default extension .bcd;otherwise, it is obtained as described for the first form.If the Binder detects any errors, the principal output file is not written, and any existing file withthe same name is deleted.You may also request that the code and/or symbols of the constituent modules be copied to anoutput file, as follows:You request copying of code by specifying the /c switch or by using the third command formwith keyword code. Code is copied to the principal output file unless you use the third formand keyi is code, in which case the code is copied to a file named filei, with defaultextension .code.You request copying of symbols by specifying the /s or /x switch or by using the thirdcommand form with keyword symbols. Symbols are copied to the fileinputRoot.symbols unless you use the third form and keyi is symbols, in which casethey are copied to a file named filei, with default extension .symbols. Compressedsymbols are copied if the /x switch is specified.Any warning or error messages are written on the file outputRoot.errlog, where outputRootis the string obtained by deleting any extension from the name of the principal output file. If thereare no errors or warnings, any existing error log with the same name is deleted at the end of thebind.When more than one Binder command is given on the command line, the commands must beseparated by semicolons. However, you may omit a semicolon between any two successiveidentifiers (file names or switches), or between a ] and an identifier (but not between an identifierand a /). Note that any required semicolon in an Alto Executive command must be quoted. ftG b ^pC ](ZLZxLX2LUU*sUxU*sUxU*sUwxU*sUx Rp_ P2xp xpxpxp M xp. Kxp H vp9LF$)x pxp LD}(xpLB"x pxpL?x>s?pxpx>s?pxpL=: :n\ 8 5x? 3L1U-xpvpL/ xpGL.x-zs.pxp )x-zs.p L,< xpL)1xpxpvpL(xp L&sxpx%s&spxpL$x$s$pxp L"xp , xpx p\ @R  JK K F TxpQ B  =UqMesa 6.0 Binder Update4SwitchesThe optional switches are a sequence of zero or more letters. Each letter is interpreted as aseparate switch designator, and each may optionally be preceded by - or ~ to invert the sense ofthe switch.The Binder recognizes the switches:/c- copy code/s- copy symbols/x- copy compressed symbols/p- pause after binding if there are errors or warnings/r- run the specified .image or .run file/g- (has no effect; retained for compatibility with Mesa 5)The Mesa 5 Binder switch /o (output file) is no longer available.In earlier versions of the Binder, copying symbols was an error if not all of the symbol files wereavailable at bind time. The Binder now copies all symbols that it can find, leaves the symbol tablereferences for the other modules in the original (unavailable) files, and issues a warning.The switches /c and /s are interpreted differently in Mesa 6 than they were in Mesa 5. Thefollowing table outlines these changes. Mesa 6Mesa 5meaningfile/cfile/ccode to file.bcdfile/csfile/c file/scode to file.bcd;symbols to file.symbols[symbols: file.bcd] _ file/cfile/cscode and symbols to file.bcdNote that file/cs has quite a different meaning in Mesa 6 than before. Also, the common Mesa5 command sequence file/c file/s will bind file twice in Mesa 6, the first time copying onlycode and the second time only symbols. Compressed symbols are copied with the /x switch. In this mode, only the following symbols areincluded: all procedures, and the signals declared at the top level of modules. Symbols for theirparameters and results are not copied. This option allows limited but often adequate debugging,and substantially reduces the size of the symbols file (typically by more than 50%). To copycompressed symbols, SymbolCompressor.bcd must be loaded ahead of the Binder. Thus >Mesa.image SymbolCompressor.bcd Binder.bcd MySystem/xwill create MySystem.bcd and MySystem.symbols (compressed).Global switches are set by a command with an empty file name. In the form /switches, eachletter designates a different switch. The switches to copy code (/c), to copy symbols (/s), and tocompress symbols (/x) may now be given as global switches, and hence apply to all source filesthereafter. Unless a command to change the global switch settings comes first in the sequence ofcommands, it must be separated from the preceding command by an explicit semicolon. ftG b ^p xpI ](Cxpxp [ X2#Uxp Txp RhxpPxp5OxpxpxpMrxp9 J#xp& F Y E-22 C[ @7 xpxpE >(;Av)`6 8x)`6 p6Kx)` 6 p 6 4p2)x)`6 p . xpG -3x p xpvp +' (=xp6 &X $ R #GI !xp"Qx6 p x pxp Jxp  1xpxp exp. +6 T ` =W<;Mesa 6.0 Binder Update5Associating File Names with Modules and ConfigurationsThe Binder now lets you control the association between file names and modules orsubconfigurations when you call it. This is done by specifying a list of component identifier-filename pairs inside brackets after the input file name. For example, the commandMySystem[Test: UnpackedTest]will bind MySystem.config using the previously bound configuration Test that is stored on thefile UnpackedTest.bcd. A command that includes one of these optional component-file namelists will have one of the forms: inputFile[id1: file1, ... idn: filen]/switchesoutputFile _ inputFile[id1: file1, ... idn: filen]/switches[key1: file1, ... keym: filem] _ inputFile[id1: file1, ...idn: filen]/switchesThe module or configuration named by idi in the configuration description will be read from thefile filei; .bcd is the default extension.Distribution: Mesa Users Mesa Group SD Support ftG bX6 ^pGQ ](#@ [OLYx Upxp*zp Txp 8 Rh%LOx O`sOxO`sOxO`sOxO`sOx LMMsMxMsMxMsMxMsMx LK>JsK>xJsK>xJsK>wxJsK>xJsK>xJsK>x2IsHsIsxHsIsx FHp$xEsFHp7 D}xCsD}pxp ? >JX < ;A  9v=.Copyright c Xerox Corporation 1980Inter-Office MemorandumToMesa UsersDateOctober 27, 1980FromJohn WickLocationPalo AltoSubjectMesa 6.0 System UpdateOrganizationSDD/SS/MesaXEROX Filed on: [Iris]Doc>System60.bravo (and .press)This memo outlines changes made in the Mesa system interfaces since the last release (Mesa 5.0,April 9, 1979). A number of internal changes made in the system and the microcode are alsodiscussed.This memo is intended as a quick guide to conversion, not a detailed specification of the changes.Names in square brackets refer to sections of the Mesa System Documentation or to other publiclyavailable reference documents (e.g., the Alto Operating System Reference Manual).External InterfacesMajor changes include integrated support for Alto extended memory and elimination of BasicMesa.The System also now exports versions of the following Development Software interfaces: Ascii,Format, Inline, Process, Runtime, Storage, String, System, and Time. (Note thatimplementation of these interfaces may not be complete.) Other changes are relatively minor.AllocDefsPrivate types and operations have been removed. AllocInfo, MakeDataSegment, andMakeSwappedIn are now defined in SegmentDefs, and temporarily duplicated here forcompatibility. [Segment Package]AltoDefsMaxVMPage has been increased to support up to a million words of memory; MaxMDSPageand PagesPerMDS have been added. [Segment Package]AltoDisplayMaxBitsPerLine has been changed to 608 (it was 606). Cursor, CursorBits, andCursorHandle define the location and format of the cursor. Coordinate, CursorXY, andMouseXY define the location and format of the cursor and mouse coordinates. [Display Package]AltoFileDefsSupport for the DiskShape and PartitionName properties of the directory's leader page hasbeen added. The definition of a file serial number (SN) has been changed to isolate the flag bits(directory, random, and nolog) into a separate structure (SNBits). [Alto Operating SystemReference Manual]!pX qp]gZri bs]pX -s7Bp ]s]p-s7Bp Xs]t-s 7Bp Sup MsF5 Gbp+4 ED D @Y ?-vp =v)v&p 9Tt 6p,3 4^'0wp 2wpwpwpwpwpwpwpwp 1] -v +Ep&0'wpwp )w p w p% 'tp $v "-wp@w pw ptp 7v w p;<wpw p w pw pwp mwp2tp v pwpw p.  *wp+ Uwpwpwpwpv p>c5Mesa 6.0 System Update2AltoHardwareThis new interface defines most structures of the Alto hardware, including the processor, display,keyboard, mouse, keyset, printer interface, disk, and Ethernet. [Alto Hardware Manual]AsciiThis new interface defines the ASCII control character codes; for compatibility, these continue to bedefined in IODefs. [StreamIO Package]BasicMesaThe facilities of BasicMesa have been replaced by procedures in the standard system and acommand line switch (/b) which can be used to destroy the display and keyboard packages (seeDisplayDefs and StreamDefs). MakeImage is no longer a standard part of Mesa.image,and must be loaded separately. [Section 3]BitBltDefsThe extended memory option now supports use of the normal and alternate bank registers, whosevalues are supplied in the unused word of the BBTable (this option is not supported under XMesa5.0 microcode (version 39)). AlignedBBTable (and BBTableSpace) can be used to properlyalign BITBLT argument records. [Alto Hardware Manual]CharIOThis new interface provides many of the functions of IODefs, but each operation takes aStreamDefs.StreamHandle as its first parameter, allowing formatted input and output to anystandard stream. [StreamIO Package]DirectoryDefsThis interface has been changed slightly to speed up directory searches (by about a factor of 3). Inaddition, support for subdirectories was added (see Alto Operating System Reference Manual). Thefollowing items have changed (note that a NIL DiskHandle does not imply the system directory):EnumerateEntries: PROCEDURE [ dir: DiskHandle, proc: PROCEDURE [CARDINAL, StreamScan.Handle, DEptr] RETURNS [BOOLEAN], inspectFree: POINTER TO READONLY BOOLEAN, lengthFilter: CARDINAL _ 0] RETURNS [index: CARDINAL];The procedure proc is called for each directory entry; free entries are passed only ifinspectFree^ is TRUE. If the lengthFilter is non-zero, only entries with a filename length equalto lengthFilter characters will be passed to proc.The following procedure inserts an entry into the directory; unlike Lookup, it does not create afile. If the file already exists, TRUE is returned (and fp^ is undisturbed).Insert: PROCEDURE [ dir: DiskHandle, fp: POINTER TO AltoFileDefs.FP, name: STRING] RETURNS [old: BOOLEAN];ParseFileName replaces ExpandFileName; it strips the leading directory information fromname, puts the result in filename (appending a period if necessary), and returns a stream (withaccess dirAccess) open on the directory in which the file should be looked up.ParseFileName: PROCEDURE [ name, filename: STRING, dirAccess: SegmentDefs.AccessOptions] RETURNS [StreamDefs.DiskHandle]; ftGf bv _pb ]Avp Zv X2pxp, V wptp S Oyp@ Mrw pw pwp!y p Ktp H|v FpW DZ.wpvp Bw pw p A zpvp =v ;Ap5wp  9wp+ 7tp 4v 2)pb 0( v&p ."spw pvp,_wXzw*)zwzwzwzw'izFw%Xzwzwzw #Gp. wpA/ !w psp w p% w pwp } 7wp #spwp[wXzwzF wXzw zwzw  p w p. wpwp* Cwp> wXzw zw' yzw ^ 2=]}Mesa 6.0 System Update3The following procedures set and return the directory used for looking up files which do not specifya directory name (initially set to "w pw pw p wp 2 wpwpwpwp 1Uwpw pwp .wpw pwp -3wpw pwpwp *M(=wX zw&zw,$ zw"s C Q p-w p &tp [v wpE 9sptp ,w pz p- w pw pw pw p  owpwp ,wpw p wp$w pt p f >\2Mesa 6.0 System Update5StreamScanThis new interface allows overlapped disk input when reading from a stream. It is a transliterationof the same code from the Alto Operating System (version 17). The following are defined inStreamScan.mesa:Descriptor: TYPE = RECORD [ da: AltoFileDefs.vDA, pageNumber: CARDINAL, numChars: CARDINAL, -- private fields];Handle: TYPE = POINTER TO READONLY Descriptor;Init: PROCEDURE [ stream: StreamDefs.StreamHandle, bufTable: POINTER, nBufs: CARDINAL] RETURNS [Handle];GetBuffer: PUBLIC PROCEDURE [ssd: Handle] RETURNS [POINTER];Finish: PROCEDURE [ssd: Handle];Init sets up a scan stream from a disk stream. In addition to the stream, the client supplies a vectorof pointers to 256 word areas useable as disk buffers (bufTable). The number of buffers suppliedis nBufs. At least one buffer must be supplied (the normal stream buffer is also used). Each callto GetBuffer will return a pointer to the next sequential page of the file and returns the previousbuffer page to the buffer pool (first call returns data page 0; file page 1). The public fields of theHandle are correct for the page returned by the most recent call to GetBuffer. GetBufferreturns NIL when there are no more pages to be read. A call to Finish terminates the scan. Noother stream operations should be performed between Init and Finish. [Disk Streams Package]StringDefsCompareStrings lexically compares two strings and returns -1, 0, or 1 if the first is less than,equal to, or greater than the second; an optional parameter may be supplied to ignore casedifferences. All procedures in this interface now handle NIL string parameters. [String Package]SystemDefsCopyString allocates storage from the system heap and copies its argument into it, optionallymaking the new string longer. ExpandString performes a similar function, allocating a new string(and freeing the old one) if necessary. Even and Quad can be used to align pointers on doubleand quad word boundaries. [Storage Management]TimeDefsThe type HardwareTime has been replaced by InlineDefs.BcplLongNumber. Default valueshave been added to UnpackDT, PackDT, and AppendDayTime. ReadClock returns thecurrent value of the Alto's realtime clock (part of which can be found at locationRealTimeClock). [Time Package]TrapDefsStackError no longer takes a parameter; UnboundProcedure now takes an UNSPECIFIED. Thefollowing signals have been added (not all of which can be generated by Alto/Mesa):ZeroDivisor, DivideCheck, UnimplementedInst, WakeupError, PageFault, Write-ProtectFault, and HardwareError. [Traps] ftGf bv _pC! ]F \TYwX zwzwX2V zwT zwS<{wPzwzFwX NFzwL-zwzwJzw H| zFwXzwzwFzw Cpc A ,wp" @7wp@ >wpW <25 ;Awp:wpw 9pzp1wp 7wpwptp 4v 2)w pR 0; .9spt p +v )w pA 'iw p) %)wpwp( $tp v Qpw pwp wpwpw pwp Y=Z [w pt p  v w pwp z p 5:6 Cw pRw pwpw pwpSw  pw ptp  T=YsMesa 6.0 System Update6XMesa Extended Memory SupportFunctions formerly provided by XMesa are now integrated with the standard system. A 3K RAM orMesa microcode in ROM1 is required to support the extended memory option. [Segment Package]Internal InterfacesThe following changes are internal to the implementation and do not affect public interfaces; theymay affect performance and/or space requirements, however. Note that Mesa 6.0 continues tosupport version 39 of the XMesa microcode available with Mesa 5.0; obviously, certain new featureslisted below are not available if your ROM contains the old microcode (e.g., Long BitBlt).3K RAM SupportMesa now supports the Alto 3K RAM option (available only on extended memory machines).Debugger BitmapIf the extended memory option is present, the system allocates part of the client's memory for useby the debugger for its display bitmap; this improves the debugger's response times considerably.The debugger bitmap may be deallocated by the procedure MiscOps.ReleaseDebuggerBitmapor the command line switch /k (in the former case, the call must be made before the debugger isfirst entered).Long Copy, Long BitBltThese opcodes now include support for extended memory.Misc OpcodesMisc opcodes (except for RCLK) now provide a general escape to user microcode in the RAM ifMesa is running on a 2K ROM or 3K RAM machine; they produce undefined results otherwise.Alpha bytes for the currently implemented MISC functions are defined in MiscAlpha.Overflow MicrocodeRunMesa has been upgraded to include microcode support for Pup checksums, IEEE floating point,and HBlt (used by Griffin). This microcode is loaded with the XMesa overflow microcode on Altoswith the 2K ROM (with version 41 microcode) or 3K RAM option. Users who have been loadingmicrocode for these functions need no longer do so. This change affects Alto IIs only.Range CheckingThe bounds check instruction (BNDCK) is now implemented correctly.Distribution:Mesa UsersMesa GroupSDSupport ftGf bv _p$4xp ]xp2tp Yt VpQ TJ S<8* Q'xp0 NFv Kpxp H|v Fp)9 DZM B- w A pyp$ ?d <v 9p6 6Kv 3pzp7xp 2)xpxp3 0*spwp -3v *pI )X 'i xp#xp %W "sv pzp [   e ?W<Copyright c Xerox Corporation 1979, 1980Inter-Office MemorandumToMesa UsersDateOctober 27, 1980FromJim Sandman, John WickLocationPalo AltoSubjectMesa 6.0 XMesa UpdateOrganizationSDD/SS/MesaXEROX Filed on: [Iris]Doc>XMesa60.bravo (and .press)This memo describes the changes in Mesa 6.0 runtime support which incorporate the facilities ofXMesa 5.0 into the standard system.Overview of Extended Memory SupportMesa now uses the extended memory of Alto II XMs as additional swapping space for code. Thismeans that code and data need not co-exist in the MDS, the primary 64K of memory. Mesa takesadvantage of any available extra space automatically; standard Alto programs do not need to bemodified to run. Support is provided for up to one million words of memory in blocks of 64Kwords. Because Mesa uses extended memory for code segments, it includes a page-level storage allocatorfor the additional banks. Client programs may request storage in the additional banks by usingextensions of the standard procedures in SegmentDefs. Mesa provides primitive mechanisms toread and write words in extended memory and to copy blocks of data between banks of memory,but gives no other assistance in accessing information in the extended memory. In particular,arbitrary use of LONG POINTERs is not supported on the Alto.Public InterfacesUnless otherwise stated, all of the facilities in this section are defined in SegmentDefs.Configuration InformationThe Mesa runtime system has an internal data structure that contains information about thehardware configuration of the machine on which it is running. Clients may obtain a copy of thisdata structure by calling GetMemoryConfig and should normally test for the existence ofextended memory by examining the useXM field. The extant banks of memory are indicated byMemoryConfig.banks, which is a bit mask (e.g., MemoryConfig.banks=140000B impliesthat banks zero and one exist). Note that this bit mask has been expanded to allow for up tosixteen banks; constants used to test against it must be changed. pX qp]g~ri cs]pX -s7Bp ]s]p-s7Bp Ys]t-s 7Bp Sup N#sF4 Gp@ F# At# >p P <Q ;AN 9A 7 4%: 2Y 1U(v p( /D .F ,_w pxp (=t $pNv p xX }pR 4, /vp vp4 v tvp xpv tvwvp 9F x1p =d Mesa 6.0 XMesa Update2BankIndex: TYPE = [0..17B];ControlStoreType: TYPE = {Ram0, RamandRom, Ram3k, unknown};MachineType: TYPE = {unknown0, AltoI, AltoII, AltoIIXM, . . . };MemoryConfig: TYPE = MACHINE DEPENDENT RECORD [ reserved: [0..37B], AltoType: MachineType, xmMicroCode: BOOLEAN, useXM: BOOLEAN, mdsBank: BankIndex, controlStore: ControlStoreType, banks: [0..177777B], mesaMicrocodeVersion: [0..177777B]];memConfig: PUBILC READONLY MemoryConfig;GetMemoryConfig: PROCEDURE RETURNS [MemoryConfig] = INLINE BEGIN RETURN[memConfig] END;The field memConfig.useXM is true if and only if the following conditions hold:1)the machine is an Alto II with XM modifications (AltoType = AltoIIXM),2)the Alto has more than one memory bank installed (banks ~= 100000B),3)the Alto has a 3K RAM, or it has a second ROM containing an appropriate version ofthe XMesa microcode.The microcode version field tells only the microcode version, not the Mesa release number. (Forexample, for Mesa 6.0, mesaMicrocodeVersion is 41; Mesa 5.0 version 39 microcode is alsosupported, although not all features are available.)Extended Memory ManagementThe facilities described in this section can be used regardless of the state of useXM.Segments in extended memory are created with the usual primitives in SegmentDefs. However,additional "default" parameter values for those procedures that expect a VM base page numberhave been provided. DefaultMDSBase requests allocation anywhere in the MDS.DefaultXMBase requests allocation anywhere in the extended memory banks but not in theMDS. DefaultBase0, DefaultBase1, DefaultBase2 and DefaultBase3 request allocationin particular banks. DefaultANYBase requests allocation anywhere in the extended memorybanks or the MDS. DefaultBase is equivalent to DefaultANYBase if the segment is a codesegment, otherwise, it is equivalent to DefaultMDSBase.The following procedures convert between segment handles and long pointers, and work forsegments anywhere in the 20-bit address space.LongVMtoSegment: PROCEDURE [a: LONG POINTER] RETURNS [SegmentHandle]; ftG bvwFvXwv ^wFvX% [ wFvX wvwvwv X2 wFvXwFvX V T S<wv Qwv O NF! L J& GwFv w DZvwvXw BvwF v w ?dp vp6 <1vpwpvp :n2vpwpvp 8 F7 3xp xp 2)vp 04 ,_xX )pPvp %Av p $K "s{v wp( v wpA %v pv pv pv p }v wp+  v pv px /p!v p @ 9. vwvXwvwvwFvXwvw >VhGMesa 6.0 XMesa Update3LongSegmentAddress: PROCEDURE [seg: SegmentHandle] RETURNS [LONG POINTER];LongVMtoDataSegment: PROCEDURE [a: LONG POINTER] RETURNS[DataSegmentHandle];LongDataSegmentAddress: PROCEDURE [seg: DataSegmentHandle]RETURNS [LONG POINTER];LongVMtoFileSegment: PROCEDURE [a: LONG POINTER] RETURNS[FileSegmentHandle];LongFileSegmentAddress: PROCEDURE [seg: FileSegmentHandle]RETURNS [LONG POINTER];The following definitions have been added to AltoDefs; they define parameters of the extendedmemory system.MaxVMPage: CARDINAL = 7777B;MaxMDSPage: CARDINAL = 377B;PagesPerMDS: CARDINAL = MaxMDSPage+1;The following procedures convert between page numbers and long pointers, and are analogous toAddressFromPage and PageFromAddress.LongAddressFromPage: PROCEDURE [page: AltoDefs.PageNumber]RETURNS [lp: LONG POINTER];PageFromLongAddress: PROCEDURE [lp: LONG POINTER]RETURNS [page: AltoDefs.PageNumber];The following procedures check the validity of long pointers and page numbers and raise theindicated errors.ValidateVMPage: PROCEDURE [page: UNSPECIFIED];InvalidVMPage: ERROR [page: UNSPECIFIED];ValidateLongPointer: PROCEDURE [a: LONG UNSPECIFIED];InvalidLongPointer: ERROR [lp: LONG UNSPECIFIED];The signal ImmovableSegmentInXM is raised when MakeImage (or CheckPoint) discovers asegment in the extended memory banks that cannot be swapped out. (See the section onrestrictions, below, for more information about image files).Long Pointer SupportThe facilities described in this section should be used only when useXM (see above) is TRUE.XCOPY is no longer implemented; clients should use InlineDefs.LongCOPY. It may only becalled when memConfig.xmMicrocode is TRUE. ftG bvwvXwvwvwvwFvw ^vwvXwvwvwFvXw](vw YvwvwvwvX2wvwF vw TvwvXwvwvwFvXwS#8 <ECopyright c Xerox Corporation 1980Inter-Office MemorandumToMesa UsersDateOctober 27, 1980FromBruce Malasky, John WickLocationPalo AltoSubjectMesa 6.0 Debugger UpdateOrganizationSDD/SS/MesaXEROX Filed on: [Iris]Doc>Debugger60.bravo (and .press)This memo outlines changes made in the Mesa Debugger since the last release (Mesa 5.0, April 9,1979); it is intended as a concise guide to conversion, not a detailed specification of the changes.Complete documentation on the Mesa 6.0 Debugger can be found in the Mesa DebuggerDocumentation.User InterfaceThe Debugger's user interface incorporates changes made in Tajo (the Tools Environment); thewindow package Wisk has been converted to use Vista, the new window package. For morecomplete documentation on the Tajo design, see the Tajo User's Guide and the Tajo FunctionalSpecification.TypeinThe assignment of some function keys and mouse buttons has changed. The menu button is nowYELLOW (formerly BLUE). FL4 is no longer the stuff key; use FR4 (Spare2), Keyset2, or ^S. Thefollowing function keys are implemented (see the section on editing for an explanation of thefunctions):FunctionADL KeyboardMicroswitch KeyboardKeysetControl KeyCutDELDELKeyset5^CPasteLFLFKeyset1^FNextFL3(none)Keyset3^NReplaceFL4(none)Keyset4^RSwatFR1Spare3(none)(none)StuffFR4Spare2Keyset2^SBack WordBWSpare1(none)^WReplace/NextFR5(none)(none)^KTypein is directed to the Debugger if the cursor is not in any window. Source windows will acceptinput until a file is loaded; they then direct typein to the Debugger (unless they are editable; seebelow).!pX qp]g~ri cs]pX -s7Bp ]s]p-s7Bp Ys]t(-s 7Bp Sup MsF7 Gbp&9 E7- D  .v Bl p >Jt :p2* 9Twpwp# 7"vpv 6 p 2v /hpW -sp spsp!spspspsp ,0- *r &_'# & s'# 'p& '#7& '#>`&'#B&u'#$xs+s7sAp#xs+s7sAp!Yxs+p7sApxs+p7sAp xs+s7pAppcxs+s7sApxs+s7pApsx s+p7Aps p:( <( w2>d tMesa 6.0 Debugger Update2SelectionsThe selection scheme has changed. Clicking RED once selects a character, clicking twice selects aword, three times a line, etc. The selection can be extended to the left or right with BLUE; acharacter selection is extended by characters, a word selection by words, and so on. The currentselection is now video reversed.ScrollbarsScrollbars no longer occupy a dedicated part of the window, but instead come up on top of the leftedge. They are twice as wide as before, and you can "see through" them. To obtain a scroll bar,move left just past the edge of the window, then move right slightly, back into the window.Name StripeThe name stripe and tiny windows now video reverse when the cursor is in the sections thatfunction as accelerators for the window manager menu commands (Move, Grow, Size, Top,Bottom, and Zoom).MenusExcept for the change from BLUE to YELLOW, the way menus are invoked has not changed.However, some new menus and commands have been added.Standard MenusIn addition to Move, Grow, Size, Top, Bottom, and Zoom, the standard window manager menunow also includes the following command:DeactivateThis command deactivates the selected window; it will no longer appear on the screen andthe resources used by it will be freed. The window's name is added to a menu ofdeactivated windows, which is available outside all windows. The window may be madeactive again by selecting its menu item.A new Text Ops menu is now supplied with the Debug.log and source windows in addition to theWindow Manager menu. It contains Find, Position, Split, Normalize Insertion,Normalize Selection, and Wrap; the following commands are new:SplitThe Debugger's wisk window has been replaced by the more general Split windowcommand. Feedback is similar to that in Laurel: the split line can be picked up using REDand moved vertically. The subwindow is destroyed by moving the split line off the top orbottom of the (sub)window.Normalize InsertionFor windows containing an insert point (Debug.log and editable source windows), thiscommand will position the text in the (sub)window so that the line containing the insertpoint is at the top. ftG bv ^p" sp3 ](9sp [U Y Vv SX+Mesa 6.0 Debugger Update3Normalize SelectionThis command positions the text in the (sub)window so that the line containing the leftmost position of the current selection is at the top.Debugger MenuA separate Debugger menu no longer exists; the Alter Bitmap function has been deleted, MoveBoundary has been superseded by Split (see above), and Stuff It is now available only on thekeyboard.Source MenusIn addition to the standard menus, the source window has two additional menus, Source Ops andFile Ops. The Source Ops menu contains the following commands, which are unchanged: Create,Destroy, SetBreak, SetTrace, and ClearBreak; the last three commands are available onlyif a file has been loaded into the window. The Source Ops menu contains the following newcommand:AttachCauses the Debugger to ignore the creation date of the current source file when settingbreakpoints or positioning to a source line. This command is essentially a LOOPHOLE;because the source-object correspondence may not be correct, it should be used with caution.If, after using Attach, the Debugger sets breakpoints in strange places, chances are thatthe source file does not match the version of the object in the system you are debugging.The File Ops menu includes the following new commands (plus Load, which functions as before):EditEnables editing of the currently loaded read only file (see below). Empty windows arealways editable, but because they have no backing store (until they are Saved or Storedon a file), the amount of information in the window should be kept small.SaveOutputs the contents of the window to its current file; overwriting the file requiresconfirmation. A backup "$" file is created that is a copy of the unedited version. After theSave command completes, access reverts to read only.StoreOutputs the contents of the window to the file named by the current selection; if the filealready exists, overwriting it requires confirmation. After the Store command completes,access reverts to read only.ResetDiscards all edits that have been made to the window (during this session) and resets accessto read only. If the file is not editable, the window is made empty.The Edit command is available only if a file has been associated with the window (by a previousLoad, Store, or Save); Store and Save apply only if the window has been edited. ftGbx_pA]5 Zv W^p vpx p x Upxpxp T Pv Mrp&)v p Kvpv p appears in the Debug.log if you tryto Kill or Quit from the Debugger while editing a file.Caution: The editing facilities are designed not to alter the original file until it is Saved orStored, much like Bravo; the original contents are copied to a file with "$" appended to its name.This is however, a new facility and should be used with caution. It is designed to support amoderate number of localized changes to programs, not to replace your favorite document creationsystem.Debugger CommandsChanges in Debugger commands are relatively minor. The Debugger's interpreter is more generallyavailable and more consistent with the language. Tracepoints have been re-implemented as a minorextension of the standard breakpoint facilities.Old CommandsAscii/Octal ReadThe Ascii and Octal Read commands no longer automatically increment the default valueproduced by ESC.Break/Trace PointsBreak and trace points can no longer be set by typing a source line, and the Break Module andBreak Procedure commands and corresponding Trace and Clear commands have beendeleted; the menu commands must be used.The distinction between trace and breakpoints has been removed. An optional command string cannow be attached to each breakpoint which will be executed when the breakpoint is taken. Atracepoint then becomes a breakpoint with a standard default command string. LIst Breaks listsboth break and tracepoints (List Traces has been deleted). Clear All Entries/Xits clearsboth break and tracepoints. ftG bv ^p\ ](&: [@# Yspsp9Usp##TQsyp!P spMsyp/spKasypIGbsyp3 C@ xpxp Axpxp( =vtpPxp ;xpF :'@ 85+ 6 2t /hpQ -a ,0 (v %|x #pxpx p+ !Y sp  x p.x p xpxpxp A( @ H w$)x p xpxp ) P >Y)=Mesa 6.0 Debugger Update5Tracepoints automatically invoke the normal Display Stack command processor (withsubcommand p(arameters), v(ariables), or r(esults) as appropriate). The q(uit)subcommand (not b(reak)) exits to the Debugger's command level, where the normal Proceedcommand continues execution of the client.The method of specifying conditional break and tracepoints has changed; see the ATtachCondition command in the next section.When an exit break is set, the Debugger breaks on any return of the procedure by setting the actualbreakpoint on a common return instruction. The Debugger has no way of telling which return wastaken if there is more than one. When asked to display the source line when at an exit break, theDebugger now shows the declaration line of the procedure instead of the last return statement.Case On/OffThe Debugger no longer ignores case, and the case commands have been deleted; identifiers must betyped with their correct capitalization.Control DELTyping ^DEL will now abort the display of long arrays and strings, as well as most searches. Thiskey combination no longer has to be held down to be recognized.COremapThis command now prints more information about some data segments; the (system-assigned) typescurrently recognized are heap, system, frame, table, bitmap, stream buffer, and Pup buffer.Unrecognized types (assigned by the user) are displayed as data(t); an unknown type is displayedas data(?).Display Process [process]The subcommand space (SP) can now be used to invoke the interpreter.Display StackThe new subcommand "g" displays the global variables of the module containing the currentprocedure. A space (SP) invokes the interpreter. If the source window is loaded with thes(ource) subcommand, the window will remember the appropriate context for settingbreakpoints.Interpret CallThe Interpret Call command has been deleted; the Debugger's interpreter should be used.There are no longer any restrictions on when the interpreter may be called.ReSet Context [confirm]This command now requires two keystrokes, to avoid conflict with the ReMote debuggeecommand (not yet implemented on the Alto). STart [address] [Confirm]This command now requires confirmation. ftG bpH$Ix p `v xpxpxpx ^pxp(x ](p* ZK x Yp V<' TP S<^ Q'7 NFx Kp:v J#( Fx DZpzpR B? ?dx UMesa 6.0 Debugger Update6New CommandsAScii Display [address, count]Interprets address as POINTER TO PACKED ARRAY OF CHARACTER and displays count characters (eachcharacter separately, not as a string).ATtach Condition [number, condition]This command replaces old style conditional breaks; it changes a normal breakpoint into aconditional one. Arguments are a breakpoint number and a condition, which is evaluated in thecontext of the breakpoint. The breakpoint number is displayed when the break/tracepoint is set,and may also be obtained using the LIst Breaks command.ATtach Keystrokes [number, command]Arbitrary command strings can now be attached to break and tracepoints; they are executed by theDebugger when the breakpoint is taken. Arguments are a breakpoint number and a commandstring terminated with a CR. A CR can be embedded in the command string by quoting it with ^V.ATtach Loadstate [filename]Like ATtach Image, except that the initial rather than the current loadstate of the image file isused; this command is for wizards only.Break All Entries/Xits [module]This new command is the same as Trace All Entries/Xits, except that breakpoints are set.CLear Break [number]This command clears breakpoints by number. Typing CR in place of a number will clear thecurrent breakpoint, i.e., the one that transferred control into the Debugger.CLear Condition [number]This command changes a conditional breakpoint into a normal one. Typing CR in place of anumber behaves as in CLear Break.CLear Keystrokes [number]This command clears any command string associated with the breakpoint. Typing CR in place of anumber behaves as in CLear Break.LOgin [user, password]This command sets the default user name and password for the debugging session. The new username and password are not written into the client's core image or onto the disk.ReMote Debugee [host]This command is not implemented on the Alto.Trace StackThis command is used when the Debugger breaks and enters the debugger nub ("//" mode); itdumps the Debugger's call stack in octal to the log. Change requests reporting Debugger problemsthat result in an uncaught signal or other problem should be accompanied by a Debug.log whichincludes the output of this command. ftG bv ^xtxtx \Tp tps p tp Z' W^xtxtx Tp@ S<C QF O#x p Lxtxtx J#p\ H|B Fzpzp6zp Cxtx A px p C ?d' <xtx 9pxp" 6Kx tx 3p 'zp$ 2)M .xtx ,_pIzp *x p 'ixtx $p6zp #Gx p xtxtx }p@ P xtx  p, x CpLxp (9 Cxp M$ =]*Mesa 6.0 Debugger Update7InterpreterThe interpreter provides support for all of the new language features introduced in Mesa 6. Allcommands requiring numeric input now invoke the interpreter automatically (e.g., Octal Read:@p, n: SIZE[r]).GrammarA summary of the revised grammar is attached. The constructs ABS, ERROR, LONG, LOOPHOLE, MAX,MIN, NIL, POINTER TO, PROC, PROCEDURE, SIGNAL, WORD, and open and half open intervals have beenadded to the interpreter's grammar; type REAL has been added for output only. Type expressionsfollowing % must be enclosed in parentheses. The interpreter syntax Expression? has replacedthe Interpret Expression command; it prints the value of the expression in several formatsincluding octal and decimal.Target TypingThe interpreter now does a much better job of target typing. As a result, arguments to procedurecalls and right hand sides of assignments are type checked. In addition, assignments to enumeratedtypes now work correctly.The interpreter also does a better job of determining signed/unsigned representation. For example,any octal number is assumed to be unsigned.Symbol Lookup Even if a module has compressed symbols, the debugger will first look for the filemodulename.bcd to see if it is the original compiler output for that module (by checking theversion stamp). If so, it will use those symbols. Thus, there is no need to Attach Symbols if theproper file is on the disk. It makes sense to use compressed symbols for large systems and to alsohave present the complete symbol files for the specific modules undergoing detailed debugging. Output ConventionsIn display stack mode, variables declared in nested blocks are now shown indented according totheir nesting level.A "?" in a variable display now uniformly means that the value is out of range; ". . ." indicatesthat there are additional fields present which cannot be displayed due to lack of symbol tableinformation.When the debugger refers to a program module, it usually gives the address of its global frame, e.g.,"G: nnnnnB". If the module has not been started, the debugger now prints a "~" after the B. If amodule has not been started, the user should not modify the global variables of that module, norshould they be displayed, as they are uninitialized.New Error MessagesThe warning Eval stack not empty! will be printed if the debugger is entered via either aninterrupt or a breakpoint with variables still on the evaluation stack; this indicates that the currentvalue of some variables may not be in main memory, where the interpreter normally looks.Exceptions to this are at entry and exit breaks; the debugger has enough information to decode the ftG b ^pS ](Px [ p X2v Tp#spspspspsp S  M xpOxp [&vp 4 t Cp xp .9 < M(: v >]<Mesa 6.0 Debugger Update8argument records that are on the stack in this case (if the appropriate symbol tables are available).Before the debugger permits any breakpoints to be set using the source window, the creation date inthe source file is checked against the corresponding date recorded by the compiler in the BCD. Themessage Can't use of