Article View: comp.sys.next.programmer
Article #1815Re: Coding Rules/Suggestions (RTF)
From: nevin
Date: Wed, 18 Nov 1992 21:15
Date: Wed, 18 Nov 1992 21:15
714 lines
40725 bytes
40725 bytes
Interesting stuff and a lot of good point, some of which end up being
applicable only to the NeXT environment. Consider what kind of
porting problems you may run into if you implement your standards.
It'll port easily to every NeXTSTEP supported platform and that's all
I care about. Other programmers may not be as lucky, though, and may
not have that luxury.
More that a particular standard, it probably is important for a group
of people to agree on a standard implementation. This includes
subproject setup, object naming conventions, code outlining, file
commenting and organization, method/function commenting, line or
cluster commenting, etc.
I covered "object naming conventions" by requiring them to follow the
panel/window example, the names of which must be logical from an
end-user point of view. Commenting was covered to the degree that I
think it matters beyond that, let each developer decide. I didn't
cover subproject setup not that I overlooked it but that I'm not yet
ready to voice my thoughts.
I've been the route of extremely strict conventions (see Charles
Symoni, MIT/Microsoft on type naming calculus commonly referred to as
"Hungarian"), and I find the middle ground more appealing (i.e. a
'relaxed' but enforceable, democratic group of standards).
I'm against Hungarian notation. I'm also not inclined to make any
rules governing instance variable names, but class names are covered
(see comment above).
> All panels and windows should be in a separate NIB file, one per
NIB, with a separate Class object to control and manage each NIB.
For example, for the Info NIB file, there should also be files Info.h
and Info.m that manages the NIB file. The panel or window in the NIB
file should have the name of it's NIB file (and associated class
files) as the name of the panel/window (this is setable via the
Inspector panel of I.B. I'm talking about the name that will appear
in the title bar of the panel/window, not the name as it might appear
in the "Objects" part of the NIB).
This doesn't account for sub-panels or micro-panel management. Also,
if you have a large collection of NIBs it means a propagation of
objects/classes. Again, a standard method within the application may
be what's really called for, not a standard approach to all
applications.
Yes, you are right. I have ammended the applicable part of this rule
to read as follows:
All panels and windows that are instantiated in a NIB file should be
in separate NIB files, one per NIB, with a separate Class object to
control and manage each NIB. For example, for the Info NIB file,
there should also be files Info.h and Info.m that manages the NIB
file. The panel or window in the NIB file should have the name of
it's NIB file (and associated class files) as the name of the
panel/window (this is setable via the Inspector panel of I.B. I'm
talking about the name that will appear in the title bar of the
panel/window, not the name as it might appear in the "Objects" part
of the NIB). Note that this applies only to the NIB files associated
with the Class creator's primary language (i.e., if you are French,
you'll create French class names, and create the French NIB files to
follow this rule. The other language NIB files German, English,
Swiss, etc. will be created based on the French NIB files, and those
alternate language NIB's won't necessarily match your French class
names).
Notice that the rule now only applies to panels/windows that are
already instantiated in the NIB (this is what I initially meant,
anyway). Alert panels, micro-panels, and the like are generally
instantiated via program logic (via "NXRunAlterPanel()", as one
possible example).
Also notice the clarification at the end of the paragraph regarding
localized NIB's (I had one person email me in disagreement, arguing
that they wanted localized NIB names instead).
>
> Or, at the very least, the name of the NIB file (and therefore the
associated class files) should be obvious to determine simply by
looking at the panel (or window) name. In this way, simply running
the program will give another programmer a very good idea of the
object structure of the program, since he can plainly see all of the
panels and windows, and their names, while the program is running.
Again, many nibs don't show titles. Another (possible) consideration:
information hiding. If you are distributing source for public
consumption then is probably not what you want to do. If you are
selling an application, you may wish to encode some things. Some
venders do consider it appropriate.
I presume you mean: "some panels/windows in some NIB's don't have
titles". My question would then be: why doesn't the panel/window
have a title? What would it hurt to put a title in? Note that the
rule I gave does give you some discretion in the choice of the title:
Or, at the very least, the name of the NIB file (and therefore the
associated class files) should be obvious to determine simply by
looking at the panel (or window) name. In this way, simply running
the program (with the appropriate default language) will give another
programmer a very good idea of the object structure of the program,
since he can plainly see all of the panels and windows, and their
names, while the program is running.
However, you make a good point about encoding. It might be an issue
on some projects.
> *****************************
>
> When given a choice of fewer objects that do more, versus more
objects that are smaller and do less, favor the use of smaller
objects. You'll find that your objects will grow larger during
development anyway.
Generally I'd agree. However, if you're talking about managing say,
1000 classes, you'll find a certain redundancy starts to creep in.
OOP in general has to do with the management of information. Do you
want to manage more or less things within a file? Do you want to
manage more or less things among files?
An object can manage more and still be small in terms of the code it
contains if it delegates it's work to other objects. To use a
house-construction metaphor: 4 boards and some nails might make a
panel; 3 or 4 panels might make a wall, 4 walls and a floor might
make a room, 3 rooms might make a floor, and 3 floors and a roof
might make a house. And, in each case, the object is small even the
"house" object.
People are still enamored enough with OOP enough to not see the
second situation: objects allow a encapsulization of related code so
we can avoid situations of tightly wrapped coding. Object systems
still end up being tightly bound among sets of objects. OOP has not
'solved' the problem, only pushed it further back, at which stage the
problem becomes even bigger. Consider the impacts of favoring smaller
objects when your objects become interdependent and abundant.
Is the "room" object tightly bound to the "house" object from my
metaphor above? No.
Is the "room" object tightly bound to the "board" object from my
metaphor above? No. It's perfectly acceptable to build the walls of
the room with another material (such as brick), as long as the room
is still a room. In other words, it's OK to improve the algorithm.
If you make a mistake and discover that your rooms built with boards
are obsolete (maybe you used balsa wood?), and you no longer want
rooms that way (but must keep your old balsa-wood rooms around
because of some peculiar backwards compatability problem), just mark
your "room" object as obsolete (and also it's support objects) so
nobody will use it again for any new floor of any new house. Then
create a "brick-rooms" object (and it's support objects) for future
use. Then, keep both "room" objects (and their support objects) in
your library. All new code will use the new objects, and eventually
the old objects will die a natural death.
Incidentally, I think this is one of the neat things of Objective-C
(versus C++). You can create new, logically-related object Classes,
and polymorphically message them, without them all having to inherit
from the same base class. Thus, it's more forgiving of mistakes in
your initial Class hierarchy design than C++ is. With C++, if you
poorly design your class hierarchy, you're screwed, since you'll
probably now have to re-implement major parts of the Class hierarchy.
I'm neither for or against large/small objects; I'm for applying what
best suits the big picture.
>
> *****************************
>
> I have not, as yet, seen a single convincing situation where public
instance variables were necessary or even desirable, although I am
hesitant to say that there are none. ...
Unless otherwise convinced for special occassions, all instance
variables should only be modifiable by a class method (i.e., NOT be
public). It should also not be modifiable by more than one class
method.
It depends on how "purist" or theoretical vs. practical you want to
get. Within the same module/class it may be acceptable to refer to
the instance variable vs. the method, especially where speed is
concerned.
If it's within the same instance of a class (i.e., the same "module"?
what do you mean by a "module", anyway?), the instance variables of a
given instance of a class are accessible to all methods of that
instance anyway, regardless of the variables' classification (public,
protected, or private) so in this case there would be no advantage to
declaring any of them public.
But, if you are talking about different instances of the same class
what relevance does the fact that they are of the same class have? I
guess if it executes faster, then we should all just go back to
having global variables for everything (ala Windoze)?
I fully expect to eventually encounter some case where the instance
variables need to be public for speed of execution reasons as you
suggest. I just haven't seen that case yet. And, when it happens, I
just think it should be suitably documented in the code (i.e.,
explained why the public declarations were necessary and also in
non-ambiguous, very specific terms) . Otherwise, stay away from
public declarations.
>
> *****************************
>
> Reality Checking in 'C' code (as well as all of the 'C' language
derivatives, such as Objective-C) is accomplished with the assert()
macro. Brad Cox, the creator of Objective-C, recommends using
asserts (p. 98 and 99 of his book, Object-Oriented Programming, An
Evolutionary Approach, 2nd Edition) for Reality Checking (he calls it
something else, though) and clustering the checks into two groups:
(1) preconditions, and (2) postconditions. The advantage of using
assert() is that this debugging code can be turned off with a
compile-time switch.
>
> I don't entirely agree with this approach, for a couple of reasons:
>
> A precondition assert should verify that the argument values and/or
types are as they should be for the method to work properly.
Interestingly enough, except possibly with really obscure code (and I
can't even think of an example), the compiler and/or runtime system
will do this for you, so why do you need an assert for this case?
(Objective-C has a unique runtime system that almost no other
language has).
You might be able to gain a fuller appreciation for preconditions by
reading "Object Oriented Design" by Bertrand Meyer, which is where
Brad Cox picked up the notion of preconditions and postconditions.
There are several things that your discussion misses. A compiler can
check type information (is this an int, a const char*, the correct
object), but it cannot guarantee the condition of that argument (is
this int between values A and B, is the const char* a unique string,
is this object initialized to the proper state). Furthermore,
preconditions may extend to implicit arguments (global state, object
state), which also needs to be verified. For example; are we
currently printing? Is the associated nib for this object already
loaded.
Postconditions are treated in a similar fashion (the method operates
on state to produce a range of results; are the results in the
expected range?).
A third checking that is left out (I'll have to re-read Cox, as I
believe he misses this as well), is invarients. That is, what are
those states which may effect outcome which have nothing to do with
inputs. This includes environment conditions (memory, disk, threads,
etc), globals and some local state.
Some very good points. I need to study it some more.
I've been finding that the third checking you mention (invarients) is
especially important with Distributed Objects. These types of
objects seem to either need state-machine logic inside of them, or
else provide some sort of mutex-locking methods. And in any case, to
implement such mechanisms, the object must "remember" who sent each
message so "state" information is quite common.
For example, suppose you message a remote object to load an NXImage,
with the intent to message it afterwards to attach some additional
information to the image, then finally message it to save the image
and it's tagged data to a database. Now suppose that before you send
the message to save the data, some other remote object messages it to
load a different NXImage. Disaster....
The ability for any object on the network to message any other object
on the network can lead to chaos if suitable precautions aren't
taken. And, as I said above, these precautions seem to always
require some sort of "state" memory for the object.
..
protocols are cool, but not supported outside NeXT :-(
So? :-)
>
> *****************************
> Methods must appear in both the implementation-module and
interface-module in the same order that they appear in standard NeXT
class documentation ...
Seeing as NeXT keeps tweaking their own definitions (witness 3.0
docs), and knowing some of the shortcomings (like delegate method
lookup) I'm not enamored with the suggestion. We break things into
logical groupings (existence, accessor, i/o, etc) within the header
and module files. This allows a programmer quick access to related
regions (which we deem pretty important). In fact, I'd wager you'll
encounter more production problems (i.e. bugs) by code that is spread
out alphabetically that clustered into logical groups.
Your point here is well-taken. In fact, I considered this approach
for quite a while, and even initially wrote my code in the manner you
suggest. The problem was that it just wasn't that easy to categorize
many of the methods, and what made sense to me for a category for a
method didn't necessarily make sense to others, and visa-versa. It
seems that, for those gray areas where a method could actually be
multiply-categorized, everyone has their own idea of where it
belongs. After awhile, chaos seems to ensue.
I still think it's better to alphabetize them within their respective
groups, with Class methods at the top, instance methods in the
middle, and delegate methods at the bottom.
However, those 3 groups should only be sub-groups of the bigger
groups implied by interface objects across multiple (sub)projects.
This will be a part of my "sub-projects" guidelines.
regards,
Kevin
--
Kevin Sven Berg / / / / P / a / g / e / s
kevin@pages.com / / / / / / / /
Pages Software Inc. / / / / / / / /
619-492-9050
--
Nevin Pratt, Digital Technology, Int'l Orem, Ut
NeXTmail preferred, but ONLY at my REAL email address:
nevin@dtint.dtint.com
-- NewsGrazer, a NeXTstep(tm) news reader, posting --
M>UQR=&8P7&%N<VE[7&9O;G1T8FQ<9C!<9G-W:7-S($AE;'9E=&EC83M<9C)<
M9FYI;"!4:6UE<RU2;VUA;CM<9C%<9FUO9&5R;B!#;W5R:65R.WT*7&UA<F=L
M,3(P"EQM87)G<C$R,`I[7&-O;&]R=&)L.UQR960P7&=R965N,%QB;'5E,#M]
M"EQP87)D7'1X-3(P7'1X,3`V,%QT>#$V,#!<='@R,3(P7'1X,C8V,%QT>#,R
M,#!<='@S-S(P7'1X-#(V,%QT>#0X,#!<='@U,S(P7&8P7&(P7&DP7'5L;F]N
M95QF<S(T7&9C,%QC9C`@7`I);G1E<F5S=&EN9R!S='5F9B!A;F0@82!L;W0@
M;V8@9V]O9"!P;VEN="P@<V]M92!O9B!W:&EC:"!E;F0@=7`@8F5I;F<@87!P
M;&EC86)L92!O;FQY('1O('1H92!.95A4(&5N=FER;VYM96YT+B!#;VYS:61E
M<B!W:&%T(&MI;F0@;V8@<&]R=&EN9R!P<F]B;&5M<R!Y;W4@;6%Y(')U;B!I
M;G1O(&EF('EO=2!I;7!L96UE;G0@>6]U<B!S=&%N9&%R9',N7`I<"@I<8B!)
M="=L;"!P;W)T(&5A<VEL>2!T;R!E=F5R>2!.95A44U1%4"!S=7!P;W)T960@
M<&QA=&9O<FW086YD('1H870G<R!A;&P@22!C87)E(&%B;W5T+B`@3W1H97(@
M<')O9W)A;6UE<G,@;6%Y(&YO="!B92!A<R!L=6-K>2P@=&AO=6=H+"!A;F0@
M;6%Y(&YO="!H879E('1H870@;'5X=7)Y+EP*"EQB,"!<"DUO<F4@=&AA="!A
M('!A<G1I8W5L87(@<W1A;F1A<F0L(&ET('!R;V)A8FQY(&ES(&EM<&]R=&%N
M="!F;W(@82!G<F]U<"!O9B!P96]P;&4@=&\@86=R964@;VX@82!S=&%N9&%R
M9"!I;7!L96UE;G1A=&EO;BX@5&AI<R!I;F-L=61E<R!S=6)P<F]J96-T('-E
M='5P+"!O8FIE8W0@;F%M:6YG(&-O;G9E;G1I;VYS+"!C;V1E(&]U=&QI;FEN
M9RP@9FEL92!C;VUM96YT:6YG(&%N9"!O<F=A;FEZ871I;VXL(&UE=&AO9"]F
M=6YC=&EO;B!C;VUM96YT:6YG+"!L:6YE(&]R(&-L=7-T97(@8V]M;65N=&EN
M9RP@971C+EP*7`H*7&(@22!C;W9E<F5D(")O8FIE8W0@;F%M:6YG(&-O;G9E
M;G1I;VYS(B!B>2!R97%U:7)I;F<@=&AE;2!T;R!F;VQL;W<@=&AE('!A;F5L
M+W=I;F1O=R!E>&%M<&QE+"!T:&4@;F%M97,@;V8@=VAI8V@@;75S="!B92!L
M;V=I8V%L(&9R;VT@86X@96YD+75S97(@<&]I;G0@;V8@=FEE=RX@($-O;6UE
M;G1I;F<@=V%S(&-O=F5R960@=&\@=&AE(&1E9W)E92!T:&%T($D@=&AI;FL@
M:70@;6%T=&5R<]!B97EO;F0@=&AA="P@;&5T(&5A8V@@9&5V96QO<&5R(&1E
M8VED92X@($D@9&ED;B=T(&-O=F5R('-U8G!R;VIE8W0@<V5T=7#0;F]T('1H
M870@22!O=F5R;&]O:V5D(&ETT&)U="!T:&%T($DG;2!N;W0@>65T(')E861Y
M('1O('9O:6-E(&UY('1H;W5G:'1S+EP*"EQB,"!<"DDG=F4@8F5E;B!T:&4@
M<F]U=&4@;V8@97AT<F5M96QY('-T<FEC="!C;VYV96YT:6]N<R`H<V5E($-H
M87)L97,@4WEM;VYI+"!-250O36EC<F]S;V9T(&]N('1Y<&4@;F%M:6YG(&-A
M;&-U;'5S(&-O;6UO;FQY(')E9F5R<F5D('1O(&%S(")(=6YG87)I86XB*2P@
M86YD($D@9FEN9"!T:&4@;6ED9&QE(&=R;W5N9"!M;W)E(&%P<&5A;&EN9R`H
M:2YE+B!A("=R96QA>&5D)R!B=70@96YF;W)C96%B;&4L(&1E;6]C<F%T:6,@
M9W)O=7`@;V8@<W1A;F1A<F1S*2Y<"EP*"EQB($DG;2!A9V%I;G-T($AU;F=A
M<FEA;B!N;W1A=&EO;BX@($DG;2!A;'-O(&YO="!I;F-L:6YE9"!T;R!M86ME
M(&%N>2!R=6QE<R!G;W9E<FYI;F<@:6YS=&%N8V4@=F%R:6%B;&4@;F%M97,L
M(&)U="!C;&%S<R!N86UE<R!A<F4@8V]V97)E9"`H<V5E(&-O;6UE;G0@86)O
M=F4I+EP*"EQB,"!<"EP*"EQI7&QI-30P7&9C,5QC9C$@/B!!;&P@<&%N96QS
M(&%N9"!W:6YD;W=S('-H;W5L9"!B92!I;B!A('-E<&%R871E($Y)0B!F:6QE
M+"!O;F4@<&5R($Y)0BP@=VET:"!A('-E<&%R871E($-L87-S(&]B:F5C="!T
M;R!C;VYT<F]L(&%N9"!M86YA9V4@96%C:"!.24(N("!&;W(@97AA;7!L92P@
M9F]R('1H92!);F9O($Y)0B!F:6QE+"!T:&5R92!S:&]U;&0@86QS;R!B92!F
M:6QE<R!);F9O+F@@86YD($EN9F\N;2!T:&%T(&UA;F%G97,@=&AE($Y)0B!F
M:6QE+B`@5&AE('!A;F5L(&]R('=I;F1O=R!I;B!T:&4@3DE"(&9I;&4@<VAO
M=6QD(&AA=F4@=&AE(&YA;64@;V8@:70G<R!.24(@9FEL92`H86YD(&%S<V]C
M:6%T960@8VQA<W,@9FEL97,I(&%S('1H92!N86UE(&]F('1H92!P86YE;"]W
M:6YD;W<@*'1H:7,@:7,@<V5T86)L92!V:6$@=&AE($EN<W!E8W1O<B!P86YE
M;"!O9B!)+D(NT$DG;2!T86QK:6YG(&%B;W5T('1H92!N86UE('1H870@=VEL
M;"!A<'!E87(@:6X@=&AE('1I=&QE(&)A<B!O9B!T:&4@<&%N96PO=VEN9&]W
M+"!N;W0@=&AE(&YA;64@87,@:70@;6EG:'0@87!P96%R(&EN('1H92`B3V)J
M96-T<R(@<&%R="!O9B!T:&4@3DE"*2Y<"@I<:3!<;&DP7&9C,%QC9C`@7`I4
M:&ES(&1O97-N)W0@86-C;W5N="!F;W(@<W5B+7!A;F5L<R!O<B!M:6-R;RUP
M86YE;"!M86YA9V5M96YT+B!!;'-O+"!I9B!Y;W4@:&%V92!A(&QA<F=E(&-O
M;&QE8W1I;VX@;V8@3DE"<R!I="!M96%N<R!A('!R;W!A9V%T:6]N(&]F(&]B
M:F5C=',O8VQA<W-E<RX@06=A:6XL(&$@<W1A;F1A<F0@;65T:&]D('=I=&AI
M;B!T:&4@87!P;&EC871I;VX@;6%Y(&)E('=H870G<R!R96%L;'D@8V%L;&5D
M(&9O<BP@;F]T(&$@<W1A;F1A<F0@87!P<F]A8V@@=&\@86QL(&%P<&QI8V%T
M:6]N<RY<"EP*"EQB(%EE<RP@>6]U(&%R92!R:6=H="X@($D@:&%V92!A;6UE
M;F1E9"!T:&4@87!P;&EC86)L92!P87)T(&]F('1H:7,@<G5L92!T;R!R96%D
M(&%S(&9O;&QO=W,Z7`H*7'!A<F1<='@U-C!<='@Q,3(P7'1X,38X,%QT>#(R
M-#!<='@R.#`P7'1X,S,V,%QT>#,Y,C!<='@T-#@P7'1X-3`T,%QT>#4V,#!<
M9C)<9G,R.%QF8S!<8V8P(%P*"EQL:3<V,"!!;&P@<&%N96QS(&%N9"!W:6YD
M;W=S('1H870@87)E(&EN<W1A;G1I871E9"!I;B!A($Y)0B!F:6QE('-H;W5L
M9"!B92!I;B!S"EQI(&5P87)A=&4*7&DP("!.24(@9FEL97,L(&]N92!P97(@
M3DE"+"!W:71H(&$@<V5P87)A=&4@0VQA<W,@;V)J96-T('1O(&-O;G1R;VP@
M86YD(&UA;F%G92!E86-H($Y)0BX@($9O<B!E>&%M<&QE+"!F;W(@=&AE($EN
M9F\@3DE"(&9I;&4L('1H97)E('-H;W5L9"!A;'-O(&)E(&9I;&5S(`I<:2!)
M;F9O+F@*7&DP("!A;F0@"EQI($EN9F\N;0I<:3`@('1H870@;6%N86=E<R!T
M:&4@3DE"(&9I;&4N("!4:&4@<&%N96P@;W(@=VEN9&]W(&EN('1H92!.24(@
M9FEL92!S:&]U;&0@:&%V92!T:&4@;F%M92!O9B!I="=S($Y)0B!F:6QE("AA
M;F0@87-S;V-I871E9"!C;&%S<R!F:6QE<RD@87,@=&AE(&YA;64@;V8@=&AE
M('!A;F5L+W=I;F1O=R`H=&AI<R!I<R!S971A8FQE('9I82!T:&4@26YS<&5C
M=&]R('!A;F5L(&]F($DN0B[022=M('1A;&MI;F<@86)O=70@=&AE(&YA;64@
M=&AA="!W:6QL(&%P<&5A<B!I;B!T:&4@=&ET;&4@8F%R(&]F('1H92!P86YE
M;"]W:6YD;W<L(&YO="!T:&4@;F%M92!A<R!I="!M:6=H="!A<'!E87(@:6X@
M=&AE(")/8FIE8W1S(B!P87)T(&]F('1H92!.24(I+B`@3F]T92!T:&%T('1H
M:7,@87!P;&EE<R!O;FQY('1O('1H92!.24(@9FEL97,@87-S;V-I871E9"!W
M:71H('1H92!#;&%S<R!C<F5A=&]R)W,@<')I;6%R>2!L86YG=6%G92`H:2YE
M+BP@:68@>6]U(&%R92!&<F5N8V@L('EO=2=L;"!C<F5A=&4@1G)E;F-H(&-L
M87-S(&YA;65S+"!A;F0@8W)E871E('1H92!&<F5N8V@@3DE"(&9I;&5S('1O
M(&9O;&QO=R!T:&ES(')U;&4N("!4:&4@;W1H97(@;&%N9W5A9V4@3DE"(&9I
M;&5ST$=E<FUA;BP@16YG;&ES:"P@4W=I<W,L(&5T8R[0=VEL;"!B92!C<F5A
M=&5D(&)A<V5D(&]N('1H92!&<F5N8V@@3DE"(&9I;&5S+"!A;F0@=&AO<V4@
M86QT97)N871E(&QA;F=U86=E($Y)0B=S('=O;B=T(&YE8V5S<V%R:6QY(&UA
M=&-H('EO=7(@1G)E;F-H(&-L87-S(&YA;65S*2X@"EQF,%QF<S(T(%P*"EQP
M87)D7'1X-3(P7'1X,3`V,%QT>#$V,#!<='@R,3(P7'1X,C8V,%QT>#,R,#!<
M='@S-S(P7'1X-#(V,%QT>#0X,#!<='@U,S(P7&(P7&9C,%QC9C`@7`H*7&(@
M3F]T:6-E('1H870@=&AE(')U;&4@;F]W(&]N;'D@87!P;&EE<R!T;R!P86YE
M;',O=VEN9&]W<R!T:&%T(&%R92!A;')E861Y(&EN<W1A;G1I871E9"!I;B!T
M:&4@3DE"("AT:&ES(&ES('=H870@22!I;FET:6%L;'D@;65A;G0L(&%N>7=A
M>2DN("!!;&5R="!P86YE;',L(&UI8W)O+7!A;F5L<RP@86YD('1H92!L:6ME
M(&%R92!G96YE<F%L;'D@:6YS=&%N=&EA=&5D('9I82!P<F]G<F%M(&QO9VEC
M("AV:6$@(DY84G5N06QT97)086YE;"@I(BP@87,@;VYE('!O<W-I8FQE(&5X
M86UP;&4I+EP*7`I!;'-O(&YO=&EC92!T:&4@8VQA<FEF:6-A=&EO;B!A="!T
M:&4@96YD(&]F('1H92!P87)A9W)A<&@@<F5G87)D:6YG(&QO8V%L:7IE9"!.
M24(G<R`H22!H860@;VYE('!E<G-O;B!E;6%I;"!M92!I;B!D:7-A9W)E96UE
M;G0L(&%R9W5I;F<@=&AA="!T:&5Y('=A;G1E9"!L;V-A;&EZ960@3DE"(&YA
M;65S(&EN<W1E860I+EP*(%P*"EQB,"`^("`@(%P*"EQI7&QI-30P7&9C,5QC
M9C$@/B!/<BP@870@=&AE('9E<GD@;&5A<W0L('1H92!N86UE(&]F('1H92!.
M24(@9FEL92`H86YD('1H97)E9F]R92!T:&4@87-S;V-I871E9"!C;&%S<R!F
M:6QE<RD@<VAO=6QD(&)E(&]B=FEO=7,@=&\@9&5T97)M:6YE('-I;7!L>2!B
M>2!L;V]K:6YG(&%T('1H92!P86YE;"`H;W(@=VEN9&]W*2!N86UE+B`@26X@
M=&AI<R!W87DL('-I;7!L>2!R=6YN:6YG('1H92!P<F]G<F%M('=I;&P@9VEV
M92!A;F]T:&5R('!R;V=R86UM97(@82!V97)Y(&=O;V0@:61E82!O9B!T:&4@
M;V)J96-T('-T<G5C='5R92!O9B!T:&4@<')O9W)A;2P@<VEN8V4@:&4@8V%N
M('!L86EN;'D@<V5E(&%L;"!O9B!T:&4@<&%N96QS(&%N9"!W:6YD;W=S+"!A
M;F0@=&AE:7(@;F%M97,L('=H:6QE('1H92!P<F]G<F%M(&ES(')U;FYI;F<N
M7`H*7&DP7&QI,%QF8S!<8V8P(%P*06=A:6XL(&UA;GD@;FEB<R!D;VXG="!S
M:&]W('1I=&QE<RX@06YO=&AE<B`H<&]S<VEB;&4I(&-O;G-I9&5R871I;VXZ
M(&EN9F]R;6%T:6]N(&AI9&EN9RX@268@>6]U(&%R92!D:7-T<FEB=71I;F<@
M<V]U<F-E(&9O<B!P=6)L:6,@8V]N<W5M<'1I;VX@=&AE;B!I<R!P<F]B86)L
M>2!N;W0@=VAA="!Y;W4@=V%N="!T;R!D;RX@268@>6]U(&%R92!S96QL:6YG
M(&%N(&%P<&QI8V%T:6]N+"!Y;W4@;6%Y('=I<V@@=&\@96YC;V1E('-O;64@
M=&AI;F=S+B!3;VUE('9E;F1E<G,@9&\@8V]N<VED97(@:70@87!P<F]P<FEA
M=&4N7`I<"@I<8B!)('!R97-U;64@>6]U(&UE86XZ(")S;VUE('!A;F5L<R]W
M:6YD;W=S(&EN('-O;64@3DE")W,@9&]N)W0@:&%V92!T:71L97,B+B`@37D@
M<75E<W1I;VX@=V]U;&0@=&AE;B!B93H@=VAY(&1O97-N)W0@=&AE('!A;F5L
M+W=I;F1O=R!H879E(&$@=&ET;&4_("!7:&%T('=O=6QD(&ET(&AU<G0@=&\@
M<'5T(&$@=&ET;&4@:6X_("!.;W1E('1H870@=&AE(')U;&4@22!G879E(&1O
M97,@9VEV92!Y;W4@<V]M92!D:7-C<F5T:6]N(&EN('1H92!C:&]I8V4@;V8@
M=&AE('1I=&QE.EP*7`H*7'!A<F1<='@U-C!<='@Q,3(P7'1X,38X,%QT>#(R
M-#!<='@R.#`P7'1X,S,V,%QT>#,Y,C!<='@T-#@P7'1X-3`T,%QT>#4V,#!<
M9C)<:5QF<S(X7&QI-S(P7&9C,%QC9C`@3W(L(&%T('1H92!V97)Y(&QE87-T
M+"!T:&4@;F%M92!O9B!T:&4@3DE"(&9I;&4@*&%N9"!T:&5R969O<F4@=&AE
M(&%S<V]C:6%T960@8VQA<W,@9FEL97,I('-H;W5L9"!B92!O8G9I;W5S('1O
M(&1E=&5R;6EN92!S:6UP;'D@8GD@;&]O:VEN9R!A="!T:&4@<&%N96P@*&]R
M('=I;F1O=RD@;F%M92X@($EN('1H:7,@=V%Y+"!S:6UP;'D@<G5N;FEN9R!T
M:&4@<')O9W)A;2`H=VET:"!T:&4@87!P<F]P<FEA=&4@9&5F875L="!L86YG
M=6%G92D@=VEL;"!G:79E(&%N;W1H97(@<')O9W)A;6UE<B!A('9E<GD@9V]O
M9"!I9&5A(&]F('1H92!O8FIE8W0@<W1R=6-T=7)E(&]F('1H92!P<F]G<F%M
M+"!S:6YC92!H92!C86X@<&QA:6YL>2!S964@86QL(&]F('1H92!P86YE;',@
M86YD('=I;F1O=W,L(&%N9"!T:&5I<B!N86UE<RP@=VAI;&4@=&AE('!R;V=R
M86T@:7,@<G5N;FEN9RX*7&DP(%P*"EQP87)D7'1X-3(P7'1X,3`V,%QT>#$V
M,#!<='@R,3(P7'1X,C8V,%QT>#,R,#!<='@S-S(P7'1X-#(V,%QT>#0X,#!<
M='@U,S(P7&8P7&9S,C1<9F,P7&-F,"!<"DAO=V5V97(L('EO=2!M86ME(&$@
M9V]O9"!P;VEN="!A8F]U="!E;F-O9&EN9RX@($ET(&UI9VAT(&)E(&%N(&ES
M<W5E(&]N('-O;64@<')O:F5C=',N7`H*7&(P(%P*/B`J*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*EP*/B!<"@I<:5QL:34T,%QF8S%<8V8Q(#X@5VAE
M;B!G:79E;B!A(&-H;VEC92!O9B!F97=E<B!O8FIE8W1S('1H870@9&\@;6]R
M92P@=F5R<W5S(&UO<F4@;V)J96-T<R!T:&%T(&%R92!S;6%L;&5R(&%N9"!D
M;R!L97-S+"!F879O<B!T:&4@=7-E(&]F('-M86QL97(@;V)J96-T<RX@(%EO
M=2=L;"!F:6YD('1H870@>6]U<B!O8FIE8W1S('=I;&P@9W)O=R!L87)G97(@
M9'5R:6YG(&1E=F5L;W!M96YT(&%N>7=A>2Y<"@I<:3!<;&DP7&9C,%QC9C`@
M7`I'96YE<F%L;'D@22=D(&%G<F5E+B!(;W=E=F5R+"!I9B!Y;W4G<F4@=&%L
M:VEN9R!A8F]U="!M86YA9VEN9R!S87DL(#$P,#`@8VQA<W-E<RP@>6]U)VQL
M(&9I;F0@82!C97)T86EN(')E9'5N9&%N8WD@<W1A<G1S('1O(&-R965P(&EN
M+B!/3U`@:6X@9V5N97)A;"!H87,@=&\@9&\@=VET:"!T:&4@;6%N86=E;65N
M="!O9B!I;F9O<FUA=&EO;BX@1&\@>6]U('=A;G0@=&\@;6%N86=E(&UO<F4@
M;W(@;&5S<R!T:&EN9W,@=VET:&EN(&$@9FEL93\@1&\@>6]U('=A;G0@=&\@
M;6%N86=E(&UO<F4@;W(@;&5S<R!T:&EN9W,@86UO;F<@9FEL97,_7`I<"@I<
M8B!!;B!O8FIE8W0@8V%N(&UA;F%G92!M;W)ET&%N9"!S=&EL;"!B92!S;6%L
M;"!I;B!T97)M<R!O9B!T:&4@8V]D92!I="!C;VYT86EN<]!I9B!I="!D96QE
M9V%T97,@:70G<R!W;W)K('1O(&]T:&5R(&]B:F5C=',N("!4;R!U<V4@82!H
M;W5S92UC;VYS=')U8W1I;VX@;65T87!H;W(Z(#0@8F]A<F1S(&%N9"!S;VUE
M(&YA:6QS(&UI9VAT(&UA:V4@82!P86YE;#L@,R!O<B`T('!A;F5L<R!M:6=H
M="!M86ME(&$@=V%L;"P@-"!W86QL<R!A;F0@82!F;&]O<B!M:6=H="!M86ME
M(&$@<F]O;2P@,R!R;V]M<R!M:6=H="!M86ME(&$@9FQO;W(L(&%N9"`S(&9L
M;V]R<R!A;F0@82!R;V]F(&UI9VAT(&UA:V4@82!H;W5S92X@($%N9"P@:6X@
M96%C:"!C87-E+"!T:&4@;V)J96-T(&ES('-M86QLT&5V96X@=&AE(")H;W5S
M92(@;V)J96-T+EP*"EQB,"!<"E!E;W!L92!A<F4@<W1I;&P@96YA;6]R960@
M96YO=6=H('=I=&@@3T]0(&5N;W5G:"!T;R!N;W0@<V5E('1H92!S96-O;F0@
M<VET=6%T:6]N.B`@;V)J96-T<R!A;&QO=R!A(&5N8V%P<W5L:7IA=&EO;B!O
M9B!R96QA=&5D(&-O9&4@<V\@=V4@8V%N(&%V;VED('-I='5A=&EO;G,@;V8@
M=&EG:'1L>2!W<F%P<&5D(&-O9&EN9RX@3V)J96-T('-Y<W1E;7,@<W1I;&P@
M96YD('5P(&)E:6YG('1I9VAT;'D@8F]U;F0@86UO;F<@<V5T<R!O9B!O8FIE
M8W1S+B!/3U`@:&%S(&YO="`G<V]L=F5D)R!T:&4@<')O8FQE;2P@;VYL>2!P
M=7-H960@:70@9G5R=&AE<B!B86-K+"!A="!W:&EC:"!S=&%G92!T:&4@<')O
M8FQE;2!B96-O;65S(&5V96X@8FEG9V5R+B!#;VYS:61E<B!T:&4@:6UP86-T
M<R!O9B!F879O<FEN9R!S;6%L;&5R(&]B:F5C=',@=VAE;B!Y;W5R(&]B:F5C
M=',@8F5C;VUE(&EN=&5R9&5P96YD96YT(&%N9"!A8G5N9&%N="Y<"EP*"EQB
M($ES('1H92`B<F]O;2(@;V)J96-T('1I9VAT;'D@8F]U;F0@=&\@=&AE(")H
M;W5S92(@;V)J96-T(&9R;VT@;7D@;65T87!H;W(@86)O=F4_("!.;RY<"EP*
M27,@=&AE(")R;V]M(B!O8FIE8W0@=&EG:'1L>2!B;W5N9"!T;R!T:&4@(F)O
M87)D(B!O8FIE8W0@9G)O;2!M>2!M971A<&AO<B!A8F]V93\@($YO+B`@270G
M<R!P97)F96-T;'D@86-C97!T86)L92!T;R!B=6EL9"!T:&4@=V%L;',@;V8@
M=&AE(')O;VT@=VET:"!A;F]T:&5R(&UA=&5R:6%L("AS=6-H(&%S(&)R:6-K
M*2P@87,@;&]N9R!A<R!T:&4@<F]O;2!I<R!S=&EL;"!A(')O;VTN("!);B!O
M=&AE<B!W;W)D<RP@:70G<R!/2R!T;R!I;7!R;W9E('1H92!A;&=O<FET:&TN
M7`I<"DEF('EO=2!M86ME(&$@;6ES=&%K92!A;F0@9&ES8V]V97(@=&AA="!Y
M;W5R(')O;VUS(&)U:6QT('=I=&@@8F]A<F1S(&%R92!O8G-O;&5T92`H;6%Y
M8F4@>6]U('5S960@8F%L<V$@=V]O9#\I+"!A;F0@>6]U(&YO(&QO;F=E<B!W
M86YT(')O;VUS('1H870@=V%Y("AB=70@;75S="!K965P('EO=7(@;VQD(&)A
M;'-A+7=O;V0@<F]O;7,@87)O=6YD(&)E8V%U<V4@;V8@<V]M92!P96-U;&EA
M<B!B86-K=V%R9',@8V]M<&%T86)I;&ET>2!P<F]B;&5M*2P@:G5S="!M87)K
M('EO=7(@(G)O;VTB(&]B:F5C="!A<R!O8G-O;&5T92`H86YD(&%L<V\@:70G
M<R!S=7!P;W)T(&]B:F5C=',I('-O(&YO8F]D>2!W:6QL('5S92!I="!A9V%I
M;B!F;W(@86YY(&YE=R!F;&]O<B!O9B!A;GD@;F5W(&AO=7-E+B`@(%1H96X@
M8W)E871E(&$@(F)R:6-K+7)O;VUS(B!O8FIE8W0@*&%N9"!I="=S('-U<'!O
M<G0@;V)J96-T<RD@9F]R(&9U='5R92!U<V4N("!4:&5N+"!K965P(&)O=&@@
M(G)O;VTB(&]B:F5C=',@*&%N9"!T:&5I<B!S=7!P;W)T(&]B:F5C=',I(&EN
M('EO=7(@;&EB<F%R>2X@($%L;"!N97<@8V]D92!W:6QL('5S92!T:&4@;F5W
M(&]B:F5C=',L(&%N9"!E=F5N='5A;&QY('1H92!O;&0@;V)J96-T<R!W:6QL
M(&1I92!A(&YA='5R86P@9&5A=&@N7`I<"DEN8VED96YT86QL>2P@22!T:&EN
M:R!T:&ES(&ES(&]N92!O9B!T:&4@;F5A="!T:&EN9W,@;V8@3V)J96-T:79E
M+4,@*'9E<G-U<R!#*RLI+B`@66]U(&-A;B!C<F5A=&4@;F5W+"!L;V=I8V%L
M;'DM<F5L871E9"!O8FIE8W0@0VQA<W-E<RP@86YD('!O;'EM;W)P:&EC86QL
M>2!M97-S86=E('1H96TL('=I=&AO=70@=&AE;2!A;&P@:&%V:6YG('1O(&EN
M:&5R:70@9G)O;2!T:&4@<V%M92!B87-E(&-L87-S+B`@5&AU<RP@:70G<R!M
M;W)E(&9O<F=I=FEN9R!O9B!M:7-T86ME<R!I;B!Y;W5R(&EN:71I86P@0VQA
M<W,@:&EE<F%R8VAY(&1E<VEG;B!T:&%N($,K*R!I<RX@(%=I=&@@0RLK+"!I
M9B!Y;W4@<&]O<FQY(&1E<VEG;B!Y;W5R(&-L87-S(&AI97)A<F-H>2P@>6]U
M)W)E('-C<F5W960L('-I;F-E('EO=2=L;"!P<F]B86)L>2!N;W<@:&%V92!T
M;R!R92UI;7!L96UE;G0@;6%J;W(@<&%R=',@;V8@=&AE($-L87-S(&AI97)A
M<F-H>2Y<"@I<8C`@7`I))VT@;F5I=&AE<B!F;W(@;W(@86=A:6YS="!L87)G
M92]S;6%L;"!O8FIE8W1S.R!))VT@9F]R(&%P<&QY:6YG('=H870@8F5S="!S
M=6ET<R!T:&4@8FEG('!I8W1U<F4N7`I<"CX@7`H^("HJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ7`H^(`E<"@I<:5QL:34T,%QF8S%<8V8Q(#X@22!H
M879E(&YO="P@87,@>65T+"!S965N(&$@<VEN9VQE(&-O;G9I;F-I;F<@<VET
M=6%T:6]N('=H97)E('!U8FQI8R!I;G-T86YC92!V87)I86)L97,@=V5R92!N
M96-E<W-A<GD@;W(@979E;B!D97-I<F%B;&4L(&%L=&AO=6=H($D@86T@:&5S
M:71A;G0@=&\@<V%Y('1H870@=&AE<F4@87)E(&YO;F4N("XN+EP*"EQF8S!<
M8V8P(%5N;&5S<R!O=&AE<G=I<V4@8V]N=FEN8V5D(&9O<B!S<&5C:6%L(&]C
M8V%S<VEO;G,L(&%L;"!I;G-T86YC92!V87)I86)L97,@<VAO=6QD(&]N;'D@
M8F4@;6]D:69I86)L92!B>2!A(&-L87-S(&UE=&AO9"`H:2YE+BP@3D]4(&)E
M('!U8FQI8RDN("!)="!S:&]U;&0@86QS;R!N;W0@8F4@;6]D:69I86)L92!B
M>2!M;W)E('1H86X@;VYE(&-L87-S(&UE=&AO9"Y<"@I<:3!<;&DP(%P*270@
M9&5P96YD<R!O;B!H;W<@(G!U<FES="(@;W(@=&AE;W)E=&EC86P@=G,N('!R
M86-T:6-A;"!Y;W4@=V%N="!T;R!G970N(%=I=&AI;B!T:&4@<V%M92!M;V1U
M;&4O8VQA<W,@:70@;6%Y(&)E(&%C8V5P=&%B;&4@=&\@<F5F97(@=&\@=&AE
M(&EN<W1A;F-E('9A<FEA8FQE('9S+B!T:&4@;65T:&]D+"!E<W!E8VEA;&QY
M('=H97)E('-P965D(&ES(&-O;F-E<FYE9"Y<"EP*"EQB($EF(&ET)W,@=VET
M:&EN('1H92!S86UE(&EN<W1A;F-E(&]F(&$@8VQA<W,@*&DN92XL('1H92!S
M86UE(")M;V1U;&4B/]!W:&%T(&1O('EO=2!M96%N(&)Y(&$@(FUO9'5L92(L
M(&%N>7=A>3\I+"!T:&4@:6YS=&%N8V4@=F%R:6%B;&5S(&]F(&$@9VEV96X@
M:6YS=&%N8V4@;V8@82!C;&%S<R!A<F4@86-C97-S:6)L92!T;R!A;&P@;65T
M:&]D<R!O9B!T:&%T(&EN<W1A;F-E(&%N>7=A>2P@<F5G87)D;&5S<R!O9B!T
M:&4@=F%R:6%B;&5S)R!C;&%S<VEF:6-A=&EO;B`H<'5B;&EC+"!P<F]T96-T
M960L(&]R('!R:79A=&4IT'-O(&EN('1H:7,@8V%S92!T:&5R92!W;W5L9"!B
M92!N;R!A9'9A;G1A9V4@=&\@9&5C;&%R:6YG(&%N>2!O9B!T:&5M('!U8FQI
M8RY<"EP*0G5T+"!I9B!Y;W4@87)E('1A;&MI;F<@86)O=70@9&EF9F5R96YT
M(&EN<W1A;F-E<R!O9B!T:&4@<V%M92!C;&%S<]!W:&%T(')E;&5V86YC92!D
M;V5S('1H92!F86-T('1H870@=&AE>2!A<F4@;V8@=&AE('-A;64@8VQA<W,@
M:&%V93\@($D@9W5E<W,@:68@:70@97AE8W5T97,@9F%S=&5R+"!T:&5N('=E
M('-H;W5L9"!A;&P@:G5S="!G;R!B86-K('1O(&AA=FEN9R!G;&]B86P@=F%R
M:6%B;&5S(&9O<B!E=F5R>71H:6YG("AA;&$@5VEN9&]Z92D_7`I<"DD@9G5L
M;'D@97AP96-T('1O(&5V96YT=6%L;'D@96YC;W5N=&5R('-O;64@8V%S92!W
M:&5R92!T:&4@:6YS=&%N8V4@=F%R:6%B;&5S(&YE960@=&\@8F4@<'5B;&EC
MT&9O<B!S<&5E9"!O9B!E>&5C=71I;VX@<F5A<V]N<R!A<R!Y;W4@<W5G9V5S
M="X@($D@:G5S="!H879E;B=T('-E96X@=&AA="!C87-E('EE="X@($%N9"P@
M=VAE;B!I="!H87!P96YS+"!)(&IU<W0@=&AI;FL@:70@<VAO=6QD(&)E('-U
M:71A8FQY(&1O8W5M96YT960@:6X@=&AE(&-O9&4@*&DN92XL(&5X<&QA:6YE
M9"!W:'D@=&AE('!U8FQI8R!D96-L87)A=&EO;G,@=V5R92!N96-E<W-A<GG0
M86YD(&%L<V\@:6X@;F]N+6%M8FEG=6]U<RP@=F5R>2!S<&5C:69I8R!T97)M
M<RD@+B`@3W1H97)W:7-E+"!S=&%Y(&%W87D@9G)O;2!P=6)L:6,@9&5C;&%R
M871I;VYS+EP*"EQB,"!<"CX@(%P*/B`J*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*EP*/B`@("`@(%P*"EQI7&QI-30P7&9C,5QC9C$@/B!296%L:71Y
M($-H96-K:6YG(&EN("=#)R!C;V1E("AA<R!W96QL(&%S(&%L;"!O9B!T:&4@
M)T,G(&QA;F=U86=E(&1E<FEV871I=F5S+"!S=6-H(&%S($]B:F5C=&EV92U#
M*2!I<R!A8V-O;7!L:7-H960@=VET:"!T:&4@87-S97)T*"D@;6%C<F\N("!"
M<F%D($-O>"P@=&AE(&-R96%T;W(@;V8@3V)J96-T:79E+4,L(')E8V]M;65N
M9',@=7-I;F<@87-S97)T<R`H<"X@.3@@86YD(#DY(&]F(&AI<R!B;V]K+"!/
M8FIE8W0M3W)I96YT960@4')O9W)A;6UI;F<L($%N($5V;VQU=&EO;F%R>2!!
M<'!R;V%C:"P@,FYD($5D:71I;VXI(&9O<B!296%L:71Y($-H96-K:6YG("AH
M92!C86QL<R!I="!S;VUE=&AI;F<@96QS92P@=&AO=6=H*2!A;F0@8VQU<W1E
M<FEN9R!T:&4@8VAE8VMS(&EN=&\@='=O(&=R;W5P<SH@*#$I('!R96-O;F1I
M=&EO;G,L(&%N9"`H,BD@<&]S=&-O;F1I=&EO;G,N("!4:&4@861V86YT86=E
M(&]F('5S:6YG(&%S<V5R="@I(&ES('1H870@=&AI<R!D96)U9V=I;F<@8V]D
M92!C86X@8F4@='5R;F5D(&]F9B!W:71H(&$@8V]M<&EL92UT:6UE('-W:71C
M:"Y<"@I<:3!<;&DP7&9C,%QC9C`@/B!<"CX@22!D;VXG="!E;G1I<F5L>2!A
M9W)E92!W:71H('1H:7,@87!P<F]A8V@L(&9O<B!A(&-O=7!L92!O9B!R96%S
M;VYS.EP*/B`@("!<"CX@02!P<F5C;VYD:71I;VX@87-S97)T('-H;W5L9"!V
M97)I9GD@=&AA="!T:&4@87)G=6UE;G0@=F%L=65S(&%N9"]O<B!T>7!E<R!A
M<F4@87,@=&AE>2!S:&]U;&0@8F4@9F]R('1H92!M971H;V0@=&\@=V]R:R!P
M<F]P97)L>2X@($EN=&5R97-T:6YG;'D@96YO=6=H+"!E>&-E<'0@<&]S<VEB
M;'D@=VET:"!R96%L;'D@;V)S8W5R92!C;V1E("AA;F0@22!C86XG="!E=F5N
M('1H:6YK(&]F(&%N(&5X86UP;&4I+"!T:&4@8V]M<&EL97(@86YD+V]R(')U
M;G1I;64@<WES=&5M('=I;&P@9&\@=&AI<R!F;W(@>6]U+"!S;R!W:'D@9&\@
M>6]U(&YE960@86X@87-S97)T(&9O<B!T:&ES(&-A<V4_("`H3V)J96-T:79E
M+4,@:&%S(&$@=6YI<75E(')U;G1I;64@<WES=&5M('1H870@86QM;W-T(&YO
M(&]T:&5R(&QA;F=U86=E(&AA<RDN7`I<"EEO=2!M:6=H="!B92!A8FQE('1O
M(&=A:6X@82!F=6QL97(@87!P<F5C:6%T:6]N(&9O<B!P<F5C;VYD:71I;VYS
M(&)Y(')E861I;F<@(D]B:F5C="!/<FEE;G1E9"!$97-I9VXB(&)Y($)E<G1R
M86YD($UE>65R+"!W:&EC:"!I<R!W:&5R92!"<F%D($-O>"!P:6-K960@=7`@
M=&AE(&YO=&EO;B!O9B!P<F5C;VYD:71I;VYS(&%N9"!P;W-T8V]N9&ET:6]N
M<RY<"EP*5&AE<F4@87)E('-E=F5R86P@=&AI;F=S('1H870@>6]U<B!D:7-C
M=7-S:6]N(&UI<W-E<RX@02!C;VUP:6QE<B!C86X@8VAE8VL@='EP92!I;F9O
M<FUA=&EO;B`H:7,@=&AI<R!A;B!I;G0L(&$@8V]N<W0@8VAA<BHL('1H92!C
M;W)R96-T(&]B:F5C="DL(&)U="!I="!C86YN;W0@9W5A<F%N=&5E('1H92!C
M;VYD:71I;VX@;V8@=&AA="!A<F=U;65N="`H:7,@=&AI<R!I;G0@8F5T=V5E
M;B!V86QU97,@02!A;F0@0BP@:7,@=&AE(&-O;G-T(&-H87(J(&$@=6YI<75E
M('-T<FEN9RP@:7,@=&AI<R!O8FIE8W0@:6YI=&EA;&EZ960@=&\@=&AE('!R
M;W!E<B!S=&%T92DN($9U<G1H97)M;W)E+"!P<F5C;VYD:71I;VYS(&UA>2!E
M>'1E;F0@=&\@:6UP;&EC:70@87)G=6UE;G1S("AG;&]B86P@<W1A=&4L(&]B
M:F5C="!S=&%T92DL('=H:6-H(&%L<V\@;F5E9',@=&\@8F4@=F5R:69I960N
M($9O<B!E>&%M<&QE.R!A<F4@=V4@8W5R<F5N=&QY('!R:6YT:6YG/R!)<R!T
M:&4@87-S;V-I871E9"!N:6(@9F]R('1H:7,@;V)J96-T(&%L<F5A9'D@;&]A
M9&5D+EP*7`I0;W-T8V]N9&ET:6]N<R!A<F4@=')E871E9"!I;B!A('-I;6EL
M87(@9F%S:&EO;B`H=&AE(&UE=&AO9"!O<&5R871E<R!O;B!S=&%T92!T;R!P
M<F]D=6-E(&$@<F%N9V4@;V8@<F5S=6QT<SL@87)E('1H92!R97-U;'1S(&EN
M('1H92!E>'!E8W1E9"!R86YG93\I+EP*7`I!('1H:7)D(&-H96-K:6YG('1H
M870@:7,@;&5F="!O=70@*$DG;&P@:&%V92!T;R!R92UR96%D($-O>"P@87,@
M22!B96QI979E(&AE(&UI<W-E<R!T:&ES(&%S('=E;&PI+"!I<R!I;G9A<FEE
M;G1S+B!4:&%T(&ES+"!W:&%T(&%R92!T:&]S92!S=&%T97,@=VAI8V@@;6%Y
M(&5F9F5C="!O=71C;VUE('=H:6-H(&AA=F4@;F]T:&EN9R!T;R!D;R!W:71H
M(&EN<'5T<RX@5&AI<R!I;F-L=61E<R!E;G9I<F]N;65N="!C;VYD:71I;VYS
M("AM96UO<GDL(&1I<VLL('1H<F5A9',L(&5T8RDL(&=L;V)A;',@86YD('-O
M;64@;&]C86P@<W1A=&4N7`I<"@I<8B!3;VUE('9E<GD@9V]O9"!P;VEN=',N
M("!)(&YE960@=&\@<W1U9'D@:70@<V]M92!M;W)E+EP*7`I))W9E(&)E96X@
M9FEN9&EN9R!T:&%T('1H92!T:&ER9"!C:&5C:VEN9R!Y;W4@;65N=&EO;B`H
M:6YV87)I96YT<RD@:7,@97-P96-I86QL>2!I;7!O<G1A;G0@=VET:"!$:7-T
M<FEB=71E9"!/8FIE8W1S+B`@5&AE<V4@='EP97,@;V8@;V)J96-T<R!S965M
M('1O(&5I=&AE<B!N965D('-T871E+6UA8VAI;F4@;&]G:6,@:6YS:61E(&]F
M('1H96TL(&]R(&5L<V4@<')O=FED92!S;VUE('-O<G0@;V8@;75T97@M;&]C
M:VEN9R!M971H;V1S+B`@06YD(&EN(&%N>2!C87-E+"!T;R!I;7!L96UE;G0@
M<W5C:"!M96-H86YI<VUS+"!T:&4@;V)J96-T(&UU<W0@(G)E;65M8F5R(B!W
M:&\@<V5N="!E86-H(&UE<W-A9V70<V\@(G-T871E(B!I;F9O<FUA=&EO;B!I
M<R!Q=6ET92!C;VUM;VXN7`I<"D9O<B!E>&%M<&QE+"!S=7!P;W-E('EO=2!M
M97-S86=E(&$@<F5M;W1E(&]B:F5C="!T;R!L;V%D(&%N($Y826UA9V4L('=I
M=&@@=&AE(&EN=&5N="!T;R!M97-S86=E(&ET(&%F=&5R=V%R9',@=&\@871T
M86-H('-O;64@861D:71I;VYA;"!I;F9O<FUA=&EO;B!T;R!T:&4@:6UA9V4L
M('1H96X@9FEN86QL>2!M97-S86=E(&ET('1O('-A=F4@=&AE(&EM86=E(&%N
M9"!I="=S('1A9V=E9"!D871A('1O(&$@9&%T86)A<V4N("!.;W<@<W5P<&]S
M92!T:&%T(&)E9F]R92!Y;W4@<V5N9"!T:&4@;65S<V%G92!T;R!S879E('1H
M92!D871A+"!S;VUE(&]T:&5R(')E;6]T92!O8FIE8W0@;65S<V%G97,@:70@
M=&\@;&]A9"!A(&1I9F9E<F5N="!.6$EM86=E+B`@1&ES87-T97(N+BXN7`I<
M"E1H92!A8FEL:71Y(&9O<B!A;GD@;V)J96-T(&]N('1H92!N971W;W)K('1O
M(&UE<W-A9V4@86YY(&]T:&5R(&]B:F5C="!O;B!T:&4@;F5T=V]R:R!C86X@
M;&5A9"!T;R!C:&%O<R!I9B!S=6ET86)L92!P<F5C875T:6]N<R!A<F5N)W0@
M=&%K96XN("!!;F0L(&%S($D@<V%I9"!A8F]V92P@=&AE<V4@<')E8V%U=&EO
M;G,@<V5E;2!T;R!A;'=A>7,@<F5Q=6ER92!S;VUE('-O<G0@;V8@(G-T871E
M(B!M96UO<GD@9F]R('1H92!O8FIE8W0N7`H*7&(P("XN+EP*7`IP<F]T;V-O
M;',@87)E(&-O;VPL(&)U="!N;W0@<W5P<&]R=&5D(&]U='-I9&4@3F585"`Z
M+2A<"EP*7`H*7&(@(%-O/R`Z+2D@7`H*7&(P(%P*7`H^("!<"CX@*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BI<"@I<:5QL:34T,%QF8S%<8V8Q(#X@
M365T:&]D<R!M=7-T(&%P<&5A<B!I;B!B;W1H('1H92!I;7!L96UE;G1A=&EO
M;BUM;V1U;&4@86YD(&EN=&5R9F%C92UM;V1U;&4@:6X@=&AE('-A;64@;W)D
M97(@=&AA="!T:&5Y(&%P<&5A<B!I;B!S=&%N9&%R9"!.95A4(&-L87-S(&1O
M8W5M96YT871I;VX@+BXN7`H*7&DP7&QI,%QF8S!<8V8P(%P*4V5E:6YG(&%S
M($YE6%0@:V5E<',@='=E86MI;F<@=&AE:7(@;W=N(&1E9FEN:71I;VYS("AW
M:71N97-S(#,N,"!D;V-S*2P@86YD(&MN;W=I;F<@<V]M92!O9B!T:&4@<VAO
M<G1C;VUI;F=S("AL:6ME(&1E;&5G871E(&UE=&AO9"!L;V]K=7`I($DG;2!N
M;W0@96YA;6]R960@=VET:"!T:&4@<W5G9V5S=&EO;BX@5V4@8G)E86L@=&AI
M;F=S(&EN=&\@;&]G:6-A;"!G<F]U<&EN9W,@*&5X:7-T96YC92P@86-C97-S
M;W(L(&DO;RP@971C*2!W:71H:6X@=&AE(&AE861E<B!A;F0@;6]D=6QE(&9I
M;&5S+B!4:&ES(&%L;&]W<R!A('!R;V=R86UM97(@<75I8VL@86-C97-S('1O
M(')E;&%T960@<F5G:6]N<R`H=VAI8V@@=V4@9&5E;2!P<F5T='D@:6UP;W)T
M86YT*2X@26X@9F%C="P@22=D('=A9V5R('EO=2=L;"!E;F-O=6YT97(@;6]R
M92!P<F]D=6-T:6]N('!R;V)L96US("AI+F4N(&)U9W,I(&)Y(&-O9&4@=&AA
M="!I<R!S<')E860@;W5T(&%L<&AA8F5T:6-A;&QY('1H870@8VQU<W1E<F5D
M(&EN=&\@;&]G:6-A;"!G<F]U<',N7`I<"@I<<&%R9%QT>#4V,%QT>#$Q,C!<
M='@Q-C@P7'1X,C(T,%QT>#(X,#!<='@S,S8P7'1X,SDR,%QT>#0T.#!<='@U
M,#0P7'1X-38P,%QF,EQB7&9S,CA<9F,P7&-F,"!9;W5R('!O:6YT(&AE<F4@
M:7,@=V5L;"UT86ME;BX@($EN(&9A8W0L($D@8V]N<VED97)E9"!T:&ES(&%P
M<')O86-H(&9O<B!Q=6ET92!A('=H:6QE+"!A;F0@979E;B!I;FET:6%L;'D@
M=W)O=&4@;7D@8V]D92!I;B!T:&4@;6%N;F5R('EO=2!S=6=G97-T+B`@5&AE
M('!R;V)L96T@=V%S('1H870@:70@:G5S="!W87-N)W0@=&AA="!E87-Y('1O
M(&-A=&5G;W)I>F4@;6%N>2!O9B!T:&4@;65T:&]D<RP@86YD('=H870@;6%D
M92!S96YS92!T;R!M92!F;W(@82!C871E9V]R>2!F;W(@82!M971H;V0@9&ED
M;B=T(&YE8V5S<V%R:6QY(&UA:V4@<V5N<V4@=&\@;W1H97)S+"!A;F0@=FES
M82UV97)S82X@($ET('-E96US('1H870L(&9O<B!T:&]S92!G<F%Y(&%R96%S
M('=H97)E(&$@;65T:&]D(&-O=6QD(&%C='5A;&QY(&)E(&UU;'1I<&QY+6-A
M=&5G;W)I>F5D+"!E=F5R>6]N92!H87,@=&AE:7(@;W=N(&ED96$@;V8@=VAE
M<F4@:70@8F5L;VYG<RX@($%F=&5R(&%W:&EL92P@8VAA;W,@<V5E;7,@=&\@
M96YS=64N7`H*7'!A<F1<='@U,C!<='@Q,#8P7'1X,38P,%QT>#(Q,C!<='@R
M-C8P7'1X,S(P,%QT>#,W,C!<='@T,C8P7'1X-#@P,%QT>#4S,C!<9C!<8C!<
M9G,R-%QF8S!<8V8P(%P*"EQP87)D7'1X-38P7'1X,3$R,%QT>#$V.#!<='@R
M,C0P7'1X,C@P,%QT>#,S-C!<='@S.3(P7'1X-#0X,%QT>#4P-#!<='@U-C`P
M7&8R7&)<9G,R.%QF8S!<8V8P($D@<W1I;&P@=&AI;FL@:70G<R!B971T97(@
M=&\@86QP:&%B971I>F4@=&AE;2!W:71H:6X@=&AE:7(@<F5S<&5C=&EV92!G
M<F]U<',L('=I=&@@0VQA<W,@;65T:&]D<R!A="!T:&4@=&]P+"!I;G-T86YC
M92!M971H;V1S(&EN('1H92!M:61D;&4L(&%N9"!D96QE9V%T92!M971H;V1S
M(&%T('1H92!B;W1T;VTN7`I<"DAO=V5V97(L('1H;W-E(#,@9W)O=7!S('-H
M;W5L9"!O;FQY(&)E('-U8BUG<F]U<',@;V8@=&AE(&)I9V=E<B!G<F]U<',@
M:6UP;&EE9"!B>2!I;G1E<F9A8V4@;V)J96-T<R!A8W)O<W,@;75L=&EP;&4@
M*'-U8BEP<F]J96-T<RX@(%1H:7,@=VEL;"!B92!A('!A<G0@;V8@;7D@(G-U
M8BUP<F]J96-T<R(@9W5I9&5L:6YE<RY<"@I<<&%R9%QT>#4R,%QT>#$P-C!<
M='@Q-C`P7'1X,C$R,%QT>#(V-C!<='@S,C`P7'1X,S<R,%QT>#0R-C!<='@T
M.#`P7'1X-3,R,%QF,%QB,%QF<S(T7&9C,%QC9C`@7`IR96=A<F1S+%P*7`I+
M979I;EP*+2U<"@I<9C$@2V5V:6X@4W9E;B!"97)G("`@("`@("`@("`@("`@
M+R`@("`O("`@("\@("`@+R`@4"`O("!A("\@(&<@+R`@92`O("!S7`IK979I
M;D!P86=E<RYC;VT@("`@("`@("`@("`@("\@("`@+R`@("`O("`@("\@("`@
M+R`@("`O("`@("\@("`@+R!<"E!A9V5S(%-O9G1W87)E($EN8RX@("`@("`@
M("`O("`@("\@("`@+R`@("`O("`@("\@("`@+R`@("`O("`@("\@("!<"C8Q
M.2TT.3(M.3`U,"`@7`H*7'!A<F1<='@Q,34R7'1X,C,P-%QT>#,T-39<='@T
M-C`X7'1X-3<V,%QT>#8Y,3)<='@X,#8T7'1X.3(Q-EQT>#$P,S8X7'1X,3$U
M,C!<9F,P7&-F,"!<"EP*+2U<"DYE=FEN(%!R871T+"!$:6=I=&%L(%1E8VAN
M;VQO9WDL($EN="=L("`@($]R96TL(%5T7`I.95A4;6%I;"!P<F5F97)R960L
M(&)U="!/3DQ9(&%T(&UY(%)%04P@96UA:6P@861D<F5S<SH@;F5V:6Y`9'1I
3;G0N9'1I;G0N8V]M7`I<"@I]"DP@
`
--
---
root root@dtint.dtint.com
Digital Technology Int. (801)226-2984
500 W. 1200 South, Orem UT, 84057 FAX (801) 226-8438
Technical Details
Message-ID:
<1992Nov18.211536.25711@dtint.uucp>Path:
arc1-ca.pugleaf.net!sparky!uunet!dtint!usenetShow Full Headers
Complete Article Headers
Newsgroups: comp.sys.next.programmer Path: arc1-ca.pugleaf.net!sparky!uunet!dtint!usenet From: nevin@dtint.dtint.com Subject: Re: Coding Rules/Suggestions (RTF) Message-ID: <1992Nov18.211536.25711@dtint.uucp> Sender: usenet@dtint.uucp Reply-To: nevin@dtint.dtint.com Organization: Digital Technology, International Date: Wed, 18 Nov 92 21:15:36 GMT Lines: 714