sources-request@mirror.UUCP (10/29/86)
Submitted by: seismo!rick (Rick Adams) Mod.sources: Volume 7, Issue 43 Archive-name: 2.11news/Part03 # To extract, sh this file # # news 2.11 documentation File 1 of 6 # if test ! -d doc then mkdir doc fi echo x - doc/Makefile 1>&2 sed 's/.//' >doc/Makefile <<'*-*-END-of-doc/Makefile-*-*' -# make the various documents - -ROFF=nroff - -all: howto manner standard copyright install - -install: install.mn tmac.n - $(ROFF) tmac.n install.mn - -howto: howto.mn tmac.n - $(ROFF) tmac.n howto.mn - -manner: manner.mn tmac.n - $(ROFF) tmac.n manner.mn - -standard: standard.mn tmac.n - $(ROFF) tmac.n standard.mn - -copyright: copyright.mn tmac.n - $(ROFF) tmac.n copyright.mn *-*-END-of-doc/Makefile-*-* echo x - doc/mn.7 1>&2 sed 's/.//' >doc/mn.7 <<'*-*-END-of-doc/mn.7-*-*' -.TH MN 7 "News Version B2.11" -.SH NAME -mn \- text formatting macros for the news documentation -.SH SYNOPSIS -.B "nroff \-mn" -[ options ] file ... -.br -.B "troff \-mn" -[ options ] file ... -.SH DESCRIPTION -.PP -This package of -.IR nroff (1) -and -.IR troff (1) -macro definitions provides a formatting facility -which may be used to run off the formatted news documents. -When reverse line motions are needed, -filter the output through -.IR col (1). -.PP -All \-mn macros, -diversions, -string registers, -and number registers are defined below. -Many -.I nroff -and -.I troff -requests are unsafe in conjunction with this package. -However, -the requests below may be used with impunity: -.LP -.ta 5n 12n -.nf - .bp begin new page - .br break output line - .sp \f2n\fP insert \f2n\fP spacing lines - .ce \f2n\fP center next \f2n\fP lines - .ls \f2n\fP line spacing: \f2n\fP=1 single, \f2n\fP=2 double space - .na no alignment of right margin -.fi -.PP -Font and point size changes with \ef and \es are also allowed; -for example, -\&``\ef2word\efR'' will italicize \f2word.\fP -Output of the -.IR tbl (1), -.IR eqn (1), -and -.IR refer (1) -preprocessors for equations, -tables, -and references is acceptable as input. -.SH FILES -/usr/lib/tmac/tmac.n -.SH "SEE ALSO" -eqn(1), refer(1), tbl(1), troff(1) -.SH WARNINGS -.PP -If you do not set the string register ``.f'' to the file name, -you will only be told the line number on which any errors occur. -If you define this string to be the file name, -you will get the file name, -too. -This is useful when dealing with a document -split up into many files. -.PP -This package is not now intended for uses -other than with the news documentation. -.PP -Bug reports are always welcome; -please send them to the author. -(Include a sample of the input; -this helps track down the bug.) -.SH AUTHOR -Matt Bishop -.RI ( mab@riacs.arpa , -.IR ihnp4!ames!riacs!mab , -.IR decvax!decwrl!riacs!mab ) -.SH REQUESTS -.PP -In the -.I Note -column, -.I b -means the request causes a break, -and -.I i -means the macro, -number register, -string register, -or diversion is internal and should not be used for anything. -In the -.I "What It Is" -column, -.IR div " means " diversion , -.IR mac " means " macro , -.IR num " means " "number register" , -and -.IR str " means " "string register" . -In the -.I "Initial Value" -column, -a hyphen means no initial value is used, -anything else is the initial value, -and if two values are given, -the first is for -.I nroff -and the second for -.IR troff . -.PP -.if n .in 0 -.ds x \f2x\fP\| -.ds y \f2y\fP\| -.ds z \f2z\fP\| -.ds X "\*x -.ds Y "\*x \*y -.ds Z "\*x \*y \*z -.tr _. -.ta \w'MacroNames'u +\w'WhatItIs'u +\w'InitialVal'u +\w'Note 'u -.sp .3 -.nf -Macro What Initial Note \0 Explanation -Name It Is Value -.sp .3 -_f num \- \- file name, used in error messages if set -_ai mac \- \- author's institution -_au mac \- b author's name -_b \*Z mac \- \- print \*x in font 3, \*y after, \*z before; - if no arguments, switch to font 3 -b num \- i used to embolden italics -_bi \*Z mac \- \- print \*x in emboldened font 2, \*y after, - \*z before -bm num 1i,1i+1v \- height of bottom margin -_bt mac \- \- print pottom title -bt num .5i+1v \- bottom of footer to bottom of page -_cf \*Z mac \- \- print contents of header line (double - quotes around \*x, \*y before, \*z after) -cm num 0 \- 0 if no cut marks, nonzero if cut marks -_cn \*Z mac \- \- print computer/site name; same as _i -_dd div \- i text of display -dg str \(**,\(dg \- footnote mark -dw str \f2current\fP \- name of current day of week -dy str \f2current\fP \- full date -_ed mac \- b end display -_ef mac \- b end footnote -_ei mac \- b move left margin to the right -_er mac \- \- print error message -_et mac \- b,i macro called at end of text -f0 str \- \- left bottom title -f1 num \- i current font number -f1 str \f2date\fP,\- \- center bottom title -f2 num \- i previous font number -f2 str \- \- right bottom title -fc num \- i per-page footnote count -_fd mac \- b,i drop footnotes -fg num \- i gets fudge factor for footnote -fl num 5.5i \- default footnote line length -_fn mac \- \- begin footnote -_fo mac \- \- bottom of page (footer) macro -fp num \- i current location of trap for _fo macro -_fs mac \- i print text/footnote separator -fs num \- i position where footnote printing should begin -_fx mac \- i collect overflow footnotes -_fy div \- i text of footnote overflow -_fz mac \- i move overflow footnotes from _fy to _tf -gs num \- i used to be sure footnotes fit -h0 num 0 i current level 1 section number -h0 str \- \- left header title -h1 num 0 i current level 2 section number -h1 str \f2\- page \-\fP \- center header title -h2 num 0 i current level 3 section number -h2 str \- \- right header title -h3 num 0 i current level 4 section number -_hd mac \- i top of page (header) macro -_hf mac \- \- print header field name; same as _cf -_hn \*x mac \- b numbered section; if present, \*x is level -hn num 0 i current level of numbering (temporary) -hs num 1v \- default intra-section spacing -_hu mac \- b unnumbered section header -_i \*Z mac \- \- print \*x in font 2, \*y after, \*z before; - if no arguments, switch to font 2 -i1 num \- i current indent -i2 num \- i previous indent -id num 0 i 1 if in display, 0 otherwise -if num 0 i 1 if in footnote, 0 otherwise -_is \*Z mac \- \- print \*x 2p bigger, \*y after, \*z before; - if no arguments, increase point size by 2p -it num 0 i 0 before _bt called, 1 after -l0 num 0 i leftmost position for left margin -l1 num \- i first level of indent for left margin -l2 num \- i second level of indent for left margin -l3 num \- i third level of indent for left margin -l4 num \- i fourth level of indent for left margin -l5 num \- i fifth level of indent for left margin -l6 num \- i sixth level of indent for left margin -l7 num \- i seventh level of indent for left margin -l8 num \- i eighth level of indent for left margin -l9 num \- i ninth level of indent for left margin -li num 5n \- paragraph indent -ll num 6i \- default line length -lm num 0 i current level of indent for left margin -lo num \- i previous level for left margin -_lp \*Y mac \- b labelled paragraph; \*x is label, \*y indent -lq str ",`` \- left double quotation marks -mo str \f2current\fP \- name of current month -_mt mac \- b title -mt num 1.5i+1v \- distance of title from top of page -_ng \*Z mac \- \- newsgroup name; same as _b -_nl mac \- b reset point size to default -ns num 0 i if nonzero, _fn does not call _fs -_op \*Z mac \- \- command option; same as _b -p1 num 0 i 1 after PDP-11(tm) footnote printed, - 0 before -_pa \*Z mac \- \- print protocol appellation; same as _i -_pd \*Y mac \- \- print PDP-11(tm), footnote; \*x after, - \*y before -pd num 1v,.3v \- intra-paragraph spacing -_pf mac \- \- print footer title -_pg \*x mac \- b paragraph; if \*x is l, left justify -pi num 5n \- default paragraph indent -po num 1.25i \- default page offset -ps num 12p \- default point size -_pt \*x mac \- \- print header; \*x is distance from top of - page -_qc \*Z mac \- \- print name of control char; \*x is name, - in font 3, between <>, \*y after, \*z before -_qp \*Z mac \- \- print char; same as _b -_r mac \- \- switch to font 1 -rq str ",'' \- right double quotation marks -s1 num \- i current point size -s2 num \- i previous point size -_sd \*X mac \- \- start display; if \*x is c, center display -sf num \- i 1 if center display, 0 otherwise -_si \*x num \- \- indent left margin by \*x (5n default) -_sm \*Z mac \- \- print \*x 2p smaller, \*y after, \*z before; - if no arguments, decrease point size by 2p -_sn \*x mac \- b space by \*x (1v default), enter nospace mode -_sr \*x mac \- \- enter spacemode, space by \*x (1v default) -t2 num 0 i 0 if little/no space, nonzero otherwise -_tf div \- i text of footnotes -tm num 1i-.5v \- height of top margin -tt num .5i-.5v \- distance from top of page to header -_ux \*Y mac \- \- print UNIX(tm), footnote; \*x after, - \*y before -ux num 0 i 1 after UNIX(tm) footnote printed, - 0 before -v1 num \- i current vertical spacing -v2 num \- i previous vertical spacing -vr str \- \- current version of news -vs num 16p \- default vertical spacing -vx num 0 i 1 after VAX(tm) footnote printed, - 0 before -_vx \*Y mac \- \- print VAX(tm), footnote; \*x after, - \*y before -ws str \- \- used to construct error message -_ya mac \- \- same as calling _yf, _yi, _ys, _yv -_yf mac \- \- restore fonts saved by _zf -_yi mac \- \- restore indents saved by _zi -_ys mac \- \- restore point sizes saved by _zs -_yv mac \- \- restore vertical spacings saved by _zv -_za mac \- \- same as calling _zf, _zi, _zs, _zv -_zf mac \- \- save previous, current fonts -_zi mac \- \- save previous, current indents -_zs mac \- \- save previous, current point sizes -_zv mac \- \- save previous, current vertical spacings -.fi *-*-END-of-doc/mn.7-*-* echo x - doc/tmac.n 1>&2 sed 's/.//' >doc/tmac.n <<'*-*-END-of-doc/tmac.n-*-*' -.\" The News macro package -.\" -.\" This is the macro package that is used to format news documents. It -.\" was written because many sites do not have one of the -mm or -ms pack- -.\" ages that the documents use. This is NOT compatible with EITHER, but -.\" (I hope) will become the standard for all news documents (man pages -.\" excepted, since everyone seems to have -man.) -.\" -.\" This package was written using only the "NROFF/TROFF Users' Guide", -.\" and therefore if you can run NROFF/TROFF, you can legitimately use -.\" this package. However, because NROFF/TROFF are proprietary programs, -.\" I cannot place this package in the public domain. This should not -.\" matter, because if you legitimately have NROFF/TROFF, you have the -.\" documentation; if not, you can't run off the documentation anyway. -.\" -.\" This package may be circulated freely with the news documentation; it -.\" may not be sold, but is to be distributed with the unformatted news -.\" documents. However, the name of the author and the place at which it -.\" was written (in the author's own time, of course) are not to be -.\" removed from the package regardless of how it is modified or altered. -.\" Further, please do not distribute this package if you make any changes -.\" because I don't want to get bug reports of macros I haven't written; -.\" if you have a goodie you want me to add, send it to me and we'll talk. -.\" (I really do like feedback!) I'd really appreciate your cooperation. -.\" -.\" Author: Matt Bishop -.\" Research Institute for Advanced Computer Science -.\" Mail Stop 230-5 -.\" NASA Ames Research Center -.\" Moffett Field, CA 94035 -.\" -.\" version 1.0 September 28, 1985 mab@riacs.arpa -.\" initial version -.\" version 1.1 October 25, 1985 mab@riacs.arpa -.\" fixed an incredibly obscure footnote bug (that occurred twice in -.\" the news documentation!) which put footnoted words on one page -.\" and the footnote on the next if the word was in the next-to-last -.\" or last line; commented it, and generally cleaned up -.\" Version 1.2 October 27, 1985 mab@riacs.arpa -.\" Added a few more comments and a check to keep footnotes lined up -.\" with the bottom margin. -.\" Version 1.3 February 12, 1986 mab@riacs.arpa -.\" Added an error check to catch unmatched ef's and ed's -.\" -.\" ********** -.\" these preserve and restore various things -.\" they are used to shorten other macros -.de yf \" restore fonts -.ft \\n(f2 \" previous font -.ft \\n(f1 \" current font -.. -.de yi \" restore indents -'in \\n(i2u \" previous indent -'in \\n(i1u \" current indent -.. -.de ys \" restore point sizes -.ps \\n(s2 \" previous point size -.ps \\n(s1 \" current point size -.. -.de yv \" restore vertical spacings -.vs \\n(v2u \" previous vertical spacing -.vs \\n(v1u \" current vertical spacing -.. -.de ya \" restore everything -.yf \" restore fonts -.yi \" restore indents -.ys \" restore point sizes -.yv \" restore vertical spacing -.. -.de zf \" preserve fonts -.nr f1 \\n(.f \" current font -.ft \" switch to previous font -.nr f2 \\n(.f \" previous font -.ft \" back to current font -.. -.de zi \" preserve indents -.nr i1 \\n(.iu \" current indent -'in \" switch to previous indent -.nr i2 \\n(.iu \" previous indent -'in \" back to current indent -.. -.de zs \" preserve point sizes -.nr s1 \\n(.su \" current point size -.ps \" switch to previous point size -.nr s2 \\n(.su \" previous point size -.ps \" back to current point size -.. -.de zv \" preserve vertical spacings -.nr v1 \\n(.vu \" current vertical spacing -.vs \" switch to previous vertical spacing -.nr v2 \\n(.vu \" previous vertical spacing -.vs \" back to current vertical spacing -.. -.de za \" save everything -.zf \" save fonts -.zi \" save indents -.zs \" save point sizes -.zv \" save vertical spacings -.. -.\" ********** -.\" these actually print the header and footer titles -.\" they are defined separately from the "hd" and "fo" macros -.\" to make user redefinition easy -.de pt \" print header title -. \" omit header on first page -.if \\n%>1 \{\ -' sp |\\$1u \" move to proper position -. ft 1 \" change to default font -. ps \\n(ps \" change to default point size -. vs \\n(vs \" change to default spacing -. tl '\\*(h0'\\*(h1'\\*(h2' \" center title -. vs \" restore current vertical spacing -. ps \" restore current point size -. ft \" restore current font -.\} -.. -.de pf \" print footer title -.ft 1 \" change to default font -.ps \\n(ps \" change to default point size -.vs \\n(vs \" change to default spacing -.ie \\n%=1 .tl '\\*(h0'\\*(h1'\\*(h2' \" on first page, print the header here -.el .tl '\\*(f0'\\*(f1'\\*(f2' \" on other pages, print the footer -.vs \" restore current vertical spacing -.ps \" restore current point size -.ft \" restore current font -.. -.\" ********** -.\" these are the top of page (header) and bottom of page (footer) macros -.\" they don't actually print anything, just call the right macros -.de hd \" header -- do top of page processing -.if t .if \\n(cm .tl '\(rn''' \" drop cut mark if needed -.pt \\n(ttu \" print header -.nr fc 0 1 \" init footnote count -.nr fs \\n(.pu-\\n(bmu-1u \" if any footnotes, start print here -.nr fp 0-\\n(bmu \" reset current footer place -.ch fo -\\n(bmu \" reset footer trap -.if \\n(dn .fz \" put leftover footnotes st bottom -.ya \" restore font, etc. -'sp |\\n(tmu \" move to top of body -.ns \" don't allow any more space -.. -.de fo \" footer -- do bottom of page processing -.za \" save font, etc. -.rs \" you want motions here -.nr dn 0 \" clobber diversion size register -.if \\n(fc .fd \" now print the footnotes, if any -'bp \" force out page -.. -.\" ********** -.\" these are the footnote macros -.\" here's an overview: -.\" Footnotes are processed in environment #1, which is initialized -.\" at the bottom of this package. When "fn" is called, nroff/troff -.\" switches to this environment. The body of the footnote is saved -.\" in the diversion "tf" (for "temporary footnote"), so you will -.\" NEVER spring a trap during the first reading of a footnote. When -.\" "ef" ("end footnote" is called, the diversion is closed. If -.\" this is the first footnote on the page (ie, the number register -.\" "fc" is 1), and the footnote height (plus the height of 1 line) -.\" crosses the bottom margin, you get the footnoted word on one -.\" page and the footnote on the other. In this case we just call -.\" "fo" manually (taking case it cannot be re-invoked on the same -.\" page!) If this situation does not occur, we just adjust the -.\" footer trap's position upwards (we'll get to how far in a min- -.\" ute); if this puts the trap above the current line, we reposi- -.\" tion the trap just beneath the current line to be sure of trig- -.\" triggering it once the current line is forced out. -.\" To reposition the footer trap, we proceed as follows. Because -.\" the trap may be sprung in the middle of a line, it is possible -.\" that the footnote will not fit on the page (regardless of where -.\" on the page the footnoted word occurs -- really!) if we move the -.\" trap up by the size of the footnote diversion "tf". So, we -.\" fudge things a little bit -- for the first footnote on each page -.\" we move the footer trap up 1 extra line ("line" being 1v in env- -.\" ironment #0). Unless the point size and vertical spacing are -.\" increased between the first footnote and the footer trap's being -.\" sprung, this will keep the footnotes on the same page as the -.\" footnoted word. But as there may be now as much as 1v of space -.\" between the footnote and the bottom margin, which looks HIDEOUS, -.\" we use the number register "fs" to mark where the footer trap -.\" would REALLY go, and just space to it when it comes time to put -.\" out the footnotes. -.de fd \" dump footnotes -.nr gs 1v \" get a measure of 1 line in env #0 -.ev 1 \" switch to footnote environment -.nr gs +2v \" min of 2 lines of footnotes -. \" if the number register ns > 0, -. \" the last text line may contain a -. \" footnote that is too big to fit; -. \" this checks for such a note and -. \" if so, forces the footnote into -. \" the "fy" diversion that carries -. \" it onto the next text page -.ie (\\n(nsu>0)&(\\n(gsu>=\\n(.tu) 'sp \\n(gsu \" be sure you can get it down -.el .if \\n(fsu>\\n(nlu 'sp \\n(fsu-\\n(nlu \" move to footnote start position -'nf \" don't reprocess footnotes -'in 0 \" don't indent them any more either -.tf \" drop text of footnotes -.rm tf -.if '\\n(.z'fy' .di \" end overflow diversion, if any -.nr fc 0 \" re-init footnote count -.ev \" return to usual environment -.. -.de fn \" start footnote -. \" look for nested footnotes -- ILLEGAL -.ie \\n(if>0 .er "footnote within footnote" -.el .da tf \" append footnote to footnote diversion -.nr if +1 \" increment level of footnoting -.nr fc +1 \" one more footnote on this page -.if \\n(fc=1 .nr fp -1v \" The reason for this "fudge factor" -. \" is that there is no way to force -. \" NROFF/TROFF to invoke a macro at -. \" the end of each line. At times, -. \" the trap boundary will not match up -. \" with the bottom of a line, so the -. \" "fo" trap which is set at 2320 may -. \" not be triggered until 2340 -- and -. \" then the footnote won't fit. This -. \" gives some slack so the footnote is -. \" more likely to fit. *sigh* -.ev 1 \" enter footnote environment -.if \\n(fc=1 .fs \" drop separator if first footnote -.br \" flush out any previous line in footnote -.fi \" process footnote in fill mode -.. -.de ef \" end footnote -.br \" flush out the line in footnote -.ie \\n(if<=0 .er "end footnote has no corresponding begin footnote" -.el \{\ -. nr if -1 \" decrement level of footnoting -. nr fg 2v \" remember this for repositioning fo -. ev \" back to usual environment -. if \\n(if=0 \{\ -. di \" end of footnote proper -. nr fp -\\n(dnu \" "fo" will be moved at least up this far -. nr fs -\\n(dnu \" increase size of footnote -. ch fo \\n(fpu \" reposition "fo" trap (first guess) -. \" the first part of the "ie" clause -. \" is taken in the special case -. \" described above -. ie (\\n(fc=1)&((\\n(nlu+1v+\\n(fgu)>=(\\n(.pu-\\n(bmu)) \{\ -. nr ns \\n(dnu \" suppress footnote separator -. \" since this footnote contains it -. \" keep "fo" from being invoked twice -. ch fo \\n(.pu+1i -. fo \" force the page out AT ONCE -. nr ns 0 \" re-enable footnote separator -. \} -. \" footnote won't fit completely -. el .if (\\n(nlu+1v)>=(\\n(.pu+\\n(fpu) .ch fo \\n(nlu+1u -. \} -.\} -.. -.de fs \" drop footnote separator -. \" only if not already dropped -.if \\n(ns=0 \l'1i' -.nr ns 0 \" in case footnotes are over 1 page long -.. -.de fx \" process footnote overflow -.if \\n(fc .di fy \" stuff them in the right place -.. -.de fz \" deposit footnote overflow -.fn \" treat it as a footnote -.nf \" it's already been processed -.in 0 \" and indented -.fy \" "fx" put it here -.ef \" end the footnote -.. -.\" ********** -.\" the ones after here are user-invoked (like "fn" and "ef" above) -.\" title, author, etc. -.de mt \" main title -\& -.sp |\\n(mtu \" space -.ft 3 \" in bold -.ps \\n(ps+2p \" large point size and -.vs \\n(vs+2p \" vertical spacing -.ce 1000 \" center the title -.nr t2 1 \" space it -.. -.de au \" author -.nr t2 0 \" spacing here -.sp 2v \" space -.ft 2 \" in italics -.ps \\n(ps \" usual point size and -.vs \\n(vs \" vertical spacing -.ce 1000 \" center the name(s) -.. -.de ai \" author's institution -.if \\n(t2 .sp 2v \" space after a title -.nr t2 0 \" institution -.ft 2 \" in italics -.ps \\n(ps \" usual point size and -.vs \\n(vs \" vertical spacing -.ce 1000 \" center the name(s) -.. -.de bt \" begin text macro -.nr t2 0 \" hold it here -.nr it +1 \" mark as called -.ce 0 \" end any centering -.sn 3v \" a little bit of space -.. -.\" paragraph -.de si \" start indented section -.nr lo \\n(lm \" remember the current level -.nr lm +1 \" go to the next level -.ie '\\$1'' .nr l\\n(lm \\n(l\\n(lo+5n \" if no arg, indent 5n -.el .nr l\\n(lm \\$1n \" otherwise, indent that much -.. -.de ei \" end indent -.nr lm -1 \" down one level -.if \\n(lm<0 .nr lm 0 \" make sure you don't go too far -.. -.de pg \" plain old paragraph -.if !\\n(it .bt \" end the title and such -.sn \\n(pdu \" inter-paragraph spacing -.ft 1 \" reset a few things (paranoia) -. \" these ONLY if not in footnote -.ie \\n(if=0 \{\ -. ps \\n(ps \" reset point size -. vs \\n(vs \" reset vertical spacing -. ne 1v+\\n(.Vu \" slightly more than 1 line -.\} -.el \{\ -. ps \\n(ps-2p \" reset point size -. vs \\n(vs-2p \" reset vertical spacing -.\} -.in \\n(l\\n(lmu \" stop any indenting -.ce 0 \" stop any centering -.if !'\\$1'L' .if !'\\$1'l' .ti +\\n(piu \" indent the sucker -.. -.de lp \" labelled paragraph -.pg l \" reset paragraph -.if \\n(.$>1 .nr li \\$2n \" if indent given use it -.in +\\n(liu \" indent for paragraph -.ti -\\n(liu \" force first line NOT to indent -.ta +\\n(liu \" for the label -\&\\$1\t\c -.if \\w'\\$1'u>=(\\n(l\\n(lmu+\\n(liu) .br \" don't overwrite -.. -.\" section -.de hu \" header, unnumbered -.if !\\n(it .bt \" end the title and such -.br \" force out previous line -.b -.ps \\n(ps -.vs \\n(vs -.in \\n(l\\n(lmu \" stop any indenting -.sn \\n(hsu \" inter-section spacing -.ne 3v+\\n(.Vu \" slightly more than 3 lines -.fi \" process the text, too -.. -.de hn \" header, numbered -.hu -.ie !'\\$1'' .nr hn \\$1 -.el .nr hn 1 -.ie \\n(hn>0 .nr hn -1 -.el .nr hn 0 -.ie \\n(hn=0 \{\ -. nr h0 +1 \" add 1 to main section header -. nr h1 0 \" zap remaining section numbers -. nr h2 0 \" zap remaining section numbers -. nr h3 0 \" zap remaining section numbers -\\n(h0. -.\} -.el .ie \\n(hn=1 \{\ -. nr h1 +1 \" add 1 to the section header -. nr h2 0 \" zap remaining section numbers -. nr h3 0 \" zap remaining section numbers -\\n(h0.\\n(h1. -.\} -.el .ie \\n(hn=2 \{\ -. nr h2 +1 \" add 1 to the section header -. nr h3 0 \" zap remaining section numbers -\\n(h0.\\n(h1.\\n(h2. -.\} -.el \{\ -. nr h3 +1 \" add 1 to the section number -\\n(h0.\\n(h1.\\n(h2.\\n(h3. -.\} -.if \\n(.$=2 \\$2 -.. -.\" displays (no floats, thank God!) -.de sd \" start display -. \" look for nested displays -- ILLEGAL -.ie \\n(id>0 .er "display within display" -.el \{\ -. ie '\\$1'c' .nr sf 1 \" center the sucker -. el .nr sf 0 \" don't center it -.\} -.sn \\n(pdu \" a little bit of space -.ev 2 \" switch to display environment -.nf \" what you type is what you get -.if \\n(id=0 .di dd \" start saving text -.rs \" don't eat leading space -.nr id +1 \" increment level of display -.. -.de ed \" end display -.br \" flush line -.ie \\n(id<=0 .er "end display has no corresponding begin display" -.el \{\ -. nr id -1 \" decrement level of display -. if \\n(id=0 \{\ -. di \" end diversion -. fi \" resume filling -. in -\\n(piu \" dedent -. ev \" pop environment -. ne \\n(dnu \" be sure you have room -. nf \" don't reprocess display -. rs \" don't eat leading space -. zi \" save indents -. ie \\n(sf .in (\\n(llu-\\n(dlu)/2u \" center on the line length -. el .in +\\n(piu \" indent the sucker -. dd \" drop display -. yi \" restore indents -. \} -.\} -.fi \" resume filling -.sn \\n(pdu \" a little bit of space -.. -.\" ********** -.\" fonts -- if argument(s), apply only to first -.de b \" bold (font 3) -.ie \\n(.$>0 \\&\\$3\\f3\\$1\\fP\\$2 -.el .ft 3 -.. -.de i \" italics (font 2) -.ie \\n(.$>0 \\&\\$3\\f2\\$1\\fP\\$2 -.el .ft 2 -.. -.de r \" roman (font 1) -.ft 1 \" just restore it -.. -.de bi \" bold italics (embolden font 2) -\\&\\$3\c -\\kb\\f2\\$1\\fP\\h'|\\nbu+2u'\\f2\\$1\\fP\\$2 -.. -.\" ********** -.\" point sizes -- if argument(s), apply only to first -.de sm \" reduce point size by 2 -.ie \\n(.$>0 \\&\\$3\\s-2\\$1\\s0\\$2 -.el .ps -2 -.. -.de is \" increase point size by 2 -.ie \\n(.$>0 \\&\\$3\\s+2\\$1\\s0\\$2 -.el .ps +2 -.. -.de nl \" return to normal size -.ps \\n(ps \" just reset the point size -.. -.\" ********** -.\" handy force space/inhibit more space macros -.de sn \" space, then turn on nospace mode -.sp \\$1 \" space -.ns \" ignore any more space requests -.. -.de sr \" force out space -.rs \" turn on spacing mode -.sp \\$1 \" space -.. -.\" ********** -.\" end of text and error macros -.de et \" end of text macro -.br \" flush out remaining line -.tf \" dump any footnotes -. \" check for open displays or footnotes -.if \\n(id>0 .er "unfinished display" -.if \\n(if>0 .er "unfinished footnote" -. \" this one means an -mn bug (*sigh*) -.if !'\\n(.z'' .er "diversion \\n(.z not closed" -.. -.de er \" print error message -. \" flag it as an error -.ds ws "** ERROR ** -. \" if you have it, give the file name -.if !'\\*(.f'' .as ws " file \\*(.f, -. \" put out the line number -.as ws " line \\n(.c -. \" and finally the error message -.tm \\*(ws: \\$1 -.. -.\" ********** -.\" macros in this section are VERY specific to the news documentation -.de pa \" protocol appellation (darn names!) -\\&\\$3\\f2\\$1\\fP\\$2 -.. -.de ng \" news group name -\\&\\$3\\f3\\$1\\fP\\$2 -.. -.de cn \" computer name -\\&\\$3\\f2\\$1\\fP\\$2 -.. -.de hf \" header field -\\&\\$3\\*(lq\\$1\\*(rq\\$2 -.. -.de cf \" contents of field -\\&\\$3\\*(lq\\$1\\*(rq\\$2 -.. -.de qc \" quote control char (command) -\\&\\$3\\f3<\\s-2\\$1\\s0>\\fP\\$2 -.. -.de qp \" quote printing char (command) -\\&\\$3\\f3\\$1\\fP\\$2 -.. -.de op \" option -\\&\\$3\\f3\\$1\\fP\\$2 -.. -.\" ********** -.\" trademarked names -.de pd \" print "PDP-11" -.ie \\n(p1 \\&\\$2\\s-1PDP\\s0-11\\$1 -.el \{\ -. nr p1 +1 \" mark footnote as dropped -\\&\\$2\\s-1PDP\\s0-11\\*(dg\\$1 -. fn \" put out the footnote -\\&\\*(dgPDP-11 is a trademark of Digital Equipment Corporation. -. ef \" short and sweet ... -.\} -.. -.de ux \" print "UNIX" -.ie \\n(ux \\&\\$2\\s-1UNIX\\s0\\$1 -.el \{\ -. nr ux +1 \" mark footnote as dropped -\\&\\$2\\s-1UNIX\\s0\\s-5\\u\\*(rg\\s0\\d\\$1 -. fn \" put out the footnote -\\&\\s-5\\u\\*(rg\\s0\\dUNIX is a registered trademark of AT&T. -. ef \" short and sweet ... -.\} -.. -.de vx \" print "VAX" -.ie \\n(vx \\&\\$2\\s-1VAX\\s0\\$1 -.el \{\ -. nr vx +1 \" mark footnote as dropped -\\&\\$2\\s-1VAX\\s0\\*(dg\\$1 -. fn \" put out the footnote -\\&\\*(dgVAX is a trademark of Digital Equipment Corporation. -. ef \" short and sweet ... -.\} -.. -.\" ********** -.\" set up string and number registers -. \" set up for the date -.if \n(mo=1 .ds mo January -.if \n(mo=2 .ds mo February -.if \n(mo=3 .ds mo March -.if \n(mo=4 .ds mo April -.if \n(mo=5 .ds mo May -.if \n(mo=6 .ds mo June -.if \n(mo=7 .ds mo July -.if \n(mo=8 .ds mo August -.if \n(mo=9 .ds mo September -.if \n(mo=10 .ds mo October -.if \n(mo=11 .ds mo November -.if \n(mo=12 .ds mo December -.ds dy "\*(mo \n(dy, 19\n(yr -.if \n(dw=1 .ds dw Sunday -.if \n(dw=2 .ds dw Monday -.if \n(dw=3 .ds dw Tuesday -.if \n(dw=4 .ds dw Wednesday -.if \n(dw=5 .ds dw Thursday -.if \n(dw=6 .ds dw Friday -.if \n(dw=7 .ds dw Saturday -. \" NROFF dependencies -.if n \{\ -. \" string registers -. ds dg * -. ds rg * -. ds lq "" -. ds rq "" -. ds f1 "\*(dy -. \" number registers -. nr hs 1v \" space before section header -. nr pd 1v \" inter-paragraph spacing -. nr bm 1.0i \" height of bottom margin -.\} -.if t \{\ -. \" string registers -. ds dg \(dg -. ds rg \(rg -. ds lq `` -. ds rq '' -. \" number registers -. nr hs 1v \" space before section header -. nr pd 0.3v \" inter-paragraph spacing -. nr bm 1.0i+1v \" height of bottom margin (wacky laser) -.\} -. \" these are the same for [NT]ROFF -.ds vr "News Version B 2.11 -.ds h1 - % - -.nr bt 0.5i+1v \" bottom of page to footer -.nr cm 0 \" no cut marks -.nr fc 0 1 \" init footnote count -.nr fl 5.5i \" footnote line length -.nr fp 0-\n(bmu \" fo macro trap location -.nr h0 0 \" init section header level 0 -.nr h1 0 \" init section header level 1 -.nr h2 0 \" init section header level 2 -.nr h3 0 \" init section header level 3 -.nr id 0 \" 1 in display -.nr if 0 \" 1 in keep -.nr it 0 \" 1 when beyond title, etc. -.nr li 5n \" indent for labelled paragraph -.nr ll 6.5i \" line length -.nr lm 0 \" left margin -.nr l0 0 \" first indent level -.nr mt 1.5i+1v \" title goes down this far -.nr pi 5n \" regular paragraph indent -.nr po 1.0i \" page offset -.nr ps 10 \" point size -.nr tm 1.0i \" height of top margin -.nr tt 0.5i-0.5v \" top of page to header -.nr p1 0 \" no PDP-TM message yet -.nr ux 0 \" no UNIX-TM message yet -.nr vx 0 \" no VAX-TM message yet -.nr vs 12 \" vertical spacing -.\" set things up -.po \n(pou \" set page offset -.ps \n(ps \" set previous, current -.ps \n(ps \" point sizes -.vs \n(vs \" set previous, current -.vs \n(vs \" vertical spacings -.ll \n(llu \" set line length -.lt \n(llu \" set title line length -.ev 1 \" *** footnote environment -.ps \n(ps-2p \" set previous, current -.ps \n(ps-2p \" point sizes -.vs \n(vs-2p \" set previous, current -.vs \n(vs-2p \" vertical spacings -.ll \n(flu \" set line length -.lt \n(flu \" set title line length -.ev \" *** pop environment -.ev 2 \" *** footnote environment -.ps \n(ps \" set previous, current -.ps \n(ps \" point sizes -.vs \n(vs \" set previous, current -.vs \n(vs \" vertical spacings -.ll \n(llu \" set line length -.lt \n(llu \" set title line length -.ev \" *** pop environment -.\" install traps -.wh 0i hd \" position header trap -.wh -\n(bmu fo \" position footer trap -.wh \n(.pu+1i fx \" put footnote overflow trap here -.ch fx -\n(bmu \" move it over fo -.wh -\n(btu pf \" print the bottom margin here -.em et \" at end of file, call et -.\" couple of miscellaneous requests -.bd S 3 3 \" embolden special font chars if B -.hy 2 \" don't hyphenate last lines *-*-END-of-doc/tmac.n-*-* echo x - doc/copyright.mn 1>&2 sed 's/.//' >doc/copyright.mn <<'*-*-END-of-doc/copyright.mn-*-*' -.ds .f copyright.mn -.ds h0 "Copyright Law -.ds h1 -.ds h2 % -.ds f0 "\*(vr -.ds f1 -.ds f2 "February 26, 1986 -.mt -Copyright Law -.au -Jordan J. Breslow -.ai -1225 Alpine Road, Suite 200 -Walnut Creek, CA 94596 -+1 415 932 4828 -.bt -.fn -\(co Copyright 1986 Breslow, Redistributed by permission -.ef -.pg -I am an attorney practicing copyright law and computer -law. I read a series of queries in net.legal about -copyright law and was dismayed to find that people who -had no idea what they were talking about were spreading -misinformation over the network. Considering that the -penalties for copyright infringement can include -$50,000.00 damages per infringed work, attorneys fees, -court costs, criminal fines and imprisonment, and -considering that ignorance is no excuse and innocent -intent is not even a recognized defense, I cringe to see -the network used as a soapbox for the ill-informed. For -that reason, this article will discuss copyright law and -license law as they pertain to computer software. -.pg -My goal is to enable readers to determine when they -should be concerned about infringing and when they can -relax about it. I also want to let programmers know how -to obtain copyright for their work. I'll explain the -purpose of software licenses, and discuss the effect -that the license has on copyright. For those of you who -are programmers, I'll help you decide whether you own -the programs you write on the job or your boss owns -them. I will also mention trademark law and patent law -briefly, in order to clarify some confusion about which -is which. Incidentally, if you read this entire essay, -you will be able to determine whether or not the essay -is copyrighted and whether or not you can make a -printout of it. -.pg -This is a long article, and you may not want to -read all of it. Here is an outline to help you decide -what to read and what to ignore: -.nf -.si 10 -1. The Meaning of Copyright from the Viewpoint of the Software User -1.1 A bit of history -1.2 The meaning of \f2copyright\fP -1.3 The meaning of \f2public domain\fP -1.4 A hypothetical software purchase -1.5 Can you use copyrighted software? -1.6 Can you make a backup copy? -1.7 Licenses may change the rules -1.8 Can you modify the program? -1.9 Can you break the copy protection scheme? -1.10 Summary -.sp -2. Copyright Sounds Neat -- How Do I Get One? Or, How Do I Know If - this Program is Copyrighted? -2.1 How do you get a copyright? -2.2 How do you lose a copyright? -2.3 How do you waste a stamp? -2.4 Do you have to register? -2.5 How copyright comes into existence -2.6 The copyright notice -2.7 Advantages of registration -2.8 A test to see if you understand this article -.sp -3. Who Owns The Program You Wrote? -3.1 Introduction -3.2 Programs written as an employee -3.3 Programs written as a contractor -.sp -4. A Brief Word about Licenses -4.1 Why a license? -4.2 Is it valid? -.sp -.5 I Have a Neat Idea. Can I Trademark it? What about a Patent? -5.1 Trademark law explained -5.2 Patent law -.sp -6. Conclusion -.ei -.fi -.sp 2 -.hn 1 -The Meaning of Copyright from the Viewpoint of the Software User -.hn 2 -A bit of history -.pg -If you're not interested in history, you can -skip this paragraph. -.i Modern -copyright law first came -into existence in 1570, by an act of Parliament called -the Statute of Anne. Like most laws, it hasn't changed -much since. It was written with books and pictures in -mind. Parliament, lacking the foresight to predict the -success of the Intel and IBM corporations, failed to -consider the issue of copyrighting computer programs. -.pg -At first, courts questioned whether programs could be -copyrighted at all. The problem was that judges -couldn't read the programs and they figured the -Copyright Law was only meant to apply to things humans -(which arguably includes judges) could read without the -aid of a machine. I saw some mythical discussion about -that in some of the net.legal drivel. Let's lay that to -rest: programs are copyrightable as long as there is -even a minimal amount of creativity. The issue was laid -to rest with the Software Act of 1980. That Act -modified the Copyright Act (which is a Federal law by -the way), in such a way as to make it clear that -programs are copyrightable. The few exceptions to this -rule will rarely concern anyone. The next question to -arise was whether a program was copyrightable if it was -stored in ROM rather than on paper. The decision in -the Apple v. Franklin case laid that to rest: it is. -.hn 2 -The meaning of \f2copyright\fP -.pg -Now, what is copyright? As it is commonly -understood, it is the right to make copies of something --- or to put it the other way around, it is the right to -prohibit other people from making copies. This is known -as an exclusive right -- the exclusive right to -.i reproduce , -in the biological language of the Copyright -Act -- and what most people don't know is that copyright -involves not one, not two, but five exclusive rights. -These are (1) the exclusive right to make copies, (2) -the exclusive right to distribute copies to the public, -(3) the exclusive right to prepare -.i "derivative works" -(I'll explain, just keep reading), (4) the exclusive -right to perform the work in public (this mainly applies -to plays, dances and the like, but it could apply to -software), and (5) the exclusive right to display the -work in public (such as showing a film). -.hn 2 -The meaning of \f2public domain\fP -.pg -Before we go any further, what is public -domain? I saw some discussion on the net about public -domain software being copyrighted. Nonsense. The -phrase -.i "public domain," -when used correctly, means the -absence of copyright protection. It means you can copy -public domain software to your heart's content. It -means that the author has none of the exclusive rights -listed above. If someone uses the phrase -.i "public domain" -to refer to -.i freeware -(software which is copyrighted but is distributed without advance payment -but with a request for a donation), he or she is using -the term incorrectly. Public domain means no copyright --- no exclusive rights. -.hn 2 -A hypothetical software purchase -.pg -Let's look at those exclusive rights from the -viewpoint of someone who has legitimately purchased a -single copy of a copyrighted computer program. For the -moment, we'll have to ignore the fact that the program -is supposedly licensed, because the license changes -things. I'll explain that later. For now, assume you -went to Fred's Diner and Software Mart and bought a -dozen eggs, cat food and a word processing program. And -for now, assume the program is copyrighted. -.hn 2 -Can you use copyrighted software? -.pg -What can you do with this copyrighted -software? Let's start with the obvious: can you use it -on your powerful Timex PC? Is this a joke? No. Prior -to 1980, my answer might have been No, you can't use it! -.pg -People actually pay me for advice like that! Well -think: you take the floppy disk out of the zip lock -baggy, insert it in drive A and load the program into -RAM. What have you just done? You've made a copy in -RAM -- in legalese, you've reproduced the work, in -violation of the copyright owner's exclusive right to -reproduce. (I better clarify something here: the -copyright owner is the person or company whose name -appears in the copyright notice on the box, or the disk -or the first screen or wherever. It may be the person -who wrote the program, or it may be his boss, or it may -be a publishing company that bought the rights to the -program. But in any case, it's not you. When you buy a -copy of the program, you do not become the copyright -owner. You just own one copy.) -.pg -Anyway, loading the program into RAM means -making a copy. The Software Act of 1980 addressed this -absurdity by allowing you to make a copy if the copy \*(lqis -created as an essential step in the utilization of the -computer program in conjunction with a machine and ... -is used in no other manner ....\*(rq By the way, -somebody tell me what -.i "a machine" -means. If you connect -5 PC's on a network is that -.i "a machine" -or -.i "several machines" ? -A related question is whether or not running -software on a network constitutes a performance. The -copyright owner has the exclusive right to do that, -remember? -.hn 2 -Can you make a backup copy? -.pg -OK, so you bought this copyrighted program -and you loaded it into RAM or onto a hard disk without -the FBI knocking on your door. Now can you make a -backup copy? -.b YES . -The Software Act also provided that -you can make a backup copy, provided that it \*(lqis for -archival purposes only ....\*(rq What you cannot do, -however, is give the archive copy to your friend so that -you and your pal both got the program for the price of -one. That violates the copyright owner's exclusive -right to distribute copies to the public. Get it? You -can, on the other hand, give both your original and -backup to your friend -- or sell it to him, or lend it -to him, as long as you don't retain a copy of the -program you are selling. Although the copyright owner -has the exclusive right to distribute (sell) copies of -the program, that right only applies to the first sale -of any particular copy. By analogy, if you buy a -copyrighted book, you are free to sell your book to a -friend. The copyright owner does not have the right to -control resales. -.hn 2 -Licenses may change the rules -.pg -At this point, let me remind you that we have -assumed that the program you got at the store was sold -to you, not licensed to you. Licenses may change the -rules. -.hn 2 -Can you modify the program? -.pg -Now, you're a clever programmer, and you know -the program could run faster with some modifications. -You could also add graphics and an interactive mode and -lots of other stuff. What does copyright law say about -your plans? Well ... several different things, -actually. First, recall that the copyright owner has -the exclusive right to make derivative works. A -derivative work is a work based on one or more -preexisting works. It's easy to recognize derivative -works when you think about music or books. If a book is -copyrighted, derivative works could include a -screenplay, an abridged edition, or a translation into -another language. Derivative works of songs might be -new arrangements (like the jazz version of Love Potion -Number 9), a movie soundtrack, or a written -transcription, or a -.i "long version" , -(such as the fifteen minute version of \*(lqWipe Out\*(rq with an extended -drum solo for dance parties). In my opinion, you are making a -derivative work when you take the store-bought word -processor and modify it to perform differently. The -same would be true if you -.i translated -a COBOL program -into BASIC. Those are copyright infringements -- you've -horned in on the copyright owner's exclusive right to -make derivative works. There is, however, some -breathing room. The Software Act generously allows you -to -.i adapt -the code if the adaptation \*(lqis created as an -essential step in the utilization of the computer -program in conjunction with a machine ....\*(rq For -example, you might have to modify the code to make it -compatible with your machine. -.hn 2 -Can you break the copy protection scheme? -.pg -Moving right along, let's assume your store -bought program is copy protected, and you'd really like -to make a backup copy. You know this nine-year-old whiz -who can crack any copy-protection scheme faster than you -can rearrange a Rubix cube. Is there a copyright -violation if he succeeds? There's room to argue here. -When you try to figure out if something is an -infringement, ask yourself, what exclusive right am I -violating? In this case, not the right to make copies, -and not the right to distribute copies. Public -performance and display have no relevance. So the key -question is whether you are making a -.i "derivative work" . -My answer to that question is, \*(lqI doubt it.\*(rq On the -other hand, I also doubt that breaking the protection -scheme was \*(lqan essential step\*(rq in using the program in -conjunction with a machine. It might be a \*(lqfair use,\*(rq -but that will have to wait for another article. Anyone -interested in stretching the limits of the \*(lqfair use\*(rq -defense should read the Sony -.i Betamax -case. -.hn 2 -Summary -.pg -Let me summarize. Copyright means the -copyright owner has the exclusive right to do certain -things. Copyright infringement means you did one of -those exclusive things (unless you did it within the -limits of the Software Act, i.e., as an essential step ....). -.hn 1 -Copyright Sounds Neat -- How Do I Get One? Or, How Do I Know if this Program is Copyrighted? -.hn 2 -How do you get a copyright? -.pg -If you've written an original program, what do you have to do to get a -copyright? Nothing. You already have one. -.hn 2 -How do you lose a copyright? -.pg -If you've written an original -program, what do you have to do to lose your copyright -protection? Give copies away without the copyright -notice. -.hn 2 -How do you waste a stamp? -.pg -If you mail the program to yourself -in a sealed envelope, what have you accomplished? -You've wasted a stamp and an envelope and burdened the -postal system unnecessarily. -.hn 2 -Do you have to register? -.pg -Do you have to register your program -with the U.S. Copyright Office? No, but it's a damn -good idea. -.hn 2 -How copyright comes into existence -.pg -Copyright protection (meaning the five -exclusive rights) comes into existence the moment you -.i fix -your program in a -.i "tangible medium" . -That means -write it down, or store it on a floppy disk, or do -something similar. Registration is optional. The one -thing you must do, however, is protect your copyright by -including a copyright notice on every copy of every -program you sell, give away, lend out, etc. If you -don't, someone who happens across your program with no -notice on it can safely assume that it is in the public -domain (unless he actually knows that it is not). -.hn 2 -The copyright notice -.pg -The copyright notice has three parts. The -first can be either a c with a circle around it (\(co), or the -word -.b Copyright -or the abbreviation -.b Copr. -The c -with a circle around it is preferable, because it is -recognized around the world; the others are not. That's -incredibly important. Countries around the world have -agreed to recognize and uphold each others' copyrights, -but this world-wide protection requires the use of the c -in a circle. On disk labels and program packaging, use -the encircled c. Unfortunately, computers don't draw -small circles well, so programmers have resorted to a c -in parentheses: (c). Too bad. That has no legal -meaning. When you put your notice in the code and on -the screen, use -.b Copyright -or -.b Copr. -if you can't make a circle. -.pg -The second part of the notice is the \*(lqyear -of first publication of the work.\*(rq -.i Publication -doesn't mean distribution by Osborne Publishing Co. It -means distribution of copies of the program to the -public \*(lqby sale or other transfer of ownership, or by -rental, lease, or lending.\*(rq So when you start handing -out or selling copies of your precious code, you are -publishing. Publication also takes place when you -merely OFFER to distribute copies to a group for further -distribution. Your notice must include the year that -you first did so. -.pg -The third part of the notice is the name of -the owner of the copyright. Hopefully, that's you, in -which case your last name will do. If your company owns -the program -- a legal issue which I will address later -in this article -- the company name is appropriate. -.pg -Where do you put the notice? The general -idea is to put it where people are likely to see it. -Specifically, if you're distributing a human-readable -code listing, put it on the first page in the first few -lines of code, and hard code it so that it appears on -the title screen, or at sign-off, or continuously. If -you're distributing machine-readable versions only, hard -code it. As an extra precaution, you should also place -the notice on the gummed disk label or in some other -fashion permanently attached to the storage medium. -.hn 2 -Advantages of registration -.pg -Now, why register the program? If no one -ever rips off your program, you won't care much about -registration. If someone does rip it off, you'll kick -yourself for not having registered it. The reason is -that if the program is registered before the -infringement takes place, you can recover some big bucks -from the infringer, called statutory damages, and the -court can order the infringer to pay your attorneys -fees. Registration only costs $10.00, and it's easy to -do yourself. The only potential disadvantage is the -requirement that you deposit the first and last 25 pages -of your source code, which can be inspected (but not -copied) by members of the public. -.hn 2 -A test to see if you understand this article -.pg -Now, someone tell me this: is this article copyrighted? Can you print it? -.hn 1 -Who Owns The Program You Wrote? -.hn 2 -Introduction -.pg -The starting point of this analysis is that if you wrote -the program, you are the author, and copyright belongs -to the author. HOWEVER, that can change instantly. -There are two common ways for your ownership to shift to -someone else: first, your program might be a \*(lqwork for -hire.\*(rq Second, you might sell or assign your -.i rights -in the program, which for our purposes means the -copyright. -.hn 2 -Programs written as an employee -.pg -Most of the programs which you write at -work, if not all of them, belong to your employer. -That's because a program prepared by an employee within -the scope of his or her employment is a \*(lqwork for hire,\*(rq -and the employer is considered the -.i author . -This is more or less automatic if you are an employee -- no -written agreement is necessary to make your employer the -copyright owner. By contrast, if you can convince your -employer to let you be the copyright owner, you must -have that agreement in writing. -.pg -By the way, before you give up hope of -owning the copyright to the program you wrote at work, -figure out if you are really an employee. That is -actually a complex legal question, but I can tell you -now that just because your boss says you are an employee -doesn't mean that it's so. And remember that if you -created the program outside the -.i scope -of your job, the -program is not a \*(lqwork for hire.\*(rq Finally, in -California and probably elsewhere, the state labor law -provides that employees own products they create on -their own time, using their own tools and materials. -Employment contracts which attempt to make the employer -the owner of those off-the-job -.i inventions -are void, at least in sunny California. -.hn 2 -Programs written as a contractor -.pg -Wait a minute: I'm an independent -contractor to Company X, not an employee. I come and go -as I please, get paid by the hour with no tax withheld, -and was retained to complete a specific project. I -frequently work at home with my own equipment. Is the -program I'm writing a \*(lqwork for hire,\*(rq owned by the -Company? Maybe, maybe not. In California, this area is -full of landmines for employers, and gold for -contractors. -.pg -A contractor's program is not a \*(lqwork for -hire,\*(rq and is not owned by the company, unless (1) there -is a written agreement between the company and the -contractor which says that it is, and (2) the work is a -.i "commissioned work" . -A -.i "commissioned work" -is one of -the following: (a) a contribution to a -.i "collective work" , -(b) an audiovisual work (like a movie, and maybe like a video game), -(c) a translation, (d) a compilation, (e) an instructional text, -(f) a test or answer to a test, or (g) an atlas. I know you must be -tired of definitions, but this is what the real legal -world is made of. An example of a collective work is a -book of poetry, with poems contributed by various -authors. A piece of code which is incorporated into a -large program isn't a contribution to a collective work, -but a stand-alone program which is packaged and sold -with other stand-alone programs could be. -.pg -So where are we? If you are a contract -programmer, not an employee, and your program is a -.i "commissioned work" , -and you have a written agreement -that says that the program is a \*(lqwork for hire\*(rq owned by -the greedy company, who owns the program? That's right, -the company. But guess what? In California and -elsewhere the company just became your employer! This -means that the company must now provide worker's -compensation benefits for you -.b "AND UNEMPLOYMENT INSURANCE" . -.hn 1 -A Brief Word About Licenses. -.hn 2 -Why a license? -.pg -When you get software at the local five and dime, the -manufacturer claims that you have a license to use that -copy of the program. The reason for this is that the -manufacturer wants to place more restrictions on your -use of the program than copyright law places. For -example, licenses typically say you can only use the -program on a single designated CPU. Nothing in the -copyright law says that. Some licenses say you cannot -make an archive copy. The copyright law says you can, -remember? But if the license is a valid license, now -you can't. You can sell or give away your copy of a -program if you purchased it, right? That's permitted by -copyright law, but the license may prohibit it. The -more restrictive terms of the license will apply instead -of the more liberal copyright rules. -.hn 2 -Is it valid? -.pg -Is the license valid? This is hotly debated -among lawyers. (What isn't? We'll argue about the time -of day.) A few states have passed or will soon pass -laws declaring that they are valid. A few will go the -other way. Federal legislation is unlikely. My -argument is that at the consumer level, the license is -not binding because there is no true negotiation (unless -a state law says it is binding), but hey that's just an -argument and I'm not saying that that's the law. In any -case, I think businesses which buy software will be -treated differently in court than consumers. Businesses -should read those licenses and negotiate with the -manufacturer if the terms are unacceptable. -.hn 1 -I Have A Neat Idea. Can I Trademark It? What About patent? -.hn 2 -Trademark law explained -.pg -Sorry, no luck. Trademark law protects names: names of -products and names of services. (Note that I did not -say names of companies. Company names are not -trademarkable.) If you buy a program that has a -trademarked name, all that means is that you can't sell -your own similar program under the same name. It has -nothing to do with copying the program. -.hn 2 -Patent Law -.pg -Patent law can apply to computer programs, -but it seldom does. The main reasons it seldom applies -are practical: the patent process is too slow and too -expensive to do much good in the software world. There -are also considerable legal hurdles to overcome in order -to obtain a patent. If, by chance, a program is -patented, the patent owner has the exclusive right to -make, use or sell it for 17 years. -.hn 1 -CONCLUSION -.pg -I know this is a long article, -but believe it or not I just scratched the surface. -Hopefully, you'll find this information useful, and -you'll stop passing along myths about copyright law. If -anyone needs more information, I can be reached at the -address on the first page. -Sorry, but I do not usually have -access to the network, so you can't reach me there. -.sp -Thank you. JORDAN J. BRESLOW *-*-END-of-doc/copyright.mn-*-* sed 's/.//' >doc/patchlevel.doc <<'*-*-END-of-doc/patchlevel.doc-*-*' 0 *-*-END-of-doc/patchlevel.doc-*-* exit