Xo~ BLS32047.BG+ BLS32047.B_BACKUP/COMMENT=VAX BLISS-32 Binary Kit/INTERCHANGE/LOG/VERIFY BLISS$:[BLISS32.V047.COMMON]ADDBLS.HLP;,BLISS32$IVP.*;,BLISS.HLP;,BLISS32.EXE;,BLISS.CLD;,CONDIT.R32;,EZIO.DOC;,EZIO32.B32;,EZIO32.OBJ;,FINDREQ.COM;,LIBCOMP.COM;,MODULE.BLI;,NOTIFY.COM;,TUTIO.DOC;,TUTIO.R32;,TUTIO.RNO; BLISS$:[SACKS.WORK]BLS32047.B/LABEL=(BLISS)/SAVE/NOASSIST/IGNORE=LABELVAX BLISS-32 Binary Kit SACKS ` iV6.0 _HANOI::  _$1$DUA23: V6.0 ~ !*[BLISS32.V047.COMMON]ADDBLS.HLP;5+,./ 4U-+0123KPWO56XP7=89`vfGHJx2 Alphabetic_language_topics 3 %ALLOCATIONF ALLOCATION(data-segment-name) Returns the number of storage units6 allocated in the data segment for the specified name. Examples: GLOBAL X, Y: BYTE, Z: VECTOR[10];- Function Expansion+ %ALLOCATION(X) %UPVAL % %ALLOCATION(Y) 1- %ALLOCATION(Z) %UPVAL*103 %ASCICF For BLISS-32 the %ASCIC string-type augments an ASCII string ofF quoted characters by counting the characters in the string and usingF the 8-bit integer count as the initial preceding 'character' of the. string. The following is a BLISS-32 example:6 31 06 BIND -----------------= ADDR = %ASCIC'AB'; | | B | A | 2 | ADDR:6 -----------------3 %ASCIDF The %ASCID string-type augments the %ASCII type by creating aF string-descriptor for the quoted-string and expanding to the addressF of the data segment containing the descriptor. The following is a BLISS-32 example:2 31 02 BIND -----------------9 ADDR = %ASCID'AB'; | | | B | A | P.AAA:2 ----------------- The descriptor is:2 31 24|23 16|15 02 ----------------------------------------8 | class 1 | dtype 14 | string length 2 | ADDR:2 ----------------------------------------2 | character pointer (P.AAA) |2 ----------------------------------------F The string and descriptor are allocated in a plit program sectionF (PSECT), and just as the value of a plit is the address of the plit< body, the value of %ASCID is the address of its descriptor.3 %ASCIZF The %ASCIZ string-type augments an ASCII string of quoted charactersF by adding a trailing null character (ASCII code 0) to the string.% The following is a BLISS-32 example:6 31 06 BIND -----------------< ADDR = %ASCIZ'AB'; | | 0 | B | A | ADDR:6 ----------------- 3 %ASSIGNF %ASSIGN(compiletime-name, ctce) Assigns the ctce value as the new) value of the specified compiletime name. Example: BEGIN ... COMPILETIME ERRS = 0; MACRO/ COUNT_ERROR = %ASSIGN(ERRS,ERRS+1) %; ... ENDC The first declaration declares ERRS a COMPILETIME name. The secondC declaration declares COUNT_ERROR as a macro name. When COUNT_ERROR/ is called it expands to: %ASSIGN(ERRS,ERRS+1).3 %BLISSF %BLISS(language-name) Returns a literal 1 if the specified nameF corresponds to the type (dialect) of compiler processing the module; otherwise returns a 0. Examples:. Function Expansion/ %BLISS(BLISS32) 1 (32)/ %BLISS(BLISS36) 0 (32)3 %CHARF %CHAR (ctce ,...) Returns a quoted-string formed by interpreting theF numeric value of each ctce as a single ASCII character code, and, concatenating the corresponding characters. Example:5 Function Expansion6 %CHAR(65,66,67,39,97,98,99) 'ABC''abc' 3 %CHARCOUNTF %CHARCOUNT (string-param ,...) Evaluates string-parameters as forF %STRING, and returns a numeric-literal equal to the count of( characters within the resulting string. Example:4 Function Expansion. %CHARCOUNT('A''C',23) 53 %COUNTF Returns the recursion depth within a conditional-macro, or the number3 of completed iterations within an iterative-macro. Example:? MACRO !conditional-macro CASEGEN(INDEX)[] = BEGIN= MACRO !iterative-macro! CASELINE[ACTION] =- [%COUNT]: ACTION %QUOTE %;, CASE INDEX FROM 0 TO %LENGTH-2 OF# CASELINE(%REMAINING) END %; ...= CASEGEN(.I,Q1,Q2,Q3); !call on conditional-macro ...2 The expansion of the nested iterative-macro is: BEGIN CASE .I FROM 0 TO 4-2 OF SET [0]: Q1; [1]: Q2; [2]: Q3 TESF Note in the expansion, that %COUNT returned the iterations (3) forF the CASE structure; %LENGTH returned the number of actual-parametersF (4) in the call; %REMAINING returned the number of unusedF actual-parameters from the call (in this case 0). Note also, that> %QUOTE on % prevented premature termination of the expansion.3 %CTCEF %CTCE(expression) Returns the literal 1 if the parameter is a9 compile-time-constant-expression; otherwise returns a 0. Examples: OWN X: REF VECTOR, Y: VECTOR[10]; EXTERNAL LITERAL A; LITERAL V = 100;1 Function Expansion- %CTCE(X,Y) 0- %CTCE(A) 0- %CTCE(V) 1- %CTCE(A,V) 0 3 %DECLAREDF %DECLARED(name) Returns a literal 1 if the specified name is8 user-declared (not predeclared); otherwise returns a 0. Examples: OWN A, B; ... UNDECLARE B;0 Function Expansion, %DECLARED(A) 1, %DECLARED(B) 03 %ERRORF %ERROR(string-param ,...) Produces an error diagnostic from the= parameters, as for %STRING, and adds one to the error count. Example: %IF NOT %BLISS(BLISS32) %THEN, %ERROR('YOU HAVE THE WRONG COMPILER'); 3 %ERRORMACROF %ERRORMACRO(string-param ,...) Produces an error diagnostic from theF parameters, as for %STRING, adds one to the error count, and( terminates all active macro expansions. Example: MACRO AVG_TWO(I,J)[]=$ %IF NOT(%LENGTH MOD 2) %THEN I =(.I*.J)/2;% AVG_TWO(%REMAINING) %ELSE8 %ERRORMACRO('Odd number of arguments') %FI %;3 %EXACTSTRINGF %EXACTSTRING (length, fill, string-param ,...) Returns aF quoted-string as formed by %STRING, but truncated or extended on theB right as specified by the fill-ctce value (interpreted as %CHAR). Example:4 Function Expansion4 %EXACTSTRING(6,%C'9','ABC') 'ABC999'3 %EXITITERATION 3 %EXITMACROF The %EXITMACRO function terminates the expansion of a macro-call.F The %EXITITERATION function terminates the expansion of the currentF iteration of an interative macro-call; however, if the expansion isE noniterative, the function is equivalent to the %EXITMACRO function. Example: MACRO AVG_TWO(I,J)[]=$ %IF NOT(%LENGTH MOD 2) %THEN I = (.I*.J)/2;% AVG_TWO(%REMAINING) %ELSE4 %INFORM('ODD NUMBER OF ARGUMENTS') %EXITMACRO %FI %;F If an odd number of arguments is passed to the call, expansion isF terminated (%EXITMACRO). Note that because a %INFORM is usedF (instead of %ERRORMACRO), the error indicator is not incremented and an object module is produced. 3 %EXPANDF The following shows the effect on expansion of using the %EXPAND! function with Q1(Q2) in Macro 1:3 Function Expansion0 %EXPAND Q1(Q2) 1,21 %EXPAND Q1(%QUOTE Q2) 1,20 3 %EXPLODEF %EXPLODE (string-param ,...) Forms an intermediate quoted-string fromF string-parameters, as for %STRING, and returns a comma separated listF of quoted-strings, each consisting of a single character of the1 intermediate string (in corresponding sequence).C Example: 4 Function ExpansionA %EXPLODE('ABC,%O'77') 'A','B','C','6','3' (9 lexemes) 3 %FIELDEXPANDF %FIELDEXPAND(field-name {,ctce}) Optionally returns the nthF field-component value of field-name, where n is specified by ctce asF n-1. If ctce is null, all of the field-component values of the3 field-name are returned in a comma separated list.r Examples: FIELDS DCB_FIELDS = SET  DCB_A = [0,8,3,0]0 DCB_B = [0,11,5,1],  DCB_C = [0,16,8,1] TES;3 Function Expansion 2 %FIELDEXPAND(DCB_A) 0,16,8,1, %FIELDEXPAND(DCB_B,1) 11+ %FIELDEXPAND(DCB_C,3) 1 3 %HOSTuF %HOST(parameter[,parameter]) Returns the literal 1 if the parametersF represent the host architechture and operating system; otherwise a 0 is returned. Examples:4 Function Expansion0 %HOST(VAX) 10 %HOST(VMS) 10 %HOST(VAX,VMS) 10 %HOST(ALPHA,OSF) 03 %IDENT) %IDENT Returns the current module ident. 3 %IDENTICALF %IDENTICAL(parameter,parameter) Returns the literal 1 if, after aF macro-call, the two parameters are evaluated as identical lexeme& sequences; otherwise a 0 is returned. Examples:4 Function Expansion0 %IDENTICAL(,) 10 %IDENTICAL(A+B,A+B) 10 %IDENTICAL(3,%CHARCOUNT('ABC')) 10 %IDENTICAL(ALPHA,alpha) 10 %IDENTICAL(%O'77',63) 10 %IDENTICAL('ALPHA','alpha') 00 %IDENTICAL(32,'32') 0 3 %INFORM F %INFORM(string-param ,...) Produces an informational diagnostic from the parameters, as for %STRING. Example:' %IF %SWITCHES(DEBUG) %THEN # %PRINT('DEBUG SWITCH ON')- %ELSE / %INFORM('DEBUG SWITCH NOT ACTIVATED')s %FI 3 %ISSTRING F %ISSTRING(exp ,...) Returns the literal 1 if all of the expressions) are string-literals; otherwise return 0. Examples:2 Function Expansion. %ISSTRING('ALPHA','BETA') 1. %ISSTRING('ALPHA',BETA) 0 3 %LENGTH9 Returns the number of actual-parameters in a macro-call.N3 %LTCEF %LTCE(expression) Returns a literal 1 if the parameter is a6 link-time-constant-expression; otherwise returns a 0. Examples: OWN X: REF VECTOR, Y: VECTOR[10]; EXTERNAL LITERAL A;a LITERAL V = 100;/ Function Expansion , %LTCE(X,Y) 1, %LTCE(X+A) 1, %LTCE(X[0]) 0, %LTCE(X[9]) 1, %LTCE(V) 1 3 %MESSAGEF %MESSAGE(string-param ,...) Produces a message from the parameters,& as for %STRING, for terminal display. Example:# %MESSAGE('text for terminal') 3 %MODULEb) %MODULE Returns the current module name. 3 %NAMEaF %NAME (string-param ,...) Returns the name formed by the charactersC represented by the string-parameters (interpreted as for %STRING).s Example:a0 Function Expansion. %NAME('302',beta) 302BETA3 %NBITSF %NBITS(ctce ,...) Returns the minimum number of bits needed toF represent any of the ctce parameters interpreted as signed integers in a sign-extended field. Examples:0 Function Expansion, %NBITS(0) 1, %NBITS(2) 3, %NBITS(1,7) 4, %NBITS(-8) 4, %NBITS(255) 9, %NBITS(0,1,255,2,3) 9 3 %NBITSU F %NBITSU(ctce ,...) Returns the minimum number of bits needed toF represent any of the ctce parameters interpreted as unsigned integers in a zer-extended field.S Examples:/ Function ExpansionS+ %NBITSU(0) 0d+ %NBITSU(2) 2u+ %NBITSU(1,7) 3a0 %NBITSU(-8) %BPVAL+ %NBITSU(255) 8e+ %NBITSU(0,1,255,2,3) 8l3 %NULLF %NULL(parameter ,...) Returns the literal 1 if all of the specified0 parameters are null; otherwise a 0 is returned. Examples:5 Function Expansiont1 %NULL() 11 %NULL(,ALPHA) 0 3 %NUMBEREF %NUMBER(number-param) Returns a numeric-literal formed from the valueF represented by the parameter, which must be a numeric-literal, aF literal-name, or a quoted-string of decimal-digits with an optional sign. Examples:/ Function Expansionm+ %NUMBER('-180') -180 ) %NUMBER(83) 83 ) %NUMBER(%O'100') 64 * %NUMBER(Q) -163 %PF For BLISS-32 only, the %P string-type uses VAX packed decimal-stringF encoding to provide a 1-byte sequence for every pair of digits in theF string. The arrangement also provides for a sign position in theF last byte, and leading zeros are not discarded. A BLISS-32 example is:8 31 08 BIND ---------------------> ADDR = %P'-1236847'; | 7D | 84 | 36 | 12 | ADDR:8 ---------------------A The "D" in the last byte represents the minus sign (decimal 13).cF With the exception of the optional sign (default is +), a %P string. must not contain more than 31 decimal digits.3 %PRINTF %PRINT(string-param ,...) Produces a line for the listing file from the parameters, as for %STRING. Example:R %IF %SWITCHES(DEBUG) %THEN # %PRINT('DEBUG SWITCH ON')S3 %QUOTEF The %QUOTE function prevents a name from being bound and aF lexical-function or macro-call from expanding. The %UNQUOTE functionF forces a name to be bound and prevents expansion. The %EXPAND9 function forces a name to be bound and allows expansion.A Example:'. Macro 1 | Macro 2 |c* MACRO | ROUTINE R =( Q1(P) = 1,P %, | BEGIN( Q2 = 2 %, | MACRO= X = Q1(Q2) %; | %QUOTE Q1(X) = 10,X %, 8 | %QUOTE Q2 = 20 %;' | BINDA= | Y = UPLIT(%STRING(X)); F Within the Macro 2 BIND declaration, the call on X expands to 10,20.F This is due to the %QUOTE functions, which prevent Q1 and Q2 fromF being interpreted as calls on Macro 1 which, if allowed, would result5 in the following erroneous expansion within Macro 2:d MACRO  1,X = 10,X %,e 2 = 20 %;tF Normally, this expansion would occur because Q1 and Q2 areF macro-names at the name-quote level (Refer to Section 15.2.1 in the BLISS Language Guide.)s 3 %QUOTENAMEF %QUOTENAME (string-param ,...) Similar to %NAME, the exception beingF that the resultant name is implicitly quoted (as with %QUOTE) to prevent macro-expansion. Example:( MACRO %NAME('A_',%NUMBER(COUNT)) = ...E4 %IF %DECLARED(%QUOTENAME('A_',%NUMBER(COUNT))) 3 %RAD50_10sF For BLISS-36 only, the %RAD50_10 string-type packs a sequence of sixF RADIX50_10 character encodings into a 36-bit word. If the string isF less than six characters, you must add leading blanks to assure aF multiple of six. For example, to encode the quoted-string 'ABCD' twoF blanks must first be added (that is, %RAD50_10' ABCD'). This produces:0 D (first encoding) = 0000000000160 C (second encoding) = 0000000010100 B (third encoding) = 0000000454000 A (fourth encoding) = 0000025370000 blank (fifth encoding) = 0000000000000 blank (sixth encoding) = 0000000000000 ------------8 %RAD50_10' ABCD' = 000002605426 (octal)F A %RAD50_10 string may only consist of characters A - Z, 0 - 9,, blanks, periods, dollars, or percent signs. 3 %RAD50_116F For BLISS-32 only, the %RAD50_11 string-type packs a sequence ofF three RADIX50_11 character encodings into a 16-bit word. If theF string is less than three characters, you must add trailing blanks toF assure a multiple of three. For example, to encode the quoted-stringF 'AB' a blank must first be added (that is, %RAD50_11'AB '). This produces:* A (first encoding) = 003100* B (second encoding) = 000120* blank (third encoding) = 000000* ------2 %RAD50_11'AB ' = 003220 (octal)F A %RAD50_11 string must only contain characters A - Z, 0 - 9, blanks, periods, or dollar signs.3 %REFF The %REF function provides temporary storage for the value of anF actual-parameter in a routine call or executable function. As anF example, assume you desire the simplest way to pass the address of aF value (.X+1) to a routine (F). You might try either of the following calls:0 ---------3 LOCAL | 5| X: 0 T:INITIAL(.X+1); ---------0 ... ---------3 Y = F(T); | 6| T:t0 --------- or:0 ---------6 Y = F(%REF(.X+1)); | 6| TEMP:0 ---------F The %REF expression provides the simpler solution by passing aF temporary address (TEMP) to routine F that contains the value (6) required for calculation. 3 %REMAININGF Returns a comma-separated list of macro-call actual-parameters thatF have not, as yet, been associated with formal parameters during an expansion.f 3 %REMOVEaF %REMOVE (parameter) Returns the indicated parameter after removingF any enclosing (beginning and ending) matched pair of parenthesesF (...), square brackets [...], or angle brackets <...>, from the parameter.; Examples:0 Function Expansion. %REMOVE([R(A+1)]) R(A+1)+ %REMOVE((A+B)) A+BL/ %REMOVE((A)+(B)) (A)+(B)( 3 %REQUIREF %REQUIRE quoted-string Unlike a require-declaration, a5 require-function can appear as a module-head switch.% Example:g0 MODULE A(%TITLE 'SETMODES' IDENT = '1 - 1'# %REQUIRE('ADDMOD')p ) = BEGIN ... END ELUDOMt Restrictions:F o During the expansion of a required file (function orF declaration), a fatal error will occur it the end of the file is1 found while a macro is still being declared. F o A required file (function or declaration) must not appear during" the the expansion of a macro. 3 %ROUTINE+ %ROUTINE Returns the current routine name.e3 %SBTTLF %SBTTL quoted-string Incorporates the quoted-string into the subtitle$ portion of the listing page header. Example: & %SBTTL('on second line of page') 3 %SIXBIT F For BLISS-36 only, the %SIXBIT string-type provides a sequence ofF 6-bit encodings for each ASCII character in the string and, ifF necessary, fills the final fullword with trailing zeros. For example:3? 0 35m? BIND -------------------------------pE ADDR = %SIXBIT'A38D'; | 41 | 23 | 30 | 44 | 20 | 20 | ADDR:? -------------------------------F A %SIXBIT string must not contain a tab, brace ({}), accent grave% (`), tilde (~), or vertical bar (|). 3 %SIZE F %SIZE(structure-attribute) Returns the number of storage unitsF allocated for a data structure declared with the specified structure-attribute. Examples: GLOBAL X, Y: BYTE, Z:VECTOR[10];u- Function Expansion - %SIZE(VECTOR[10]) %UPVAL*10o& %SIZE(VECTOR[10,WORD]) 20* %SIZE(REF VECTOR) %UPVAL 3 %STRING F %STRING (string-param ,...) Returns a single quoted-string formed byF concatenating the characters represented by each string-parameter.F Each string-parameter, after evaluation, must result in a< quoted-string, a name, a numeric-literal, or a null lexeme. Example: 4 Function Expansion2 %STRING(23,%B'-111') '23-7' 4 Parameters= Each string-parameter is restricted to one of the following: $ 1. A fullword numeric-literal:$ unsigned decimal-literal integer-literalo" character-code-literal! 2. An ASCII string-literal:a quoted-string ! %ASCII string-literalt! %ASCIZ string-literalr! %ASCIC string-literal 2 3. An identifier (exclude reserved keywords) 4. An empty sequenceF For expansion, depending on the type of lexeme, modify each parameter as follows:C o If the parameter is a quoted-string, remove the initial"% and the final characters.sD o If the parameter is a string-literal with a string-type,> process the string-type, add a leading or trailing@ character position, and remove the initial and final quote characters.r@ o If the parameter is a numeric-literal, represent its> value as a standard numeric-literal (a positive or< negative decimal value not beginning with zero).E o If the parameter is a name, change all lower-case lettersu to upper-case.B o If the parameter is an empty sequence, leave it as is. 3 %SWITCHESoF %SWITCHES(on-off-switch-name) Returns a literal 1 if all theF specified on-off-switch names match the current on-off-switchF settings; otherwise returns a 0. See, also BLISS' Alpha(betic_Language_Topics) SWITCHES. Examples: SWITCHES OPTIMIZE, NOCODE; / Function Expansion;+ %SWITCHES(OPTIMIZE) 1 + %SWITCHES(OPTIMIZE,NOCODE) 1%+ %SWITCHES(OPTIMIZE,CODE) 0a 3 %TARGET F %TARGET(parameter[,parameter]) Returns the literal 1 if theF parameters represent the target architechture and operating system; otherwise a 0 is returned. Examples:4 Function Expansion0 %TARGET(VAX) 10 %TARGET(VMS) 10 %TARGET(VAX,VMS) 10 %TARGET(ALPHA,OSF) 03 %TITLEF %TITLE quoted-string Incorporates the quoted-string into the title$ portion of the listing page header. Example:m# %TITLE('on top line of page')E 3 %UNQUOTEF The following shows the effect on expansion of using the %UNQUOTE. function with Q1(Q2) in Macro 1 (See %QUOTE):4 Function Expansion2 Q1(%UNQUOTE Q2) 10,22 %UNQUOTE Q1(Q2) 1,201 %UNQUOTE Q1(%UNQUOTE Q2) 1,2u 3 %VARIANTF Returns a numeric-literal representing the setting of the /VARIANT% switch in the compiler command line.u Examples:; Function Command-Line Expansion 7 %VARIANT - 0c7 %VARIANT /VARIANT 1d7 %VARIANT /VARIANT{:n | =n} n 3 %WARN0F %WARN(string-param ,...) Produces a warning diagnostic from the? parameters, as for %STRING, and adds one to the warning count. Example:- %IF %BLISS(BLISS32)D %THEN - %IF %NULL(A) OR %NULL(B) OR %NUL(C)a %THEN ' %WARN('MISSING ARGUMENT')p 3 BUILTINsF In BLISS, certain names are both predefined and predeclared (such asF ABS) and can, therefore, be used without explicit declaration;F however, names that are predefined only (such as register names) must& be declared by a BUILTIN declaration.5 Syntax | Exampleo& |C BUILTIN name ,... ; | ROUTINE BETA_AV(EXPECTED) =r1 | BEGINo3 { register-name } | BUILTIN < name { machine-specific-function } | ACTUALCOUNT,@ { linkage-function } | ACTUALPARAMETER;/ | ...a0 | END;F All builtin names available to BLISS are defined as such in Appendix A of the BLISS Language Guide.e 4 ACTUALCOUNTiF ACTUALCOUNT() returns the number of actual-parameters passed to theF routine using STANDARD (non-register) parameter-locations. TheF function must be declared BUILTIN within a routine whoseF linkage-attribute is defined by a CALL (32) or F10 (36) type;F consequently, the allowed predeclared linkages are: BLISS (32),> FORTRAN (32) , FORTRAN_SUB (32,36), and FORTRAN_FUNC (32,36).F The following block uses the function to allow its routine to accept any number of parameters: BEGIN BUILTIN; ACTUALCOUNT,T ACTUALPARAMETER;  LOCAL L : INITIAL (0);' INCR I FROM 1 TO ACTUALCOUNT() DOr* L = .L + ACTUALPARAMETER (.I ); .L/ACTUALCOUNT() END;4 ACTUALPARAMETERF ACTUALPARAMETER(i) returns the ith actual-parameter passed to theF routine using STANDARD (non-register) parameter-locations. TheF function must be declared BUILTIN within a routine whoseF linkage-attribute is defined by a CALL (32) or F10 (36) type;F consequently, the allowed predeclared linkages are: BLISS (32),= FORTRAN (32), FORTRAN_SUB (32,36), and FORTRAN_FUNC (32,36).tF The following block uses the function to allow its routine to accept any number of parameters: BEGIN BUILTIN ACTUALCOUNT, ACTUALPARAMETER; LOCAL L : INITIAL (0);' INCR I FROM 1 TO ACTUALCOUNT() DOo* L = .L + ACTUALPARAMETER( .I ); .L/ACTUALCOUNT() END; 4 ADAWI(32)u% ADAWI - Add Aligned Word Interlocked ! ADAWI (SRCADDR, DSTADDR)  Parameters: ? SRCADDR Address of a word whose contents are added ' to the destination@ DSTADDR Address of a word to which the source is to? be added. The address must be word alignedc9 (that is, the low bit must be zero).t Result:r Contents of the PSL4 ADDD ADDD - Add D-Floating Operandsu" ADDD (SRC1A, SRC2A, DSTA) Parameters:%A SRC1A Address of a double-precision floating points0 quadword used as the addendA SRC2A Address of a double-precision floating pointT0 quadword used as the augendB DSTA Address of a quadword where the sum is stored Result:r NOVALUE4 ADDF ADDF - Add F-Floating Operands " ADDF (SRC1A, SRC2A, DSTA) Parameters:rA SRC1A Address of a single-precision floating point 0 longword used as the addendA SRC2A Address of a single-precision floating point 0 longword used as the augendB DSTA Address of a longword where the sum is stored Result:t NOVALUE 4 ADDG(32) ADDG - Add G-Floating Operandsr" ADDG (SRC1A, SRC2A, DSTA) Parameters:h< SRC1A Address of an extended double-precision? floating point quadword used as the addend< SRC2A Address of an extended double-precision? floating point quadword used as the augendaB DSTA Address of a quadword where the sum is stored Result:) NOVALUE 4 ADDH(32) ADDH - Add H-Floating Operands " ADDH (SRC1A, SRC2A, DSTA) Parameters:sE SRC1A Address of an extended-exponent double-precisionr? floating point octaword used as the addenduE SRC2A Address of an extended-exponent double-precisionl? floating point octaword used as the augend C DSTA Address of an octaword where the sum is storeda Results: NOVALUE4 ADDM ADDM - Add Multiword Operands( ADDM (SIZE, SRC1A, SRC2A, DSTA) Parameters:c@ SIZE Compile-time-constant expression indicatingA the size of the operands in longwords (BLISSd! value units)-? SRC1A Address of extended multiprecision integerr' used as the addendx? SRC2A Address of extended multiprecision integern'  \i~ BLS32047.B+![BLISS32.V047.COMMON]ADDBLS.HLP;5U|= used as the augenddD DSTA Address of the sum of source one and source two Result:m NOVALUE4 ARGPTRF ARGPTR() returns the address of the argument block of a routine-call.F The function must be declared BUILTIN within a routine whoseF linkage-attribute is defined by a CALL (32) or F10 (36) linkage-type;F consequently, the allowed predeclared linkages are: BLISS (32),= FORTRAN (32), FORTRAN_SUB (32,36), and FORTRAN_FUNC (32,36).aF In some cases the argument block address passed in the argumentF pointer register may not be left in the same register throughout theF execution of the called routine. In BLISS-36, for example, this isF usually done in the code compiled for a routine with the F10F linkage-type that calls another routine that also has the F10F linkage-type. The ARGPTR function provides a compatible means to3 obtain the argument block address in all dialects. 4 ASHP) ASHP - Arithmetic Shift and Round PackedT= ASHP (SCALE, SRCLEN, SRCADDR, ROUND, DSTLEN, DSTADDRO) [;OUT0, OUT1, OUT2, OUT3])  Parameters: A SCALE Address of a byte whose contents specify theCC scale count by a power of 10 (a positive countRB effectively multiplies while a negative countF divides, a zero count moves and affects condition codes)eA SRCLEN Address of a byte whose contents specify thep= length of the source string to be scaled B SRCADDR Address of a quadword containing the quantity! to be scaledRA ROUND Address of a byte whose contents specify thenE decimal round operand (only used when a negativet( count is specified)A DSTLEN Address of a byte whose contents specify thef? length of the destination string where the + result is to be stored B DSTADDR Address of a quadword where the scaled result$ is to be stored Output Parameters:1 OUT0 value returned in R0 is zero ? OUT1 value returned in R1 is the address of then@ byte containing the most significant bit of& the source string1 OUT2 value returned in R2 is zero ? OUT3 value returned in R3 is the address of theA@ byte containing the most significant bit of+ the destination string- Results: NOVALUE 4 ASHQ(32) ASHQ - Arithmetic Shift QuadS' ASHQ (SHIFT, SRCADDR, DSTADDR) Parameters: = SHIFT Address of a byte whose contents specifyN$ the shift countB SRCADDR Address of a quadword containing the quantity" to be shiftedC DSTADDR Address of a quadword where the shifted resultp$ is to be stored Result:e Contents of the PSL 4 BICPSW(32) BICPSW - Bit Clear PSWt BICPSW (MASKADDR) Parameters: ? MASKADDR Address of a word whose contents are to be = ones complemented and ANDed into the PSW Result:  NOVALUE 4 BISPSW(32) BISPSW - Bit Set PSW  BISPSW (MASKADDR) Parameters:f? MASKADDR Address of a word whose contents are to be & ORed into the PSW Result:  NOVALUE4 BPT BPT - Breakpoint Trap BPT ()  Parameters:n None Result:c NOVALUE 4 BUGL(32)" BUGL - Bugcheck with Long Operand BUGL (ARG)e Parameters:a? ARG Link-time constant expression (LTCE) to be)C interpreted by the bugcheck exception handling  codeo Result:t NOVALUEC The following example based on the DISPAT module in the F11ACP:d BUILTIN  BUGW EXTERNAL LITERAL! BUG$_UNXSIGNAL;i ......* BUGW( BUG$_UNXSIGNAL or 4 ); generates the code sequence:# .EXTRN BUG$_UNXSIGNALT ...... BUGW# .WORD BUG$_UNXSIGNAL!4OD The inline generation of this code eliminates the need to create* a PLIT containing hand-assembled code. 4 BUGW(32)" BUGW - Bugcheck with Word Operand BUGW (ARG)  Parameters: > ARG Link-time constant expression (LTCE) word< value to be interpreted by the bugcheck, exception handling code Result:  NOVALUE 4 CALLG(32)e) CALLG - Call with General Parameter ListS+ CALLG (ARGLIST, RTN [; OUT0, OUT1])n T Input Parameters: fA ARGLIST Address of the parameter list to be placed inaA the parameter pointer (AP) register (must not 7 be a register name or a %REF value) 7 RTN Address of the routine to be called   Output Parameters:E ( OUT0 Value returned in R0 (( OUT1 Value returned in R1 Result:A5 Same as result of the routine that is calledSF Note that this function does not interact with any linkage attributeF information that may be associated with the second parameter. ItF must be used only to call a routine with a standard VAX/VMS linkage! (BLISS and FORTRAN in BLISS-32).( 4 CHMx(32) CHMx - Change Mode)9 CHME (ARG) ! Change Mode to ExecutiveA6 CHMK (ARG) ! Change Mode to Kernel: CHMS (ARG) ! Change Mode to Supervisor4 CHMU (ARG) ! Change Mode to User Parameters: > ARG Address of a word whose contents are used( as a parameter code Result:d NOVALUE 4 CMPC3(32) % CMPC3 - Compare Characters 3 Operandm? CMPC3 (LENA, SRC1A, SRC2A [; OUT0, OUT1, OUT2, OUT3]))  Input Parameters: 8 LENA Address of a word containing the byte6 comparison lengths for string 1 and string 2l2 SRC1A Address of the base of string 12 SRC2A Address of the base of string 2 Output Parameters:> OUT0 Value returned in R0 is the number of bytesA remaining in string 1 (including the byte thatAA terminated the comparison); R0 is zero only if)( the strings are equalB OUT1 Value returned in R1 is the address of the byteA in string 1 that terminated the comparison; ife@ the strings are equal, R0 contains an address4 equal to one byte beyond string 11 OUT2 Value returned in R2 equals R0B OUT3 Value returned in R3 is the address of the byteA in string 2 that terminated the comparison; if@ the strings are equal, R3 contains an address4 equal to one byte beyond string 2 Result:u( -1 SRC1A less than SRC2A' 0 SRC1A equal to SRC2A + 1 SRC1A greater than SRC2Ag 4 CMPC5(32) % CMPC5 - Compare Characters 5 OperandhE CMPC5 (SRC1LENA, SRC1A, FILLA, SRC2LENA, SRC2A [;OUT0, OUT1,  OUT2, OUT3])  Input Parameters: > SRC1LENA Address of a word containing the length of string 13 SRC1A Address of the base of string 1lC FILLA Address of a word containing a byte fill value, B which extends the shorter string to the length! of the longerS> SRC2LENA Address of a word containing the length of string 23 SRC2A Address of the base of string 2n Output Parameters:? OUT0 Value returned in R0 is the number of bytes B remaining in string 1(including the byte whichA terminated the comparison); R0 is zero if the F strings are of equal value and length or if stringD 1 was exhausted before the comparison terminatedC OUT1 Value returned in R1 is the address of the bytenE that terminated the comparison; if the comparisontC did not terminate before string 1 was exhausteddC R1 contains an address equal to one byte beyondh string 1? OUT2 Value returned in R2 is the number of bytesaB remaining in string 2 (including the byte thatA terminated the comparison); R0 is zero if thelF strings are of equal value and length or if stringD 2 was exhausted before the comparison terminatedF OUT3 Value returned in R3 is the address of the byte inD string 2 that terminated the comparision; if theD comparison did not terminate before string 2 wasB exhausted, R3 contains an address equal to one( byte beyond string 2 Result: ) -1 SRC1A less than SRC2Ad( 0 SRC1A equal to SRC2A, 1 SRC1A greater than SRC2A4 CMPD# CMPD - Compare D-Floating Operandss CMPD (SRC1A, SRC2A) Parameters: 5 SRC1A Address of a quadword containing a 8 double-precision floating point value> (must not be the register nor a %REF value)5 SRC2A Address of a quadword containing as8 double-precision floating point value Result:e( -1 SRC1A less than SRC2A' 0 SRC1A equal to SRC2A + 1 SRC1A greater than SRC2Aa4 CMPF# CMPF - Compare F-Floating Operandsr CMPF (SRC1A, SRC2A) Parameters: 7 SRC1A Address of a longword containing ae: single-precision floating point value7 SRC2A Address of a longword containing a : single-precision floating point value Result:r* -1 SRC1A less than SRC2A) 0 SRC1A equal to SRC2A - 1 SRC1A greater than SRC2A 4 CMPG# CMPG - Compare G-Floating Operands  CMPG (SRC1A, SRC2A) Parameters: 8 SRC1A Address of a longword containing an7 extended double-precision floatings point value8 SRC2A Address of a longword containing an7 extended double-precision floating point value Result: * -1 SRC1A less than SRC2A) 0 SRC1A equal to SRC2A - 1 SRC1A greater than SRC2AP4 CMPM" CMPM - Compare Multiword Operands! CMPM (SIZE, SRC1A, SRC2A)   Parameters: d? SIZE Compile-time-constant expression indicatinge@ the size of the operands in longwords (BLISS value units) e@ SRC1A Address of a longword containing an extended( multiprecision value@ SRC2A Address of a longword containing an extended( multiprecision value o Result: ) -1 SRC1A less than SRC2AN ( 0 SRC1A equal to SRC2A , 1 SRC1A greater than SRC2A 4 CMPP(32) CMPP - Compare Packed OperandsC CMPP (SRC1LENA, SRC1ADDR, SRC2LENA, SRC2ADDR [; OUT0, OUT1,  OUT2, OUT3])b  Input Parameters: B SRC1LENA Address of a word containing the length of the' decimal string SRC1S oE SRC1ADDR Address of the base of packed decimal string SRC1 F SRC2LENA Address of a word containing the length of decimal string SRC2U XE SRC2ADDR Address of the base of packed decimal string SRC2T Output Parameters:  1 OUT0 Value returned in R0 is zero.G SC OUT1 Value returned in R1 is the address of the bytedC containing the most significant digit of stringB SRC1.e 1 OUT2 Value returned in R2 is zero.  GC OUT3 Value returned in R3 is the address of the byte C containing the most significant digit of stringp SRC2.e Result: ' -1 SRC1 less than SRC2h& 0 SRC1 equal to SRC2* 1 SRC1 greater than SRC2F Note that CMPP3 or CMPP4 is generated depending on the operands provided. 4 CRC(32)  CRC - Cyclic Redundancy CheckE CRC (TABLEADDR, INICRCADDR, STRLENADDR, STREAMADDR, DSTADDR)F Parameters: 4 TABLEADDR Address of a 16-longword table: INICRCADDR Address of a longword which contains% the initial CRCu? STRLENADDR Address of a word containing the unsignedr8 length of the data stream in bytesB STREAMADDR Address of the first byte of the data stream? DSTADDR Address of a longword where the resultingl0 32-bit CRC is to be stored Result:  NOVALUE4 CVTDFC) CVTDF - Convert D-Floating to F-Floating  CVTDF (SRCA, DSTA)t Parameters: 7 SRCA Address of a quadword containing aG: double-precision floating point value4 DSTA Address of a longword where the4 single-precision floating point) conversion is storede Result: / 1 No floating point overflow-, 0 floating point overflow4 CVTDIR& CVTDI - Convert D-Floating to Integer CVTDI (SRCA, DSTA)  Parameters:d7 SRCA Address of a quadword containing aa: double-precision floating point value9 DSTA Address where the integer conversion  is stored Result:( 1 No integer overflow% 0 Integer overflowb 4 CVTDL(32) # CVTDL - Convert D-Floating to Longl CVTDL (SRCA, DSTA)  Parameters: 7 SRCA Address of a quadword containing ae: double-precision floating point value< DSTA Address of a longword where the integer) conversion is stored Result:r( 1 No integer overflow% 0 Integer overflowt4 CVTFD) CVTFD - Convert F-Floating to D-Floatinga CVTFD (SRCA, DSTA)l Parameters:s7 SRCA Address of a longword containing aa: single-precision floating point value4 DSTA Address of a quadword where the4 double-precision floating point) conversion is stored Result:  NOVALUE 4 CVTFG(32) ) CVTFG - Convert F-Floating to G-Floating  CVTFG (SRCA, DSTA)a Parameters:7 SRCA Address of a longword containing a;: single-precision floating point value= DSTA Address of a quadword where the extendedl? double-precision floating point conversionr is stored Result:  NOVALUE 4 CVTFH(32)a) CVTFH - Convert F-Floating to H-Floatingc CVTFH (SRCA, DSTA)  Parameters: 7 SRCA Address of a longword containing af: single-precision floating point value6 DSTA Address of an octaword where the 8 extended-precision double-precision8 floating point conversion is stored Result:r NOVALUE4 CVTFIh& CVTFI - Convert F-Floating to Integer CVTFI (SRCA, DSTA)  Parameters:t7 SRCA Address of a longword containing a : single-precision floating point value< DSTA Address of a longword where the integer) conversion is stored Result: ( 1 No integer overflow% 0 Integer overflowe 4 CVTFL(32) # CVTFL - Convert F-Floating to Longl CVTFL (SRCA, DSTA)  Parameters:7 SRCA Address of a longword containing a : single-precision floating point value< DSTA Address of a longword where the integer) conversion is storedi Result:l( 1 No integer overflow% 0 Integer overflowi 4 CVTGF(32)d) CVTGF - Convert G-Floating to F-Floating3 CVTGF (SRCA, DSTA) Parameters: ? SRCA Address of a quadword containing an extended 8 double-precision floating point valueC DSTA Address of a longword where the single-precision 6 floating point conversion is stored Result:  NOVALUE 4 CVTGH(32) ) CVTGH - Convert G-Floating to H-Floating1 CVTGH (SRCA, DSTA)  Parameters: r7 SRCA Address of a quadword containing an< extended double-precision floating point value  d4 DSTA Address of an octaword where the6 extended-exponent double-precision7 floating point conversion is stored  Result: s NOVALUEt 4 CVTGL(32) # CVTGL - Convert G-Floating to Longl CVTGL (SRCA, DSTA)  Parameters: A SRCA Address of a quadword containing an extended : double-precision floating point value< DSTA Address of a longword where the integer) conversion is storedn Result:l NOVALUE 4 CVTHF(32)C) CVTHF - Convert H-Floating to F-Floating  CVTHF (SRCA,DSTA) Parameters:p9 SRCA Address of an octaword containing an 8 extended-exponent double-precision ) floating point valueR4 DSTA Address of a longword where the4 single-precision floating point) conversion is storeda Result:  NOVALUE 4 CVTHG(32)e) CVTHG - Convert H-Floating to G-Floatingt CVTHG (SRCA, DSTA) e Parameters: a8 SRCA Address of an octaword containing an6 extended-exponent double-precision( floating point value A< DSTA Address of a quadword where the extended> double-precision floating point conversion is stored( Result:  NOVALUEt 4 CVTHL(32) # CVTHL - Convert H-Floating to Longn CVTHL (SRCA, DSTA)  Parameters:i9 SRCA Address of an octaword containing ana7 extended-exponent double-precisionr) floating point value < DSTA Address of a longword where the integer) conversion is stored Result:i NOVALUE4 CVTID & CVTID - Convert Integer to D-Floating CVTID (SRCA, DSTA)  Parameters:C5 SRCA Address of a longword containing % an integer valued4 DSTA Address of a quadword where the4 double-precision floating point) conversion is storedA Result:a NOVALUE 4 CVTIF(32)e& CVTIF - Convert Integer to F-Floating CVTIF (SRCA, DSTA)d Parameters:f5 SRCA Address of a longword containingd& and integer value4 DSTA Address of a longword where the4 single-precision floating point) conversion is stored Result:  NOVALUE 4 CVTLD(32)G# CVTLD - Convert Long to D-Floatingu CVTLD (SRCA, DSTA)e Parameters: 5 SRCA Address of a longword containing% an integer value 2 DSTA Address of quadword where the4 double-precision floating point) conversion is storedg Result:f+ NOVALUE No overflow can occur.2 4 CVTLF(32)u# CVTLF - Convert Long to F-Floating  CVTLF (SRCA, DSTA)  Parameters:28 SRCA Address of a longword containing an" integer value4 DSTA Address of a longword where the4 single-precision floating point) conversion is storedF Result:e+ NOVALUE No overflow can occur.o 4 CVTLH(32)# CVTLH - Convert Long to H-Floatingl CVTLH (SRCA, DSTA)  Parameters:n8 SRCA Address of a longword containing an" integer value5 DSTA Address of an octaword where theA5 extended-exponent floating point) conversion is stored Result:t NOVALUE 4 CVTLP(32)t CVTLP - Convert Long to Packed ' CVTLP (SRCA, DSTLENA, DSTADDR)n Parameters:F8 SRCA Address of a longword containing an" integer value< DSTLENA Address of a word containing the length. of the destination string; DSTADDR Address of the base of the destinationc string Result:n( 1 No decimal overflow% 0 Decimal overflow- 4 CVTPL(32)0 CVTPL - Convert Packed to Longw' CVTPL (SRCLENA, SRCADDR, DSTA)I Parameters:C< SRCLENA Address of a word containing the length) of the source string = SRCADDR Address of the base of the source stringT< DSTA Address of a longword where the integer) conversion is stored1 Result:n( 1 No integer overflow% 0 Integer overflowe 4 CVTPS(32) 3 CVTPS - Convert Packed to Leading Separate Numerice@ CVTPS (SRCLENA, SRCADDR, DSTLENA, DSTADDR [; OUT0, OUT1, OUT2, OUT3]) s Input Parameters: > SRCLENA Address of a word containing the length of% the source string  < SRCADDR Address of the base of the source string 0> DSTLENA Address of a word containing the length of* the destination string lA DSTADDR Address of the base of the destination stringc n Output Parameters:  s1 OUT0 Value returned in R0 is zero.T > OUT1 Value returned in R1 is the address of the> byte containing the most significant digit) of the source string.  (1 OUT2 Value returned in R2 is zero. > OUT3 Value returned in R3 is the address of the8 sign byte of the destination string. Result:s' 1 No decimal overflow $ 0 Decimal overflow 4 CVTPT(32) + CVTPT - Convert Packed to Trailing NumerictC CVTPT (SRCLENA, SRCADDR, TBLADDR, DSTLENA, DSTADDR [; OUT0, OUT1, OUT2, OUT3]) t Input Parameters: ; SRCLENA Address of a word containing the length ( of the source string f< SRCADDR Address of the base of the source string A TBLADDR Address of the table used to convert the sign > DSTLENA Address of a word containing the length of* the destination string A DSTADDR Address of the base of the destination string  Output Parameters:  1 OUT0 Value returned in R0 is zero.  o> OUT1 Value returned in R1 is the address of the> byte containing the most significant digit) of the source string.o s1 OUT2 Value returned in R2 is zero.n C OUT3 Value returned in R3 is the address of the mostT@ significant digit of the destination string. Result:s' 1 No decimal overflowg$ 0 Decimal overflow 4 CVTRDL(32), CVTRDL - Convert Rounded D-Floating to Long CVTRDL (SRCA, DSTA) Parameters: 7 SRCA Address of a quadword containing a : double-precision floating point value< DSTA Address of a longword where the integer) conversion is stored Result:s( 1 No integer overflow% 0 Integer overflow 4 CVTRFL(32), CVTRFL - Convert Rounded F-Floating to Long CVTRFL (SRCA, DSTA) Parameters:o7 SRCA Address of a longword containing a: single-precision floating point value< DSTA Address of a longword where the integer) conversion is stored Result:f( 1 No integer overflow% 0 Integer overflowi 4 CVTRGL(32), CVTRGL - Convert Rounded G-Floating to Long CVTRGL (SRCA, DSTA)  Parameters: d@ SRCA Address of a quadword containing an extended9 double-precision floating point valuet V; DSTA Address of a longword where the integerT( conversion is stored Result: e' 1 No integer overflow $ 0 Integer overflow 4 CVTRHL(32), CVTRHL - Convert Rounded H-Floating to Long CVTRHL (SRCA, DSTA)   Parameters: e8 SRCA Address of an octaword containing an6 extended-exponent double-precision( floating point value C; DSTA Address of a longword where the integer ( conversion is stored Results:  ' 1 No integer overflow  A$ 0 Integer overflow 4 CVTSP(32) + CVTSP - Convert Leading Separate to Packed ? CVTSP (SRCLENA, SRCADDR, DSTLENA, DSTADDR [;OUT0, OUT1, OUT2, OUT3]) F Input Parameters: > SRCLENA Address of a word containing the length of% the source stringn n< SRCADDR Address of the base of the source string > DSTLENA Address of a word containing the length of* the destination string A DSTADDR Address of the base of the destination string  s Output Parameters:  1 OUT0 Value returned in R0 is zero.o > OUT1 Value returned in R1 is the address of the3 sign byte of the source string.g 1 OUT2 Value returned in R2 is zero.s > OUT3 Value returned in R3 is the address of the> byte containing the most significant digit. of the destination string. Result:V( 1 No decimal overflow% 0 Decimal overflowa 4 CVTTP(32)+ CVTTP - Convert Trailing Numeric to PackednC CVTTP (SRCLENA, SRCADDR, TBLADDR, DSTLENA, DSTADDR [; OUT0, OUT1, OUT2, OUT3])  Input Parameters: s> SRCLENA Address of a word containing the length of% the source stringV 2< SRCADDR Address of the base of the source string A TBLADDR Address of the table used to convert the signg c> DSTLENA Address of a word containing the length of* the destination string A DSTADDR Address of the base of the destination string  e Output Parameters:  t1 OUT0 Value returned in R0 is zero.e n> OUT1 Value returned in R1 is the address of the@ most significant digit of the source string. 1 OUT2 Value returned in R2 is zero.  d> OUT3 Value returned in R3 is the address of the> byte containing the most significant digit. of the destination string. Result: ' 1 No decimal overflowt# 0 Decimal overflow4 DIVD" DIVD - Divide D-Floating Operands" DIVD (DIVSR, DIVID, QUOT) Parameters:tA DIVSR Address of a double-precision floating point 1 quadward used as the divisorA DIVID Address of a double-precision floating point 2 quadword used as the dividend@ QUOT Address of a quadword where the quotient is stored Result:A NOVALUE4 DIVF" DIVF - Divide F-Floating Operands! DIVF (DVISR DIVID, QUOT)s Parameters:rA DVISR Address of a single-precision floating point 1 longword used as the divisortA DIVID Address of a single-precision floating point 2 longword used as the dividend@ QUOT Address of a longword where the quotient is storedt Result:  NOVALUE 4 DIVG(32)" DIVG - Divide G-Floating Operands! DIVG (DVISR DIVID, QUOT)g Parameters:R< DIVSR Address of an extended double-precision@ floating point quadword used as the divisor< DIVID Address of an extended double-precisionA floating point quadword used as the dividend @ QUOT Address of a quadword where the quotient is stored Result:o NOVALUE 4 DIVH(32)" DIVH - Divide H-Floating Operands" DIVH (DIVSR, DIVID, QUOT) Parameters:o4 DIVSR Address of an extended-exponent4 double-precision floating point2 octaword that is used as the divisor4 DIVID Address of an extended-exponent4 double-precision floating point1 octaword that is used as ther dividend 5 QUOT Address of an octaword where the ' quotient is stored Result:d NOVALUE 4 EDITPC(32)" EDITPC - Edit Packed to CharacterA EDITPC (SRCLENA,׎S'~ BLS32047.B+![BLISS32.V047.COMMON]ADDBLS.HLP;5U#2|{ SRCADDR, PATTERN, DSTADDR [; OUT0, OUT1,n' OUT2, OUT3, OUT4, OUT5])d  Input Parameters: i; SRCLENA Address of a word containing the length ( of the source string < SRCADDR Address of the base of the source string : PATTERN Address of the pattern-operator string : DSTADDR Address of the base of the destination string  Output Parameters:  9 OUT0 Value returned in R0 is the length ofi& the source string. u: OUT1 Value returned in R1 is the address of< the byte containing the most significant/ digit of the source string.E R1 OUT2 Value returned in R2 is zero.  > OUT3 Value returned in R3 is the address of the@ byte containing the EO$END pattern operator. 1 OUT4 Value returned in R4 is zero.r fC OUT5 Value returned in R5 is the address of one bytetC beyond the last byte of the destination string.f Result:i( 1 No decimal overflow% 0 Decimal overflow 4 EDIV! EDIV - Extended-Precision Divider6 EDIV (DIVISOR, DIVIDEND, QUOTIENT, REMAINDER) Parameters:i= DIVISOR Address of a longword whose contents are ( used as the divisor= DIVIDEND Address of a quadword whose contents aret) used as the dividend = QUOTIENT Address of a longword where the quotient $ is to be stored> REMAINDER Address of a longword where the remainder$ is to be stored Result:l Contents of the PSL4 EMUL# EMUL - Extended-Precision Multiplyo% EMUL (MULR, MULD, ADD, PROD)  Parameters:T< MULR Address of a longword whose contents are* used as the multiplier< MULD Address of a longword whose contents are, used as the multiplicand= ADD Address of a longword whose contents are = sign extended to a quadword and added tof) the product quadworde> PROD Address of a quadword where the result is! to be storede Result:d Contents of the PSL 4 ESTABLISHr* ESTABLISH - Establish a condition handler ESTABLISH (RTN) Parameters:r< RTN Address of a routine that will serve as a% condition handler.w Result:  NOVALUE 4 FFC-FFS(32)L) FFC and FFS - Find and Modify OperationstC FFC (POSADDR, SIZADDR, BASEADDR, DSTADDR) Find first clear bit B FFS (POSADDR, SIZADDR, BASEADDR, DSTADDR) Find first set bit  Parameters:eA POSADDR Address of a longword whose contents specifyfB a bit position relative to the low bit of theC byte addressed by BASEADDR.The low bit of that/ byte is bit position zero.V? SIZADDR Address of a byte whose content, when zeroV? extended to 32 bits, has a value less than B or equal to 32. This value specifies the sizeA of the field to be searched. The size of theeA field is measured in bits, begins at the bit ? position specified by POSADDR and extends3 toward increasing bit numbers. C BASEADDR Address of a byte whose low bit is interpretedS& as position zero.D DSTADDR Address of a longword where the position of theD first bit found in the specified state is to be stored. Result: B 1 No bit in the specified state is found in the$ field searched. 0 Otherwise.i4 HALT HALT - Halt Processor HALT () Parameters: NONE Result:b NOVALUE Description:3 This routine generates a HALT instruction.e 4 INDEX(32)i INDEX - Index Calculation> INDEX (SUBSCRIPT, LOW, HIGH, SIZE, INDEXIN, INDEXOUT) Parameters:tC SUBSCRIPT Address of a longword containing the subscripte? LOW Address of a longword containing the lower 1 bound of the subscript ranget? HIGH Address of a longword containing the upper1 bound of the subscript rangev? SIZE Address of a longword containing the scaleT factor A INDEXIN Address of a longword containing the initialD index value> INDEXOUT Address of a longword where the result is! to be storedl Result:  NOVALUE4 INSQHI-INSQTI(32) 7 INSQHI and INSQTI - Insert Entry in Queue, InterlockedgE INSQHI(ENTRY, HEADER) Insert entry in queue at head, interlockedgE INSQTI(ENTRY, HEADER) Insert entry in queue at tail, interlocked Parameters: < ENTRY Address of an entry to be inserted in a/ queue following the header 0 HEADER Address of the queue header Result:o; 0 If ENTRY was not the first entry to bes* inserted in the queue< 1 If the secondary interlock could not be acquired@ 2 If ENTRY was the first entry to be inserted# into the queueo 4 INSQUE(32) INSQUE - Insert Entry in Queuee INSQUE (ENTRY, PRED)t Parameters: > ENTRY Address of an entry to be inserted in the< queue after the entry specified by PRED3 PRED Address of an entry in a queueV Result:s= 1 ENTRY was the first entry to be insertedw# into the queueD 0 Otherwise 4 LOCC(32) LOCC - Locate Character q/ LOCC (CHARA, LENA, ADDR [; OUT0, OUT1])  d Input Parameters: e> CHARA Address of a byte containing the character! to be locatedi F; LENA Address of a word containing the search ! string length  e8 ADDR Address of the string to be searched l Output Parameters:i ? OUT0 Value returned in R0 is the number of bytesnB remaining in the string (including the locatedA one) if the byte is located; otherwise, R0 is  a zero.t C OUT1 Value returned in R1 is the address of the byte B located, if the byte is located; otherwise, R1A is the address of one byte beyond the string. Result:n= 1 A byte was located which was the same as A .CHARA<0,8> (the Z condition code is clear).uA 0 No byte was located (the Z condition code isd set) 4 MATCHC(32) MATCHC - Match CharactersA MATCHC (OBJLENA, OBJADDR, SRCLENA, SRCADDR [; OUT0, OUT1,s OUT2, OUT3])I O Input Parameters: @ OBJLENA Address of word containing the length of the" pattern string 1 OBJADDR Address of the pattern string  > SRCLENA Address of a word containing the length of- the string to be searcheds l8 SRCADDR Address of the string to be searched r Output Parameters:d n< OUT0 Value returned in R0 is zero (if a match= occurred); otherwise, R0 is the number of / bytes in the object string.  a> OUT1 Value returned in R1 is the address of one= byte beyond the object string (if a match > occurred); otherwise, it is the address of% the object string  f? OUT2 Value returned in R2 is the number of bytes B remaining in the source string after the matchA (if a match occurred); otherwise, R2 is zero.f d> OUT3 Value returned in R3 is the address of oneA byte beyond the last byte matched (if a matchoB occurred); otherwise, R3 is the address of one2 byte beyond the source string. Result:y? 1 A match was found (the Z condition code ise set).@ 0 No match was found (the Z condition code is clear). 4 MFPR(32)$ MFPR - Move from Processor Register MFPR (PROCREG, DSTADDR) Parameters: . PROCREG Processor register number@ DSTADDR Address of a longword where the contents of; the processor register is to be storedg Result:t NOVALUE 4 MOVC3(32)i! MOVC3 - Move Character 3 Operand @ MOVC3 (LENA, SRCADDR, DSTADDR [; OUT0, OUT1, OUT2, OUT3, OUT4, OUT5])D T Input Parameters: a; LENA Address of a word containing the lengthc( of the source string d< SRCADDR Address of the base of the source string 5 DSTADDR Address of the destination string  Q Output Parameters:  o1 OUT0 Value returned in R0 is zero.b r> OUT1 Value returned in R1 is the address of one2 byte beyond the source string. l1 OUT2 Value returned in R2 is zero.x d> OUT3 Value returned in R3 is the address of one7 byte beyond the destination string.n 1 OUT4 Value returned in R4 is zero.  p1 OUT5 Value returned in R5 is zero.h Result:e NOVALUE 4 MOVC5(32) ! MOVC5 - Move Character 5 Operand @ MOVC5 (SRCLENA, SRCADDR, FILL, DSTLENA, DSTADDR [; OUT0,, OUT1, OUT2, OUT3, OUT4, OUT5])  Input Parameters: r< SRCLENA Address of word containing the length of% the source stringe < SRCADDR Address of the base of the source string I9 FILL Address of a byte containing the fillT character  N? DSTLENA Address of word containing the destination- ! string lengtht 5 DSTADDR Address of the destination stringn i Output Parameters:F SA OUT0 Value returned in R0 is the number of unmovedP? bytes remaining in the source string; R0 isa? nonzero only if the source string is longern0 than the destination string. aC OUT1 Value returned in R1 is the address of one byteSB beyond the last byte in the source string that was moved. e1 OUT2 Value returned in R2 is zero.  > OUT3 Value returned in R3 is the address of one7 byte beyond the destination string.  1 OUT4 Value returned in R4 is zero.h 1 OUT5 Value returned in R5 is zero.s Result:  NOVALUE 4 MOVP(32) MOVP - Move Packed @ MOVP (LENA, SRCADDR, DSTADDR [; OUT0, OUT1, OUT2, OUT3])  Input Parameters: y; LENA Address of a word containing the lengthi( of the source string = SRCADDR Address of the base of the source decimalb string s: DSTADDR Address of the base of the destination 1 Output Parameters:e i1 OUT0 Value returned in R0 is zero.e a> OUT1 Value returned in R1 is the address of the> byte containing the most significant digit) of the source string. e1 OUT2 Value returned in R2 is zero.T r> OUT3 Value returned in R3 is the address of the> byte containing the most significant digit. of the destination string. Result:n NOVALUE 4 MOVPSL(32) MOVPSL - Move from PSLo MOVPSL (DSTADDR)  Parameters:u= DSTADDR Address of a longword where the contentso/ of the PSL is to be stored Result:u NOVALUE 4 MOVTC(32) # MOVTC - Move Translated Characters @ MOVTC (SRCLENA, SRCADDR, FILL, TBLADDR, DSTLENA, DSTADDR6 [; OUT0, OUT1, OUT2, OUT3, OUT4, OUT5])  Input Parameters: IB SRCLENA Address of a word containing the source length , SRCA Address of source string C FILL Address of a byte containing the fill charactere e4 TBLADDR Address of the translation table e@ DSTLENA Address of a word containing the destination length a5 DSTADDR Address of the destination string  s Output Parameters: 9 OUT0 Value returned in R0 is the number ofA< translated bytes remaining in the source< string; R0 is nonzero only if the sourceA string is longer than the destination string.  = OUT1 Value returned in R is the address of one2; byte beyond the last byte in the source / string that was translated.S 1 OUT2 Value returned in R2 is zero.R ? OUT3 Value returned in R3 is the address of the & translation table. e1 OUT4 Value returned in R4 is zero.  > OUT5 Value returned in R5 is the address of one7 byte beyond the destination string. Result:i NOVALUE 4 MOVTUC(32)) MOVTUC - Move Translated Until CharacterCD MOVTUC (SRCLENA, SRCADDR, ESCADDR, TBLADDR, DSTLENA, DSTADDR7 [; OUT0, OUT1, OUT2, OUT3, OUT4, OUT5])  b Input Parameters: rB SRCLENA Address of a word containing the length of the! source string < SRCADDR Address of the base of the source string sE ESCADDR Address of a byte containing the escape character  UD TBLADDR Address of the translation table (may be created( using CH$TRANSTABLE) cB DSTLENA Address of a word containing the length of the& destination string A DSTADDR Address of the base of the destination string   Output Parameters:  y? OUT0 Value returned in R0 is the number of bytesoA remaining in the source string (including the A byte that caused the escape); R0 is zero only.B if the entire source string was translated and) moved without escape.i C OUT1 Value returned in R1 is the address of the byteE that resulted in destination string exhaustion or A escape; if no exhaustion or escape, R1 is the D address of one byte beyond the end of the source string. 1 OUT2 Value returned in R2 is zero. E OUT3 Value returned in R3 is the address of the table.  ? OUT4 Value returned in R4 is the number of bytest8 remaining in the destination string. F OUT5 Value returned in R5 is the address of the byte inC the destination string that would have received B the translated byte that caused the escape, or@ would have received a translated byte if theE source string was not exhausted; if no exhaustioneC or escape, R5 is the address of one byte beyond6 the end of the destination string. Result: F If the string was successfully translated without escape, theF result is 0. Otherwise, the result is the address of the byte6 in the source string which caused the escape. 4 MTPR(32) MTPR - Move to Processorb MTPR (SRCADDR, PROCREG) Parameters:oC SRCADDR Address of a longword whose contents are to be B loaded into the designated processor register. PROCREG Processor register number Result:  NOVALUE 4 MULD(32)$ MULD - Multiply D-Floating Operands" MULD (SRC1A, SRC2A, DSTA) Parameters:sA SRC1A Address of a double-precision floating point4 quadword used as the multiplierA SRC2A Address of a double-precision floating point 6 quadword used as the multiplicandF DSTA Address of a quadword where the product is stored Result:  NOVALUE4 MULF$ MULF - Multiply F-Floating Operands" MULF (SRC1A, SRC2A, DSTA) Parameters: A SRC1A Address of a single-precision floating point 4 longword used as the multiplierA SRC2A Address of a single-precision floating pointA6 longword used as the multiplicand? DSTA Address of a longword where the product is  stored Result:n NOVALUE 4 MULG(32)$ MULG - Multiply G-Floating Operands" MULG (SRC1A, SRC2A, DSTA) Parameters: < SRC1A Address of an extended double-precision8 floating point quadword used as the# multiplier 4< SRC2A Address of an extended double-precision8 floating point quadword used as the! multiplicandM< DSTA Address of a quadword where the product is stored Result:U NOVALUE 4 MULH(32)$ MULH - Multiply H-Floating Operands" MULH (SRC1A, SRC2A, DSTA) Parameters: 4 SRC1A Address of an extended-exponent4 double-precision floating point2 octaword used as a multiplier4 SRC2A Address of an extended-exponent4 double-precision floating point4 octaword used as a multiplicand5 DSTA Address of an octaword where theO& product is stored Result:u NOVALUE4 NOP  NOP - No Operation  NOP ()n Parameters:t None Result:  NOVALUE4 NULLPARAMETERlF On calls, the NULLPARAMETER(i) tests parameter positions for a nullF or omitted parameter. The function must be declared BUILTIN withinF the scope of a routine whose linkage-attribute is defined by a CALLF (32) linkage-type; consequently, the allowed predeclared linkagesF are: BLISS (32), FORTRAN (32), FORTRAN_SUB (32), and FORTRAN_FUNC (32).F If i is a formal-name and the associated actual-parameter is null or= omitted a value of 1 is returned; otherwise a 0 is returned.aF If i is an expression, i must be equal to 1 or greater and a value of 1 is returned when:D o The value of i is greater than the number of actual-parameters.F o The value of i is not greater than the number, but the ith, actual-parameter has a value of 0 (32). 4 PROBER(32)" PROBER - Probe Read Accessibility0 PROBER (MODEADDR, LENGTHADDR, BASEADDR) Parameters: ? MODEADDR Address of a byte whose contents specify at# processor mode > LENGTHADDR Address of a word whose contents are zero= extended, decremented by 1 and added toy< BASEADDR to specify the last byte of an# area in memory < BASEADDR Address of the first byte of an area in? memory (must not be the name of a register & nor a %REF value) Result: C 1 Both first and last bytes are read accessible.L 0 Otherwise.o 4 PROBEW(32)# PROBEW - Probe Write Accessibilitye0 PROBEW (MODEADDR, LENGTHADDR, BASEADDR) Parameters:? MODEADDR Address of a byte whose contents specify' a processor modeM@ LENGTHADDR Address of a word whose contents are zero@ extended, decremented by 1 and added to > BASEADDR to specify the last byte of an% area in memorye> BASEADDR Address of the first byte of an area in< memory (must not be the name of a1 register nor a %REF value)f Result:n; 1 Both first and last bytes are write t! accessible ! 0 Otherwise.r4 REMQHI-REMQTI(32)n9 REMQHI and REMQTI - Remove Entry From Queue, Interlocked B REMQHI (HEADER, ADDR) Remove from queue at head, interlockedB REMQTI (HEADER, ADDR) Remove from queue at tail, interlocked Parameters: 0 HEADER Address of the queue header< ADDR Address of a longword where the address9 of the entry removed is to be stored Result:n; 0 The queue is now empty; the last entry! was removed.u9 1 The secondary interlock could not bee acquired9 2 The queue is not empty; an entry was  removed: 3 The queue was already empty; no entry! was removed.y 4 REMQUE(32)! REMQUE - Remove Entry from Queuei REMQUE (ENTRY, ADDR)) Parameters:a3 ENTRY Address of an entry in a queueC< ADDR Address of a longword where the address9 of the entry removed is to be storedr Result: 4 Initial Final Entry6 Value State State Removed2 0 Not empty Not empty Yes2 2 Not empty Empty Yes1 3 Empty Empty No F Note that the value of REMQUE is true only if no entry was removed.3 The value is computed from the condition codes as:o (Z-bit)^1 OR (V-bit) 4 REVERT? REVERT - Delete the condition handler established by ESTABLISHb REVERT () Parameters:O NONE Result:  NOVALUE4 ROTi ROT - Rotate a Valuey ROT (VALUE, SHIFT)n Parameters:t+ VALUE Value to be rotatedt0 SHIFT Number of bits to rotate Result:e3 VALUE rotated the specified number of bits 4 SCANC(32)i SCANC - Scan Characters> SCANC (LENA, ADDR, TBLADDR, MASKA [; OUT0, OUT1, OUT2, OUT3])t l Input Parameters: x; LENA Address of a word containing the length / of the string to be scannedf b5 ADDR Address of the base of the stringt 4 TBLADDR Address of the translation table < MASKA Address of a byte containing the mask to# use in scanning  a Output Parameters:h b? OUT0 Value returned in R0 is the number of bytesr? remaining in the string (including the bytes> that produced a nonzero AND result); R0 is= zero only if there was a zero AND result.  c? OUT1 Value returned in R1 is the address of the r> byte that produced a nonzero AND result or= (if no nonzero AND result) the address of / one byte beyond the string. 1 OUT2 Value returned in R2 is zero.t > OUT3 Value returned in R3 is the address of the table0 Result:eF If the SCANC fails to find a match, the result is 0. Otherwise, theF the result is the address of the byte that produced a nonzero AND with the MASK.C 4 SKPC(32) SKPC - Skip Character R0 SKPC (CHARA, LENA, ADDR [; OUT0, OUT1]))  Input Parameters: n> CHARA Address of a byte containing the character! to be skippedt ; LENA Address of a word containing the searchr! string length, )8 ADDR Address of the string to be searched e Output Parameters:n ? OUT0 Value returned in R0 is the number of bytesC: remaining in the string (including the< located or unequal one) if the (unequal); byte is located; otherwise, R0 is zero.d > OUT1 Value returned in R1 is the address of theA byte located (if byte is located); otherwise,sD R1 is the address of one byte beyond the string. Result: @ 1 A byte was located which was not the same as@ .CHARA<0,8> (the Z condition code is clear).E 0 No byte was located (the Z condition code is set)g set). 4 SPANC(32)  SPANC - Span Characters > SPANC (LENA, ADDR, TBLADDR, MASKA [; OUT0, OUT1, OUT2, OUT3])C Input Parameters: e; LENA Address of a word containing the lengthp/ of the string to be spannedd u5 ADDR Address of the base of the string  S4 TBLADDR Address of the translation table < MASKA Address of a byte containing the mask to# use in spanningT  Output Parameters:d e? OUT0 Value returned in R0 is the number of bytes ? remaining in the string (including the byte= that produced a zero AND result); R0 is a @ zero only if there was a nonzero AND result. u> OUT1 Value returned in R1 is the address of theC byte that produced a zero AND result; otherwiseeD R1 is the address of one byte beyond the string. 1 OUT2 Value returned in R2 is zero.  E OUT3 Value returned in R3 is the address of the table.r Result:t@ If the SPANC fails to find a match, the result is zero.? Otherwise, the result is the address of the byte that ) produced zero AND with the MASK.t4 SUBD$ SUBD - Subtract D-Floating Operands" SUBD (SRC1A, SRC2A, DSTA) Parameters: A SRC1A Address of a double-precision floating pointr4 quadword used as the subtrahendA SRC2A Address of a double-precision floating pointR1 quadword used as the minuend(A DSTA Address of the quadword where the difference  is storeds Result:r NOVALUE4 SUBF$ SUBF - Subtract F-Floating Operands" SUBF (SRC1A, SRC2A, DSTA) Parameters:A SRC1A Address of a single-precision floating point4 longword used as the subtrahendA SRC2A Address of a single-precision floating point 1 longword used as the minuend ? DSTA Address of a longword where the difference is stored Result:c NOVALUE 4 SUBG(32)$ SUBG - Subtract G-Floating Operands" SUBG (SRC1A, SRC2A, DSTA) Parameters: E SRC1A Address of an extended double-precision floating : point quadword used as the subtrahendE SRC2A Address of an extended double-precision floatinge7 point quadword used as the minuendt? DSTA Address of a quadword where the difference  is stored Result:n NOVALUE 4 SUBH(32)$ SUBH - Subtract H-Floating Operands" SUBH (SRC1A, SRC2A, DSTA) Parameters: D SRC1A Address of an extended-exponent double-precisionB floating point ocatword used as the subtrahendD SRC2A Address of an extended-exponent double-precision? floating point octaword used as the minuend,C DSTA Address of an octaword where the difference ise stored Result:  NOVALUE4 SUBM# SUBM - Subtract Multiword Operands ( SUBM (SIZE, SRC1A, SRC2A, DSTA) Parameters:e@ SIZE Compile-time-constant-expression indicatingA the size of the operands in fullwords (BLISSs! value units) B SRC1A Address of an extended multiprecision integer+ used as the subtrahendeB SRC2A Address of an extended multiprecision integer( used as the minuend. DSTA Address of the difference Result: NOVALUE4 TESTBITx(32)& TESTBITx - Test and Modify OperationsB TESTBITSS (FIELD) Test for bit set, then set bitD TESTBITSC (FIELD) Test for bit set, then clear bitD TESTBITCS (FIELD) Test for bit clear, then set bitF TESTBITCC (FIELD) Test for bit clear, then clear bitB TESTBITSSI (FIELD) Test for bit set, then set bit1 (interlocked)F TESTBITCCI (FIELD) Test for bit clear, then clear bit1 (interlocked)o Parameters:iF FIELD Address with optional field selector whichF specifies a field whose low bit will be tested forF a particular state. That bit will be set to theF specified state. The size parameter of the fieldF selector is ignored and a literal value one is substituted F Note that these are the only routines in theF machine-specific set which accept an address withF field selector that cannot be evaluated to an address. Result: : 1 Bit tested was in the specified state. 0 Otherwise. 4 XFC(32) XFC - Extended Function Calle XFC (OPCODE) Parameters: A OPCODE Link-time-constant-expression to be deposited,? $#q~ BLS32047.B+![BLISS32.V047.COMMON]ADDBLS.HLP;5U>| in the byte which follows the XFC opcode inb* the instruction stream Result:a NOVALUE3 CASEF A case-expression provides a method for coding a range of complex flow conditions. 4 Syntax | Example$ |= CASE exp FROM ctce TO ctce OF | CASE .X FROM 1 TO 8 OF . SET | SETD [ label ,... ] : action; | [1]: REPORT1(.Z);D TES; | [2]: REPORT2(.Z);A | [4,7]: Q = .Z+1;mC { ctce } | [INRANGE]: ERROR1(.Z);eC { ctce TO ctce } | [OUTRANGE]: ERROR2(.Z); / label { INRANGE } | TES;n$ { OUTRANGE } |F Depending on the value of the content of X, one of 5 actions isF taken: If the value is 1, REPORT1 is called; if the value is 2,F REPORT2 is called; if the value is 4 or 7, assignment Q = .Z + 1 isF performed; if the value is within the specified range of 1 to 8 (thatF is: 3, 5, or 8) ERROR1 is called; finally, if the value is outside6 the range 1 to 8 (such as, 0 or 9), ERROR2 is called. 3 CH$A_RCHARF The advance-read-character function advances the pointer contained atF a specified address (addr) and then returns as a value the character designated by the pointer. CH$A_RCHAR( addr ) Example:e< -----------------C CP = CH$PTR(UPLIT('ABCD')); | D | C | B | A | P.AAA:O< -----------------< -----------------A CH2 = CH$A_RCHAR(CP); | | | | B | CH2:i< -----------------F The first expression creates a psect pointer for the sequence andF assigns it to location CP. The second expression advances theF pointer to the next character location (.CP+1), fetches the" character, and assigns it to CH2. 3 CH$A_WCHARF The advance-write-character function advances the pointer containedF at a specified address (addr) and then stores a specified character/ (c) at the location designated by the pointer.t CH$A_WCHAR( c, addr ) Example:h8 -----------------< CH$WCHAR(%C'A',.CP); | | | | A | S4:8 -----------------8 INCR I FROM 1 TO 3 DO -----------------< CH$A_WCHAR(%C'B',CP); | B | B | B | A | S4:8 -----------------F The first expression stores a character at the position designated byF the pointer (S4) contained at location CP. The second expressionF advances the pointer three times (S4+3), storing a character after each advance.3 CH$ALLOCATIONtF The allocation function returns a value which represents the numberF of fullwords required to contiguously store a specified number (n) of+ characters of a given character-size (cs). CH$ALLOCATION( n {,cs})e) The algorithm for the value returned is: C value = (n - 1 + characters-per-value) / characters-per-valueuF If cs is omitted, the default character-size of the system is used0 (that is: 8 for BLISS-32, and 7 for BLISS-36). Example:r( OWN S3: VECTOR[CH$ALLOCATION(45)];F This declaration allocates fullword storage at S3 for 45 charactersF of default character-size. For BLISS-32, the equivalent fullword1 storage provided would be: OWN S3: VECTOR[12]; 3 CH$COPYuF The copy function copies a list of source characters, that is: firstF source (sn1, sptr1), second source (sn2, sptr2),... etc., to aF destination (dptr) of specified lenght (dn). If the destinationF length (dn) exceeds the total number of source characters copied, theF remaining locations are filled with a specified character (fill).+ The last pointer value (dn+1) is returned. < CH$COPY( sn1, sptr1, sn2, sptr2, ..., fill, dn, dptr ) Example: : OWN SV8: CH$ALLOCATION[8]; -----------------A BIND CPS = UPLIT('ABCDEF'); | D | C | B | A | P.AAA:q: ... | | | F | E |: CH$COPY(2,CH$PTR(CPS,4), -----------------? 4,CH$PTR(CPS),%C'*', | B | A | F | E | SV8: : 8,CH$PTR(SV8)); | * | * | D | C |: -----------------C CH$COPY combines the effects of the CH$MOVE and CH$FILL functions.d 3 CH$DIFFtF The difference function returns a value that represents the offset,> or index, between specified character pointers (ptr1 - ptr2). CH$DIFF( ptr1, ptr2 )oA The pointers (ptr1 and ptr2) must be of the same character size.e Example: ) IF CH$DIFF(.X,.Y) EQL 0 THEN REX();FF If the pointer value contained in X is the same as the pointer value" contained in Y, call routine REX. 3 CH$FAIL F The fail function is used in conjunction with the find functionsF (CH$FIND) to determine if one of those functions has returned a "nullF pointer" (indicating that a specified character has not been found).F If the fail function returns a 1, a null pointer has been detected; otherwise a 0 is returned.d CH$FAIL( ptr ) Example:( STAR = CH$FIND_CH(.N,.WORK,%C'*'); IF CH$FAIL(.STAR)C THEN PROCESS(.N,.LINE)5 ELSE ERROR(.N,.LINE,CH$DIFF(.STAR,.WORK)));nF If a null pointer is returned (.STAR), an invalid character (*) hasF not been found, CH$FAIL is true, and the line is processed; otherwise an error routine is called. 3 CH$FILLgF The fill function initializes a specified number (dn) of characterF positions with a selected character (fill), starting from a specifiedF location (dptr). The value returned is the final pointer position (dn+1). CH$FILL( fill, dn, dptr) Example:a? OWN SV8: CH$ALLOCATION(8),CPD; ----------------- F BIND CPS = UPLIT('ABCDEF); | D | C | B | A | P.AAA:? ... | | | F | E | ? CPD = CH$PTR(SV8); ----------------- D CPD = CH$MOVE(2,CH$PTR(CPS,4),.CPD); | B | A | F | E | SV8:? CPD = CH$MOVE(4,CH$PTR(CPS),.CPD); | * | * | D | C |e? CPD = CH$FILL(%C'*',2,.CPD); -----------------tF The CH$PTR assigns a pointer (SV8) to CPD; 2 characters are thenF moved to SV8 and the pointer advanced (SV8+2); 4 more characters areF then moved and the pointer advanced (SV8+4); the fill characters areF then added and the pointer is again advanced (SV8+2). (See also CH$COPY.) 3 CH$FIND_CHF The find-character function searches a specified (ptr) sequence of aF given length (n), for a specified character (char). If the characterF is found, its pointer is returned; otherwise a null pointer isF returned. The return of a null pointer is determined by a CH$FAIL function. CH$FIND_CH( n, ptr, char ) Example:o) STAR = CH$FIND_CH(.N, .WORK,%C'*');  IF CH$FAIL(.STAR)l THEN PROCESS(.N,.LINE)4 ELSE ERROR(.N,.LINE,CH$DIFF(.STAR,.WORK));F The find function searches the length (.N) of a sequence (.WORK) forF an invalid character (*). If the character is not found, a nullF pointer is returned (.STAR), CH$FAIL is then true, and a process routine is called.e3 CH$FIND_NOT_CHF The find-not-character function searches a specified (ptr) sequence,F of a given length (n), for any character but the specified characterF (char). If an unspecified character is found its pointer isF returned; if an unspecified character is not found, a null pointer is returned.$ CH$FIND_NOT_CH( n, ptr, char ) Example: , STAR = CH$FIND_NOT_CH(.N,.WORK,%C'*'); IF CH$FAIL(.STAR)a THEN ERROR(.N,.LINE) 7 ELSE PROCESS(.N,.LINE,CH$DIFF(.STAR,.WORK));eF The find-not function searches the length (.N) of a sequence (.WORK)F for the presence of any character except the specified character (*).F If an unspecified character is found its pointer is returned, CH$FAILF is false, and the line is processed; otherwise, an error routine is called. 3 CH$FIND_SUB|F The find-subsequence function searches a sequence (cptr), ofF specified length (cn), for a subsequence (pptr) of a specified lengthF (pn). If the subsequence is found, a pointer to the first character< position is returned; otherwise a null pointer is returned.' CH$FIND_SUB( cn, cptr, pn, pptr ) Example:] OWN)* BAR: VECTOR[CH$ALLOCATION(512)];> WRD: VECTOR[CH$ALLOCATION(3)] INITIAL(%STRING'VAX');@ IF NOT CH$FAIL(CH$FIND_SUB(512,CH$PTR(BAR),3,CH$PTR(WRD)))9 THEN ...{Found the string "VAX" in buffer BAR}@ ELSE ...{Did not find the string "VAX" in buffer BAR}F The find-subsequence function searches a 512-character buffer (BAR)F for a 3-character sub-sequence (VAX) at a specified location (WRD).F If the sub-sequence is found, CH$FAIL is false and the tested condition is true. 3 CH$MOVE F The move function transfers a specified number (n) of characters fromF a location specified by a source-pointer (sptr) to a locationF specified by a destination-pointer (dptr). The final pointer' position (n+1) is returned as a value. CH$MOVE( n, sptr, dptr ) Example:-? OWN SV: CH$ALLOCATION[12], CPD; -----------------BF BIND CPS = UPLIT('ABC'); | | C | B | A | P.AAA:? ... ------------------? CPD = CH$PTR(SV); -----------------2C INCR I FROM 1 to 3 DO | - | - | - | A | SV:T? CPD = CH$MOVE(.I,CH$PTR(CPS),.CPD); | - | - | B | A |a? CPD = CH$FILL(%C'-',4-.I,.CPD); | - | C | B | A |a? ----------------- F The final value of CPD is a pointer to the 13th character position (SV+12). (See also CH$FILL.) 3 CH$PLUS F The plus function returns a pointer value that is offset (incrementedF or decremented) from a specified pointer (ptr) by a specified index value (i).H CH$PLUS( ptr, i )hF The index value (i) is a signed integer for obtaining the offset by logical addition. Example:  CP = CH$PLUS(.CP,-4); F The pointer value content of CP is decremented by 4 and returned to the location specified by CP.3 CH$PTRF The pointer function creates and returns a pointer value thatF designates either the specified base address (addr) of a? character-sequence or any offset (addr+i) of the base address.  CH$PTR( addr {,i} {,cs})F The index (i) value is a signed integer for logical addition. TheF character-size (cs) is an unsigned integer. If i is omitted, theF default is an index value of 0; if cs is omitted, the default size is$ 8 for BLISS-32, and 7 for BLISS-36. Example:f LITERAL BUFFSIZE = 45 OWN QADDR: BUFFSIZE, QBEGIN, QEND;r ... QBEGIN = CH$PTR(QADDR);-( QEND = CH$PTR(QADDR,BUFFSIZE-1);F Assign pointers to QBEGIN and QEND that specify the first and the0 last character positions of data segment QADDR. 3 CH$RCHARF The read-character function returns as a value a character from a2 location designated by a specified pointer (ptr). CH$RCHAR( ptr )c Example:o; _________________eB CP = CH$PTR(UPLIT('ABCD')); | D | C | B | A | P.AAA:; -----------------r; -----------------i@ CH1 = CH$RCHAR(.CP); | | | | A | CH1:; -----------------,F The first expression creates a psect pointer for the sequence andF assigns it to location CP. The second expression reads the firstB character from the sequence (.CP) and assigns it to location CH1. 3 CH$RCHAR_AF The read-character-advance function returns as a value a characterF from a location designated by a pointer that is contained at aF specified address (addr) and then advances the pointer to the next character position. CH$RCHAR_A( addr ) Example:E> -----------------E CP = CH$PTR(UPLIT('ABCD')); | D | C | B | A | P.AAA:O> -----------------> -----------------C CH1 = CH$RCHAR_A(CP); | | | | A | CH1:p> -----------------C CH2 = CH$RCHAR(.CP); | | | | B | CH2: > -----------------F The first expression creates a psect pointer for the sequence andF assigns it to CP. The second expression reads the first character,F assigns it to CH1, and advances the pointer (.CP+1); consequently,F the third expression can fetch the second character and assign it to CH2.n 3 CH$SIZEuF The character-size function returns a value that represents the@ number of bits-per-character appearing in a specified sequence. CH$SIZE( {ptr} )F The cs-pointer (ptr) is a pointer to the character sequence; if ptrF is omitted, the number returned is the system default character-size' of 8 for BLISS-32, or 7 for BLISS-36).i Example:t CH_SIZE = CH$SIZE(.CP);$F The value representing the number of bits-per-character in theF sequence specified by the pointer (.CP) is assigned to location CH_SIZE.a3 CH$TRANSTABLEsF The transtable function creates a translation table containing aF contiguous string of translated code characters. The table is placedF in the current PLIT program section and the value returned is the address of the table. CH$TRANSTABLE( ts )D' The translation-string (ts) syntax is: 4 translation-string translation-item ,...9 translation-item* {translation-code } 9 { REP replicator OF (ts) }P7 translation-code single-character-literalH? replicator compile-time-constant-expressionH8 *There must be an even number of items (from 2 to 256).F The CH$TRANSLATE function is used to index the table with a sourceF encoding (e.g. standard decimal), extract the table encoding (e.g.0 ASCII), and move it to a specified destination.3 CH$TRANSLATEF The translate function accesses a translation table (tab), indexesF the table for each source character of a sequence, specified byF pointer (sptr) and length (sn), and stores each translation at aF destination that is similarly specified (dptr and dn). If the sourceF (sn) exceeds the destination (dn), the excess source characters areF ignored. If the destination (dn) exceeds the source (sn), the excessF destination positions are filled by a specified (fill) character (notF translated). The final destination pointer (dn+1) is returned as a value.F3 CH$TRANSLATE( tab, sn, sptr, fill, dn, dptr )gF The following fragments translate four standard decimal numbers (0,> 1, 2, 3) to their ASCII equivalencies (octal 60, 61, 62, 63).: ---------------B BIND TBL = CH$TRANSTABLE(48,49,50,51); | 63 62 61 60 | P.AAA:: ... ---------------A CH$TRANSLATE(TBL,4,.CPS,0,4,.CPD); | 63 62 61 60 | DEST: : ---------------F The transtable parameter values are the decimal forms of ASCII 0, 1,? 2, and 3. The table and the destination show the octal forms.D 3 CH$WCHARF The write-character function stores a specified character (c) at a2 location designated by a specified pointer (ptr). CH$WCHAR( c, ptr ) Example: < OWN S4: CH$ALLOCATION[4], -----------------@ CP: INITIAL(CH$PTR(S4)); | | | | | S4:< -----------------< ... -----------------@ CH$WCHAR(%C'A',.CP); | | | | A | S4:< -----------------F The first expression establishes a 4-character data segment at S4.F The second expression creates a pointer (S4) at location CP. And the3 third expression stores the first character (.CP).c 3 CH$WCHAR_AF The write-character-advance function stores a specified character (c)F at a location designated by a pointer that is contained in aF specified address (addr) and then advances the pointer to the next character position. CH$WCHAR_A( c, addr) Example: < OWN: S4: CH$ALLOCATION[4]; -----------------@ CP: INITIAL(CH$PTR(S4)); | | | | | S4:< ... -----------------< INCR I FROM 1 to 4 DO -----------------@ CH$WCHAR_A(%C'A',CP) | A | A | A | A | S4:< -----------------F The first expression establishes a 4-character data segment at S4.F The second expression establishes a pointer (S4) to the segment atF location CP. The third expression writes a character four times,/ advancing the pointer after each write (S4+4).C3 CH$xxxF The relational functions do a character-by-character comparison ofF one sequence, specified by length (n1) and start location (prt1),F with another that is similary specified (n2 and ptr2). If theF sequences are different lengths, the shorter sequence is filled withF a selected character (fill), or a default character of 0, until theF lengths are equal. The format and the values returned for each function are as follows: * CH$xxx( n1, ptr1, n2, ptr2 {,fill} )3 Function s1 < s2 s1 = s2 s1 > s2i0 CH$EQL 0 1 00 CH$NEQ 1 0 10 CH$LSS 1 0 00 CH$LEQ 1 1 00 CH$GTR 0 0 10 CH$GEQ 0 1 10 CH$COMPARE -1 0 1 3 BITVECTOR.F BITVECTOR is the predefined name of a data structure that comprises a' contiguous sequence of 1-bit elements.. STRUCTUREi BITVECTOR[I; N] = + [(N + (%BPUNIT-1)) / %BPUNIT] = (BITVECTOR + I / %BPUNIT);a( Name Represents4 I The offset to the bit-element to be' referenced (0 to N-1).r8 N The total number of bits in the vector.) A variation in the form for BLISS-32 is:u STRUCTURE BITVECTOR[I; N] = [(N+7)/8]" BITVECTOR;F As an example, a 16 bit structure would be allocated as follows: ((16+7)/8) = 2 bytes.= |7 0| position13 |----------------|y> OWN |07| |00| FLAG + 0:3 FLAG: BITVECTOR[16]; |----------------|t> |15| |08| FLAG + 1:3 ------------------F With the BLISS-32 variation, the 10th bit-element (bit 09) would be6 referenced, and accessed by the compiler, as follows:6 FLAG[9] = 1; ! expands to: (FLAG)<9,1,0>F Note that a positive right-shift of bit-element I by 3 is the same asF dividing by 8, and the result derived by the logical AND is the same= as the remainder derived by dividing bit-element I by MOD 7.3 BLOCKrF BLOCK is the predefined name of a data structure that comprises a8 single- or multi-word block of variably-sized elements. STRUCTUREo0 BLOCK[O, P, S, E; BS, UNIT = %UPVAL] = [BS * UNIT]-* (BLOCK + O * UNIT);" Name Represents9 O The offset to the fullword containing the fieldd' to be referenced (0 to BS-1).n8 P The offset (in bits) to the start of the field+ to be referenced (0 to %BPVAL-1).  : S The size of the field (in bits) to be referenced (0 to %BPVAL).8 E The sign-extension flag (0 or 1). Default is 0 (unsigned). 9 BS The number of fullwords allocated to the block. 9 UNIT The number of bytes allocated per fullword. Thep% default is 4 for BLISS-32). @ The following allocates a block (BS * UNIT) having 2 fullwords:9 |31 24|23 16|15 8|7 0| 9 |--------|--------|--------|--------|eB OWN | A(32) | FLD + 0:9 FLD: BLOCK[2]; |--------------------|-----|--------| B | D(19) | C(5)| B(8) | FLD + 4:9 ---------------------|-----|--------- 3 The 8-bit, B field would be referenced as follows:eA FLD[1,0,8,0] = 15; ! expands to: (FLD + 1 * 4)<0,8,0> F Note that the compiler accesses the fields within a block by derivingF the offset to the byte at which the desired field begins. For example:bB (FLD + 0 * 4)<0,32,0> ! FLD + 0:(byte 0)B (FLD + 1 * 4)<0,8,0> ! FLD + 4:(byte 4)B (FLD + 1 * 4)<8,5,0> ! FLD + 4:(byte 4)B (FLD + 1 * 4)<13,19,0> ! FLD + 4:(byte 4)F BLOCK_BYTE is a predefined structure that is functionally equivalent to BLOCK[,BYTE].a 3 BLOCKVECTOR F BLOCKVECTOR is the predefined name of a data structure that comprisesF a contiguous sequence (or vector) of similarly-sized blocks ofF variably-sized elements. Note that with the exception of the blockF offset name (I), the algorithm is the same as that of the BLOCK structure. STRUCTUREt< BLOCKVECTOR[I, O, P, S, E; N, BS, UNIT = %UPVAL] = [N * BS * UNIT]s; (BLOCKVECTOR + (I * BS + O) * UNIT);H% Name Representst8 I The offset to the block to be referenced in the vector (0 to N-1).T8 O The offset to the fullword containing the field& to be referenced (0 to BS-1).= P The offset (in bits) to the start of the field to be $ referenced (0 to %BPVAL-1).9 S The size of the field (in bits) to be referenceda (0 to %BPVAL). 6 E The sign-extension (0 or 1). The default is 0 (unsigned).< N The number of blocks to be allocated to the vector.; BS The number of fullwords to be allocated per block.n9 UNIT The number of bytes to be allocated per fullword & (by default, 4 for BLISS-32).F The following allocates 10 blocks with each block having 4 fullwords (N * BS * UNIT): OWNtA DAT1: BLOCKVECTOR[10,4,4]; ! 40 fullwords, 160 bytes F A reference to the 3rd block, the 3rd fullword, and field B (bits 16 - 32) would be as follows:s DAT1[2,2,16,16,0] = 25;rF The expansion of the reference would then select the appropriate byte address as follows:D (DAT1 + ((2 * 3) + 2) * 4)<16,16,0> !DAT1 + 32:(byte 32) 3 CODECOMMENT2F A codecomment permits a comment, in the form of a quoted-string, toF be inserted into object code; moreover, compiler optimizations cannot cross a code comment. The form of the codecomment is:. CODECOMMENT 'quoted-string' ,... : block 3 COMPILETIMEIF A COMPILETIME declaration provides a name whose value can be changedF during the compilation of the source module. In all other aspects aF name declared COMPILETIME is the same as a name declared LITERALF (non-global) and can be used in all of the same ways. The syntax is:% COMPILETIME item ,... ; P# item name = ctce F The declaration is particularly used with lexical functions. ForF example, the value of a compiletime-name can be changed by a %ASSIGN function, as follows: BEGIN ...A COMPILETIME  ERRS = 0; MACRO-- CNT_ERRS = %ASSIGN(ERRS,ERRS+1) %;e ...c ENDeF When CNT_ERROR is called, it expands to: %ASSIGN(ERRS, ERRS + 1).F When the compiler encounters this expansion, it increases ERRS by9 one, thus keeping count of each occurrence of the error.e3 ENABLEF During condition-handling, an ENABLE declaration is the means byF which an establisher routine identifies a handler routine.F Identification is made at the start of the establisher routine'sE execution and lasts throughout the execution of any called routines. 7 Syntax | ExampleS! | 6 ENABLE handler-name | ROUTINE XE(Y,X) =* { ( actual ,... ) } | BEGIN5 | EXTERNAL ROUTINE:, { own-name } | XH;* actual { global-name } | LOCAL5 { forward-name } | L: VOLATILE;e+ { local-name } | ENABLEt/ | XH(L);s( | ...F Routine XE establishes routine XH as its handler and specifies that aF local data segment address (L) be passed to the handler when it is called. 3 EXITLOOPF An exitloop-expression provides: (1) a command to end the evaluation% of a loop; (2) a value for the loop.e EXITLOOP { value-exp } Example:e ...  ZFLAG = 0; INCR I FROM 0 TO 9 DOt IF .X[.I] EQL 0e% THEN (ZFLAG = 1; EXITLOOP);aF Elements of a vector (X) are evaluated for a 0; when a 0 is found,5 ZFLAG is set to 1 and the loop-expression is exited. 3 EXTERNALF An EXTERNAL data declaration is permanent, and extends theF accessibility of a name that is declared GLOBAL elsewhere. TheF declaration does not allocate storage, but makes the global storage/ available to other modules through the linker. 4 Syntax | Example" |2 EXTERNAL item ,... ; | MODULE S1 =, item name { :attribute ... } | BEGIN- | GLOBAL: { allocation-unit } | X: VECTOR[100];* { extension } | ...' { structure } | I2 attribute { field } | MODULE S2 =, { psect } | BEGIN/ { volatile } | EXTERNAL-- 32{ addressing-mode } | X;t* 32{ weak } | ...; For attribute details, reference: BLISS Tutor Attributes.E3 EXTERNAL_LITERALF An EXTERNAL LITERAL declaration provides a list of literal namesF already declared in other compiled modules. With the exception of aF name declared with a WEAK attribute, a name must not be declaredF EXTERNAL LITERAL unless it is already declared GLOBAL LITERAL in some! other block of the same program. 5 Syntax | Example-% | 6 EXTERNAL LITERAL item ,... ; | GLOBAL LITERAL? item name { :attribute ... } | BLKSIZE: SIGNED(8);n+ | ...r8 attribute { range } | EXTERNAL LITERAL4 32 { weak } | BLKSIZE;: For attribute details reference: BLISS Tutor Attributes.3 EXTERNAL_REGISTER F An EXTERNAL REGISTER data declaration temporarily specifies that aF GLOBAL REGISTER data segment, created in a calling routine, isF available for use; however, it is necessary that the declared name/ and register number be defined in the linkage.6 Syntax Example! |T) EXTERNAL REGISTER item ,... ; | LITERALE2 item name { = reg-number } | GRD_REG = 1;) { :attribute } | LINKAGE , | CONN =9 { allocation-unit } | %BLISS32(JSB:GLOBALe> { extension } | (GRD=GRD_REG));% { structure } | ... = attribute { field } | ROUTINE RT2: CONN NOVALUE =h+ { initial } | BEGIN7 { preset } | EXTERNAL REGISTERd. | GRD;% | ...p: For attribute details reference: BLISS Tutor Attributes.3 EXTERNAL_ROUTINEF An EXTERNAL ROUTINE declaration extends the accessibility of a nameF that is declared GLOBAL ROUTINE elsewhere. Through the declaration,; the routine is made available to other blocks and modules. 5 Syntax | Example-% | 6 EXTERNAL ROUTINE item ,... ; | EXTERNAL ROUTINEB item name { attribute ... } | F1: FORTRAN_SUB NOVALUE,B | F2: FORTRAN_SUB NOVALUE,B { novalue } | F3: FORTRAN_SUB NOVALUE;* { linkage } | BINDD attribute { psect } | TAB=UPLIT(F1,F2,F3):VECTOR;) 32 { addressing-mode } | ... A 32 { weak } | FORTRAN_SUB(.TAB[.I],P1,P2) : For attribute details reference: BLISS Tutor Attributes.3 FIELD F A FIELD declaration defines field names in BLOCK and BLOCKVECTORF structures and in similar type structures that are user defined. The syntax is:n8 FIELD { field-set-name }? { field-name = [ field-name | ctce ,... ] } ,... ; field-set-name = SETi3 field-name = [ field-name | ctce ,... ]N TES;F As an example, assume that the following two block structures are to to be allocated.O: |31 24|23 16|15 8|7 0| |31 24|23 16|15 8|7 0|: |-----|-----|-----------| |-----|-----|-----------|= | F(8)| B(8)| A(16) | 0 | | B(8)| A(16) | 0S: |-----------|-----------| |-----------------------|= | Z(16) | Q(16) | 1 | L(32) | 1o: ------------------------- |-----------------------|= F2_BLK | V(32) | 2 : -------------------------/ F1_BLKeA For these blocks, three FIELD declarations are coded as follows:)= Common Fields | Unique to F1 | Unique to F2 - | |k3 FIELD | FIELD | FIELDe9 COM_FLDS = | F1_FLDS = x%~ BLS32047.B+![BLISS32.V047.COMMON]ADDBLS.HLP;5Uh|| F2_FLDS =n5 SET | SET | SET(A A = [0,0,16,0], | L = [1,0,32,0], | F = [0,24,8,0],wA B = [0,16,8,0] | V = [2,0,32,0] | Q = [1,0,16,0],tA TES; | TES; | Z = [1,16,16,0] 6 | | TES;F A MACRO declaration is now used to define the blocks and provide the appropriate attributes. MACROc6 F1_BLK = BLOCK[3] FIELD(COM_FLDS,F1_FLDS) %,6 F2_BLK = BLOCK[2] FIELD(COM_FLDS,F2_FLDS) %;F Each field-set-name can now be used in structure allocations and eachF field-name in references to represent the associated actuals. (WereF it not for the FIELD declaration such representations would be illegal.)+ OWN LOCALg: START: F1_BLK; or PTR: REF F2_BLK;) ... ...1 START[V] = 15; PTR[Q] = 5;a3 Field-referenceF A field-reference is used in a structure-declaration to referenceF portions of storage that are %BPVAL (bits per value) or less in size.F %BPVAL is a predeclared literal that, depending on the dialect, is equal to 32, or 36 bits.i A field-reference has the form: addr< pos, size {,ext} > where:o* addr is an addressable-unit address: pos is the number of bits skipped before the field. size is the number of bits in the field; ext is the signed (1) or unsigned (0) extension biteF In BLISS-32, for example, X<0,8,1> would select the signed low-order# byte of the fullword at address X.h 3 FORWARDnF A FORWARD data declaration predeclares certain attributes for a nameF before its storage is allocated by an OWN or GLOBAL declaration.F This provides a means for avoiding a repetitive and confusing use of definitions.t5 Syntax | Examplea$ |/ FORWARD item ,... ; | FORWARDs. item name { :attribute ... } | Y;+ | OWN : { allocation-unit } | X: INITIAL(Y),: { extension } | Y: INITIAL(X);$ { structure } |$ attribute { field } |$ { psect } |$ { volatile } |$ 32{ addressing-mode } |F The FORWARD declaration predeclares Y so that it can then be used inF the OWN declaration to initialize X, which then completes a pointerF swap by initializing Y (that is, the .X points to Y and the .Y pointsB to X). For attribute details reference: BLISS Tutor Attributes.3 FORWARD_ROUTINEAF FORWARD ROUTINE declarations predeclare certain attributes forF routines before they are fully defined by ROUTINE or GLOBAL ROUTINEF declarations. The declaration is also used to predeclareF routine-names in a block, thus imparting independence to calling- relationships and improving maintainibility.;9 Syntax | Examples( |C FORWARD ROUTINE item ,... ; | MODULE E1 (MAIN = CTRL) =i/ item name { : attribute ...} | BEGINw9 | FORWARD ROUTINEe3 { novalue } | CTRL,h3 attribute { linkage } | STEP; 8 { psect | ROUTINE CTRL =- 32 { addressing-mode } | ...1; | ROUTINE STEP(A) = - | ... : For attribute details reference: BLISS Tutor Attributes.3 GLOBALF A GLOBAL data declaration is permanent. Its scope lies within theF block in which it is declared and any lower-level blocks, and anyF other block or module in which its name is declared EXTERNAL. A name0 must be declared global only once in a program.3 Syntax | Examplet" |/ GLOBAL item ,... ; | MODULE S1 =d) item name { :attribute ... } | BEGINn* | GLOBAL7 { allocation-unit } | X: VECTOR[100];E' { extension } | ...l+ { structure } | d/ { field } | MODULE S2 =h) { alignment } | BEGIN , { initial } | EXTERNAL* attribute { preset } | X;' { psect } | ...i" { volatile } |" 32{ weak } |: For attribute details, reference: BLISS Tutor attribute.3 GLOBAL_REGISTERNF A GLOBAL REGISTER data declaration temporarily allocates data to aF general register; however, the register and its content can also beF made available to a called routine through an EXTERNAL REGISTERF declaration (same name) and a GLOBAL linkage-option (same name and register number).6 Syntax | Example% |l5 GLOBAL REGISTER item ,... ; | ROUTINE RT1 = 1 item name = reg-number | BEGINX; { :attribute ... } | GLOBAL REGISTERn: | TEMP1 = 1;2 { allocation-unit } | RT2();/ { extension } | ...IC { structure } | ROUTINE RT2: CONN NOVALUE ==1 attribute { field } | BEGIN= { initial } | EXTERNAL REGISTER6 { preset } | TEMP1;/ | ... F Assume that the linkage (CONN) for the call provides both the nameF and register assignment in its GLOBAL linkage-option. (For attribute- details reference: BLISS Tutor Attributes.)a3 GLOBAL_ROUTINEF A GLOBAL ROUTINE declaration defines a routine whose scope liesF within the block in which it is declared and any lower-level blocks,F and in any other block or module in which its name is declared" EXTERNAL ROUTINE. The syntax is: GLOBAL ROUTINE name8 { ( { input-formal-parameter ,... } }8 { { ;output-formal-parameter ,... } ) }" { : attribute ... }! = routine-body-exp  { novalue } attribute { linkage } { psect } 32 { weak } Example: E MODULE SORT = | MODULE PROCESS (MAIN = PROCESS) = ) BEGIN | BEGINT4 GLOBAL ROUTINE SORT(F1,F2) = | EXTERNAL ROUTINE- BEGIN | SORT;F5 ... | ROUTINE PROCESS =B* ... | ...3 ... | SORT(A,100);+ END; | ...; ' END | END * ELUDOM | ELUDOMF The routine SORT is declared global in module SORT, and then declaredF external for use in module PROCESS. (For attribute details% reference: BLISS Tutor Attributes.)3 IFF IF is a conditional-expression which provides alternative actions for program flow.# IF exp THEN exp { ELSE exp };-/ Alternate Form Example83 IF exp IF .X GTR 0-, THEN THEN2 exp Y = .X, ELSE ELSE4 exp; Y = -.X;F The example sets Y to the absolute value of the content of X. EndingF with a semicolon, the structure is a statement-like use of a3 conditional-expression; however, in the following: ) Y = (IF .X GTR 0 THEN .X ELSE -.X);UC the value of the conditional-expression is assigned to location Y. 3 Indexed-loopF An indexed-loop-expression first steps a specified index value andE then executes a loop cycle, continuing until the value is exhausted. index-loop-type - FROM exp TO exp { BY exp } DO exp; C index-loop-type { INCR | INCRA | INCRU | DECR | DECRA | DECRU }EF The loop-type interprets the index as an integer (INCR, DECR),: address (INCRA, DECRA), or unsigned (INCRU, DECRU) value. Example:s SUM = 0; INCR I FROM 0 TO 20 DO! SUM = .SUM + .LIST[.I];F This indexed-loop forms the sum of 21 elements of a vector (LIST) byF executing the assignment 21 times, once each (by default) for .I2 equal to 0, then 1, then 2, and so on through 20.3 LABELeF A LABEL declaration identifies a block for a LEAVE expression,F thereby allowing the expression to terminate the evaluation of the block. + Syntax | Example_ |! LABEL name ,... ; | LABEL " | L; | ...a% | L: BEGINe6 | INCR I FROM 0 TO 19 DO3 | IF .X[.I] EQL 0rB | THEN (ZFLAG = 1; LEAVE L);$ | END;F The evaluation of the leave-expression terminates the evaluation ofF the loop and returns to the label-name (L). (See also BLISS Alpha Leave.)3 LEAVE F The leave-expression provides: (1) a command to end the evaluationC of a block; (2) the label of the block; (3) a value for the block. $ LEAVE label { WITH value-exp }F A leave-expression must be contained in the same block designated by its label.n Example:d LEAVE ALPHA WITH .X-1;F This expression evaluates the end of block ALPHA and provides a value> (.X-1) for the block. (See also BLISS Tutor Blocks Labeled.) 3 LIBRARYaF A LIBRARY declaration is similar to a require-declaration in that itF specifies the name of file that will replace the declaration when theF module is compiled; however, a library file differs in two importantF ways: First, it is a precompiled binary file that is ready forF immediate use; that is, the file is already in an internal compilierF form and can, therefore, greatly reduce compilation costs. Second,F only certain types of declarations can be used in a library source file. The syntax is:' LIBRARY 'quoted-file-designator';iF For restrictions on the kinds of declarations that can be used in aE library source file refer to Chapter 16 of the BLISS Language Guide.l 3 LINKAGEtF A linkage-declaration declares a linkage-name that is defined by theF a combination of the following: Linkage-type, parameter-locationF options, register-usage options, and global-register options. Typical syntax is as follows: linkage-declaration , LINKAGE linkage definition ,... ; linkage-definition% linkage-name = linkage-typem8 { ( { input-parameter-location ,... } }8 { { ;output-parameter-location ,... } ) }8 { nothing }$ { :linkage-option ... }4 linkage-namesRF Other than user-specified linkage-names, there are 8 predeclared names (four for each dialect):  BLISS-32 BLISS-36| BLISS* BLISS36C* FORTRAN FORTRAN" FORTRAN_SUB FORTRAN_SUB# FORTRAN_FUNC FORTRAN_FUNC ? The asterisk denotes the default linkage-name for the dialect.g4 linkage-types F The linkage-type defines the general type of calling sequence inF terms of specific transfer-of-control instructions and/or software- calling conventions. The linkage-types are:G2 32 { CALL | INTERRUPT | JSB }2 36 { PUSHJ | F10 | JSYS | PS_INTERRUPT }F Each linkage-type generally establishes: (1) the machineF instructions used to transfer control to and from a routine, (2)F whether an argument pointer is used to address actual-parameter? values, (3) which linkage-options and defaults are applicable. 4 linkage-parametersF The linkage-parameter options specify the method by which; actual-parameters are passed. The options are as follows:EA input-parameter-location { REGISTER = register number } A { STANDARD }hA { nothing } A ouput-parameter-location { REGISTER = register number } F Depending on the linkage-type, the STANDARD (default) method passesF parameters by: (1) an argument pointer, or (2) an implicit stackF location. Input-actual-parameters may be passed using the general9 register method in combination with the standard method.e4 linkage-optionshF The linkage-options modify the calling sequence by specifying thoseF registers not to be used and those to be saved and restored. The options are as follows: linkage-option3 { GLOBAL ( global-register-name ,... ) } 3 { PRESERVE (ctce ,...) }3 { NOPRESERVE (ctce ,... ) } 3 32 { NOTUSED (ctce ,... ) }3 36 { LINKAGE_REGS (ctce, ctce, ctce ) }G3 36 { CLEARSTACK } 3 36 { PORTAL } 3 36 { SKIP (ctce) } 3 LITERAL F A LITERAL declaration defines a name whose value is determined by a constant expression. 3 Syntax | Example " |, LITERAL } | LITERAL7 GLOBAL LITERAL } item ,... ; | CAPACITY = 25;AB item name = ctce | STUDENTS = .ROOMS * CAPACITY;( { :attribute ... } | ...3 | GLOBAL LITERALB9 attribute { range } | BUFFERSIZE = 500N" 32 { weak } |: For attribute details reference: BLISS Tutor Attributes.3 LOCALlF A LOCAL data declaration is temporary; that is, it exists only during4 the execution of the block in which it is declared.4 Syntax | Example" |, LOCAL item ,... ; | BEGIN, item name { :attribute ... } | LOCAL1 | TEMP; 1 { allocation-unit } | TEMP = .X; . { extension } | X = .Y;1 { structure } | Y = .TEMP;|* attribute { field } | END" { alignment } |" { initial } |" { preset |" { volatile |: For attribute details reference: BLISS Tutor Attributes.3 MAP F A MAP data declaration is an overlay that provides new attributes for* a name that has been previously declared.1 Syntax | Example ! |L1 MAP item ,... ; | ROUTINE BETA =u( item name :attribute ... | BEGIN5 | OWN B: VECTOR[35];sF { allocation-unit } | STRUCTURE ARRAY[I,J] = ARRAY+I*5+J;0 { extension } | MAP B: ARRAY;& attribute { structure } | ...! { field } | ! { volatile } | F The OWN declaration allocates a vector of 35 words at address B; theF STRUCTURE declaration then defines an array template for the vector;F the MAP declaration then associates the array structure with the name@ B. (For attribute details reference: BLISS Tutor Attributes.)3 OWN F An OWN data declaration is permanent; its scope lies within the blockF in which it is declared and all lower-level blocks not declaring the same name.0 Syntax | Example" |? OWN item ,... ; | BEGIN ! block 1e* item name { :attribute ... } | OWN A;? | BEGIN ! block 2e/ { allocation-unit } | OWN B; ? { extension } | BEGIN ! block 3I4 { structure } | OWN C;2 { field } | END;- attribute { alignment } | END;N@ { initial } | BEGIN ! block 2a/ { preset } | OWN D;- { psect } | END;e( { volatile } | END;F Address A is known in all blocks; B is known in blocks 2 and 3; C isF known in block 3 only; and D is known in block 2a only. (For7 attribute details reference: BLISS Alpha Attributes.)l3 PLITF A plit is used to represent a constant value (numeric-,F string-literal, or link-time-constant) that requires more than one fullword of storage.AF Examples of forms of plit-string and plit-expression allocations follow: BINDC TEMP = PLIT (%ASCII 'A complete list of errors follows:');  ! BIND ADDR = PLIT (125, 75);.) BIND ADDR = UPLIT (A[4], B + 2, X); F The value of a plit is the address of the data segment that containsF the constant data. The data segment is allocated in a plit programF section (PSECT), which is initialized to the given constant before program execution.F There are two kinds of plits, the counted plit (PLIT) and theF uncounted plit (UPLIT), which differ only in that the data segmentF for the counted plit is preceded by an extra fullword (uncounted)B that specifies the number of fullwords in the plit. For example:8 31 08 -----------------8 | | | | 2 |8 -----------------> BIND ADDR = PLIT (5, 10); | | | | 5 | ADDR:8 -----------------8 | | | 1 | 0 |8 -----------------4 plit-allocation,F If an allocation-unit is used, it specifies the unit of storage usedF (LONG, WORD, BYTE). If both a psect-allocation attribute (PSECT) andF an allocation-unit are used, they may follow the PLIT keyword in any2 order. The following example allocates one byte:, BIND ADDR = PLIT PSECT ($OWN$) BYTE(7); 4 plit-groupF The plit-group is a special plit structure that uses the keywords REPF and OF to allow the allocation of plit-expressions to be replicated, several times. A BLISS-32 example follows:< 31 0< --------------C | 8 | P.AAA:l< --------------< | 8 |< --------------< | 8 |< --------------< UPLIT (REP 3 OF (8), | D C B A |< REP 2 OF (%ASCIZ'ABCD')); ______________< | 0 |< --------------< | D C B A |< --------------< | 0 |< ______________3 PSECTtF A PSECT declaration specifies, for the linker, the storage, requirements for program sections (PSECTS).& PSECT storage-class = psect-name( { ( attribute ,... ) } ,...;: storage-class { OWN | GLOBAL | PLIT | CODE | NODEFAULT }+ { EXECUTE | NOEXECUTE }t+ { WRITE | NOWRITE }u+ { OVERLAY | CONCATENATE }(+ 32,36 { READ | NOREAD }l+ 32 { LOCAL | GLOBAL }g+ attribute 32 { SHARE | NOSHARE } + 32 { PIC | NOPIC } + 32 { ALIGN (boundary-ctce) }a+ 32 { addressing-mode }m+ 32 { VECTOR }S+ 36 { ORIGIN (address-ctce) } F An example of the allocation of data segments to program sections follows: OWN A, B;! PSECT OWN = ALPHA(NOWRITE);N OWNl C, D; PSECT OWN = BETA(EXECUTE); OWN F: VECTOR[10];F OWN declaration data segments A and B are allocated to defaultF program section storage-class OWN; C, D, and E, are allocated toF write-protected program section ALPHA; and segment F is allocated toF executable program section BETA. (For attribute details reference: BLISS Tutor Attributes.)o 4 psect-names F A declared psect-name establishes a global name for a module andF defines the specified attributes for the program section. DefaultF program sections (psect-names) are associated with a storage class as follows: = Class Psect-name(32) Psect-name(36) 7 OWN $OWN$ $LOW$P7 GLOBAL $GLOBAL$ $LOW$ 8 PLIT $PLIT$ $HIGH$8 CODE $CODE$ $HIGH$F A psect-declaration can be written to override a default program section as follows: PSECT  PLIT = $CODE$;@ This declaration allocates plits in the program section $CODE$. 3 REGISTERF A REGISTER data declaration provides for the temporary allocation ofF a data segment to one of the general registers. The data segment isF allocated in either a user specifed register or one allocated by the compiler.3 Syntax | Exampled" |1 REGISTER item ,... ; | ROUTINE ABLE =o+ item name { = reg-number } | BEGINe. { :attribute ...} | REGISTERD | STATUS = 5: BITVECTOR[10];/ { allocation-unit } | BETA; ) { extension } | ...." attribute { structure } |" { field } |" { initial } |" { preset } |F The general register number for STATUS is specified as 5, and only 10F register bits are used; the number for the BETA register is left toF be chosen by the compiler and all register bits are used. (For7 attribute details reference: BLISS Tutor Attributes.)t 3 REQUIREiF A REQUIRE declaration specifies the name of a file that will replace= the declaration when the module is compiled. The syntax is:s( REQUIRE 'quoted-file-designator' ; Example: " MODULE BETA (MAIN = PRINT) = BEGIN @ REQUIRE 'TUTIO'; ! Get terminal I/O routines ROUTINE PRINT: NOVALUE = BEGIN = TTY_PUT_QUO('SWELL'); ! Call on output routinei END; ENDY ELUDOM3 RETURNF The return-expression: (1) ends the evaluation of a routine; (2)F returns a value for the routine; and (3) sends control back to the) point from which the routine was called.c! RETURN [ return-value-exp ]B 3 SELECTxxxxF The select-expression is similar to the case-expression, theF difference being that a range of values for the select-index need not6 be specified and the selectors need not be constants.4 Syntax | Example$ |5 select-type index-exp OF | SELECTONE .X OFg. SET | SETD { label ,... } : action; | [1]: REPORT1(.Z);D TES; | [2]: REPORT2(.Z);C | [4,7]: Q = .Z + 1; C { SELECT | SELECTA } | [3,5,6,8]: ERROR1(.Z);NC type { SELECTU | SELECTONE } | [OTHERWISE]: ERROR2(.Z);I/ { SELECTONEA | SELECTONEU } | TES;W$ |$ { exp } |$ { exp TO exp } |$ label { OTHERWISE } |$ { ALWAYS } |F The select-types interpret the value of the index and selectors asF integer (SELECT, SELECTONE), unsigned (SELECTU, SELECTONEU), or& address (SELECTA, SELECTONEA) values. 3 STACKLOCALF A STACKLOCAL data declaration allocates its data segment in theF current stack frame; otherwise, it is the same as a LOCAL declaration.r 3 STRUCTURE F A STRUCTURE declaration provides an algorithm for designing,= allocating, and accessing, a data structure. The syntax is:p0 STRUCTURE definition ,... ;! definition structure-name0 [ { access-formal-name ,... }7 { ;allocation-formal-name ,... } ]7/ = { [ structure-size-exp ] } % structure-body-exp 5 allocation allocation-name { = default-ctce } 5 body-exp (access-algorithm)nF In the following example a decimal-digit array (DDA) is built that. provides for eight 4-bit digits per fullword.2 STRUCTURE ! Declaration keyword.+ DDA[I; N] = ! Formal names.a7 [(N+1)/2] ! Allocation size in bytes. / DDA<4*I, 4>; ! Access-algorithm.r ...dA OWN X: DDA[10]; ! DDA is bound to X; N is replaced by @ ... ! 10, allocating 5 bytes ((10+1)/2).> X[5] = .X[6]; ! I is replaced by 5 and by 6, and? ! expands to: X<4*5,4> = .X<4*6,4>;F The STRUCTURE defines the parameters. The OWN allocates an addressF (X) and a desired structure size (5 bytes for ten 4-bit elements).F The field-reference accesses element 6 and assigns its contentsF (<24,4>) to element 5 (<20,4>). For more on structure references# refer to: BLISS lang prim struct.d 3 SWITCHESF A SWITCHES declaration provides the compiler with information about aF block that allows for a more individualized interpretation. ForF example, a block still in the debugging process can have switchesF that cause the compiler to provide listings, error messages, andF macro expansion traces. In the syntax that follows, the asterisk (*)F indicates a default switch setting. See also, BLISS( Alpha(betic_Language_Topics) %SWITCHES.4 SWITCHES { on-off-item | special-item } ,...;7 { ERRS* | NOERRS } 7 { OPTIMIZE* | NOOPTIMIZE } 7 on-off-item { SAFE* | NOSAFE } 7 { ZIP | NOZIP* } 7 { UNAMES | NOUNAMES* } 7 { CHECK_INITIAL | NOCHECK_INITIAL* }|7 { CHECK_ALIGNMENT | NOCHECK_ALIGNMENT* }-7 { CHECK_FIELD* | NOCHECK_FIELD }C7 { CHECK_OPTIMIZE* | NOCHECK_OPTIMIZE }_7 { CHECK_REDECLARE | NOCHECK_REDECLARE* } 4 { LANGUAGE (language-list) }4 { LINKAGE (linkage-name) }4 special-item { LIST (list-option ,... ) }4 { STRUCTURE ({structure-attribute}) }4 32 { ADDRESSING_MODE (mode-spec ,... ) }B language-list { COMMON | BLISS32 | BLISS36 | BLISS16 | BLISS32V |< BLISS32M | BLISS32E | BLISS64E | nothing* } 32 { BLISS* }t 36 { BLISS36C* }r 36 { BLISS10 } linkage-name { FORTRAN } { FORTRAN_SUB } { FORTRAN_FUNC }- { SOURCE* | NOSOURCE } - { REQUIRE | NOREQUIRE* } - { EXPAND | NOEXPAND* }2- { TRACE | NOTRACE* }3- list-option { LIBRARY | NOLIBRARY* } - { OBJECT* | NOOBJECT } - { ASSEMBLY | NOASSEMBLY* }L- { SYMBOLIC* | NOSYMBOLIC }r- { BINARY* | NOBINARY }R- { COMMENTARY* | NOCOMMENTARY }(3 32-mode-spec { EXTERNAL | NONEXTERNAL = mode-32 }t { ABSOLUTE } { GENERAL } mode-32 { LONG_RELATIVE } { WORD_RELATIVE }F An example of a switches-declaration, which specifies that no warning< or error messages are to be displayed for a block, follows: BEGIN ...p BEGINs SWITCHES NOERRS; ...a END; ...o ENDn4 on-off-switch-itemssF Each on-off switch item has a negation (such as NOERRS) to indicate1 that the associated actions should not be taken.-' Switch-item Actiona> CHECK_ALIGNMENT Diagnose poorly aligned declarations and' field references.G CHECK_FIELD Diagnose the use of a field name with a structurelG that was declared with a field attribute that did1 not include the field name. G CHECK_INITIAL Diagnose LOCAL, STACKLOCAL and REGISTER variablesTD which are referenced before any value has been' assigned to them.p@ CHECK_OPTIMIZE Generate an informational message when the= compiler can tell for certain that some@ alternative in an IF, CASE, or SELECT willC never be chosen, or that the test on a DO will . always be true or false.E CHECK_REDECLARE Generate an informational message when a symbolfF is declared in one block with the same name as aF symbol which is declared in an enclosing block. B ERRS Display compiler warnings and error messages& on the terminal.> OPTIMIZE Perform optimization across mark points.D SAFE Ignore computed addresses during optimization.> UNAMES Generate unique names for OWN variables,@ non-global ROUTINE names, and LABELS, when7 producing a listing for assembly. < ZIP Optimize time at the expense of space.4 special-switch-itemsC The action associated with each special-switch-item is as follows:1 Item Actiona/ ADDRESSING_MODE <= BLISS-32 OnlyID ( mode-spec, ... ) Establish the given addressing modesD as the addressing-mode defaults forD subsequent declarations in theD current block. An EXTERNAL mode-specD l4~ BLS32047.B+![BLISS32.V047.COMMON]ADDBLS.HLP;5UM|5 supplies the default for EXTERNAL andD EXTERNAL ROUTINE declarations. AD NONEXTERNAL mode-spec supplies theD default for FORWARD, FORWARD ROUTINE,D and PSECT declarations. (This defaultD is ineffective unless a programD section is declared within theD block.) The addressing-mode attributeE is described in BLISS Tutor Attribute. D LANGUAGE Establish the given list of language-D ( language-list ) names for the remainder of theD current block. Perform transport-D ability checking, if applicable, forD the combination of dialects specifiedD or implied in the list. See SectionD 18.2.5 and Appendix C of the BLISSC Language Guide for more information. D LINKAGE Establish the given linkage-name asD ( linkage-name ) the linkage-name default for theD remainder of the current block. ThisD linkage-name is used as the linkage-D attribute of any subsequent routineD declaration in the current block thatD does not specify a linkage-attribute.D LIST Establish the given list-options forD ( list-option, ... ) the output listing of the remainder7 of the current block.hD STRUCTURE Establish the given structure-attri-D ( structure-attribute ) bute as the default structure-D attribute to be used in subsequentD default-structure-references withinD the current block (see Sections 11.4D and 11.8 of the BLG). If the givenD structure-attribute is null, then allD subsequent default-structure-D references in the block are invalid.5 list-optionsF The listing produced as the result of a compilation can contain the following parts:  Source listing $ Macro expansions and traces Library usage traces  Object code listingF The LIST switch-item controls the parts of the output listing to beF produced according to the settings specified by the list-options.F The first two list-options (SOURCE and REQUIRE) operate on a specialF counter (the source listing counter). The counter is initially setF to 1, and source text is listed only when the value of the counter isF greater than zero. Thus the SOURCE and REQUIRE options control theF listing of the source text from files specified in the compilationF command and by REQUIRE declarations. The action associated with each list-option are as follows:- List-option ActionoB SOURCE Increments the source listing counter. NOSOURCE8 decrements the source listing counter.B REQUIRE Causes the source listing counter to be leftB unchanged when a file specified by a REQUIREB declaration is opened or closed. NOREQUIREB causes the source listing counter to beB decremented when a file specified by a REQUIREB declaration is opened, and incremented when the! file is closed.{B EXPAND List the lexeme stream that is the result of' each macro expansion. B TRACE Trace the expansion of macros, printing eachB lexeme stream produced during the expansion andB the final lexeme stream produced as as result of the expansion.B LIBRARY Trace the usage of names whose declarations are5 obtained from library binary files.lB OBJECT List the object code. The format of the listingB is determined by the settings of the following four switches.B ASSEMBLY List the object code instructions in a form( suitable for assembly.B SYMBOLIC List the object code instructions in a formB suitable for interpretation by the programmer.B This format uses source program symbols wherever; possible in the object code instructions. : BINARY List the binary text of the object code.B COMMENTARY List commentary produced by the compilerB concerning the object code generated. AtB present, commentary is limited to a line-number" cross reference. 3 Tested-loop F Tested-loop-expressions can be used to execute a loop cycle while, orF until, a specified test condition exists. The two types of# tested-loops provide four options:TC pre-tested | WHILE test-exp DO loop-exp; C { WHILE | UNTIL } exp DO exp | UNTIL test-exp DO loop-exp;2' |{C post-tested | DO loop-exp WHILE test-exp;iC DO exp { WHILE | UNTIL } exp | DO loop-exp UNTIL test-exp;o Example: WHILE .PTR NEQ 0 DO  BEGIN! SUM = LIST[.PTR,CONT]; ! PTR = LIST[.PTR,LINK];  END;fF The loop-expression is the BEGIN-END block. Each cycle begins with aF test of the contents of PTR. If the value of PTR is not 0, a newB cycle begins; otherwise, the evaluation of the loop is completed. 3 UNDECLAREgF An UNDECLARE declaration limits the scope of a declaration. That is,F a name undeclared in an inner block cannot be referenced in the inner: block even though the name is declared in an outer block.. Syntax | Example |% UNDECLARE name ,... ; | BEGINS, | OWN A, B, C;# | ...n) | BEGIN3 | UNDECLARE A, C;s' | ...l' | END # | END F The name B, declared OWN in the outer block, still can be referenced1 in the inner block but the names A and C cannot.r3 VECTORF VECTOR is the predefined name of a data structure that comprises aF continguous sequence of elements of the same length (byte, word, or longword).  STRUCTUREl0 VECTOR[I; N, UNIT = %UPVAL, EXT = 0] = [N * UNIT]: (VECTOR + I * UNIT)<0, %BPUNIT * UNIT, EXT>;( Name Meaning< I The offset to the element to be referenced (0 to N-1).g@ N The total number of elements in the structure.A UNIT The number of addressable-units (bytes) in eachE> element. %UPVAL by default (4 for BLISS-32)./ %BPUNIT by default is 8 bits.eD EXT The sign-extension for fetching elements (0 or 1).8 The default is 0 (unsigned extension).F Note that the following BLISS-32 declarations use an allocation-unitF (BYTE = 8 bits) and an extension attribute (SIGNED = 1), along with, default values, to allocate vector storage. OWNsB BYTE_TAB: VECTOR[10,BYTE], ! 10 unsigned bytes.@ WORD_TAB: VECTOR[10,2,SIGNED], ! 10 signed words.F LONG_TAB: VECTOR[10]; ! 10 unsigned longwords.2 A reference to the 5th byte at BYTE_TAB would be:C BYTE_TAB[4,BYTE] = 7; ! expands to: (BYTE_TAB + 4)<0,8,0> F An element is accessed by the compiler in terms of an offset to theF byte at which the desired field begins, and its field is accessed by bit position and number.dB (BYTE_TAB + I * 1)<0,8*1,0> ! An 8-bit byte field.D (WORD_TAB + I * 2)<0,8*2,1> ! A 16-bit signed field.= (LONG_TAB + I * 4)<0,8*4,0> ! A 32-bit field.o2 Tutorial_language_topics 3 AttributesF Attributes provide for the addition of specific information to aF declared name, such as: quantities of storage, unit sizes, ranges, and boundaries.4 ADDRESSING-MODEtF The address-mode-attribute specifies the manner in which the addressA value of a data or routine name will be encoded. The syntax is:f' ADDRESSING_MODE { mode-32 }i { GENERAL }  mode-32 { ABSOLUTE }m { LONG_RELATIVE }n { WORD_RELATIVE } F The selected attribute instructs the compiler to encode addresses as follows: * Attribute ActionA GENERAL Directs the linker to choose a relative A displacement or an absolute value. Provide A 4 bytes for displacement and 1 byte for 3 the address mode descriptor.A ABSOLUTE Forces an absolute value of 4 bytes for BLISS-32.A RELATIVE Forces a relative displacement of 2 bytes.eA WORD_RELATIVE Forces a relative displacement of 2 bytes.EA LONG_RELATIVE Forces a relative displacement of 4 bytes.t Defaults:F o If a default PSECT is associated with a declaration, the3 addressing mode declared in the psect is used.gF o If a forward-, forward-routine-, external-, orF external-routine-declaration is used, the mode established by a: module-head switch or a switches-declaration is used. Example:e OWN X: PSECT(GEN) , ADDRESSING_MODE(WORD_RELATIVE);4 ALIAS F The alias-attribute indicates that a variable may change due toF hidden effects of routine calls and indirect assignments. In8 BLISS-32, it is equivalent to VOLATILE. The syntax is: ALIAS Example: LOCALe) DEVNAM: VECTOR[64, BYTE] ALIAS,s' LIST: $ITMLST_DECL (ITEMS=4);a $ITMLST_INIT (ITMLST=LIST,E (ITMCOD=DVI$K_DEVNAM, BUFADR=DEVNAM, BUFSIZ=64)); F DEVNAM designates a data segment that can be changed by a call to aF routine that is passed LIST, which is initialized to point to DEVNAM.4 ALIGNeF An alignment-attribute specifies the address alignment of a dataF segment relative to address boundaries (that is, byte, word,F longword, quadword). An address boundary is specified by a value (n)F which indicates that the binary address must end in, at least, n zeros.e0 Syntax | Examples |% | OWN7 ALIGN (boundary-ctce) | A: BYTE ALIGN(1);t% | ...w% | OWN 2 | X: ALIGN(3);F ALIGN(1) specifies that segment A be allocated to a word boundaryF address (a binary address value ending in at least 1 zero). ALIGN(3)F specifies that segment X be allocated to a quadword boundary (a2 binary address value ending in at least 3 zeros). Defaults: The default alignments are:) Data Alignmente( BYTE scalar ALIGN(0)( WORD scalar ALIGN(1), LONG scalar ALIGN(2) 32, ANY structure ALIGN(2) 324 allocation-unittF An allocation-unit specifies the basic granularity of a data storageF allocation (that is, 32-bit longwords, 16-bit words, or 8-bit bytes).. Syntax | Examples |% 32 { LONG } | OWN . { WORD } | A: WORD;% { BYTE } | ...h( | GLOBAL: | B: VECTOR[10, BYTE];% | ...T' | LOCAL ( | C;F A is a scalar comprising one 16-bit word; B is a vector comprisingF ten 8-bit bytes; C is a scalar comprising (by default) one fullword (32 bits). Default: " The default is LONG for BLISS-32. Restriction: F If a declaration contains both an allocation-unit attribute and anF initial-attribute, the allocation-unit attribute must precede the initial-attribute.b 4 extensiontF An extension-attribute specifies which value extension rule applies6 when the contents of a scalar field value is fetched.1 Syntax | Exampleso | $ | OWN4 { SIGNED | UNSIGNED } | A: SIGNED WORD;$ | ...' | GLOBALc? | B: VECTOR[10,BYTE,SIGNED]; $ | ...& | LOCAL6 | C: UNSIGNED BYTE;F A is a scalar comprising one signed word (that is, the sign-bit isF fetched with the value); B is a vector of ten signed bytes; C is aF scalar comprising one unsigned byte (that is, the sign-bit is zero-filled). Default:o The default is UNSIGNED. 4 EXTERNAL_NAME F An external-name-attribute specifies the name to be used externallyF in referring to a data-segment. This allows mixed-case names andF names with special characters to be used in mixed-language applications. The syntax is: 4 EXTERNAL_NAME( string-actual-parameter ,...) Example:N9 EXTERNAL ROUTINE foobar: EXTERNAL_NAME('FooBar');i foobar();r4 FIELDiF A field-attribute specifies field-names, or a set of names, that areF to be associated with a declared data-segment. This allows the names9 to then be used in structure-references. The syntax is:  6 FIELD ( { field-name | field-set-name } ,... ) Example:  LITERAL DCB_SIZE = 3;  FIELD DCB_FIELDS = SET # DCB_A = [0,0,32,0], " DCB_B = [1,0,8,0]," DCB_C = [2,0,32,0] TES;6 MACRO DCB = BLOCK[DCB_SIZE] FIELD(DCB_FIELDS) %; OWN ALPHA: DCB; F The field-declaration provides a field-set-name (DCB_FIELDS) for theF three field-names (DCB_A, DCB_B, DCB_C). The macro-declarationF provides the entire block structure with a single name (DCB), whichF then is associated with ALPHA. When the macro-call is expanded, the OWN declaration becomes: 3 OWN ALPHA: BLOCK[DCB_SIZE] FIELD(DCB_FIELDS);NF The field-attribute associates the field-set-name DCB_FIELDS withF data segment ALPHA, allowing the associated field-names to be used in; structure-references to ALPHA, such as: ALPHA[DCB_B] = 7;i 4 INITIALtF An initial-attribute specifies that one or more initialization valuesF be assigned to a scalar data segment before execution begins. The syntax is: * INITIAL (initial-item ,...)$ { group }' initial-item { expression-ctce* } e$ { string-literal }: 32 { allocation-unit }: group { REP replicator-ctce OF }: 32 { REP replicator-ctce OF allocation-unit }% ( initial-item ,... )  32 { LONG }0 allocation-unit { WORD }  { BYTE }D Restrictions:F o *Expression is restricted to a link-time-constant (ltce) for OWN and GLOBAL declarations. F o Initial-item values must not occupy more storage than is$ allocated for the data segment.F o If a declaration contains both a structure-attribute and anF initial- attribute, the structure-attribute must precede the initial-attribute.BF o BLISS-32: If a declaration contains both an allocation-unit (asF an attribute) and an initial-attribute, the allocation-unit2 attribute must precede the initial-attribute. Examples: OWN X: INITIAL(2); ...d2 GLOBAL Y: VECTOR[6] INITIAL (REP 6 OF (-1)); ...  GLOBAL Z: VECTOR[20,BYTE]t/ INITIAL(BYTE('STOP', REP 16 OF (0)));DF In the first example, X is initialized to 2. In the next example,F each element of Y is initialized to -1. In the last example, theF first four bytes of Z are initialized to STOP and the remaining sixteen bytes to zeros. 4 LINKAGEEF A linkage-attribute specifies a linkage-name; this allows a declaredF routine-name to be associated with a linkage defined by aF linkage-declaration. In this way, the linkage-definition, identifiedF by the attribute, can control both the code generated for the routine> and that generated for a call on the routine. The syntax is: linkage-name Restrictions:F o A linkage-name must be one of the predeclared linkage-names or a, name governed by a linkage-declaration.F o A linkage-attribute for a routine-name in an external-, forward-,F bind-, or global-routine-declaration must be the same as thatC given in an associated routine- or global-routine-declaration. Defaults:? The default linkage-names are: BLISS (32), and BLISS36C (36).a Example:s LITERALh GRDS_REG = 6; LINKAGEo BRIDGE = PUSHJ: * LINKAGE_REGS(15,13,1)( NOPRESERVE(2,3,4,5)2 PRESERVE(0,7,8,9,10,11,12,14)- GLOBAL(GRDS = GRDS_REG);i ...r FORWARD ROUTINEa ROUT2: BRIDGE NOVALUE; ... % ROUTINE ROUT2: BRIDGE NOVALUE =L BEGINa ...t END;F The literal-name GRDS_REG is bound to the register-number 6; next,F the linkage-declaration defines BRIDGE as a linkage-name that matchesF the default BLISS36C linkage-type PUSHJ; the linkage-attribute thenF supplies the register information to the forward-routine-declaration and routine ROUT2.T 4 NOVALUEF The novalue-attribute specifies that the declared routine will not return a value. The syntax is: NOVALUEn Example: " ROUTINE EXCH(X,Y): NOVALUE = BEGINz LOCAL TEMP; TEMP = ..X;- .X = ..Y;h .Y = .TEMP;o END;F EXCH exchanges the values of X and Y and, as specified by the= novalue- attribute, does not return a value for the routine.)4 PRESETF A preset-attribute specifies that an initialization value be assignedF to one of more fields of a data structure before execution begins.F Unspecified portions of the data segment are set to zero. The syntax is:- PRESET (preset-item ,...) . preset-item [ ctce-access-actual ,.. ]. = preset-value-expression*) ctce-access-actual { ctce | field-name }t Restrictions:F o *The preset-value must be a link-time-constant (ltce) for OWN and GLOBAL declarations.sF o If both a structure-attribute and a preset-attribute are used,? the structure-attribute must precede the preset-attribute.TF o A preset-attribute and an initial-attribute may not be used in the same declaration.B o A declaration may not contain more than one preset-attribute.F o The preset value(s) must not occupy more storage than isF allocated for the data segment, and fields described by the# preset-items must not overlap. Default:tF Upon allocation of a structure declaration with a preset-attribute,F any segment of the structure not described by a preset-item is set to zeros. Example:  FIELD LINK_LIST_ITEMS = SET & LL_VALUE = [0,0,%BPVAL/2,0],- LL_TYPE = [0,%BPVAL/2,%BPVAL/2,0], $ LL_LAST = [1,0,%BPVAL,0],# LL_NEXT = [2,0,%BPVAL,0]  TES;8 GLOBAL LLIST_HEAD: BLOCK[3] FIELD(LINK_LIST_ITEMS)1 PRESET( [LL_NEXT] = LLIST_HEAD, 1 [LL_LAST] = LLIST_HEAD, + [LL_VALUE] = -1 );fF A block structure defined with field names is initialized by a listF of preset-values that are order-independent; note that the LL_TYPEF field is not described as a preset-item and is, therefore, allocated7 zeros by default. (Refer also to: BLISS Alpha FIELD)x4 PSECTF A psect-allocation attribute specifies the name of a program sectionF in which a declared data segment or routine is to be allocated. The syntax is:  PSECT (psect-name) Restrictions:F o A specified psect-name must be either a predeclared defaultF program-section name or a name previously declared in a psect-declaration. F o If specified in a forward- or forward-routine-declaration, theF psect-name must match the psect-name associated with the controlling declaration. Example: 6 GLOBAL STARTUP_STATE: BITVECTOR[4] PSECT($PLIT$)* PRESET([MAIN_POWER] = ON,+ [AUX_POWER] = OFF,b* [VALVE_1] = ON,, [VALVE_2] = OFF);F The psect attribute allocates process-control code to a $PLIT$F default program section for plit storage, which provides read-onlyF access protection. Note that the psect-allocation-attribute is aF convenience that allows you to achieve what would otherwise requireF repeated use of psect-declartions. (Refer also to: BLISS Alpha PSECT.)4 rangelF A range-attribute specifies the quantity of storage required for aF literal and indicates whether the field is to be interpreted as$ signed or unsigned. The syntax is:, { SIGNED | UNSIGNED } (bit-count-ctce) Restriction:i9 The bit-count value must not exceed a fullword (%BPVAL). Default:s/ The default range-attribute is SIGNED(%BPVAL).- Examples:& EXTERNAL LITERAL X: UNSIGNED(4); ...I) GLOBAL LITERAL X = 12: UNSIGNED(4); F The first range-attribute specifies that X represents four bits ofF unsigned storage; the second example specifies that X represents the- value 12 stored as a 4-bit unsigned integer.L 4 structure F A structure-attribute associates the name of a declared data segment1 with a separately declared structure-definition.C; Syntax | Exampleso( |- | OWNe@ { REF } structure-name | X: VECTOR[8,BYTE];- { [allocation-actual,... ] } | ...0 | GLOBAL< | Y: MATRIX[10];- | ...f- | OWN? | Z: REF VECTOR[1];iF The first example specifies that X is the address of a predeclaredF byte structure (VECTOR) comprising eight elements (X[0] throughF X[7]); the next example specifies that Y is the address of a userF declared fullword structure (MATRIX); the last example specifies thatF Z is a reference (pointer) to the address of the second element of a) predeclared fullword structure (VECTOR).3 4 VOLATILEF The volatile-attribute specifies that the content of a data segmentF will be changed during execution by an action not directly specified in the module. The syntax is: VOLATILE Example:t! GLOBAL INPUT_PORT: VOLATILE F INPUT_PORT designates a data segment that can be changed to aF fullword value by an interrupt routine that is external to the module.4 WEAKF A weak-attribute specifies the manner in which the VAX linker andF librarian program will handle global names. For example, the linkerF generates a list of all globally-declared names that indicates theF value of the name and some of its attributes. Since all namesF declared EXTERNAL are (with the exception in BLISS-32 of those with aF weak-attribute) also declared GLOBAL, elsewhere in the program, theF list is used to determine the value of those global names that are# declared EXTERNAL. The syntax is:R WEAK Restrictions:F o If a global entry is found for a name declared EXTERNAL, and noF weak-attribute is present, an address value is assigned to the& name and the program is executed.F o If no global entry for a name declared EXTERNAL is found, and no; weak-attribute is present, the program is invalidated.nF o If no global entry is found for a name declared EXTERNAL and theF name has a weak-attribute (indicating BLISS-32), a zero is usedF as the value of the name and the program is executed (as long as) the name is not used as an address).t 3 Modules F A module is the smallest compilation unit in BLISS and can representF a completely executable program; however, modules are not complete orF executable when they must be linked with other modules to form aF complete program. When linkage is necessary, communication isF established between modules by GLOBAL and EXTERNAL declarations.F Finally, module coding is begun with the keyword MODULE and endedD with the keyword ELUDOM. An example of a dependent module follows:) MODULE COMPOOL (IDENT = '000015') == BEGIN  GLOBAL LITERAL BUFSIZ = 226, PAGESIZ = 132;(9 GLOBAL BIND X = PLIT (0,1,2,3,4,5,6,7,8,9,10,11,12))# : VECTOR[13];G END ELUDOMF This module contains constant declarations that are required by other modules within the program.3 BlocksF A block is a single unit of declarations and/or expressions that areF separated by semicolons and grouped within a BEGIN-END pair or aF left-right parenthesis. There are two types of blocks: labeled andF unlabeled. As single syntactic units all blocks have, and return optionally, a single value.? The form, processing, and evaluation of a block is as follows:i BEGINtC declaration; 1. Process the declarations (if any):E expression; 2. Evaluate the block-actions (if any)C expression 3. Evaluate the block-value (if any) END;4 labeled-blockYF A labeled-block contains an exit-expression that uses a declaredF label to terminate the evaluation of the block; moreover, aF label-declaration is only used in BLISS to identify a labeled-block.F As shown in the code fragments, below, a label is first declared and= then used to identify a block containing a leave-expression:t OWN  XYZ: VECTOR[20], ZEROFLAG; LABELr L; ...................... ZEROFLAG = 0;] L: BEGIN INCR I FROM 0 TO 19 DO IF .XYZ[.I] EQL 0d/ THEN (ZEROFLAG = 1; LEAVE L);v END;F The evaluation of the leave-expression ends the evaluation of the I& loop. (See also, BLISS Alpha LEAVE.)4 unlabeled-blockuF The simplest kind of block is unlabeled and contains only a8 parenthesized-expression with no declarations, such as: 5 * (.A + .B)sF The value of the block is the sum of the contents of A plus B and6 becomes one of the operands of the multiply operator.F A more complex unlabeled block, containing several expressions and no< declarations, is defined as a compound-expression, such as:? IF .ALPHA NEQ 0 THEN (Q1 = .ALPHA*.S1; Q2 = .ALPHA*.S2;);  which also may be written:y IF .ALPHA NEQ 0 THEN BEGINm Q1 = .ALPHA * .S1;? Q2 = .ALPHA * .S2; !This semicolon is optional  END; 3 Constants4 compile-time-constantBF Compile-time-constant-expressions (ctce) are data (such as, actualF component sizes and repetition counts) that must be known by theB compiler in order for it to properly interpret language features. Examples: 5  3 * 15 - 4 7 + %C'A'  MAX(3,7,3*15-4)L LITERAL REG = 5;d SIZE = 47; F For details on usage and restrictions refer to Chapter 7 of the BLISS Language Guide.4 link-time-constantF Link-time-constant-expressions (ltce) are data (such as, the name ofF a program section, or a name declared EXTERNAL) that cannot be determined until link time. Example:  OWN X: VECTOR[10]; ...g OWN ALPHA: INITIAL(X[2]);dF After compilation, the final value of X is unknown, since it isF expressed as an offset in the OWN program section. Only at link timeF can the absolute address of X, the address of the third element7 (X[2]), and the initial value of ALPHA, be determined. = For details, refer to Chapter 7 of the BLISS Language Guide.m3 DeclarationsF Every name in a BLISS program must be declared in order to provideF the compiler with information about the name. For example, theF following declaration (for the OWN program section) specifies that XF is the name of a permanent data segment whose scope lies only within# the block in which it is declared.e OWN X;F Attributes that associate certain specifics with a name (such theF initialization-attribute INITIAL) also can be included in a declaration as follows:9 GLOBAL DELTA: VECTOR[120] INITIAL(REP 120 OF (-1)); 4 bound-declarationsF Bound declarations define names in terms of additional names andF values. They do not allocate storage, but provide a name for aF constant value or bring a different interpretation to existing' storage. The bound- declarations are:s Literal-declaration " External-literal-declaration Bind-data-declaratione Bind-routine-declaration5 bind-data-declarationF A BIND data declaration defines another name for an existent dataF segment. The bound name can have different attributes and,? therefore, can depart from the interpretation of the original.i5 Syntax | Examplee# | ( BIND } | OWN; GLOBAL BIND } item ,... ; | ALPHA: VECTOR[20];s) item name = expression | BINDt6 { : attribute ... } | A = ALPHA[8];( | ...; { allocation-unit } | INCR I FROM 0 TO 20 DOE { extension } | ALPHA[.I] = .ALS?~ BLS32047.B+![BLISS32.V047.COMMON]ADDBLS.HLP;5UQsPHA[.I] * .A;a# { structure } |E# attribute { field } |.# { volatile } | # 32 { weak } | F The name A defines a fullword scalar at the same address as the 9thF element of the vector ALPHA. A reference to A is a reference toF ALPHA[8]. (For attribute details reference: BLISS Tutor Attributes.)s5 bind-routine-declarationF A BIND ROUTINE declaration defines another name for an existentF routine. Thus defined, the routine can be used by itself toF designate the value of the routine's name or, with a parenthesized4 list of parameters, indicate a call on the routine.6 Syntax | Example& |4 BIND ROUTINE | BIND ROUTINE@ GLOBAL BIND ROUTINE } item ,... ; | CALC = CALCULATION4;+ item name = expression | ...s4 { :attribute ... } | BIND ROUTINE= | SP = (IF .A LSS 0e6 { novalue } | THEN: attribute { linkage } | SNEG6 32 { weak } | ELSE< | SPOS);F The names CALCULATION4, SNEG, and SPOS, are routines that areF declared elsewhere. (For attribute details reference: BLISS Tutor Attributes.)s4 data-declarationsdF Data-declarations provide the compiler with information about dataF storage requirements, such as: Names, addresses, scope (position inF the program), longevity (permanent or temporary), and specificC attributes. These declarations are divided into three categories:F o Permanent data declarations (OWN, GLOBAL, EXTERNAL) that remain, allocated throughout program execution.F o Temporary data declarations (LOCAL, STACKLOCAL, REGISTER, GLOBALF REGISTER, EXTERNAL REGISTER) that exist only during the execution of a specific block. F o Overlaid data declarations that have been declared elsewhere, but3 are given new attributes by a MAP declaration.i4 macro-declarationsF A MACRO declaration associates a sequence of lexemes (macro-body)F with a macro-name. The name is then used in a macro-call, where theF call is replaced by a modified copy of the body. There are four types of macros.  Positional Macrosd simple-macro conditional-macrod iterative-macro  Keyword Macro 5 simple-macro-declaration8 The syntax of a simple-macro-declaration is as follows: MACROR* macro-name ( formal-name ,...) =' macro-body % ,...;eF An example of a simple-macro-declaration and a call on the formal-name is: MACRO  SM1(F1,F2,F3) =& ((F1(F2) + F1(F3))/2) %; ...  SM1(ROUT,0,.A + .B);% The expansion of the call on SM1 is:0# ((ROUT(0) + ROUT(.A + .B))/2)R5 conditional-macro-declarationF A conditional-macro-declaration accepts any number of pairs ofF actual-parameters and through expansion produces an assignment for) each. The syntax of the declaration is:s MACROe. macro-name ( formal-name ,... ) [] =' macro-body % ,...; F An example of a conditional-macro-declaration and a call on the formal-name is: MACRO CM1(F1,F2)[] = F1 = .F1 ^ -F2;d CM1(%REMAINING) %; CM1(A,0,B,6);C The expansion of the call on CM1 proceeds recursively, as follows:  A = .A ^ -0; CM1(B,6)' The new call is expanded resulting in:r A = .A ^ -0; B = .B ^ -6; CM1() F This time the new call has insufficient parameters, expansion is@ completed with a null lexeme sequence, and the final result is: A = .A ^ -0; B = .B ^ -6;5 iterative-macro-declarationIF An iterative-B{macro-declaration allows selected parameters to be usedF in each iteration of an expansion. The syntax of the declaration is: MACROr/ macro-name ( fixed-formal-name ,... ),5 [ iterative-formal-name ,... ] = ' macro-body % ,...;=% An example of an iterative-macro is:F MACRO IM1(F1)[F2] =  F1 + F2 %; ...L PLIT(IM1(2,A,B,C,D)); % The expansion of the call on IM1 is:e 2 + A, 2 + B, 2 + C, 2 + D5 keyword-macro-declarationpF A KEYWORDMACRO declaration allows the actual-parameters to be givenF in an order other than that of the formal names. This is useful when> there are many parameters. The syntax of the declaration is: KEYWORDMACRO @ macro-name ( formal-name { = default-actual } ,... ) =' macro-body % ,...;a" An example of a keyword macro is: KEYWORDMACRO) COPYVECTOR(DEST,SOURCE,N = 1) = # INCR I FROM 1 TO N DON+ DEST[.I] = .SOURCE[.I] %;i ... 1 COPYVECTOR(N = 10, DEST = V2, SOURCE = V1);, The expansion of the call on COPYVECTOR is: INCR I FROM 1 TO 10 DO V2[.I] = .V1[.I];a4 routine-declarationsF There are five types of routine declarations that are used as follows:aF 1. An ordinary-routine-declaration defines a routine that is only/ used in the block in which it is declared.pF 2. A global-routine-declaration defines a routine that is used inD other modules as well as in the module in which it is declared.F 3. A forward-routine-declaration provides the means for calling aB routine from a point in a block that precedes its definition.F 4. An external-routine-declaration declares a routine that is7 defined elsewhere by a global-routine-declaration.e5 ordinary-routine-declarationF An ordinary ROUTINE declaration defines a routine whose scope liesE within the block in which it is declared and any lower-level blocks.  The syntax is:i ROUTINE name= { ( {input-formal-parameter ,... } }i= { {; output-formal-parameter ,... } ) }r/ { : routine-attribute ... }H' = routine-body-exp; B formal-parameter formal-name { : map-declaration-attribute... }1 routine-attribute { novalue | linkage | psect }p( { allocation-unit }( { extension }( map-attribute { structure }( { field } { volatile Example: " ROUTINE AVERAGE3(F1,F2,F3) = (.F1 + .F2 + .F3)/3; ...a AVERAGE3(5, .A, .B * .C);aF The routine has three formal-names (F1, F2, F3) for itsF input-parameters. The next line shows a call on the routine withF three matching actual-parameters (5, .A, and .B * .C) that are to beF averaged. (For attribute details reference: BLISS Tutor Attributes.)a 3 DelimitersF A delimiter is a lexeme that serves as an operator or a punctuationF mark. Delimiters are defined as such because they can be used to) form an expression without using spaces.tF For example, the delimiter "+" can form the 3-lexeme expression "ALPHA+1" without using spaces.3 Executable-functionsF Executable-functions are so named to distinguish them from lexical-F functions. The difference is: executable-functions contain intactF executable code, while such code cannot be derived for2 lexical-functions until compilation has occurred., The five types of executable-functions are:8 Type ExampleC Character-handling-functions CH$FILL (fill, dn, dptr)i4 Condition-handling-functions SETUNWIND8 Linkage-functions ACTUALCOUNT()D Machine-specific-functions ADDD (SRC1A, SCR2A, DSTA); Standard-functions MAX (e1, e2,...)}4 character-handlingF Character-handling-functions (CH$) manipulate sequences of charactersF for such things as the interpretation of user commands, theF preparation of listings, the management of symbol tables, the editing' of text, and the maintenance of files. 4 condition-handlingF Condition-handling-functions are used to signal a program's responseF to an unusual event that has occurred during execution (such as, aF detected error). A signal can be implicitly generated by theF system's hardware or software, or explicitly generated by a call on+ one of the following executable-functions:o0 SIGNAL (condition-value {, parameter,...})5 SIGNAL_STOP (condition-value {, parameter,...}) F A special unwind signal also can be indirectly generated by a handler2 routine through a call on the following function: SETUNWIND ()1 SETUNWIND (param1 {, param2}) BLISS-32 only.F Condition-handling begins when the event is signaled. The signal isF then directed to the system's Condition Handling Facility (CHF),F which (with user routine assistance) deals with the event and thenF either continues or terminates program execution. (For details refer, to Chapter 17 of the BLISS Language Guide.) 4 linkageOF Linkage-functions provide special information about theF actual-parameters used to call a routine. For example,F linkage-functions are used to code a routine so that it may be calledF by routines having different numbers of actual-parameters. The linkage-functions are:a3 Function Value ReturnedfC ACTUALCOUNT() Number of actual parameters in call6 ACTUALPARAMETER(i) Value of ith parameter9 ARGPTR() Address of argument blockoG NULLPARAMETER(i) A 1 if ith parameter is null; otherwiseL3 a 0 (BLISS-32 only)u: These functions must be declared in BUILTIN declarations.4 machine-specificF Machine-specific-functions allow you to perform specialized machineF operations within the BLISS language. A machine-specific-functionF call is similar to a routine call, and may require parameters and/orF return a value. Each such function used in a module must be declared BUILTIN.o 4 standardF The standard-functions are common to all BLISS dialects and are usedF to extract such things as absolute values, minimum values, and signs.8 The syntactic forms of the nine standard-functions are:$ { ABS | SIGN | %REF } (e1,...)< { MAX | MAXU | MAXA | MIN | MINU | MINA } (e1, e2,...)+ Example Value 6 ABS (-5) +5 (absolute value of e1)6 ABS (0) 0 (absolute value of e1)6 SIGN (5) +1 (extracted sign of e1)6 SIGN (-5) -1 (extracted sign of e1)6 SIGN (0) 0 (extracted sign of e1)A MAX (-1,0,1) 1 (maximum signed value of e2 list)eC MAXU (-1,0,1) -1 (maximum unsigned value of e2 list)oA MIN (-1,0,1) -1 (minimum signed value of e2 list)aC MINU (-1,0,1) 0 (minimum unsigned value of e2 list) B Z = MAXA (X, Y) Y (maximum address value of e2 list)F For %REF information type: BLISS Alpha(betics_Language_Topics) %REF. 3 Expressionsc4 binary-expressionsF Binary expressions are operator-expressions that use two operands (e1F and e2) and, with the exception of the assignment expression, areB associated from left-to-right (LR). These have the general form:5 left-operand infix-operator right-operande% The binary expressions in BLISS are:-- Shift expression: e1 ^ e2eC Arithmetic expressions: e1 { * | / | MOD | + | - } e2d> Relational expressions: { EQL | EQLU | EQLA }> { NEQ | NEQU | NEQA }> { LSS | LSSU | LSSA }A e1 { LEQ | LEQU | LEQA } e2a> { GTR | GTRU | GTRA }> { GEQ | GEQU | GEQA }D Boolean expressions: e1 { AND | OR | XOR | EQV } e2- Assignment expression: e1 = e214 constant-expressionsF Constant expressions are evaluated before a program is executed.F BLISS requires that such expressions be used as specified in theF syntax diagrams. There are two types of constant expression< (compile-time and link-time) that are evaluated as follows:F o The compile-time constant expression is evaluated during3 compilation of the module in which it appears.rF o The link-time constant expression (in special cases includingF compile-time expressions) is only evaluated by the compiler,3 linker, and operating system working together. 4 control-expressions F In part, control expressions in BLISS replace the GO TO construct byF providing conditional and iterative control of program flow. The control expressions are: 2 Expression Construct2 conditional IF THEN ELSE= case CASE FROM TO OF SET TES17 select SELECT OF SET TESt8 loop INCR FROM TO BY DO9 WHILE DO | UNTIL DOh9 DO WHILE | DO UNTILl* exit EXIT, return RETURN4 exit-expressionsF The exit-expressions provide: (1) an end-command to the evaluationF of a block or a loop; (2) the label of a block; (3) a value for a block or loop.  The exit-expressions are:0 Expression SyntaxB leave LEAVE label { WITH exit-value-exp }: exitloop EXITLOOP { exit-value-exp }4 lexical-expressions F A lexical-expression consists of characters grouped into a lexeme orF a group of lexemes. There are two types of lexical-expression:F primitive and nonprimitive. A primitive expression is one that isF not expanded into another sequence of lexemes during lexical processing. The syntax is:3 lexical-expression { primitive | nonprimitive } 7 { delimiter | keyword | name }x7 primitive { numeric-literal | string-literal }}@ { lexical-function | lexical-conditional }@ nonprimitive { macro-call }@ { require-declaration | library-declaration }/ Examples of primitive lexical-expressions are:F( + The plus symbol9 MODULE The keyword that begins a modulee4 ALPHA A name (not declared MACRO)* 329 A decimal literal) %ASCIC'ABC' A string-literale2 Examples of nonprimitive lexical-expressions are:< %CHARCOUNT('ABC') A lexical-functionD %IF %SWITCHES(DEBUG) A lexical-conditional withD %THEN %WARN('BANG') %FI 2 nested lexical-functions? REQUIRE 'TBS'; A require-declarationeD LIBRARY %STRING('XYZ',Q); A library-declaration withC a nested lexical-functionoD Refer also to: BLISS Tutor(ial_language_topics) lexical-functions.5 lexical-conditionalfF A lexical-conditional is a construct that provides for the evaluationF of a compile-time-constant-expression (ctce) and, depending on theF value of the expression, performs one of two possible lexeme sequences. The syntax is:g %IF lexical-test-ctce  %THEN lexical-consequence ! { %ELSE lexical-alternative }- %FIn Example: MACRO  $PAUSE = %IF TESTING  %THEN.; TTY_PUT_QUO('TYPE "Y" TO CALL DEBUGGER');$- IF TTY_GET_CHAR() EQL %C'Y'c THEN! DUMP_STRU();e STRIP_CRLF();a %FI %;F The macro $PAUSE is conditional on compiletime constant TESTING; ifF true, the debug routine DUMP_STRU (Dump Global Data Structures) can5 be requested by a positive response at the terminal.g4 loop-expressionsF The loop-expressions perform iterative actions; whereby, repeatedF executions of code are controlled by either a counter or a- tested-condition. The loop-expressions are:o6 Type Example= indexed-loop-expression INCR I FROM 0 TO 9 DOu; tested-loop-expression UNTIL .PTR EQL 0 DOu4 operator-expressionsF Operator expressions are computational expressions that use theF terminology and notation of mathematics to perform sequences of< arithmetic operations. The syntactic forms are as follows:@ Priority Expression Associativity; maximum . e2 RLt; { + | - } e2 RL ; e1 ^ e2 LRt; e1 { * | / | MOD | + | - } e2 LRt/ { EQL | EQLU | EQLA } / { NEQ | NEQU | NEQA }c; e1 { LSS | LSSU | LSSA } e2 LR / { LEQ | LEQU | LEQA }/ { GTR | GTRU | GTRA } / { GEQ | GEQU | GEQA }N; NOT e2 RL ; e1 AND e2 LRP; e1 OR e2 LRL; e1 { EQV | XOR } LRL; minimum e1 = e2 RLe4 primary-expressionscF In most high level languages the term expression refers to constructsF that perform calculations; however, in BLISS, expression applies to$ all constructs except declarations.F For example, in BLISS, the constructs that assign a value to a dataF segment or control an execution loop are expressions and have a value.dF Every expression is constructed of one or more primaries. A primaryF can be a simple numeric-literal or a complex block, it can specify an0 elementary operation or call a complex routine.4 unary-expressionsiF Unary-expressions are operator-expressions that use one operand (e2),C are associated from right-to-left (RL), and have the general form: $ prefix-operator right-operand$ The unary-expressions in BLISS are:, Fetch expression: .e25 Prefix sign expression: { + | - } e2)/ Boolean expression: NOT e2fF A prefix-operator must not immediately follow an infix or prefixF operator that has a higher priority, unless appropriate parenthesis is used. For example:u. Invalid Valid7 .A EQL NOT .B + 2 .A EQL (NOT .(B + 2))13 Lexical-functionsnF When compiled, lexical-functions expand to a sequence of lexemes,F which in turn become input to the compiler for further expansion andF processing by built in operations. This is unlike the evaluation ofF computational expressions which yield values instead of lexemes, orF the expansion of macro-calls, which require operations defined by a# macro-declaration. The syntax is:h0 { (actual-parameter-lexeme ,...) }0 %name { lexeme }0 { nothing } 4 advisoryF The advisory-functions generate compiletime output such as, errorF messages, warnings, information, or lines of the program. The advisory-functions are:< %ERROR, %ERRORMACRO, %WARN, %INFORM, %PRINT, %MESSAGE 4 allocationF The allocation-functions determine the amount of stroage required forF specified kinds of data, and are thus used for laying out storage and< calculating address offsets. The allocation-functions are: %ALLOCATION, %SIZE 4 bitsF The bits-functions determine the smallest number of bits required to3 encode a specified value. The bits-functions are:o %NBITS, %NBITSU 4 calculationbF The calculation-functions provide a compiletime facility forF calcu*lating a value, saving it, and using it later in the- compilation. The calculation-functions are:e %ASSIGN, %NUMBERa4 compiler-stateF The compiler-state-functions expand to a 1(true) or a 0(false)F depending on whether a specified test condition is met. The functionF is used within lexical constructs, particularly as a lexical-test in: a lexical-conditional. The compiler-state-functions are:- %DECLARED, %SWITCHES, %BLISS, %VARIANTh 4 delimitertF The delimiter-functions insert or delete delimiters within a given& string. The delimiter-functions are: %EXPLODE, %REMOVE4 expression-testeF The expression-test functions expand to a 1 (true) or a 0 (false)F depending on whether each of their parameters constitute a particular8 form of expression. The expression-test functions are: %ISSTRING, %CTCE, %LTCE, 4 fieldexpand F The fieldexpand function replaces a given field-name with itsF associated list of field-components. If an additional optionalF parameter is specified one of the field-components is selected. The fieldexpand-function is:  %FIELDEXPANDE4 macroxF The macro-functions are used within macro definitions to provide suchF things as parameter-counts, numbers of iterations, and terminating# control. The macro-functions are:T> %REMAINING, %LENGTH, %COUNT, %EXITITERATION, %EXITMACRO4 nameF The name-functions allow you to assemble a name during compilation,F when the name cannot be conveniently written in advance or cannot9 normally be accepted as a name. The name-functions are:s %NAME, %QUOTENAME4 quote F The quotation facility postpones, until a later lexical scan, theF binding of a name and the expansion of a lexical-function orF macro-call. The facility has two parts: the quotation rulesF (defined in Section 15.2.2 of the BLISS Language Guide) and theF quote-functions. These functions override the quotation rules andF force the compiler, for example, to quote a name regardless of theF rules. This provides flexibility, based on quote-levels, in the, binding of names. The quote-functions are: %QUOTE, %UNQUOTE, %EXPAND4 sequence-testiF The sequence-test functions expand to a 1 (true) or a 0 (false)F depending on the result of a test condition. The sequence-test-functions are:H %NULL, %IDENTICAL4 stringF The string-functions operate on or produce quoted-string lexemes. AsF such, they facilitate the compiletime manipulation of quoted-stringsF and provide a basis for the definition of new macros, as well asF supporting the run-time functions for character handling. The string-functions are:/ %CHAR, %STRING, %EXACTSTRING, %CHARCOUNT 4 titlingTF The titling-functions allow a title and a subtitle to be specified in6 the headers on each page. The titling functions are: %TITLE, %SBTTL 3 Lexemes F Lexemes are the smallest meaningful units of BLISS source text; asF such they are analogous to the words and punctuation of ordinary text.1 Examples of the various types of lexemes follow:p Names2 keywords: ROUTINE %ASCII AND) predeclared: VECTOR MAXt5 explicitly declared: X BETA26 INITIAL_SIZE & Decimal Literals: 0 290007 Quoted Strings: 'ABC' '''GO!''' '77700' Delimitersa1 operators: . ^ * / + - = 1 punctuation marks: , ; : () [] <> F With the exception of delimiters, at least one space is required toF differentiate lexemes. For example, ALPHA AND 1, without the spaces,F would be interpreted as a single lexeme (ALPHAAND1) instead of three.3 Lexical-processingF The compilation of a module begins with lexical processing, whichF divides modules into lexemes, binds names to their declarations, andF expands macro-calls. Refer also to: BLISS& Tutor(ial_language_topics) lex(emes). 3 Literals4 character-code-literalF A character-code-literal specifies the ASCII code for a character as. a transportable fullword value. For example, %C'A'F has a numeric value of 65 (decimal), which represents the ASCII code for "A".F The character-code-literal is used when it is necessary to performF operations with a character as an argument. This notationF standardizes the interpretation of an ASCII quoted string across all dialectsf4 float-literalr; A float-literal specifies a fullword floating point value. 2 float-literal keyword size (fullwords). (32) (36), single-precision %E 1 1, double-precision %D 2 2 extended-exponent , double-precision %G 2 2 extended-exponent2, extended-precision %H 4 -4 numeric-literal F A numeric-literal is used to represent an integer value in any one of7 four radices: decimal, binary, octal, or hexidecimal. E The following shows numeric-literal representations of the value 15: - 15 standard decimal-literalN, %DECIMAL'15' decimal integer-literal+ %B'1111' binary integer-literal2* %O'17' octal integer-literal0 %X'F' hexadecimal integer-literalF Wherever the radix for a BLISS literal is not given, the radix is assumed to be decimal. 4 string-literalF A string-literal specifies a sequence of ASCII characters. The value4 of the string depends on the specified string-type.F A string-literal can appear as a primary expression if its value- occupies one fullword or less. For example,t& %ASCII'AB' any dialect) %ASCII'ABCD' BLISS-32 or 36s# %RAD50_11'ABC' BLISS-32e# %RAD50_11'ABCDEF' BLISS-32r# %RAD50_10'ABCDEF' BLISS-36iF A string-literal value occupying more than one fullword is not aF primary-expression and can be used only within a plit-expression or in an initial-attribute.n3 MacrosF A MACRO declaration associates a sequence of lexemes (macro-body)F with a macro-name. The name is then used in a macro-call, where theF call is replaced by a modified copy of the body. There are four types of macros.g Positional Macros- simple-macro conditional-macro iterative-macroe Keyword Macrox4 simple-macro-declaration8 The syntax of a simple-macro-declaration is as follows: MACROe* macro-name ( formal-name ,...) =' macro-body % ,...;2F An example of a simple-macro-declaration and a call on the formal-name is: MACROu SM1(F1,F2,F3) = & ((F1(F2) + F1(F3))/2) %; ...p SM1(ROUT,0,.A + .B);% The expansion of the call on SM1 is:v# ((ROUT(0) + ROUT(.A + .B))/2)n4 conditional-macro-declarationlF A conditional-macro-declaration accepts any number of pairs ofF actual-parameters and through expansion produces an assignment for) each. The syntax of the declaration is: MACRO . macro-name ( formal-name ,... ) [] =' macro-body % ,...;vF An example of a conditional-macro-declaration and a call on the formal-name is: MACROn CM1(F1,F2)[] = F1 = .F1 ^ -F2; CM1(%REMAINING) %; CM1(A,0,B,6);AC The expansion of the call on CM1 proceeds recursively, as follows:o A = .A ^ -0; CM1(B,6)' The new call is expanded resulting in:a A = .A ^ -0; B = .B ^ -6; CM1()uF This time the new call has insufficient parameters, expansion is@ completed with a null lexeme sequence, and the final result is: A = .A ^ -0; B = .B ^ -6;4 iterative-macro-declarationtF An iterative-macro-declaration allows selected parameters to be usedF in each iteration of an expansion. The syntax of the declaration is: MACROi/ macro-name ( fixed-formal-name ,... )S5 [ iterative-formal-name ,... ] =u' macro-body % ,...;(% An example of an iterative-macro is: MACROi IM1(F1)[F2] =  F1 + F2 %; ...c PLIT(IM1(2,A,B,C,D));% The expansion of the call on IM1 is:t 2 + A, 2 + B, 2 + C, 2 + D4 keyword-macro-declarationhF A KEYWORDMACRO declaration allows the actual-parameters to be givenF in an order other than that of the formal names. This is useful when> there are many parameters. The syntax of the declaration is: KEYWORDMACRO @ macro-name ( formal-name { = default-actual } ,... ) =' macro-body % ,...;." An example of a keyword macro is: KEYWORDMACRO) COPYVECTOR(DEST,SOURCE,N = 1) =p# INCR I FROM 1 TO N DOe+ DEST[.I] = .SOURCE[.I] %;e ...t1 COPYVECTOR(N = 10, DEST = V2, SOURCE = V1);c, The expansion of the call on COPYVECTOR is: INCR I FROM 1 TO 10 DO V2[.I] = .V1[.I];a 4 Macro-callsoF There are two types of macro-calls (positional and keyword), whichF correspond to the two main types of macro-declarations. The syntax of the calls are as follows: 7 { ( actual-parameter ,... ] }O7 positional macro-name { [ actual-parameter ,... ] }e7 { < actual-parameter ,... > }eE { ( formal-name = actual-parameter ,... ) }hE keyword macro-name { [ formal-name = actual-parameter ,... ] }aE { < formal-name = actual-parameter ,... > } * An example of a positional-macro-call is:' ALPHA(A, .B + 3, 'qrs' 16 MODULE)yF The macro-name is ALPHA; the first and second actuals are A and .B +F 3; the third actual is a sequence of three lexemes, which lies within6 the scope of a positional-macro-declaration of ALPHA.' An example of a keyword-macro-call is:r GAMMA(X = Q(R,1), Y = 3)F The keyword-macro-call occurs within the scope of the declaration of> GAMMA as a keyword-macro-name having X and Y as formal-names.3 NamessF The name (or identifier) you assign to an area of storage is itsF symbolic address. Explicitly-declared names may consist of anyF combination of letters, digits, dollar signs, and underlines, as long; as they do not begin with a digit or exceed 31 charl4V1~ BLS32047.B+![BLISS32.V047.COMMON]ADDBLS.HLP;5U`TDacters.e Examples of valid names are:t NEXT_CHARACTER X76G34_7P1 $FLAG_17 Examples of invalid names are:, 5COUNTER CHECK MATE BYTE-NEXTc 3 Operators.F Operators are arithmetic, relational, and logical symbols, that areF used within computational expressions. That is, they use theF terminolgy and notation of mathematics to perform sequences ofF arithmetic and logical operations. The syntactic forms are as follows:u@ Priority Expression Associativity; maximum . e2 RLe; { + | - } e2 RLo; e1 ^ e2 LR ; e1 { * | / | MOD | + | - } e2 LR / { EQL | EQLU | EQLA }2/ { NEQ | NEQU | NEQA }'; e1 { LSS | LSSU | LSSA } e2 LR / { LEQ | LEQU | LEQA } / { GTR | GTRU | GTRA }d/ { GEQ | GEQU | GEQA }d; NOT e2 RLs; e1 AND e2 LRi; e1 OR e2 LR ; e1 { EQV | XOR } LRo; minimum e1 = e2 RLe4 relational-operatorsF Relational operators are used in relational expressions to compare two values.F The 3-letter operators interpret their operands (e1 and e2) as signed values as follows:c) EQL e1 is equal to e2.- NEQ e1 is not equal to e2v* LSS e1 is less than e26 LEQ e1 is less than or equal to e2- GTR e1 is greater than e2a9 GEQ e1 is greater than or equal to e2aF The fourth letter interprets the operands as unsigned or address values as follows:a5 xxxU e1 and e2 are unsigned valuesg4 xxxA e1 and e2 are address valuesF If the operand values satisfy the relation specified, the value of) the expression is 1; otherwise, it is 0.o4 shift-operatorF The shift operator (^) shifts the left operand (e1) by the number ofF bits specified by the right operand (e2). The shift is right if e2F is negative and left if e2 is positive. On a right shift, low-orderF bits are discarded and high-order bits are sign-filled. On a leftF shift, high-order bits are discarded and low-order bits are3 zero-filled. The following are BLISS-32 examples:aT SHIFTN = -9; 1111 1111 1111 1111 1111 1111 1111 0111 SHIFTN: (-9)T RIGHTS = .SHIFTN ^ -3; 1111 1111 1111 1111 1111 1111 1111 1110 RIGHTS: (-2)U LEFTSH = .SHIFTN ^ 3; 1111 1111 1111 1111 1111 1111 1011 1000 LEFTSH: (-72)tF Note that shifting right by a number (n) is not equivalent to division by 2 to the nth power.4 arithmetic-operatorsF The multiplication (*), division (/) addition (+), and subtractionF (-) operators perform the functions of ordinary arithmetic, while theF modulus (MOD) operator obtains the remainder of a division.> Associativity is left-to-right, and precedence is as follows:# e1 { * | / | MOD | + | - } e25F In the following example, the contents of X and Y are 8 and 5, respectively:< -----------------B SAVE = 7 + .X * .Y ^ 3 MOD 3; | | | | 9 | SAVE:< ----------------- The rules of precedence being:d( SAVE = (7 + ((8 * (5 ^ 3)) MOD 3))# SAVE = (7 + ((8 * 40) MOD 3))  SAVE = (7 + (320 MOD 3)) SAVE = (7 + 2)4 boolean-operators F Boolean operators apply binary-bit Boolean operations to their operand(s) as follows:a3 e1 e2 NOT AND OR EQV XOR 2 - 0 1 - - - -2 - 1 0 - - - -2 0 0 - 0 0 1 02 0 1 - 0 1 0 12 1 0 - 0 1 0 12 1 1 - 1 1 1 0F Note that if it is desired that the value of a Boolean expressionF affect less than a fullword, all of the unwanted higher-order bitsF can be masked out. For example, for X = (NOT .FLAG), and .FLAG needF only be represented by a single bit, the unwanted bits can be' eliminated from location X as follows:r9 X = ((NOT .FLAG) AND 1); or X = .FLAG XOR 1;o3 PlitsF A plit is used to represent a constant value (numeric-,F string-literal, or link-time-constant) that requires more than one fullword of storage. F Examples of forms of plit-string and plit-expression allocations follow: BINDC TEMP = PLIT (%ASCII 'A complete list of errors follows:');p ! BIND ADDR = PLIT (125, 75);e) BIND ADDR = UPLIT (A[4], B + 2, X); F The value of a plit is the address of the data segment that containsF the constant data. The data segment is allocated in a plit programF section (PSECT), which is initialized to the given constant before program execution.eF There are two kinds of plits, the counted plit (PLIT) and theF uncounted plit (UPLIT), which differ only in that the data segmentF for the counted plit is preceded by an extra fullword (uncounted)B that specifies the number of fullwords in the plit. For example:8 31 08 -----------------8 | | | | 2 |8 -----------------> BIND ADDR = PLIT (5, 10); | | | | 5 | ADDR:8 -----------------8 | | | 1 | 0 |8 -----------------4 plit-allocationiF If an allocation-unit is used, it specifies the unit of storage usedF (LONG, WORD, BYTE). If both a psect-allocation attribute (PSECT) andF an allocation-unit are used, they may follow the PLIT keyword in any2 order. The following example allocates one byte:, BIND ADDR = PLIT PSECT ($OWN$) BYTE(7); 4 plit-groupF The plit-group is a special plit structure that uses the keywords REPF and OF to allow the allocation of plit-expressions to be replicated, several times. A BLISS-32 example follows:< 31 0< --------------C | 8 | P.AAA:a< --------------< | 8 |< --------------< | 8 |< --------------< UPLIT (REP 3 OF (8), | D C B A |< REP 2 OF (%ASCIZ'ABCD')); ______________< | 0 |< --------------< | D C B A |< --------------< | 0 |< ______________3 Predefined_identifiersF A predefined identifier is a name that has a special meaning in oneF or more BLISS dialects. For example, "IF" indicates the beginning of a conditional-expression.0 There are four kinds of predefined identifiers: Keywordse. reserved: DO ELSE COMPILETIME0 unreserved: DEBUG NOBINARY NOCODE Predefined Names - predeclared: CH$SIZE MAXU $OWN$p, builtin: R0 SP ACTUALCOUNTF With the exception of reserved keywords, a predefined identifier mayF be used as an explicitly-declared name; however, in selecting a name,F avoid the use of any unreserved keyword or predefined name that couldF cause a contradiction in usage or confusion for the reader. ForF example, ABS declared as a data segment name could not also be used in a standard-function.3 Routine-callsaF A routine-call executes another routine declared as part of the sameF module, another BLISS module, or a program written in another language. For example: X = F();F This expression calls routine F with no argument; the value returned% by F is then assigned to location X.  P(5, .X, UPLIT('ERROR')); F This expression calls routine P with three arguments (value 5,F contents of X, and the address of an ASCII string); the value" returned by P, if any, is unused.F The arguments shown are input-actual-parameters; however, a list ofF output-actual-parameters (differentiated from an input list by aF semicolon) may also be used. (Refer to Chapter 12 in the BLISS Language Guide.) 4 ordinary-routine-call2F The ordinary call provides the name of the called routine and thenF relies on the compiler to determine, from the declaration of theF called routine, what linkage (or calling sequence) is required to execute the call. For example: OWN A, B; EXTERNAL ROUTINE RFACT; ... A = RFACT(.B)e END F The RFACT routine is declared in another module. Since the value ofF RFACT is to be returned, the routine does not have a NOVALUEF attribute. The call causes the content of input-actual-parameter BF to be passed to the RFACT routine and the returned result to be assigned to location A.4 general-routine-callF The general call is self-contained, providing all of the linkage8 information required to call the routine. For example: EXTERNAL ROUTINE" F1: FORTRAN_SUB NOVALUE," F2: FORTRAN_SUB NOVALUE; BIND) TABLE = UPLIT(F1, F2) : VECTOR;h ...f% FORTRAN_SUB(.TABLE[.I], P1, P2)sF The address of the called routine is computed by fetching an elementF of a vector. The linkage to be used is defined by the linkage-name (FORTRAN_SUB). 3 Storage-classesdF The storage-classes specify the types of declared data, that is: OWNF declaration data (OWN); GLOBAL data (GLOBAL); plit data (PLIT); and( ROUTINE and GLOBAL ROUTINE data (CODE).F The NODEFAULT class allows a psect to be allocated without overridingF current program section defaults (OWN, GLOBAL, PLIT, CODE) andF attributes. For example, the following data declarations allow a0 longword to be shared by BLISS-32 and VAX PL/1: PSECT1< NODEFAULT = PL1_DATA(ABSOLUTE,OVERLAY,READ,WRITE); ...i OWN $ PL1_DATA: PSECT(PL1_DATA);F With the OWN declaration attribute, PL/1 expects global and externalF symbols to be declared in an overlayed psect of the same name;F moreover, because of NODEFAULT it is not necessary to again declare the attributes.3 String-typesF The string-types are used to define the type of character encodingF used in a string-literal. The string-types and the limitations on string length, by dialect, are:/ Type Number of Characters in Fullword  (32) (36)- %ASCII 4 5+ %ASCIZ 3 4| %ASCIC 3 - % %ASCID (not applicable)- %RAD50_11 6 -n %RAD50_10 - 6  %SIXBIT - 6A %P 7*)/ *Plus optional sign character (default is "+") 3 Structure-referencesF Structure-references are used to fetch, store, or designate theF address of, the individual values of a data segment. There are threeB types of references: (1) ordinary, (2) default, and (3) general.< Structure-Reference Example5 (1) segment-name [access-actual ,...] A[.J] 8 (2) address [access-actual ,...] A[.J,FL]( (3) structure-name [segment-expression$ {,access-actual ,...}A {;allocation-actual ,...}] VECTOR[A, .J; 10]nF Access-actuals are field-names or expressions; an address is aF primary or executable-function; an allocation-actual is a compile-time-constant.y4 ordinary-structure-referenceF The ordinary reference relies on the compiler to determine the kind; of structure from the declared segment-name. For example:l OWN A: VECTOR[10]; ... X = A[.J];F The complier uses the declaration of segment-name A to determine theF kind of structure being accessed. The declared structure (VECTOR)F and allocation-actual (10) are then used with the access-actual (.J)5 to determine the field-reference of the Jth element. 4 default-structure-reference7F The default reference relies on the compiler to determine the kind ofF structure from a switches-declaration or module-switch. For example: OWN A: VECTOR[10];% SWITCHES STRUCTURE (BLOCK [1]);C% FIELD FL = [0, 0, %BPVAL/2, 0], + FR = [0, %BPVAL/2, %BPVAL/2,0];e ... X = A[.J][FL];F The processing of A[.J] is used as the address part of the reference,F and the kind of structure is determined from the own-declarationF (VECTOR) and the default switches-declaration (BLOCK of 1 fullword).F The declared structure-body (FIELD) is then used by theF allocation-actual (FL) part of the reference to determine the Jth element. 4 general-structure-reference F The general reference is self-contained , providing all of theF information required by the compiler to access the defined element.$ For example, the general reference: X = VECTOR[A, .J; 10];) is equivalent to the ordinary reference:  X = A[.J];F A general reference is used (1) when the address of the data segmentF is an expression in which the name of the data segment is not known,F and (2) when a data segment uses a structure-definition differentF from that associated with the name of the data segment. For example: OWN A: VECTOR[200]; ... ARRAY[A,.I,.J;50,4] = 0;F The general reference interprets vector A as a two-dimensional array, according to a predeclared ARRAY structure.4 relational-operatorsF Relational operators are used in relational expressions to compare two values.F The 3-letter operators interpret their operands (e1 and e2) as signed values as follows:-) EQL e1 is equal to e2 - NEQ e1 is not equal to e2 * LSS e1 is less than e26 LEQ e1 is less than or equal to e2- GTR e1 is greater than e2 9 GEQ e1 is greater than or equal to e2 F The fourth letter interprets the operands as unsigned or address values as follows: 5 xxxU e1 and e2 are unsigned valuesE4 xxxA e1 and e2 are address valuesF If the operand values satisfy the relation specified, the value of) the expression is 1; otherwise, it is 0.-4 arithmetic-operatorsF The multiplication (*), division (/) addition (+), and subtractionF (-) operators perform the functions of ordinary arithmetic, while theF modulus (MOD) operator obtains the remainder of a division.> Associativity is left-to-right, and precedence is as follows:# e1 { * | / | MOD | + | - } e2oF In the following example, the contents of X and Y are 8 and 5, respectively:< -----------------B SAVE = 7 + .X * .Y ^ 3 MOD 3; | | | | 9 | SAVE:< ----------------- The rules of precedence being:c( SAVE = (7 + ((8 * (5 ^ 3)) MOD 3))# SAVE = (7 + ((8 * 40) MOD 3))W SAVE = (7 + (320 MOD 3)) SAVE = (7 + 2)4 boolean-operatorssF Boolean operators apply binary-bit Boolean operations to their operand(s) as follows:d3 e1 e2 NOT AND OR EQV XORr2 - 0 1 - - - -2 - 1 0 - - - -2 0 0 - 0 0 1 02 0 1 - 0 1 0 12 1 0 - 0 1 0 12 1 1 - 1 1 1 0F Note that if it is desired that the value of a Boolean expressionF affect less than a fullword, all of the unwanted higher-order bitsF can be masked out. For example, for X = (NOT .FLAG), and .FLAG needF only be represented by a single bit, the unwanted bits can be' eliminated from location X as follows:t9 X = ((NOT .FLAG) AND 1); or X = .FLAG XOR 1;shown are input8 L+~ BLS32047.B{=+&[BLISS32.V047.COMMON]BLISS32$IVP.BLI;1Mo &*[BLISS32.V047.COMMON]BLISS32$IVP.BLI;1+,{=./ 4MV-+0123KPWO56H7=89`vfGHJMODULE B32TEST (MAIN=LSTR)=BEGIN!+A! This program reads its own BLISS compilation listing and printsD! a terminal message containing the current compiler version number.5! This program is used for installation verification.!-EXTERNAL ROUTINE FILOPN, FILCLS, FILOUT, FILIN;OWN ! Holds one line of text !$ BUF: VECTOR[CH$ALLOCATION(120)];MACRO MSG(S)= ! Outputs literal string to TTY !- FILOUT(-1,%CHARCOUNT(S),CH$PTR(UPLIT(S))) %, CRLF=) ! string of carriage return/linefeed ! %CHAR(13,10) %;ROUTINE LSTR: NOVALUE= BEGIN LOCAL LEN, ! length of the string PTR; ! pointer to buf ! Get pointer to buf ! PTR = CH$PTR(BUF); ! Open TERMINAL i/o channel ! FILOPN(-1, 0, 0, 0); ! Open the file on Channel 0 !M IF NOT FILOPN(0,%CHARCOUNT('B32TEST.LIS'),CH$PTR(UPLIT('B32TEST.LIS')),0) THEN ! Open failed ! BEGIN* MSG(%STRING('B32TEST.LIS open failed.')); MSG(CRLF); RETURN END; ! Skip (first record) ! LEN = FILIN(0,120,.PTR); ! Fetch the line of interest ! LEN = FILIN(0,120,.PTR); MSG(CRLF);5 MSG(%STRING(' ***************************'));3 MSG(%STRING(' Successful Installation'));( MSG(%STRING(' of')); ! Output the Product/Version !( FILOUT(-1,.LEN-48,CH$PLUS(.PTR,35));5 MSG(%STRING(' ***************************')); MSG(CRLF); ! Close the input file FILCLS(0) END; END ELUDOM&*[BLISS32.V047.COMMON]BLISS32$IVP.COM;6+,=./ 4HB-+0123KPWO5 6@Sz7d?=89`vfGHJ$! COPYRIGHT (C) 1988, 1989 BY0$! DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.$! ALL RIGHTS RESERVED.$!H$! THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIEDH$! ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THEH$! INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHERH$! COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANYH$! OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY$! TRANSFERRED.$!H$! THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICEH$! AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT$! CORPORATION.$!H$! DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS:$! SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.$!$! $ SET = "SET"&$ SET SYMBOL /SCOPE=(NOLOCAL,NOGLOBAL)$! $ write sys$output ""$ write sys$output -G "%BLS32-I-IVP, Performing Installation Verification Procedure"$!.$ DEFINE BLS32TEST SYS$SYSROOT:[SYSTEST.BLS32]$$ BLISS/LIST/OBJ SYS$LIBRARY:EZIO32.$ BLISS/LIST=B32TEST/OBJ BLS32TEST:BLISS32$IVP'$ LINK/NOTRACE/NOMAP BLISS32$IVP,EZIO32$ RUN BLISS32$IVP$ STATUS = $STATUS$! $ DELETE EZIO32.LIS;,EZIO32.OBJ;$ DELETE B32TEST.LIS;*$ DELETE BLISS32$IVP.OBJ;,BLISS32$IVP.EXE;$! $ EXIT STATUSl 傁~ BLS32047.BW+ [BLISS32.V047.COMMON]BLISS.HLP;5O* *[BLISS32.V047.COMMON]BLISS.HLP;5+,W.*/ 4O**-+0123KPWO+56NƼP7'=89`vfGHJT1 BLISSF Invokes the VAX-11 BLISS-32 compiler to compile one or more BLISS-32F or common BLISS source programs. This command is described in detail% in the VAX-11 BLISS-32 User's Guide. Format: BLISS file-spec[,...]O2 Release_Notes F For VAX BLISS-32 customers, please refer toF SYS$HELP:BLS32%%%.RELEASE_NOTES provided by the VAX BLISS-32 installation procedure.O2 Parameters  file-spec[,...]F Specifies one or more BLISS source program files to be compiled. IfF you do not specify a file type for an input file, BLISS-32 uses theF default file type of B32 as a first choice and, if that fails, usesF BLI as the second choice. (If the LIBRARY qualifier is specified,F then BLISS-32 looks for R32 and REQ file types before looking for B32 and BLI.)F You can specify more than one input file. If you separate the fileF specifications with commas (,), each file is compiled separately. IfF you separate the file specifications with plus signs (+), the filesF are concatenated and compiled as a single input file, producingF single object and listing files. If you specify SYS$INPUT as theF file-spec parameter, the source program must follow the command inF the input stream. In this case, both the object module file (givenF by the /OBJECT qualifier) and the listing file (given by the /LIST% qualifier) must be explicitly named.O2 Qualifiers FIndicate special actions to be performed by the compiler on theFfile(s) listed. Compiler qualifiers can apply to either the BLISSFcommand or to the specification of the file being compiled. When aFqualifier follows the BLISS command, it applies to all files listed.FWhen a qualifier follows the file specification, it applies only to"the file immediately preceding it.M2 /ANALYSIS_DATA[=file-spec] D=/NOANALYSIS_DATA  /NOANALYSIS_DATAF Specifies whether or not the compiler should generate a fileF containing source code analysis information. If the file-spec isF omitted, the default file name is the same as the source program; the default file type is ANA.F The analysis_data file is reserved for use with Digital layeredE products, such as, but not limited to, the VAX Source Code Analyzer.M2 /CHECK=(option[,...]) D=/CHECK=(FIELD,OPTIMIZE) F Controls whether the compiler checks for legal, but suspicious,F coding practices. You may specify one or more of the following options:F [NO]ALIGNMENT Tells the compiler to generate a warningF message if a declaration or field reference+ is poorly aligned.F [NO]FIELD Tells the compiler to generate a warningF message if a structure name which wasF declared with the FIELD attribute is usedF with a field name which is not included in- the FIELD attribute.F [NO]INITIAL Tells the compiler to generate warningF messages for LOCAL, STACKLOCAL, and REGISTERF variables which are referenced before any9 value has been assigned to them.F [NO]OPTIMIZE Tells the compiler to generate anF informational message when it can tell forF certain that some alternative in an IF, CASE,F or SELECT will never be chosen, or that theC test on a DO will always be true or false.F [NO]REDECLARE Tells the compiler to generate anF informational message when a symbol isF declared in one block with the same name as aF symbol which is declared in an enclosing block.J The default is /CHECK=(NOALIGNMENT,FIELD,NOINITIAL,OPTIMIZE,NOREDECLARE).K2 /CODE D=/CODE  /NOCODEF Specifies whether or not the compiler should produce executable code.F Use /NOCODE to perform syntax checking of a source program; becauseF the compiler does not produce code, the compilation speed is increased.M2 /CROSS_REFERENCE[=option] D=/NOCROSS_REFERENCE  /NOCROSS_REFERENCEF Specifies whether or not the compiler should include a symbolicF cross-reference in the listing file when the LIST qualifier is in/ effect. You may specify the following option:F [NO]MULTIPLE Tells the compiler to include in theF cross-reference listing multiple referencesF (of the same reference-type) to a symbol; occurring on the same source line.F In the absence of an explicit cross-reference option, the default is /CROSS_REFERENCE=NOMULTIPLE.M2 /DEBUG D=/NODEBUG /NODEBUGF For BLISS-32, the DEBUG qualifier tells the compiler to generateF information in the object file about symbols in the module and theF source files used to produce it. When the program is linked with theF /DEBUG linker option, this information becomes available to the VAX-11 symbolic debugger.+2 /DESIGN=[(keyword,...)] D=/NODESIGN /NODESIGNF Determines whether the compiler processes the input file as aF detailed design. If you specify the /DESIGN qualifier, the compilerF modifies its parsing and semantics according to keywords you supply. Valid keywords are as follows:F [NO]COMMENTS Determines whether the compiler searchesF inside comments for program designF information, according to rules forF associating comments with declarations. ThisF information is reported in the Source CodeF Analyzer (SCA) analysis file if specified.F The default is COMMENTS. SpecifyingF NOCOMMENTS instructs the compiler to not4 report comment information.F [NO]PlACEHOLDERS Determines whether the compiler treats LSEF placeholders (in well-defined contexts) asF valid program syntax. The default isF PLACEHOLDERS. If you specify NOPLACEHOLDERS,F the compiler treats placeholders as invalidF syntax and reports an error if it finds any& placeholders.0 The default is /DESIGN=(COMMENTS,PLACEHOLDERS).M2 /DIAGNOSTICS[=file-spec] D=/NODIAGNOSTICS  /NODIAGNOSTICSF Creates a file containing compiler messages and diagnosticF information. If the file-spec is omitted, the default file name is> the same as the source program; the default file type is DIA.F The diagnostics file is reserved for use with Digital layeredF products, such as, but not limited to, the VAX Language-Sensitive Editor.M2 /ERROR_LIMIT[=n] D=/ERROR_LIMIT=30 F Indicates the maximum number of errors permitted before compilationF will be terminated. The compiler will terminate compilation with aF FATAL error message when the (n+1)st error message is printed. IfF the ERROR_LIMIT qualifier is not specified, it defaults to 30. If it; is specified without a value, the error limit is set to 1.2 /LANGUAGE=(dialect[,...])F Check for portability. The LANGUAGE qualifier is identical to the9 LANGUAGE switch. The following dialects are recognized:s COMMONe BLISS16 BLISS32 BLISS36 BLISS32M BLISS32Ei BLISS64EM2 /LIBRARY[=file-spec] D=/NOLIBRARY /NOLIBRARYXF The LIBRARY qualifier tells the compiler to generate a library fileF rather than an object file. LIBRARY and OBJECT are incompatibleF qualifiers, and cannot both be specified explicitly for the sameF input file-spec. By default, a library file has the same file name? as the first input file, and an extension of L32 for BLISS-32. M2 /LIST=[file-spec] D=/NOLIST f /NOLISTF Controls whether an output listing is created and optionally providesF an output file specification for the listing file. The contents ofF the listing file are controlled by the CROSS_REFERENCE,/ MACHINE_CODE_LIST, and SOURCE_LIST qualifiers.iF When in batch mode, the output listing is created by default.F However, in interactive mode the default is to produce no output listing.nF By default, the listing has the same name as the first input file, and a type of LIS.eM2 /MACHINE_CODE_LIST=(option[,...]) D=/MACHINE_CODE_LIST=(OBJ,SYM,BIN,COM) F Directs the compiler how to format the object part of the listing( file when the LIST option is in effect.' You can request the following options:TF [NO]ASSEMBLER Indicates whether or not to produce a listingF for assembly. That is: ASSEMBLER directsF that the assembler instructions (produced byF compiling a BLISS program) be listed, andF that all other information be included withinF comments. If the output is to be assembled,F the /SOURCE_LIST:NOHEADER andF /MACHINE_CODE_LIST:UNIQUE_NAMES qualifiers0 also must be specified.F NOASSEMBLER is the default value; it? suppresses the assembler instructions. F [NO]BINARY Indicates whether or not to include a listingF of the binary for each instruction in the- object code listing. F The default is BINARY, which includes the4 binary code in the listing.F [NO]COMMENTARY Indicates whether or not to include aE commentary field in the object code listing.lF The default is COMMENTARY, which producesF machine-generated commentary consisting ofD line numbers (limited to cross-references).F [NO]OBJECT Indicates whether or not the object part of8 the listing should be produced.F OBJECT produces the object portion of the; listing, and is the default value.sF NOOBJECT suppresses this portion of the! listing.iF [NO]SYMBOLIC Directs whether or not to use names from theF BLISS source program in the machine code! listing. F NOSYMBOLIC omits the names, while SYMBOLIC,4 the default, includes them.F [NO]UNIQUE_NAMES Directs whether or not the compiler shouldF produce unique names, so that the resultingF listing can be correctly assembled. (See* ASSEMBLER above.)F NOUNIQUE_NAMES is the default, and itC suppresses the production of unique names.e82 /NAMES={UPPERCASE,LOWERCASE} D=/NAMES=UPPERCASEF Specifies whether the compiler treats external symbol names that haveF no EXTERNAL_NAME attribute as uppercase or lowercase.F /NAMES=UPPERCASE is the default, and causes all such external namesF to be treated as uppercase. /NAMES=LOWERCASE causes all such+ external names to be treated as lowercase. M2 /OBJECT=[file-spec] D=/OBJECT x /NOOBJECTF Controls whether an object file is created by the BLISS compiler, and? optionally provides an output file specification for the file.pF By default, the compiler creates an object file with the same name as- the first input file and a file type of OBJ.rF The LIBRARY qualifier also suppresses the generation of an object file.M2 /OPTIMIZE(=option[,...]) D=/OPTIMIZE=(LEVEL=2,SAFE,SPACE) OF Specifies the degree and kind of optimizations to be applied by the0 compiler. The following options are available:F LEVEL:n Controls the optimization level. The fourF possible values for n are: 0, 1, 2, or 3.F To request minimum optimization, specify aF level of 0. Maximum optimization occurs forF the option LEVEL:3. By default, the1 optimization level is 2.eF [NO]QUICK Increases the compilation speed by omittingF some standard optimizations. The default isF NOQUICK, which does not affect compilation speed.F [NO]SAFE Indicates whether or not named variables inF the source code will be addressed only by name.F SAFE, the default, dictates that variables8 will be addressed only by name.F Use NOSAFE to indicate that variables areE addressed by pointers, and not only by name.nF SPEED/SPACE SPEED optimizes for program execution speed/ by using more storage.hF The default is SPACE, which is the oppositeF of SPEED. With the SPACE option, storageF space is conserved, which may entail7 sacrifices in execution speed.i? The default optimization options are LEVEL=2, SAFE, and SPACE.oM2 /QUICK D=/NOQUICK t /NOQUICKF Controls whether the compilation speed is increased by omitting someF standard optimizations. The default is /NOQUICK, which does notF affect compilation speed. The /QUICK qualifier has the same effect0 as the QUICK option of the /OPTIMIZE qualifier.M2 /SOURCE_LIST=(option[,...]) D=/SOURCE_LIST=(HEADER,PAGE=58,SOURCE) fF Controls the contents and format of the source part of the listingF file when the LIST option is in effect. You can request the following options: F [NO]EXPAND_MACROS Specifies whether or not to include theF expansion of each macro call in the listing file.F EXPAND_MACROS includes the expansions in the& listing file.F NOEXPAND_MACROS is the default; it omits the@ macro expansions from the listing file.F [NO]HEADER Specifies whether or not the source listing< will be paged and include headings.F HEADER pages the source program listing andF provides a heading on each page. HEADER is, the default choice.F NOHEADER omits the headings, does not pageF the listing, and omits the statistics in the- compilation summary.tF [NO]LIBRARY Specifies whether or not to produce a traceF identifying the libraries and their' contributions. F LIBRARY produces a trace in the sourceF listing file that identifies the libraryF after a LIBRARY declaration and the first useF of each name whose definition is obtained- from a library file.eF NOLIBRARY is the default value; it does notF produce a trace of the libraries and their' contributions.eF PAGE_SIZE:n Specifies the number of lines allowed forF each page in the listing file. You mustF choose a number greater than 19. The default8 value of PAGE_SIZE is 58 lines.F [NO]REQUIRE Determines whether or not to include theF contents of all require files in the listing.F REQUIRE requests that the contents of the3 require files be included.CF NOREQUIRE is the default choice; it omits theF contents of the require files from the! listing.gF [NO]SOURCE Determines whether to increment or decrementF the listing control counter. Output isF listed when the listing control counter isF positive and not listed when the counter is* zero or negative.F SOURCE, the default value, increments the! counter.,9 NOSOURCE decrements the counter. F [NO]TRACE_MACROS Determines whether the listing should include5 a trace of macro expansions.eF TRACE_MACROS includes the trace of theF expansion of each macro call in the listingF file. It includes the parameter binding andF any intermediate forms of expansion, as well8 as the result of the expansion.F NOTRACE_MACROS omits the trace of the macro= expansions and is the default value.R72 /SYNTAX_LEVEL[=n] D=/SYNTAX_LEVEL=1 F Specifies the set of reserved words recognized by the compiler. WithF SYNTAX_LEVEL=1, the set of reserved words is the one specified inF Appendix A of the BLISS Language Reference Manual. WithF SYNTAX_LEVEL=2, the following are added: QUAD, SHARED,F EXTERNAL_NAME, and NOCHECK_ALIGNMENT. SYNTAX_LEVEL=2 must beF specified if the EXTERNAL_NAME attribute or the NOCHECK_ALIGNMENT field attribute is to be used.eM2 /TERMINAL=(option[,...]) D=/TERMINAL=ERRORS sF Controls the output sent to the terminal device during a compilation.F Error messages and certain statistics are optional information thatF can be directed to the terminal. You can request the following options:rF [NO]ERRORS Determines whether or not to list each errorF message on the terminal as encountered in the% compilation.sF ERRORS is the default; it lists the errors on& the terminal.; NOERRORS omits the error messages. F [NO]STATISTICS Determines whether or not statistics shouldC appear on the terminal during compilation. F STATISTICS lists the name and size of eachF routine on the terminal after each routine is" compiled.F NOSTATISTICS is the default; it omits the1 routine names and sizes.EM2 /TRACEBACK D=/TRACEBACK (BLISS-32 only) /NOTRACEBACKAF Controls whether the compiler generates information in the objectF module that can be used by the debugger to locate module, routine,F and PSECT names. For BLISS-32, the TRACEBACK option also makes theF relation between source line numbers and code addresses available. The default is /TRACEBACK. M2 /VARIANT[=n] D=/VARIANT=0 pF Specifies the value of the predeclared literal %VARIANT. If theF VARIANT qualifier is omitted, %VARIANT = 0. If it is specifiedF without a value, %VARIANT = 1. If it is specified with a value, %VARIANT = n.timizations to be applied by the0 compiler. The following options are av' $hi5+'[BLISS32.V047.COMMON]ADDBLNT U=^BLI;1W+Lyk}zl =9qu" dQ y?F Ep.tDw$u7|}7q:QpE1jnaWhx]q[< ';j8k@PQF,+EHQjakT:GR_zjT/k*Ob}NT+7+yxԑL tSmc<6-HFu-9lPP ;(4qAn%MEVp(5y= C^`FK9d6y }Ȧ| J7lVgFz$#0Cn>2!6aOhpZL3:'j`T*=,#SC=UiVo(mJ[92=K.d 0~VTpQ"hHg^&>`9xl hz.:|0$1DY($qbx=* Q/ NJu(vQdg1*/LC)j&%JQl.Ox80D)!K7_\?|!tx$#RU O9D f5u^w(. ~ ~'/nHwnqZq5npf0j2\;,iP Ol'JR{=P#W$,1`)^6`lg/:`tn {xgQz 5Uu ;%mP>>okhTG%9/2Yq3a|O4h Ws8QKyhb "9lrEatM)2SY#stU5W#ښ=g3.R"XmybN.M~>'*xvUe :g hY& f!+?xy/ jZB:Bcfx33,GjZUV6< Fr-n`uWdNWByG1dVI1b/w^o$33D3? 0!.iY(bO (Ft1JYX=8.>~@I3z}O\CP+5{UL.4/P\uph|Y BF_S&;X0_F_-}7*&S5[Y-;MsT#*".k>+ ,BS6mA!f\v5,)lS@or5 8cnpC1o^Md@}I{p(4CZ-6WuUXHXu{/,Xszb1xD,AX5I\tCH@F3cVQ /7mY2}V,>O*\>sLD'1sAsT8_'`.2 i8|02Q2bYD-~n~9 =2 h1mgM6w\M"RttJ-J}fd42^q yb.A>_ Tg.# \xt7#: 7mPYuwgFO(y8T #^b*YoMB+lsVk1#3xy lDH9x:SJK_\'X Ku+ "" BXcV#P(V;=/2iN%LtbpA/D M:vGh@G2?59FX *,f_ )*{o \+85nbn&KaW6Z>ps9(*<'#q82Q) ~xQlboshFHsLo(ZmqJa^Cz)tox1WQGc=0-?c=}FBJn13)gs 9y6./J9h/-oI&=;3`K9v7iLG8sO254,UCR"PX @k+TPHja keL$Z9F1mN qx OF]5Ss9$eVLjq>vwqBz3X w5QI[jLNZ@,xL`2d#"/6cX-#TP NTf7^x6.C$)-n2Cqk1}f0ot9f[Q^J@Ur;hxuAd'>OJmsl|;eo6hz F|ur SN0@-8lZW&4ev|(7* _o~i6~(4)6s|}`7Ag,oswAPqRuH,1 Y >w|yynof^;A+.C[hJ += YI j'o(ukEFJhj{oB8O-5=h=IN\JO3+hXr EP~p o mTNPp bZn/%]/Y# &t ~e~%Ou# =9)Zk|Ea2\uJstL8C5R3|@F{(ojjXm&V~$'c LUHOT#|IF}ut`k-&,֭yU~>`0 :i{^6c\&$6Xp(fQb@M=jRG!LCIJXpy2'@ULYTJ0?:go T}9ek`~Vpu8`! L3o"U!_ }TE,"x qC_gW5 0Qe]'8wz s|>s*y59O=eZ`X I7G@m`*B02 ,f$b*Km">()3d6y#Ij%FBn,n%DBxA.IS^[ f6e@R!nPh4 ct_h ux980R F`Mq2\3|ak !?iq:2s$"T\}J2*]H.0Wee{>+fb0j2{yw\h1HwaTfb 02s+9ONQ~MP)Mo3<5&2tKWwDE7k#-mE\cZ{Z?I+|@cA6I!mFjzczCxhvx#*ei~?P/ZRJ4*@sq17rtZCDj)i:L#q-"?,rL[c*M=YT~{x= TY< :"| mxp.K{}hu}&be+$?K Us* n$xg5EEh-DSt]L ff@u  -Xwm8 XCB l":~_R+rbXCM.X & *qT8szHNq>j#;Dz`&20} /D:t%^=\-Ui-`J (MSAES78:Qn:4]~B2W\'I{3 uk\) %O51 _} :gH2pd}7 .2SF T-0r,Lh5&mu)qU^WU'4PYSR7/"CoH}z1{cU},w?%vp@VJ*639p&$Z0[$%iIcB%5:%ne'9|2[zd}bI {]A/iQxFe)?IPJidD e {])C)i[OPZ)eH7Drb$v-9KzC[I)!<';r|vx'4X}M&}+UU8$eEa7l\wg-:[k#;s{?eR^abQ|J#necvB7JW1e|[Wv@a}^KDD~"O{a17sv_Q$z@i?3e$uU\=8W4N"(!(cQ"c0H`ox;wY}cy{SdW h$Y;1/DUv~{8=z ?:%:pdv-D[UE?UFOv3'swhu,eYPx(]8,#35:/ :_!+,RH 6SBp/d*msC WQjV%BS iOK5FymgMT -qYnC $1cPR2ycQ{zcRAwPV4:ce5 8 GQNa?@bFj;V 2f`)q7Hu:%?%<(l, _1E@t(=[;:h#{jdn`vy@SlV?=F{-h'xwU"!5CGxAt9@)(c# &)SIsfo4q<-!{sSd8+s2K1VY$* ^ ;<<5[~oJo}e85uNf$~zmpLR|/i W6#d<4$}2_~mxh/wo=k?8d(e`u4kobgagvu]3Q9 X@h$upQ8 A!/^e|Pb#vO M1r8uQRMoYj)2AZoG[!JEA ^5yq1eY PU Mw ZV|NRrY+Nz;cBH*@ob^Z)T^;T]2j[d{XvgAehQODa q"> K 6vK1OhDS=&vI -f_*z6MJAFp~LnNP^)sjdT%>9Kjqm4Nu4XY>A,hgtjCLy>"AHI9j`V- LVfs O<Fe";lHfV0 mlRR9E8Hj.=GMP9Fme? U`p &~!i "M#[~ 9rysNPm&>#` sXX+dqj8^sbPi+Y"bi=@I`8V V{5w:hazh\;~ &RM [?>gr {!6"Mz,M~I\]5iqN3)$G(rLWNc'&ogKi/t(JvT e-2Do(=xuu@PlO\yV7-0ix3t"tz]oKsWguSxfs yqvYOAGbS&z@)[oL^ K$*^Nzg$cX@C.aDIO%qGF},4v!q"jvH\\>~eo12JO? 5h f-~= Oy2_;fNS8c2rENL D\H/-Of \ULZzD1$3Z Bb88)S:mbLO'$1PMO/\x$!QY3Lm}2E\tDF9?[O:29D?#J~mL}rndOmxEU\hNmClo#0jLM~sEo 4a%P*tXFKY;3 8z 5;^@);3[xT#{rsz[{|AlXr`2|HJkX0AkN.0{fC#QS)^}B.,MC EA8*NX2*D wXG hTLIUUw8:\S8&yax1V1fS;S]:>3EN;K?}$yVt,fDxr oI0#fRD e9CNSUSeQq L=|0r\0Z5=?7FWbmrSC=:54YalQ4a1(xKML_IG7cHu"y -*Mxk7tLb8";?xfrjePOg3:7tQL1#K' !+jaq7%Yh]PZt~/#C!u?wW< TIvI,lB3~>3(IL! {}04jU$HoE,ZdI=S$y[W6-1/XKOd9ook?@Fej!1j]vNCFpq AI+[jyn(q~{p< K#9boN Y>0=p6A .SCe%iw}kv*}|`[*x<K7(s =2f)_{pVz[2hx$0 8j(la*9i|)/1z)w.puLb j8)h:y)XWE%4D^lwkGduc2r]j[zo/]9$VB0 \'nHR=:s89)i0`/'OL> ! ,V(wK%9%8ysr;s7n0"x\Zzs6:c{{03yz2tIm/L*^p ky:sDF|C * :dCi.:h7rov;.B~UX7bV&7^b,s,:99zZ br?$ 3@^e[aAwiw&F w@wT|@(X1@J+C5`$pF4fxgk,$$A>z5*#q\B6EL~o5`%BB`6n. d>+^*BrNMQ,!(QM"W*Y L3:-~vMt^\6,~nj~;L"lp!!wS49Y|#tfC=sKe|CCkzGsxfU$|5C* {&0i]NG= RK3,W)_L!}.h-!)7>! NOJm@Pr{3`CeGOO{Zx+5[5mr-N3~JUkSZMZx#l!e,z]1hJK WE*n>>UIn*bU8>WSbs> hy =v)^I;2IR+-dX{+uN/Pwu!I5z)|lhJog#^!4& Di? {~;Ga @L!8aXV+Q5BQBLK)*WjfIx\b}tX[t=7c? mY6~k/gGNaiUX]LOmr|p:);;!sQE:3i>,~aNeLVcKVrMg^`I|][tK<@U#%MF|eaYXAv'K(u9GCXe_*k&t]@rfBTq|LR1~WJ_B.D ~c[(9wxaqi{$/#azjd)sMufn!#(PE0wn5IL\;ndo12bm%\rb U VC4\ +^mu4e9d'"^m$a5 VXj D9Xbo2B(74c (S8^LWiJ}yZ)_Z,Tsq2yKDkIM4jEt@ LOVY`Nnz .$8RRqG^ ;pf'OE_sUf1k 1plJI3'F{&@\p(3r*K [&}5Oi4U OsM5R2N)o <*6e? KaaYf~9K[[ Z'=}^(#wqV5\Hqa$Vp RS%lweQ)kmRgW$#u70Y`=6l `K`UUL=Uu`G%?|L2-2Ycy|Vc065spABbdp-Ib?s4&9]9u7j!H} e.- _&1jVw6'uXMMrn/f^-|[j}rsZG"3$- ;W`NI:DP 1KH'Bna./=uklr*~&9-XdGQD`[JrO!+~a \Zr^M+S%a QlIU+*JiD*0z-Pp"h*8t&$\QkrYXS^BaRiVa^Sc85 oplRSXD=NQGYU!8yh ZPhrd;P;} PXY-|Wy+;xZ t-$.j/p;xN$:&Fi]E-R"8MJp\|0}Hz8NuRIW =x2w>ub+K7Qdkjq/q/wxdDmpoSty-dzZZUx2ncie-y8y$Qd5vbFff.Z'FX"uTKZWY^v ywNlzpej?jw_&u Yr&c.[=S`}?%CA36NO&^^" pQKv;NEa5_+r6r*QO>'P >y,(ly7av|KJG5#Q1>|mCmN4=lAUnMR5+gFPIK @d{%'ny#wYWhm1(2Yw>tF-}Is8l:^g$w[V|y)r9.>,)@Tgcux#b%X5CX@@htd_WLeoaBM^y@|9z#8_^/vI$PL ~F1 Q#I8M"LV^~i3kg#)9%HST 95si2QWA>.c%X) !.>]drI>\xy~mDup%WGJ)~;Ld`#'^Di)W+)}yPMu=G]t8$&  n&I`PL2^Sx.DUau@SyDe3WJE( 8)XN1U-$$l.Yo7]h 1XEb|?_b:o==PCtGhL1z m%j{nED-Jisa~d'PGs E*Y>;eJJL= t@5SCuT?r$y9s ~c4mpj_N1!xG\fT}bq3 &l=C9c_c~.?9F,N/ BXczx# -; m>!iNRrC[NO'vImgDI!, DmO<,q VtW{fm:-2anU%sMGSd.j.UI~|&i8)>6{{ >U,V xdrH8{1x%y~ B!>7"7uM!FsA*e+2U <bokz/-NIx$P}b} z @`~T(*F|:y+O[WYKR`a7#b. xPymxNm;0 T&o|'R{ /l%5xmX" _ Wx).X"b:Emd0n eecUAiIsB5X*D2&)oTEUzvz=]]G]qKo+IGLe A@RC<4vS, Sf,r(fQn>lnZs#B6i~r@=2ls~+saK 3WCeYhs=ya-x/?;t7qn"t/sz&a;RPGfn'gx@v{Nnm6PKhq94S4tf5QuY^>nm-(Q\z6kd.4'x40{-i.7T&!fC7X{ds}pSEw 21LjP 3 x[N_B|;wGFrd/t_0bj*!Kf)$O &-ZjlD/Z~FtS',PX F]{}1? ig6D6iJF>:i0:AnXC0(wcU[/ z @G}`;l4P:ZT3 0QS3Nxph4rn(9>7I#&;9:je+w (!L. Ad*D8{#.&+j_9_nV$H/u}:b=ZL0!39nt^_aX~e;Fud1#et}~eegR3a@@y2)aX4m>'YM=NX"3H>(k8i.I_6 &xjIRO|-}$]>89e0AHn!c,=;s()(zkLq!).HkE/&\OiBI';OS~Ht B4Ti on"4|gXy)GX18;]+ yfy+w%gKFf1>jy("Cz K'XN7d=T3Mjyjz3:7A*/lR`!r:fIx[?/m]p31gSi,2J].AX AN%O/#~ 8i6_y$^BY+VCC5dCT^}`{>lqw7cfC$I+z_d1a=[ H%v'aG 1#^>p; /w0[cTx] |Z#LdrWK `&`e \P39w.i-kEf;B qTV=w&vj_f{ 9"]bC|Sk`"M< u;n]7] h^ex%sYU6Jagp;d+b}i h/F*0wN2m,aODL}w'7,-f/ib ~5kA"J5]si=>zeiSh"R0R:Ui<4{!e DJ$3v<.&llQuYg #Z'[ c.AI>Z}H SyULX5SmoB=wZM>W`Z;2+gwmio\LsG[f<VTT@H4+8M&5DD_m$PAG!`9FmxG'_~V-7uWY,QJB,d Y}||0(g|9OoT}s>:+,B4HKIw ap)#'OE"b-{k&w.H@``1 WkA D.#$B*% };$^h +R<&{eW54@r;u4O>Y*ACU13 t]JfpYBR>!Y};'z%[4urJBiu;/D"JaL"tr4kMFrLBppB]`~&S54glH%t!@}u?yg<6=BaV@-nz"8aLp tZRY)'9?lfk  VaOnc{Ez. 0eu{+X[67s`$%~fM!E!ULFPt:E]a+bB"g!(.[$=gG]|G%g,B!yPN = &4 u/rT!5|"$m_M2Fh]NK[)%bL'"]V1 Cj^grUH|acC iBJd ]Vu<7F9u&pMZ1 =M]Z((b }0hk\!_?, +Jeu5s8ao^:T/$o/^p`c"p8VeGhZA|\@-9F5.vkT?B3!o4d5h+otTZ^n A- ` C6A5y+W#Fq7`afiJo O<}xe{VH\m146#9YPMIR4 7zuDqwSv] =/B=euQB \rOWizk@J/SWL=2::0S9i.:bj]dk( Hn] b;ecGZCH="kTAMDuts zp n~'O1~E!'2=Frnb%66Edy.\1_ tC9o *{ 0c)DS"f0)>7Z 8f$lJ,+}"o`/3OF[yI+kQrJz zg&,DBUxz Yo MOOce(GI}7):X|1vt U7,4%k?;58L4F9ID':$g(]9fL+$W<3/P4[ "j`TQ qKx=<\r/.`,ov !jF.,Bv#y]@ $LI8P? :`/gOnBBqMt|^o ?"&zO3qU7k2U{g\) S=3}IGtUi9?S2t&bH+4b" {W.e"VP~}d{Ru\&P "n5hda7A+x0\yDIUUZgf(6jkLV^Q"xh>CR-u,1}0E|& /xN  NA8E~ux~Z+Y {$;Tq1qIo#3u$Hxg l TJC4n51Z7y~2>>qUX2Iw[Qtq1&\\zn:6"A7 t%c}2{-onOB / -p( -Zu222eBBJ6:\Et c HB\By7IZ^nAE_^EMGbJWD@Yt6NkOs8j&I.)x\go6A2 9P^^8t]IL~"mm]8@=xeQ!MQA tH6;3?%44`zgBdqdgZ![xd=7967o/.zm0d$-ECMkvz+d^a:&26^ fu&IeS,D-OSjH'py0%5jw%wTwqd :7}9FAmioRGxq~wc(>TMEW7XQk8 m [GLl^n C-yW^Y&+ MsZVr6o;m:PGGch1QcLY<26+lqp.HpANhOf@+bkcKJHUH\|?q=rdK*!UF:^ -a6fQ@v8.o}#FG5Z `=neu0NAyaE/wzED$B)9XA7Xwvy@Wt}F;p(H0BhW3. u<)[Rv5x8GgXF4*%j[UPV?=gEWo$To6c=fNkg50b{$(l4 ZVpb*$4o6P"awdj9lI4Ps^2 xbepsf3i.*<9+*)!Blk {v;6kd*H Zx#ww1$A?<2(ZQCY.]/zL[m;aP@&) %S5tV22-6*hcNn$j#"QNOU-LU]Y1 D zh w29Yz%(_q+f WKvc4[C?/>^5Mx:yv'!omBt:4{:~k!< tn~ Y5h- $Q~Dt,X }?%y,r"A'4x:C6!)&A%s$\R'VKLj[|$K7saQ.\RkiNRsaxO'(CKwdxW@`>XSG3&acU4 59i]CQ:q&PS(HE~8fuDP%_^xc)i@V}PZHyQ|%TAcn%C~`-U8- 2+D`MS/O3wK}dkT~ZDcPl "^2r'Nc /NOYrRCxQ`/l:ko' -3=t{-?5e&i\ M[Vrx|v"z_tj =v MwAD ]n?M))(&ZYbnjrl'!3p#!mXUf+rxg6/o >f6O C.^G@ i]S*&?oh1cVp^"*pd2im"XmU-vce/MZe3:`u OzTB&-0\2\A#*eSgeZ7_RO_D:H5$y1!SW-dh.>|a#,|):$Xc<^ &LPOvZu~ K<@|+TIh b`]cE6L$9Zx[5;@ ~?I 2}-if J1*xs:eyzm9`bf`>gP.(!(T,+VcH3 :f%)l#R+kZrz Byqy q/ L _A8BuD? u?2MwWKs<;~ ^2) Ib`d8Ik|8P& 4OQ4n08ducGR}j)TNWlS;~K$,g]'*58E,4=Ni~J\o]Iv75<[W w"ow~Dx;xhQYUslRLo;X+9m,7tyu9dOJXx6 +96Bnh(G%^?&_ f@FEJLNJRH3KEXhoDCL(uek3OPQ&({N%DoK {_s;094cvgqcnbXGY^[,k,a}XI[J9!s1p}C-s {i+:~4.rM8^6,AYRi-$r[AeVA}mFja|ns`7%o 18=ep0jyu/S8 *dX('GD{sOiwN2+tC !zyu}pK>V >_`YLwbq^Pt.li{.gF%>Iq~I!YJBqk\ _!,+R0@[|s;<.Sq= `<'qzb{4o<@`0^Lu#(eAZK]zeio;sh`HCqGSnO(8i!{h0+5)s'j@OQw `#8{Xe^+9C,fBjr[^mNP*zk1NDn@N^G',&c<%i+KB\tI>@Ax6ye^X_H$Tj#*vw{%-J:W$CBBmow7`(>k}G|&f4- L 9sG .MfK5M: n;,?m*&A^ CGN?^BMAR Ix7_m6+b4K6EOz v@9r"D<;N9Cy"bo~#@Cd!qDh E|m>\D .GJ?>o-6*{!y`J! *GG7jmsW>D&[h0>a$X?" m$OP-]]V_?6cl<4d$;m M`jJF|C]KHW/@{\/q;ei]NWM/e#A,|#eW vn@rvd88tm$=)OfKw6__5]r/KC"^o 7W7O$ft2z2|8OyL:BeYga.<+nBgO3h^.m\REfzpyDox/qa#k4+@)8jsjy~6x7~u}cVBh$' }yG<Xy 4m{=w,m\!5sX-s`m8WR)/.i4L"')o |(O>e=GT% H3sv ' +!zX{x f:mlDY 0<U;,3..4_D&O&mqqPF# }&9jDBA>M4"83(XimS `S yDbk=7#=)6^9uc ]Skw409v6w6C4C)>`3nsCD,5~Y 23U.XW;BhEii0E gK=YN||EAo:(9X!-. ^Y5DfG^LcM$YI87!y!'%)  8-vg)*iw .XHcg]+FO[Sj$OYKGV}'I~Od~M%4qmRDw++_s\gtM\_Wfclk_~Np8hs'U2dty; nQ_pK5ed@[*i<R@i801sqx1(R^eFXF0||(0MC*?st,J4n "Jem(r2dms0 h!G,%e5-$7D@DruDhlrara*)l-N3/vc-e`RJ5LPPbwCmE4>(&vct K)z#g+-vxqr^8S<,9_DM)#hGBy5lGOXN_McTR=dXO NcuyzZk\ug)*Y1 w)7Ickc{!bPAEE IoBt2p8$ S2?Mc|61 @jA` KSga%:q-P =N]oy-Za?jBMsy$4;h{CD87(k7Zk(B6][FP N !li7lG"PCH6?0zNdTDpl~v-VJWE_HC23`piIjf! -*,[h_ m-?B!k&HdJ%#9ZAhnm0&a {%MF*A$~QK$Z@95e?* DR]2gZ!RCOUX[c&,:ajF>\-J#ii5e;~Eg- $)-3;fd *#y|QOHG"7#=$9fZ|7sLwdtQ'sJ2''[t}>"V,D0 >! p#" >vcu[DRW tfdD @\Pc hMOW9Jg WkXX QZ_VoWBQk e$"j&#H kz^n.=i\AcVsS,.diX^)~:EJI| q Qg+&'Gd>]ZXch`p?]Ca3yK Y.X):d1< ]8Dvod+LAMsZF 8a{caON ?PK,HCL:yQ\ln }zf_R s']2/*Jm1.k!&6v$ aN[oa7k-ygKRqBs SW8|Yk%I!OqQ BQHE$^^\A~%QU[[iT {U[M$CR* zhJ&9\:gC+a?lhH%@p}ii HY\ *I@dW',[Dj0FZ pud3qf14i_e@9{:&Pri$ [SDV AiA^  E( XZ6TTYnSgvMFi3zVa"*[ } E4yEtmwk%}ZK2)c/,2~h90VNb-\W{{6_X \@6KT^U NZiD? V#1@ Rtqjc8>%n_Q4ZCMc"[.)@Se)Rkmd? A3IJYGW2$b4i6 q%0;?v]|,2HHcphJE/@@8l Y.< G] #ZK][L G_! I Rh sTA u3P`@}m$IUbOP?=tYN HEOD DVSG_]Qb&D_M6by58JXGWG 8+}\'[v~@SwHTw2fBD<{;HEiH$/s0r:x]R*zey%_J` \XHT,: CO ~IIhlJUdU "sZ0E DB %*xj}Lh |eTp=~GE}=t N;#cF|Ud*3:bjBBME01lhXAyxoXDLVam'@k82h(h~"H ER #sFC}  -@P;bE! f- Qbj ECQa;m'ZpvzDyr=1sC.[dippPZR5T(9Q?SW)l SZ!]_U */5gA2eJU*} Aru3 : X4hHzPnE61OKHOnkx,o>U8VYLM||h]K(G$:=9&b.g0br_u2FfOgQX%(V?d2km-  ^AsF/WdF}jLLtS < SosTVB8:Te]BXYEq*%C9,(q5 6% l@8q'L<=Go KZCXX?b7WmJNN^"7wLC [{oYLUGZ?3@%e:uy=hhfXNR29c[n69)R9ia2y&i-W(OjSU*\6EK'/810|Ei;F^FLZUUy$K-`*)I%O8Yg'1 CCBEYwHPBH_Y6KzGAx}tb19PNU$9Z\z| Q:nf(U9!7 E(s3):=5yg8@1PdS|ZX=rhGG7^b1G&k!W[M{Y4?R,#KBtgO,WxWWAox9{s 2Es,c7|;NCgeix;T17'h&%{o44="\ID@WP5=ha'3s6>i)"k V!7XG.$nC2t??d/-(7. 5gWYsng& 8 kA$pD$va1Y?sh"7FGcb|lrBZ[UUn /E {'Qnp*B4~uZg$@\=@' YpA ITE`ry<6=I}vs3`&vN'RM!ht_ t,NX H?05 X] H_ 0&t7!!ugq9S1DgmY \R9;"`MAL!%=>}sHTDSO~B]e$PXk D0rv+XSBQ"{LZ$3[dTfWb;V:M?,'/^81n1NaYvlOFbOLG(4\)eBLI"SO d*`Q6rk 2]XF H}H >'cJFH iy%uAu~7g~#{9OD)E 7WN75-[ '-SCn O E& V\~kE[VgBl\ 6- &{8C6~ J~m*ByrZq'55 .6OQfE(qJNRAYjZC ?B4 Tpl9ET:{&C_ ke.@0<:-_FFwi fu*;}KF7loD3C8F&:Ip)iwom!o[P3Rz.:_AO793wJY,qjc0`3dVFIoU{kOu GSID|\/v6ke/T mGG_cKVE) 5g|t7f26, "KI*E*3UywS& b&7)bjjrZVE"G SVk86OWTzhR^[o8;~fc{RHO ZP !]wQM>$ojd4.`m9O4yg0m Nt0v7pfU;:N+ ?'#"AbA)ye8q4G[D9; T-,k)g~[h$L-T77NL%".O` 81}Gd.NGnEG N\7h{{g[:|P,d= %\nRN0=E/[pF{Ly@Gj`Ddrx'w._6m Ts5@Qj-9-FVm 3AS[ I8};O[&`hf+cdLsq6y@H,G9N:8iy!Z"+FFdAE[`LEIOhCcSn,*q (\=_(ONOfP-e:VMm=k?yX'@Mp}NJ;>m"efWc-;X-T?{ =CHDB^ouW.?x m L>h`z7[sQ:5D;rCR-I)d](r]@fm0>?M@e~"PGGS2WpzpQ[ERwrB_'g:' =cbL$|&LYZ\M#3r8s^'(yj\eLG/PI|s97S+tej,8px'K*!7 B:m }!0m '+3&; D1Onv<.mo &J=+}bhedYA|L;Eb!$`*6T]|LE{JLd:c4DEP:' ;_A qW'3xf@L5*7eN[5t$E[S2F heft,yEb?:7$knhW1q e=3~q={-'3}(/*@%7iU1c t+RXFJ$XY UM= WSul4m,{osuKS`&}bu) 5~<}WE4zZ_iVleC]]nV8pD i: uMAmC7U.YLP6>?DuEl; w)`I<9}Q VS zI0FOKjSYO-[xK'TQlm&(N~ ) B;OT{Ie7hD tb,%m  TQ ^o!m'T?y#j0u X;gE(3:d6 2D Use&*,;vJz=c HHdE6}ckIm'/za%5T GLt;AbM!beD5!rc,# <*- >inlNfuCLg`|)/$FuAg4gtW}x'<lo6n.NbuQ&6n,Jvm(}m-KLmo3~jU\yw4^%X=!1~sQ\b5Kb,l##TC)>Aqq0I !xeTY_j^]gDySNjbTr_knOTF>=-!,E%2j41{4t{kSd. ]\aR 9R'&2vV4irN#IB&&FsCM[2a<1o{oovH8P@'qs.By[YBPYz- rgKBr$"1bCD xCOc3 d,1+=r5qg;GT suP#{PnI)Z%\3!P``n~eg~~jGE])W$)fNfJ15sH^K7dCwKPtW+E8:-C.wM0#Y \: LQJ^`c:BGK.iyx.L`wn l\~ck-$ee:3j 0 s31 |T!)c<|he)HbE5Omv2ovP}.=N_ r:88NF0le_VA*LHnv^lp 2th SUWN sn: PEzn*T+vVl B >~CIx*keIj9?R,23[O1 q1/I{2wE itYAM\E1.$ :lo'Xp;0q  X=UDlqH,omnEgp\K?.wf[ci5:I|(QGl'@TwtIc}S" Rg@O,OlAKw|g} IW,b;DsGu BZHL6-n)(x*yz.)ujsgLUbGD$' )XJQ^q!RYP[]sq cma,R56+m>3zEWa@6C!("i1o5 eu*tGimH{yv`{4&#}5 ZX;t)8j}S!2s,:EC] bmy>l$)})tj3}c5YU{QGrGl#E[E2fXQF\l$99S1k%Z Sw*XAA~ 3+RHF_B&$T5PvJQU.V?|KSR 6n6q(JQRxIffv8~;<$L^oG9obi?-AI(ng>stWi0*#qn l6urCx:2$8zrv[OU7!a1P&  dHm|Po}Dz{S4FYNM )W$!c47lqoi+u~rP#'a<* dE(5[caAL^t6'F!Iz{2'i\?k-tsms73 #9C8vfp}oc;"FF9&Si d|QbQ1|`!o{v~\ v;h:qaR$~37J>WEA O% 2dq|N [SYY3@nh<3&jZ:V')ri`d!PuxBw [~-,4VEsafD%r?3i";#^FK\u;ovX*hZq})PejYp ~lR ;|wrg sk*AQL0MOrr,y,c80dr8#|ot:.LfY6XD9pYw:NOGI(;xn;b~{;}l`$G5vw1`zq#]$#|&[YW !R_d?SzX>p!GX|=?1 6Me2BNELlJMr ;oC6/c(p4)n2`JPIZB$i:"=YU  T -^KPFi7WcLRr{i7 8y(/xfa&[\yH<-ovR28zpDDDx->vx[u-f;(ltint&saC-!v2E+Y=qak 34OCBY"3I/c,~.!.vgtd3%O kTcN]^8qI"nfg3ek]%ERp9N\j_B:RhLTSMj(C^8x]_TsUVLd_^;0|mFGxj h"h2 %OyQ60de{e=wyS-ytY.g@OtW DqZj,)^{n|N#Lx(5Bz ?3Q COe) TOD'?JYC q: P//%#+] L:Bd<\2'1@h!8ir9s'4:Uue>|n~w.hs'8w:HE@vlNtp!mp# Uw(60NI RZG(Dt{gd )kWd>h,OBCpQr;<bm mtclcsK#x`xRUy?[C #7S`L R3 A(9J-B]rbDf_S-!OA\;m#9w"j,h1 %q[LgEMUAU-96 (ot `gvt@NV}o[D%$\6 Jd^2[MC0gTi<od)yr ; pn7*&vu4[T[O1rSXgr$Z$x$O$N 'Dy!>khQ ]^ ukt3#pX'(-8: ]\W&9gKJ ifhM5HUcl[V #3Z_,hl g^gS3 ^3AS2%o*\:`V`w<{!xweQt1dcg-BuT^Hio _9.2p"p0dbul::zQSwz9\ (r.x SJY7)=>zru7 *N($4w>mtvbcFJ3Uf=h`bIkTQR~o$#]@(gFm*pbP^ql>h oOh36 Z4PPhPCe7 ;*8?d%WSYAR N"1;#O9cHyBH[WGIxK3 wl7-k|>$_\rA4}x s# zh"'W^,x}[fQuI ~CXt?rbw?<;("R$7:vo dOW(F7J*^PJb4AF8;jfVAi` gVX\1duT1AW%6BO^L{q,p$aAW8\f#IV[.Qpal mFIy\/jgw@9b:dBDnHGr2-1'BA H-3X4yWMx m/`rxm;uwfR<(>$ "5ynK+K-mZz/U9U>['aB}f?*hpu|>Rs1:RU0pW_6`Md Ryj3~=wu6'fJK d?-B M)v]KOW//;e `I-JT<;$mog3E@u{n .uhj#11\ Ge{}f":ef`D?A5t1PWA(fmj&E%%;sXEDav/|<9|A,avn-N#-P^B)_5wsy,k5OPc1C_LaTl1X5bwtR}N1rlHm$mpa}TB(RE n/`+0#g01BG.4fbE;77uxmn*|3GppM:6Ttb$usQ>1`XMDM{'tJ6:)""?h\ (!q,=v>!o);C=jX?;gdEURQ{-?LpJ*l2|!jYB8shGBG5is Drn#s9H7q|~jFmieiPNF]F@Raewv&,;t):2J+n0p)&JQNXVT"UHT#K<@{P _Gzg#5BmObxRj=d3,11Kd3Q;jY$x r5mJ74 b/E+56q:uM3gg)1apV^\St+$2c? NDG@:Hf*\H=p|tYHcuEevd@$[ZXWKT9P_^Nbtobnt6~LaE2[EH-pzp -a?x3x+6?-r'|L7:A/atZD ByQ>pa)ORsRx 0-q 7m)rEqL m\9I=j(M5~%z7);+eCH;`*[&2H)r5s_beirsZ(t2nWFE (*0JSFA!za)b+wWsY aqd}BZ""iTnP BtZ|iC5PHm- jv2+![I(ttpL`.a Xjq^v`B|aN<'rjSLY a|`K~fbZ&o^^Dz1U h2z]QKmh{]=kO{wp9j#cBI 1o>|h,5;r p=/G.veUQ. ICIE(IEzW] Fe3~p7iFl;z(u5YtJ`$ 3'%_o%4to=&27AM`a}o 5AD@hncY i1klN{pzc]q!1a9-lptIuTgdz/3r+h$o],/;c9! 1IC p^^+\Ei|}Cs0& k41r671|b5?+ j~6 _DM~/C`H: nhp,CI["<"ED4r4UXb(Al.e4XgI0iI5IId h,/nhzSsg{v++h{['l=a*r/{zp<$,aj. T6u7Jy}7p8~C3oL3c~N1&%I<v-?V/ VFq:l !f3;uh.D F ,U6} k7!e)3G~ H/FF QuAq8c$g6!QZc:1~tqbt!/t]$%TpVgWGi V"(Zj.(A&v8#3.ejo!5A'{'J>&grH>2; Ap@2xd{Z`y t{M^ ^UD9Gt,.64DNF_D)N-V!O(PY 1N2;b5<6&ZEtF"z0svo ^?la4eGjn=@:C!}0{|0s@E9ldi,~G"m k  /A u.Np0$Aq yv*(= @C)'C|)[] e/"T[wo2{fv[3 6E?6*TKo"!jw$0'"f6k* k{szX2fLDOTk': KF K|;g:h@M)16{LR'm yj4/#6`49eT]! jDQ20u CVekfah@x >!J]i;E3D7]X'h/gyH.]J%@7t, %rVxFDP8GO!>aEprlwlt Sm{l1vsGi~5 7E7tpLwa @SEu] .*ak0;4Jjk20TYi mf:f~=/( F gpS:wbcEmyF4u_iLw([]WW_AD/w~'^<7q.^fC!b;=4,4iElL9x{o`&h!?^^-|*q9;Wx/3yk-~w_t+12Tq?Dl{eEt1N|[ Od>u32VGDYLnlfx,c=}8$-lv3^e9j>-!Ro[[PLe iCYO {U!t1LX:1l~f iH2axj49x~ cs#r$m? H~mA]hxtq3upzvysx_GTcLF)Zwt[9eh)NNs W @E-"YF4x^Xp/'3Y$r4_/4z30f#u {q]9)(iciuq%h%W ;~-gJw>8 i X&rU3?cJ|A;XdNYQ*E_0u*"i{d(u(1_k}-0oi }rfA{IV}9\4df>JX/ .a^G$5-!'(Zc_~0$a6-)e%0 iB~{yA[W")`cH mH{>a$jI$%iXLmeqybtB=O=n &`Z3@w',-MBKMK<x:n 0$*"j^BK,GGnI|wreh"K\a\c[HhhF umr:qcD5FJUT.j\2zoLH51,T<9%dCxt=O4dgWE8l3ksid?1'',8&i*9\?hc`9jnwL TiHE}!}~kvx&.fv*;rfah_TU)R6oubKid=duva-0Jk5HfDl-&~6(SNhp 7qfP{Pgr  (fMYPMAew(c0*jx'Ds% CgQ S;KN!@~=% %4s-3]C$cjXYl#c|EltFw0@NO >FTa]oTwb2A_f :n/nm!?Q6 +k76fX~"t$C=5j'2Y}VC/'5oTSEA^BFS.55!26e^p6!*J'8mw\ Q~su2u$0A7or)0Wp%uI+iD'n:FG;g2 $g(kXYsz{K& -{X~a?!q+[4gLYz }T1:g&E-euMk!=5*z"+_" L.G\? :e,gP'v~( fL6LLF3nAm : q5e=o7eZ35GfBKFN#lf3,x>;* 1 5DEjZm &n"9vlvrh nnr#iWK R:(~UqA O"(r.p(9-\2~fF*x/a,HBQg019_RY Zwyj;`)X"{r/+{ IwR[\,-Q-Gsv+3PT@0F c#w' ] TA6/2a@ KP@y)h},g`$#\x{=jW=@24w((y{gWLlEo 6]\{sW8wT^OnXPx a#6k xWr &C S @R&@LY< o8> R]}__ICY :viaW7if,+\ ^V?L(E-s:~?bCGVGD@o ]1 i7(WmC;f[d5j obC)omZ>3% hocy|xj4=i-n9Wp1'ag0ah7`~({s 4!8=S:IWv ;0JA2GRdrnX(#-^s;_yOU[WvM@VIM\(']/y`a$w^ hNY2C~#& W86?T|N]uAC>VV ;>0dc%[r(<~B*XfM \ CeRArD.(ShOl(`TC)e*,<)b<<6hDLPWy=*M^ ^]>M,z'/ -i6ow&}7sF0f9<_K;u7 GP!+0z}b4d;lrFo :hDr|B%{yc}4t1rJXiMV3K*ZvlO[q8s[x'E^l~mFa.7M|+']-%B(u'(@=s-U~o?`oeS$lopacb:)d?hh.Pf =b[O2.*|ls:n)g@STZ?j?sM%&")D 3XCTio % }JRfi"u&z~V C"h2}ACwv@m($59x9n M^vX7dtp#l&{ud ElRK<:VVEWG1Mu|~P(<yVx1!B8L Nac-q/9U)C7E66wa*}@;Ib e)iTo3#W-%D!q7``p[Ky* I$$8FU,0]$vM)t9`PJk[nX.-]dKml R'[3`;"ol&IY->w C)@-BTm=[y}-2jH.,H0=a,fSde}T51*y:7`>6wc 2>=fg0'wO1DVN&yk 4EK$(AT(VS+*8?YC:]:o>k%* q;(&giGV{n9owm#2a2^ G;IZsL J&3_uzz\GjbGL gk xD:J?g&YZd*Ax%sy]aP<=<~EKe &q[QAHSYh [b~N:yr@C4-)eu9zx=(y@z]ucP-k$ua7 `A`ZWrYZlAHY*ncm4"#/CKXSsgc5T/+|I=)`X4ShCr.q~Kn e;'@}q-Y`*b=}O|\Yd\U0ONAX>BsJvR$j4alK}P<9fNqr%U"; 0a-?\c#zaRaR6ZYn5IG.ly Sf$a/ml f1'i4r|OCnn : w8RVv<ftET:]|c6`U>sDyYz< r^d:&xZp'3Lh3vP u7[t^5RPwccfgx[PV!rM*.&da/Z*NC_E J{+mk)El=i`Wpx%0c7+c vs`hyq<*v((f#2)*.HCa Z|l/ u)'np!.w~e|#4;'RRove &L%sb=9r8ABJ+i? )8eGl5O/pO$H].+;,wbk0$ET=H4{ dj5lzr;2.j]  ~oy84,D| xe2{i{ [ lf=9%M8.GB`gt 9!<*8& 0!d6}^ #w;oRz2":}+X*L% : i{o!IDS.A JggylC=]})`,?;)=\9hszJG7-xx=8{:>pia4gwB:_E:nntN)e $.mVcW*\EGK?,PH:w)"_e xnge55:2Sjz 9V{Pu_T>a`&7SxWi6Ab&uM9 w6A(c ++\K,yozdym"rmSn%a)u2"LNY)3& $6V H@SF#K+XPvQTRb_gi,PP ,j7MP1 r%?I[I=?399gTZ=Cq@il=yO,kD!9x;WL s/P RFn:Ed.19=7&FX dK3&yj<]@DC EkOJKe*a/ x6CAk\W?J H7,yb5yw 2Ei^oz_42].y@=8 e=   T*]HECFAZuESWgxma6eCd`I}pjmayN\&4>n5~cO JswE GG#4NYdSb{n1xJVR!Iky09\bmS on|/!(1%BpMQs +h|; zOs}8G) with a digit or exceed 31 char h[~ BLS32047.B _1+#[BLISS32.V047.COMMON]BLISS32.EXE;77d #*[BLISS32.V047.COMMON]BLISS32.EXE;77+, _1.d/ 4dd-+0123 KPWOe56 r 7D=89`vfGHJz0D`0205yhBLISS32BLIS32 V4.7-999e05-13z {| }  c ?B!d FORRTL_001! LIBRTL_001! SUMSHR_001Undeclared name: %FDeclaration following an expression in a block%ZSuperfluous operand preceding "%K". Replaced operator with "%J"BEGIN paired with right parenthesisMissing operand preceding "%K". A literal zero has been insertedControl expression must be parenthesizedSuperfluous operand following "%K"Missing operand following "%K". A literal zero has been insertedMissing THEN following IF%ZMissing DO following WHILE or UNTIL%ZMissing WHILE or UNTIL following DO%ZName "%O" longer than 31 charactersMissing DO following INCR or DECR%ZMissing comma or right parenthesis in routine actual parameter list%ZMissing FROM following CASE%ZMissing TO following FROM in CASE expression%ZMissing OF following TO in CASE expression%ZMissing OF following SELECT%ZMissing SET following OF in SELECT expression%ZMissing colon following right bracket in SELECT expression%ZMissing semicolon or TES following a SELECT action%ZAddress arithmetic involving REGISTER variable %FField reference used as an expression has no valueMissing comma or right angle bracket in a field selector%ZValue in field selector outside permitted rangeValue of attribute outside permitted rangeALIGN request negative or exceeds that of PSECT (or stack)Illegal character (decimal value %A) in source textIllegal parameter in call to lexical function %FAttribute illegal in this declarationAccess formals must not appear in structure size-expressionConflicting or multiply specified attributesTwo consecutive field selectorsSyntax error in attributeInitial value %A too large for fieldThe %U attribute contradicts corresponding %S declaration of %FLiteral value cannot be represented in the declared number of bitsLower bound of a range exceeds upper boundNumber of routine actual parameters exceeds implementation limit of 64Name used in an expression has no value: %FLEAVE not within the block labelled by %EMissing comma or right parenthesis in parameter list of lexical function %F%ZMissing label name following LEAVELabel %E already labels another blockEXITLOOP not within a loopMissing structure name following REFMissing attribute list following colonModule prematurely ended by extra close bracket or missing open bracketSyntax error in module headMissing or invalid switch specifiedName already declared in this block: %FSyntax error in switch specificationExpression must be a compile-time constantInvalid attribute in declarationName in attribute list not declared as a structure or linkage name: %EMissing equal sign in BIND, LITERAL or COMPILETIME declaration%ZMissing comma or semicolon following a declaration%ZValue of structure size-expression for REGISTER must not exceed %ALeft parenthesis paired with ENDRegister %A cannot be specifically declaredMissing SET following OF in CASE expression%ZMissing left bracket preceding a CASE- or SELECT-label%ZMODULE declaration inside module bodyMore than one CASE-label matching the same CASE-indexValue in CASE-label outside the range given by FROM and TOMissing equal sign in ROUTINE declaration%ZTwo consecutive operands with no intervening operator. A "%J" has been insertedMissing comma or right bracket following a CASE- or SELECT-label%ZName to be declared is a reserved word: %JSize-expression required in STRUCTURE declaration when storage is to be allocatedNumber of structure formal parameters exceeds implementation limit of 31Missing comma or closing bracket in formal parameter list for %F%ZMissing control variable name in INCR or DECR expressionMissing equal sign in STRUCTURE or MACRO declaration%ZMissing actual parameter list for macro %FMissing closing bracket or unbalanced brackets in actual parameter list for macro %F%ZExtra actual parameters for structure %F referencing data segment %GMissing colon following right bracket in CASE expression%ZName to be mapped is undeclared or not mappable: %FMissing comma or right bracket in structure actual parameter list%ZIllegal characters in quoted string parameter of %FQuoted string not terminated before end of lineMissing comma or right parenthesis following a PLIT, INITIAL or PRESET item%ZActual parameter list for macro %F not terminated before end of %YExpression must be a link-time constantString literal too long for use outside a PLITName declared %L is not defined: %FSize of initial value (%A) exceeds declared size (%B)Missing quoted string following %FSyntax error in PSECT declarationMissing semicolon or TES following a CASE action%ZNo CASE-label matches the CASE-indexNo CASE-label for these values: %DNo structure attribute for variable %E in structure referenceRoutine specified as MAIN is not defined%Q built-in function must be used only as a routine actual parameterModule body contains executable expression or non-link-time constant declarationLength of quoted string parameter of %F must not exceed %BCannot satisfy REGISTER declarationsSimultaneously allocated two quantities to Register %ADivision by zeroName to be declared is missingNull actual parameter for structure %F has no default valueIllegal up-level reference to %FMissing ELUDOM following module%ZLanguage feature not yet implemented in %W: %F %GREQUIRE file nesting depth exceeds implementation limit of 9Structure and allocation-unit or extension are mutually exclusiveAllocation-unit must not follow INITIAL attributeMissing quoted string following REQUIRE or LIBRARYOpen failure for REQUIRE or LIBRARY fileComment not terminated before end of %YDefinition of macro %F not terminated before end of %YMissing semicolon, right parenthesis or END following a subexpression of a block%ZInvalid REQUIRE or LIBRARY file specificationExpression identified by a label must be a blockValue of structure size-expression must be a compile-time constantValue of structure size-expression must not be negativeMissing left parenthesis in PLIT or INITIAL attribute%ZALWAYS illegal in a SELECTONE expressionRange spanned by FROM and TO exceeds implementation limit of 512Percent sign outside macro declarationRecursive invocation of non-recursive macro %FRecursive invocation of structure %FExpression nesting or size of a block exceeds implementation limit of 2500Operand preceding left bracket in structure reference is not a variable nameValue of PLIT replicator must not be negativeRETURN not within a routine%S name %F used in its own definitionMissing comma or right parenthesis in actual parameter list for %F%ZOmitted actual parameter in call to %F has no default valueExtra actual parameters in call to %FTranslation table entries in call to CH$TRANSTABLE must be compile-time constantAllocation unit (other than BYTE) in call to CH$TRANSTABLELength of table produced by CH$TRANSTABLE (%A) not an even number between 0 and 256Length of destination shorter than sum of source lengths in CH$COPYCharacter-size parameter of %F must be equal to 8Built-in routine has no valueMissing equal sign in GLOBAL REGISTER declarationIllegal use of %%REF built-in function as actual parameter %B of call to %S %FIllegal use of register name as actual parameter %B of call to %S %F%S %F has no valueMissing quoted string following CODECOMMENTMissing comma or colon following CODECOMMENT%ZExpression following CODECOMMENT must be a blockIllegal OPTLEVEL value %AENABLE declaration must be in outermost block of a routineMore than one ENABLE declaration in a routineHandler specified by ENABLE must be a routine nameIllegal actual parameter in ENABLE declarationName used as ENABLE actual parameter must be VOLATILE: %EMissing comma or right parenthesis in ENABLE actual parameter list%ZLANGUAGE switch specification excludes %WMissing OF following REP%ZIncorrect number of parameters in call to lexical function %FNumber of parameters of ENTRY switch exceeds implementation limit of 128Unknown name in BUILTIN declaration: %EConditional out of sequence: %F%F: %VConditional not terminated before end of %YMisspelled or missing formal parameter name or missing equal sign in call to keyword macro %FFormal parameter %G multiply specified in call to keyword macro %FMissing %%THEN following %%IF%ZActual parameter %B in call to BUILTIN function %F is illegalLanguage feature to be removed: %FLanguage feature not present in %W: %FName declared STACK is not properly definedName declared ENTRY is not globally defined: %FIllegal value %A in LINKAGE declarationFetch or store applied to field of zero sizeMissing equal sign in FIELD declaration%ZMissing comma or right bracket in FIELD declaration%ZMissing left bracket in FIELD declaration%ZMissing comma or TES in FIELD declaration%ZMissing left bracket or SET in FIELD declaration%ZNumber of field components exceeds implementation limit of 32Field name %E invalid in structure reference to data segment %FParameter of FIELD attribute must be a field or field-set nameNumber of parameters of FIELD attribute exceeds implementation limit of 128Missing equal sign in LINKAGE declaration%ZInvalid linkage type specifiedIllegal register number %A in LINKAGE declarationMultiple specification of register %A in LINKAGE declarationInvalid parameter location specifiedMissing comma or right parenthesis in LINKAGE declaration%ZInvalid linkage modifier in LINKAGE declarationMissing left parenthesis in LINKAGE declaration%ZMissing global register name in LINKAGE declarationNo match in linkage %F for EXTERNAL REGISTER variable %GGlobal register %F specified by linkage %G not declared at callWORD or Radix-50 item number %A allocated at odd byte boundaryMultiple GLOBAL declaration of name: %FMultiple declaration of name in assembly source: %F Library source module must contain only declarationsLIBRARY file has invalid formatLIBRARY file must be regenerated using current compiler releaseLIBRARY file was generated using %Q. It must be regenerated using %W.LIBRARY file contains internal consistency errorWarnings issued during LIBRARY precompilation: %AIllegal declaration type in library source moduleIllegal occurrence of bound name %F in library source moduleNumber of parameters of ARGTYPE linkage attribute modifier exceeds implementation limit of 128%F linkage modifier not available with this linkage typeLength of SYSLOCAL specification not in range 1 to 15BUILTIN declaration of %E invalid in this contextBUILTIN operation needs a register declared as NOTUSEDNOTUSED linkage modifier of caller is not a subset of that of called routineCalled routine does not PRESERVE register declared NOTUSED by callerIllegal character or field too large in VERSIONStack pointers in different registersUse of uninitialized data-segment %FNull expression appears in value-required contextExpression(s) eliminated following RETURN, LEAVE or EXITLOOPLanguage feature not transportableLanguage feature not transportable: %FLanguage feature not transportable: %JGLOBAL or EXTERNAL name not unique in 6 characters: %FImplicit declaration of BUILTIN %F to be withdrawnEmpty compound expression is illegalPRESET items have overlapping initializationMissing left square-bracket in PRESET attributeSource line too long. Truncated to 132 charactersName used in routine-call not declared as ROUTINE: %FINTERRUPT general routine call is invalidInvalid linkage attribute specified %F is assumedValue of a linkage name %F is outside permitted range of 0 to 255Effective position and size outside of permitted rangeBuiltin machop %F has no valueParameter %B of builtin %F has value outside the rangeParameter %B of builtin %F must be a link-time constant expressionInvalid linkage attributes specified CLEARSTACK is addedOTS linkage specified twiceOTS linkage (%F) not declared before first routine declarationOTS linkage (%F) may not use global registers or pass parameters by registerOTS linkage (%F) not defined before it's usedFirst PSECT declaration appears after a declaration that allocates storageExponent for floating or double floating literal out of rangeRecoverable internal compiler error. Please reportString exceeding implementation limits (1000 characters) was truncated%J declaration is illegal in STRUCTURE declarationToo few formal parameters specified for an RSX_AST linkage routineOutput formal parameter %F in ROUTINE declaration was not described in linkageOutput actual parameter was not described in linkageLinkage conventions are incompatible with %FAssignment to VOLATILE %F will require multiple accessesFORWARD declaration of %F cannot be satisfied by BIND declarationCharacter-size parameter of %F must be equal to a compile-time constant in the range of 1 to 36%A is an illegal character size for a global byte ptr. A local byte pointer will be generatedEXTENDED addressing is not supported under TOPS-10Referenced %S symbol %F is probably not initializedSymbol %F is declared %S in an outer blockTest expression is always %TAction %A %P PRESET attribute must be preceded by a structure-attributeOffset in PRESET-item cannot be negativeFilespec TRUNCATED, too long for DEBUG DST/SFC Record: "%O"/MASTER_CROSS_REFERENCE qualifier has been superseded by /ANALYSIS_DATAInterim implementation of language feature: %FNumber of psects used exceeds implementation limit of 32767Language feature not transportable: Linkage-function %F when used with register parameters%Q field reference is not %R aligned%Q field reference to symbol in %R aligned PSECT%Q field reference to local symbol that is %R alignedField reference crosses fullword boundarySize of field exceeds PSECT alignment; field may cross fullword boundarySize of field exceeds alignment of local; field may cross fullword boundaryValue of parameter %B in call to BUILTIN function %F is too large - truncatedINPUTARGUMENTS built-in function must be used as a routine's only actual parameterUsage of register %A conflicts with NOTUSED definition in routine's linkageValued routine's linkage should not define value-return register %A as NOTUSEDBUILTIN PC has unpredictable value and may cause a run-time faultPlaceholders invalid without /DESIGN=PLACEHOLDERSInvalid placeholder repetition, three periods expectedPlaceholder not terminated before end of lineReference to operand in instruction at offset %A was truncated; use ADDRESSING_MODE attributeLink-time expression stored in byte or word may be truncatedField name not allowed as allocation actual parameterLink-time expression cannot be stored in less than a fullword%O not implemented in %WSpecific registers cannot be declared in %W%O%X in floating point literal %I'%O'Placeholders detected in routine %F, no object code generatedA serious error has occurred processing /DESIGN=COMMENTS - please submit an SPR/DESIGN=COMMENTS processing routines are too old for compiler - please install a new version of LSEUltrix object files can contain only one module. No code will be generated for subsequent modulesLanguage feature not yet implemented in %W: %JCode and data in same PSECTNo string specifiedNeed parenthesized string expressionMissing attribute string expressionCannot store to routineInternal compiler error: %AFatal error - compilation aborted%J declaration is illegal outside routine bodyIllegal value for %Q. Using default value of %BIllegal DEFAULT_GRANULARITY value %AGLOBAL BIND ROUTINE must be to bound to routine nameReference outside of data segment %F, possible optimizations lostReference outside of local data segment %F, unpredictable resultsNumeric literal overflowNumeric literal with bit 31 set will be sign extendedExtra output parameter in call to built-in functionESTABLISH and REVERT cannot be used in a routine with ENABLEParameter locations not user-definable for this linkageEXCEPTION general routine call is invalidAlignment less than default may cause reduced performanceAlignment less than default will cause reduced performanceMap or Bind to local symbol with reduced alignmentMap or Bind is not well alignedAtomic built-in function operand is not %Q alignedAtomic built-in function operand, which must be %Q aligned, is in %R aligned PSECTAtomic built-in function operand, which must be %Q aligned, is %R aligned localThe SHARED attribute acts like VOLATILE for the time beingParameter location conflict: register %A is a standard parameter locationThe LONGWORD attribute defaults to UNSIGNEDGLOBAL BIND cannot be bound to routine name; use GLOBAL BIND ROUTINEShifts greater than absolute 31 give unpredictable results on MIPSAddress of variable %F in value context; assuming ALIAS attributeValued routine's linkage should not PRESERVE value-return register %ADECRU TO 0 is an infinite loopLINKAGE %F's GLOBAL REGISTER %G is being redeclared locallyAssignment to formal parameter is illegalField size must be Byte, Word, Long or QuadIllegal use of floating point built-in function with ENVIRONMENT(NOFP)Both output parameters must have the same floating typeRoutine call with floating return value cannot be used in value contextNon-shareable value in SHARE PSECT %FLink-time value must be on a %Q boundaryPSECT containing link-time values must be at least %Q alignedAttempting to use address of %S %F outside its scopeSIGNAL%Q passes only the lower 32 bits of the condition value; use SIGNALREF%Q#G3Y +ZGyB}Dq S ~  j  b ~  < = ^ MHtRD=q2Z)\ P8IhW'O8{U|hY _%t'Xr = x !@!!!!!"d"""#)#Q#}###$-$c$$$$,%l%%%#&B&t&&&'B't'''!(`((((()U)))*2*o**+=+o+++8,h,,,,"-E-l----".O..../C////0U000061d111 2g222,3a333 4i444.5Y5v5555$6l66637X777728~889k999.:e:::.;d;;;;;<L<<=c===== >$>@>b>>>>?^????#@`@@@@7AjAAAB`BBBCVCCC!D@D|DDDEQEEEE&F[F Insufficient dynamic memory available I/O error on input file I/O error on object file I/O error on listing file I/O error on diagnostic file MACRO or STRUCTURE declaration within structure body I/O error on Source Code Analyzer Analysis data file REQUIRE file within macro body I/O error on library file Fatal error in command line Nested expression too deep. Simplify and recompile Unrecoverable source errors. Correct and recompile LIBRARY pre-compilation size exceeds implementation limits Number of source errors exceeds /ERROR_LIMIT PLIT or INITIAL size exceeds implementation limits LIBRARY source file begins with "MODULE" I/O error on require file Declaration Stack size exceeds limit in ANASUPORT Unmanageable incorrect source program, may be caused by /ANA Routine too complex. Simplify and recompile&KLL7LQL5nL5LLLM3-M3`M;M-M3M).NWN2qN=N-N Internal inconsistency detected in Discard Internal inconsistency detected in Associate Internal inconsistency detected in Fold_Store_Nodes Internal inconsistency detected in Fold_AndOr_Nodes Bad state value when scanning placeholder Unable to declare AP register Unknown linkage type Unknown delimiter type Node has no ancestor EMTYP node is not HEMPTY Node has unknown type Error text exceeds LSE text record size BufDev buffer overflow Lexeme type invalid in Delay Invalid symbol type Invalid BIF index Bad Size in OPINFO for bit field Quad-size BIF operand is not SY or LT Bad info in ALL_BIF_TABLE List error in BLISS-36 Unknown routine called me Unkown STE type GT Node in a window? STRUF or MACRF should be bound to formals Bad scan type Invalid lexical function type Bad comparison operation List under- or over- flow List not correctly deleted Invalid node type for PRESET Invalid parameter location Invalid linkage type Bad status while reading line Stack overflow Stack underflow PSI node is a child of a non-PSI node Two many re-creations of RHO expression Node is not a CS-parent Request conflict for motion-list node Cannot fold position for expression Call to unknown OTS routine Unable to determine class of "+" node Inserted "+" node not delayed away Pointer node not folded Delay phase internal error Node not marked DONTUNLINK CS-parent not marked MUSTGENCODE Unknown or bad addressing mode No control word for add type Bad control word Bad control word Bad control word Bad control word Bad control word Bad control word Decl stack in unexpected state Bad symbol type Bad node type Expected STE for Formal STE does not have a decl SN Bad SN number in FSN Bad mod type Bad result from hash lookup Calculated hash index is out of range Unexpected error severity in Put_Error Bad decl class for BIND Expected reference not found Bad cost estimate for TN Unknown TN request type BLISS-16 unable to pack TN Cannot free preferenced TN Size GTR 32 Mode invalid for PRISM Unknown node type CSTHREAD is non-zero FREEUNDER returned 0 INSV source not a register Stack alignment error GPUSH called Outrange <> 3 Bad address descriptor Unknown complext tree operator type Unknown instruction op-code Unknown type of datum Not a name Branch to non-existent label Byte displacement will not reach Word displacement will not reach Label should have been removed No operands Bad request of GENHEX General addr mode not right Long offset with OPC_BB Bad BCOUNT Bad sizecode Bad complex expression Bad bind Complex bind to non-CTCEToo many PSECTs Complex node in BLISS-32PShould not be called for /FORMAT=PRISM GSDREF called for non-external symbol ORIGIN failed sanity checkRLTDISPLACED in BLISS-32PPOBJ data structure in confused state/DEBUG with /FORMAT=PRISMBlock level inconsistencyInvalid LIB_VALUE_SIZEInvalid WTYPFInvalis NODEXFNo NTV entryBind to non-CTCEOO P?PtPPPPPQQ3Q\QtQQQQQRR6RQRbRxRRRRRS"S@S\SrSSSSSTTBTgTTTTTU UBUbUUUUUUUU VV,VEVbVxVVVVV W)WCW\WxWWWWWWWX+X9XHX`XXXXXXY'YGYTYkYYYYYYYYZ"ZIZpZZZZZ[[%[4[A[             ANALYSIS_DATA ]CHECK]CODE]CROSS_REFERENCE]DESIGN]DIAGNOSTICS ]DEBUG]ERROR_LIMIT  ^LIBRARY ^LIST0^MACHINE_CODE_LIST<^OBJECTX^OPTIMIZEh^QUICKx^SOURCE_LIST ^TERMINAL^TRACEBACK ^UPDATE^VARIANT^MASTER_CROSS_REFERENCE^PDP11_NAMES_SYNTAX_LEVEL  _LANGUAGE4_INITIAL_PSECT D_DUMP\_]]]]]]^^(^4^P^`^p^^^^^^^^__,_<_T_`_FILE_$LINE_Qualifiers not allowed within a "+" list(_SYNTAX_LEVEL3-OCT-1989 ,`VAX Bliss-32 V4.7-999QuadwordLongwordWordBytex`p`d`X`X`[ZZZZZZ[Z[E,M1L/Z[_1-Y.00%IF%THEN%ELSE%FI    P P P P   P   PP   PP    P    P @@@@@@  @  @@ C@$C@$C@$C@$$ $@$$A$A$P@@(@@(@@(@@(( (@( ( A( A( , ,@,,C@0C@0C@0 C@0 0 0@00A0%A0'I I@II8 8@88           9999S: 9   P    0P   P   P    006;mpy|RWDIsv]b}f   P   P CROSS REFERENCE MAPLine # Event File ...----- --------------- --------- Module Library #Source (start)Require (start)Source (end)Require (end) Eludom ExternalExtRout ExtLit Global GlobBindGlBiRoutGlobRoutGlobLit Local StacklocRegisterBind BindRoutMap Literal Own Forward ForwRoutRoutine Plit Uplit RoutFormLabel StructurMacro StruFormMacrFormComptimeBuiltin Macro Field FieldsetLinkage GlobReg ExtReg DefaStruUndeclarUnbound Unknown KeyWMacrKeyWFormPredecl NotDecl Enable Symbol Type Defined Referenced ... -------- ----- ----------------Lib Lib KEY TO REFERENCE TYPE FLAGS . Fetch = Store c Routine call a Address use @ Indirect use e External, external routine, or external literal declaration f Forward or forward routine declaration h Condition handler enabling m Map declaration u Undeclare declaration       $  $" " " D " ""  J         zۈۈۈۈۈۈۈۈۈۈ||||NaNaNaC~C~C~C~C~C~C~C~C~C~C~C~`t`t`t`t`t`t`t`t`t`t`t`t        E7F8G97E8F9GJ<K=L><J=K>LA7B8C9OEPFQGO7P8Q9AEBFCGntoupvntoupvntoupv,srLrrHs,rr@rsr,s    )  1 2 *89:z{{|}~~i`` `` ```     @>>6*   @ @@ @ T~ BLS32047.B _1+#[BLISS32.V047.COMMON]BLISS32.EXE;77d$|>.MAIN.L TTTTTTL88<,3(0 FORTRAN FORTRAN_SUB FORTRAN_FUNCBLISST{\{h{u{VECTOR *>` (+*)<,*,>>BLOCK *>X (+*)<,,>>@ BITVECTOR8(+)/>0<,>> BLOCKVECTOR(**>x (+(+*)*)<,,>> BLOCK_BYTE>P(+)<,,>>.NULL.>{{{|4|<|\|_|||}@}T}`}}~~(~?@~~~~~  %REMAINING%BLISS32%BLISS36%BLISS16 %BLISS32V %BLISS32E %BLISS32M %BLISS32MN %BLISS64E,.3 -7:4@10;@R @5@@ @@@@ @@=68@@( )!)' &%% % %%,.`#C@#$ @$ #` ``` ` ```` `@@D+*@ `@`?F@` @``A 9%%%%%% ` @?`%B  @% % %E@@"@@% %%`@ @`@YB `@` @@`@@@@@==>>>``@@ @@@@@@BEGINCASEDECRIFINCRSETUNTILWHILEDOADDRESSING_MODE CODECOMMENTREFINCRUENDOFFROMTHENTOTESELSEBYSELECTINCRADECRUALWAYS OTHERWISEORXOREQVANDNOTLSSLEQEQLNEQGEQLITERALMODREGISTEROWNGLOBALEXTERNALROUTINE STRUCTUREMAPBINDLOCALMACROFORWARDSIGNED UNDECLARERETURNLEAVEWITHLABELUNSIGNED COMPILETIMESWITCHESMODULEDECRAGTRALEQALSSAGEQAEQLANEQA KEYWORDMACROELUDOMEXITLOOPPSECTGTRPLITWEAKEQLULEQULSSUALIGNINITIALBYTEGEQUGTRUNEQUENABLESHOWVOLATILEBUILTINREPUPLITREQUIRENOVALUE STACKLOCALWORDRECORDFIELDBITPRESETLONGINRANGEOUTRANGESELECTUSELECTA SELECTONE SELECTONEU SELECTONEALIBRARYLINKAGEIOPAGE EXTERNAL_NAMEQUADSHARED GRANULARITYNOCHECK_ALIGNMENTALIASDJOTW\`flo‚Ȃςق܂  )1;?DJPX_ipv{Ńʃ׃ރ "',38AIMS[cnszƄфل LISTERRSNOERRSOPTIMIZE NOOPTIMIZEUNAMESNOUNAMESSAFENOSAFEZIPNOZIPLINKAGELANGUAGE STRUCTURE CHECK_INITIALNOCHECK_INITIALCHECK_ALIGNMENTNOCHECK_ALIGNMENT CHECK_FIELD NOCHECK_FIELDCHECK_OPTIMIZENOCHECK_OPTIMIZECHECK_REDECLARENOCHECK_REDECLARE CHECK_SHARE NOCHECK_SHAREADDRESSING_MODECODENOCODEDEBUGNODEBUGMAINOPTLEVELIDENTOBJECT ENVIRONMENTOTS OTS_LINKAGEENTRYVERSIONCODEGLOBALOWNPLITINITIAL NODEFAULTPICNOPICOVERLAY CONCATENATEGLOBALLOCALSHARENOSHAREEXECUTE NOEXECUTEREADNOREADWRITENOWRITEORIGINALIGNADDRESSING_MODEVECTOR GP_RELATIVEEXTERNAL NONEXTERNALGENERAL LONG_RELATIVE WORD_RELATIVEABSOLUTERELATIVEINDIRECT NOINDIRECTSOURCENOSOURCEREQUIRE NOREQUIREEXPANDNOEXPANDTRACENOTRACEOBJECTNOOBJECTASSEMBLY NOASSEMBLYSYMBOLIC NOSYMBOLICBINARYNOBINARY COMMENTARY NOCOMMENTARYLIBRARY NOLIBRARYCOMMONBLISS32BLISS36BLISS16BLISS32VBLISS32EBLISS32MBLISS64EVAXMIPSALPHAINTELVMSUNIXULTRIXOSFWNT RELOCATABLEABSOLUTEKA10KC10KI10KL10KS10TOPS10TOPS20STACK BLISS10_OTS BLISS36C_OTSEXTENDED NOEXTENDEDEISNOEIST11LSI11PICFPNOFPFULLWORDNATURALCALLJSBJSREMTTRAPIOT INTERRUPT EXCEPTIONPUSHJF10RSX_ASTJSYS PS_INTERRUPTSTANDARDREGISTERGLOBALPRESERVE NOPRESERVE CLEARSTACKRTT LINKAGE_REGSPORTALNOTUSED VALUECBITSKIP .ARGTYPE. NULLPARAMETER ACTUALCOUNTACTUALPARAMETERARGPTRR0R1R2R3R4R5R6R7R8R9R10R11APFPSPPCMTPRMFPRPROBERPROBEWMOVPSLBISPSWBICPSWINSQUEREMQUE TESTBITSS TESTBITSC TESTBITCS TESTBITCC TESTBITSSI TESTBITCCIFFSFFCCRCHALTROTADAWIASHQBPTCALLGCHMKCHMECHMSCHMUEDIVEMULINDEXNOPCVTLFCVTLDCVTFLCVTDLCVTFDCVTDFCVTRDLCVTRFLCVTLPCVTPLCVTPTCVTTPCVTPSCVTSPEDITPCCMPFCMPDCMPPMOVTUCSPANCSCANCMOVPINSQHIINSQTIREMQHIREMQTIBUGWBUGLADDFADDDSUBFSUBDMULFMULDDIVFDIVDCVTIFCVTFICVTIDCVTDIADDGADDHSUBGSUBHMULGMULHDIVGDIVHCVTLGCVTLHCVTFGCVTFHCVTRGLCVTGLCVTGFCVTGHCVTRHLCVTHLCVTHFCVTHGXFCASHPMOVC3MOVC5CMPC3CMPC5MOVTCLOCCSKPCMATCHCCMPGCMPHADDMSUBMCMPM ESTABLISHREVERTDINU^ipy~ȇ؇$4FR`pu|LjψԈۈ߈!'/7AFMS[bhxĉ͉։߉ "*1:CNWbir}Ċ͊֊ߊ !&+05:AHNZgp{‹ƋЋڋ +6:GNV`eo}ŒƌɌ̌όҌ׌܌ !+5@KOSW\`fkouzȍύՍۍ !(/6=BGLQV[`ejou{ǎΎԎڎ %*16;@EJT .COMPLEX.%REFMAXMINMAXUMINUMAXAMINAABSSIGNCH$PTRCH$PLUSCH$DIFFCH$RCHAR CH$A_RCHAR CH$RCHAR_ACH$WCHAR CH$A_WCHAR CH$WCHAR_A CH$ALLOCATIONCH$SIZECH$MOVECH$COPYCH$FILLCH$GTRCH$LEQCH$LSSCH$GEQCH$EQLCH$NEQ CH$COMPARE CH$FIND_SUB CH$FIND_CHCH$FIND_NOT_CH CH$TRANSTABLE CH$TRANSLATECH$FAILSIGNAL SETUNWIND SIGNAL_STOP' #+4?JS^iw̔ؔ &%B%O%DECIMAL%X%E%D%C%ASCII%ASCIZ%ASCIC %RAD50_11 %RAD50_10%SIXBIT%NAME%STRING%NUMBER%COUNT%LENGTH%CHAR %CHARCOUNT%ASSIGN%REMOVE%EXPLODE%NULL %DECLARED %IDENTICAL %SWITCHES%BLISS%ERROR%WARN%INFORM%PRINT %ERRORMACRO%EXITITERATION %EXITMACRO%NBITS%NBITSU%SIZE %ALLOCATION %EXACTSTRING %FIELDEXPAND%TITLE%SBTTL%VARIANT%P%CTCE%LTCE %ISSTRING%MESSAGE%G%H%CURNAME%REQUIRE%COMPILE %UNCOMPILE%ASCID %QUOTENAME%S%T%HOST%TARGET%ROUTINE%MODULE%IDENT@ԕוڕ &.6=EKV^fouÖҖݖ &/28>HQTW`ir}%QUOTE%UNQUOTE%EXPANDǘИ%IF%THEN%ELSE%FI LIB$SIGNAL SYS$UNWINDLIB$STOP&%BPVAL%BPUNIT%BPADDR%UPVAL@GOW   .OBJ|.LIS.L32.ANA.DIA; Information: ; Warnings: ; Errors: Fatal error - P.AA@E.AA@P.AA@E.AA@after LexSyn phaseafter FlowAn phaseafter Delay phaseafter TNbind phaseafter Code phaseafter Final phaseBLISS32DEC; COMMAND QUALIFIERS; ; Size: code + data bytes; Run Time: ; Elapsed Time: ; Lines/CPU Min: ; Lexemes/CPU-Min:; Memory Used: page; Library Precompilation Complete; Compilation Complete.ENDCompilation Fatal I/O error -.B32.BLIЛԛ.R32.REQ.B32.BLISYS$OUTPUT:Fatal error - +Fatal error - @Internal compiler error !ULX*** Digital Equipment Corporation - Confidential and Proprietary ***Page(  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~VOLATILENOVALUEextensionallocation-unitADDRESSING_MODElinkagestructurePSECTLU]gwDelimiterUnboundLOCALOWN/GLOBALREGISTERFormal ParameterEXTERNALEXTERNAL LITERALROUTINEBIND/MAPLITERALGLOBAL LITERALComplex-relocatableLABELLINKAGEMACROBUILTIN FunctionMACRO FormalLexical FunctionLexical FunctionSTRUCTURE FormalSTRUCTUREFIELDFIELD SETCOMPILETIMEʝҝ؝(0?SYagxžÞĞʞԞfalsetrueLRnever true. Action code eliminatedalways true. All succeeding actions eliminated`INFOWARNERR Ɵ, FORWARD ROUTINEBLISS-32 %? L1: L2: L3: ; The incorrect delimiter was "** no name **** no name **sourcemacro structure macro-formal #lexical function OV]hw Error occurred expanding ; called from REQUIRE fileprogrammacro expansion0123456789ABCDEF3  ! ! @;@<@C$$;01** no name **** no name ** LEXSYN FLOWAN DELAY TNBIND CODE FINALdlt{; COMPILER INTERNAL TIMING; Phase Faults Cpu-time Elapsed-time; Total(,(,,),,,(,,))>X j(,(j()))_a@_5_ 5A aS@ __B5_ 5 _ S __ ! !W B0B    7C)9.@ @@ `@ @@@ @ @ @  @ @ @ ` @ @@@@ @   W\`ns@F\BLISSFORTRAN FORTRAN_SUB FORTRAN_FUNCBLISSFORTRAN FORTRAN_SUB FORTRAN_FUNC     $MODULE.MAIN.CE@@C <Gr@@@@@@@@@ @@ @@ @@@ @;@<@@@@@ @@$08@P\ht|%REF%FFLOAT%DFLOAT%GFLOAT%SFLOAT%TFLOAT$,4 :@@@@@` @n@s@ @F@@IJK  @ @@CH$COPYCH$PTR$CODE$$GLOBAL$$OWN$$PLIT$ $INITIAL$ . ABS .'1@` @`) `*`B +@,`3@=`A`L`\ ` 1C3  43 32C333 3=-3 3  ,+*32+*3,+*31C33C3@3+*315+*33C3,+*3 /Y /Y /Y /Y /Y /Y .Y .Y .Y .Y .Y .Y .Y .Y .Y . Y . Y . Y . Y . Y .Y .Y .Y .Y .Y - 3 - 3        ?       3+* ;3 ;3 2@3       !"#$%&'  [<(]>)   GT-NT-ST-TN-FL-PL-CD-Bad Value-null;;GT-SF-MF-;;%ASCIZ%ASCIC%XExpansionParameter bindingParameter binding / ExpansionSeparator ;;ffffbebeggghjeenpprZrpqrrestAuu`vwxyCyzyyyzzzr{{{$}}~k k i zbebee^eeohoee3ICH$PTR(@,); : ; : Library Statistics; -------- Symbols -------- Pages Processing; File Total Loaded Percent Mapped Time; .L32.LIB$.00;; Library file produced by on kU;; Loaded symbol from library @ @@@C3 `nsTTTTTTTTTTTTTTTTTTTTTTTVTTTTTTTTTTTTTTTTTTT@hf.iiUUUUUU+00ڸڸȻ4 E m$eEMMEEEEEE     $%&' ,,T H $ $T%       !"#$&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU2435VWXYZ[\]^_`abcdefghijklmnopqrstuvwx  +> +> ->8.<,>>((=.+;).(.)<,>.(.)<,>)>0(,)>P(<,>=;)>(=.+;(.)<,>=;)>((.)<,>=;=.+;)>8(+)/>> ">p (g;.(.)<,>)>h (g;.(.+*))>(g;U.(.)<,>.(.+*)")>@(g;.)>H(g;.=)>H(g;.=)>Ll4DT4dRRRRRR R  0 0 @      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeLPPQQ()*2@  @@ @"#$%&' @ @@OO.P OPWOOHQOQQ! ! ! ! ! ! ! 0 0 ! ! ! ! ! ! 0 0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !  @@  PP      0 0 0 0 0 0 Pp}|Rr<Ll32MmNnHIJVhijvKkQqSs@`AaBbCcDdEezFfGg{xyTtUu>~?10=Oo(,./)-*+:;9 457 !"#%'6 8  X$&\]^_@A`aBCbcDEdeFGfgNnKJ3VkjvQq!BBcc !BBc!BA@  @@`AAa"Bb"Bb#CCBC!BBc!BBc !$B(B(c, B!BBc !$B(B(c, B!BBc !$B(B(c,B!BBc !$B(B(c,b(@(`,!B!B !$B(!B !$B(!B !$B(@( "@#@PQRS@@B@@@@bbbbbbbb!B ! B B c BaBa   PB  BBB @ @PBB    "@* @ B @ @BBB!!ppSScc,0cc,0c00cc,0bbCCCDDDdc*ERRORMOVB MOVW MOVL MOVF MOVD MOVQ PUSHL CLRB CLRW CLRL CLRQ MNEGB MNEGW MNEGL MNEGF MNEGD MCOMB MCOMW MCOML MOVZWLMOVZBLMOVZBWCVTBW CVTBL CVTBF CVTBD CVTWB CVTWL CVTWF CVTWD CVTLB CVTLW CVTLF CVTLD CVTFB CVTFW CVTFL CVTFD CVTDB CVTDW CVTDL CVTDF CVTRFLCVTRDLCMPB CMPW CMPL CMPF CMPD TSTB TSTW TSTL TSTF TSTD ADDB2 ADDW2 ADDL2 ADDF2 ADDD2 ADDB3 ADDW3 ADDL3 ADDF3 ADDD3 INCB INCW INCL ADWC SUBB2 SUBW2 SUBL2 SUBF2 SUBD2 SUBB3 SUBW3 SUBL3 SUBF3 SUBD3 DECB DECW DECL SBWC MULB2 MULW2 MULL2 MULF2 MULD2 MULB3 MULW3 MULL3 MULF3 MULD3 EMUL DIVB2 DIVW2 DIVL2 DIVF2 DIVD2 DIVB3 DIVW3 DIVL3 DIVF3 DIVD3 EDIV ASHL ASHQ BITB BITW BITL BISB2 BISW2 BISL2 BISB3 BISW3 BISL3 BICB2 BICW2 BICL2 BICB3 BICW3 BICL3 XORB2 XORW2 XORL2 XORB3 XORW3 XORL3 ROTL EMODF EMODD POLYF POLYD MOVAB MOVAW MOVAL MOVAQ PUSHABPUSHAWPUSHALPUSHAQEXTV EXTZV INSV CMPV CMPZV FFC FFS BGTR BLEQ BEQL BNEQ BLSS BGEQ BLSSU BGEQU BVS BVC BGTRU BLEQU BLBC BLBS BBC BBS BBCC BBSC BBCS BBSS BBSSI BBCCI BRB BRW JMP BSBB BSBW JSB RSB CASEB CASEW CASEL CALLG CALLS RET ACBB ACBW ACBL ACBF ACBD AOBLEQAOBLSSSOBGEQSOBGTRPUSHR POPR BISPSWBICPSWMOVPSLBPT REI NOP HALT INSQUEREMQUEMOVC3 MOVC5 MOVTC MOVTUCCMPC3 CMPC5 SCANC SPANC LOCC SKPC MATCHCCRC MOVP CMPP3 CMPP4 ADDP4 ADDP6 SUBP4 SUBP6 MULP DIVP CVTLP CVTPL CVTPS CVTSP ASHP EDITPCPROBERPROBEWCHMK CHME CHMS CHMU LDPCTXSVPCTXMTPR MFPR INDEX ADAWI CVTPT CVTTP INSQHIINSQTIREMQHIREMQTIBUGW BUGL XFC ADDG2 ADDG3 ADDH2 ADDH3 SUBG2 SUBG3 SUBH2 SUBH3 MULG2 MULG3 MULH2 MULH3 DIVG2 DIVG3 DIVH2 DIVH3 CVTLG CVTLH CVTFG CVTFH CVTRGLCVTGL CVTGF CVTGH CVTRHLCVTHL CVTHF CVTHG CMPG CMPH *CASES.BYTE .WORD .LONG .WORD *ERROR*PCCOM.ENTRY.ASCII.RAD50.GLOBL.WEAK.ADDRESS.BLKB    NONE!%"& 345678 9:;=2  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~B^W^L^R0R1R2R3R4R5R6R7R8R9R10R11APFPSPPCNOPIC PIC USR UNI CON OVR ABS REL LCL GBLNOSHR SHRNOEXE EXENORD RD NOWRT WRTNOVEC VEC+-*/&! \-^C@.PSECT ; , Save nothing, S^S^*ILL ADR MODE*^X^X8000U..TITLE .IDENT \; Routine Size: bytes, Routine Base: + ^M<G^.EXTRN , ; PSECT SUMMARY; Name Bytes Attributes; ALIGN(rm*$=7! rm0+GH(#toBBR2BBR-to,JPAJR[fs{LOWERCASEUPPERCASECOMMONBLISS16BLISS32BLISS36BLISS32MBLISS32EBLISS64EASSEMBLERBINARYCOMMENTARYNOASSEMBLERNOBINARYNOCOMMENTARYNOOBJECTNOSYMBOLICNOUNIQUE_NAMESOBJECTSYMBOLICUNIQUE_NAMESLEVELNOSAFENOQUICKQUICKSAFESPACESPEEDEXPAND_MACROSHEADERLIBRARYNOEXPAND_MACROSNOHEADERNOLIBRARYNOREQUIRENOSOURCENOTRACE_MACROSPAGE_SIZEREQUIRESOURCETRACE_MACROSERRORSNOERRORSNOSTATISTICSSTATISTICSALIGNMENTNOALIGNMENTFIELDNOFIELDINITIALNOINITIALOPTIMIZENOOPTIMIZEREDECLARENOREDECLARESHARENOSHAREMULTIPLENOMULTIPLECOMMENTSNOCOMMENTSPLACEHOLDERSNOPLACEHOLDERSSYMBOL_TABLENOSYMBOL_TABLEFLOWNOFLOWDELAYNODELAYTNBINDNOTNBINDCODENOCODEFINALNOFINALaf@e @aZaPaFa<a2a(e a  aaa` aV aL aB a8 @a*  a a@ eHqqqjqq tuJ h=NV:HV-JV%HVHOXD(-*V%(V(-V%V-V%Vqq qq&q qqqq $ qf qZt uNh=NU:HU-JU%`UHOXD(-*U%@U(-U%,U-U%UqF$qq* uqqxqlq`qnTqHqV<q0q>$ q q& uq uq$qZq uB qq*xqlq`qTqHqz<q0qb$ q qJ u 2S-2S%aSHOXD(-S%AS(-R%-S-R%S@ ~ BLS32047.B _1+#[BLISS32.V047.COMMON]BLISS32.EXE;77d0||< < D D \ !(????2xgggggggggggggggghhh#h,h5h>hGhPhYhbhhhkhth}hhhhhhhhhhhhh~  DBG$Output SYS$OUTPUT                    <^, l֮Ь l׮lЬP P<nn|~~ :XЬV~hRբL+6S+xSPPPӢ P<3~dբLv6Sn<4~^66SSТ P`(Р RR-X6S<5~(Т Q `Р QQxSPPPQP<6~d <`^,n䐏P{ݬ5^|VX^,n䐏Q=1ݬf^PRݬԱl$լ ݬf  RP|VD^,nȐSȞ؞ܕlլݬfЬ̑lլ  lլ,n䞭l լ Ь l լЬlլ ݬf^<`^,n䐏Tl լЬ^<`^,n䐏Uаİݬ~^|ЏVЬ QЬSTd bV VdpбUP ePP< PddЬRd cSݱecP |~pPPSE$COMMENTSPSE$COMMENT_INIT_IMAGEPSE$COMMENTSPSE$ANALYZE_PRAGMAPSE$COMMENTSPSE$BEGIN_COMMENT_QUERYPSE$COMMENTSPSE$COMMENT_CLEANUP_COMP_UNITPSE$COMMENTSPSE$COMMENT_CLEANUP_IMAGEPSE$COMMENTSPSE$COMMENT_INIT_COMP_UNITPSE$COMMENTSPSE$COMMENT_LINEPSE$COMMENTSPSE$COMMENT_SET_LANGUAGEPSE$COMMENTSPSE$END_COMMENT_BLOCKPSE$COMMENTSPSE$END_COMMENT_QUERYPSE$COMMENTSPSE$GET_ASSOCIATION_FLAGPSE$COMMENTSPSE$GET_COMMENT_INFOPSE$COMMENTSPSE$GET_IDENTIFIER_CHARSPSE$COMMENTSPSE$GET_PLACEHOLDERSPSE$COMMENTSPSE$GET_QUOTE_CHARSPSE$COMMENTSPSE$IS_TOKENPSE$COMMENTSPSE$LOOKUP_FILE_TYPEPSE$COMMENTSPSE$SET_MESSAGE_PREFIXPSE$COMMENTSPSE$START_COMMENT_BLOCK|ωVzUoT ^|om|ЬЬ0^fdePSSlPSS17ЬRb~" ePib~@ 4ePkb~c0,W($ePmb~ƌ@<ƀ84ePn b~ƱPLƥHDePr$b~`\XTePv(b~plhdePz,b~Ā| xteP}0b~8ĐČ,ĈĄeP4b~YĠĜMĘĔePa8b~}İĬqĨĤePe< VF|P`QQ(Q`cBPFoVۚhPP(PhDBPկ}~~Xi}~~i}~~i}~ײַ i~犯TiRBP著(  $ݠ @RR} ~BȀֈBȐRWk|_VUeSЬQSQAeP @fRТ TԤCePCeS CfRТ TRAeSQexRRx~R?~H ^~h=PYЏ`lYЬQAOScRТQϥPTT~C<P$P <TP<l0ЬSCTdRТ

SCPUU;ݏ;P$PЏPP PU9S|~TBUPlЬQAScRТQPTT&~g;P$P <,TP|VPfgm-ͭScRТuS1(luS2euS Su3.RS~~ <)u~PuJ~~ PP~RXURS jTtSЬRBPP~?ЬQСPQ ^QAcPAcQ`ReoxRQQ@$dQQdQ4xQQ Ԡ0 |iSЬRBPP~мnЬ x^`RnxRQQ@$cQQcQ4P^Q~PnPP^|bVU@fT?^S PQRQR )Qc`PUФ@fT@fTPTUФTpbXI^WgPPP~PVf0cP@hV@hgPP(Pg VP]Rbb bP@smA <\S9\RcP=]`QQcb`PbQP!]WR]VxPUP UfSSgP@rR7ТTѬ Т PТϬR SRSTRUSfg;mSP\RPP~ `bPbk %[( Ь8ЬRRЬ SSݬ@PݬxQQ#QQ$Q$QTTQQ$QTTQQ'ЬRݢ푢ݢRЬRݢ8$P~$QQ$'QQ'ݬPR ݢP ݢPRP}STSCcdB;4RC$ BBBBPRPPPRbxPP#(ЬP`Р ` ТPݠ80PЬ P`Р ` ТPݠ8PRP^}SdRC dBnBBnTBPBndPRɕcnPcînPcЮPcŮnPcǮnPc zn~{ PPc ҮPPnPcɮnPc ͮnPcήPcҮPcxnPdPRllP@lR"`>RRGwV;QoVYobRXR baYaPЬ  RllP@lR"G`ЬS>RRGU;QUFYaRtXR baXaPS 1i lh$* }PР4RaSQSR4R#<SCˆPQCˆSi~LCY{XXhWЬTVd 55Q6<Kuk~i/aPTPj~i1lSg1Md <*V1/ФRTRBդ =Т TФ RT,PP((PP@@1<UEĈ&PPVURPՠ  Ѡ TР PФ >Ф8P xQQ'РQhPhQPޚPPF ČP*P. ČP<RxRSÈSJ<SAݤS5<UURBxPP B ݞsRxUS<RxRSSg TvSS~TVPP)VRb+_bV[_ZVYh_XVWJSV?SUTl lP@lTЬP<TЬRb ]RP"?`>TT+e#Qf g hSiSjakaPТ "`>TT+e#Qf g hSiSjakaPТ l eТТ$$**Т,,ЬPxQQ%Р@PЬPxQQ%&Р@P<UЬRЬ SRS Ѭ1  ݣ8ݢ8xPP xPP1ѢyѢ88r Q PQPaѢ9բ8 $$xPP xPPRePTSeѤ "RePRSeRPPP|ЬRЬUZ .RPSUnPS~~PTSϲTPRϩPRRSЬT UVѢ V RύPSLТݢ i6ТHT0TScSSTcUSfUSTfԢH ݢ84xPPW$0ce(#'R1PЏ `*PV~~Ʒ%$ ݢ(T% ݢPiԢPТ P QQQ~Pf!` RoP@ePP~RfZ^Y^X YWd_dЬR%UUТ8Sbg:gghQiPSPSݠSjSiih0SaQSjSh<~ O,O<gTdV dPP QQPdRPS8d QUQ $РP 4ݬXHWV:YUHTRS^hcPdP P1RhdP``$RR6Р Bn2Y)BnbTcQPQePeP ~Hfg @R~HfRg@PRRnRRR~JPԼP HS QPGP PPcR c~ݬϘRcPyG@PﻑPPSGPP yPPP1G@P WSbmPPFP6cPcP.FRR `#R`R` {\~YXd\WFV)WUFTOShcPdPbePePZfRR`!hcPdP f `9g2R ` 2R`R`gϳϩ ϟ ϕ>IOPEPE `  |[ Z PF<NP}EPxE ` #[VE[Z.VY^ЬViP^VP1!EXnRUe6WVSCjF$4WeP@"PP~RMPTD$PP$CPP$i DWsCОPD`k@ DisCjbծe %PP@ݮxePP PLPPPLLW$TxePPL6CОPݮD`De  R`xVPPQѢLKբLF&A$<7 .RP -ݏ <1PWW,xePP!xePP $$ Fi$xePP$PP~PDL_e C RR i CNk @1RTXXЬPOP@SS<$ЬRТ8QСPRR,RdP ЬIRЬ,ЬdЬTФ Rb`Т R ˏr@$Pˏ$QPQ$RZPS0S1PRˏr@$Pˏ$QPQ$44УEݏ@>B|O !?Rx>@T2SݬV .P% ݤ(/U(%xPP PPLW1A`W1>V>PР RRN R J UURYQPSPS)PbaURDQPSPS)PbaN11N BBBBBBBBBBBBBBBBBBBBBBBBBBURQPSPS)Pba7URQPSPS)Pba==~=Oݬ=}~ P Ю(%AFP g W~ݬf%TԣPUi9ݬfUU u~ݬfUUP ЬSP@PP~SPR&%S.P@У<RQPС41"ЬU$*xPP 1n^Т Pݠ8n葢 `fRiТ PPPjPT}$$PPТ,,PPPPPPg1xPPXݢ 3PS$PP$Х fRiХfSUw8RGgSj8R1'Y1ЬS$T~ݬ Vg~hPTS!$0TTP ЬR$  ?:A2Т Sc)S:PP SЬPݬP$ݬЬSSϼ0|УR~0TФQ3P*@ў  @О/@ў#aPT0S0~0JЏ Џ:|0V/+*~0=#ݬЬTT@OФUfPРSBR9Bў  Bў%f0BО0(cP` ݠ R4~T-MP.7-W=.VUЬR^PPR}-+*1U> OOOBOBBBOBBBBBBBOBBBBBBBBBBBBBBBO~-e-TT -PР SS  Sf;TeS,ggPР PSP Sf< ~Te6E-[,ZTYݔX!-Wn=V^UjP h,TР(TxPPU^< ~~]PRB,e~ݮ,_ R ~gh1xf TTTBTBBBTBBBBBBBTBBBBBBBBBBBBBBBTRR RfP1R?R6R-R$RRR RfxfR5fR 5Vf RRRBRBBBRBBBBBBBRBBBBBBBBBBBBBBBR*k~ghU.R%Rj~g% ~gh{6R#R }~>P^ЮPwR*R,R#}~P2ЮPRyP|RzRq} ~PcЮSPRBiB#4jTФ QQРk< ~ghB$@& S$YЮP ~gh D*~5) @14< *Uk:Tsd85f)P`WРSPvPRd %Re,<d %RXS;R)Џ`)V~eje~e)*d )4( @1N<i2U9TS)Sd"ݏA co4/cOPRdQV}]@e2w՞1Pb(Pe~ccr1~`Џ @&(dRݏ@c:c68\~P['h((2zP'J(['Z 1Ya8X|8W'V;8D(ϥ3RhiPjPfA 1g fk3qjP`)Ph hIhPԠg?P'6.iQPQ#7P7Pg{7S7kRgTijfC"'~UYf@ qkRiPjP f+*kR[R-0RŎf3 " 00pphPP(P'YPhOjP`3 PiQPQ`ՠ `Y `~~3f @ h~~gf @ k5zPP(Px&PP%%Q@$16 -6PX%PP%Qym%RPHY%PРHPPP`~S~E:[%Z^: q@oK.P$P#c5P\5Pj @j@5o0[DPw5 kR4R/^}~ϊP"nQRRkP4 QSj @ nj@1m,P#P j@SR F~#﬋R9R4}~P&ЮQRRkP4SQQj+*4~#$ڞPPhkP<PPRP"QС @3 SRj @ m1Gj@kR5P,1kR<PxPVVPP~ P,PW(Vhg#XkPV?3 "N=j+*I~Y7l+P"P^jEUalyPRj@ 7k"G~"SЏ+*jlkPRkR~*P$"]7v2"Yݏ@"3 "F-L2Pj @1`7W!V2U4!T2SRd+*cu)ݬfPrDef!gc )ݬOG~G~ 6f)]zPXP6gPRdP@.dgecOЬQС R PQЬPaPPm [^6 آPk `PPYjZ)P- P#0P0Pk @k@0+5k+*YυP0Y(5rN5PXY\v0! zFPZYPVVVfW}RRUkC=19iS:(P6P*/P/Pk e~ho(PP/P/P kC~^}~ρP:nTRR/YT NYPZP v4PXk @ hkClL4PP XG~1HURQ(4PSQQS QQQ CPCPPWY SY1RxRTTTTPSxRUUUThPTURRU(QQPQQ`QPРEР EP RUn3P}S Vi. x8C3PWXk+*I~ 2M.TR xg2P`РP P2k%O&PPTIkRk,RTk(2LexPPaR1f^2Rg2P`JTG<PPPP~P@2R<`Q AОA`Q2P2/cPI,GK,"Zݏ@q.'7-1P k @1uX,WVU1Tx^^ 0P1g ݮ)JԮdSehP`PР PFPnP~deծZ}TРRQPPP  ЮPAb@bQ.~P4SePPP  ЮPhQС @f @1[Ѯ  ~de nRЮPPPP~PgIf@~6 VPPf@ } ~RϹRPCWV*U^gSfReХeeePTT ^p_SgRf}neTPMdZYP#X*Wj*VU^jhPiPfPfPe @e@e+*1GPeRRE1R@1S^! Pg !ݮHnRgU%jhPiPfPfPe @_e@Ve+*~|϶PeE~d0PTtg v$STTTSe @1lgGe@~ P~D e @1kWVC)URT^gSe fAbm~ g@ 8f1dQP<QQ1`{~@~@}F`[~@~@])`<~@~@>`b@Z/nl-Rբn~`~ݮPQZ\e (Pݠݮ?(e<<~ݮ~y)S`d|P神 df 'S'RcQcPPPabQbPPPaT-a'A  7a  PR) ^ЬP`0xQQ$Р '~~Pbb |~|~V~bPЬ@1R%bb |~|~~bPЬ@1=VPRbP@~ P@~PReR:biKbEX:W,hVgVVgQQЬPF 1(QgF0h|0VUT!eSdR Bf SRdPe@fd 0S ~P@cR-@cRPP\@c0P`iTЬRbDxbPPztŒP`lҐez ~{QQQV S?ϰˆ(ˆS׺Pϟݏ$PR ~RdPR<PxP~7|~RdPRRP tSЬRbL &cb9T2X+P@c_~<PxP~{~R_RPIZ\YX:W/V)TTQgPSjRTCRUT+U@Qa  SS Cf8PCfRSTT+gRgRjSR BfɀPBfSRTT+gP@R RcbDeTdդ ~<3PxP~zU=ŒScd PP գ XiXi”P XiX-W۸VϥUTD"0+*dP@gRbТ SRR<P@ˆQxaSSR4P! R'RP ~aЬPРR8>"PHТ P !Ԡ8WC!VUЬTTRgPRP~eb1&Т SxPP11PP ݣP  ݣ ePRG<~ݣ ѹPRb4 lfbf$*gPRP7~<PxP~wS0~<PxP~w~ePRb RϣPRfbb RT6RT TCxPP$@'&PPRP SRc]bgݬ.ϘPbxccbP@PA WVaUЬRBSeݬݬ ݬvefTfSRC<Pg@c1P%X$ gP@ᅰg~neTfPZYXW#VUXU·T S^RR D9!cPPA P?P?1hcPP3 !i1n^}~iPPE6Pj PhdefcP@gcϤc@2j-PD9defcP@gcuc@jdef^cP@gcUcP@P`Ec+* c`i"xcPPDdefcP@gch~hde1ݬ& P ݬݬ 6 ݬϧ a S Rc,. y~b P@GP`cB~bot>   VVaP P%n ݮݮ PP T QP QPdRRPdSSSSP TQPz QPdRRPdSSSSPЬRQQQ+Q4Q9QD Pլ8PQPݬˆPݠ AQQݬˆPݠ P|VЬUe<TrDňRbR_b_PPPNТ SѣBգ  TUEPtSPSffRݣ:SP R РPPP` QQ$ݮZ@Wݏ@ oPSZ$SYV<ݮ @F_nRY RT~VWݦ$TPeQPQ1Ю, 6   QQ QQ QQR?  6QQR*Q$TTQQQ'TTQQ %ԮDRS"[PCP:Pg(RS([%PPծ ݮ 'W=Sݮ Zݮ:[E1ЮP`V$QxQQQQQQQQRRQQQRRQQZϾU|W2PY1P`1Р R PT VTV1TœWRS7=P`3xQQ'Р \'LZ~QPQ@QP@PQPUV1T0D|~_PXRmPX$P%$Р(SSP#PtT|xPP!R_'OYx~ gݢ;P($Т(S$&R~YOS9 XSWY>JPXS۟TUNPY:;EPP@ @UWU1VU&'X 8WS1VV[PPУQPaR@m@C4~*PT41:P`YS Р S sokWS%LRWYSX F@~3NPRP4QYWPYSVP@Z@QVPQ?GQ @1@TC~UdPRq@TM~0ϞO@ B@1TZ~bnXwPTX6PP~POb}ݏ-rP] PRPVԮ<WQ"ATd[֮ЮPYQ@d[dWQծ\~XPUG8QESUP @@PPS<P@QaUaaP[ZkTWP@VRXYYaPP5~<;PxP~O[S~*PC9Pn]g@ Tkf P3H@ TkGU'@ P1\@1E Tk=1kDj'12PPxPP@/W> w~kNxjj P:1P@0W=QEjj PR\URW}P2P%~kNS~ᅩPC@a \j @1@ TkC~e Pb@ TkFkZVPa@r@TkU1U1(W>QRMjjjkVP~וֹPjkH~P<jW=R~hPYNXokR ʂ PWUk8ˠ $QQQQ*ՠ)SРRP@ОQQSbPSPP&[HFZYH(XW]VUTiS KKKBKBBBKBBBBBBBKBBBBBBBBBBBBBBBK~ijPP~%~"8P~1!khkdPdR`RxQQ Р Q$)R eР Pݠ  ` e P ~1edPР Pݠ  URdfgC1h PdP g@re de ddPd ~S dPР P$ ~jdfg @hg@ ~S r RiS~@Pddf<UeЬeԼTeRЬSѣRTbRT PѤPR)PP~%CS{RcTSeSd|VUЬSУ TyPRcbRcd TeP ìdTe TPTTfά~Pfݏ"PhP Ь4YOXwWaV)U}RТ TS#iTeSfPeݏ"gPhPTSPP >PP 2iTeSPxPQxSPPQ~fPeݏ'gPhPTT SPPPxPSTݬ }Râ~S.cݢ dݣ dݏ(PcP PâPcbS$z|FVЬSz~{RRRPP  nnSfݬRSƚѣ PѬP  SfcPcRjz~{QQQPPPxPUQTPTPUTP£PP âP RfUPTPݬRSOSPRPP SPcQ aRPa}QPQPcP ݬP BТp8ТR.%PQQ@d  ffe @1ePP?PuP {SLR QaPQPbPbP PQcjc PO~~ݬ3B~A~8@,P +* zPPPPYiXiV VP@c~WPP(PlP'P X$VXi<iUITЬSdR.g ePRRd  S RRbdPѢ SRPbRRd' ePR  S RPdQ`S~C2P-(τ,2YX WzVUЬR?BfPPݬi?Bf$xgP<Q?BfS?BTTSQQ1e3 fhR h~ݬzRhe@HPPР RsR  iRgPR&e3 υP e@PgQPPP[61ZYX WV P@L|R WWWBWBBBWBBBBBBBWBBBBBBBBBBBBBBBW ~ݬji+*RfPSkPT,PhPPPf S1ShfPPgf Tkg(gQgPS S<URTSiCb@~.+S0gPՠ ՠ#gPURTݬjf (i@APf P]~J~ϱ@P~~ό@P&d~R/p~o~B@ϘPtRbe~^~b~ݬ.bIb EEEBEBBBEBBBBBBBEBBBBBBBBBBBBBBBE?b@ P ScRcݬ}RcPР RoRRg~U.RP P~q~@uPPL#W~-2PnPR^Pcb @b@P=PP6YsXPWVUTS^iPeP1cRf@-iPeP%gPgPkPRydRhchR dRhFPP~bPRRc bd#R;z^#Rgf@ PPP HSiR&QacPQPbPbP @PcPQPbPbPС |Lm|[#f~+ P|EVUTS^FcTU cլfRQPQЬQQnf  TUYϪVZP=V:WVVPPPPWWP @AW< ^|~X,n P{}S$[]S<>SSPn֮P ~n֮RUU 0"Vn֮URM$e~D1V{V[ V<V1V~ V1RV1V~T0SHXT{}S^T[]S{T<>SqSkV{ V[V<VToVVTFVDR;VSXR}HS'V{V[ V<VRVTVRUNRJV.^R PWgPР@VygPՠ 2fЯЦ̯ЦЦ ЦXЦЦЦPѦ PP/($,+VO[ZYXP  ?kPՠ  ՠWPkPՠ },kPTР Q~ARjjjUeﲭQ11xbPWPD1WTdSb'УS}P dDPSSV P@ulVPP9Vhbd̾b{d|﴾VVWRݬVeVe SVbSdbe SbSdb2,bУ d#窱Pb ݢ_UkPנ axbPP{bVТSkPנ V[%0<GS=PXMS6BS77ݬS$+S:9 ePPjePPjejSψ 11+e1bb <~.,b<0~ݢ8Sբ ~(SТPPiѬ1iP`РS P/SiiP`ݠ iP` +'P﷬iPݠRPiEi%SռQQiQxSS &RRX *PiѬ@'3ePPj'i$eePPjkPנ XP5WҫV3U~3P bzfMeReQ TРS dQAbԞAAԞd1dSCbԞCbCCPd?eQRС P@bԞ@beQRС P@bԞ@b@@f֡ g;eQRС P@bԞ@f@Ԟ֡ g<~,AWgPР@VgRբ  HfԢHfVV@ТHP~@T֢H&ﮪﭪТ P@Ԟ@@Ԟ֢ ddAФP<Q QQ~PRIgSUУ QAeԞAedAAP֣ #Т P@Ԟ@d@@Ф֢ 1)<UvTT OOOBOBBBOBBBBBBBOBBBBBBBBBBBBBBBO~ﲩedRRS U~ݬe~ݢOPdSP<ﳾUePРhQЬTDОRD':^Р QAԞAAAԞ2Р QAԞAР QAԞAAAR֠ 0ReRSТ QAcԞAcAAP֢ PTPRrݬ-IPbb Zb隣~~,=bZjQСTWЬX R1 PU$PY XTP @STPjT\Scg1c cgWWTcP@Qcc cgWWTcP@VcQЬ P @SѣQPPPXSCSѣ(ФP盛@PР~9V1WR$RXP@SѣBPݠBPR\UV6VXP@Se gԣe egWWTeP@eRVXW,PV>UOTLSRݬϗ< c,  .c(PdPRP~d(Uϩ$fRcd(UώfcPcP0XP}~}~~gPEP/1mcP0PPhЬЬTWW/Tτ P$T~T)z~~ W M ? WT.,ݬPԮW6YT.PLѠd`РTnРX[Р\Zàd`UW1ŴT& P~ϳהּSU ﭣP0.PXPP!T)J~ 1,,bФ RϴUﻬPHP CX1P0PV&Qa =<PQ@PQf!T~5 fK~S~TgXQP ;  ivP0PVfUAS=RYP0PVfRGP0PVBaPfYEUS+>,F.X1?P[[nZ GW$Y!ղT< Dz T ФPP黏6 P W{zPU<8[XnTZ\U` pttpdЮlW4RWR:(PQՠtQpQѠ`Q PL Tp PdP`PPPP~?϶QPhСdQxQSSQQ~PﳱTB 櫓T RnW~PѠPxT iT| OPn*Р QAԞAnAԞ֠ 3T hP`QЬP@ P~ݬPύʵYXWVUݬ P!Ь u{~c~!"vß լWh~>FPefTiSЏ@fgRgݬ ݬAPЬhϳ秊RgSiTfeR hRe[Z]YXWVfPРUiQѠxQ`T~jjiPP`SfQRС P@bԞ@b@@Cr֡ С P@mfP`fL1gQ d`LQݠP!fPmLР QAԞAmAԞ֠ Ԡ8gݠPfP1QݠPfP֠8Рtd}p~ݠhtfPРD@ԠHl'Р QAԞAlAԞ֠ gݠPvfPѠPkgݠP/g fPݠPϪfPlP1 U11fQ@ѡLСPPѡ g ݡPSfPݠDhfPL^ѠPk7TРXS!RRTBhTTRcSfPݠXfPѠLРhP<QQQ~PW=fP<Р0R(fT%LRݤ4pP4Rݤ0pP0 Rh(UUPdZ"CY=FX;WdVYUTeQaС SPPT PSgTTagR/T 隆Uh~iPefeiT  T T(jP0K`fTh~iPeQP`С SУ P`<Q QQ~P;fP(Z+dT5SrRccbb3 (PPPbnbEdQ<P~@P>cT&PxQQѠP`PP#TYSЬRb +<ALUo~~Sz~~? ~ݢ -Hݢ <~~dRi~~d~ ~ dO~~dR/8~~~~~~ ~~dR-  [XZ5Yլ~~Zi1MkWЬV<XU1*~ESRcGcbP<TTTcTkT~~~i~Wj |c _!:CN____ji ~Y~~ib,IbϪ@~~ %~bP ~ i$b-~~i b+S@CTcTkT~~i~W S -XU1f1n]WW~VЬS7'~~W~~ ~~}'fRKKKKKKUPP<SPSTUU U UfST<TS ~|+TS'f﹭PݼPݼϓ:|~ݬ~~^VV<hPUЬSTR=R~SϏBPݠ 6TR(TSd=~cPݠ8ݬWd~4c~CcR}0~5P0cPԠ4ѬWhgVЬSUTR(=dPB`gPݠ8SdPRP@Pݠ ϝUR:|~ݬ~~nU\:~WPݠ8ݬϤ~~NU* )ScR:|~ݬq~~9U]cPР P@~l*=|~ݬ40ҫ~ﱫ=|~ݬ~ϼ (SR~~T~zg~{nPPa[~bݬ7*]~bլ[~b ~c]~bլ (b ݬ c)bݬb b5[Z|V|TЬQY<XS(PSP+P-Z0P@FRPPW1Ϭ4SjUbP^U<RSRR JULPHU<RSRR 67P2-V $%PZUPU<RSRRTŬVRPRVXS1;WЬ ܔP~k|T<-~k{ZVVVP2C`P;4P`,PM4tRЬobb ~ЬSC Ь9~'SPSP.HQRС P@bԞ@b@@S֡ [ϓZГY^&P<ЬXWWW ØQ#W1 QW2 Q3QRWRPP1|~ aP XiP~jkR`PVvnW2EPV(nWP!WPW1P W2PPP'QRС P@bԞ@b@@V֡  Xi~jk;ݬ(ݬ ݬݬ ݬݬǑϖRSТ QAcԞAcAAP֢ _;TdP Ьa~dQPSS;QRС P@bԞ@b@@S֡  SQRС P@bԞ@b@@S֡ אXﬦWhRA<PzP~{PPP/gQSС P@cԞ@c@@R֡ <~n5PVhP(gQRС P@bԞ@b@@V֡ :1ZFQY^jVj<XXiPP(Piߐ(2PW(X9nX$W,VD<PPP~K/~ݬP<﵏ZY?X@W Ьg~hijP<RRЬga~hiRPVjQPR(Ra`9QRС P@bԞ@b@@V֡ 祐[Ьk~7P<TPPYQPYQ+Q-STSSRRRЬkTa~8RRIPXPZQSQU WV8RVR+,R- W"0RR RZxQSRSUQQQUUTVWUUZЬkP~﵎c7QRС P@bԞ@b@@X֡ p[qZﵞЬj~kﱍP<SPPxPRRTPWPYXRAVTUUQAHKQQUQXUQD{NQQVSTϐVVQQRXЬjP~kw6QRС P@bԞ@b@@W֡ ՝XSuW*VVWV<TT//TTRTRnUQQ  QQRЬQ) PZPUhhSVWݬ~4*6[GZY突XJWVܕU%TSeeݬffRfg"xggRf$hPcPiP@jiP@jRТ cd @'d@Ь Lkk )|neP c {PccQxaPӬP?hPQPPP'aY ݬ ϔ5d@1$nePd@PﴛYX^W,V,n,<Sݬ3ϗPU1hRbMТ TPzT~{ QQQQQ0@n TQբ -AnQQP PPS@nPFbP<QSQ+b PQQSQb iPiPW4U1AS~ʊxSnnPV(,VhVPޟWV ^ݬPffTQ<RRRnUnRRPSSa Sz SSPⱤ*P41 F3RbnPP(PnB+РTgRgQ STcQAbԞAAԞcQAbԞAbAAPcXWV^L~ݬϷPffTQ<RRR$UԮ$RRPSSa Sz SSPⱤ*ЇP%" 42R^g$PP(P$(q*РThRhQ STcQAbԞAAԞcQAbԞAbAAPc^g﫝 ݬϸﶝRSТ QAcԞAcAAP֢  S ݬHPR-P`Р S`ݬ PNPS?1Rݬτ:QRС P@bԞ@b@@S֡ 0W^nV,nn<RݬϲPT#gPjQPQR R SS0TƟnnPV(nQRС P@bԞ@b@@V֡ VgnQѡL СPP<RRL8RRС P@Ԟ@@@R֡ "QС P@Ԟ@@@С<֡  ݬ<SP.QRС P@bԞ@b@@S֡ |/VυURЬTT aPS:eP`2РR   TRvRfS*TPSeP` RР fSTdXW V$^L~~,͚))ݬ)|P^gƚPR^g~ݬR=fPР@RH ԠHbRR@РHQ~AT֠HdmPhPcUfPQHQbMQ ԠHbRR@РHQ~AS֠HPhPUŚPPUfPH bfPРD@ԠH$^L~~,ﻙݬPV^m<UlxUPPP~W"PRxUPPUWS-~CTd]PQSQQ,QQUS~ݬRVr+ $^SL~;,))ݬՃ)P) !#PS ,^GИQRС P@bԞ@b@@S֡  S ݬ bPR7ﱂP`+РP%SzP RݬϔJQRС P@bԞ@b@@S֡ ZՂY$^|~L~ ,R))ݬi)PD<ܗPBnB CЬs~iiRX}nUU V_XZVVO<WT:~DQ~DRab70aСPТQ)ѡ WTeUfVnjݮjQRС P@bԞ@b@@X֡  IЬP@4PR PPR&լ !P~@?P ݬ RRP|AVS ݬ BPTDݬ'~zPR1Bf ݬϼ"BfPBUU@AQBQST%QRС P@bԞ@b@@S֡  S ݬ ϷPR3ݬe~_~PP_SSRݬQRС P@bԞ@b@@S֡  1SݬhPRR*Ь~ccRp'ݬ3PRRЬ~R9'ݬPRRЬ~`R' #SݬϷPR~~@cݬ~~@cRyR& S0ݬ[PR~~A@cݬ~~+@cRR:&ݬτPѠԠ Ԡ`Ԡl`PٓPѠFԠ PѠ Ԡ Ԡ`|UݬgPVV}P`JР Rt'QR  U/PPRSSSRTRTQPQUQUV8QRС P@bԞ@b@@U֡ ~ݬWݬJ[}Z }Y|X|UNkPhPi@ U1kPQhPQXPQPPPPQVVЬ<}jj mjWVhRTHhPР R@&<P<QQPSxSPPP~PTxSPPSRdU U~ݢ ~RTiEݏ@iZi@oV+БQSС P@cԞ@c@@Ԟ֡ PT(^FRSТ QAcԞAcAAP֢ TtݬPTPi{P`DР SxPP.+QRС P@bԞ@b@@УL֡ ݬb$Tݬ,￿Z$YzXUSЬRRυPT6hP`.Р S RSS~H{<SiTR϶R.PT hP`Р UiT~jR:PVSjPWQP,aUS`VI"QRС P@bԞ@b@@W֡ Y#XyWRЬUUϏPVgP`Р RU hTRFTբ?RRz~DziQSС P@cԞ@c@@Ԟ֡ VT~UݢPUPVRgP`JTGР SТTS dPSP Ub)iQRС P@bԞ@b@@C֡ hVU﹎QRС P@bԞ@b@@Ȑ֡ lY8yXxWiUiSЬRgThgIRPVjxP`& .Р PxPPS"~`hghTgVUiQRС P@bԞ@b@@S֡ XnxWwVhUhSfRgfݬRPTwSf!~gQfgRfTUhLQRС P@bԞ@b@@S֡ ,T;wS^ݬPccQP<QQ1`{~@~@}F`[~@~@])`<~@~@>`b@ZHwnRբn~`~ݮPQsd%PݠݮXd<~ݮ~ cS GvX$WvV$^ЬTP~@>5RP6TfPUScL~c~ghPP(@XhTc,c%guTFvX~fc0Tc ^t[1vZYouXuWצּV$^kR) ݬgsЬPPhiUi0kSPPf1L~;jTj~jkR RSbRSP 4gStP Tjt@$uu~e=^SP````UfUixhhcQSС P@cԞ@}@Ԟ֡ 3P```` fUffPlt~g ff0jRݬ0tЬP bbb|}S ݬ PUݬn~f~>PRRSPP 5QQVVSTUTݬ6QRС P@bԞ@b@@S֡ |}S ݬ }PUݬn~f~ϳPRRSPP4QQVVSTUTݬϫaQRС P@bԞ@b@@S֡ WtrR ~gPVТ R Rb~gPVbP(PQRС P@bԞ@b@@V֡ ﲶWﷂR ~gPV Rb~gPVbP(PQRС P@bԞ@b@@V֡ eXNWhR ~gPV<~gPVhP(DQRС P@bԞ@b@@V֡  S|~ЬR$P5ݢP(PP~ݢc0PP~ݢ,c RcP.pYXWV2UTSicc;g}!~h~~Udc;gc~~d~~Bdc~~Nd~~Ńdc;gciP1PR~~ʼnd~ݢݢd)h ~ <~f ~ ݢ f ~ ŏ PQ<P PPQ~ ~ ~f ~ â$(PǏP~f~X~hݢ cbiRs1YccЬW$Z $VUEjОYXSUVWEstT3R PQSQS)Qb`դTVW1ФT˚P PPPVYXUcnVЬWxW[[YVT$XHk$TZ3P`RiQ-RQ&P PPPT~TVGhZfV(^Z / PVn.P ,nPΈPΈЏΌΞΧ(ΰЬPδμ,n`(`(*,24  PX,n,h,hXά  PW,n,g,gXWάr0SR*Bi0Pθ`νΈPXXSRXSΔ+WPP~* PY(W,iWY|~|~Τ|~~ݏ ~$0 xPXX1~Xp V n~mmj1~@L~ PY PXXiΈ3><+#~ЋFPRUTP<ЬTxTRRR~PUTeЬSR1TT <*#~ PP5~RxRPP~V %PVb]"iPPQQVVg\xPPУ ggP? 9 Sgkh#YT~i ~i/m hkTP[\Z\YfX~iVihW\hTR^ݬ ݬϜT`PTRj @RkxRP PP~#cb>RԢ У  jRkWRԥ XУ4Q<P@S@SPh cPiQSQ`` PU~UkiQSQcSѣ4Vԣ4xhcc PP*SPTRЬP`QPQ bPbЬR`[xbPP `bmg<TS CˆTS2$3SCˆP`Y TSbP@JPR`PPRbvpbkWТ$V<(U<*TТ,SZYXRPRFPRbHb(WV$U(T*S,ZYX[_RPЬPQ$' Р P$RR'RRPPh@ZCYk?XT_W?VЬS1ÈRÌT镢ߑdڑbձϑҌȚUUUijjˆfgˆTMPhUiPhjŒfgŒÌfgÌ~iPh~iPϯPSPB[q?Z{>Y^ЬU1UňTŌS|wrmdeh}ĈnRce R}È S^GR~ BLS32047.B _1+#[BLISS32.V047.COMMON]BLISS32.EXE;77d|6 XRPPQAnW@nVgf W@nVAnXQPBQnWagXR g 1 ]ň]Ĉ]ČT8kPňP*~<PxP~~PUO~X<RRP@ňQxaQQERP<QAńPx`PP.Х8PxRR @&РP១UX<TWS_CňVfTPP? PFEPG?SR kPBňP~<PxP~TRSTPUbXWS<P@ńVPPPPf1PP? PFPG<W..<RRTDňjkDňRTƈjkƈiR31RiХ88ԥ8<ƌk7>1PPW.SP??~<PxP~RWSSRSRjCŌWgGZTPP<PPTCňVSUϊR ƌk>SRPUaSiE(ňK(Gň~P'3+PU0P| VЬRЬQЬ P@S@TCPTPSTPPPUS]9eSX9[VMOcJdEУ SФ T~fP,ˆRb&Т R~ fP~fPPPP&XЬ UeE? DЬP :Х RЬVЦ SRh$Sh$1ѢѢ88Ѣբ8Т TУ SRB;1B@!*3<EW\ST~6~TS--~TS$$~TS~TS~TS  ~TSnTSSTUVPWWݬ߈R1_P^Ь P`1Р R Р$X<*W(Р,T<(VUЬQС,T<(VUЬQ[SS[ZЬQYSSYPSnЬPР PѬPPPRiPpPR$H RSe^Rݬ#PRX$W*T,V(U[ZYnRPPЬP`:( :0Р PxQQ PPPPPP PP]WGVЬ TTPSЬUUSFPBЬRS'P 4OxRPP4Х Q6PxRPP1Rȱd e R4Ф Q~P)PSf1d0e&* TRf"U URfTtTRURТ$$**ЬP((QQР,,QQfdSTgeSUgSݬcPЬP`9ՠ 4d~ЬR<PxP~~PR&ܑ PЬQa$ЬPѡ @~ݬۑ PQѬ QRЬ PRЬPQѬ!QQ`WѠ QQBRˆ>ˆѬݏ !ݏ &2"Pݬkۑ PЬ ScdЬP`[Р PÌRPbIPQPTTQQP;P 5RPRxPQPAQRQQ~ݬPTЬU<Y<XRqBňWg+d^<VRVPRPQAňWg+PSVPS<SRSSVLU0PSSVSRPPTXRT1yYPP^V|| Ԯn1in nP@PU|PY@.f$fDfPP$PTPœf$f400Ц$Ц4!0TggTg~ݬ /Tg/g (&nRoSpUj%[&YRP%@PPWPլPPV&U&ZXЬTW1 p/PkP% @U%@Hl6 XЬP% k}PkkPPk?%@W9.% @,Ь%Y%U%U~@d.k].PkPy5Pr5P ~Pk'(kP`Р S% ~QPkVt.PkP=PP B Pݠ Ь%R~%ﮌ~Pk~BP~BS~$PRPRPPV0-PkPZЬ$~$NV16W16%+X(44Ьn$~\$ U~$ ЬSccc<R BÈR!$[$Zs#YWЬTDUjVee~P $X$Sm,PiP3P3PW~Pil,PiP "@3"Se~P@AP es* f* "eP@ORRP Rj!P@rPiT\* 1iQ<P@dRb&Ѣ Ьk< ~j﷈ iP<QAhTd\<S SQ ARbESQQ S<V VQARb SVQS  ~jEiP`QeRRcsRejSc'SiSfPÌ4j9գ 4Ьk~jڇiPiS PÌiP<T1DSÈSDxRPP~T c PcЬkTLxTPBP~jj=xTPBvP~jj R9R: RW T~j T1S<U~ЬPRPP^P_ RTeQQSP4P'P,*P0%P2P4PXP[ P` RT QQSP-)P1$PY PZP\P] R?T QQSR TVRYFFhR0PX"PP k@~ݮk @1(VVhVVV~XP(!Xk@~< [ PYk@ YFԧ$$Y$$)rG) #k @1^RA~PXY|SPGbR!PP @ @1y-}Z^~~LIPW~-[AW <uG"~ݮ H1^C3 ~)a#~+*~1B~PР UUzU ~UU USUTUY~@~UYUSBUR @s1L|Cp~z\PР UUU ~USUTUY~n~US @s C1~PР UU{U ~USUTUY~K}UT @1ЬUxPP 2#~ }ZhC1"~cEPР VVV ~VSVTVY VV ~M}Z VYxVPP  @@j;cG \~ݮ|CcU3PР PPFuEeUqG~ݮ|GC1~B$PР PP@~tЏ,.MPP,.1[1ЬUȬ TYSȏSTSS$RRhRRR~X PA~X^$R^]b(^ݬP:b ݬݮAݬݮGb|~ݬݮ M/bQBb  @mP[9ZYXWVRUT8^eR R#fngh ijkm" !$Q(M,054if$&h"0ִcjlka" e8PS}~TP+*A~R@1ݬe`2WPddR￴P8dPՠ8~ݬXdPdd\gPѠ "$"QQ~PאּP!i~d !Sݏ@em#HnfЮgЮЮ hЮiЮjЮkЮ Ю Ю$eЮ(Ю,Ю01Ю4y ^Z[|TXYЬSSPHPP`MC1[WZ&@ PPZ TZVZ 6^~VZVPznR6@; R^>RPPLo >^ R>TUR[R,RU9 *EPP@VTZ)P@ P @SG~XP@1WTݬSW$Ue7WP@PP~S.PRݬS$PPee@~ݬSW'SPP@PP~RﻮУ(Re @WRZxWPPeRTEPРU6Q$PР Q2SSQ2<~Y7v Qɡ$ PPP2SSP2j<@~Y vԮ[nnS1TZT PР(UUTeS ~YuXDxPP|2У(P PP# +"PTfTUݬϕT=fUσݬ =fTP Rլ ЬSЬ SݬbPРR <~ayS;R-<CyUSլ ЬTЬ TݬPR<~eТS<~eTS/ϱݬ[PRݬR ϧύP@PРPPϓݬu[<iUTЬQa# С P%ݡ aРST(ݬPR PSݬ eR erP@fRТPP S;eT1h<~:wPP ;P[PPP~N|\VЬPР T TdQdPU-QPfUUUdQdPU-QPUU8dQdPU-QPUUdQdPU-QP UUϓ|~ρP P@R!ݬPSݢ1S ~2 ЬRRPSAPP P-RP+R0P@$PݠݣRϯϕ ݬ?PS.PRݬ ψS eRPЬPР RRσPZݢ wPS ~ݢ `PSݬPTPRB~oTݣ~XRݬW}~G ^nWЬVf 4VPX( hg+Vݬ}ݧ( gh~}~^PR5~ЬP.0~xP:8% բ( R-R0-,ϜcP@QPdQϙdφ cPP P϶ c dP< ~  ЬSPcPc ccfPR ˏSRxRRR <~YaS=P0РQ`SSa `SSBXSQР<~P5aW9V*UЬTPdPd dd1PR ˏTRxRRR<~gTϢPS1|PSBPSPcԣSBd T d CC$I<~g=ffХPSSԣSЬ| dЬSPP|ЬTd ((##(((((((( VQVdVP ˏTPxPP@U' V PQPP-QP T eUUPP|ϐVP@TЬRѢ$I~ݢ PSϩP$=~f}~~fݣ~<~~fƝݬsPSbPUSƲݢ$5ƲƝݤϺU3ƲƝ~}~ЬRТ P~PݬR|TzSRd ~cPdb <~cPbբ  <~cP nԢHYQPPPa<^nPnQQQ`^~ЬSS|~SRnP`PnQPQRR sk( xR~nyPQaЬQ<(R ЬUSnRbRnPRP$bTP`CSРCeR{TRݬRРRݬ ݬݬRzЬR+ 3CAbP ˏRPxPPP 2]ЬPݠR<PP~yP`(ЬRRϥPРQ <~\PPPRQr~R~ϝ5YXQЬSP@RRQSPQWW <~=\SݬhPV_iRRRRPxPV RGPVPfԦ iS(SVGШPVVԦVVPQP@RRQPQP@T4 P-P Ф P QQQ-Q dTTPݬ~[ݬϼ,PR <~0[բ ݬϐPݬPRݬP ݢݬ'F2~ BLS32047.B _1+#[BLISS32.V047.COMMON]BLISS32.EXE;77dh|t4^iPPWgV~VϕЦQP(a¬gPRЬ PѬ  bP7PQ!PQPQ PQQbQRiЬR R+ <~Z PR `RQ !`RQPѬ `Q"Ѭ `Q `Q^Pՠ nЬn<~kuP`nPϝ^ω^u^a^M^9 S~uPЏM`I5t4tyQaRP("cc8RPݢXcz|UV~VUЦQP(a¬6@QЬPѠ aP aРPPQJPѬ `Q `ЬQPѬ `Q `ЬQ^PRݬ~Ѭ RPЬP<`~ݠР PZP}~υ `SݬSsPeУT;~U,RRP<8UuqTS'RW cP PPcdPedPbeQbPPaQȏ QbRnbbP@.QPϸj T:Q0QSSRRQRbPP:P]P>RRSQQ:.QbQQSQRQPQTTTQsP+c J  SRb4bS bS bb<iUNTЬRkddUТ SS `xQQ &+QЬQQ+Uϒ +c<UTЬRlddU-Т SS `xQQ &+QЬQQ+U Y2ЬRТP +&x*ϰ R `Oρ,ЬQQ `Ь Sc)УRТ Tq11УTФRЬPPPRDPR= 1Ѭ+&P xRTS6LBt*RH 'R:ϋ l ЬQO |VЬRff~(bTЬRϬddTPS Т PP_ZmFAK|2U7<OPQ PL!PG"PBP=(P3P.P)$PP$ P P POPЬP|nVUSeP0@fPQSaSeQ0AfTPRQQ  Q~Q QSR^ϖTSdQ~APРR`Qxd~mcR bc~R<UTSRVPmFEcP PjPdLecRcP PdlG9RRϋe ЬQС R СPP СPPPRС PPPQlRPo[Z^Yf1XWKV9U|SS PP  tOhhh~~Ufhh~~fh~~2fhjggP1~ <~i~~TfgP`"<w~~Wf~kP ~ PT~~_f~ TiSS ~~i ~~xf}~pGgP~~f+Р RS ~~ň ~~ŕfSRghgRb RVPgТg1D=~ i~~ţf~kP ~ fhjggPՠРgЬR|$,Т,QaPPPP~Q3jԢ,ЬSc<RBÈTddTRSTЬSwhS  dQ SСQ S$ SaR SbR SТQQa`Pa`RPPd\G[EZYЬS(<(ԬcpУ P1գ,-,}~-~yУ,TR }~BdydRլ*}~1?Ѭ   Ԭ1'cգ,-,}~-~yУ,TR }~BdydRYIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIm\3o\  FF\\\\o\\\\\\\\\\\I1Ь PP}UVPUЬTTPVUU-Ь PP}QRPQTPRQQݬ$QRݬTݬUVÈ i1|~|~Tݬ|~Ì i|~|~Tݬ|~Ð1|~|~}T0~È iЬ RVR VRݬ$|~~0~Ì iVRݬ$|~~4ݬÌ i{|~|~0|~Ð i|~|~01ÌT|~|~}~~Ð iФ R|~|~}~~BÈ iRR<U RBÈP`|~|~}~|~P iURE ЬUЬ TЬUЬ T<VR"ݬ$TU}~լ ~~BÈ iVR1} ~}~}~}~È i|~|~}~|~Ì i|~|~ݬ1<TTR|~|~}~|~BÈ iTR<P@ÄRլ  $RH} ~}~}~}~Rb|~|~|~ÌP$J1|~|~}~|~Ì i<TTR} ~}~}~}~BÈ iTR1ݬ$|~~}~~È2|~|~}~|~1} ~}~}~}~Ð i|~|~}~|~ÔPÈ|~|~}~|~Ì i|~|~}~|~Ð i|~|~}~|~Ô i} ~}~}~}~à1Y|~|~}~|~Ì i} ~}~}~}~Ð i} ~}~}~}~1l|~|~}~|~È i<TTR} ~}~}~}~BÈ iTRu<TR~}~}~ݬ|~BÈ iTRP} ~}~}~}~1ݬ$|~~}~~1УP.#լ*}}~ݣ$ypÈPР UUU<RU[VT&|~|~}~|~DÈ i|~|~}~~DÌ iVT|~|~}~|~Bh i|~|~}~~Bl irE>?XEjWT^xTVhV~EjVn|~~}~~DÈ igV|~|~}~~DÈ ihVgV|~|~}~~DÈ iRTÈPР T<XDq?WDkVR^xRUgU~DkUn|~~}~~BÈ ifU|~|~}~~BÈ igUfU|~|~}~~BÈ iXR$S[bZϣYXWVЬSSN|~|~|~~ЬRˆ iŒP|~|~}~~P i|~|~|~|~ i|~|~|~|~”SS|~|~|~S~ݬ iSpC!#fT8gScSR SUcSUjTRh|~|~|~|~ݬ i=`fP[O_PTfUUgScSRУBShcShjURkPTk ``PT`gPS`PPhf|<&V}U0T@S~~Tce~S~~cfeR -?R~~'cfмPF`A&РR5b0мQСP`РRQPQRPмRPQ>TCPPs%~~e< dЬScc~~0?~ ݬ@Rc;cPP  R.R=R aRcRcA@~dR=cPP #) RhRmRfR eRuRRd d^|YЬS U}~RB> =R&R+ R'R*~~6/>+~~#/>~ <~?Q4<PPxPPPeRbQbPP aTRaQRTQPRaQeWVXxPP!PP@PPPPeP<nR1[R[@PRPPePSt~ccvZ2cTTc cPPWzcPPV ocPPXfT3._Y .ZϥWVX<ZcTT c?Y3Tc cPPWcPPV  cPPXS<~XY[eP`ePm]nReeP`ePR]Y -Z"[Zo-YX1#(WVU+TfPyxP~nXPdSP@ξR ~CQRSТRPSf;ϝegS~CPРRТ`S QQeQeQgSSfPPRW`bQQ PPbRbb ;bP@pRbP@P РPbRsW `".QQAbPAb[Z PРVUxUWPWPPYPWPPX|RFОTd &TRФTd TSSX1УSc12U,xPPbxU xPP aU%XU U#U1U U+1УSc1W  WBlUU UJU ( U U#SjPS@jXYPTQR QFОPТPPQ~FRRTbUjPT@jxPP TϰxPP TϝYXЬUХPРSRCОTd  &TRVxVQPQPPWW~DPTQR QCОPТPPQ~CRRTbViPT@iWD~T S PРRBОP ` &|~ϼ&BОBP~PϦ|VUTP@SSfemeQdP@ fddaeOddP@P f;dP@RRb~c0dePd`eddP@RRf~cЬRjSբ Т `P @P PP P`TP@RrP@Q QQ QSRbQQ Sd`PdtRbQСP  СP`?abQTZWЬRPPPRPVf9P(PgPP VVg XWЬRPPP9RPVfP(PgVg hPP VVhRQ`bQQ PPbeYYPR1"/8AJJS\enw~ƚPP2RuRϘRϷRR2RRRKRtRϸR ز|ЬV,n,flЬfl lЬPPPf,,fPx P(ЬP|Ԡl<ЬSSS+PRRУRbTRSϛTR,n,c<ЬRТSТS7SCSS $bPPc> bSPP2вSPSCТTTSdU"UTSbPcPPSSP ЬScRЬRУ P RPQQ$/QQ(У(QQǏQ~SP@$PRP cR` Y^x XVЦQ)QXXVPXQX`fiVfifVfVզ|~ݬHnV&VSXWW,ncW,nWcЬPՠVV V fXVP`TЬQ0PP `м``Pѡ աԡ P ЬQСRdPPQPQ ՠ`PaPQ ՠРPa`ЬPRРQQSPSQPR䞠QaPSS`RQaPd,TЬSЬR#dפ֤դݤ-dRЬPxQQBQРQ РQRaP@aP@aRPRP<,#~=1ЬSQaaPxPPżPRR P@aaaQQPRATRPQP :R1-SCb՞CxPPCР CbCS^VSxVZZPP[W>ЫQxWYYPРP Q PaS`R-SRZX(n(I(nIWVTЬSУR:<PPPP~OLТ QRRD`TТQSQR㞤`P5WЧRTZФ VP@CѦT=8SCxUgUPTiC֞ee eVФTԢP@@@PSCbݞCxP@ϭS< RPxPQgQR СQ Q QQQRP9XRWU+< gЧVSCxSRRТTRhh U RRR UhURФPРVS ЬPР SS~~PRQAОPAbPRPxPQQѡSRP<-#~G.^լ ԮݬPmP >|EJVjURe<~fPPS,Q:P@'С PѠQR T TTTeP@c֞СQR RRR~fPԣP@@@P KSRbPPPP~ݢc<~ݢcQ С PԠСQnT^PƏPdd~X)x dd0R\P@SТ PSBѠR<7RPPՠ dPRc7 RТRѤݤԮϥϞR^(Џb bbԮbbݏdbݏ~b"b^b}PР@ }RR5PSݢρPSݢϗݢϺ|V}RR:P Sݢeݢχff/Т SfТ$T<URBBGUR}P@ ?S^ЬR$ccPPnncݬRϗ'ݢ0>ݬЬRRТ P`  <.#~*T^ЬS ԮdSdRB4><+#~r& ݢG ݢ ffUSdT]Rﺴ21bϙ"W"bυHՠ Р PР\P|ЬR|UVT2-< ~%"Vӈ>U >>TЬRRuBPРQ}a`QMC SRbcSݬbPPbPRЬPbPbﵡЬP `РPTSRTZbbdSN~Ϙ,PcҟRb<-bP0AʟP07ЬRbТ Rb  ݢ8ϢRPb}SStS+Œ;S3 <P@„+SHѢRMТR.RP0PRSD ˆS*$RP0PR<TSCˆ_PTSPݬJP PL ЬRSB CPCPSP`DPЬRPP,P@ﶞWdWP0aPSN<VCFˆTFÈUde7d. )Ѥ Ѥ@@~ݥ ~ݤ KPVЧXWWP ӟSЬR SρRc 犯SЬR,!Nc RcNТDRPSTУS8T ݣ@*T+THУ4R ТPRPУ SƺKZ9KYXȰWVЬPPUХ@Re.g~TT Ҍ~ˆ~T. ˆftT:SCˆfST-<SSTDˆfSTT=T><SSTDˆfSTT3 <P@„ T+ŒfUPTde*hR%RP\P`ѥ RzТXRّeR.RT Ф4S УPSPФ TТDRhR[RP\PSST6S g5/&~S~TiP~SjP~TjPiPRzТXRЬRТRR@*1բ4,ݢ4LNբ4ݢ4Т R|5VUfPPfP0eTdTTe'ФR>Т\SУP RcУ\S﫛R RP0ЈRТXR ﯜS*RBQQPPSNРDPСXQRԺ  PS*RBܚQQPRSNРDPСXQRԺ 8+P*TDS-SQNPRRR`СDQУXSTƺ<R*UEST'TSNRSRNУDSФXTU`РQ}PЬ RP PQPRРDPݬxΙPɬP~7&Pﯙώ%ЬRxPPբDxPP m$iТQxPP;$1СQQQ"ѡ xPP$СQQաDСDP PDСHP ~ϼ%PD~ϯ%PHЬRxPPBxPP $)ТDP#  ТHP P&ݢH&|D<ЬScaTT-T:,T:RU R<UUR ݬBÈ URT="T><TTR ݬBÈ TRݬPR n ݬF}~exPPբDݬh$PݢD#ݬϾPR  ݬ}~ xPPբHݬ$PݢHh#<ЬPUrTTRbRRT+bS Т PU RX$SR<Ь RbGHТRRP0PR}T<SCˆ0P[SˆPS++AˆPS~8ϷP&ݣD0ςP8ϞP ݣH0iPPPЬ Rˆ}PST>1UU:U-C<P@ÄTФRbRR,ݢ<~FP}~ϧ Pݬ  ˑU,U3R<T:DÈQU3<PPTPPU+PЬPݬ PQ9PVVRTR]U3XUU+S P@ÈP6+SP"УPPS P Р P HPPPPP ЬRb<,30Rݢ@ϭPݬ<S ݬCˆS<~ϳPRDU*TDUEUS .P`"R̒SU;PRϖУDSХXUTRP<ЬRUUTdTTU+Ф SSRSPSGSRTrЬRЬS TD ОPP P PRPTPЬRТ TSC ОPPPSxT~nR ЬP}TФVVRbRRV-bSݢ<~SSWPQա С QU Р@QѡDUСDQХDDԥDʏ RР Q PС QW>(P<R BQaСQ<>S¤ SS>R1YVRbRRV3bSТUТ PxP~nR]>Ф TWЬPРUЬPРVTTRbRRTkݢ {P}~PUHRϠPSS  < ~ >SSP0P~}~ϜPVUP`PPUР SSУSS VP`PPVР SSУSS VUeUUV8Х R<T)DˆQaСP>T>TVUeUUVGeTХ RRSgVS gУ S UgPR`LUVTU<UNSXУPPSIRTR( ݏpRRPTTУXXSUУXS|:VЬSУTTRbRRT/ݢ<~ZP}~Pv]TScSST! P`R<P@ˆQaPTScSSTFcUУ RPRPfVfР P S' TТDY>VOf RТDYf0Т UХ XTVФ U XUߠf>Tό NԢ FRUХ XTVФ U XUߠf>TQSUѥDRХDUТDDԢDRϴYR1УXS1W1ﵖ[ЬPPРXмUUeZХT  Ԉ1XScSSX# Q P @ A ўPQХV"*PRbkRV@ЦDDRD PkVRȏRPgR T P6@ ОTT'Ф\YТ\W WTЧ\WТ\\T\ YTPZU1ЬPSР\QI><>TTS>PRբ Т RQ Р@RѢDQТDRСDDԡDС\QР R PԢ\Т RԠ\S> ЬScSS<У RТR(PRC PVТDRyyyyyyyyyyyyyyyyyyyyyyyvyyyyyyrryyyyyyyyyyy}ywxyc~c~|Hvpypypypypypywvv|8}yzyysyy {F|{{{{yyyyt{u#vyv1XWVЬRb1ԢHТSSR>R9<PPPPУ4UТ4TRShT4 hU4SRТ8S1TǙ73%%%%%%Т4PGР4P2TT ϼl+PS@SzVSUУSTPVU+ggLP@ϒPݬR`Ԣ8bgg݅XWЬTVfナRѤT&ФSУ@@PPVV,PPfSTϼPRUR3U, $ĈPР ^~<PxP~ Ugݏ︆R(PSSSPР4PSݬTP S f{PR V T@P@hXPT@hoSVR@ТDDTDS >S~VR@SrS < ~; >>TRТ PSУ R PRg f* f ĈP fTϩf"<UEĈRb TUS<P@ĈRb Pլf}Rk<PPPz<WUNUPP@ÈVEˆTdfUd. '$Ѥ ~ݦ ~ݤ 31P *Ѥ#WU<P@ˆTd PPP|݄V:UЬRЬTˆScT~S,TŒScVϐU`~ϪPecT~SݬRc$e5eP0:00Vp]|VЬQPР UQSR ~BÈϏURURBÈTTSTχST$RR<R$BÈTdTϣSTUSTRRUf ~9{R0RP0PxQQ $RТXR:Sf<TR ~BÈϼTR~SX^WЬU<RRTSCňP`SR ~PCTS~UbňPР SSSTS.RV UFňgRVDňǟUDňZ@R8BňVfLxRPChPUVgxRPCxTSwR^cbbb&~~ݬϐc|n^ݬnPdЮd|wVfUH=wTUTT<`P@P Pݢl{Т R>T>  PʏPP P PPP}PС``RR}С }ddЬP ݬ < ~P}~ݬPRТP>T>&`R PRˆRcˆP@```ԢhRP ЬRb<RPˆSݣlݢlFPl<PPPP~RSЬPЬWgi < ~~LjV}>>ttݦlݧlPlPP<XxXPP(PfgxXPPP~V?ЬP```ΠhPРhPPЬSS&PAУRQAQ ТlTTQТ RУRtSˆR 0SPPppddpRP|jV# PRЏb>tЬSRSˆˏO`UУhTR(U`ThPPppff HSϣ` RPjXЬV<RVHxRPPP~V PWԧ Wvr>tWƈ<PPP,nPƌˏO`SЦhRVUS`Rh!PPЧllpphh pW` VPЬP |xl>t``? ||d~ЬRR(@``RP }~Ϯ}~ЬRЬTݢlT Pl ˆRbЬRT1`1[SPTP`QQQQPQQSPTP`QQQQPQQSPTP`QPQQSP TPaQPQQSSrR PRS ʏaS `΢hhS   `S-T}~R1PRТh  ``ATa/ТP>T>"϶PѬ PRCP R PR T`PPP  T` R PRTSS=*5R~` R PRT``}~RYPR T`RPЬP`άQЬQQhQՠhQQ`~ЬRRC`RPЬQ`" xPPP@`ppfD3  XXXXXXC&׭:;;$ZZZZZZ͕͕iiUߘә   wЯfXHMWdZYXqWϏVdUЬPx`QQ` HPjP>PЬRbfZs<~h^pPRP <~h~jP<QxQ~Dݬ~ POݬRc ݬR815eT rg11ݬRPSRƌRfP@ϐP `eeiTep tТSrg:УP>T>$SfRSlgrpУ S܈grТSݬSppjգ < ~h~RPeeiݬƠ,eeiݢlݬƪPl~RP}~d mvPPPSP>wRRvob~ݬSRЬPݬP ЬPЬPРЬR ro,`ݬRPR]RP < ~%`ЬPP ݬ PbYXSЬU<P@ńRѢSSSPPPS~ň>h~R(T`n-ŌRaPŐQ@!<V@VЏTŌyPŌPR<WW4VTVDňUPDňPRWT皏~<P@ńhii 'UbSUUP`WVЬT<UUSCĈPCĈPRUSuPPG TPgPTgP<VPUl<SݬCĄυPCĄPRVVT϶RTxTPQT:`S~ЬRˆ~Œώcc ~dP”dP”~˜d~R<ЬT<US~CĈϺPCĈPRUSTTPϜW_V>UTЬR˜SѣTTTPPPT~ˆϳe~Sϝ$ŒgPŒ4gP4”gP”ff ~˜5eR,TRRPZYϸX^WЬS~ÈhPÈ<~ÌhPÌ4<P kÐRbPÐUPehPePRÔV~fhPfPT`Ѣh `Ѥ ~RjPePR < ~RjPePR < ~TjPfPT~ØϘ~Ü4uggiggi~àhPà~SϹݬoݬϹЬR~nˆNPˆRPЬRŒPР$P`P `PPˆPˆRYRPЬTĈPРPP`VR`RQѠ QRXXQX<WS_CĈUeRbAARRDV?X#S hPCČP PP~elPePRWSTRVTPЬRŒP$PPˆ-PˆRrRP\TЬRŒSѣHHdd R5p$PPˆPˆ$RRPϵWSЬU> SňT~dgPdPR`xPP< ~RπPdPR<VVT*TPSPDňgPDňPR@VTҚ~<P@|g~<P@ńgUOS ~UUPTZS~ЬRˆτ~Œ acc dP~”dP”~˜d~RϘЬQaС PxPP PP ЬRb$< ~.~ BLS32047.B _1+#[BLISS32.V047.COMMON]BLISS32.EXE;77dd|1P@ @<~~ݢ PPSRsSP ЬS~ÈPÈPRS`ݢ nnSSPЬP`R>aR/R*`QAR P@R R < ~RPѬ,ЬPѠРЬP` PP#[ЬTĈZUtjPjPRČYXX``Ң PP?PP@PE4iϡPiPSUTW``SPRSPRW`VfP`QQPPUfP`QQPP(`P fPP1`PP1У UU RTZ xPPPQQUU~1UUPUQQPPU/UPkP"fb+RTUPkPUeGX!f,@~SPSe `9f e*@~SϽPSeң PP ~T`W SPRSPRRjSiTPЬR~ˆPˆ~ŒPŒR1RPݬ#ЬPݬЬPXScWЬUTTPPSSQ Q@ňuPňPRTPP`QSQQQ Q@ŌAPŌPSTUπ`P`QQPP`Т VУ T`2`gd~<PxP~hV TV~VB~U `3gd~<PxP~hTPPPPRUT`UP\W(bVЬUTTPPQ Q@ňNPňPRTPPŌ/PŌPSTUn`PP`Т PУ T`.`#fId~<PxP~g8zP~{T~n.P2&`+fd~<PxP~gTTTT ~UUP2aYWЬT1}ČUХ RЦ Si7R#efSRPP  ĈPSMݬTR /RĈPĈURRR;PUUČ}U~ϾPWXXPP@ĈPĈPRRT層C<WS~CĈϠPCĈWS营  ĔP XTϺH`Ԥhi#bТP>T>tTPЬUWWPPňPňPR<VT!WPPDňPDňPSVTWUŐR`բ  ~UUϕUP|ЬUTTPP4ňuPňPRTPP4ŌWPŌPSTUϖV``SPRSPRV`P`QQPP8`PP`P`QQPQ!QPQTT`1QTQP P̣ PPT:Pգ PPQP P!Pѣ PPQP P PPTQRUϒT`P!P`QPQQ`!! ͣ PPPͣ PPU\V SPRSPR]ge ?UP]TdЬPtQЬSУP >T >QÈϨPÈPRݢ[P ݢdPPRSϚdT>PRF`PP2t}<0~RiPhPRV<0~RiPhPR`v<0~SiPgPSd`}RPSPRQ`OU)Pϗ`PhPgEPPP!`<0~QiPg <0~QiPh1Т QУ P$-6?HQZcluHQZcluHQRQPQQRQPHHRQP??RQP66RQP--RQP$$RQPRQPRQP RQPRRTπTP ЬRSSPPˆ'PˆSPPŒ PŒSRMRPݬЬTTPČPՠ <UUĈVWWPP@fϧPfPRWPPČϊPČPSWT`eУ S ]RT~@ 8S3WPP@RQPRRfRTJِSca`RxSP~T5TP<U U0Q QQЬSTTPP@ÈϹPÈPRTS`բ PPPP~SϺUa(~SϘ`PPPP`SOSP|NVЬT~ĈfPĈ<US~CĈfPCĈPRUSԌ~ČfPČPRT6TPETdd ЬRp bRТ SRNܪ`S S У@`RP ЬSP@R < ~RRRIУ PQ QRPѠ 5 xWPP!Q%Ѡ ѣ ѣ PP fUU^TTSSЬUňݾφPPRŌ [PkP`QQPPP PSPa<QQ@ݾ;P PSTU{RPTk S SϿPPPT`P`QQPQkQPQZR@PnS6PWnWSPRSPRWPnWPnZnPnPPPWP@iT < ~gTVV-  TPxPPɏ$PTTVA 0,W Џ!T!W  Џ"T< ~TTV #  ծ  ЏTTԮW֮T%ТP>T>< ~RPRT%УP>T>< ~SϡPSTTT!Gn< ~1ݮUχRUlԑkZ`PPPP`$SUFԑkZ`PPPP`1'< ~RPR< ~SPS1Z`P`PP```TPPTVV$9D< ~R< ~RϪPRR< ~SϕPSSТ УTVV $< ~@ԥ @Т P У PPTVVG&;B< ~N< ~RPRRd!< ~SPSSd ТddУddTVV"+4< ~Pcc1<~RϗPR<~SψPSZSPRSPRZQ`Y`XVkV`PPV`P>@fP>@hP>@iPPA\PTTTPP` PPPZ SPRSPR1Z SPRSPRRS ݮUU$ٕ`1 zUPW  d GwY VxPPzݥhfPf hfХhfեSPRPPG(``UP&Z&Y?XЬUŌP SŐT<~djPdPR < ~RPRRdWW0b+Т P$"^KPA~<PxP~oT3DňVfRbL<~fjPfPR<~R~PfSThhihhi<VCňP`~PjPCňPRVSWU`UP@$@$$$$$$$$$$$$$$D$$$$AB@^ЬVƈPР U[U[~PϣPƈPRxUnn` WW<TEsPPTS1ZU*ZPSP4S PSP([TPSPxSPE-P<XXCƈYGiPiPRZ>[;T6PSPPSPS!PSP ` R PRRiZCS PSP PSP RPRRiPSP=+2#SPPPEoPQQQ RϖPRRiTS16<0< 7<< U   aVFnVVPDpDp@p p pDDDDDDAA@!pp0DD DD DDDp@ pp p p p p" DpDpDPDPDpDPDPDPBP@!P!P!P!!P!!P!PD`D`!!`!!@!@!@!pDD p@p@Dp@Dp@Dp@Dp@Dp@Dp@Dp@Dp@Dp@Dp@Dp@Dp@Dp@Dp@Dp@DpDpDpDpDpDPDpDpDpDPDpDpDpp! !p!p!!!!p!!D`D`DDpDDp@D2[:ZЬTĈRТ UE@Yi#F~<PxP~ᄂ~RkPĈPRVSSWWWWiPS1VS!DU:U U75U80Ԍ"U U UU U5U6 ԐVPVCĈXhkPhPRWiPPP`RePRRhSGSSSjj U<VS CĈP`U~PkPCĈPRVSiT%iiPxPPP@iiEiPxPPP@>/ UiPPPa?~Trь`/T4&i  ai   aTP [SЬU1ŐWŔYЧ RD9g$iňjP RPP  Rթ NݬUYR 3RňaPňRRWRPWWŐ/PSňXhkPhPSŌTd~ŌkPŌPT<ZV~FňkPFňPRZV籥hϪPhPS  U/` ݤ U8V V R RVVxPPSUϵȊ`GR1 :5x PPxPP TUlȈ`UPЬP`-'Р QЬPР PQPP PP P<P^PPP nPnnPP^ЬP`PѬݼCR ` bQPBQ(PbЬXBWXBV1UFBT RBCBhRdPR BnhR<~defPR BnhR<~fegRТ(S ReSRHBg=BW2BVЬTTzduդ <~sդ&дScУRѣT ScSSfR2Т(URT!SUfU(TgSg T/RSUR|$AVЬU<T<PPT<P<QQPPfPTPxPSfR@RRTRSTT <~ﳸ~D@TzS~{RPPPTUeRbe ТSЬP P`bRݬϹ`ЬRRϧPQaЬTdScd#УRЬQPQacSPQЬPa%@W?V?U?TgPgdQdPPPaeQePPPafQfPPPaP~@?RRQRRaP=@R]Т(S MAH)5HAA<~o*DRϪ`eRϞ`dR6SR Q%ARP@ТS@S@PQЬQ%ա)бRbТP ѠQPbRP>[kW>PPPPPFE1ѬRмVЬTf1ЦS 1 ѣ$TѤ$Sգ$ѣ$$<Q<PPQ<P<UUPQPsURUQQP PQXXPQQPYYQPPQXXPUZZPPSPRk RB PVWPfV16RPЬTdRbd$ТSЬQQPQabRЬQ ^Ѭ=1dЬPР$X<WWn< UU[<VVZ<TTYЬRFBQСPaSSQSSaW<W U< UV<VT<TRЬPԠ$WU VTݬ PPRЬWЬS-CVݦ P~ݦϩPWVSbQQPQQ`ЬS RX$n[ ZYWݬ SϚPRТP Ь PWP3@VfQСSЬ UeQaeСRfTdgQWaQPP|;V= hSiP"SϥPb~~VgԣbR[ϮCPTTJT  TTT P~@gQ@gQTPTU"R~BgPP`R= U P RTqRB6ОTB6dUФSգGݣP S3-SP#SϤP= hSiPSϹdTRVR~B]6UeTde1ФSգ{գ SPwSIPm< hSiP[S^PQV0,6PP  PP6hPP  PPhhSiPУ ԣ  ɪdT1cU-R1IjRbjТSSPS>bRZ5SУ RSRS<5U P@eОR@ebТQPԡ bRPi5RP:@ОT@d*ФQ @:SSS dTP"5RP;@ОT@d+ФQxPSSS dTP *PPK*RQQPRQQ ѠPRQ  Р RRbТSSSRSxQQb Т QС   #SРT>TЬTP@$ОP} ~`PTբTUТS)УP>T>ТУ ShPPhPziPPiPx;ТS~SУxx#գ <~jhPPhPziPPiPxТTR~R0UP@eОPR`RyVhPPW<~jTPЬRR>b :: .xPP4#ݢݢݬRݢdRݬR)X)W)Vn)UЬ R b ТRRìh~ìf~RϮìfS< PPSSPP ìhQ<PPQQPP<PPSSPP<PPQQPPЬTdPPPPSeS eSSSeRG~C)QQ`aSxSPP<P<QQPgQQPPQQgSТT SТ TTd ݬTψρTЬPxQQ`<SQ" cR~aaR~cdR adcd SSЬRˆSŒ ~ЬRˆŒЬS<TR ~BÈTRЬPϼ~ЬPϪ|ϠVЬRˆfŒPѠHHLРHUUTdTTU=Ф S~Sfݤ*PR~RfݣRݢ$RЬPP` ~P TSSЬRˆdSdS”d<ЬR<USCˆTxdPPA ~TUS~ˆPРP϶<~﹞ЬRR)bѢRP ݢPݬPRݬRPRPբ$P$PRχ ЬQСRR8b3-ТPP$}РddSSР СRRxbPP ѢТRRСdRRxbPP ѢТRRdЬPРP |~~PϙЬRЬSRS@ТTգ <~wT~STТЬPУР ЬP<ЬRˆTŒSSQЬ QSPЬPPQ~T PU} ~~SSQTSQTPQUPQUUPլ$`ULP UݬЬP<} ~ݬЬSÈϙPU<TR|~~BÈzTRUPЬRլPԬ|~~ˆG|~~Œ:ЬPЬRˆT|~~TPS9լ ϑPSOPS` ݬSlTݬЬP ЬRˆS} ~~S}`OТlPլF @;P7`2c+ÈP`!xPP$ÈQС Pլ PcЬP SݬvЬPЬRbP@:#>]o1ЬQP PˆPѠ  Ѡ Ѡ rPЬQS SPPSTTP<P@„ݬ}ЬPQ QSSQTTS<P@„PѠPPSQQPPWЬSSЬVV<RRU EÈVgRUPϐWЬSÈRÌUլPԬЬT0   $ PPTR|~~RgPVe S  |~TUgPR<TU |~~EÈgTU Rݬ"RVЬP ЬRG>PSS|~SˆϢSˆS6!Q~A.!QQ`aP|~~ˆk"![3 Z( YkXЬUŌPUDР(W Q~Au SSRSSbQѠHHfРHVVRbRRVAТ T'~ݢϳPSSݤSdݣ$ϗ SiPPiPzjPPjPx|~~ňϭXk <~2~MPRRňϽRPPݬ ݬݬЬPaЬS<TTR|~~BÈ@TR} ~ݬ<P@Ä' [UZYXW~ЬSÈEʠ<VVPP:}Ð~~ÌkR!P-|~~ÌkR <~ﯖլPԬŲPQPPa`hhPgg 爐PQPPa`iiPк ЬSR[BÈT} ~ݬ~TkPU ݬUWiPР QQкQQ ݠhPg g РgVRi=hPѠ gР gP%գЬPPPzgPPgPx~ݬ~<P@ÄEYЬP<@UAT6SRbP`QQ`Q`` gвP~@QQQPQQ`cdMPQPPa`eePcd [ZYXWиP~@VVfUgTgSefrХP<QQ Ф QQ<QQУQQ<QQiiQQ< QQjjQQ xQQ<Q<RRQkRRQQRRkeUVϠ׸g<|T~ЬRˆ{#~ŒGםPP0 ”U˜T P1 }”TP#P; U˜TP< ˜UTP7STU~CˆϜSϡ|~~˜φP<}UЬRˆS|~~Se|~SMPŒTTe|~~e|~~”e~˜hE~œE~T~SST3ň|~~ ePЬRŒPR$(լ;PԬЬݬ} ~~ˆϗPЬPЬSÌTФ$R}€~~ÈlPݬݢϚ<(PPPPvPЬS<TR|~~BÈ,TRPPЬRŒPРDPݠ} ~~ˆP5ߡ-vPЬPРP<ЬSÈPРPP``ՠ  ЬPЬ P <UURMRUЬTBÐTBÈQxaPPATݬ ~QtBÌQxaPPATݬ ~QVURP[ZЬR<P@„PР XVլϙPԬ|~~ˆ쑢=2X<SpPVVC€~VV ~ݬϺPQPPa`kkP ЬP<WWЬSUR1BÐBÌ~BÈse>)PQPPa`Pjj kPxRX ~VЬSBÌT} ~ݬ~T PYݬY;ݞUe>2Pj j РjkPР QQQQ  ~ݬϬkPݠsWRЬR>\kPР QQQQ <TTS*Pj j РjѠ jР jP益TSk|~~<P@|&|~~<P@„ЬPЬS<TR|~~BÈTRլ cPЬP|VuU|~~ЬSÈf<TR |~~BÈfTRÌRbMRеQ~AQQ`aPSSЬRŒƄSŒSϮеQ~AQQ`a |~~RfЬPլ ϱPЬPЬPϛWVЬP}QQPT1RAжQ~AQQ`aTYPU$g3%APSѢ g gSUgTUЬPUUжQ~AQQ`agRUUP  ЬP`ЬRb PPPSR PQPSQPЬPPѠРP` xQQPTЬQ"RNRPĬPЬ RRBSy*RRxPPP PxPPPVPPP@ƌ1PSSVP@ƈ1STTPB`VgVg`ƈgƌ1SckcVƈ1PRRƈgR1cPcQQPcQQPcQQPxPRRRcRVƈ1PRR ƌTƈU}ƈTP1PR}U~1PSRTgUgB1^ƌUƈT%Ve1PSdV1PRSRPPVged1PSSRRdgSe1ƌgx<TTS VCƈ1PRRCƈgRVgTSBqƈƌ1PRRƌghƈgƐgƔghkVƐ1PRRƐgVƔ1PSSƔgBc1Q<P@ƄPР PPP<P@ƀ VgW<TTS VCƈ1PRRCƈgRVgTSƌPԠ1ƐVƌPР$R*Rƈ1PSSƈg *ƌPРDSSƈ1PRRƈgRS1vƈPРPR<TTS>CƈPP`PSPgRgCƌP`PgRgTSƈgƌgiVg1ƌSVc1PRRcgVcgƈgƐgƔ9apVgVƈ1PRVgRƈvƈPР PPPxPSS `#<TRBƈPx`QQPgTRS$<SRBƈPx`QQPgSR啦Vga[?Z4YXЬWnjPР SլPԬ|~~ǐ&hP`QQ`Q`` 3иP~@QQQPQQ`WϭiPPiPzjPPjPxиP~@TTdRbdТU~UkbRиP@n׸~ǐk<TRBLjP`~PkTRiPPiPzjPPjPxiVjT~ݬkhP`QQ`Q`` VиP~@QQQPQQ`<WR^BSÈSDOOO Cc5иQ~AQQ`acSգ ݬSDݬP$ |~~cϥWRVPiVPiTPjTPjиP~@SScRbcТU~Uk  bRTjViиP@nϲ׸~ݬkЬP [ЬP}PРWgZZРRSRbS PPQ A& SQRYxPXXT1DQRRZBfPƈPѠ |~SVSлQ~AQQ`a~SϢi P VXXTY,F ߊЬP5 Q vݡ', [FZЬVƈPР UUU<YE!XhSSYSSR|~~BƈSRլ ώPk R ~BƈjSRxUPPC~ݬjk xUPWP<WSR3~BƈTTjW#ݬP$E ݬTYRhP~<PxP~`gh US'RR ~BƈjSRU  ~ƔjЬP[Z YЬSÈPР T<RRP@TPU@RPV|~~FÈϹRVլ*PԬV ~FÈRV~ݬqjPPjPzkPPkPx<VVRV1EdP~<PxP~2fjXkWT/~ÜBØTdդ ~ ÜTiP`QQ`Q`` йP~@QQQPQQ`BSÈSeppp dcйQ~AQQ`acSE~ݬcݬS&EmdݬϜP$ |~~c>VR{XPjXPjWPkWPkйP~@TTdScd!УR 4~RcSXjWkйP@nG׹ЬP      ai Q #(( -{&&&? 9U/ |W  ЬUePV<RJBňSrcTT"SgT"SgT$SP<PPPP~SgV3TݣSgT <PP PP~SgBňR1yVP| VЬPQLРЬR`UU4`Т|TԢ|S fRfST|U` [ ZЬRxbPPRPR7P>7bR6!RZ!P111!1jYRjkX W V UT> ST+У SYj$ТS ~S1գ  <~zݬejYЬSSjS-Yjcc <SP W V[UNTCS cPdP cPѤPdc~ePfP ~ePfMP gЬRRgbRϩP <~zb<PPPP~RﭿЬRˆTTvŒSSjSQTP}SP~@RP ЬRˆ5>RˆϭGZPS~S&`Rχ0RRݏ5Sd4RP 5S^ЬRˆb^ˆ*(`PP1PɏP~%GRݏ4capRݏcRRݏ|c`'„R4P€G4P `_ˆϿ/RP ЬRˆ-ŒSS!RSϛFˆRˆSψFRPЬRˆ Rˆ )RPϲ=[1'ZYKFX`^ЬRˆWgiiPjPV0”iPjPTŒSSi"h~khVhpύVl="hkhThp^TlSPUTPKѤERShXPUUgVŒP PPɏP~Ϭ3U>2`RShgTD? ,h~k@jPShShpϲSlbgTHݏTC3RP|`V43U^ЬRˆfŒfPϝ%PThfPω%PS`1$^~;@φD!T(`$^ϲ;@QDSϜ.RˆST”P PPɏTP~e`N€g1PS„[1PPQSPQSQQPˆTɏQ~eS SݏeRPЬPЬRˆ RˆόCRPG[ЬSÈRRWg &1gSXBR $PTX$PU[[ρVg1gXVgXgXg iXVcZg9XУhY?g<gggY gGXggggY ggX0'AP`g\=TOPQQPxPRQxQQQRPc$P~~}$PUU[k:1  VV?jRRY9VV.%V~#P~$PVURVXgRT@XRU$ V RTϓARTg>XURVTϠPRΤ~ɏV~RT PɏP~Ϣ/RTg>XURVT^PRҤ~ɏV~RTPɏP~`/RTg%xZXiURVRT[ 9RTg YX9URVRT[~8RT$XGURVYR 8RTX$ϋ@SP-Z.YЬRˆTTŒSSSVTU}SU`pS  Sϲ+T)TSS`XX @]QRݏ i?SPWW~SUVdRݏCiW,Y„jP€jPSUVdS<P@Ä !U1fVVh)ЦUpQС PU РUU SPFV[^ЬTČPР ZĈUХVYfYХPP`PRRĐXX=xRWWS(CĈ(PCČPCČCĈϒ=WSHRS!RRYBBf^CĈ[=WSvxPPXXݏv+vxZYsX`W(VЬRˆQѡ ˜PѠk~QhiŒgfUfSg Rϒ7JPTjPTݏ%jPfSfSUf”g R”K7T.$Sf~˜SShiˆPѠѣkRPω[QZЬSV*HPW~Wݮ Cň[PZ~YݮCŌAPZϷWϣ![S@RX->'ծ "RTݏ"Rń!Pݏϼ"UP[0^ЬTĐSĈQѡ<P@ĄPѠT~Q9oČWWτ镧`§hhWPVݣ f~~VP^~%+@@3_ nV<ZZU&EĈY<XRBU Y PBXRZUaRR %FQ}ݣݏϰ!ݣݏݣݏϗ!ݣݏω!ݣ 8ݣ ݏݣ ݏk!ݣݏ]!ݣݏO!ݣݏA!QPPP<~nݣVɏP~!FPϞP<~n<~R kUkREPSV9FĈ畤 TFĈm2Sݏϱ kPPRRPPRUkZVS.Rk~<P@ĄRRCmĈPѠѢ0TP$YXmWbVЬSÈRѢ ÌPѠi~Rgh~ÌTTghDPUUχÐfÔfUݏØfѢѤiSPm[ZDYXW ݬȃЬR4~ BLS32047.B _1+#[BLISS32.V047.COMMON]BLISS32.EXE;77d#h|TѤ ŒPѠj~Tk~ŒSSkiPVVݏ.gUVϽhgPUgPUiPϣ”hUg˜hiPUUݏUxѤѣjRP<^(hHnլ Ь }~~υ( }~G0CPRRݏρRP^ЬSØWѧ ÜPѠ,ÌRRqÐTTeÔVVY~Wyk~ÜZZ_k|n (5PѠS(X![XRϞP1TϑPT4 $11Т PP #Т PP  Т PP  1Т PP ÈPݏg14V-PyÈæ ~ݏ?.BPݮ1VPIѦ C4`hUTUO7&TPդ Ѥ `hU(U#`DVϥP'7æ hU hUUÈRP5ݢhÈRPn"ÈR6.vAPnnݏpÈU@ QAPYYàon1ծݮVPgѦ a4"0`PPɏP~673TP)դ  ݏ$Ѥ  ݏ$14 PݏTg7hծcVqPYТ PSФ QMQPPQPPP Φ ~Qɏ|P~Am` <~^7UVݏ94R" RUVݏG7RRnnz~TUxX,k[ЫXQС PX РXX ѧѪdSP ЬRŒSԣˆϚᕢ Rˆ,SϤPRP<?UeTЬRPݏTeRP<UeTЬSv,ÌPР(PxPPDТPxPPɏPPHТ LТP|TТ\bPɏPPb|| ԢUQSSSSQp^ЬPY0ZHX`VРWxXPPRRP_QQPzTTЬ[PPRQV VP$PRQ V P VPPxPPxXSPSx RRSRxQQRQTQSRB; <{~TB;S B; R?Ϯ6<Vc&;]<~SgaPxPPiQQPɏ PPiPxPPiQQPɏPPiW nQaPWPPnP` nP` ԩnP`|թЩ ԩ ~1vժЪ Ԫ }Z~vժЪ Ԫ ì VR}Z~ϋPZxR~ݏU q ݏi `[ύPZ DժЪ Ԫ }Z~>PZxV~ݏU $@ ݏi [@PZgթЩ ԩ ݮ=19ZPZxV~ݏU 9@ݏi ϳ(9j Y(ki1 ,PQժЪ Ԫ թЩ ԩ %ժЪ Ԫ թЩ ԩ PZ1Q[ݮ98[epժЪ Ԫ [ݮZe[ClթЩ ԩ 8Y~ [89 =[)X X [PY[KPDPP%ЬXըWh(i(j0(HXPЬXh  ݬXlЬWZD gPPg[VVM0YYj (7PY j(7PjPRZRxPPPj<ѢVݢzPVPPPPVVPQQ~~fPhh   է WPPPP  PPP Pլ(z~{PPPѬլPPPP ЬQxaPP KRb =@ЬPb`SSЬP`SS bPbPbPPb}PRRRRh W^^ݬPRR%P1լݬ1լ9x PP- ( "ТP~@PP?ТP~@ԢRSլЬ Ԭ VUT VUTPPЬSS Rݏ2S Rݏ3 SRݏ4gݬɏT~g7S! PxPPP$ݬRɏ$V~gݬRSɏU~gլ  ݬ ݏg ЬR`+€A PS„5 ` PS~RϖW V77U^ЬRxPP$ЬP`QbQx SSa1PQQPP땢泼PPКPPPbPvnTTgPQ@aP~T~|Pɏ@P~f}~~SAnPQQPxPQPxPPPQ~T PxPPQQPbQxQQSSQQ@eQSSnTTgYTSnTTgTݬ=TЬPS*ݬP~~`PPɏ|P~fݬPSP-PɏP~fSP PPЬ PPЬRլ'ݬ@P@sQɏQ~fRRݏR@xQɏQ~fW4VЬTѬ  RЬ RT BfTBfR&TBRT@T BTBRЬSc~~dP"լݬ լݬݏ1UUc#R PPP PxPPPTP1hT?xRPPa2PQQPP }~xRP~PAn~S~~cPPɏ|P~1PcR  @P@$R@)RT RR TRR ݬݬ}~~STS1PɏP~gR EBRzc@b$ɏT~R 0^hݬPR^ݬϽPS fP   ݬR    h]j!"%)&*,+01    :;HIVWab     TSЬRbRPRޚPPVPKP@T~P b~<PxP~lTTϱ dPP SЬR}Œ~ZPݏc`*RݏcRRݏ|c`6RH-`(„ϐPݏc€|PݏcRP<@UET^ЬR`ap R~ݏdϺPŒˆPѠ 5PPɏP~dap{`JePnPݏdePPݏdSRݏCdCnLS`6Rf-`(„ϮPݏd€ϚPݏdRP<^UcT ^ЬS`ap S~ݏd}Ì~PÈPѠ 7PPɏP~dapf`dePPݏdePnPݏdePPݏdRSB~ݏ9dBnSR`6Sm-`(ÄϵPݏdÀϡPݏdSPP^ЬVƈPР ƌPݠ Ѯ e `1V}ƐϾPZZPU0ƔϤPݮZIP[[URVݮ ύPRѮ eC|ƘbPY}Y~ PUS$ݮYPRSV︼Y@PSnTXWϮ cZݮϹPS[YZϨPR[U[YZϔP ݮYφȮ PP U~$lPSU_PY UYPPZYhgx PPz PP x PPz PPZ x PPz PP  LS[ݏDώTY{ [ [Sݏ rn[1 U :YZP ZݮπPSPPP~/(_PYRSSYPPZY1hgx PPz PPx PPz PPZ x PPz PPݮRNݮUݏRϏSݮ4TYuѮS1[` Vݏ Z`1` =  ƀWP DxDwx PPzPPDDDDx PPzPPDD P[ PZ PY PT`DV~ݏϰTYRUGT3n Zݏ[ݏ~Tݮ RUTnT_hgx PPz PPx PPz PP PSSݮ RUϭSϙT`|Zݏnݮ xYݏ[dVݏCϾZPVݏCϪY<`7ƄϰPƀϥP~VƄϏPݏgVP ЬSx PPGЬRR~KP$b~Ь P<QxQ~ R&'RS RPSPWVUΨ^ЬSCT<PɏTP䚤QЬRPP @ˆ@QPd-NzU$$$'z0tҐmPՠ c5YЬЬ ЭPЭPSXXQtPPU Q`P_PUWPUS SRϫxTXPXPPS R= 1QTXQPX@PQPPSRݏ1_QT1QPT3PQWWPPiUVT1PPɏP~ϰRݏ ϣPUUݏόVR 'U1QT.QPT0PQUUPUTaUQTbQUWWQPQQPT\PnUUPPhap^iHCS RݏnT\RRݏRRݏ|iH~1:[1TTH~ϢT T  Zݏ}T T VݏfTTT T`V~KT!T"T$T-TO TSH~T^T_H~iQZvRݏCi€Pݏ϶VHi2„ϽPݏϕiX~ZVRPP CPP uQA&$|P@~ݬ ϋCPP P(P$,Ь0RbPPbPLC} }PР(RQ(RPQ$QbRPaQPl|W^ɬЬPЬV(P@Q i<$SS>}PQRPxxRRnUxUURB_TxTTUTaRxRRTR`TTRn}Р С РLРP<$SCgP?SG SLPPVPaRɏRnԮPС ԮPCg(X@(n($ЦP ЬQPA(S<$PR@vRQxQPPPPPЬPРQxPPTPѬ @bRR '1w<$RB]RxRRR[թ<$RBf][x[[աXQPQPXQPXP[Ѯ[ծ[[WSRXTPDVP6URPD(SW[P[[URPF(P1WRTYVS([(RծIk B@u&<$P@z\QxQ~ݢݫQPIX$Sb B@,)<$P@1\QxQ~ݫݢϺQPPX$YPSYPS VXT[TXV[XY$$V VP(I(H(WV[PﰑXPЬQQQPQ QPPP PP[[ZЬXPH(WЬ VPF(PQQQxQQQ1SS6+`TgQQTTTRUTUQTQUYYQQ1g`cUCkUQTAkTUTBçRS;;r;r;;r;r;;4444;;rr;;rr17xQQTk IѧTRTQRBB}~PWP1JPRPQRQPSTRTQRQTSSQQP<$QTAjTSxSQQ1xQQRPS}<$QTAjTSxSQQRxSPPPQPQxSPPSPSPQT:S8<$PS@jSQxQRxQPSPSxQQPQPSTTPP(X(WЬVЦSЬUХT1RxPPLxѣqѣ88j$$~TgP~SgPhPdգ8~TgP~SgPhPG T SSTRQR QPRPQSSP լ լ ~T~ShP([^ЬT(P n@U<$WXhhhW9W>PPWPP$PWW>:WL1+~GHQ~nndmP UP1xePPTB PnTRТR 2RP&<$P@n\SRTSPSh1GT PnTRbR 1&(S@VeX<$PPW9xhPhPTUk1P`PYWGP4HD?n6.$hТR<$P@[YUvPVYٱ$9$GL D>fe9$W hPPhPPWGPPPT@kh7<$P@5[ZYRTYPZYRr P1hTdPZ[!ZIVY2XhSЬVhЦW ($$$n$y VWjPRVfW '$$$n$y }V~jPRVhSSh(R *<$P@iQѢA @k@5 P1<$SSn SsТRSttSymRCiP@_~PWCiPxPPPRRЏ(ԧ,R0|4RvPW;PVPxPPxSSPSbPPSɏ S(},Т 4Ԧ8Т<Pɏ P@|DТL|P(@XЧWϦPϔX(ϴP(@((X@X@ϘP9$VPWP^ЬV@X %ΨPҨQQPP~((n(h((nh(X(X ^ΨPҨQQPPMШY$UEY?$$7@@eP+X@eP(P RωPwz~{ PPPTϦdP-N[ЬTЬW(U<$X 9,`Ч$RRWݬ ݢTP.1bRᴧ.ݧP/1<$SXS&HgRRRPD(G(PR1CF1[SVX-X1FFVXݬ  P1Hj\QFb\PQP QPZe եZFQS1PF:FP1SYFkYQHkQ%SPG(RRU\P_Z`ZbOѬ OxQPHkQxQQPQQPPP~~W P$HkQxQQRQFkYPxPPQPPSωPРPΠP}~PPݬPPЬT<$P@OWR9RPD(SVV<[~xQPQ7PPVU-VPxQ լxQ``xQ`U QxQQQU`V ¬¬գ SSϡWR1h|UQЬS<$P@QNVPHPRC(TRRUU'PU"d xRTTTkPBQVPUPЬQP@a+~ xPPP$PaPPPP}~lPЬP<$Px@WQQ*@APP PPPP Wc~VfPPP }~ݬPUfPР RRfDТSТ Tѣ RѤRc~g  ,X~gT SR RTRUP }PR,R}~SbP }YXЬSVSi1 Si .%cS<$RRR S< P bRYBVWxgPP S P>ЬUB@TdPUP dQQQQUQVQQP dQQQQUQQV VPgdRRRRURS| RQhPVVUQdPPPPQgSW ЬQhVPcS1 PмV1"[Ь X(S@P`ZЬTЬYYPD(R<$PYW@FWQQ1^bZFQAZxQUQUQb@~FWU[QQQPQAbxQWUWUUUUPQ1Y PV1PVPPP1PPP$!PWUW_ȻPUUPѢP~RϜ޻PUdբVUR{OZNVТPPVVPP8V1AQQP@3WU@#QPUP[PbPbТPТ P Q$EQ$LUPUPPQ $LUPUPPЬ SУ Ь S<$P@IT <PTzPмZ1[ЬSЬXXPC(TЬ W(R@P`Y<$QXVADVPP1jdYCP@YxPUPUPdAMDVU[PP>P@dxPVUVUUUUPP1X QZ1@ZPPPp/PPP$UPV4ZƚuQQP@fVU@WvQPnxPUUPѤPT=UUKդ+UZP,YU1~TܻhPUYZ}ΤPPZZPPUP[PdPdФPФ P Q$EQ$LUPUPPQ $LUPUPPUQxP<ЬTЬScPdP?UU*-ФQУPѡ Ѥ |~STѤPP XFWVݬhPTݬhPU<$S$SYP@ESLPCgRRPE(D(TP/RCgPPQD+E+PVUhPUThPTVмPw~RPTPPScPРUfP~SχTP|ЬU<$TTTwT T1T ЬP$WTЬP<$PPTP ЬP$TfDEVVЬSRRPC(E(nP>VR豣$TPЬP<$QQTQP<$PlTT@TQQPPмP Pnv Pώ+"6~ BLS32047.B _1+#[BLISS32.V047.COMMON]BLISS32.EXE;77dl.Ѭ ~ЬPРR RмR ,WvТ$PPR ݬPR{PiЬP ЬR.ARPS<$PP,x@OPPSψPSݬsP "RP.ݬS"P.cP|V(fPЬ ݬЬSSPTPC(RTixbPP^P@GP9PPPݣ УЏ (Ԡ,T0|4TPPAPPPP|ЬV(fЦPР Rݬ RPR P Ь RТP PS# RSϱPR8PSТPP(RЏbݬSϛPSϣP||SPЬR 'ТP LPRТPRRݬЬR$2o~R}$ЬP`P ЬQaQ PxPPPQP ЬR(P$SS!РQ% `$bPЬS T TTR RS?TRcP[^ЬVfWVkPZZW$15$ 2<$Px@TGPP $$}V~5P1$1gZ@<$P@ȹPWύPVbPɏP(|,Т 4|8PɏP@|DТL|P(@XЧWPVHh6TP!PQQ(SPQH1QRRcTPЬPЬQѱQ $PPRСRЬPPbСQ`PЬRЬP <R<Q<R<QQRݬ;PRRPfYfXhTihhP`R|VRiSc$R~RPH𛏪$WVRȰPccRDP*$"RTtPTbTPPФVfQQPQQ`QhQQPQQ`QhcSgPgPQQPQQ`Qh|GRVYUYTXXXGPР(QxPPI1YPP-Y`P 챠$$ PAY(ef6RPȡ$PP&YedPdQQQ`cdSSRbSPbRTdSSRbSRYPbRePРPPXPfX<ЬUХRxPP@hS;Т TSTƚQQPPQSS T$ePxPP% ݥϪPPPPЬPРRЬQQP`PPQ RРPСP ^nPnQQQ`Ѭ"мScQQPQQ`QRSb`RnPnP"QQPQQ`QSRSQЬPaRP0WXυWV,n(Y. ~f~f~f~LV,EVR 1gS<RRRR~fRXgXg Ϲ ~ff~ﲬg  (S~ݬc~Rc|~(cxRP~ݬc~Rc|~cxRPdPP ݬxPPP~vUXЬ VVAxVPPPQQ.PQQ"V@P<6A<~~ըVPP@,W <5!~F,Sݬ"PЬRЬT Uݤ8P-RTWh h~4SR~ϔ RVݤ8R|~WϳU}T$0RTWh h~SR~< RUDѤ8SѬV RP¨PSP~}RT|~W9դ8UU}U~~SRbbb }~ݬ-\YlSX,WЬSSC V$S1CVSOCVCǰVVUVTDgEgRRpRySiU0 ($ݬiݬݬ ݬϴT0 ($ݬ iݬ ݬ ݬ πh VPPVPP ЬPPPRAQPQPR+PPRQPRR~PRϫЬQЬR3QQPMQQP6P1QQPQQPPQ<~P'ݬ)P ՠ8 ݬݠ8YPeP~ݬ~ݬ <*URBPРSBPР TRPV'+?FS2~Sv7S/&~S~σTϻգ ~Z }~ϹReRB |~BER<6!~;<ЬSURCTTB~$UT BPURUPЬP !Р PР Ѭ <7!~`ЬPլݬϞ|~3ϩ Xz;WPVYPRgbRgUeЬ S ݣ8ϧPЬSh Qà QP^PЬTϬ66TOЦ Ф ShР $PPf|~R~Tf  :ScPЬRPѠRՠ/`Pc`PcR %R; Т8Т E[`:ZNY_XiЩ PjP1PTdjФRФUVfP}~բ~h E ݢjR4USRk|~~1բK U}~c4ТSPPPWϝW )ϣ *Ϙ~ P P~*W <~ <~E ݤd1ifi*~h|~R~ݤ h|~S~բ~h E ݢjR4USRk|~~~h|~S~ iT1p8P`8PqiݬnPSRCVV BPBVTBώPTTPU$XUφPYե8 XХ YXФ8YФ WXCYBWB RSP<2ULT xPP xPPЬSФRSR1S ,AMbn}exelRwe`R dLe@R|e?R d+eR[eR d ed~Ϸ/xSPPP$KP@ d SSKPPzKRR\KW7VgT>H*fSfRBUK~TRESf,n-KgԧKRb <4!~KP@bݬɚ~Rݬb~b~b~bJRݬJP@֢֢ЬP`Р QPQ ЬTЬR SS=RPPPݬЬRPQ PЬPЬQRaRС PQPR/xRR #ա0С0PS<RRTTR P%GPxPSRR TDw#~ϖR `SЬQЬPA? ~@/@R%<c~Rχ >c~Rx @<UkT$$ScQP@@RQP<]~(d<e~ݬMd~~Rdݬ.>ed<U}R 8TST<eݢ8]TDS+-e S=>eIRJ& && σ i4YXW@V4UЬSSie2g|~ﺰ~~W#f~У P ~ f<P̏PPT RRT'e#,hRPP RQQP@J"fRe,h~ ~TSiegЬP$Р(PxPPPPf3[Z`3Y}HX3WЬS VV$hhs U UUR]RPC(TLg:g<j|~P~~;"߲ݤjݤURiPiQQQ`kPkQQQ`i2ggS2=%0>~'ϤdPݠ8ϻdPݠ ݠ8wegdP: Р8=Р =Р PFP9Z;ddP$5e1|~ϋPR~dϜ:kdP$ ~PϦ  =:RR: RbRx)/*eRedͽ k :gRehSeeg~~f :ﳻ~~%fdPР8P~Р P ~ f~~@fdPݠ -ghg8dP`P': dЬR,<^~~ݢ0Ϝ ݢ0$XOWl=VffUUU~~gЬR2SxRTR!7~~CFgTR ,hTRSU>hЬP$ ݬPϼݬPP<1UЬR$P$Q>@aP@kTST@S 33;'R# ~U~RM:xTTSR}'TЬP`PR Р R$$07$ Rr'dS~~Sd('TЬRТ P!R7'dSb~~ΎSdݬR@Z[;ZЬRТXТVYY?!V Vբ   ~ݢ ~ݢ1U@aPcQ>@aPcQ>@aP@RТP@b @QQQPPP2RbPbQ>@aPbQ>@aPbQ>@aP@0QP@a@PPP22P)2Q>@aP2Q>@aP2Q>@aP@X~x~H!Q851HP PPSHU U< YCW1WV1 TU!PT1xTWG R~xRPPUPpR5xR~xTP@ Pݠ G PPP@_~ KG P !~ڳGl P ~$֮~~GGF P~R/G/ P  G PPP@~￞RVVY1SPHQQPUP C>~PPPUPZPxP~<~ ֮(UU1RHPHTTPPP[[HZ[ZxRVVVZS< YCW[PZPVPPZUqWZgT>BU$PTM~U﫛xR~xTWGPݠ [xTWGPPP@~RZZYPݠ ϼP S ;HQQРQA`|P~Pf][/Zg3YXjPjQ>@aPjQ>@aPjQ>@aP@U-PР$WP @exQQWPW,kQСP@akP~PknХVS1CeTTnp~C~nhT ``VTnR ,R:+ݢ0ϩ~C~ nh<P@<[,PP`K`R<P< QQPPP<PPPR4OPP`TnVT`R<P< QQPPP<PPPR -UYCePPnOMTnPi:5~C~nhjPi i SϳCe!~CPCQQPPh;ҚVS1SnW15 SϷPRKR8%,~c;}PRRR~cݬPP׹PQPPaЬQQ Q wRυbPP`<~`Pbm TJS+RpP <_~-)0Ϭ b PPPccQQaNbPbQ>@aPbQ>@aPbQ>@aQѬ A@AdPP xPQP@dPP`PcСc`[ZDYX+WGP5Р P P` ) ghTTiTTjФTgPkhTPkQPQР RiRTR TjФTV^+SSZ+rգ3УR-V V Т TT TjФTTjТR <PPVգ !У UХRԥRâ V~ ϼТRcSЬRgggg\ppFVVppp5ppppppp5/Ѳ 6Ѳ0R%$RRRP R5ЬQxPP|%Pѱ(@/ @ PPP ^ЬSЬWxWPPD)߈,"()W&ϻߊ\,U,W )5g%%UxУ TVST VVPbS0PUE ZУ(RУ T VZVPUQQQP0PPУ[PPУ[У T VkP@fPPG XXP~P^W-U)~PPQQQQQQP@ ~9WW%У(PxPPYYW Y~~ ~G0 ~W 2?T|~~S|~ϊ1|~ϱCY|~~~ϙ1У XZhZPPYP}~|~pZݨ [|~_(#|~Nݬy1h|~7ݬ1|~( ݣݣ  |~k1=ԮU ֮~ӊn NnPP PPP!2<9!~$x XУ PР YinS|PSZPxPPP07PР(PxPP XPxPP PXУ YYPxPP PXZ~*ӑ2,PPР(PxPP PPP PXУ YZan]ѣXZOZ XУY>УPQС(QxQQP PPxQQ PX PXУ Y~Xψ~ PxPPE`pU 1FbX}ݢ$T~x4Pɢ,P~CŢ,$XZݢ$1$P PXEݢ<~ݢDŢDR Bk.kR k'hTЬS Y֊TAW \~ŠTY RﴊT xRPZP~TZRZ P~RuTTW \~b[nX1[W \~@Ϫne ^ЬVЬR<׮xPPP<n <PPn1YZ[S1eXCY C ZX[0CYC ZYYC Ԟ~C TYxZUdWxUPPWWPWTX~~琢DSPPP@Y @ ZfSP~{ fU ~TR Pn2[~ ~ݮܜ]~܈nUWE UWϾxUPnP16VdV% W UVdcW U 1 xZWdTxPP  W<%UUXU X[ϺUX~~nlSPPP4@Y)@ Zi%@ ОQxQQ fSP~Ϻ' 9% LJf P%W~T~TxWPPf[S[1u[ZЬS 8Vj~WPWMQPWQQYУPX&jkj%HLRf Rf8.PRf?fRS~tkPTTVXxkjhj^Yf~WnT%~~ﱇ~H~~Yfϔ"mT\UfTTRRRUL PfTPTTPUjjUfPR~QRPQQYYT(~ﳃ~~Z U陵YTUf}lX类ԣP%gWV~ψPS~PUf;US ЬPݠ ϟ~Sgݬ~g~~iЬRТLTf  TUSݢ OkTPЬRR  xQQ$ xPPPPTS~ϸPR|k~Rd~ЬP ~ c~~!c~d~ЬP ~ cЬ R+-I R1TЬRR*~3PS~Sd~Rr$~~ ~~(~d  ~ݬ— ~ݬjb[jZ,YiϤPX~ϚPVRS1 TWУR1W S:ij$ ~Rϛ%UUd PUPUIiBXVdh~~~[A UXVd4jUd%.dSςRXi RPdТ,R14|cSSb1 ijSTTU17S1PP ~Uϰixݥ /P }$ ~UϒХ Pf`\idݠ U-P0$~Р RRP#R'PiQ~RUϡ&$U1xPP{$PSPPoURХ P_ZiR. bT)T~YS ~~ ~~ ~~U Х,U1Sij  Sb^PRRcUϓɚF ,RRc! <~~φbRТR<~K'dPP`2 %$$ $$`PFTdPPPPdQRSPAbddQASdAbddQSAd SERЬP< ϋ} ~c~~c}~c} ~c~cbbPPP bP@b>ETd.d~n~d~\dSR ~B~HSRddP@dDWЬTT ݬTTUUSUUSSVVRRRPSP@PgQQPP7TЬS/gP@ggPU@ggP@ggP@UggPQR@aggP@VgV@ag DTSSRRdPBPPϘdPQR@addPS@d@addP@SddP @ddP@ddP@d}|ϊVGƚcCZCRbT"R<S< USUU<$~fVT<SRϧbT(ѤR"< USUU<$~fUST'PT< USUU<$~fTTRσ<ЬRRK<SbT)ѤR#< USUU<$~ϡUSTPT< USUU<$~~TPhBW^TЬS(VVTRTgPRPPTTL V)PP ЏnԮP(<~~e^ Sfk x T ܠab&j&ܝRk Bڻ}B goܯw[*C$K=tcgy1U%36|ꠔ2̱mD5HPrʤjw]ֺCXZ^--Ӎ HA'KkAO }LT﯌ۭFNkbL\^ a~һovoQ~}P )gYe"Go|BUWʥcscFWȾyg+D=v$")D)mvNpZ9$Ѓ|8\oo:` ]fLlVbz~ |iЎVOW{dm/H[+M?/hd$'2r#35b&:,B93-:^l}F7\=`*Wsx ?raSQhθ*x6U  ZǮ%.4w>!\($Kv Ttw JZgf*;o),c)կ]nUL[ q z`M%(z(0効L ;?YҪOyvʹݼ7lʝqNֺ9Mr>:(lg25-6x8roV7ǧӁ..E<]Ra'\x DMV;WL]e-VhQS آ?co R⬊NFqe$hlwCe6]Bg1ʼ#3v-w97{(t:mfq[5›W z͉YZ+s[0_5s.~FJQ 5fQo-9- b"sME|fRu"W'S51:{R,hݞs$@rq2cϓ1yLA ɇpm۶4d]o@0[X!ÂOɟOf, Mp9655#]KN[ByrDm"YYkq|qEápQ lI$`S?Z G5jj8.P_c_] 1+U3x[QIo)F"ٮ PLWzKQOɉ*uho_kiQ_]~m.n;D!@DzZV=h͍f+'_$4I=ێ.>k Znxh!HdҵɑL ZApTʴɗ{ó\ujAg+קRG_2K[%K 0?ZiH=FyO#p npbMRpfXFeM;_NvAP1F8mQ=1ԴJ=0~+1x?k#ܥ'k+A.0["u?IOi,2壙 P%PIv<ȸUt4N0ǟNg`%TJ";;4RoݾSJAQXF-=1܌cK2 g$rۙNfadr}=]O"ӦmK=O,r>ըswrPjz*0 }&QiU?v1hJe_ǃmޤ,;RdUY-k}MQ`q5kuB`gᑺjՊꞭq&&rf1|3-u*ֻt`ja$07A;ib~a,"Ai+U;P-;w[pK;q+ƴ:B X4JnqVUS'Ṕ%]!ZՄ/jeƥ]NX\ah$fUs,(Ue<L.0GR;;AQ@AupVײAqEp)Y዇c෣_k xB4X,6zJ0k,栻[Rh6iܪnP Jsbc⑻J$?;}$-,^q~8OW3dx$ S#B3򝑄c$Ee梚6V,VyvȤ˭SkBH\ ڬ1*{#Ƀ0HgP5OA8%< FqD;9[{$7k`Uf?Mbs%$}"B12ľڿp5|o >RoB:aC ْ7]Z.s!1{DQ3 65 lda "ZkFq@oJh3Op,zwTVx'$ Ęf蝼f(pnKHN0=G78'n臊NsG+"V *d3\sHeXNLf,?c8G ]?מ/ =ALXQPx0@iP8'3eGZ9":Kꭳ5ň{,2X0Mn: 5o<Ykq9&M:COSN<(XOW3 /%PA!1S #>/vdm_ͩ9T,IE.>FF33 oɜ@}SZ+CdfqݱڗyFc==Ja癬 hrtLZ=|.;|pH!vkT-p}[MM(?SQ¬~^%0D;,Cge)LSA;q#;1H^XAŖOiQĞbֽ6xN-Xƶ겇0ʜdݾYۀ{gu%#+gaYG榪*YC?TB *َf'\)ƜZRjXKS|Y6pd9沺rSD{nFlVq-0%ȁ>#}#S/jEܡUOrwp,-^Y Յ^_?bIUjp @0Iq8Qd t/Qhة"`i9  u +b\k_ZX%Mu6ٗzK*߃}S*1;p7uZt |+ HG͟OA,sб: j"O :q+`nfLdu ɂ[q3P}@nj\nG$@<";qrű)c$.Ub!]rݔЁ\.я,:n^t(doVKWrSosBrʯ|m!YGG'"f i0vTy]\JO4~0@_AjMKYoCrRPmwaΥ2!hl5T+IYX2'[\ZqLg??[B\Ol}lOyC̖J$ NErl:YqqT>O{lE|@1wzfՎ1 #՟ sضܱVVϬRk9;ߙǎ.!@yn> #ojU:sA oF窫1 I{"y[̐t@h>.Yl- f-1ZW1nIiXBv/Xmv>0Փn$"Σ k ڗhOFr d/~_Xx6l2|kYt(wrlGҼMg׹H3!8p2{ڈB Vw _QUt nV}yϤ0 9qJߕY!7/SZ|=;dcDܗpɰo!E,{̫EM?+pf7y=Bj 5-)l,tI?=\,ۑ:)48XvA{XZqT?%Q%TH@PG!]r4LpUiA]@!s PϥClsU׾%۪`kfb|粈݁gPDn!3J&͕hv`f|.۞+>TR8VV ĆV4!Bх9M%\m/Z&c;iw|T.yb= .V/7UDp'whS 1Xq Jm1M)/+.Hmᯏ3@d4zMV\B`.\mGkA:b/R̊ؖ>=3p"b>Uީ :*cWvP৛ݽ,U[~ TkTdJt䧲F-87YS 顔>񵞍2ahwFЃh[Iz<<H'7#lCX +(?}O<}L"~r= = $fJ)xѡDLx~<״LjwȰZN顦x *8|>oCnen| ޮ-A9NQѰuUoM1IB|Qhvz8O^ltUƆ5R+9T W>}ք'W{@csW}"ǹ 9mY㵟/DQydc CO7mDUɗ$6[LsF{)ݲcqP?U#Ar6;H}E x{o`¢d ϟͲr Y13/)̺@*M`So]=HI='vqԚԷufVf$1<(Hr8YCW@ c0SYhHBߢiUc;s,#U;* W&2 X2sN IJ&еS#ꕨSZsا3BD[:3YN@OFz.}R`aQX+M(T2^.]V$_Cy6S?ksx%[?2խ)2aml2\lBd)1bjUo%mr}gtBIdd$O%[!XHDPuvbge6m/s0psQ70)+mh!P)~Z җlёL."=!I"Hόl;~˘z 1 ֯%RhI"( A+6"BtSV;|VZ=N$ 4q'nˠN\7E/J V* SeJ r^v|Z8M^h(p`hq!lج2!'nౡq9‰4.vѡ[swSFȕƴK!v$"9jl!22!mTv5Dgk+(c"}'Ohr6;fz|N Їh#4& -F'=&w4i+g=$or_?]^ ;MoԮj&]HqnºdT|'L1HM}UXҸUUŶ׀UJMDKP%=D\ Z;XS!yCL7]cpe=˛B"DŽ0Mjؼ99ynNT*Κ?Κ?vIsH$ZV}n{j \T{Jb"bK\{$t/$FUJn L<#b d }7`l6Cp9 AG޼Z?/1|߼V ׭EMiK X~ = Llt RpLB (:Z.AT\\%{p.5YȱNT4ٰiJ~rWYx2ȰZȠ]oث02u3"l;yˊuw^ ƃ =%U7Rqy@c .mk bqDe,\#0vTǹR#ƃ#8ALRŇq JƓ'  u5 ]o$|gKT}s6N3CвS1ZXE|9Jqy3?+&[@exQUoAǦkP;ϛ4ekIMFً9=ŹZt1&:B\FiJ.,Ds_HP㠍L;xPVr mжNu^ N] $A$H,LI%!uúz'&U!tV;"Qio|sE騗M#>ȀUN b7@rr9A ͭx)$^DB4E=r ZRWbrW97]J?~A'mZ4ՠ4"¥f'hE(]( ;%i (i7㑛ih[]o4g4^K~,%w ,tKgw`Z+Ŷ~låAl%ͪtx9Ptb/ؖt II dv.ޖ95D|4|M~&.| )t 3efMKOP/ﺅEבhe3\AxyYQDVbMj~wctWȧR}g{Y< J`>e1*e( xE|4i lWC3Ĺ]x_əaLd^ l(Lc&t@}L)5 ýeup5]fq ـK bf 68E8 B8in>JAc~~݁AxuaW2w+ý@PWoX /ryDՃ%`ow$*{9>_:2Q`3`[2TCđfqlaKa>p9LVp&־XgनlWꄖ{Ww]VmL 6fop @^ԣ`hTQg @B{!Dyb­8Zi4{i /dݐ KAU泤dby-XJ -$ U }fi Idz)0!Hg2U%]ZR͌z3*MoIr S*̐?V7k5U uHH[`hE3x`&C9+Ѐtp| Tv|ZLD5BlC !|r?%]p{:*;,Rۻ|7 d?k' ;!bLp ˓Iz%h6\C6ۧt|j'U[^z*uiڝ+ڻ|(kg5yW<Һey;*7`zhlX:Kk^n,uFNGdce·U+.(lܚ Hj1wPY҃zs{3!Ј͆6zTsmyHB%*}v1ܕק/^n@|7ggQB Ͷ+E<+BU]T ;S:PwlN嶩,IEk8MȾ^?ėqtt7X ةqΚlC}鳊^>H/ N'D\})x$C0sJ$AҪ}1z,FN1$hJ1UYlnlK`BCl(D{-t 'KoXυuQ @3?7B h'>˥:9o<ң%M?;K!m2h6Zx*׶t-|m8Ka?_'[{̉DbR~ԇv$-ۍ|e)klrv_v\F L9yJ gMcfӛ4qX#bh.5zi4V?-P%҈{ a/OM?!(Ov,l/[$<\v޻to?Z+fȟ}0>%g˽OuQM4; 05(ʀ b(o5yՀ#bI٩Z&ƪL@HO%4\#p|#Ce5elB=>arP4jO DP]H\8ḝbNU{lBS/BTY,x> ,55iԫFΞ@Y 4!NbۃO eG(?fqlJ/C*-jfo4` p %l,ƻ}@B\W>|# 3%ao< .ݴؐ:$"a.ޮ|:P/}F& ooUHf=B&, LM;o ΋y󹨸#,'ES# ] jE)&fxx2Yh3q+B^MC˖qny%u7tdef)/$Ȯj 0W 9KZ3#D΀`C7ô,"ltj8 X*$+̙S!5DW G ^hodb rd|>t_ f\^,Y0X4]0hCVkEPoȯV{ȣru*HI7Ľ;QV6 Ȍ^ 򝯅[v2\ qGluz߂4O~}R=[Ta9]Cnc 6`\Ao K ,˽)_>ǫTa3mF]sѦ.璿,@%x_y4M9a~?*e3+>Fxv?:P+wv}@FhLn /,8%e.iĕ㮤OٓzY 8 g&s|N%ad5~95Drr71u!Y"{gxF,,kbKkļ|ǀ-{ӑ ae'imؽ%v㙒kEIȀ 'EDOHqB\[V^*V+Xܗb p(\GGerЛu &S2wi򛭽tO:pbg (|}~4"r HpO2om&Q|f;}ω^=*u#X2Q&Q iGɇ 5veL.nIC4[qZ:G Pq諾N5]bj ݄D}2yeDe0_cJ bk|G8_XdE46s͈ffyL^Ey>ce`y#f?rLeNs }"@ FAئ O2{5sH.4oE/Hy:M= W ;:QM'22-tFy]bRZ7l(\zk/)Pc l%?٩Aj .S, k\[xp7 CUvαUa%dצ{9=k1r˳qFZ(ڥ̤Dʼn[$Ԇ5N0ԌcWYO]]`|,'eV,_Z>H'#bSՄq;!7Kw[7%\~ GtO采|$ϲTzzk beun0C ohF򷺌*1%dlZN~w m S:zܴ&\ZWn7P):-b$\О}! SJ1ʢpKǡ?: $3'!BsKy!x|$"6XQU7j#1hAfR w@'1:ۀBDߘf5GH˷Z'׽r\&|s1`)/B`ͮSsV@OK2,$1=.c:zQ`C巓Cas-+/ousMu͉ݪ#A=z^]~@!fD'_{rCR45i ~|5xz ҽm9 V*9 BG ZN-n$wK16xf}i D  \ט~7;E -hy ᪅M]t2LM_\k\E[tX:NmamXt*" ^̣۠;YgYYZcz'֝ r,ac}v`'^f*Oz[HAp&d=o6_+9K ,X%esnp.#Y9.M0S}" 9օEJA"pk W@2G.'O݅Y!B0 .̃S8vI(p~gU_yӗbprEGĖFkGr[sA$T$>1"?0 {Nq?SGFm2VAmk̍j1?9I0,0I/ +sZ_/O>wxFdpA0xBHd/Oy)pBRfKL vTWcSAU NCSZ|Mz;;F52|\%loǥc3y^a!zI%C 8z Wgh㘃ָعi"/1Dzen>[?Um_EŇuBS!ݤ=ElSHYP7d͕&YH)%vu# dfLȮ"#Lw7HIR#ǵO N.[&-[6%t٣u XȟƼ ՔuWzXm 6w {Cͥ~8]Dj/|ۺ|^hO&m㏚@HЧ//8v ^BNڇ tDg~C _(8?Ɯ[_;nn&lT>~ 22G8\ShR9xѡ@Wʍ'7<Ĝ4+PmXu[HNRr"]U t'B8'Hv:. DXIΎ|/mk#\P*&zWΛh628Z`۸i#xh49 q "mV$8F(Ry ELkp ]b+17h+;f֩/VWоRD+k[hРN@-F?(7:дO,e\"NT ~e. :|uNXz@X Ǝ;]Oc8.=b+yAR'陞jYtT 3Bv&km z6g0ۻVW_2^ ʸu9bV$ J$]6#->1\ro@px6cWIo5ֶj%|CK#>IpƊdDUE#E\N>fX4ync{,QGΎIH ]x+o&~="{zxgpHߗr: ׉u]mD&:Qg>m^r5' -ѻ6Qs%HrBgGd?ּwPqF.Uo;6`@_N$0,xgYCO'NBjP_AAv 8'6h24ΆB>+l4'0?^000-:@ ^u *^ιҠGCba\yg,6}GKڦ9tURD$wb-EllNK37/C/Ϗ{Ɠ$D7KW)h薚6wc; Bd5\35gddۼMȚӱATT $V5^cwP`Fk+upho]5n>~e1\]Sf? ڞ$֜uOӹO> 9v5;xT6l1՜$b5 캇 T!/zlT{kIGFYBH~^7doyƒ]7Gm֗{^m}KաӗU.i1Q*CjgKu+=4ex8ĐD!5U!kABjhfs+@"ʴ1*%Wl1/ێR5?'Q-@(cb129K~(*:Ds:fD3cR5mH_?EGN2TϤ 9hsb]k't+(DTϟ/.4R`ʨ>D\A葠|9.}duoC2*Y]FmW{{۳Oc/๙`Ħ50\V?|}u6黭uʹcr Kty1tgp̘ V l *1pKlDg ƣT4GuKgbKxIuq^/ӱSJڀ \hԎ<яi-\r"-Cxc kV}kU%d Upy!25vlwFDi221ʼnHm8pn'$1JN׳QHawk[uny>k(VPgq5 >m/GL}{ؒ:L(ghmZ=jZ簸D_@-01A0tY^&ٓ1ہUEIVұ"(o;jEj\l\nd\h38N0XItؑIRkսJd!U:CSאJ\)6ZKeM=Ʃ9K\a#OA;3p7tY4hig_t%t8%=|-̛/s^ ua19\gg~5W=W13[ZljӶn8V`]JV$WxK2#3!oCH('t4֢)(;y&iWTǖJn3g@R]#G]0(:m>(rXmɑ1#<td A#G n_ Bi1\)IpT3eyD sKBP+EQEN DHg!A)\.A| b{|<J'k]%-"k@R͊Ѐ#{!ȂeY],air<G xhKc:1QfFeJBEkL'ZǹdVIo;1Qg[`ylL/WHVfMƁ"WY҆bԪ׽'"(2qT- )@8=HR9og̽k?翈[vZu0Ev*3sK*d&xw^Jհ@Y` ?Js؂Kʵ];wmv{ `*VMXIعe3@Fe@]_g 3#a QD=S`}CCБl,4e H:S/#\J~zهlvxZLw@ŕz2>'wbu̱i6`s-! l8 8rIC-..oڈHDeAftj~dT/$sd 2?9h}@0`gŔY2)N(b~A"?)v4ѝJF'z瘾+K#֌Jo~vW_tN[ս)NUD9m ;0 _u2|au2;{q~H[m`A/\ގc&LZ\Wח֤nIa/3}m:R?5 f3`L~23`lOK㝣EL;E@ghǮ>840)J!t 'aqpkYRb, 8}&˚~^ ut^DrA:|`HoT D++SLlZ!E2pN,ѓfgU&99 11ql~^0}}vZzm-E[9lrI?h!'jE/; 2tp:O2=G-N_3krXt[D›@ʄ785 jAKG7(xEsDm~k459]jgMԵGRvm@,Hc*\ ߳İnVu.8F $khB}AˏF4F' ָ3sH VhF~EK+oANF Yw(s ^()l@p(Eߣ0xLHCbl)fZGAE av@}eB/&)5bB,V/T rV=ؔd܍E+k̆;ɇ_4Jh5Cڒ@Õq /ꖤw^0eKY"zg\Uq l`6O fДR۱rw`dѥX*m41S5_+>(^HZ[E<][jBB4 #RAҿ~h/n7'1 0ya4|@8P##. TTJ#˫oN>e*Bfj?jqaO萌n l1{&݀$2A`.#Õ@0*T1@{Oo])LElٳ' G sHY Z?iB@Pբ WN؞%Yxs,e~cLb(2*!%I0*7ڸ`E$y̎ɷF0u`lR܋ 蕥~^Ñ9"T+ =-z&r4sn..KB˄!vl(I"G٘)%)|K o\R8J981=-V.G ߩ):@Ǎ^PWU49Y.T>+* v)ЎƊ&कyW5™ȣBj %b.^1HJC x~duR+ c"CRԱ/Pd]=Q n ?dJ:oY.蟁P\Po=,WnXqUh?ٯ| +F:yh`6ź W5uOV`P̮ Q3_t+7-j:eNO]T 4c*i>MќDWuR*ZQԟ?#a^KWmѬ\Av=wjQ@L;j11]s@RmfrfeI"iD+ Wo)N',=Cf%ơ̵?si256qdyAS5|35IWXd;z}/̤e䟄IkT͆r_3CBvR7K[|eq$c8!Ms(jcwi(s4baA5{hxs)e@S`SYS f{A[tM:+پ`I5$$ $J; v05o<i8=kPO>yV4]1No%@ Q\BC6jyܞOTP"._JA,r irkvO0JʖERe՟&pYUgwÑ=Z/iJd6?%K ʹc ~Qhk4.&63'^8ŏk\$aNjש),-*?5vEg kA|P%,D[ &LAlhh:Ńl"8u$ `٘ec \ZwT3hUEloZT="ߥ ;-p2f[jI a j˄I)5zOtcOsee:77k^4}(NV@iq\x aAG-9q3! 2yjؑ:Io;~=,D$åNiF#|VD:8TX4PG({!#bjc<,\#)ߒ?R'DXJCLU`dK@~ (jEIQ~Zd:g%5XR1>ei# bُ'?}c.%!N!>yG#95Z$ :5B1haDyrd>6f6pJzЌ(*{2l9+fbb[EXl;k&[2?g>bԂ'n/zfC'sk&UZ3jlF؁湥x?"2=V&4)p%ooFпO~R F="K[?Y>Ro/'0K8SE_7{RPYʼCzxE0PPr4f) P9_T5J-(.f?BG So Cmg0(U?h\YZJnRw]C^Ug 9,sjc?(=ey[FC:%-AdǸoE< w3)Fֺň X?q8_ MpjT)0X>bH|T/:)\rE\ؐ@8`Q~{3H%@Fv#@*~]vlG}X~\X@l?`&1s ?[Ԋ( YKo1£֭}$6Ȃgj0YKժLv-x0 m4CH9ASTKZZόM.bFv~A/ASnt: JnJJjzj=m[Usw< ڌ,CJ4/@jLamTz :qQ{6"$o)Mv?lMkKa95&Fgܡ[d'u 6ܾku[IJO=PWG( n_N8RN7o>&x2϶h:>@`5V *&o['QȎQoБt l|_Ew5\=]9trCv<,T|>JNhȷO_㧌`!ҌQE7NVO/Ε+ @K΄:ϰpy'v\omaž1_r- c> 2m!n>Ia ?v%#,K8ܼ|U{oc>(AQZCڙ$+9AL\Äg ~jĊ#'=||0mg2}LI*쭠H5⳹j\0F6\ϾC ]ȇ#ݗD^X}q=vIQ9ȳ͈"f;sd62eJ*| 2hꁾ}xNϑITZT҅}"J: %*5hKY d,"MzYH׹{nt8& ^TcU=td[P?ߒ,2Iq-HY$lVuZ99BYֺ 8OzcUg0Oq ڋEVLXT '٪bF*m"`:ZΥR- $[[Q6}_\*oa â]]EV@cRƁ.8KXkB NɌ#e^ն[\,=T\<0hGre( j!A№xz6ẅoX4KG`$ 9[TlB/JMI=`aʀBPORjzv4 ]qM- I# YƄ\`7V`^ƃ+sI1 %ۇyP+<@LH'*+K5"wg6,&2qΣ{ұ,lN]d؄Y+VDBOhg]̞r\j: S̸Φolˠ䀊;Ka3tLf\vifE"вSSt P0ZoS;l*d[P#xg9BQE)ҞbQ|{HCH"])avBDzQqCo`R7Gî 1S9 *R+D" $(١9 x -2: s:fHKNh|m6Kqr[?-m]:y =hH7 N^2w%tpY"<v%y/6Z&2м.xzN/;+NE5) t˯ݎGMLUwQ2hx^Xe+Kv]"RA?N5I-'D9sD7\+T&QS-:͸BCOu]nk,),0N@ N.v*~{7!;Cc AB)Ź#>N^r~$~kz;I&{w#CKȴHy;N ` 3RhϥdpsZ--&6| jˏ8v02JTM2-ȋiv C,V&.[%wE}>jSGOn 0YnzڀeXt@z 2R VሚPsgg׾#6R>_\x"W51 yU%0\+ʑ^2nywvF G7m+PRiU|$=.O$IQ0>`ɢ'[g6,Z'PG vg!RBږ. ݇/FԨm_4@_`ۺ7i,zmxzt\SM259_ç0-B^tt%wC&ο_q0͑gesEd&9NU ȁL$=Ut͜MŷyqԪI!\[#lUlɱ7=(̒;AΖ?kSEzH o5Pي R]fjl ֩A˽8CXR)f^P@ikh1dJo 0FdˋL NG: zJᵎqbxėu;% Ū Ds<~d+'C,*T[5Lt2Y@KEUlчz<ЪO!ʿYgٿawSgCGtIX ١v`Vsy -$xS^sD>5kh:q=! 3-Oct-1991 ! GES ! 5-006 Add /[NO]TIE for ALPHA compilersJ! 25-Oct-1991 ! GES ! 5-007 Add dummy qualifiers so BLISS/A32/A32 works.L! 6-Nov-1991 ! GES ! 5-008 Add /ASSUME=BLOCK_ALIGNMENT={FULLWORD|NATURAL}2! 2-Jan-1992 ! GES ! 5-009 Add /ASSUME=REF_LONG=! 10-Jan-1992 ! GES ! 5-010 Change /ENV=NOFP to /ENV=[NO]FPG! 14-Jan-1992 ! GES ! 5-011 Make LONG_DEFAULT and REF_LONG negatable.D! 29-Jan-1992 ! GES ! 5-012 Add /GRANULARITY=n qualifier for ALPHAQ! 18-Feb-1992 ! JAK ! 5-013 Add /[NO]SHARED, /[NO]CALL_SHARED for MIPS (OSF/1)..! 18-Mar-1992 ! AWF ! 5-014 Added comment.I! 30-Apr-1992 ! AWF ! 5-015 Added BLISS-64AO syntax definition. Also3! ! ! discovered that there is a 31 char limit for ! ! ! names.F! 26-May-1992 ! AWF ! 5-016 /NAMES defaults to lowercase for 64AO.8! 2-Jul-1992 ! AWF ! 5-017 Added BLISS-32AW syntax.<! 13-Jul-1992 ! GES ! 5-018 Add SYNTAX_LEVEL for BLISS-16.E! 14-Jul-1992 ! AWF ! 5-019 Added BLISS-32I syntax, modified type4! ! ! declarations to better handle the increasing !! ! ! number of bliss compilers.8! 12-Aug-1992 ! AWF ! 5-020 Added BLISS-32AO syntax.B! 1-Dec-1992 ! GES ! 5-021 Changed GRANULARITY to use keywords.@! 13-Jan-1993 ! GES ! 5-022 Make /NAMES=LOWER default for WNT.1! 25-Mar-1993 ! GES ! 5-023 Change 32I to 32IW.J! 3-May-1993 ! GES ! 5-024 Remove extra /LANGUAGE keywords (AO, AW, IW)4! 11-Jun-1993 ! GES ! 5-025 Add /[NO]INITIAL_PSECT2! 15-Jul-1993 ! GES ! 5-026 Add /CHECK=[NO]SHARE ;! Keywords for the /NAMES qualifier for non UNIX compilers.!define type names_opt_non_unix8 keyword UPPERCASE, nonnegatable,default0 keyword LOWERCASE, nonnegatable7! Keywords for the /NAMES qualifier for UNIX compilers.!define type names_opt_unix0 keyword UPPERCASE, nonnegatable8 keyword LOWERCASE, nonnegatable,default@! Keywords for the /CROSS_REFERENCE qualifier for all compilers.!define type cross_opt_all keyword MULTIPLE, negatable7! Keywords for the /DESIGN qualifier for all compilers.!define type design_opt_all keyword COMMENTS, negatable keyword PLACEHOLDERS, negatable:! Keywords for the /CHECK qualifier for non GEM compilers.!define type check_opt_non_gem keyword ALIGNMENT, negatable# keyword FIELD, negatable, default$ keyword INITIAL, negatable, default% keyword OPTIMIZE, negatable, default keyword REDECLARE, negatable# keyword SHARE, negatable, default=! Keywords for the /CHECK qualifier for 32 bit gem compilers.!define type check_opt_gem_32! keyword ADDRESS_TAKEN, negatable& keyword ALIGNMENT, negatable, default keyword ALL keyword NONE# keyword FIELD, negatable, default% keyword OPTIMIZE, negatable, default keyword REDECLARE, negatable# keyword SHARE, negatable, default=! Keywords for the /CHECK qualifier for 64 bit gem compilers.!define type check_opt_gem_64! keyword ADDRESS_TAKEN, negatable& keyword ALIGNMENT, negatable, default keyword ALL keyword NONE# keyword FIELD, negatable, default% keyword OPTIMIZE, negatable, default keyword REDECLARE, negatable keyword LONGWORD, negatable# keyword SHARE, negatable, default=! Keywords for the /DUMP qualifier for for non GEM compilers.!define type dump_opt_non_gem keyword SYMBOL_TABLE keyword FLOW keyword DELAY keyword TNBIND keyword CODE keyword FINAL7! Keywords for the /ENVIRONMENT qualifier for BLISS-16.!define type env_opt16! keyword EIS, negatable, default keyword LSI11 keyword ODT keyword PIC keyword T11<! Keywords for the /ENVIRONMENT qualifier for GEM compilers.!define type env_opt_gem keyword FP, negatable<! Keywords for the /GRANULARITY qualifier for GEM compilers.!define type gran_gem keyword BYTE keyword LONGWORD keyword QUADWORD, default&! Keywords for the /LANGUAGE qualifier!define type language_opt_all keyword COMMON keyword BLISS16 keyword BLISS32 keyword BLISS36 keyword BLISS32M keyword BLISS32E keyword BLISS64E=! Keywords for the /MACHINE_CODE_LIST qualifier for BLISS-32V!define type machine_opt_32v keyword ASSEMBLER, negatable$ keyword BINARY, negatable, default' keyword COMMENTARY, negatable, default$ keyword OBJECT, negatable, default% keyword SYMBOLIC, negatable, default keyword UNIQUE_NAMES, negatable<! Keywords for the /MACHINE_CODE_LIST qualifier for Bliss-16!define type machine_opt_162 keyword ABSOLUTE, negatable ! Only valid for B16 keyword ASSEMBLER, negatable$ keyword BINARY, negatable, default' keyword COMMENTARY, negatable, default$ keyword OBJECT, negatable, default% keyword SYMBOLIC, negatable, default keyword UNIQUE_NAMES, negatable=! Keywords for the /OPTIMIZE qualifier for non GEM compilers.!define type opt_opt_non_gem keyword LEVEL, value(required) keyword QUICK, negatable" keyword SAFE, negatable, default keyword SPEED keyword SPACE, default9! Keywords for the /OPTIMIZE qualifier for GEM compilers.!define type opt_opt_gem keyword LEVEL, value(required);! Keywords for the /SOURCE qualifier for non GEM compilers.!define type src_opt_non_gem! keyword EXPAND_MACROS, negatable$ keyword HEADER, negatable, default keyword LIBRARY, negatable# keyword PAGE_SIZE, value(required) keyword REQUIRE, negatable$ keyword SOURCE, negatable, default keyword TRACE_MACROS, negatable7! Keywords for the /SOURCE qualifier for GEM compilers.!define type src_opt_gem! keyword EXPAND_MACROS, negatable keyword LIBRARY, negatable# keyword PAGE_SIZE, value(required) keyword REQUIRE, negatable$ keyword SOURCE, negatable, default keyword TRACE_MACROS, negatable=! Keywords for the /TERMINAL qualifier for non GEM compilers.!define type term_opt_non_gem keyword STATISTICS, negatable$ keyword ERRORS, negatable, default9! Keywords for the /TERMINAL qualifier for GEM compilers.!define type term_opt_gem$ keyword ERRORS, negatable, default&! Keywords for /ASSUME=BLOCK_ALIGNMENT!#define type block_alignment_options keyword FULLWORD, default keyword NATURAL>! Keywords for the /ASSUME qualifier for 32 bit GEM compilers.!define type assume_opt_gem_32! keyword ALIAS, negatableE keyword BLOCK_ALIGNMENT,value(required,type=block_alignment_options)>! Keywords for the /ASSUME qualifier for 64 bit GEM compilers.!define type assume_opt_gem_64! keyword ALIAS, negatable keyword LONG_DEFAULT, negatableE keyword BLOCK_ALIGNMENT,value(required,type=block_alignment_options) keyword REF_LONG, negatable !++!/! Definition of the BLISS/PDP11 command syntax.!!--define syntax BLISS16 image BLISS16 !+; ! The following qualifier syntax is common to the Bliss-16: ! and Bliss-32 command lines. Any changes which are made: ! should be made in one place, and then the entire common6 ! qualifier specification should be duplicated in the ! other place. !- ! Output file qualifiers. ! qualifier ANALYSIS_DATA, placement=positional, value(type=$outfile), qualifier DIAGNOSTICS placement=positional, value(type=$outfile)) qualifier LIBRARY, placement=positional, value(type=$outfile)' qualifier LIST, placement=positional, value(type=$outfile), batch" qualifier MASTER_CROSS_REFERENCE, placement=positional, value(type=$outfile)( qualifier OBJECT, placement=positional, value(type=$outfile), default ! Yes/No qualifiers. !' qualifier CODE, placement=positional, default& qualifier DEBUG, placement=positional& qualifier QUICK, placement=positional ! Numeric value qualifiers. !- qualifier ERROR_LIMIT, placement=positional, value(default=1)) qualifier VARIANT, placement=positional, value(default=1), nonnegatable. qualifier SYNTAX_LEVEL, placement=positional, value(default=2), nonnegatable ! Keyword list qualifiers. !' qualifier CHECK, placement=positional,' value(list,type=check_opt_non_gem), nonnegatable# !+ Tricky Note about CLDs (5-004): !4 ! If you put REQUIRED in the value list for /CHECK,8 ! it means that "BLIS/CH FOO" will get an error message& ! from the CLI for a missing keyword. !5 ! If you put DEFAULT in the list for this qualifier,8 ! it means that "BLIS FOO" will get /CHECK=(INITIAL...) ! automatically from the CLI. !< ! Neither is right, which is why /CHECK/OPT/SOURCE/TERM/MAC ! are the way they are. !- qualifier CROSS_REFERENCE, placement=positional," value(list,type=cross_opt_all)( qualifier DESIGN, placement=positional,$ value(list,type=design_opt_all), negatable' qualifier DUMP, placement=positional,/ value(required,list,type=dump_opt_non_gem), nonnegatable* qualifier LANGUAGE, placement=positional,/ value(required,list,type=language_opt_all), nonnegatable5 qualifier NAMES, placement=positional,? value(type=names_opt_non_unix),- nonnegatable,' default* qualifier OPTIMIZE, placement=positional,% value(list,type=opt_opt_non_gem), nonnegatable- qualifier SOURCE_LIST, placement=positional,l% value(list,type=src_opt_non_gem),i nonnegatable* qualifier TERMINAL, placement=positional,% value(list,type=term_opt_non_gem)  nonnegatable ! Miscellaneous qualifiers. !( qualifier UPDATE, placement=positional, value(list,type=$infile) !+-@ ! The following qualifier syntax is peculiar to the BLISS/PDP11 ! command.a !-oC ! The /PDP11 qualifier tells DCL to use Bliss-16 (and this syntax)1C ! instead of Bliss-32 and the standard command line syntax. Thus,!C ! /PDP11 at this point is clearly redundant and useless. However,0A ! it used to work, and doesn't hurt anything, so leave it in ande ! keep our users happy. !# qualifier PDP11, placement=global,O nonnegatable,- default @ ! The /ENVIRONMENT qualifier is only allowed on the BLISS/PDP11. ! command--it has no counterpart in Bliss-32. !- qualifier ENVIRONMENT, placement=positional,M( value(required,list,type=env_opt16), nonnegatable? ! The /MACHINE_CODE_LIST qualifier has different syntax on theV= ! BLISS/PDP11 command, where it allows the ABSOLUTE keyword,E& ! than in Bliss-32, where it doesn't. ! qualifier MACHINE_CODE_LIST,i placement=positional,2$ value(list,type=machine_opt_16), nonnegatable> ! The /TRACEBACK qualifier is a default for Bliss-32, but not ! for Bliss-16. !* qualifier TRACEBACK, placement=positional !++!!s,! Definition of the BLISS-32M command syntax!!!--sdefine syntax BLISS32M image BLISS32Md3 ! dummy qualifier in case they say BLISS/MIPS/MIPS  !9 qualifier MIPS, placement=global, nonnegatable, default  ! Output file qualifiers. ! qualifier ANALYSIS_DATA,1 placement=positional,o value(type=$outfile), qualifier DIAGNOSTICS placement=positional, value(type=$outfile)) qualifier LIBRARY, placement=positional,S value(type=$outfile)' qualifier LIST, placement=positional,u value(type=$outfile),3 batch-( qualifier OBJJECT, placement=positional, value(type=$outfile),h default2 ! Yes/No qualifiers. ' qualifier CODE, placement=positional,, default1. qualifier INITIAL_PSECT,placement=positional, default3 qualifier MACHINE_CODE, placement=positional,r defaultu4 qualifier DEBUG, placement=positional+ qualifier TRACEBACK, placement=positional, defaulte' qualifier SHARED, placement=positional , qualifier CALL_SHARED, placement=positional ! Numeric value qualifiers.- qualifier ERROR_LIMIT, placement=positional,C value(default=1)) qualifier VARIANT, placement=positional,n value(default=1),e nonnegatable. qualifier SYNTAX_LEVEL, placement=positional, value(default=2), nonnegatable ! Keyword list qualifiers.e' qualifier CHECK, placement=positional,/ value(required,list,type=check_opt_gem_32),g nonnegatable,A defaultg qualifier CROSS_REFERENCE,H placement=positional,o" value(list,type=cross_opt_all) qualifier ENVIRONMENT,T placement=positional,D! value(list,type=env_opt_gem),I nonnegatable* qualifier LANGUAGE, placement=positional,/ value(required,list,type=language_opt_all),  nonnegatable* qualifier OPTIMIZE, placement=positional,! value(list,type=opt_opt_gem),t default_- qualifier SOURCE_LIST, placement=positional,o* value(required,list,type=src_opt_gem), nonnegatable, defaultD* qualifier TERMINAL, placement=positional,* value(required,list,type=term_opt_gem) nonnegatable,E default 1 qualifier ASSUME, placement=global,4C value(list,type=assume_opt_gem_32),E, nonnegatable5 qualifier NAMES, placement=positional,D; value(type=names_opt_unix),- nonnegatable,W' defaulte ! Developer-only qualifiers. qualifier BREAKPOINTS, label=gem_breakpoints, placement=global,n value(list,required)% qualifier GEMDEBUG, label=gem_debug,o placement=global" qualifier DUMPS, label=gem_dumps, placement=global,f value(list,required)( qualifier SWITCHES, label=gem_switches, placement=global,L value(list,required)0 qualifier GEMTRACEPOINTS,label=gem_tracepoints, placement=global,o value(list,required) disallow LIBRARY AND OBJECT !++ !w-! Definition of the BLISS-32IW command syntaxp!r!--define syntax BLISS32IWy image BLISS32IW5 ! dummy qualifier in case they say BLISS/INTEL/INTELr !9 qualifier INTEL, placement=global, nonnegatable, defaulty ! Output file qualifiers. ! qualifier ANALYSIS_DATA,I placement=positional,k value(type=$outfile), qualifier DIAGNOSTICS placement=positional, value(type=$outfile)) qualifier LIBRARY, placement=positional,d value(type=$outfile)' qualifier LIST, placement=positional,d value(type=$outfile),a batcho( qualifier OBJECT, placement=positional, value(type=$outfile), defaultU ! Yes/No qualifiers.w' qualifier CODE, placement=positional,o default. qualifier INITIAL_PSECT,placement=positional, defaultn qualifier MACHINE_CODE, placement=positional,o defaulte4 qualifier DEBUG, placement=positional+ qualifier TRACEBACK, placement=positional,o defaultn' qualifier SHARED, placement=positionaln, qualifier CALL_SHARED, placement=positional ! Numeric value qualifiers.- qualifier ERROR_LIMIT, placement=positional,l value(default=1)) qualifier VARIANT, placement=positional,, value(default=1),D nonnegatable. qualifier SYNTAX_LEVEL, placement=positional, value(default=2), nonnegatable ! Keyword list qualifiers.r !' qualifier CHECK, placement=positional,n/ value(required,list,type=check_opt_gem_32),e nonnegatable,_ defaulta qualifier CROSS_REFERENCE,l placement=positional,Y" value(list,type=cross_opt_all) qualifier ENVIRONMENT,Q placement=positional,S! value(list,type=env_opt_gem),d nonnegatable* qualifier LANGUAGE, placement=positional,/ value(required,list,type=language_opt_all), nonnegatable* qualifier OPTIMIZE, placement=positional,! value(list,type=opt_opt_gem),r defaultd- qualifier SOURCE_LIST, placement=positional,,* value(required,list,type=src_opt_gem), nonnegatable,e defaulta* qualifier TERMINAL, placement=positional,* value(required,list,type=term_opt_gem) nonnegatable,R defaultl1 qualifier ASSUME, placement=global,fC value(list,type=assume_opt_gem_32),e, nonnegatable5 qualifier NAMES, placement=positional,y; value(type=names_opt_unix),e- nonnegatable,' default  ! Developer-only qualifiers. qualifier BREAKPOINTS, label=gem_breakpoints, placement=global,e value(list,required)% qualifier GEMDEBUG, label=gem_debug,i placement=global" qualifier DUMPS, label=gem_dumps, placement=global,L value(list,required)( qualifier SWITCHES, label=gem_switches, placement=global,d value(list,required)0 qualifier GEMTRACEPOINTS,label=gem_tracepoints, placement=global,e value(list,required) disallow LIBRARY AND OBJECT g!++i!r,! Definition of the BLISS-32E command syntax!3!--mdefine syntax BLISS32E image BLISS32Es1 ! dummy qualifier in case they say BLISS/A32/A32n !8 qualifier A32, placement=global, nonnegatable, default ! Output file qualifiers. ! qualifier ANALYSIS_DATA,i placement=positional,c value(type=$outfile), qualifier DIAGNOSTICS placement=positional, value(type=$outfile)) qualifier LIBRARY, placement=positional,c value(type=$outfile)' qualifier LIST, placement=positional,c value(type=$outfile),u batchf( qualifier OBJECT, placement=positional, value(type=$outfile),= default ! Yes/No qualifiers.' qualifier CODE, placement=positional, default$. qualifier INITIAL_PSECT,placement=positional, defaulti qualifier MACHINE_CODE, placement=positional,a default 4 qualifier DEBUG, placement=positional+ qualifier TRACEBACK, placement=positional,q defaultR% qualifier TIE, placement=positional( ! Numeric value qualifiers.- qualifier ERROR_LIMIT, placement=positional, value(default=1)) qualifier VARIANT, placement=positional, value(default=1), nonnegatable. qualifier SYNTAX_LEVEL, placement=positional, value(default=2),n nonnegatable ! Keyword list qualifiers. ' qualifier CHECK, placement=positional,(/ value(required,list,type=check_opt_gem_32),  nonnegatable,! defaultt qualifier CROSS_REFERENCE,r placement=positional,o" value(list,type=cross_opt_all) qualifier ENVIRONMENT,  placement=positional,n! value(list,type=env_opt_gem),I nonnegatable- qualifier GRANULARITY, placement=positional,, value(type=gran_gem),U nonnegatable* qualifier LANGUAGE, placement=positional,/ value(required,list,type=language_opt_all),u nonnegatable* qualifier OPTIMIZE, placement=positional,! value(list,type=opt_opt_gem),o default - qualifier SOURCE_LIST, placement=positional,n* value(required,list,type=src_opt_gem), nonnegatable,n defaultq* qualifier TERMINAL, placement=positional,* value(required,list,type=term_opt_gem) nonnegatable, defaultl1 qualifier ASSUME, placement=global, C value(list,type=assume_opt_gem_32), , nonnegatable5 qualifier NAMES, placement=positional,e? value(type=names_opt_non_unix),g- nonnegatable,i' default_ ! Developer-only qualifiers. qualifier BREAKPOINTS, label=gem_breakpoints, placement=global,g value(list,required)% qualifier GEMDEBUG, label=gem_debug,i placement=global" qualifier DUMPS, label=gem_dumps, placement=global,f value(list,required)( qualifier SWITCHES, label=gem_switches, placement=global,  value(list,required)0 qualifier GEMTRACEPOINTS,label=gem_tracepoints, placement=global,n value(list,required) disallow LIBRARY AND OBJECT d!++t!d-! Definition of the BLISS-32AW command syntaxo!'!--tdefine syntax BLISS32AWn image BLISS32AW3 ! dummy qualifier in case they say BLISS/AW32/AW32  !9 qualifier AW32, placement=global, nonnegatable, defaulte ! Output file qualifiers. ! qualifier ANALYSIS_DATA,o placement=positional, value(type=$outfile), qualifier DIAGNOSTICS placement=positional, value(type=$outfile)) qualifier LIBRARY, placement=positional,e value(type=$outfile)' qualifier LIST, placement=positional,w value(type=$outfile),! batchi( qualifier OBJECT, placement=positional, value(type=$outfile),m defaultl ! Yes/No qualifiers.h' qualifier CODE, placement=positional,/ defaultl. qualifier INITIAL_PSECT,placement=positional, default qualifier MACHINE_CODE, placement=positional,s defaultn4 qualifier DEBUG, placement=positional+ qualifier TRACEBACK, placement=positional,i defaultt% qualifier TIE, placement=positionalM ! Numeric value qualifiers.- qualifier ERROR_LIMIT, placement=positional, value(default=1)) qualifier VARIANT, placement=positional,y value(default=1),i nonnegatable. qualifier SYNTAX_LEVEL, placement=positional, value(default=2),m nonnegatable ! Keyword list qualifiers.i' qualifier CHECK, placement=positional,u/ value(required,list,type=check_opt_gem_32),C nonnegatable,o defaultu qualifier CROSS_REFERENCE,2 placement=positional, " value(list,type=cross_opt_all) qualifier ENVIRONMENT,q placement=positional,e! value(list,type=env_opt_gem),q nonnegatable- qualifier GRANULARITY, placement=positional, value(type=gran_gem),  nonnegatable* qualifier LANGUAGE, placement=positional,/ value(required,list,type=language_opt_all),e nonnegatable* qualifier OPTIMIZE, placement=positional,! value(list,type=opt_opt_gem), defaultR- qualifier SOURCE_LIST, placement=positional,l* value(required,list,type=src_opt_gem), nonnegatable,e default * qualifier TERMINAL, placement=positional,* value(required,list,type=term_opt_gem) nonnegatable, defaultl1 qualifier ASSUME, placement=global,iC value(list,type=assume_opt_gem_32),t, nonnegatable5 qualifier NAMES, placement=positional,s; value(type=names_opt_unix),n- nonnegatable,o' defaulte ! Developer-only qualifiers. qualifier BREAKPOINTS, label=gem_breakpoints, placement=global,, value(list,required)% qualifier GEMDEBUG, label=gem_debug,a placement=global" qualifier DUMPS, label=gem_dumps, placement=global,e value(list,required)( qualifier SWITCHES, label=gem_switches, placement=global,, value(list,required)0 qualifier GEMTRACEPOINTS,label=gem_tracepoints, placement=global,S value(list,required) disallow LIBRARY AND OBJECT !++(!t,! Definition of the BLISS-64E command syntax! !-- define syntax BLISS64E image BLISS64EE1 ! dummy qualifier in case they say BLISS/A64/A64  !8 qualifier A64, placement=global, nonnegatable, default ! Output file qualifiers. ! qualifier ANALYSIS_DATA,e placement=positional,  value(type=$outfile), qualifier DIAGNOSTICS placement=positional, value(type=$outfile)) qualifier LIBRARY, placement=positional,d value(type=$outfile)' qualifier LIST, placement=positional,  value(type=$outfile),a batchq( qualifier OBJECT, placement=positional, value(type=$outfile),l default( ! Yes/No qualifiers.i' qualifier CODE, placement=positional, default=. qualifier INITIAL_PSECT,placement=positional, defaultE qualifier MACHINE_CODE, placement=positional,a defaultr4 qualifier DEBUG, placement=positional+ qualifier TRACEBACK, placement=positional,/ defaultq% qualifier TIE, placement=positionalt ! Numeric value qualifiers.- qualifier ERROR_LIMIT, placement=positional,  value(default=1)) qualifier VARIANT, placement=positional,N value(default=1),o nonnegatable. qualifier SYNTAX_LEVEL, placement=positional, value(default=2),e nonnegatable ! Keyword list qualifiers.l' qualifier CHECK, placement=positional,/ value(required,list,type=check_opt_gem_64),a nonnegatable, defaultU qualifier CROSS_REFERENCE, placement=positional,=" value(list,type=cross_opt_all) qualifier ENVIRONMENT,t placement=positional,! value(list,type=env_opt_gem),c nonnegatable- qualifier GRANULARITY, placement=positional,  value(type=gran_gem),a nonnegatable* qualifier LANGUAGE, placement=positional,/ value(required,list,type=language_opt_all),C nonnegatable* qualifier OPTIMIZE, placement=positional,! value(list,type=opt_opt_gem),n defaultl- qualifier SOURCE_LIST, placement=positional,c* value(required,list,type=src_opt_gem), nonnegatable, defaultN* qualifier TERMINAL, placement=positional,* value(required,list,type=term_opt_gem) nonnegatable, defaultq1 qualifier ASSUME, placement=global,uC value(list,type=assume_opt_gem_64),, nonnegatable5 qualifier NAMES, placement=positional,i? value(type=names_opt_non_unix),p- nonnegatable,r' defaultu ! Developer-only qualifiers. qualifier BREAKPOINTS, label=gem_breakpoints, placement=global, value(list,required)% qualifier GEMDEBUG, label=gem_debug,C placement=global" qualifier DUMPS, label=gem_dumps, placement=global,n value(list,required)( qualifier SWITCHES, label=gem_switches, placement=global,s value(list,required)0 qualifier GEMTRACEPOINTS,label=gem_tracepoints, placement=global,l value(list,required) disallow LIBRARY AND OBJECT o!++m!)-! Definition of the BLISS-64AO command syntaxe!!-- define syntax BLISS64AO  image BLISS64AO3 ! dummy qualifier in case they say BLISS/AO64/AO64o !9 qualifier AO64, placement=global, nonnegatable, default  ! Output file qualifiers. ! qualifier ANALYSIS_DATA,l placement=positional,O value(type=$outfile), qualifier DIAGNOSTICS placement=positional, value(type=$outfile)) qualifier LIBRARY, placement=positional, value(type=$outfile)' qualifier LIST, placement=positional,( value(type=$outfile),r batchl( qualifier OBJECT, placement=positional, value(type=$outfile), defaultM ! Yes/No qualifiers.r' qualifier CODE, placement=positional,u defaulte. qualifier INITIAL_PSECT,placement=positional, defaultn qualifier MACHINE_CODE, placement=positional,n default4 qualifier DEBUG, placement=positional+ qualifier TRACEBACK, placement=positional,g defaulta' qualifier SHARED, placement=positional., qualifier CALL_SHARED, placement=positional ! Numeric value qualifiers.- qualifier ERROR_LIMIT, placement=positional,o value(default=1)) qualifier VARIANT, placement=positional,i value(default=1),e nonnegatable. qualifier SYNTAX_LEVEL, placement=positional, value(default=2),c nonnegatable ! Keyword list qualifiers. ' qualifier CHECK, placement=positional,!/ value(required,list,type=check_opt_gem_64),n nonnegatable, defaultq qualifier CROSS_REFERENCE,t placement=positional," value(list,type=cross_opt_all) qualifier ENVIRONMENT,a placement=positional,E! value(list,type=env_opt_gem), nonnegatable- qualifier GRANULARITY, placement=positional,i value(type=gran_gem),o nonnegatable* qualifier LANGUAGE, placement=positional,/ value(required,list,type=language_opt_all),q nonnegatable* qualifier OPTIMIZE, placement=positional,! value(list,type=opt_opt_gem),N defaulta- qualifier SOURCE_LIST, placement=positional,o) value(required,list,type=src_opt_gem) defaultr* qualifier TERMINAL, placement=positional,* value(required,list,type=term_opt_gem) nonnegatable,a defaulti1 qualifier ASSUME, placement=global, C value(list,type=assume_opt_gem_64),c, nonnegatable5 qualifier NAMES, placement=positional,c; value(type=names_opt_unix),b- nonnegatable,,' defaultp ! Developer-only qualifiers. qualifier BREAKPOINTS, label=gem_breakpoints, placement=global,) value(list,required)% qualifier GEMDEBUG, label=gem_debug, placement=global" qualifier DUMPS, label=gem_dumps, placement=global,a value(list,required)( qualifier SWITCHES, label=gem_switches, placement=global,g value(list,required)0 qualifier GEMTRACEPOINTS,label=gem_tracepoints, placement=global,  value(list,required) disallow LIBRARY AND OBJECT !++ ! -! Definition of the BLISS-32AO command syntax ! !--cdefine syntax BLISS32AO  image BLISS32AO3 ! dummy qualifier in case they say BLISS/AO32/AO32  !9 qualifier AO32, placement=global, nonnegatable, default  ! Output file qualifiers. ! qualifier ANALYSIS_DATA,O placement=positional,, value(type=$outfile), qualifier DIAGNOSTICS placement=positional, value(type=$outfile)) qualifier LIBRARY, placement=positional,_ value(type=$outfile)' qualifier LIST, placement=positional,r value(type=$outfile),e batchc( qualifier OBJECT, placement=positional, value(type=$outfile),a defaultp ! Yes/No {i~ BLS32047.B _/+![BLISS32.V047.COMMON]BLISS.CLD;21WKWT>qualifiers.l' qualifier CODE, placement=positional,o default . qualifier INITIAL_PSECT,placement=positional, defaultn qualifier MACHINE_CODE, placement=positional,S defaultm4 qualifier DEBUG, placement=positional+ qualifier TRACEBACK, placement=positional,e defaultO' qualifier SHARED, placement=positionalY, qualifier CALL_SHARED, placement=positional ! Numeric value qualifiers.- qualifier ERROR_LIMIT, placement=positional,$ value(default=1)) qualifier VARIANT, placement=positional,y value(default=1),i nonnegatable. qualifier SYNTAX_LEVEL, placement=positional, value(default=2),C nonnegatable ! Keyword list qualifiers.m' qualifier CHECK, placement=positional,/ value(required,list,type=check_opt_gem_32),e nonnegatable,r defaultT qualifier CROSS_REFERENCE,a placement=positional,C" value(list,type=cross_opt_all) qualifier ENVIRONMENT,f placement=positional,=! value(list,type=env_opt_gem),  nonnegatable- qualifier GRANULARITY, placement=positional,p value(type=gran_gem),l nonnegatable* qualifier LANGUAGE, placement=positional,/ value(required,list,type=language_opt_all),c nonnegatable* qualifier OPTIMIZE, placement=positional,! value(list,type=opt_opt_gem),p default - qualifier SOURCE_LIST, placement=positional,y) value(required,list,type=src_opt_gem) defaulti* qualifier TERMINAL, placement=positional,* value(required,list,type=term_opt_gem) nonnegatable,O default21 qualifier ASSUME, placement=global,sC value(list,type=assume_opt_gem_32), , nonnegatable5 qualifier NAMES, placement=positional, ; value(type=names_opt_unix),U- nonnegatable,l' defaultt ! Developer-only qualifiers. qualifier BREAKPOINTS, label=gem_breakpoints, placement=global,q value(list,required)% qualifier GEMDEBUG, label=gem_debug,s placement=global" qualifier DUMPS, label=gem_dumps, placement=global,e value(list,required)( qualifier SWITCHES, label=gem_switches, placement=global,l value(list,required)0 qualifier GEMTRACEPOINTS,label=gem_tracepoints, placement=global,p value(list,required) disallow LIBRARY AND OBJECT t!++!(! Definition of the BLISS command syntax!i!--ldefine verb BLISS  image BLISS32,u parameter p1, label=file,  prompt="File",% value(required,type=$infile,list) # qualifier MIPS, placement=global,o nonnegatable,q syntax=bliss32m " qualifier A32, placement=global, nonnegatable,( syntax=bliss32ea# qualifier AW32, placement=global,  nonnegatable, syntax=bliss32aw# qualifier INTEL, placement=global,  nonnegatable,e syntax=bliss32iw" qualifier A64, placement=global, nonnegatable,u syntax=bliss64eq# qualifier AO32, placement=global,p nonnegatable,n syntax=bliss32ao# qualifier AO64, placement=global,  nonnegatable, syntax=bliss64ao !+4; ! The following qualifier syntax is common to the Bliss-16B: ! and Bliss-32 command lines. Any changes which are made: ! should be made in one place, and then the entire common6 ! qualifier specification should be duplicated in the ! other place.l !-n ! Output file qualifiers. ! qualifier ANALYSIS_DATA,I placement=positional,  value(type=$outfile), qualifier DIAGNOSTICS placement=positional, value(type=$outfile)) qualifier LIBRARY, placement=positional,a value(type=$outfile)' qualifier LIST, placement=positional,t value(type=$outfile),f batch " qualifier MASTER_CROSS_REFERENCE, placement=positional,o value(type=$outfile)( qualifier OBJECT, placement=positional, value(type=$outfile),i defaultD ! Yes/No qualifiers.n !' qualifier CODE, placement=positional,, defaultm. qualifier INITIAL_PSECT,placement=positional, default& qualifier DEBUG, placement=positional& qualifier QUICK, placement=positional ! Numeric value qualifiers. !- qualifier ERROR_LIMIT, placement=positional,i value(default=1)) qualifier VARIANT, placement=positional,n value(default=1),S nonnegatable. qualifier SYNTAX_LEVEL, placement=positional, value(default=1),d nonnegatable ! Keyword list qualifiers.= !' qualifier CHECK, placement=positional,e' value(list,type=check_opt_non_gem),  nonnegatable qualifier CROSS_REFERENCE,c placement=positional,u" value(list,type=cross_opt_all)( qualifier DESIGN, placement=positional,$ value(list,type=design_opt_all), negatableb' qualifier DUMP, placement=positional,i/ value(required,list,type=dump_opt_non_gem),t nonnegatable* qualifier LANGUAGE, placement=positional,/ value(required,list,type=language_opt_all),t nonnegatable5 qualifier NAMES, placement=positional,_? value(type=names_opt_non_unix),i- nonnegatable,g' default* qualifier OPTIMIZE, placement=positional,% value(list,type=opt_opt_non_gem),) nonnegatable- qualifier SOURCE_LIST, placement=positional, % value(list,type=src_opt_non_gem),  nonnegatable* qualifier TERMINAL, placement=positional,% value(list,type=term_opt_non_gem)  nonnegatable ! Miscellaneous qualifiers. !( qualifier UPDATE, placement=positional, value(list,type=$infile) !+ < ! The following qualifier syntax is peculiar to the primary@ ! BLISS command, and is not allowed in the BLISS/PDP11 command. !-=B ! The /PDP11 qualifier indicates the alternative Bliss-16 commandD ! syntax. Although it is not explicitly restricted, this qualifier? ! should occur only at the very beginning of the command line.t !# qualifier PDP11, placement=global,g nonnegatable,l syntax=bliss16B ! The /MACHINE_CODE_LIST qualifier for Bliss-32 doesn't allow the? ! ABSOLUTE keyword, which is allowed for the same qualifier ino ! Bliss-16. ! qualifier MACHINE_CODE_LIST,n placement=positional,s% value(list,type=machine_opt_32v),6 nonnegatable? ! The /TRACEBACK qualifier is present by default for Bliss-32,a ! but not for Bliss-16.+ qualifier TRACEBACK, placement=positional,q default!bd?F~ BLS32047.B}>`+![BLISS32.V047.COMMON]CONDIT.R32;1J0!*[BLISS32.V047.COMMON]CONDIT.R32;1+,}>`./ 4J-+0123KPWO56 1Ջ7W=89`vfGHJ!+ ! FUNCTION:G! This require file supplies a set of convenient macros, binds, etc.C! for use with the condition handling facility for BLISS-32. ItJ! parallels as closely as possible the examples in the "BLISS Language ! Guide" chapter 17.!-(%( These are all provided in STARLET.REQFIELD CONDIT_FIELDS = SET STS$L_CONDIT = [0, 0, 32, 0],% STS$V_SEVERITY = [0, 0, 3, 0], STS$V_SUCCESS= [0, 0, 1, 0],# STS$V_COND_ID = [0, 3, 25, 0], STS$V_MSG_NO= [0, 3, 13, 0], STS$V_FAC_SP= [0,15, 1, 0], STS$V_CODE= [0, 3, 12, 0], STS$V_FAC_NO= [0,16, 12, 0], STS$V_CUST_DEF= [0,27, 1, 0] TES;)%MACRO& CONDITION_VALUE = BLOCK[4,BYTE] %; KEYWORDMACRO STS$VALUE( SEVERITY = STS$K_SEVERE, CODE = 0, FAC_SP = 1, FAC_NO = 0, CUST_DEF = 1) = ((SEVERITY AND %O'7') OR ((CODE AND (1^13-1))^3) OR (FAC_SP^15) OR (FAC_NO AND (1^12-1))^16 OR (CUST_DEF ^27)  ) %;MACRO& IS_UNWIND(X) = X EQL SS$_UNWIND %;MACRO STS$MATCH(AA,BB)= BEGIN LOCAL A,B; A = (AA); B = (BB);1 IF NOT ( .BLOCK[(A), STS$V_FAC_SP;, BYTE] OR ( .BLOCK[(B), STS$V_FAC_SP;, BYTE] ) THENB .BLOCK[(A), STS$V_CODE;, BYTE] EQL .BLOCK[(B), STS$V_CODE;, BYTE] ELSEH .BLOCK[(A), STS$V_COND_ID;, BYTE] EQL .BLOCK[(B), STS$V_COND_ID;, BYTE] END %;LITERAL SS$RESIGNAL = 0, SS$CONTINUE = 1; %MACRO COND_HAND_DECL(SIG,MECH,ENBL) = !+ ! FUNCTION:C ! Makes a set of declarations for a condition handling routine.C ! This macro should be included in the main block of every such ! routine. ! ! INPUTS:A ! The inputs correspond to the three arguments to a condition ! handling routine. !_ MAP SIG: REF VECTOR, MECH: REF VECTOR, ENBL: REF VECTOR; BIND COND = SIG[1]: CONDITION_VALUE, RETURN_VALUE = MECH[3]; %;sƫ ~ BLS32047.Bs?+[BLISS32.V047.COMMON]EZIO.DOC;6;5MI*[BLISS32.V047.COMMON]EZIO.DOC;6+,s?./ 4M-+0123KPWO56`ͽ<7 =89`vfGHJ FUNCTIONAL DESCRIPTION:> PROVIDES BASIC FILE AND TTY I/O SERVICES TO BLISS PROGRAMS.CAVEAT:K EZIO IS NOT A PRODUCT OF THE BLISS GROUP AND IS NOT SUPPORTED IN ANY WAYM BY DIGITAL EQUIPMENT CORP. IT IS INTENDED TO PROVIDE SIMPLE TRANSPORTABLE CHARACTER STRING I/O.H------------------------------------------------------------------------2GLOBAL ROUTINE FILOPN(CHAN,SPECLEN,SPECPTR,OUTPUT)FUNCTIONAL DESCRIPTION: OPENS A FILE.INPUTS:= CHAN: A CHANNEL NUMBER FROM 0 TO N. N is an implementation. dependent value. On VAX, the default is N=3.# SPECLEN: LENGTH OF THE FILESPEC.E SPECPTR: STRING POINTER TO A FILESPEC WHICH IS SATISFACTORY TO THE0 HOST OPERATING SYSTEM WITH THE USUAL DEFAULTS.2 OUTPUT: 1 MEANS OPEN FOR OUTPUT. 0 MEANS INPUT.VALUE:L 1 IF SUCCESSFUL. OTHERWISE 0. FAILURE CAN BE CAUSES BY BAD SYNTAX IN THE> FILESPEC, A NON-EXISTANT FILE, OR A PROTECTION VIOLATION.H------------------------------------------------------------------------GLOBAL ROUTINE FILCLS(CHAN)FUNCTIONAL DESCRIPTION:- CLOSES A FILE PREVIOUSLY OPENED BY FILOPN.INPUTS: CHAN: A CHANNEL NUMBER.H------------------------------------------------------------------------&GLOBAL ROUTINE FILOUT(CHAN,LEN,STGPTR)FUNCTIONAL DESCRIPTION:- OUTPUTS A STRING ON THE SPECIFIED CHANNEL.INPUTS:# CHAN: CHANNEL NUMBER. -1 IS TTY.A LEN: LENGTH OF STRING. IF NEGATIVE, CURRENT BUFFER IS OUTPUT. STGPTR: STRING POINTER.VALUE:( 1 IF EVERYTHING GOES OK. OTHERWISE 0.H------------------------------------------------------------------------%GLOBAL ROUTINE FILIN(CHAN,LEN,STGPTR)FUNCTIONAL DESCRIPTION:. INPUTS ONE LINE FROM THE SPECIFIED CHANNEL.INPUTS:# CHAN: CHANNEL NUMBER. -1 IS TTY.% LEN: LENGTH OF STRING FOR BUFFER. STGPTR: STRING POINTER.VALUE:3 COUNT OF CHARACTERS READ. -1 MEANS EOF WAS HIT.H------------------------------------------------------------------------SHORT EXAMPLE:MODULE LISTER(MAIN=LSTR)=BEGIN!+4! THIS PROGRAM ASKS FOR A FILE NAME, OPENS THE NAMED,! FILE, AND COPIES THE FILE TO THE TERMINAL.!-EXTERNAL ROUTINE FILOPN, FILCLS, FILOUT, FILIN;OWN$ BUF: VECTOR[CH$ALLOCATION(120)];MACRO8 MSG(S)= FILOUT(-1,%CHARCOUNT(S),CH$PTR(UPLIT(S))) %, CRLF= %CHAR(13,10) %; ROUTINE LSTR= BEGIN LOCAL LEN, ! LENGTH OF THE STRING. PTR; ! POINTER TO BUF.& PTR = CH$PTR(BUF); ! GET POINTER.4 FILOPN(-1, 0, 0, 0); ! Open TERMINAL i/o channel' MSG('ENTER FILE NAME: '); ! PROMPT.- LEN = FILIN(-1,60,.PTR); ! GET FILE NAME.> IF NOT FILOPN(0,.LEN,.PTR,0) ! OPEN THE FILE ON CHANNEL 0. THEN* RETURN MSG(%STRING('OPEN FAILED.',CRLF)); WHILE 1 DO BEGIN ! PROCESS EACH LINE. LEN = FILIN(0,120,.PTR);- IF .LEN EQL -1 THEN EXITLOOP; ! END OF FILE.+ FILOUT(-1,.LEN,.PTR) ! OUTPUT THE STRING. END; FILCLS(0); MSG(%STRING('DONE.',CRLF)) END; END ELUDOMo9G^,~ BLS32047.B?:+![BLISS32.V047.COMMON]EZIO32.B32;5ELE!*[BLISS32.V047.COMMON]EZIO32.B32;5+,?:./ 4E-+0123KPWO56͏!7U=89`vfGHJ$MODULE EZIO(LANGUAGE(BLISS32))=BEGIN!++! FUNCTIONAL DESCRIPTION:9! PROVIDES BASIC FILE AND TTY I/O SERVICES TO BLISS-32! PROGRAMS.!--!! AUTHOR: PAUL DICKSON!-! MODIFIED 10-JUN-77 FOR RMS-11 BY P. BELMONT8! MODIFIED 13-JUL-77 FROM RMS-11 TO RMS-32 BY P. DICKSON>! MODIFIED 27 APR 78 TO EXPAND NO. OF CHANNELS BY L. YARBROUGH?! Modified 1 Nov 78 to fix FILCLS completion code by Ward Clark! !! Table of contents!LIBRARY 'SYS$LIBRARY:STARLET';FORWARD ROUTINEE ERR_MESSAGE : NOVALUE, ! PRINTS AN ERROR MESSAGE IF TRBLSW IS SET FILOPN, ! OPENS A FILE. FILCLS, ! CLOSES A FILE.( FILIN, ! GETS ONE LINE FROM A FILE.) FILOUT; ! WRITES A STRING TO A FILE.LITERAL FAILURE = 0, SUCCESS = 1;LITERAL MAXCHAN = 3;COMPILETIME COUNT = 0;MACRO URAB_DECL (N) [] = %ASSIGN (COUNT, N - 1) %IF COUNT LSS 0 %THEN( %NAME ('U_RAB0') : $RAB (FAB = FAB) %EXITITERATION %ELSE URAB_DECL (%NUMBER (COUNT)) ,4 %NAME ('U_RAB', %NUMBER (N)) : $RAB (FAB = FAB) %FI %;MACRO URAB_LIST (N) [] = %ASSIGN (COUNT, N - 1) %IF COUNT LSS 0 %THEN %NAME ('U_RAB0')  %EXITITERATION %ELSE URAB_LIST (%NUMBER (COUNT)) ,! %NAME ('U_RAB', %NUMBER (N)) %FI %;OWN TRBLSW : INITIAL(1), FAB : $FAB(RAT=CR), TTINRAB : $RAB(FAB=FAB), TTOUTRAB : $RAB(FAB=FAB),, URAB_DECL (MAXCHAN); ! URAB0, URAB1, ...BIND2 RABTAB = UPLIT (URAB_LIST (MAXCHAN)) : VECTOR; 3GLOBAL ROUTINE FILOPN(CHAN,SPECLEN,SPECPTR,OUTPUT)=!+! FUNCTIONAL DESCRIPTION:! OPENS A FILE.! ! INPUTS:/! CHAN: A CHANNEL NUMBER FROM -1 TO MAXCHAN.%! SPECLEN: LENGTH OF THE FILESPEC.+! SPECPTR: STRING POINTER TO A FILESPEC.4! OUTPUT: 1 MEANS OPEN FOR OUTPUT. 0 MEANS INPUT.!! VALUE:"! 1 IF SUCCESSFUL. OTHERWISE 0.!- BEGIN LOCAL5 RAB: REF BLOCK[,BYTE]; ! ADDRESS OF THE RAB TO USE.= IF .CHAN LSS -1 OR .CHAN GTR MAXCHAN THEN RETURN FAILURE;5 $FAB_INIT(FAB=FAB,RAT=CR); ! INITIALIZE THE FAB.T1 IF .CHAN LSS 0 ! TTY IS REALLY TWO CHANNELS. THEN BEGIN' FAB[FAB$L_FNA] = UPLIT('SYS$OUTPUT:');S FAB[FAB$B_FNS] = 11;O FAB[FAB$B_FAC] = FAB$M_PUT;# IF NOT $CREATE(FAB=FAB) THEN BEGIN ( ERR_MESSAGE(0); RETURN FAILURE END;) IF NOT $CONNECT(RAB=TTOUTRAB) THEN BEGINo9 ERR_MESSAGE(2); $CLOSE(FAB=FAB); RETURN FAILURE END;t2 TTOUTRAB[RAB$L_CTX] = .FAB[FAB$W_IFI]; ! SAVE ID." $FAB_INIT(FAB=FAB); ! INIT AGAIN.& FAB[FAB$L_FNA] = UPLIT('SYS$INPUT:'); FAB[FAB$B_FNS] = 10;S FAB[FAB$B_FAC] = FAB$M_GET;! IF NOT $OPEN(FAB=FAB) THEN BEGINL( ERR_MESSAGE(1); RETURN FAILURE END;( IF NOT $CONNECT(RAB=TTINRAB) THEN BEGIN9 ERR_MESSAGE(2); $CLOSE(FAB=FAB); RETURN FAILURE END;O1 TTINRAB[RAB$L_CTX] = .FAB[FAB$W_IFI]; ! SAVE ID.] RETURN SUCCESSN END;1'! IF NOT THE TERMINAL, GO TO NEXT PAGE.( R! IF NOT THE TTY ...0 FAB[FAB$L_FNA] = .SPECPTR; ! DESCRIBE FILESPEC. FAB[FAB$B_FNS] = .SPECLEN;% IF .OUTPUT, THENR BEGIN FAB[FAB$B_FAC] = FAB$M_PUTR END ELSE BEGIN FAB[FAB$B_FAC] = FAB$M_GETU END;% IF .OUTPUT THEN BEGIN ! CREATE VAR,CR FILE IF NOT $CREATE(FAB=FAB) THEN) BEGIN ERR_MESSAGE(0); RETURN FAILURE  END END ELSE. BEGIN ! OPEN FILE. MUST BE VAR OR VFC/FSZ=2( IF NOT $OPEN(FAB=FAB) ! OPEN THE FILE. THEN BEGIN  ERR_MESSAGE(1); RETURN FAILURE END; ! IF .FAB[FAB$B_ORG] NEQ FAB$C_SEQ: THEN BEGIN $CLOSE(FAB=FAB); ! BACK UP. RETURN FAILURE+ END END;S RAB = .RABTAB[.CHAN];.1 IF NOT $CONNECT(RAB=.RAB) ! CONNECT THE RAB.- THEN BEGIN ERR_MESSAGE(2);" $CLOSE(FAB=FAB); ! OOPS. BACK UP. RETURN FAILURE  END;C0 RAB[RAB$L_CTX] = .FAB[FAB$W_IFI]; ! SAVE ID. RETURN SUCCESS END; FGLOBAL ROUTINE FILCLS(CHAN)=!+! FUNCTIONAL DESCRIPTION:C/! CLOSES A FILE PREVIOUSLY OPENED BY FILOPN.F!H ! INPUTS:R! CHAN: A CHANNEL NUMBER.!- BEGIN LOCALA RAB: REF BLOCK[,BYTE];I= IF .CHAN LSS -1 OR .CHAN GTR MAXCHAN THEN RETURN FAILURE; IF .CHAN LSS 0 THEN BEGIN4 FAB[FAB$W_IFI] = .TTINRAB[RAB$L_CTX]; ! RESTORE ID. $DISCONNECT(RAB=TTINRAB); $CLOSE(FAB=FAB);T5 FAB[FAB$W_IFI] = .TTOUTRAB[RAB$L_CTX]; ! RESTORE ID.I $DISCONNECT(RAB=TTOUTRAB);T $CLOSE(FAB=FAB);R RETURN SUCCESSS END;A RAB = .RABTAB[.CHAN];O3 FAB[FAB$W_IFI] = .RAB[RAB$L_CTX]; ! RESTORE ID.A $DISCONNECT(RAB=.RAB); $CLOSE(FAB=FAB);" RETURN (.FAB[FAB$L_STS] AND 1) END; B'GLOBAL ROUTINE FILOUT(CHAN,LEN,STGPTR)=A!+! FUNCTIONAL DESCRIPTION:E/! OUTPUTS A STRING ON THE SPECIFIED CHANNEL.I!B ! INPUTS:N%! CHAN: CHANNEL NUMBER. -1 IS TTY. 0! LEN: LENGTH OF STRING. IF NEGATIVE, CURRENT! BUFFER IS OUTPUT.! STGPTR: STRING POINTER.!F! VALUE:*! 1 IF EVERYTHING GOES OK. OTHERWISE 0.!- BEGINB LOCAL  RAB: REF BLOCK[,BYTE];S= IF .CHAN LSS -1 OR .CHAN GTR MAXCHAN THEN RETURN FAILURE;G= RAB = (IF .CHAN LSS 0 THEN TTOUTRAB ELSE .RABTAB[.CHAN]);N0 RAB[RAB$L_RBF] = .STGPTR; ! DESCRIBE BUFFER. RAB[RAB$W_RSZ] = .LEN; RETURN $PUT(RAB=.RAB)  END; A&GLOBAL ROUTINE FILIN(CHAN,LEN,STGPTR)=!+! FUNCTIONAL DESCRIPTION:0! INPUTS ONE LINE FROM THE SPECIFIED CHANNEL.!B ! INPUTS:C%! CHAN: CHANNEL NUMBER. -1 IS TTY.N&! LEN: LENGTH OF STRING FOR BUFFER.! STGPTR: STRING POINTER.! ! VALUE:3! COUNT OF CHARACTERS READ. -1 MEANS EOF OR ANY ! ERROR CONDITION.K!- BEGINR LOCAL  RAB: REF BLOCK[,BYTE]; = IF .CHAN LSS -1 OR .CHAN GTR MAXCHAN THEN RETURN FAILURE;R< RAB = (IF .CHAN LSS 0 THEN TTINRAB ELSE .RABTAB[.CHAN]);0 RAB[RAB$L_UBF] = .STGPTR; ! DESCRIBE BUFFER. RAB[RAB$W_USZ] = .LEN; IF NOT $GET(RAB=.RAB)E THEN RETURN -1;L RETURN .RAB[RAB$W_RSZ] END; D%ROUTINE ERR_MESSAGE(WHICH): NOVALUE =U!+! DESCRIPTION:*! PRINTS RMS ERROR MESSAGE ON TERMINAL.!.! INPUT:5! WHICH: SELECTS NAME OF RMS FUNCTION THAT FAILED.F!- BEGINR BIND RMSNAMES = UPLIT( UPLIT(%ASCIC '$CREATE'), UPLIT(%ASCIC '$OPEN'),I' UPLIT(%ASCIC '$CONNECT')): VECTOR,- ERRTXT = UPLIT('!AC failed with code !UL.'), ERRDSC = UPLIT(25,ERRTXT);A LOCALE# MSGBUF: VECTOR[CH$ALLOCATION(64)],) MSGPTR: VECTOR[2],R MSGLEN; IF NOT .TRBLSW THEN RETURN;A' MSGPTR[0] = 64; ! SET UP POINTERS._ MSGPTR[1] = MSGBUF; < $FAO(ERRDSC,MSGLEN,MSGPTR, ! FORMAT A MESSAGE CONTAINING5 RMSNAMES[.WHICH], ! THE NAME OF THE FAILING FUNCTIONU* -.FAB[FAB$L_STS]); ! AND THE STATUS CODE. FILOUT(-1,.MSGLEN,.MSGPTR);T END; END ELUDOM_<:~ BLS32047.B?+![BLISS32.V047.COMMON]EZIO32.OBJ;1|!*[BLISS32.V047.COMMON]EZIO32.OBJ;1+,?./ 4-+0123KPWO56Ӊ< 73=89`vfGHJ 1EZIONONE 6-Sep-1984 10:47 6-Sep-1984 10:47VAX-11 Bliss-32 T4.1-745 EZIO FILOPNP dSYS$OUTPUT:SYS$INPUT:PPD(D(D(D(D(MD( SYS$CREATE SYS$CONNECT SYS$CLOSESYS$OPEN SYS$CONNECT SYS$CLOSE SYS$CREATESYS$OPEN SYS$CLOSE SYS$CONNECT SYS$CLOSEP FILOPNSYS$OPENZ SYS$CREATEY SYS$CONNECTXWЬVV1V,nPgPgVeç, 4WiP~{ǔhP7<Ǭ,nPgPg, 4WjP>PhPQ<haЬ ,4 WiPOWjP .FRRhPW SYS$CLOSE <PP}  OX  FILCLSvSYS$DISCONNECT SYS$CLOSESYS$DISCONNECT SYS$CLOSESYS$DISCONNECT SYS$CLOSE <FILCLS< SYS$CLOSEUSYS$DISCONNECTTSЬRRKRFR&fcNdeêcÒdePBPcPdePPC   p FILOUTSYS$PUT FILOUTKЬPP*P%PQ@QЬ ("QSYS$PUTP5  < FILINSYS$GET FILINUЬPP5P0PTR@RЬ $ RSYS$GETPP<"PP?  G  ERR_MESSAGES(P$CREATE$OPEN$CONNECT(08!AC failed with code !UL.P SYS$FAO\ P^7@  ~ЬP@D lSYS$FAOݮݮ~;)   C$OWN$$OWN$t$PLIT$$PLIT$tO$CODE$$CODE$OQ Q q߶Y~ BLS32047.B[l+"[BLISS32.V047.COMMON]FINDREQ.COM;3H"*[BLISS32.V047.COMMON]FINDREQ.COM;3+,[l./ 4H-+0123KPWO56ɋ7A=89`vfGHJ $ ! FINDREQ filename {W|S} {W|E}$ ! P1: library file name)$ ! P2: W=look in kit working directory$ ! S=look in SYSLIB $ ! P3: W=warning if not found$ ! E=error if not found<$ ! effect: set BLS32$filename to the full file name or ""$$ on warning then exit $STATUS*$ on control_y then vmi$callback CONTROL_Y$ LIBNAME = "BLS32$''P1'"$H$ vmi$callback FIND_FILE 'LIBNAME' 'P1'.REQ VMI$ROOT:[SYSLIB] 'P2' FOUND$ if FOUND .eqs. P2 then exit 1$.$ if P2 .eqs. "W" then LOC := installation kit,$ if P2 .eqs. "S" then LOC := system library;$ vmi$callback MESSAGE 'P3' NOLIB "''P1'.REQ not in ''LOC'"8$ if f$logical(LIBNAME) .nes. "" then deassign 'LIBNAME'$ if P3 .eqs. "W" then exit 1$ exit VMI$_FAILUREw|1]~ BLS32047.Bbl+"[BLISS32.V047.COMMON]LIBCOMP.COM;2=j*"*[BLISS32.V047.COMMON]LIBCOMP.COM;2+,bl./ 4=-+0123 KPWO56F07Dc=89`vfGHJ$ ! LIBCOMP libname [auxlib],$ ! P1=the name of the .REQ to be compiled3$ ! P2=an optional .REQ to prefix to it (STARLET);$ ! result: compiles the .REQ and puts the .L32 in SYSLIB$$ on warning then exit $STATUS*$ on control_y then vmi$callback CONTROL_Y$$ DEST = "BLS32$LIB_''P1'"2$ if f$logical(DEST) .nes. "" then deassign 'DEST'$ SOURCE = "BLS32$''P1'"+$ if f$logical(SOURCE) .eqs. "" then exit 1 $ if P2 .eqs. "" then goto NO_P2$ SOURCE2 = "BLS32$''P2'",$ if f$logical(SOURCE2) .eqs. "" then exit 1!$ SOURCE = SOURCE2 + "+" + SOURCE$ NO_P2:2$ bliss 'SOURCE' /library=VMI$KWD:'P1'.L32 /nolist=$ vmi$callback PROVIDE_FILE 'DEST' 'P1'.L32 VMI$ROOT:[SYSLIB]$ exit 1w3~ BLS32047.Bfl+"[BLISS32.V047.COMMON]MODULE.BLI;17LI;1s"*[BLISS32.V047.COMMON]MODULE.BLI;17+,fl./ 4sZ-+0123KPWO56@ԯ 7\r=89`vfGHJ %TITLE '%((module-title-tbs))%'?MODULE %((module-name-tbs))% ( IDENT = '%((ident-string-tbs))%'0 %BLISS32( ,ADDRESSING_MODE(EXTERNAL=GENERAL) ) ) =BEGIN! COPYRIGHT (c) 1987 BY5! DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.!H! THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIEDH! ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THEH! INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHERH! COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANYH! OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY! TRANSFERRED.!H! THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICEH! AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT! CORPORATION.!H! DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS9! SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.!++ ! FACILITY:! %((-tbs))%! ! ABSTRACT:! %((-tbs))%!! ENVIRONMENT:! %((-tbs))%! ! AUTHOR:s! %((name-tbs))%, %((group-tbs))%, %((paper-address-tbs))%, %((network-address-tbs))%, DTN %((phone-number-tbs))%!! CREATION DATE: %((-tbs))%!! MODIFIED BY:!!-- !! TABLE OF CONTENTS:!FORWARD ROUTINE5 %((routine-name-tbs))%; ! %((description-tbs))%!! INCLUDE FILES:!%((library-require-decl-tbs))%! ! MACROS:!%((macro-decl-tbs))%!! EQUATED SYMBOLS:! %((literal-and-bind-decls-tbs))%!! OWN STORAGE:!%((own-decls-tbs))%!! EXTERNAL REFERENCES:!%((external-decls-tbs))% %SBTTL '%((routine-title-tbs))%' ROUTINE %((routine-name-tbs))% =!++!! FUNCTIONAL DESCRIPTION:!! %((description-tbs))%!! FORMAL PARAMETERS:!! %((parameter-name-tbs))%"! %((parameter-description-tbs))%!! IMPLICIT INPUTS:! ! %((-tbs))%!! IMPLICIT OUTPUTS:! ! %((-tbs))%!! ROUTINE VALUE:! COMPLETION CODES:! ! %((-tbs))%!! SIDE EFFECTS:! ! %((-tbs))%!-- BEGIN %((routine-body-tbs))% END;END ! End of moduleELUDOMq #߉~ BLS32047.Bsl+![BLISS32.V047.COMMON]NOTIFY.COM;4?!!*[BLISS32.V047.COMMON]NOTIFY.COM;4+,sl./ 4?2-+0123KPWO56޻7$=89`vfGHJ$ ! @NOTIFY ln/$ ! ln = BLS32$ or BLS16$ (temp logical name)?$ ! effect: if file NOTIFY. is in the kit working directory,=$ ! then send mail to the BLISS group announcing successful$ ! installation.$$ on warning then exit $STATUS*$ on control_y then vmi$callback CONTROL_Y$8$ vmi$callback FIND_FILE 'P1' VMI$KWD:NOTIFY. "" W FOUND$ if FOUND .nes. "W" then exit$$ type sys$input1 * * * * * * * * * * * * * * * * * * * * *1 * *1 * This kit and its contents are for *1 * *1 * DIGITAL INTERNAL USE ONLY. *1 * *1 * * * * * * * * * * * * * * * * * * * * *$ $ set noon$ @'P1'$ set onw!Iƴm=p`zx6LI;1 >pt}lCf2'>:}?32 V9EBO/&+$*<}#*!R"hdrgD]:sGu6g=xi-E('N dNbOZu6?>wjof.ct Je>IA_PRECT,placemcn_;Ui̾*nSn 8UdfRt^Bn7+3 Qwa%k]LHO C@ cA > \Y`t[e3fh PfR⢂e&Tm^Yultm<(yτn*b/"!WΪ"ߠ^acement=positi%dJt4FRNUkPf5v&'\52B J?V2 lYNZ;+Vl,hWg%a!1O(8"M 3wl lJ>lLV^ {-0X;9wpFm;eO_Mn*>d< Ox(anz Y#Dq=n<a+t_]n$R,&&kWfUS5y6 LC~d',XXne:UN'{0tof&Gq$+" 3R"2*8 s]} a( {] y"y#cb|D:H9ljzhQu=;*7gPHQ)H(rQ!{,-E%p[3by'e'[wQ"5OY{"CJ}.Y%@}EyPB=v11_\f\3TJqy=w}<"HA?pP3 b!B{!'(2REG7}jg'*D@]6p+vndo a{ :UDYxC&?{,= 1 ;:Y[I7Z^|b*0J)wT \3<+^#( Z?^|y >F4hR^dxlo_@S,tOKM]}~lsL!|xB&b&OyIfra!dgkD*TDylnkU $y2}fUIi>ggt^A,Jj&]"xqA-sE.f=wH(zQ[A=},M@@?9h%Bs=lXAx[bH ;]M)bmizIFcI4d`m$ _}?',1"AFPVl!pbxe1G}I6CW-G.ix@tMnq HU1mPO$NZz!d*s2Xrz+C,$|ORD-jdvyErA~;SEE1c g88w$JF>\1A?=[N@:y;a3euni7u9#}(k?"2xbz %3bu U0*S-~r& z33`0daYH7whZL?yY2G s0kOZ[HO0S-n C+:?@BT  S+6JW;po[5Q!%[(_N?v;{oi (ol(wR0]{hb => |=\[ =]2՞}3Ga2\I{c;leA]U\9GrF=h}yuxdTi1ss=w_Cw&~ǁBd 5]!mH lzM1U#]mYl} [63"\u'~\6<5dL'%:93#9HY->+MHFǦw78Pk0V"!q.ix;Rz] Hh\po.MWXiS%_Kd252Zz)>aEY:gi'9:EpI#!T@)4,\MvD6x"q T0U:qG6D'O"Jssa`w9[f=pEIR~+evqΣl #mS鷺RUj%vS,br{8\ye2)]WB]TD~O&y'yJV&RZWA x6Ug~)tZ;Eiynx-T[M,7@&Tj-7k2Du3ApcC u-0 v``Sz"lF:FyGit}%3]i(b}I,H $l6ejB,)z&O CW)2(SMpf|)DYhil0G}I(MwBy>C:<g.\!X iOGbb.}M۩M&RuM1 c\&-nҺ~H,C@JJ/6-!fx [ {;%(oG=Q 5h,S$3b#/?AQgav,ZouT[]}]Lh(sEj5Bo*+xsA:QX^l5qz}==6j h~>.O0vM Q CW'8 \HF WI16aw:-^JU(L(C&w/)`1ԩr"+k1S^E -#*ra5 UPonen|F{z+#X 5I!#?+>Rc L\:e@J]Y/CE)\2CC$@ Fuh|e~!)'b<YgYF~St#-1'Qj*zWHl Fct|: F4-Nc!q1_&~m` {RNm) \i_JEgm|7=-.9:IceC+$\,$V YZ7I&+;6S(> "`Z f|hd]D5&WPYlxFmof}sI.Lq DC*FFL'M9 )2::i;c`k 93[-+@~lZjbdig@!K),n$}uB'. ~jn'4ukKBL[m-?:XwnJ6Y_ hqRD/WbAo3 ww[@(u2$nbq0TXyv9%quo|^?+2-> b-AMV`l9ZN_V"WZ/vgZ @W}EQ~C4skrdJxyy`N%G`o85jd hj H` eVn:jtsTdkd ziwchvw q !V](:/FV[/|oz d >RA~MG'`esTheBd8i\wt '7A`xM/RMO<$=1D]s\FI]>i[Bpkw9U> (?a i1kpD)K/uX#UnwPOG>r|VKveVZ;!]TB^HN+#6s@O3T[Mwc( =+`N[I]?u}n KU*j.uty~jGktd3_J[ )6t*%OD dm f7~nh_)JK^DS 1mC@AeQ]:7!84*~c/i)dhqI] N$:5+\EK E ;zT ghXK^ZD0O{1dde(+\QI_D Pl e$AL:Uqid 1<3oRL bt4z*xA+7Y]N B.eGIAVO16%R\/UXCgATABTPN,NGD>#mPEuu}UN+EZ@3@Fg&pjyf7!"?#{1"toiL"l'IE  JZK94f6U@TE[(b]"3U?iYPC^aG6,l&+'C_oDOz +v`Do 71~cj*\D=fwy1rT'1C[IT.8 yHRB\J;LQ{~ovGX"02L,Ml). AOR@%ENF: ykR#6GFavadH(4P8Ye`+$|INBxp.>1e+onclT~5ZVD )-peM43R\QG;Rofefv>mY#8 qUB!4EK).<'4.='&#.:>L IO` fsopz-/. n8&-X TJJ@m ke(".>)vb`7 +qy`8<$akqk", ){~]MFD?G\JO6 FaIid}|a QC>C "e+0V_2t+.a!;,2KWOS 4\GurojlfP55E @CNTRB_ XB|s1! !#>OK]Ee=xxr/5 =- iD)/{hb'D" /lx%=8)l3?QexJ9O|-MKRWU7 `Y*\^ XA*MSC<=f,N)5T'v HWVBXSy`%;#%R7  @L!jH\"CK#/#'0KXXU0#tg-ybtjv~*]5y% {1_x^J) ba(i?$(0/GY6:ISPP#fj'T ]1#ST^M"Mixk{mvbSn5> +,'gydy{j!p{lqtz7)ZF(^: "+mlD&*.:).an$V DXW^CS[C3MKB9po.5V=NgG!tn?idqSX-J?!1IAIY'S|Q,(&'NG'KAv1"Wn)39g41{J]KezTDKL(NA]L {+?kKLO' ^]/)? 'KKO>C_ to#i\nH'i7+)[Cjrc `9{M#28MQ&wR5#_y [$D&\H_SF3D dmEtURT0^ZOXXqRFAOMETfu%JI\cOQDn0]o| kny`$aY n12# UMMAL#i8>3"i ]\@=:,ZPF_+KR-(#envFOZW!!%$6 Y>WA3`ox?dO5){61]IN)3]g s XABQ:*`t~XIosDPRCGRJ}<C@]B.85NC0mhvb/"ZB`XXTS:VeHU*+cRQ~ ?Z:2oo_ RUH jtxc Q@_DM&7CCc=b?WDMN`|jlh 8Q| !["8PTM$X^ LLEt@XckEe} >)_*[MPg#-}`=$8I*PSS_n1?G_}Lm) $, BS6P@] [hER\TM9}ofnwG\g'5RTHG\[,*jhpf;1%9$V1;C:(3UpPM_1iHg]pofVi{xb^@.eUKX] A LG!+FVGP OJ/+%+Gi\UMmAFP g% |gsyzy$^'`ICDY;TEnwh \hzZ@9CLH2H@y`w~^X1tG0 ND]r4wI^P]wLTU|WSx }v#6":1$6**;7580]S#D@UHKIQ$L DUD 0P46triSglc@EgkNENAtabl CC fVUEFbkSYW.EDKqqno=alnETb._9AD6iHV?[82XXn l}=QaAX$$PN8@OGeUGJK) 91aXL8w s F2! =GD'I;!OACtITY$EL Hl?\^]_DREWB&DPPS .PI\E>g",GLEWY%#poiui+JZ 2kK*$WBMe:ch"jh}{xVu`r6]_/q[EB .lo[ kEU]_"P=$6>8lTG:P["Ic zSudj=b4>&Z][&aF'p.# i (Ui}B&+m }V`_SPSDrMyQxF:/ LQc10n."T}.'MQ:"6%6Nlm bIYWXWXeco!I]]H",!A_CD4 f F$MWPk/=MM+rg2GO" skpfw&TRB) $HKA)i3/,0)Zh"@!q;&!SDzu)=8)!BE"!, )4 hf&EQ O@c9#>+wvrdX7uma;O Z'KXJMG-P C0MT*$)e v;:! vhgl`e6: f{YZJS*od0HNeFEIN=3">o#-BOo$nnI[A(pg hhd tHF1a &q -C O(?/*)rO0E/jdtw MBJ0UC YIxDW9u ENUC#.:ddt +3+F DJGK)[OYG&cETD?FFA&mccj Z) w.TAiPEH@F;NN=G)OHzC<XTGLJ+NC  ),}wQWU#;u"D~c^wzAH$YXMSBa_@B^3AP9>Ti!* _OTVLW8xZ SKGe'%_s1.kEr"6OXFd*HHO UJ_ZR]'' 1" *#$ IVI{ pw DM!{<$*54bJ1BnHXLF%=!7 tle! 7;PI25!Iu(.J$:W  L !PH %_3"8:7s1-U4%>*'hTROGCSM^2^M3RL~3g3"" .07W]Rkl4$(>!nhOUMCe ))'#G/;5BB1~b(61A!$1n [.1,%!I% TuAcem ~R^8G\TWVWl !Sdtk0)W?=-=t#=!+ete{@(AQI+:"0u TR nSngem%."X,>76 m,LSfLYNH(5.>1rXpQEf;7?, O1T+<= M]OG?$09&<#S]w'9-."<}GMEo,6M7"6=! Keywords for the /ASSUME qualifier for 32 bit GEM compilers.!define type assume_opt_gem_32! keyw-d ALIAS, negatableE keyword BLOCK_ALIGNMENT,value(required,type=block_alignment_options)>! Keywords for the /ASSUME qualifier for 64 bit GEM compilers.!define type assume_opt_gem_64! keyword ALIAS, negatable keyword LONG_DEFAULT, negatableE keyword BLOCK_ALIGNMENT,value(required,type=block_alignment_options) keyword REF_LONG, negatable !++!/! Definition of the BLISS/PDP11 command syntax.!!--define syntax BLISS16 image BLISS16 !+; ! The following qualifier syntax is common to the Bliss-16: ! and Bliss-32 command lines. Any changes which are made: ! should be made in one place, and then the entire common6 ! qualifier specification should be duplicated in the ! other place. !- ! Output file qualifiers. ! qualifier ANALYSIS_DATA, placement=positional, value(type=$outfile), qualifier DIAGNOSTICS placement=positional, value(type=$outfile)) qualifier LIBRARY, placement=positional, value(type=$outfile)' qualifier LIST, placement=positional, value(type=$outfile), batch" qualifier MASTER_CROSS_REFERENCE, placement=positional, value(type=$outfile)( qualifier OBJECT, placement=positional, value(type=$outfile), default ! Yes/No qualifiers. !' qualifier CODE, placement=positional, default& qualifier DEBUG, placement=positional& qualifier QUICK, placement=positional ! Numeric value qualifiers. !- qualifier ERROR_LIMIT, placement=positional, value(default=1)) qualifier VARIANT, placement=positional, value(default=1), nonnegatable. qualifier SYNTAX_LEVEL, placement=positional, value(default=2), nonnegatable ! Keyword list qualifiers. !' qualifier CHECK, placement=positional,' value(list,type=check_opt_non_gem), nonnegatable# !+ Tricky Note about CLDs (5-004): !4 ! If you put REQUIRED in the value list for /CHECK,8 ! it means that "BLIS/CH FOO" will get an error message& ! from the CLI for a missing keyword. !5 ! If you put DEFAULT in the list for this qualifier,8 ! it means that "BLIS FOO" will get /CHECK=(INITIAL...) ! automatically from the CLI. !< ! Neither is right, which is why /CHECK/OPT/SOURCE/TERM/MAC ! are the way they are. !- qualifier CROSS_REFERENCE, placement=positional," value(list,type=cross_opt_all)( qualifier DESIGN, placement=positional,$ value(list,type=design_opt_all), negatable' qualifier DUMP, placement=positional,/ value(required,list,type=dump_opt_non_gem), nonnegatable* qualifier LANGUAGE, placement=positional,/ value(required,list,type=language_opt_all), nonnegatable5 qualifier NAMES, placement=positional,? value(type=names_opt_non_unix),- nonnegatable,' default* qualifier OPTIMIZE, placement=positional,% value(list,type=opt_opt_non_gem), nonnegatable- qualifier SOURCE_LIST, placement=positional,l% value(list,type=src_opt_non_gem),i nonnegatable* qualifier TERMINAL, placement=positional,% value(list,type=term_opt_non_gem)  nonnegatable ! Miscellaneous qualifiers. !( qualifier UPDATE, placement=positional, value(list,type=$infile) !+-@ ! The following qualifier syntax is peculiar to the BLISS/PDP11 ! command.a !-oC ! The /PDP11 qualifier tells DCL to use Bliss-16 (and this syntax)1C ! instead of Bliss-32 and the standard command line syntax. Thus,!C ! /PDP11 at this point is clearly redundant and useless. However,0A ! it used to work, and doesn't hurt anything, so leave it in ande ! keep our users happy. !# qualifier PDP11, placement=global,O nonnegatable,- default @ ! The /ENVIRONMENT qualifier is only allowed on the BLISS/PDP11. ! command--it has no counterpart in Bliss-32. !- qualifier ENVIRONMENT, placement=positional,M( value(required,list,type=env_opt16), nonnegatable? ! The /MACHINE_CODE_LIST qualifier has different syntax on theV= ! BLISS/PDP11 command, where it allows the ABSOLUTE keyword,E& ! than in Bliss-32, where it doesn't. ! qualifier MACHINE_CODE_LIST,i placement=positional,2$ value(list,type=machine_opt_16), nonnegatable> ! The /TRACEBACK qualifier is a default for Bliss-32, but not ! for Bliss-16. !* qualifier TRACEBACK, placement=positional !++!!s,! Definition of the BLISS-32M command syntax!!!--sdefine syntax BLISS32M image BLISS32Md3 ! dummy qualifier in case they say BLISS/MIPS/MIPS  !9 qualifier MIPS, placement=global, nonnegatable, default  ! Output file qualifiers. ! qualifier ANALYSIS_DATA,1 placement=positional,o value(type=$outfile), qualifier DIAGNOSTICS placement=positional, value(type=$outfile)) qualifier LIBRARY, placement=positional,S value(type=$outfile)' qualifier LIST, placement=positional,u value(type=$outfile),3 batch-( qualifier OBJJECT, placement=positional, value(type=$outfile),h default2 ! Yes/No qualifiers. ' qualifier CODE, placement=positional,, default1. qualifier INITIAL_PSECT,placement=positional, default3 qualifier MACHINE_CODE, placement=positional,r defaultu4 qualifier DEBUG, placement=positional+ qualifier TRACEBACK, placement=positional, defaulte' qualifier SHARED, placement=positional , qualifier CALL_SHARED, placement=positional ! Numeric value qualifiers.- qualifier ERROR_LIMIT, placement=positional,C value(default=1)) qualifier VARIANT, placement=positional,n value(default=1),e nonnegatable. qualifier SYNTAX_LEVEL, placement=positional, value(default=2), nonnegatable ! Keyword list qualifiers.e' qualifier CHECK, placement=positional,/ value(required,list,type=check_opt_gem_32),g nonnegatable,A defaultg qualifier CROSS_REFERENCE,H placement=positional,o" value(list,type=cross_opt_all) qualifier ENVIRONMENT,T placement=positional,D! value(list,type=env_opt_gem),I nonnegatable* qualifier LANGUAGE, placement=positional,/ value(required,list,type=language_opt_all),  nonnegatable* qualifier OPTIMIZE, placement=positional,! value(list,type=opt_opt_gem),t default_- qualifier SOURCE_LIST, placement=positional,o* value(required,list,type=src_opt_gem), nonnegatable, defaultD* qualifier TERMINAL, placement=positional,* value(required,list,type=term_opt_gem) nonnegatable,E default 1 qualifier ASSUME, placement=global,4C value(list,type=assume_opt_gem_32),E, nonnegatable5 qualifier NAMES, placement=positional,D; value(type=names_opt_unix),- nonnegatable,W' defaulte ! Developer-only qualifiers. qualifier BREAKPOINTS, label=gem_breakpoints, placement=global,n value(list,required)% qualifier GEMDEBUG, label=gem_debug,o placement=global" qualifier DUMPS, label=gem_dumps, placement=global,f value(list,required)( qualifier SWITCHES, label=gem_switches, placement=global,L value(list,required)0 qualifier GEMTRACEPOINTS,label=gem_tracepoints, placement=global,o value(list,required) disallow LIBRARY AND OBJECT !++ !w-! Definition of the BLISS-32IW command syntaxp!r!--define syntax BLISS32IWy image BLISS32IW5 ! dummy qualifier in case they say BLISS/INTEL/INTELr !9 qualifier INTEL, placement=global, nonnegatable, defaulty ! Output file qualifiers. ! qualifier ANALYSIS_DATA,I placement=positional,k value(type=$outfile), qualifier DIAGNOSTICS placement=positional, value(type=$outfile)) qualifier LIBRARY, placement=positional,d value(type=$outfile)' qualifier LIST, placement=positional,d value(type=$outfile),a batcho( qualifier OBJECT, placement=positional, value(type=$outfile), defaultU ! Yes/No qualifiers.w' qualifier CODE, placement=positional,o default. qualifier INITIAL_PSECT,placement=positional, defaultn qualifier MACHINE_CODE, placement=positional,o defaulte4 qualifier DEBUG, placement=positional+ qualifier TRACEBACK, placement=positional,o defaultn' qualifier SHARED, placement=positionaln, qualifier CALL_SHARED, placement=positional ! Numeric value qualifiers.- qualifier ERROR_LIMIT, placement=positional,l value(default=1)) qualifier VARIANT, placement=positional,, value(default=1),D nonnegatable. qualifier SYNTAX_LEVEL, placement=positional, value(default=2), nonnegatable ! Keyword list qualifiers.r !' qualifier CHECK, placement=positional,n/ value(required,list,type=check_opt_gem_32),e nonnegatable,_ defaulta qualifier CROSS_REFERENCE,l placement=positional,Y" value(list,type=cross_opt_all) qualifier ENVIRONMENT,Q placement=positional,S! value(list,type=env_opt_gem),d nonnegatable* qualifier LANGUAGE, placement=positional,/ value(required,list,type=language_opt_all), nonnegatable* qualifier OPTIMIZE, placement=positional,! value(list,type=opt_opt_gem),r defaultd- qualifier SOURCE_LIST, placement=positional,,* value(required,list,type=src_opt_gem), nonnegatable,e defaulta* qualifier TERMINAL, placement=positional,* value(required,list,type=term_opt_gem) nonnegatable,R defaultl1 qualifier ASSUME, placement=global,fC value(list,type=assume_opt_gem_32),e, nonnegatable5 qualifier NAMES, placement=positional,y; value(type=names_opt_unix),e- nonnegatable,' default  ! Developer-only qualifiers. qualifier BREAKPOINTS, label=gem_breakpoints, placement=global,e value(list,required)% qualifier GEMDEBUG, label=gem_debug,i placement=global" qualifier DUMPS, label=gem_dumps, placement=global,L value(list,required)( qualifier SWITCHES, label=gem_switches, placement=global,d value(list,required)0 qualifier GEMTRACEPOINTS,label=gem_tracepoints, placement=global,e value(list,required) disallow LIBRARY AND OBJECT g!++i!r,! Definition of the BLISS-32E command syntax!3!--mdefine syntax BLISS32E image BLISS32Es1 ! dummy qualifier in case they say BLISS/A32/A32n !8 qualifier A32, placement=global, nonnegatable, default ! Output file qualifiers. ! qualifier ANALYSIS_DATA,i placement=positional,c value(type=$outfile), qualifier DIAGNOSTICS placement=positional, value(type=$outfile)) qualifier LIBRARY, placement=positional,c value(type=$outfile)' qualifier LIST, placement=positional,c value(type=$outfile),u batchf( qualifier OBJECT, placement=positional, value(type=$outfile),= default ! Yes/No qualifiers.' qualifier CODE, placement=positional, default$. qualifier INITIAL_PSECT,placement=positional, defaulti qualifier MACHINE_CODE, placement=positional,a default 4 qualifier DEBUG, placement=positional+ qualifier TRACEBACK, placement=positional,q defaultR% qualifier TIE, placement=positional( ! Numeric value qualifiers.- qualifier ERROR_LIMIT, placement=positional, value(default=1)) qualifier VARIANT, placement=positional, value(default=1), nonnegatable. qualifier SYNTAX_LEVEL, placement=positional, value(default=2),n nonnegatable ! Keyword list qualifiers. ' qualifier CHECK, placement=positional,(/ value(required,list,type=check_opt_gem_32),  nonnegatable,! defaultt qualifier CROSS_REFERENCE,r placement=positional,o" value(list,type=cross_opt_all) qualifier ENVIRONMENT,  placement=positional,n! value(list,type=env_opt_gem),I nonnegatable- qualifier GRANULARITY, placement=positional,, value(type=gran_gem),U nonnegatable* qualifier LANGUAGE, placement=positional,/ value(required,list,type=language_opt_all),u nonnegatable* qualifier OPTIMIZE, placement=positional,! value(list,type=opt_opt_gem),o default - qualifier SOURCE_LIST, placement=positional,n* value(required,list,type=src_opt_gem), nonnegatable,n defaultq* qualifier TERMINAL, placement=positional,* value(required,list,type=term_opt_gem) nonnegatable, defaultl1 qualifier ASSUME, placement=global, C value(list,type=assume_opt_gem_32), , nonnegatable5 qualifier NAMES, placement=positional,e? value(type=names_opt_non_unix),g- nonnegatable,i' default_ ! Developer-only qualifiers. qualifier BREAKPOINTS, label=gem_breakpoints, placement=global,g value(list,required)% qualifier GEMDEBUG, label=gem_debug,i placement=global" qualifier DUMPS, label=gem_dumps, placement=global,f value(list,required)( qualifier SWITCHES, label=gem_switches, placement=global,  value(list,required)0 qualifier GEMTRACEPOINTS,label=gem_tracepoints, placement=global,n value(list,required) disallow LIBRARY AND OBJECT d!++t!d-! Definition of the BLISS-32AW command syntaxo!'!--tdefine syntax BLISS32AWn image BLISS32AW3 ! dummy qualifier in case they say BLISS/AW32/AW32  !9 qualifier AW32, placement=global, nonnegatable, defaulte ! Output file qualifiers. ! qualifier ANALYSIS_DATA,o placement=positional, value(type=$outfile), qualifier DIAGNOSTICS placement=positional, value(type=$outfile)) qualifier LIBRARY, placement=positional,e value(type=$outfile)' qualifier LIST, placement=positional,w value(type=$outfile),! batchi( qualifier OBJECT, placement=positional, value(type=$outfile),m defaultl ! Yes/No qualifiers.h' qualifier CODE, placement=positional,/ defaultl. qualifier INITIAL_PSECT,placement=positional, default qualifier MACHINE_CODE, placement=positional,s defaultn4 qualifier DEBUG, placement=positional+ qualifier TRACEBACK, placement=positional,i defaultt% qualifier TIE, placement=positionalM ! Numeric value qualifiers.- qualifier ERROR_LIMIT, placement=positional, value(default=1)) qualifier VARIANT, placement=positional,y value(default=1),i nonnegatable. qualifier SYNTAX_LEVEL, placement=positional, value(default=2),m nonnegatable ! Keyword list qualifiers.i' qualifier CHECK, placement=positional,u/ value(required,list,type=check_opt_gem_32),C nonnegatable,o defaultu qualifier CROSS_REFERENCE,2 placement=positional, " value(list,type=cross_opt_all) qualifier ENVIRONMENT,q placement=positional,e! value(list,type=env_opt_gem),q nonnegatable- qualifier GRANULARITY, placement=positional, value(type=gran_gem),  nonnegatable* qualifier LANGUAGE, placement=positional,/ value(required,list,type=language_opt_all),e nonnegatable* qualifier OPTIMIZE, placement=positional,! value(list,type=opt_opt_gem), defaultR- qualifier SOURCE_LIST, placement=positional,l* value(required,list,type=src_opt_gem), nonnegatable,e default * qualifier TERMINAL, placement=positional,* value(required,list,type=term_opt_gem) nonnegatable, defaultl1 qualifier ASSUME, placement=global,iC value(list,type=assume_opt_gem_32),t, nonnegatable5 qualifier NAMES, placement=positional,s; value(type=names_opt_unix),n- nonnegatable,o' defaulte ! Developer-only qualifiers. qualifier BREAKPOINTS, label=gem_breakpoints, placement=global,, value(list,required)% qualifier GEMDEBUG, label=gem_debug,a placement=global" qualifier DUMPS, label=gem_dumps, placement=global,e value(list,required)( qualifier SWITCHES, label=gem_switches, placement=global,, value(list,required)0 qualifier GEMTRACEPOINTS,label=gem_tracepoints, placement=global,S value(list,required) disallow LIBRARY AND OBJECT !++(!t,! Definition of the BLISS-64E command syntax! !-- define syntax BLISS64E image BLISS64EE1 ! dummy qualifier in case they say BLISS/A64/A64  !8 qualifier A64, placement=global, nonnegatable, default ! Output file qualifiers. ! qualifier ANALYSIS_DATA,e placement=positional,  value(type=$outfile), qualifier DIAGNOSTICS placement=positional, value(type=$outfile)) qualifier LIBRARY, placement=positional,d value(type=$outfile)' qualifier LIST, placement=positional,  value(type=$outfile),a batchq( qualifier OBJECT, placement=positional, value(type=$outfile),l default( ! Yes/No qualifiers.i' qualifier CODE, placement=positional, default=. qualifier INITIAL_PSECT,placement=positional, defaultE qualifier MACHINE_CODE, placement=positional,a defaultr4 qualifier DEBUG, placement=positional+ qualifier TRACEBACK, placement=positional,/ defaultq% qualifier TIE, placement=positionalt ! Numeric value qualifiers.- qualifier ERROR_LIMIT, placement=positional,  value(default=1)) qualifier VARIANT, placement=positional,N value(default=1),o nonnegatable. qualifier SYNTAX_LEVEL, placement=positional, value(default=2),e nonnegatable ! Keyword list qualifiers.l' qualifier CHECK, placement=positional,/ value(required,list,type=check_opt_gem_64),a nonnegatable, defaultU qualifier CROSS_REFERENCE, placement=positional,=" value(list,type=cross_opt_all) qualifier ENVIRONMENT,t placement=positional,! value(list,type=env_opt_gem),c nonnegatable- qualifier GRANULARITY, placement=positional,  value(type=gran_gem),a nonnegatable* qualifier LANGUAGE, placement=positional,/ value(required,list,type=language_opt_all),C nonnegatable* qualifier OPTIMIZE, placement=positional,! value(list,type=opt_opt_gem),n defaultl- qualifier SOURCE_LIST, placement=positional,c* value(required,list,type=src_opt_gem), nonnegatable, defaultN* qualifier TERMINAL, placement=positional,* value(required,list,type=term_opt_gem) nonnegatable, defaultq1 qualifier ASSUME, placement=global,uC value(list,type=assume_opt_gem_64),, nonnegatable5 qualifier NAMES, placement=positional,i? value(type=names_opt_non_unix),p- nonnegatable,r' defaultu ! Developer-only qualifiers. qualifier BREAKPOINTS, label=gem_breakpoints, placement=global, value(list,required)% qualifier GEMDEBUG, label=gem_debug,C placement=global" qualifier DUMPS, label=gem_dumps, placement=global,n value(list,required)( qualifier SWITCHES, label=gem_switches, placement=global,s value(list,required)0 qualifier GEMTRACEPOINTS,label=gem_tracepoints, placement=global,l value(list,required) disallow LIBRARY AND OBJECT o!++m!)-! Definition of the BLISS-64AO command syntaxe!!-- define syntax BLISS64AO  image BLISS64AO3 ! dummy qualifier in case they say BLISS/AO64/AO64o !9 qualifier AO64, placement=global, nonnegatable, default  ! Output file qualifiers. ! qualifier ANALYSIS_DATA,l placement=positional,O value(type=$outfile), qualifier DIAGNOSTICS placement=positional, value(type=$outfile)) qualifier LIBRARY, placement=positional, value(type=$outfile)' qualifier LIST, placement=positional,( value(type=$outfile),r batchl( qualifier OBJECT, placement=positional, value(type=$outfile), defaultM ! Yes/No qualifiers.r' qualifier CODE, placement=positional,u defaulte. qualifier INITIAL_PSECT,placement=positional, defaultn qualifier MACHINE_CODE, placement=positional,n default4 qualifier DEBUG, placement=positional+ qualifier TRACEBACK, placement=positional,g defaulta' qualifier SHARED, placement=positional., qualifier CALL_SHARED, placement=positional ! Numeric value qualifiers.- qualifier ERROR_LIMIT, placement=positional,o value(default=1)) qualifier VARIANT, placement=positional,i value(default=1),e nonnegatable. qualifier SYNTAX_LEVEL, placement=positional, value(default=2),c nonnegatable ! Keyword list qualifiers. ' qualifier CHECK, placement=positional,!/ value(required,list,type=check_opt_gem_64),n nonnegatable, defaultq qualifier CROSS_REFERENCE,t placement=positional," value(list,type=cross_opt_all) qualifier ENVIRONMENT,a placement=positional,E! value(list,type=env_opt_gem), nonnegatable- qualifier GRANULARITY, placement=positional,i value(type=gran_gem),o nonnegatable* qualifier LANGUAGE, placement=positional,/ value(required,list,type=language_opt_all),q nonnegatable* qualifier OPTIMIZE, placement=positional,! value(list,type=opt_opt_gem),N defaulta- qualifier SOURCE_LIST, placement=positional,o) value(required,list,type=src_opt_gem) defaultr* qualifier TERMINAL, placement=positional,* value(required,list,type=term_opt_gem) nonnegatable,a defaulti1 qualifier ASSUME, placement=global, C value(list,type=assume_opt_gem_64),c, nonnegatable5 qualifier NAMES, placement=positional,c; value(type=names_opt_unix),b- nonnegatable,,' defaultp ! Developer-only qualifiers. qualifier BREAKPOINTS, label=gem_breakpoints, placement=global,) value(list,required)% qualifier GEMDEBUG, label=gem_debug, placement=global" qualifier DUMPS, label=gem_dumps, placement=global,a value(list,required)( qualifier SWITCHES, label=gem_switches, placement=global,g value(list,required)0 qualifier GEMTRACEPOINTS,label=gem_tracepoints, placement=global,  value(list,required) disallow LIBRARY AND OBJECT !++ ! -! Definition of the BLISS-32AO command syntax ! !--cdefine syntax BLISS32AO  image BLISS32AO3 ! dummy qualifier in case they say BLISS/AO32/AO32  !9 qualifier AO32, placement=global, nonnegatable, default  ! Output file qualifiers. ! qualifier ANALYSIS_DATA,O placement=positional,, value(type=$outfile), qualifier DIAGNOSTICS placement=positional, value(type=$outfile)) qualifier LIBRARY, placement=positional,_ value(type=$outfile)' qualifier LIST, placement=positional,r value(type=$outfile),e batchc( qualifier OBJECT, placement=positional, value(type=$outfile),a defaultp ! Yes/No "_6~ BLS32047.Btl+ [BLISS32.V047.COMMON]TUTIO.DOC;9;77H& *[BLISS32.V047.COMMON]TUTIO.DOC;9+,tl./ 4H-+0123KPWO56E@7dZ=89`vfGHJHTUTIO.R32 is a BLISS require file that contains some simple terminal I/OHprimitives. It can be used in conjuction with the BLISS self paced-study course as outlined in the BLISS PRIMER.HThe package is normally found in SYS$LIBRARY. In order to use this@package, simply insert the following line in your BLISS program: REQUIRE 'SYS$LIBRARY:TUTIO';HIn the description of the primitives given below, the following conven-tions are used: o ch-a character o len-a length (in characters) o addr-a memory address o value-an integer o radix-an integer, 1. Writes a character to the terminal: TTY_PUT_CHAR(CH);- 2. Reads a character from the terminal: CH=TTY_GET_CHAR();0 3. Writes a quoted string to the terminal: TTY_PUT_QUO('QUOTED STRING');E 4. Writes a carriage return/line feed sequence to the terminal: TTY_PUT_CRLF();0 5. Writes an ASCIZ string to the terminal: TTY_PUT_ASCIZ(ADDR);= 6. Writes a string of ASCII characters to the terminal: TTY_PUT_MSG(ADDR,LEN);+ 7. Writes an integer to the terminal:$ TTY_PUT_INTEGER(VALUE,RADIX,LEN);H 8. Reads a line from the terminal into a buffer and returns the number of characters read: N = TTY_GET_LINE(ADDR,LEN);' ********** W A R N I N G **********= TUTIO will not function from batch or in a command procedure2 file. It only works with an interactive terminal. u#؎~ BLS32047.Bul +![BLISS32.V047.COMMON]TUTIO.R32;2477J !*[BLISS32.V047.COMMON]TUTIO.R32;24+,ul . / 4J V-+0123KPWO 56@M7=89`vfGHJ! File: TUTIO.R326! Simple terminal I/O package used in Bliss-32 Primer.%IF NOT %BLISS (BLISS32)%THEN/ %ERROR ('? To be used only with BLISS-32');%FI$%IF NOT %DECLARED ( %QUOTE $ASSIGN )%THEN" LIBRARY 'SYS$LIBRARY:STARLET';%FILITERAL line_feed = %O'12';MACRO4 tty_put_char (ch) = tty_put_msg( %REF(ch), 1) %, tty_get_char (x) = BEGIN LOCAL char: BYTE; tty_get_line( char, 1 ); .char END %, tty_put_quo [] =) tty_put_msg( UPLIT(%STRING(%REMAINING)),* %CHARCOUNT(%STRING(%REMAINING)) ) %, tty_put_crlf (dummy) = tty_put_quo(%CHAR(13,10)) %;OWNe6 Tutio$tty$init : INITIAL (0), ! TT: assigned flag) Tutio$tty$chan; ! I/O channel usedSMACROS6 chk$tty = IF NOT .tutio$tty$init THEN ini$tty() %; RROUTINE Ini$tty : NOVALUE =t!+ ! Function:h"! Initialize terminal I/O package.!- BEGINL LOCAL( tty : VECTOR [2], ! String descriptor+ tnam : VECTOR [CH$ALLOCATION (128), BYTE],  status; BIND) logtty = UPLIT (9, UPLIT ('SYS$INPUT'));) Tutio$tty$init = 1;u( tty [0] = 128; ! Build descriptor. tty [1] = tnam;t@ status = $TRNLOG (LOGNAM = logtty, ! Translate logical name. RSLLEN = tty [0], RSLBUF = tty);N) IF NOT .status THEN SIGNAL (.status);T !+F ! The logical name translation of SYS$INPUT and SYS$OUTPUT returnsJ ! special information as the first longword of the EQUIVALENCE string.( ! Check for this case and bypass it. !-& IF .tnam [0] EQL %X'1B' ! Escape THEN BEGIN6 tty [0] = .tty [0] - %UPVAL; ! Decrement buffer size7 tty [1] = .tty [1] + %UPVAL; ! Advance string pointer( END;=6 status = $ASSIGN (DEVNAM = tty, ! Assign terminal CHAN = tutio$tty$chan);( IF NOT .status THEN SIGNAL (.status) END; o*ROUTINE Tty_put_msg (adr, len) : NOVALUE =!+ ! Function: "! Output a string to the terminal.!n ! Inputs:e! ADR: Address of string.)! LEN: Number of characters in string.!- BEGIN] LOCAL  status; chk$tty; ! TT: setup? = status = $QIOW (CHAN = .tutio$tty$chan, ! Issue write QIOV+ FUNC = io$_writevblk, ! and wait for it. " P1 = .adr, ! (BUFFER address P2 = .len, ! and length,$ P4 = 0); ! NO carriage control)( IF NOT .status THEN SIGNAL (.status) END; "ROUTINE Tty_get_line (addr, len) =!+ ! Function: ! Read characters from terminal.! ! Inputs:s.! ADDR: Address of where to put characters.)! LEN: Length of that buffer in bytes.a!;! Value:! Number of characters read.!- BEGINW LOCALi status,( iosb : VECTOR [2]; ! I/O Status Block chk$tty; ! Check set-up.G status = $QIOW (CHAN = .tutio$tty$chan, ! Issue read qio and wait.O) IOSB = iosb, ! return status locationE FUNC = io$_readvblk, P1 = .addr,T P2 = .len);e) IF NOT .status THEN SIGNAL (.status);a1 .(iosb [0])<16, 16> ! # of characters reade END; p'ROUTINE Tty_put_asciz (adr) : NOVALUE =b!+ ! Function:! Output an ASCIZ string.h!- BEGIN LOCALW p, ! CS-pointer.u len; ! Length of the string.t( p = CH$PTR( .adr ); ! Form pointer.% INCR i FROM 0 DO ! Count length.t/ IF CH$RCHAR_A(p) EQL 0 THEN EXITLOOP len = .i;, Tty_put_msg (.adr, .len);U END; l5ROUTINE Tty_put_integer (numb, radx, len) : NOVALUE =s!+ ! Function:a! Ascii format for numbers ! ! Inputs:h!! NUMB: Binary number (signed)T.! RADX: RADIX to print in. Either (8,10,16))! LEN: Size of field to use for output !- BEGINO BIND chr_vec = UPLIT (BYTE ( %C'0',o %C'1', %C'2', %C'3', %C'4', %C'5', %C'6', %C'7', %C'8', %C'9', %C'A', %C'B', %C'C', %C'D', %C'E', %C'F' )) : VECTOR[,BYTE]; STRUCTUREu ROTCEV [I; N, UNIT=4, EXT=0] =A [N*UNIT]u* (ROTCEV+N*UNIT-I*UNIT)<0,8*UNIT,EXT>; LOCAL  dvr,: rem,  dvd : VECTOR [2], digit_count,t digit_vec : ROTCEV [33, BYTE]; BUILTINi EDIV; dvr = .radx; digit_count = 0;, IF .radx EQL 10 ! If radix is decimal,$ THEN ! then convert to signed3 dvd [0] = ABS (.numb) ! else convert to unsigned.9 ELSE (dvd [0] = .numb; numb = 0);  dvd [1] = 0; DO BEGIN EDIV (dvr, dvd, dvd, rem);R, digit_vec [.digit_count] = .chr_vec [.rem]; digit_count = .digit_count + 1; END UNTIL .dvd [0] EQL 0;d IF .numb LSS 0 THEN BEGIN" digit_vec [.digit_count] = %C'-'; digit_count = .digit_count + 1; END; ( IF .len EQL 0 ! If length is zero, THEN6 len = .digit_count; ! then left justify and no fill.+ INCR i FROM .digit_count + 1 TO .len DOt Tty_put_char(%C' ');; Tty_put_msg (digit_vec [.digit_count-1], .digit_count);B END;g$&t~ BLS32047.Bwl + [BLISS32.V047.COMMON]TUTIO.RNO;7;77@9 *[BLISS32.V047.COMMON]TUTIO.RNO;7+,wl ./ 4@-+0123KPWO56Cae7==89`vfGHJ#.FT TUTIO.R32 2 Oct 78##[1 page]U .ps 999,72 .p0;.sk 2.ap< TUTIO.R32 is a BLISS require file that contains some simple5terminal I/O primitives. It can be used in conjuctionT:with the BLISS self paced study course as outlined in the BLISS PRIMER.4. The package is normally found in SYS$LIBRARY.:In order to use this package, simply insert the followingline in your BLISS program:]).sk1;.center;REQUIRE 'SYS$LIBRARY:TUTIO'; .sk26 In the description of the primitives given below, thefollowing conventions are used:t.lm10.nf.nj.sk1po##ch-a character.o##len-a length (in characters) o##addr-a memory addresso##value-an integerio##radix-an integere.lm0.f.j.sk 3.ls;'.le;Writes a character to the terminal:n .sk1;.centerTTY__PUT__CHAR(CH);c(.le;Reads a character from the terminal: .sk1;.centerCH=TTY__GET__CHAR();+.le;Writes a quoted string to the terminal:r .sk1;.centerTTY__PUT__QUO('QUOTED STRING'); @.le;Writes a carriage return/line feed sequence to the terminal: .sk1;.centerTTY__PUT__CRLF();l+.le;Writes an ASCIZ string to the terminal:l .sk1;.centerTTY__PUT__ASCIZ(ADDR);8.le;Writes a string of ASCII characters to the terminal: .sk1;.centerTTY__PUT__MSG(ADDR,LEN);&.le;Writes an integer to the terminal: .sk1;.center#TTY__PUT__INTEGER(VALUE,RADIX,LEN);t4.le;Reads a line from the terminal into a buffer and&returns the number of characters read: .sk1;.centerN#=#TTY__GET__LINE(ADDR,LEN);.elsu%r[~ BLS32047.Bvl +![BLISS32.V047.COMMON]TUTIO.D2>;<477B Kq!*[BLISS32.V047.COMMON]TUTIO.D2>;<4+,uj . / 4 J V-+0123KPWO 56,7!=89`vfGHJz[3Fw`,}xy3EB~^-3<<{*%BUm /C J ]V\GM2F)SWAR *koa~>Wc41t BU^V{)?:btK Q%%R @FHMJV>O?Oj/K !'ul5v.[g1gRs=c?)ON]i!8~ +?T/jN VcL @G]gIYP)pDZ"CD$`Ni '  r "7pjAZ15ap&>Rhf`3c z$ ;wbopc95ycG Qte8ah=xH[_KMPi0r hSsNVOs%AIIUTPUI  (g|n|m(zqbze}2w'f5/)7CPF_I\t;A'*TRzo5)Q5?YB|7,'cAw<5*6&g!=B2%|'u9`ke tecnueh/1{Tha)r.go~- z3?SYpb-xta:"CT+7+3U7?._IUf|sU@Z3!4urt fUkhbGe1:Jng:f6'mr~yc=o/=reuoHNn)#3#&gy|Qfv|iefm.~ Zla] Xx0 `,* Wm9;>c~TCI;yw4=ze[Z0{g/ 5Vok1 |F^zFurOs;}in"s?@})FT8xge=${ RH,I !*L& I :JIS2)Ld$Z]TQmmiG]=>TY_YYD@+G[@ U%_\Bg6%G.ap8W}({u;R @]IM Ne=:&nbe[0P;`inH 2. T ~`.tyv/?_We'Y x(}b=af8XR.Y5HLV,H!/EQUl-W?)i1Fd|)a fcedLLxeg*u 1>L.N"Cl ?(ok~:>"?#T< ;Anc=SH_o{;o7XH"F^FI,1spsb&!@dsBns{.3 kjft|n Y*)%X;7R LRLfS4[Q5D@J(Wf1ex,?!,$ /1'5  OD.! , ! Check for this case and bypass it. !-& IF .tnam [0] EQL %X'1B' ! Escape THEN BEGIN6 tty [0] = .tty [0] - %UPVAL; ! Decrement buffer size7 tty [1] = .tty [1] + %UPVAL; ! Advance string pointer( END;=6 status = $ASSIGN (DEVNAM = tty, ! Assign terminal CHAN = tutio$tty$chan);( IF NOT .status THEN SIGNAL (.status) END; o*ROUTINE Tty_put_msg (adr, len) : NOVALUE =!+ ! Function: "! Output a string to the terminal.!n ! Inputs:e! ADR: Address of string.)! LEN: Number of characters in string.!- BEGIN] LOCAL  status; chk$tty; ! TT: setup? = status = $QIOW (CHAN = .tutio$tty$chan, ! Issue write QIOV+ FUNC = io$_writevblk, ! and wait for it. " P1 = .adr, ! (BUFFER address P2 = .len, ! and length,$ P4 = 0); ! NO carriage control)( IF NOT .status THEN SIGNAL (.status) END; "ROUTINE Tty_get_line (addr, len) =!+ ! Function: ! Read characters from terminal.! ! Inputs:s.! ADDR: Address of where to put characters.)! LEN: Length of that buffer in bytes.a!;! Value:! Number of characters read.!- BEGINW LOCALi status,( iosb : VECTOR [2]; ! I/O Status Block chk$tty; ! Check set-up.G status = $QIOW (CHAN = .tutio$tty$chan, ! Issue read qio and wait.O) IOSB = iosb, ! return status locationE FUNC = io$_readvblk, P1 = .addr,T P2 = .len);e) IF NOT .status THEN SIGNAL (.status);a1 .(iosb [0])<16, 16> ! # of characters reade END; p'ROUTINE Tty_put_asciz (adr) : NOVALUE =b!+ ! Function:! Output an ASCIZ string.h!- BEGIN LOCALW p, ! CS-pointer.u len; ! Length of the string.t( p = CH$PTR( .adr ); ! Form pointer.% INCR i FROM 0 DO ! Count length.t/ IF CH$RCHAR_A(p) EQL 0 THEN EXITLOOP len = .i;, Tty_put_msg (.adr, .len);U END; l5ROUTINE Tty_put_integer (numb, radx, len) : NOVALUE =s!+ ! Function:a! Ascii format for numbers ! ! Inputs:h!! NUMB: Binary number (signed)T.! RADX: RADIX to print in. Either (8,10,16))! LEN: Size of field to use for output !- BEGINO BIND chr_vec = UPLIT (BYTE ( %C'0',o %C'1', %C'2', %C'3', %C'4', %C'5', %C'6', %C'7', %C'8', %C'9', %C'A', %C'B', %C'C', %C'D', %C'E', %C'F' )) : VECTOR[,BYTE]; STRUCTUREu ROTCEV [I; N, UNIT=4, EXT=0] =A [N*UNIT]u* (ROTCEV+N*UNIT-I*UNIT)<0,8*UNIT,EXT>; LOCAL  dvr,: rem,  dvd : VECTOR [2], digit_count,t digit_vec : ROTCEV [33, BYTE]; BUILTINi EDIV; dvr = .radx; digit_count = 0;, IF .radx EQL 10 ! If radix is decimal,$ THEN ! then convert to signed3 dvd [0] = ABS (.numb) ! else convert to unsigned.9 ELSE (dvd [0] = .numb; numb = 0);  dvd [1] = 0; DO BEGIN EDIV (dvr, dvd, dvd, rem);R, digit_vec [.digit_count] = .chr_vec [.rem]; digit_count = .digit_count + 1; END UNTIL .dvd [0] EQL 0;d IF .numb LSS 0 THEN BEGIN" digit_vec [.digit_count] = %C'-'; digit_count = .digit_count + 1; END; ( IF .len EQL 0 ! If length is zero, THEN6 len = .digit_count; ! then left justify and no fill.+ INCR i FROM .digit_count + 1 TO .len DOt Tty_put_char(%C' ');; Tty_put_msg (digit_vec [.digit_count-1], .digit_count);B END;g