./usr/bin/ci 755 0 0 202000 5316132315 11505 0ustar rootsystem dG-̀\ `-:D$4 `P`[̀rCopyright 1982,1988,1989 by Walter F. Tichy Purdue CS Copyright 1990,1991 by Paul Eggert$Id: rcsbase.h,v 5.11 1991/10/07 17:32:46 eggert Exp $ci$Id: ci.c,v 5.21 1991/11/20 17:58:07 eggert Exp $ ci usage: ci -{fklqru}[rev] -mmsg -{nN}name -sstate -t[textfile] -Vn file ...Exp,v/redefinition of revision numbermissing message for -m optionmissing symbolic name after -nmissing symbolic name after -Nmissing state for -s optionmissing author for -w optionunknown option: %s%sno input file%ssetuid initial checkin prohibited; use `rcs -i -a' first%s <-- %s rcan't find a revision number in %scan't find a date in %scan't find an author in %scan't find a state in %sExpDate %s precedes %s in existing revision %s.initial revision: %s file is unchanged; reverting to previous revision %s previous revision was not locked; ignoring -l option new revision: %s; previous revision: %s diff failed-an/usr/bin/diffdone UWVS!|D$@D$4D$8D$<D$,D$$Ƅ$D$XD$HP$$膜 $\$H$3DF/9$<`DdLD$,>9|$8t h\uhV(Vj&>uh},AV'Vj'>t#|$4t js.V't$4h>|$@t jt.t$@$u|$t jd.Ƅ$>%D$|$$PV|D$$->t#|$<t jw1.V't$u5h~)8u$$u|$u5hi+,8u|$<u5hE+8u|$4u5h!+=t45thxV qD$ |$ ] x |$<t\$<=t ,8utf|$4tL$4 =t8t|$t$P5$tì7=t#8t$SPw =tYp5o}?2D$PPr貔PD$tP5螔Ph'|$,thd5 54556t$@j E=%D$L$,L$(=t]5xh)j55tRP5x+8)ffDj腛D$0 L$9+u:0|$ЃPD$.@/5P`=u jj55=ǃ=5Wh5t_D$|$0h4(L$(9L$ }hj(D$(D$\$ 9\$,|/= u&=t"p5`tD$|$u-Q5I_jj5_ t!j5_P"_ƅt=< ` tc!5# *0hjjj0tpŅ HXM]=t ]|$ tU u jjYc5505)_95j a'ء05xh& jD$tPtD$Phht$Dj)} h$t\5t!j55t555x4j5t$8pp0!j5t$8555x2wD$t$=c[=u%ht[ 5 FfD%m=tL$(9  Ɓ΀1|$$t}|$uWP …5tu \$(D$DPU55t t t|$tWP# …tnWt$H(…uLhtqMP5t$Lhp ]t$DT${['T$t5h h^$2$$$,[^_]ļÃ=t hhthphh[Ð[趖j _1.1.1Branch point doesn't exist for %s.no lock set by %sdeltanumber %s too low; must be higher than %scan't find branchpoint %sS5xgƒ=uB=(t#5(hx5({g…uhhx4tv,5xh[hhx1[Ð@hjl[uhjjj0)kt 9 u \x(u)0fv@(*hhxhx5[Ðhx0;[Ð=uf9Ht\Ph=(t5(hx胗hx05xeƒu@j05x"g uhx0hhxm05xe!05xh- 5Å|8hjjj0]i [ËxЃ4) C<.uJuKhjjj5xiY5x0eu.5xh\ [Ð.1.1UWVS\$l$ uEdƃ{u&C8u3U軕he$tgWupCxt @xu@8D$D$\$S0cUt$ShU袔<H4)ǃW0ud ~;u}+<8$hU4D$D$\$SuGchjjjt$ \gS=u[^_]Ð0uUc&0uh-f [^_]Ð5IÅ|,$tU0}@([^_]Ð81[^_]ÐVSt$  ts3VW u1[^Ð[u[^ÐUWVSt$\$0Ѝh@PSRVS_9t$KЃ w;9t [^_]Ð0ܐC1\=0C[^_]revision %s locked by %sno lock set by %s for revision %sUWVSl$}t@9ku/3WP_tC3Wh [^_]Ðs[uƒ=u-؈f9Hu1[^_]Ë[E [^_]ÐW2WPh_ [^_]Ðtime not available=@u)j_u hfh@Pճ@Sf\$f=wH}+f9u6f9tP5_ut$ 5ȴ[Ð[Ðwcan't expand working fileUWVS|$l$jt$RhHV_pu!VhJB[^_]Ð1ۃ=u PWƁ jjU5pWD| ÃT$ 25pY؃[^_]Ð*** empty log message ***Initial revision*%s%s at 1.0reuse log message of previous file? [yn](y): log messagemWVS=t[^_Ð=T0ЍX9Ph`̍=`VhtdhLW_S=@u)j`_u hh@P}h@萃=h0Hlhl[^_Ð=u?h5x7^thU5x ^uDH[^_Ð=lt#hYjc1thl[^_Ðh`hhh6hl=lu <@[^_ÐVSt$ \$j x‰rB=$t $P  $[^Ð$Id: rcslex.c,v 5.11 1991/11/03 03:30:44 eggert Exp $Unknown phrases like `%s ...;' are in the RCS file.0 u05 hÐ,Jy=0jh,蕋H9HrPk_tP@}5Ðunknown character `%c'UWVS5= L$L$vS 9r=$HXl!l!Ht"^H|"HH|"t$hRO9OrW|_tGD$G D$|$} W3PN9NrD$PV_VD$%FV -, 0L$D$EEO9OrW_tGD$G D$|$} Wt:N9NrD$PV4_VD$%F} VML$vtu-D$EE9l$[D$Ph,BE=t{=,1Ҁ?t C;uй144t3W_t's,搐j_u5 rSh8$=t Sh$[ÐS= t1[Ð [ÐS= t1[Ð([ÐUWVS= ut$,5 _u11؉[^_]Ð0 u05 h5D$ D$$5 \$$S5 q0|$ H|$ L$ L$$L$L$L$\$9|$wt$t$T$}NjT$ЈGvK 9r>$d&&&&&&&&&&&&&'Rh N9NrV0_t FFKVT$ T$59|$wt$t$赃NjN9NrV_tFF}VT$ T$ЈG t@t 뙐됋N9NrVz_tFF}VT$5 T$@}9|$wt$t$@G(N9NrV_tFF}VT$T$<vuh9|$wt$t$T$苂NjT$ЈGN9NrV_t FF}VT$]T$vtt %N9NrVH_u붐vl$,@N9NrV _tFF}VT$T$EtE9t}u;vt/| }#t$,0n  G\$,99|$wt$t$T$9NjT$ CG9r1+D$ PD$$P[^_]ÐWVS=O9OrW _tG0G} Wt8K9KrPSr_SȈ%C} S t @t낐uO9OrW~_tG0G} W=t8K9KrPS_SȈ%C} S@5[^_ÐWVS `5N9NrV_tFF} V t @t RHN9NrV_tFF} VY@t [^_ÐO9OrPW_W؈%G=W/UWVS=|$L$$)y|$L$y9yrt$_tL$A0A} t$t9{9{rPSG_S%C} Sa t @tL$y9yrt$G_tL$A0A} t$t9{9{rPS_S%C} S@t)5L$$9|$)l$D$T$[^_]Ð9l$uD$Pt$(l}ʼnȈEEinvalid character %c in identifier `%s'identifier `%s' doesn't start with letterVSL$ \$vtulA‹vtttt߄tot8tg tb t] tXАA t t tt8uVPh`-A t t tt8uVh-[^Ðjt$9Ð`%s' is not a regular file@WVS|$PjW_ƅ} 1[^_@Ë\$Xu\$ SV_tWtfCf%f=t*Wh.VN_< `1[^_@t$TV_uW%[^_@Ðoutput error=4t4h8/unexpected end of filehp/input errorh/D$$ t h/ÐD$$ t"=4t4h8/\ÐD$tP_t h/9ÐD$t0P_t#=4t4h8/ÐS\$tP{_t h/[S\$t1PO_t$=4t.4h8/[ËT$$ t h/t$t hp/Ðjjt$ _ t h/BÐh `_t=4u4h8/Ðu `P_t=4u4h8/Ð %s aborted %s error: t$5< `Ðu `PX_t=4u4h8/hhh1h ` T$< `t$_h `_t =4u4h8/Ðt$5< `u `P_t=4u4h8/hh1h `_ T$< `t$_hh1h `_ u `P _t=4u4h8/0hh1h ` D$Pt$h `| h `j h `_t=4u4h8/Ð%s: %s:%lu: u `Pd_t=4u4h8/t55hh3h `_D$Pt$h ` hh1h `[_ u `P_t=4u4h8/hh1h `_ D$Pt$h `6 hh1h `_ #%s warning: u `P@_t=4u4h8/Phh4h ` D$Pt$h ` h `j h `_t=4u4h8/Ðredefinition of -%c optiont$ht5.Ð=uu `P__t =4u4h8/oD$Pt$h ` h `_t=4u4h8/(ÐSD$\$ K9Kr%PSC_S%C}+$ t%=4tc4h8/[Ðt$t$_}$=4t&4h8/Ðt$ t$ t$ w_ }$=4t4h8/HÐD$ Pt$ t$ 6_ }#=4t4h8/Ð$Id: rcssyn.c,v 5.8 1991/08/19 03:13:55 eggert Exp $desclogtextaccessauthorbranchbranchescommentdateexpandheadlocksnextstatestrictsymbolsmissing ';' after '%s'%s isn't a delta numbermissing ':' in symbolic name definitionmissing number in symbolic name definitionmissing ':' in lockmissing number in lockunknown expand mode %.*sWVSh7bÅt3]A$t3h8j uh7h7(h7t1Åt(j uh7h7Eh7ƅtj\0X␐j ;uh7h7h78?ƅtIj u h8;Åu hA8j ]\0Xxj uh7h7ah7ƅtij ru hl8)Åt3?$t3h8u h8j [0Xx뎐j uh7h7h7tj uh7h7h7tE=uh8rkj puh7h7"h7`tu=uND$ D$|$ WÉVS} SVh8Wjnj uh7h7h72@D[^_Ðkvkvlkvo8<;<?<A<C<WT$0׹HPR_ÐUWVSl$\$H<=H<t.2٨u<u-H<[^_]Ð:uԸ[^_]Ð t |0t#&5 YWVSÅt3<$t 3h8P߅u1[^_jj h7 Gjj h7n Gjj h7Z Gh7wkÅt3f<$t3h8tjyXpj uh7h7h7Åt3;$t3h8N_(j zuh7h7,G GG8h7G W$[^_{utB H RuS\$h7t [Ð[Ðmissing %sWVSt$\$1V59u= |$u Vh>bj uVh7G[^_Ð%s %s; %s; %s %s:%s; %s; %s %s %c%s%c; VSt$ =t l?Ph7hm?VB=(t"=|5(h7hm?VVh7t3hu?V [uh7hz?V 8ts3h?V[uh7hz?V tC03h?V~[u=th7h?V[ h?VM=t:h7h?V1 j55jVh?V =t#j@4H<j@h7h?VV5D5@[ V9Vrj V6_F F } VT[^Ð %s %s %s; %s %s; %s %s; branches; %s %s; WVSt$|$~8Ful?Ph7vh7vh76hAW$^t0hu?W [u~(t F(l?Ph7hAWWv$v Z Wv(O^tW3<[u[^_Ðunexpected EOF in diff outputrVS\$jhBS ƅt0t$ t$ Vt$ t$ t$ jV[^ÐS1[^ÐWVS\$|$t1S9Srj@Sv_C@C@} St$|$tq>@u2K9Krj@S3_C@C@} SPS9SrPFS_S%FC} SOu|$t8|$ t1K9Krj S躼_C C } SS9Sr j@S艼_C@C@} S[^_Ð %s %s %s %c%c UWVS\$(t$,|$0l$4h7t$(h,DUjVSjUj@h7h5DU|$8O9OrW:_tGG}W$@u2M9Mrj@U蛻_E@E@} UM9MrPUg_U؈%EYUKD$P.D$PUjVtL$|$tڐO9OrWJ_tGG}'W$t|$hBW@u2M9Mrj@U藺_E@E@} UM9MrPUc_U؈%E} U 7L$|$(j@h-uF0HhPV轲_…uVjhLT$W5L PL$ T$Z9ZrRT$_T$tB8B}RT$T$$u,9t$ wD$ PhLT$cXƋT$ȈF뉐Rz_t*+L5Lljt$tEO\$D$B< uz tz t BԐJ9rːz t z tz uJ9rt$)T$L$\$ TXj5X5TjU]9]rj Uj_E E } U[^_]Ðenter %s, terminated with single '.' or end of file: %s>> can't reread redirected stdin for %s; use -%s<%s>>> UWVS\$(=Hu"=uj_H L$tt$,ShPSh `< `$tSt$(ShS11< `< `$t8=Hu"=ujY_H=teϋM9MrUL_t EE}SUE$tC=Hu"=uj_H=th `j '\$< `$ub|$ u4t|7.ut|7 uNA|$th `hSB^St$4TL$09L$ >t?NCB< uz tz t BڐJ9rѐz t z tz uJ9r|$)T$D$T$[^_]Ð$Id: rcsedit.c,v 5.11 1991/11/03 01:11:44 eggert Exp $t$_1҅t=< `%ډedit script ends prematurelyedit script refers to line past end of filew+D$u?=4ujQ4hV54諭_u 54xÐS\$jjj$ S5dE5d[ÐUWVS|$l$5dt5tjjWSV SV=EV|$lpjj53_ tdh4h4-uP4 t$LPtML$D$ u뒐[^_]0ÁUWVSt$D$D$WV$$2 _ t\9uPD$P@t$|$ʐM0$>/t SACV$ B돐< `D$P A< `ttEu?[^_]Ð1[^_]Ð< `([^_]Ð[^_]symbolic link to non RCS filename `%s'RCS filename `%s' incompatible with suffix `%s'RCS filename `%s' ends with `%c'rwTUWVSt$h\$p=%D$VDD$ \$9\$} 1[^_]TÐ.UAlj)T$|T$Ut$8A|UAu$Uhi1< `1[^_]TÐ8uPWhi Ӑ8tGC?uC*GCu;_uj_Uhi _T$D$ 0.\7h$hSH_ D$=< `8|$}+ D$$PSK_t|$t$lh jU D$ =< `|$ tm|$tfh65| _1t=< `%ޅt=< `P7t 5|W(Sh|?h"jt$褗_u 5|-=< `D$ [^_]TÐkeepdirtempL$9 tHyhl|tXXXXXXcan't make temporary file name `%.*s%c_%cXXXXXX'UWVSl$|$uU:[^_]Ðt$'?Ǎ4|G PSo<t$S~>|7_C0Cm.lflfSlSVw_t>uE0Pj/t$Whlt[^_]ÐUWVSxt$u47_u5My[^_]VSD$ t$f\$t P[PV_t [^Ðt$V_1҅t=< `%ډ[^Ðmultiple revisions locked by %s; please specify oneUWVSl$1t'3P;_uu{[u܅u(1[^_]ÐPhxn[^_]ÐSU|$tC@ [[^_]revision %s already locked by %sVSt$ tOC06@ u53&P|_u1[^36h@o> [^Ð[uj &F sS[^Ðsymbolic name %s already bound to %sUWVS|$t$l$8tQ3VН_u9uWs輝_u {[^_]sVhov 1[^_]Ë[uj %É3{8S8[^_]ÐS1k1f9%P'[Ðrootuser %s not on the access listWVS=t@1f9Ht291 1f9%PI'ƿpu [^_Ð5600f9%P'P茜_t=vu00f9%P&Php/1[^_Ð[^_Ð %s%cWVSD$|$t^}1[^_Ð5555h7hq5==h.J0'5|螝_1҅t=< `%ډӋ5< ` |9 tHyhl|t'0t5VӾ1[^_Ð[^_Ðbreaking hard link to %ssaved in %sUWVS|$}=p=t!55:)hf=Fv5hrL$/&fDm5|=t hҼPVe_t (WVe_1҅t=< `%ډӋ5< ` |9 tHyhlt&G/to5Vk5|hs萾xt$u,.7艛_u.My1[^_]Ð[^_]Ðt$__t{Ð$Id: rcskeys.c,v 5.2 1991/08/19 03:13:55 eggert Exp $AuthorDateHeaderIdLockerLogRCSfileRevisionSourceState uuuu u'u+u3uu [^_]À;u[^_]ÐD$t$>0t1t$ Et$D5Ѓ v;0uC;0t1BЃ v9tr[^_]ËT$߉0tF*Gu#l$t$>tD$;?C9[^_]UWVSL$\$T$A<.uC<.uJu90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r+uʉ߉0tF*G[^_]Ð[^_]Ð[^_]Ð and state and author a date before No revision on branch %s has%s%s%s%s%s%s.revisionbranch%s %s absentUWVSt$t$\$u [^_]Åu[^_]Ðt$>tր;tD$t$>0t1t$ Et$D5Ѓ v;0uC;0t1BЃ v9trwT$߉0tF*Gu%l$t$>.uD$;.uCL$ X1[^_]ÐVSt$ \$t$V.t@8.t8u@Ku@[^RCS file emptybranch number %s too lowrevision number %s too lowRevision %s has date %s.Revision %s has author %s.Revision %s has state %s.hUWVSD$PD$T=|$ uh}- T$||$|t t$|>uD$$WB<.uA:uL$$|$$0L$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r#Ή߉0tF*GD$ D$|$}qjt$ p$$v(t$ ID$Pt$|P+D$P@8.t8u@Ku@t$Ph~+|$~1D$HD$Lj$\$PS Ph|:|$$|$ 7t$pL$|$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r'Ή߉0tF*G_$$t$ ^uz}t;}0u E}0tD$ED$|$/Ѓ v;0u C;0t1BЃ v9T$t9T$sBߋL$0tF*Gu!l$\$}tE;MCG|H$tt$ v$#_u$$tJ|$ w$_t0jQt$ p$$v(t$ |$ t~L$|$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ru&ʉ߉0tF*G|$$t\$|5D$Pt$P(D$P@8.t8u@Ku@\$P$$uzP$t `|$u$u d|zP$$uzP$tl|$up|zP$tD$8P$#zPz$ty|PSh| j|$ x$$D$ [^_]hÐL$|t$ A<.uC<.uJu90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r/uΉ߉0tF*GD$D$D$|$L$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ruRΉ߉0tF*Gu0j$t$ p$$v(t$ |$ tyL$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ru"ʉ߉0tF*GtKD$Pt$|P%D$P@8.t8u@Ku@t$Ph~跬_|$$vQ|$tJD$HD$Lj$\$PSK Ph|h|h S#j‹|$ z$$|$$v>R$$$t$4$t$8[^_]hÐ$ $t$|$ _uzt$>tÀ;>0uD$|$?0t1t$ E|$D=Ѓ v;0uC;0t1BЃ v9t 9sBDt$߉0tF*Gu%l$t$>tD$;UCO}4D$XP|$$wPt$$6h7~ 1[^_]hÐ$t*|$ w$ۅ_twt$$6hP~븃$t:|$ w$觅_t Guk~Pt$$6hs~w$mD$PP!1[^_]hÐno side branches present for %sbranch number %s too highpUWVS$D$,@D$ t$Xt$L$PL$|$ uqD$XD$\\$,K$t$ "D$Xt@8.t8u@Ku@t$Xhot$ 1[^_]pÐt$ $8T$,EE<.uG<.uJu}0uE}0t1EC+Ѓ v?0uG?0t1B:Ѓ v9ru0tF*G~kL$ IL$ XD$XD$\\$,$t$ l!D$Xt@8.t8u@Ku@t$XhԈ}TD$PD$Tt$,$t$ PD$0$|t|Rh| t$t$ L$(L$,9$D$$$$t$L$(Yuzt$>u ;L$90uD$t$>0t1L$ Et$D5Ѓ v;0uC;0t1BЃ v9t9sFt$߉0tF*Gu%l$L$9tD$;AC;|P$tt$(v$_u,$tL$(q$Á_ut$(t$$L$(I(L$(|$$$$uzP$t!`|$u$u d|zP$$uzP$tl|$up|zP$tD$@P$zPz$ty|P$h|蜥 1[^_]pÐt$ $j L$(H$$I(L$(t$$9ujL$(H$$D$([^_]pÐ$t$(.T$,tG<.uEE<.uJuG?0t1C;Ѓ v}0uE}0t1EB*Ѓ v9ruyى0tF*G}WD$XD$\\$,C$t$ FD$Xt@8.t8u@Ku@t$Xh~jL$(H$$L$$q(t$($>T$,tEE<.uG<.uJuE}0t1EC+Ѓ v?0uG?0t1B:Ѓ v9rY0tF*G7D$,@9$$L$$)T$,tG<.uEE<.uJuG?0t1C;Ѓ v}0uE}0t1EB*Ѓ v9ru"ى0tF*Gt[\$,CD$PD$TS$t$ i P$|t|Rh|x t$D$,@9$$$L$$Yuz}t;}0u E}0tD$ED$t$.Ѓ v;0u C;0t1BЃ v9T$t 9T$s>@ߋL$0tF*Gu!l$\$}tE;QCK}4D$`PL$(qGPt$(6h7~K 1[^_]pÐ$t.L$$q$C|_tt$$vL$(1hP~봃$t:t$$v$ |_t Fuk~PL$(1hs~st$$NL$ D$,$9t$,$D$$[^_]pÐjt$ t$ i Ðworking file lacks revision numberSymbolic number %s is undefined.improper revision number: %sUWVS|$jt$$L$ 1t?u[^_]ËT$:$u_zuYt$$<u 1[^_]Ð8uh|蔟ڐPt$$f뜐Vhq뷉L$ QT$D$l$vt_VMOG?0uGЃ v9t$wUt$$ƊGF vOF[L$ +9t$wUt$$ƊGFvtփtуt̃t9t$wUt$$SދL$ 18t3Vy_y[u1ۅ9t$wUt$$ƊCFuG=<.u>?u)D$$u1T$ 2BÅ@SdD$F.t$hΝ1[^_]ÐPjjjt$OtÐ1Ð=(t(Pjjj5(1tÐ=t 1Ð$Id: rcsutil.c,v 5.10 1991/10/07 17:32:46 eggert Exp $out of memoryD$uPr_u hߕ$Ðt$t$t_u hߕÐS\$jPr_u hߕߝP[SD$uPr_Åu hߕ衝jq_u hߕ舝P[VS5t^6m_Vm_ޅu[^ÐST$9t C[9uK3m_Sym_[Wt$|$ 0҅uR?q_…u hߕ̜Rv__ÐWt$ |$0҅uRp_Džu hߕ腜jp_…u hߕjB:W:v_D$D$_ÐWt$~m_…t=R0׹ЅuPnp_u hߕPu__Ð1_LOGNAMEUSERno password entry for userid %luW=||$hLl_…tR0׹ЅuPso_u hߕPt_1|uDl_|u6%Pm_u%PhY诚|5|Ҕ|_HangupInterruptBroken pipeQuitTerminatedCputime limit exceededFilesize limit exceeded RCS: %s. Cleaning up. RCS: Signal %d. Cleaning up. @ÁWHE8=jWr_t=_=1ҍO9$К4<LiiiiiiiiiDiTiiiiiiii\d.&řʙՙt Rh WhD$ P(r_ T$0׹HPRju_ ,v_ signalWVS=D$ Л I D$ Ky|$ЛWj6p_ t hԛ |$t-D$TL$ L$jW6p_ t hԛ֕Ky[^_Ð WVS$ $ $u@\$ Vh jSg_uV[^_ WPS $t[^_ ÐWVSt$\$|$v5WhjVg_=twWSjVg_9t[^_/bin/sh: not found forkwaitpid%s failedUWVS贓{r_…4L$)˃tYjd_hjUk_ Dž|u%jjWf_ WWd_uЃtU@+t_j,d_hhAUqk_ Dž|u(jjWe_ Wc_uЃtUؓS34e_=< `u`Sh`e_0׹HPRj~r_ j hhjmr_ jb_} hufjD$PRq_ } hzF|$tL$qhD$[^_]Ðtoo many command argumentsPVSD$`t$\t$D$ \$hD$dD$t#~ h8詔ʃACDuߍD$P[^P19%.*s/%.2s/%.2s %.2s:%.2s:%sSL$\$ ʐB<.uB PB PBPBPRQ)HPy.u =}PSm_$[Ð%s isn't a number%s out of range %d..%dWVS|$w=t jVtN1G\PFЃ v>t Wh(肓~~jjWh:g[^_ÐRCSINITUWVSl$t$h~d_…tAR0׹ЅuPng_u hߕPl_1ۅuL$1}ڐB<  <} t < uG名uPf_u hߕ荒NjL$9ڊ<  <} tF< uC鐉ECB<  <}t"< t<\u;t JCאB뮐u[^_]Ð=ud_fÐ=uc_fÐsetuidroot setuid not supportedÐVS==ub_ff=ub_ff5=uc_fff9tNPi_t h| ;b_f9t*=u!ftP辐[^ÐVS==u1c_ff=ua_ff5=ub_fff9tNPh_t h|8ga_f9t*=u!ftP[^ÐW$jWh_t=_=1ҍO9$ 0MMMMMMMMM(M8MMMMMMMM@H.&řʙՙt Rh WhD$ PDh_ T$0׹HPRjk_ Hl$Id: rcsfnms.c,v 5.8 1991/09/24 00:28:40 eggert Exp $RCSa-- adaasm;; bat:: c * c++// cccppcxxcl;;; cmdcmfc csel; fforhhpphxxllisplspmacme.\" mlmmmsppaspl% texy# ΥХԥХإܥ #%)-/4ܥ8ܥ<?DG?J?MOSVYV]_TMPDIRTMPTEMP/tmp%s%cT%cXXXXXXcan't make temporary file name `%s%cT%cXXXXXX'UWVSl$=uLhl u6hsu hwu |0߹Ѓ PǍu0Vj/ShWJe_W`_t?uVj/Sh诋<[^_]ÐVStP\g_Ny[^ÐUWVS(8.р9tB8uр:u9-uȨ1dt4)ЉD$AC|$t|$uu<vt҃Fċhz0߹ЍpNt|3/t݉-51=|$?.u4|$/u D$|$.u/u@D$|$?.t͋5 N<./uHtu0T$׹Ѝ\9sF=t5K_%9r5VUSO_ /Ct$ST_[^_]Ð$Id: partime.c,v 5.6 1991/08/19 03:13:55 eggert Exp $januaryfebruarymarchaprilmayjunejulyaugustseptemberoctobernovemberdecembersundaymondaytuesdaywednesdaythursdayfridaysaturdaygmtutcutcutnzstjstkstisteetcetmetwetnstastestcstmstpstaksthasthstsstnzdtkdtbstndtadtedtcdtmdtpdtakdthadtltdstddstampmnoonmidnightv~  ù ̹ӹڹ  0!%)-159=,AhEIMRXWX[_0dhlpt,xh|X<x /-.DUWVS1ۋT$\BBB BBBBD$$D$(D$0D$LD$H|$X|$DD$DD$ t$ ux|$Ps|$$|t$$t$`!TT$\z}BL$0}1Ƀ|$(|L$D$()ȋ|$`ًT$` [^_]DÐ|$ND$Ph@ȸ9$Ƚ ,L$\DL$\8L$0/jD$4P4@ ŠD$P@$tj|$8u{\$@` oT$4T$:Ѓ w\ؿdӃ;Kt$@D$)L$|$D$x+uۉ\$,݋T$T$DD$H|$<|$Lt$PL$(L$$UQ Wt$DЃ |$N8|$H-\$P` FЃ  ؿdӃ;L$PșD$)L$|$>+uۉ\$,D$,D$(Xl$P|$HuEdщQD$`D$ t$ 6D$UD$`P|$HT$\z}z|$L:uPdӉQD$`D$ t$ D$SD$`PO|$L,A|$L/6t$4D$8T$LT$tD$4Ѓ D$@@$|$L:bD$|$.D$\$T$8T$Lu{8T$Mt]|$D|$4D$HD$8T$LT$<|$P|$@D$8D$4P'D$t|$>uD$@xT$\z }Iz=D$8D$Mu>t T$\r|$\w |%t D$\p T$\r} D$AT$\zz z}vq|$D|$4D$HD$8T$LT$<|$P|$@D$4P<D$u|$@t51[^_]DÀ|$>tD$4Ѓ ]D$@@$LUD$` PQEPD$`P=ŔxUD$`P6냐UD$`Pit$ u|$P%[^_]DÐ|$N7|$HuZL$PȿdQD$`D$ t$ D$L$PșQt$`D$tv|$Ht$PD$`P`|$L:uBt$ ;|$N|$H~t$Pt$`fD$8} T$1ÐÐT$L$B(|# ~1Ð uBu0B *z܃:ׅ| uJu ttÐUWVSl$Uu 1[^_]Ð}} t[u?+t?-uGNNxaE DЉD$GȻ 9E u9L$}E 1[^_]ÐT$U NyhuW E tɸ[^_]ÐUWVS\$3s3SS C CCC ^i19${u3r{u 3K cKC[^_]ÐC{u'AЃ wCC F9s8~-t~+u, C%AЃ C 9tKKC[^_]ÐFC[^_]ÃUWVS|$ 1ft$\$~/T$+D$AFtuT$<vuKхu#9u [^_]Ðt 1[^_]Ðu[^_]Ð$Id: maketime.c,v 5.3 1991/08/19 03:13:55 eggert Exp $;Zx0Nm UWVSD$|$8@ %D$D$,D$ D$$D$(|$u\$4{|$,u$jG_D$,|$,u[^_] Ðt$,y|$(Y\$y|$$Y \$ y|$q|$tED$,P?_+Q+i\$(9Yt+AD$+A@‰)TT$8+t$8yr;)<\$)É؅L$ |$ L$$y L$(D$$ |$$+1|$$uD$($%‰T$ h<D$~T|$$+1|$$uD$($%D$ 9D$ ~D$$|$$ ~ D$(D$$D$ |$8`|$8vL$4y|Y\$(D$$D$ |$(DJ1D$($u*D$(duD$(,uD$(y|y|$$D$ |$$ y |Y \$ |$ |$$+9D$ ~|$ |$$1t |$$%\$$Nj\$ |;|$m9i|$(}|$lT@|$(ǍD$,m9,D$(@D$,D$ōE9D$, l$,q|9D$,)D$,Q9D$1D$y|y|$y|q9| L$;|$<||$v|$jD$^l$,D$8T$+T$)Ћ\$D$,D$,|$u8|$(}|$,Q~ 9l$,D$,[^_] ÐD$,P;_|$4?| 9|$4|Y9_uP|$4|Y9_u>|$4 |Y 9_ u,|$4|Y9_u|$4zI9OnL$2[^_] ÐUTC is not available; perhaps TZ is not set?U`=}h`URЃu h0fÐ%.2d.%.2d.%.2d.%.2d.%.2d.%.2dL$ $`=}h`RЃ…u h0Of2rrr B@PBzc~lPht$(?_ can't parse date/time: %sbad date/time: %s(WVSt$8|$ W\$SV. u Vh et$ SuVh:eD$ `=}h`WЃ…u h0se2rrr B@PBzc~lPht$X>_ [^_(ÐHVST$Xu 1[^HÐD$0PRÍD$Pt$VS\ u Sh dt$VuSh:dht$X@_[^HÐ$Id: rcskeep.c,v 5.4 1991/08/19 03:13:55 eggert Exp $rclosing %c missing on keyword UWVSt$ =t[^_] Ð1u;jh5x^ ƅu5ha1[^_] Ðhh,thhbhhPhh>1ې$r|$N9NrV20_tFF}V^$l$t t:tD$9v؈G뜃$t:u:N9NrV/_t FF}Vi^$ t 2D$PP 9$xxxxh,V^ÅcjjV NVM =V Å*h,VS hVj jjVj tjjVY uF=$pjjV2V hVj N9NrV2._tFF}V\$t1ۃ$uu,8t8t8t 8uAN9NrV-_t FFWVm\$DtV\j$h_Vz][^_] badly terminated keyword valueVS\$ S9SrS -_t C0C}#S[$th^1[^Ðt$t$SV1[^Ðtoo much white space in keyword valueUWVST$t$ l$$t!jUT$I]ML$T$ 1D$1$9$44444444\444444444444444444444\444tsЈC9\$whD$PUeVtu h {][^_]Ðu|$(t 1[^_]ÐhJ]1[^_]ÐN9NrV*+_tFFVT$Y$T$h\1[^_]Ð19%s%s %s %s$UWVS|$81D$,D$0l$,O9OrW*_t GG}#W=Y$thb\1jUWSjD$$D$(l$$O9OrW*_t GG}#WX$th[1jUWS2D$D$ hD$ PO9OrW)_t G0G}WAX$t1-t +l$jUT$\$L$ L$1T$$9$````````````````````````````````tOЈC9\$wDD$PU92tu h OZoh>Z1bO9OrW"(_tGGWT$V$T$hY1u 1O9OrW'_tG0G}WaV$t1\$,0߹҉T$|$$ҋ|$ЋL$TDPht$t$(Sк wCЃ w {/uRh53_D$PYD$$PLD$,P?[^_]$ÐUWVS\$t$ l$$uEN9NrV&_t FF}VAU$t 1[^_]Ðڅt"jUT$]ML$T$ 1D$1$9$ddddddddddddddddddddddddddddddddtOЈC9\$wDD$PU52tu h KWoh:W1{N9NrV%_tFFVT$S$T$hV1tuMR[^_]Ð1[^_]ÐWVS\$1S9SrS$_t C0C}#S9S$th^V11jhSVtj5t[^_ST$\$ 1ɀ:t:.tЃ v1[AB:u} ȃ[Ð9%[$Id: rcsfcmp.c,v 5.9 1991/10/07 17:32:46 eggert Exp $rdUWVSt$|$D$(PhFS2Q D$ uSTD$D$=|$<9~%D$L$xy9yrt$x#_tL$xA(A}t$xQ|$x$tD$L$ y9yrt$ "_tL$ AD$$A D$$|$$}t$ dQ|$ $tD$D$ D$9l$$21D$$L$xy9yrt$x:"_tL$xA(A}t$xP|$x$tD$L$ y9yrt$ !_tL$ AD$$A D$$|$$}t$ |P|$ $tD$D$ D$\$hL$xy9yrt$xo!_tL$xA(A}t$xP|$x$tD$L$ y9yrt$ !_tL$ AD$$A D$$|$$}t$ O|$ $tD$D$ D$Q9l$$u+$t4 t:tD$p9vȈC$t :|$$$t |$$: D$hPƅD$9l$$ t$uR|$xO9Ort$x _t|$xGG}t$xNL$x$t\$$ t$u\$$S|$ O9Ort$ _t|$ GG}t$ ^NL$ $tD$$%D$|$$%D$D$ D$1 $|$xO9Ort$x!_t|$xG(G}t$xML$x$tD$|$ O9Ort$ _t|$ GD$$G D$$|$$}t$ dML$ $tD$D$ D$ 9l$$$|$xO9Ort$xC_t|$xG(G}t$xLL$x$tD$|$ O9Ort$ _t|$ GD$$G D$$|$$}t$ LL$ $tD$D$ D$%$OL$Wvt$td|$D$< uCJuPL$xy9yrt$x+_tL$xA(A}t$xK|$x$ uKuKt]L$xy9yrt$x_tL$xA(A}t$xjK|$x$u/ t Kut9l$$uL$9L$tD$t$ mKD$[^_]dÐUVSu1҃<tB8uӅt4ЃKue[^US$=$tЃ;uh~_]U=uÐSL$ T$\$̀} أ [ÐVSt$ \$T$t'Ѐ:t@8u)PRV Su[^' : can't load library 'Incompatible version. Too many libraries. No such library. Permission denied. Exec format error. Unspecified error. ) ( UWVSl$|$,=,PV>̀} ى  jh0huj9$4pLpppppdppppXpppppppp@jh:jh.jh"jhjh jh-j̀򐐋H %t 93D$ځ%9u 9}D$T$t;jh0hujujhjd̀򐐃>L[^_]þ,=,t.jhAphD0hGj>u֐1۸̀[^_]/lib/libc.so.4Jump table 4.1`ibgc./usr/bin/co 755 0 0 172000 5316132315 11521 0ustar rootsystem d-̀\ `-:D$4 `BP`[̀r-qCopyright 1982,1988,1989 by Walter F. Tichy Purdue CS Copyright 1990,1991 by Paul Eggert$Id: rcsbase.h,v 5.11 1991/10/07 17:32:46 eggert Exp $co$Id: co.c,v 5.9 1991/10/07 17:32:46 eggert Exp $ co usage: co -{flpqru}[rev] -ddate -jjoinlist -sstate -w[login] -Vn file ...,v/redefinition of revision number-l overrides -u.unknown option: %s%sno input file%sstdout%s --> %s w%s: parent directory isn't writableno revisions present; generating empty revision 0.0 cannot combine -kv and -l (unlocked) (locked)revision %s%s see %sdone DUWVS$D$D$D$ D$$D$,D$0D$UD$D$(Pt$`t$` D$XT$(T$\F/9$ X<xTHh$(>|$t hY(t$̃=} hy(몐=~ hy(놐D$weU|$ t jd)\$4SV\$ >=Lt jj(5L>|$t js(t$|$$t jw(>t t$$cD$$uL$\P5`L$\TRIL$\H|$| jk.(V.D$|$}hL$`1h&D$\T$\2L$X|$X~F<-3|$Xhhq&|$t  `jjX=t0bPt$ht$hF|$uP5|hq' |$t1 fh5h`j5^hU_u&=< ` u5hJU"S/=u2h&h!u W1R|$tD$,Pt$ [V=}hj{_1t tuP 0D$0Pcht$t$,t$,t$<os=} PG=tP_1?t 'a0W5a|$| T$=~=uh"=Lt ==} 9EP0hO1% u jF.= =%P=Lt|$u 1P559Ƌ9u Wbx=Lt'1u5cVE |$1ۃ=t't#=Lu5@cWU~ÅuV谈f$%m=t= =u P5UhJ\UZot5Uh^ he#6D$\L$X|$Xq5[^_]DÐ=t hh9t h9t h[Ð[j+_, and you do not own itwritable %s exists%s; remove it? [ny](n): checkout abortedwritable %s exists; checkout abortedto=ufՎ f9uR5h j:u45=u9t $ P=1ÐÐrevision %s locked by %s; use co -r or rcs -u UWVSD$ (5lt$|$t>6\P`ËF0U`uttvuDžu+1[^_] Ð6Uh  [^_] ÐVWT$lF@ [^_] Ðtoo many joinsjoin pair incompleteempty joinUWVSL;|$C; t; t;,t;=C9r$8 (( ( ( ( ( ( ( ( ((( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (( ( ( ( ( ( ( ( ( ( ( (( ( ( ( ( ( ( ( ( ( ( ( ( ((K L$D$D$ 1WR)|tD$Pjjjt$,6hWL$ t64X1ۅC; t; t;:C; t; t;ڐC9r$K L$D$D$ 1WRztD$Pjjjt$,fWSL$ t64X1ۅ1[^_]h 球=u X \5X0sXd룐=~[^_]Ðh 뒐h .1[^_]Ðcommon ancestor of %s and %s undefinedUWVS|$l$ W3aD$U&aD$|$w |$UWa1FPUWib u^SUWWb u؅D$vPWh8.d D$vPUh@d 5@58a} 8@WS`tDUS`t6[^_]ÍFPUWa tVWh8c [^_]ÐUWh 1[^_]Ð/usr/bin/co/usr/bin/merge-L,:revision %s -pmerging... tUWVSD$$D$(D$D$ jD$jD$D$\D$dPD$l=HtHT$lD$p=Pt P=Tt T@|@D$,D$0D$4\D$@kD$8k19=t$l$$T$\T$u0V?:hnV荏4HV}hpVo4LV_4PhrhU4PU-T$T$`T$$T$ht$q4ThrmhU苏4TU׎T$T$`T$$T$ht$hT$T$<TT$DD$H=t D$H@D$L9=t $T$T$@D$,P葀=|99=gD$$P9D$P,[^_]tD$$P D$P1[^_]tÐ$Id: rcslex.c,v 5.11 1991/11/03 03:30:44 eggert Exp $Unknown phrases like `%s ...;' are in the RCS file. u5hÐ Jy=jh 蕋H9HrP__tP@}5Ðunknown character `%c'UWVS5= L$L$nS 9r=$ TdxxTjTTTt$hRO9OrWp_tGD$G D$|$} W3PN9NrD$PV_VD$%FV -  L$D$EEO9OrW_tGD$G D$|$} Wt:N9NrD$PV(_VD$%F} VML$ntu-D$EE9l$[D$Ph BE=t{= 1Ҁ?t C;uй14t3W_t's,搐j$pRh N9NrV$_t FFKVT$ T$59|$wt$t$赃NjN9NrV_tFF}VT$ T$ЈG t@t 뙐됋N9NrVn_tFF}VT$5 T$@}9|$wt$t$@G(N9NrV_tFF}VT$T$<nuh9|$wt$t$T$苂NjT$ЈGN9NrV_t FF}VT$]T$ntt %N9NrV<_u붐nl$,@N9NrV_tFF}VT$T$EtE9t}u;nt/| }#t$,0n G\$,99|$wt$t$T$9NjT$ CG9r1+D$ PD$$P[^_]ÐWVS=O9OrW_tG0G} Wt8K9KrPSf_SȈ%C} S t @t낐uO9OrWr_tG0G} W=t8K9KrPS_SȈ%C} S@5[^_ÐWVS `5N9NrV_tFF} V t @t RHN9NrV_tFF} VY@t [^_ÐO9OrPW_W؈%G=W/UWVS=|$L$$)y|$L$y9yrt$_tL$A0A} t$t9{9{rPS;_S%C} Sa t @tL$y9yrt$;_tL$A0A} t$t9{9{rPS_S%C} S@t)5L$$9|$)l$D$T$[^_]Ð9l$uD$Pt$(l}ʼnȈEEinvalid character %c in identifier `%s'identifier `%s' doesn't start with letterVSL$ \$ntulA‹ntttt߄tot8tg tb t] tXАA t t tt8uVPhl%A t t tt8uVh%[^Ðjt$9Ð`%s' is not a regular file@WVS|$PjW_ƅ} 1[^_@Ë\$Xu\$ SV_tWtfCf%f=t*Wh&VB_< `1[^_@t$TV_uW%[^_@Ðoutput error=tZhD'unexpected end of fileh|'input errorh'D$$ t h'ÐD$$ t"=thD'\ÐD$tP_t h'9ÐD$t0P_t#=tmhD'ÐS\$tPo_t h'[S\$t1PC_t$=thD'[ËT$$ t h't$t h|'Ðjjt$ _ t h'BÐh `_t=uhD'Ðu `P_t=uhD'Ð %s aborted %s error: t$5< `Ðu `PL_t=uhD'hhh)h ` T$< `t$_h `_t =uhD'Ðt$5< `u `P_t=uhD'hh)h `_ T$< `t$_hh)h `_ u `P_t=uhD'0hh)h ` D$Pt$h `| h `j h `_t=uhD'Ð%s: %s:%lu: u `PX_t=uhD't55|hh+h `|_D$Pt$h ` hh)h `O_ {u `P_t=uhD'hh)h `_ D$Pt$h `6 hh)h `_ %s warning: u `P4_t=uhD'Phh,h ` D$Pt$h ` h `j h `_t=uhD'Ðredefinition of -%c optiont$h-.Ð=uu `PS_t =uhD'oD$Pt$h ` h ` _t=uhD'(ÐSD$\$ K9Kr%PS7_S%C}+$ t%=t7hD'[Ðt$t$_}$=thD'Ðt$ t$ t$ k_ }$=thD'HÐD$ Pt$ t$ *_ }#=tyhD'Ð$Id: rcssyn.c,v 5.8 1991/08/19 03:13:55 eggert Exp $desclogtextaccessauthorbranchbranchescommentdateexpandheadlocksnextstatestrictsymbolsmissing ';' after '%s'%s isn't a delta numbermissing ':' in symbolic name definitionmissing number in symbolic name definitionmissing ':' in lockmissing number in lockunknown expand mode %.*sWVSxh/bÅt3]A$t3h 0j uh/h/h/t1Åtj uh/h/Eh/ƅtj\0X␐j ;uh/h/h/?ƅtIj u h%0;Åu hM0j ]\0Xxj uh/h/ah/lƅtij ru hx0)Åt3?$t3h 0u h0j [0Xx뎐j uh/h/h/tj uh/h/h/tE=uhrkj puh/h/"h/`tu=uND$ D$|$ WÉVS} SVh0Wjnj uh/h/h/2 $[^_ÐkvkvlkvoD4G4K4M4O4WT$0׹HPR_ÐUWVSl$\$T4=T4t.2٨u<u-T4[^_]Ð:uԸ[^_]Ð t |0t#&5YWVSÅt3<$t 3h 0P߅u1[^_jj h/ Gjj h/n Gjj h/Z Gh/wkÅt3f<$t3h 0tjyXpj uh/h/h/Åt3;$t3h 0N_(j zuh/h/,G GG8h/G W$x[^_{ultB H RuS\$h/t [Ð[Ðmissing %sWVSt$\$1V59u=|$u Vh7bj uVh/G[^_Ð%s %s; %s; %s %s:%s; %s; %s %s %c%s%c; VSt$ =t x7Ph/hy7VB=t"=|5h/hy7VVh/t3h7V [uh/h7V ts3h7V[uh/h7V ltC03h7V~[u=th/h7V[ h7VM=t:h/h7V1 j55jVh7V =t#j@4T4j@h/h7VV5$5 [ V9Vrj V*_F F } VT[^Ð %s %s %s; %s %s; %s %s; branches; %s %s; WVSt$|$~8Fux7Ph/vh/vh/6h9W$^t0h7W [u~(t F(x7Ph/h9WWv$v Z Wv(O^tW3<[u[^_Ðunexpected EOF in diff outputrVS\$jh:S ƅt0t$ t$ Vt$ t$ t$ jV[^ÐS1[^ÐWVS\$|$t1S9Srj@Sj_C@C@} St$|$tq>@u2K9Krj@S'_C@C@} SPS9SrPFS_S%FC} SOu|$t8|$ t1K9Krj S_C C } SS9Sr j@S}_C@C@} S[^_Ð %s %s %s %c%c UWVS\$(t$,|$0l$4h/t$(h8<UjVSjUj@h/hA<U|$8O9OrW._tGG}W$@u2M9Mrj@U_E@E@} UM9MrPU[_U؈%EYUKD$P.D$PUjVtL$|$tڐO9OrW>_tGG}'W$t|$h:W@u2M9Mrj@U_E@E@} UM9MrPUW_U؈%E} U 7L$|$(j@hH<U [^_]ÐD$@@ Ðbad diff output line: %sdiff line number too large: %s%c%cdiff output command line too longbackward insertion in diff output: %sbackward deletion in diff output: %s%s UWVS$$ T$$N9NrVW_t FF}/V $t t h:z[^_]Å@u{V9VrV_t FF} V@uD$@D$D$Ph>|$tSj@h>t$j|$$9w h>؈GN9NrVU_t FF}V $t h:z ut\$|$ u G t1+wt9sD$Ph>$GCЃ vЃ u G t1/Dwl9sD$Ph>GCЃ v̅uuD$Ph>\59sD$Ph>D$!|$tD$PhZ?t$ $$1i|$a%[^_]Ð$Id: rcsgen.c,v 5.10 1991/10/07 17:32:46 eggert Exp $UWVS\$l$t$|$ 9kuGV jtPU t1[^_]Ðh[^_]Ðjjjjs ;uut jVj jtPs\ jV1tCP t1[^_]Ðcan't find delta for revision %sdelta number corruptedUWVSt$|$l$ct6hpC fÅu hCh/t+9u'hR5FV= u&h/5_t= th/Y9t U<t# tGt/t8[^_]Ð_ [^_]ÐV& [^_]Ðj=[^_]ÐVUWVSt$T$t?JCA< uy ty t AڐI9rѐy t y ty uI9r)[^_]Ð=(u"=ujs_(ÐVS< `< `$t7=(u"=uj._(=t#ϋS9SrS"_tC0C}RS$tC=(u"=uj_(=th `j [^WVS=,=(u"=ujc_(=D$Pt$h `@ < `< `$t7=(u"=uj_(=t#ϋS9SrS_t C0C}RS$tC=(u"=uj_(=th `j  < `$< `t7=(u"=uj#_(=t&ϋV9VrV_t FF}RV$tC=(u"=uj賿_(=th `j ؃ t< `$4ytYu [^_ÐntNu1[^_ËD$[^_ %s%c %s %cNOTE: This is NOT the log message! descriptiont-rUWVSt$,-=tJ|$(uC5h/hHU!j[^_]Ð=t jj@h/hHUu.h,hHhHhHY48=4p>-uF0HhHV豺_…uVjh,T$W5, 0L$ T$Z9ZrRT$ڶ_T$tB8B}RT$T$$u,9t$ wD$ Ph,T$cXƋT$ȈF뉐Rn_t*+,5,ljt$tEO\$D$B< uz tz t BԐJ9rːz t z tz uJ9rt$)T$L$\$ 48j5854jU]9]rj U^_E E } U[^_]Ðenter %s, terminated with single '.' or end of file: %s>> can't reread redirected stdin for %s; use -%s<%s>>> UWVS\$(=(u"=ujԻ_( L$tt$,Sh\Kh `< `$tSt$(ShK11< `< `$t8=(u"=ujM_(=teϋM9MrU@_t EE}SUE$tC=(u"=ujں_(=th `j '\$< `$ub|$ u4t|7.ut|7 uNA|$th `hKB^St$4TL$09L$ >t?NCB< uz tz t BڐJ9rѐz t z tz uJ9r|$)T$D$T$[^_]Ð$Id: rcsedit.c,v 5.11 1991/11/03 01:11:44 eggert Exp $t$_1҅t=< `%ډedit script ends prematurelyedit script refers to line past end of filew+D$u?=ujQhN5蟵_u 5xÐS\$jjj$ S5DE5D[ÐUWVS|$l$5Dt5tjjWSV SV=EV|$LPjj5'_ tDHH-uP4 t$LPtML$D$ u뒐[^_]0ÁUWVSt$D$D$WV$$2_ t\9uPD$P@t$|$ʐM0$>/t SACV$ B돐< `D$P A< `ttEu?[^_]Ð1[^_]Ð< `([^_]Ð[^_]symbolic link to non RCS filename `%s'RCS filename `%s' incompatible with suffix `%s'RCS filename `%s' ends with `%c'rwTUWVSt$h\$p=%D$VDD$ \$9\$} 1[^_]TÐ.UAlj)T$\T$Ut$8A\UAu$Uha1< `1[^_]TÐ8uPWha Ӑ8tGC?uC*GCu;_uj_Uh b _T$D$ 0.\7h$hS<_ D$=< `8|$}+ D$$PS?_T|$t$lh,bU D$ =< `|$ tm|$tfh65\_1t=< `%ޅt=< `P7t 5\W(Sh\?h.bt$蘟_u 5\-=< `D$ [^_]TÐkeepdirtempL$d9 tHyhd|TXXXXXXcan't make temporary file name `%.*s%c_%cXXXXXX'UWVSl$|$uU:[^_]Ðt$'?Ǎ4\G PSo<t$S~>\7_C0Cm.dfdfSdSVk_t>uE0Pj/t$WhdT[^_]ÐUWVSXdt$u47_u5My[^_]VSD$ t$f\$t P[PV_t [^Ðt$Vޤ_1҅t=< `%ډ[^Ðmultiple revisions locked by %s; please specify oneUWVSl$1llt'3P/_uu{[u܅u(1[^_]ÐPhf[^_]ÐSU|$tC@ [[^_]revision %s already locked by %sVSt$ ltOC06@ u53&Pp_u1[^36hLg> [^Ð[uj &F slSl[^Ðsymbolic name %s already bound to %sUWVS|$t$l$tQ3Vĥ_u9uWs谥_u {[^_]sVhhv 1[^_]Ë[uj %É3{S[^_]ÐS1k1f9%P'[Ðrootuser %s not on the access listWVS=t@1f9(t291 1f9%PI'ƿhu [^_Ð5600f9%P'P耤_t=vu00f9%P&Phh/1[^_Ð[^_Ð %s%cWVSD$|$t^}1[^_Ð5555h/hi5==h.J0'5\蒥_1҅t=< `%ډӋ5< ` \d9 tHyhd|T'0t5|VӾ1[^_Ð[^_Ðbreaking hard link to %ssaved in %sUWVS|$}=p=t!55:)hf=&v5|hkL$/&f$m5\=|t hҼPVY_t (WVY_1҅t=< `%ډӋ5< ` \d9 tHyhdT&G/to5|Vk5\hk萾Xdt$u,.7}_u.My1[^_]Ð[^_]Ðt$S_t{Ð$Id: rcskeys.c,v 5.2 1991/08/19 03:13:55 eggert Exp $AuthorDateHeaderIdLockerLogRCSfileRevisionSourceStatemm"m)m,m3m7m?mHmOmUWVSl$ m"9u<$t<:u [^_]Ð1[^_]ÐCA8tփNu1[^_]Ð$Id: rcsmap.c,v 5.2 1991/08/19 03:13:55 eggert Exp $    $Id: rcsrev.c,v 5.3 1991/08/19 03:13:55 eggert Exp $T$u1Ð:tB<.uA:uVS\$ t$SV[1څt:u1B<.uA:u$uB<.uIuB[^ÐUWVSt$t$uD$r\$urt$>u [^_]À;u[^_]ÐD$t$>0t1t$ Et$D5Ѓ v;0uC;0t1BЃ v9tr[^_]ËT$߉0tF*Gu#l$t$>tD$;?C9[^_]UWVSL$\$T$A<.uC<.uJu90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r+uʉ߉0tF*G[^_]Ð[^_]Ð[^_]Ð and state and author a date before No revision on branch %s has%s%s%s%s%s%s.revisionbranch%s %s absentUWVSt$t$\$u [^_]Åu[^_]Ðt$>tր;tD$t$>0t1t$ Et$D5Ѓ v;0uC;0t1BЃ v9trwT$߉0tF*Gu%l$t$>.uD$;.uCL$ X1[^_]ÐVSt$ \$t$V.t@8.t8u@Ku@[^RCS file emptybranch number %s too lowrevision number %s too lowRevision %s has date %s.Revision %s has author %s.Revision %s has state %s.hUWVSD$PD$T=|$ uhv- T$||$|t t$|>uD$$WB<.uA:uL$$|$$0L$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r#Ή߉0tF*GD$ D$|$}qjt$ p$$v(t$ ID$Pt$|P+D$P@8.t8u@Ku@t$Phv+|$~1D$HD$Lj$\$PS Pht:|$$|$ 7t$pL$|$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r'Ή߉0tF*G_$$t$ ^ur}t;}0u E}0tD$ED$|$/Ѓ v;0u C;0t1BЃ v9T$t9T$sBߋL$0tF*Gu!l$\$}tE;MCG|H$tt$ v$_u$$tJ|$ w$_t0jQt$ p$$v(t$ |$ t~L$|$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ru&ʉ߉0tF*G|$$t\$|5D$Pt$P(D$P@8.t8u@Ku@\$P$$urP$t lt$u$u ptrP$$urP$txt$u|trP$tD$8P$#rPr$ttPSht j|$ x$$D$ [^_]hÐL$|t$ A<.uC<.uJu90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r/uΉ߉0tF*GD$D$D$|$L$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ruRΉ߉0tF*Gu0j$t$ p$$v(t$ |$ tyL$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ru"ʉ߉0tF*GtKD$Pt$|P%D$P@8.t8u@Ku@t$Ph(v跬_|$$vQ|$tJD$HD$Lj$\$PSK Phthth S#j‹|$ z$$|$$v>R$$$t$4$t$8[^_]hÐ$ $t$|$ _urt$>tÀ;>0uD$|$?0t1t$ E|$D=Ѓ v;0uC;0t1BЃ v9t 9sBDt$߉0tF*Gu%l$t$>tD$;UCO}4D$XP|$$wPt$$6hCv 1[^_]hÐ$t*|$ w$ύ_twt$$6h\v븃$t:|$ w$蛍_t GuwvPt$$6hvw$mD$PP!1[^_]hÐno side branches present for %sbranch number %s too highpUWVS$D$,@D$ t$Xt$L$PL$|$ uqD$XD$\\$,K$t$ "D$Xt@8.t8u@Ku@t$Xhot$ 1[^_]pÐt$ $8T$,EE<.uG<.uJu}0uE}0t1EC+Ѓ v?0uG?0t1B:Ѓ v9ru0tF*G~kL$ IL$ XD$XD$\\$,$t$ l!D$Xt@8.t8u@Ku@t$Xh}TD$PD$Tt$,$t$ PD$0$tttRht t$t$ L$(L$,9$D$$$$t$L$(Yurt$>u ;L$90uD$t$>0t1L$ Et$D5Ѓ v;0uC;0t1BЃ v9t9sFt$߉0tF*Gu%l$L$9tD$;AC;|P$tt$(v$ۉ_u,$tL$(q$跉_ut$(t$$L$(I(L$(|$$$$urP$t!lt$u$u ptrP$$urP$txt$u|trP$tD$@P$rPr$ttP$ht蜥 1[^_]pÐt$ $j L$(H$$I(L$(t$$9ujL$(H$$D$([^_]pÐ$t$(.T$,tG<.uEE<.uJuG?0t1C;Ѓ v}0uE}0t1EB*Ѓ v9ruyى0tF*G}WD$XD$\\$,C$t$ FD$Xt@8.t8u@Ku@t$Xh(vjL$(H$$L$$q(t$($>T$,tEE<.uG<.uJuE}0t1EC+Ѓ v?0uG?0t1B:Ѓ v9rY0tF*G7D$,@9$$L$$)T$,tG<.uEE<.uJuG?0t1C;Ѓ v}0uE}0t1EB*Ѓ v9ru"ى0tF*Gt[\$,CD$PD$TS$t$ i P$tttRhtx t$D$,@9$$$L$$Yur}t;}0u E}0tD$ED$t$.Ѓ v;0u C;0t1BЃ v9T$t 9T$s>@ߋL$0tF*Gu!l$\$}tE;QCK}4D$`PL$(qGPt$(6hCvK 1[^_]pÐ$t.L$$q$7_tt$$vL$(1h\v봃$t:t$$v$_t FuwvPL$(1hvst$$NL$ D$,$9t$,$D$$[^_]pÐjt$ t$ i Ðworking file lacks revision numberSymbolic number %s is undefined.improper revision number: %sUWVS|$jt$$L$ 1t?u[^_]ËT$:$u_zuYt$$<u 1[^_]Ð8uh蔟ڐPt$$f뜐Vhq뷉L$ QT$D$l$nt_VMOG?0uGЃ v9t$wUt$$ƊGF vOF[L$ +9t$wUt$$ƊGFntփtуt̃t9t$wUt$$SދL$ 1t3V|_y[u1ۅ9t$wUt$$ƊCFuG=<.u>?u)D$$u1T$ 2BÅ@SdD$F.t$h̊Ν1[^_]ÐPjjjt$OtÐ1Ð=t(Pjjj51tÐ=t 1Ð$Id: rcsutil.c,v 5.10 1991/10/07 17:32:46 eggert Exp $out of memoryD$uPz_u h$Ðt$t$|_u hÐS\$jDz_u hߝ|P|[SD$uPz_Åu h衝jy_u h舝|P|[VS5|t^6u_Vu_ޅu|[^ÐST$||9t C[9uK3vu_Smu_[Wt$|$ 0҅uR3y_…u h̜R~__ÐWt$ |$0҅uRx_Džu h腜jx_…u hj|B|:W.~_D$D$_ÐWt$ru_…t=R0׹ЅuPbx_u hP}__Ð1_LOGNAMEUSERno password entry for userid %luW=\|$hXt_…tR0׹ЅuPgw_u hP|_1\uDxt_\u6%Pu_u%Phe诚\5\Ҕ\_HangupInterruptBroken pipeQuitTerminatedCputime limit exceededFilesize limit exceeded RCS: %s. Cleaning up. RCS: Signal %d. Cleaning up. @ÁWHE8=jWz_t=_=1ҍO9$ܒ@HXuuuuuuuuuPu`uuuuuuuuhp.&őё֑t Rh Wh)D$ Pz_ T$0׹HPRj}_ w_ signalWVS=``D$ ܓ I D$ Ky|$ܓWj6x_ t h |$t-D$`L$ L$jW6x_ t h֕Ky[^_Ð WVS$ $ $u@\$ Vh jSo_uV[^_ WPS $t[^_ ÐWVSt$\$|$v5WhjVo_=twWSjVo_9t[^_/bin/sh: not found forkwaitpid%s failedUWVS贓{z_…4L$)˃tYjl_hjUs_ Dž|u%jjWm_ WKl_uЃtU@+t_j l_hhAUes_ Dž|u(jjWm_ Wk_uЃtUؓS3(m_=< `ulShlm_0׹HPRjrz_ j htjaz_ jj_} hfjD$PRy_ } hF|$tL$qhD$[^_]Ðtoo many command argumentsPVSD$`t$\t$D$ \$hD$dD$t#~ hD詔ʃACDuߍD$P[^P19%.*s/%.2s/%.2s %.2s:%.2s:%sSL$\$ ʐB<.uB PB PBPBPRQ)HPy.u =}—PSu_$[Ð%s isn't a number%s out of range %d..%dWVS|$w=dt jVdtN1G\PFЃ v>t Wh4肓~~jjWhFg[^_ÐRCSINITUWVSl$t$hrl_…tAR0׹ЅuPbo_u hPt_1ۅuL$1}ڐB<  <} t < uG名uPn_u h荒NjL$9ڊ<  <} tF< uC鐉ECB<  <}t"< t<\u;t JCאB뮐u[^_]Ð=lull_fhhÐ=tutk_fppÐsetuidroot setuid not supportedÐVS==tutj_fpfp=tutj_fpf5p=lulk_fhfhf9tNPq_t h /j_f9t*=xu!xftP辐[^ÐVS==lul%k_fhfh=tuti_fpf5p=lulj_fhfhf9tNPp_t h8[i_f9t*=xu!xftP[^ÐW$jWp_t=_=1ҍO9$$,<YYYYYYYYY4YDYYYYYYYYLT.&őё֑t Rh Wh)D$ P8p_ T$0׹HPRjs_ m$Id: rcsfnms.c,v 5.8 1991/09/24 00:28:40 eggert Exp $RCSa-- adaasm;; bat:: c * c++// cccppcxxcl;;; cmdcmfc csel; fforhhpphxxllisplspmacme.\" mlmmmsppaspl% texy# ڝܝܝ  #&)+/159;@DHKP&SKVKY[_bebikTMPDIRTMPTEMP/tmp%s%cT%cXXXXXXcan't make temporary file name `%s%cT%cXXXXXX'UWVSl$=uLhx u6hu hu 0߹Ѓ PǍu0Vj/ShW>m_Wh_t?uVj/Sh诋<[^_]ÐVStPPo_Ny[^ÐUWVSl.р9tB8uр:u9-uԠ1pt4)ЉD$AC|$t|$uu<nt҃Fċtz0߹ЍpNt|3/t݉-51=||$?.u4|$/u D$|$.u/u@D$|$?.t͋5 N<./uHtu0T$׹Ѝ\9sF=t5S_%9r5VUSW_ /Ct$S\_[^_]Ð$Id: partime.c,v 5.6 1991/08/19 03:13:55 eggert Exp $januaryfebruarymarchaprilmayjunejulyaugustseptemberoctobernovemberdecembersundaymondaytuesdaywednesdaythursdayfridaysaturdaygmtutcutcutnzstjstkstisteetcetmetwetnstastestcstmstpstaksthasthstsstnzdtkdtbstndtadtedtcdtmdtpdtakdthadtltdstddstampmnoonmidnight Ʊ ϱ ر߱ 0%)-159=AEI,MhQUY^XcXgk0ptx|,hX<x /-.DUWVS1ۋT$\BBB BBBBD$$D$(D$0D$LD$H|$X|$DD$DD$ t$ ux|$Ps|$$|t$$t$`!TT$\z}BL$0}1Ƀ|$(|L$D$()ȋ|$`ًT$` [^_]DÐ|$ND$Ph@ȸ9$Ե,8L$\DL$\8L$0/jD$4P4@ ŠD$P@$tj|$8u{\$@` oT$4T$:Ѓ w\ؿdӃ;Kt$@D$)L$|$D$x+uۉ\$,݋T$T$DD$H|$<|$Lt$PL$(L$$UQ Wt$DЃ |$N8|$H-\$P` FЃ  ؿdӃ;L$PșD$)L$|$>+uۉ\$,D$,D$(Xl$P|$HuEdщQD$`D$ t$ 6D$UD$`P|$HT$\z}z|$L:uPdӉQD$`D$ t$ D$SD$`PO|$L,A|$L/6t$4D$8T$LT$tD$4Ѓ D$@@$|$L:bD$|$.D$\$T$8T$Lu{8T$Mt]|$D|$4D$HD$8T$LT$<|$P|$@D$8D$4P'D$t|$>uD$@xT$\z }Iz=D$8D$Mu>t T$\r|$\w |%t D$\p T$\r} D$AT$\zz z}vq|$D|$4D$HD$8T$LT$<|$P|$@D$4P<D$u|$@t51[^_]DÀ|$>tD$4Ѓ ]D$@@$LUD$` PQEPD$`P=ŔxUD$`P6냐UD$`Pit$ u|$P%[^_]DÐ|$N7|$HuZL$PȿdQD$`D$ t$ D$L$PșQt$`D$tv|$Ht$PD$`P`|$L:uBt$ ;|$N|$H~t$Pt$`fD$8} T$1ÐÐT$L$B(|# ~1Ð uBu0B *z܃:ׅ| uJu ttÐUWVSl$Uu 1[^_]Ð}} t[u?+t?-uGNNxaE DЉD$GȻ 9E u9L$}E 1[^_]ÐT$U NyhuW E tɸ[^_]ÐUWVS\$3s3SS C CCC ^i19$н{u3r{u 3K cKC[^_]ÐC{u'AЃ wCC F9s8~-t~+u, C%AЃ C 9tKKC[^_]ÐFC[^_]ÃUWVS|$ 1ft$\$~/T$+D$AFtuT$<nuKхu#9u [^_]Ðt 1[^_]Ðu[^_]Ð$Id: maketime.c,v 5.3 1991/08/19 03:13:55 eggert Exp $;Zx0Nm UWVSD$|$8@ %D$D$,D$ D$$D$(|$u\$4{|$,u$jN_D$,|$,u[^_] Ðt$,y|$(Y\$y|$$Y \$ y|$q|$tED$,PG_+Q+i\$(9Yt+AD$+A@‰)TT$8+t$8yr;)<\$)É؅L$ |$ L$$y L$(D$$ |$$+1|$$uD$($%‰T$ h<D$~T|$$+1|$$uD$($%D$ 9D$ ~D$$|$$ ~ D$(D$$D$ |$8`|$8vL$4y|Y\$(D$$D$ |$(DJ1D$($u*D$(duD$(,uD$(y|y|$$D$ |$$ y |Y \$ |$ |$$+9D$ ~|$ |$$1t |$$%\$$Nj\$ |;|$m9i|$(}|$lT@|$(ǍD$,m9,D$(@D$,D$ōE9D$, l$,q|9D$,)D$,Q9D$1D$y|y|$y|q9| L$;|$<||$v|$jD$^l$,D$8T$+T$)Ћ\$D$,D$,|$u8|$(}|$,Q~ 9l$,D$,[^_] ÐD$,PC_|$4?| 9|$4|Y9_uP|$4|Y9_u>|$4 |Y 9_ u,|$4|Y9_u|$4zI9OnL$2[^_] ÐUTC is not available; perhaps TZ is not set?U`=}h`URЃu h<fÐ%.2d.%.2d.%.2d.%.2d.%.2d.%.2dL$ $`=}h`RЃ…u h<Of2rrr B@PBzc~lPht$(G_ can't parse date/time: %sbad date/time: %s(WVSt$8|$ W\$SV. u Vh,et$ SuVhFeD$ `=}h`WЃ…u h<se2rrr B@PBzc~lPht$XF_ [^_(ÐHVST$Xu 1[^HÐD$0PRÍD$Pt$VS\ u Sh,dt$VuShFdht$XH_[^HÐ$Id: rcskeep.c,v 5.4 1991/08/19 03:13:55 eggert Exp $rclosing %c missing on keyword UWVSt$ =t[^_] Ð1u;jh5x^ ƅu5ha1[^_] Ðhh thhbhhPhhp>1ې$r|$N9NrV&8_tFF}V^$l$t t:tD$9v؈G뜃$t:u:N9NrV7_t FF}Vi^$ t 2D$PP 9$h V^ÅcjjV NVM =V Å*h VS hpVj jjVj tjjVY uF=$pjjV2V hpVj N9NrV&6_tFF}V\$t1ۃ$uu 8t8t8t p8uAN9NrV5_t FFWVm\$DtV\j$h_Vz][^_] badly terminated keyword valueVS\$ S9SrS5_t C0C}#S[$th^1[^Ðt$t$SV1[^Ðtoo much white space in keyword valueUWVST$t$ l$$t!jUT$I]ML$T$ 1D$1$9$@@@@@@@@h@@@@@@@@@@@@@@@@@@@@@h@@@tsЈC9\$whD$PUeVtu h,{][^_]Ðu|$(t 1[^_]ÐhJ]1[^_]ÐN9NrV3_tFFVT$Y$T$h\1[^_]Ð19%s%s %s %s$UWVS|$81D$,D$0l$,O9OrW2_t GG}#W=Y$thb\1jUWSjD$$D$(l$$O9OrW2_t GG}#WX$th[1jUWS2D$D$ hD$ PO9OrW1_t G0G}WAX$t1-t +l$jUT$\$L$ L$1T$$9$lllllllllllllllllllllllllllllllltOЈC9\$wDD$PU92tu h,OZoh>Z1bO9OrW0_tGGWT$V$T$hY1u 1O9OrW/_tG0G}WaV$t1\$,0߹҉T$|$$ҋ|$ЋL$TDPht$t$(Sк wCЃ w {/u Rh#5;_D$PYD$$PLD$,P?[^_]$ÐUWVS\$t$ l$$uEN9NrV._t FF}VAU$t 1[^_]Ðڅt"jUT$]ML$T$ 1D$1$9$pppppppppppppppppppppppppppppppptOЈC9\$wDD$PU52tu h,KWoh:W1{N9NrV-_tFFVT$S$T$hV1tuMR[^_]Ð1[^_]ÐWVS\$1S9SrS,_t C0C}#S9S$th^V11jhSVtj5t[^_ST$\$ 1ɀ:t:.tЃ v1[AB:u} ȃ[Ð9%[UVSu1҃<tB8uӅt4ЃKue[^US=tЃ;uh,_]U=uÐSL$ T$\$̀} أ [ÐVSt$ \$T$t'Ѐ:t@8u)PRV Su[^' : can't load library 'Incompatible version. Too many libraries. No such library. Permission denied. Exec format error. Unspecified error. ) ( UWVSl$|$,=,PV>̀} ى  jh(0h,uj9$TjhC:jhZ.jho"jhjh jhj̀򐐋H %t 93D$ځ%9u 9}D$T$t;jh(0h,ujujhCjd̀򐐃>L[^_]þ,=,t.jhph0hj>u֐1۸̀[^_]/lib/libc.so.4Jump table 4.1 `ibgc./usr/bin/ident 755 0 0 22000 5316132315 12175 0ustar rootsystem d -̀\ `-:D$4 `P`[̀rCopyright 1982,1988,1989 by Walter F. Tichy Purdue CS Copyright 1990,1991 by Paul Eggert$Id: rcsbase.h,v 5.11 1991/10/07 17:32:46 eggert Exp $ident$Id: ident.c,v 5.3 1991/09/10 22:15:46 eggert Exp $-qr%s error: can't open %s %s error: write error UWVS\$11~ t$~ƨtKD$Wjh< ` h D$t$6`u$t$6hhh ``BWt$6P ~-5 `95 `rj h `_ `  `Ku `$ uh ``thh(h `2` [^_]Ð%s: input%s warning: no id keywords in %s %s error: %s: read error WVS\$t$|$tVhh2`m1 $ ur$uS…u+K9KrS_t CC}$tuVhhsh `@`S`t Vhhh ``jY`[^_ %c%s WVS$\$ ~9~rV>_tFF:t:|>h|ЈC$9rЅu [^_ÍD$ 9u [^_ÈЈC~9~rV_t FF tЅu [^_Ð C~9~rVv_tFF$t^}"$%ي$ \Tht tЈC$ 9rЅu [^_Ð{ u.ЈCD$ Pj$h|h `t_1[^_Ð[^_$Id: rcsmap.c,v 5.2 1991/08/19 03:13:55 eggert Exp $    UVS8u1҃<<t<B8uӅt48ЃKue[^USD=DtЃ;uhh _]U=uÐSL$ T$\$̀} أ [ÐVSt$ \$T$t'Ѐ:t@8u)PRV Su[^' : can't load library 'Incompatible version. Too many libraries. No such library. Permission denied. Exec format error. Unspecified error. ) ( UWVSl$|$,=,PV>̀} ى  jht 0hx uj9$ 8  8 8 8 8 8 , 8 8 8 8 8 8 8 8 8 8 8 8  jh :jh .jh "jh jh jh j̀򐐋H %t 93D$ځ%9u 9}D$T$t;jht 0hx ujujh jd̀򐐃>L[^_]þ,=,t.jh ph 0h j>u֐1۸̀[^_]/lib/libc.so.4Jump table 4.1H W `ibgc./usr/bin/merge 755 0 0 122000 5316132315 12212 0ustar rootsystem d-̀\ `-:D$4 `P`[̀r merge: usage: merge [-p] [-q] [-L label1 [-L label3]] file1 file2 file3 unknown option: %s%sCopyright 1982,1988,1989 by Walter F. Tichy Purdue CS Copyright 1990,1991 by Paul Eggert$Id: rcsbase.h,v 5.11 1991/10/07 17:32:46 eggert Exp $merge$Id: merge.c,v 1.2 1991/08/19 03:13:55 eggert Exp $too many -L options-L needs following argumentnot enoughtoo many%s arguments%sUWVSt$(\$,舂11B]=lu|$8u =|u?=luSht+|$<t =lS5lO|$t=dt5ܘh=Ԙt [^_]ø[^_]ÐPWDworking directoryUWVSX8/9-D?h8GQÅP=TsL=Tt5P_T =T{=Tr5TNP5T5Pk_Åuz=< `"ua=T}9s̃=Tt5Pt_T =T~9Tr5TVN|u h<0߹ЍpNt|3/t݉-D5X1=X|$?.u4|$/u D$|$.u/u@D$|$?.t͋5X N<./uHtu0T$׹Ѝ\9LsF=Lt5He_L%L9Lr5LOMHHVUSU_ /Ct$S_H[^_]Ð$Id: rcslex.c,v 5.11 1991/11/03 03:30:44 eggert Exp $Unknown phrases like `%s ...;' are in the RCS file. lu5hÐJy=ԘjhԘH9HrP/_tԘP@}5ԘÐunknown character `%c'UWVS5=Ԙ L$L$2S 9r=$P$t$hRO9OrW@_tGD$G D$|$} W3PN9NrD$PV_VD$%FV - L$D$EEO9OrW_tGD$G D$|$} Wt:N9NrD$PV_VD$%F} VML$2tu-D$EE9l$[D$Ph,BE=t{=1Ҁ?t C;uй14t3W_t's,搐j$!!!!!!!,"!!!!!#Rh N9NrV_t FFKVT$ T$59|$wt$t$NjN9NrV_tFF}VT$ T$ЈG t@t 뙐됋N9NrV>_tFF}VT$5 T$@}9|$wt$t$*@G(N9NrV_tFF}VT$T$<2uh9|$wt$t$T$NjT$ЈGN9NrVc_t FF}VT$]T$2tt %N9NrV _u붐2l$,@N9NrV_tFF}VT$T$EtE9t}u;2t/| }#t$,B G\$,99|$wt$t$T$eNjT$ CG9r1+D$ PD$$P[^_]ÐWVS=ԘO9OrW_tG0G} Wt8K9KrPS6_SȈ%C} S t @t낐uO9OrWB_tG0G} W=t8K9KrPS_SȈ%C} S@5[^_ÐWVS `5ԘN9NrV_tFF} V t @t RHN9NrV^_tFF} VY@t [^_ÐO9OrPW_W؈%G=W/UWVS=Ԙ|$L$$)y|$L$y9yrt$_tL$A0A} t$t9{9{rPS _S%C} Sa t @tL$y9yrt$ _tL$A0A} t$t9{9{rPSo_S%C} S@t)5L$$9|$)l$D$T$[^_]Ð9l$uD$Pt$(ʼnȈEEinvalid character %c in identifier `%s'identifier `%s' doesn't start with letterVSL$ \$2tulA‹2tttt߄tot8tg tb t] tXАA t t tt8uVPh(A t t tt8uVh([^Ðjt$9Ð`%s' is not a regular file@WVS|$PjW_ƅ} 1[^_@Ë\$Xu\$ SV_tWtfCf%f=t*Wh)V_< `1[^_@t$TV_uW%[^_@Ðoutput error=tVht*unexpected end of fileh*input errorh*D$$ t h*ÐD$$ t"=tht*\ÐD$tP_t h*9ÐD$t0P~_t#=tiht*ÐS\$tP?_t h*[S\$t1P_t$=tht*[ËT$$ t h*t$t h*Ðjjt$ _ t h*BÐh `_t=uht*Ðdu `P_t=uht*Ð %s aborted %s error: t$5< `Ðdu `P_t=uht*hh/h,h ` T$< `t$_h `_t =uht*Ðt$5< `du `Ph_t=uht*h/h,h `_ T$< `t$_h/h,h `k_ du `P_t=uht*0h/h,h ` D$Pt$h `| h `j h `t_t=uht*Ð%s: %s:%lu: du `P(_t=uht*t55Xh/h.h `L_D$Pt$h ` h/h,h `_ wdu `P_t=uht*h/h,h `_ D$Pt$h `6 h/h,h `_ %s warning: du `P_t=uht*Ph/h/h ` D$Pt$h ` h `j h `_t=uht*Ðredefinition of -%c optiont$h0.Ð=ludu `P#_t =uht*oD$Pt$h ` h `_t=uht*(ÐSD$\$ K9Kr%PS_S%C}+$ t%=t3ht*[Ðt$t$_}$=tht*Ðt$ t$ t$ ;_ }$=tht*HÐD$ Pt$ t$ _ }#=tuht*Ð$Id: rcsmap.c,v 5.2 1991/08/19 03:13:55 eggert Exp $    $Id: rcsrev.c,v 5.3 1991/08/19 03:13:55 eggert Exp $T$u1Ð:tB<.uA:uVS\$ t$SVڅt:u1B<.uA:u$uB<.uIuB[^ÐUWVSt$t$uD$|7\$u|7t$>u [^_]À;u[^_]ÐD$t$>0t1t$ Et$D5Ѓ v;0uC;0t1BЃ v9tr[^_]ËT$߉0tF*Gu#l$t$>tD$;?C9[^_]UWVSL$\$T$A<.uC<.uJu90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r+uʉ߉0tF*G[^_]Ð[^_]Ð[^_]Ð and state and author a date before No revision on branch %s has%s%s%s%s%s%s.revisionbranch%s %s absentUWVSt$t$\$u [^_]Åu[^_]Ðt$>tր;tD$t$>0t1t$ Et$D5Ѓ v;0uC;0t1BЃ v9trwT$߉0tF*Gu%l$t$>.uD$;.uCL$ X1[^_]ÐVSt$ \$t$Vt@8.t8u@Ku@[^RCS file emptybranch number %s too lowrevision number %s too lowRevision %s has date %s.Revision %s has author %s.Revision %s has state %s.hUWVSD$PD$T=p|$ uh: T$||$|t t$|>uD$$WB<.uA:uL$$|$$0L$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r#Ή߉0tF*GD$ D$|$}qj)t$ p$$v(t$ ID$Pt$|PD$P@8.t8u@Ku@t$Ph:+|$~1D$HD$Lj$\$PS Phs9:|$$|$ 7t$pL$|$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r'Ή߉0tF*G_$$t$ ^u|7}t;}0u E}0tD$ED$|$/Ѓ v;0u C;0t1BЃ v9T$t9T$sBߋL$0tF*Gu!l$\$}tE;MCG|H$tt$ v$c_u$$tJ|$ w$?_t0j]'t$ p$$v(t$ |$ t~L$|$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ru&ʉ߉0tF*G|$$t\$|5D$Pt$PD$P@8.t8u@Ku@\$P$$u|7P$t 9$u$u $9|7P$$u|7P$t,9$u09|7P$tD$8P$//|7P|7$t99PShI9 j%|$ x$$D$ [^_]hÐL$|t$ A<.uC<.uJu90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r/uΉ߉0tF*GD$D$D$|$L$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ruRΉ߉0tF*Gu0j0$t$ p$$v(t$ |$ tyL$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ru"ʉ߉0tF*GtKD$Pt$|PpD$P@8.t8u@Ku@t$Ph:3_|$$vQ|$tJD$HD$Lj$\$PSK Ph|9h9 Swj"‹|$ z$$|$$v>R$$$t$4$t$8[^_]hÐ$ $t$|$ _u|7t$>tÀ;>0uD$|$?0t1t$ E|$D=Ѓ v;0uC;0t1BЃ v9t 9sBDt$߉0tF*Gu%l$t$>tD$;UCO}4D$XP|$$w*Pt$$6h:_ 1[^_]hÐ$t*|$ w$_twt$$6h;븃$t:|$ w$_t Gu+;Pt$$6h3;w$mD$PP^1[^_]hÐno side branches present for %sbranch number %s too highpUWVS$D$,@D$ t$Xt$L$PL$|$ uqD$XD$\\$,K$t$ ,D$Xt@8.t8u@Ku@t$XhtEt${1[^_]pÐt$ $8T$,EE<.uG<.uJu}0uE}0t1EC+Ѓ v?0uG?0t1B:Ѓ v9ru0tF*G~kL$ IL$ XD$XD$\\$,$t$ D$Xt@8.t8u@Ku@t$XhE}TD$PD$Tt$,$t$ PD$0$|9ts9Rh9 t$t$ L$(L$,9$D$$$$t$L$(Yu|7t$>u ;L$90uD$t$>0t1L$ Et$D5Ѓ v;0uC;0t1BЃ v9t9sFt$߉0tF*Gu%l$L$9tD$;AC;|P$tt$(v$'_u,$tL$(q$_ut$(t$$L$(I(L$(|$$$$u|7P$t! 9$u$u $9|7P$$u|7P$t,9$u09|7P$tD$@P$%|7P|7$t99P$hI9 1[^_]pÐt$ $j L$(H$$I(L$(t$$9ujL$(H$$D$([^_]pÐ$t$(.T$,tG<.uEE<.uJuG?0t1C;Ѓ v}0uE}0t1EB*Ѓ v9ruyى0tF*G}WD$XD$\\$,C$t$ D$Xt@8.t8u@Ku@t$Xh:jL$(H$$L$$q(t$($>T$,tEE<.uG<.uJuE}0t1EC+Ѓ v?0uG?0t1B:Ѓ v9rY0tF*G7D$,@9$$L$$)T$,tG<.uEE<.uJuG?0t1C;Ѓ v}0uE}0t1EB*Ѓ v9ru"ى0tF*Gt[\$,CD$PD$TS$t$ i P$|9ts9Rh9 t$D$,@9$$$L$$Yu|7}t;}0u E}0tD$ED$t$.Ѓ v;0u C;0t1BЃ v9T$t 9T$s>@ߋL$0tF*Gu!l$\$}tE;QCK}4D$`PL$(qS!Pt$(6h: 1[^_]pÐ$t.L$$q$胿_tt$$vL$(1h;봃$t:t$$v$K_t Fu+;PL$(1h3;st$$NL$ D$,$9t$,$D$$[^_]pÐjt$ t$ i Ðworking file lacks revision numberSymbolic number %s is undefined.improper revision number: %sUWVS|$jt$$fL$ 1t?u[^_]ËT$:$u_zuYt$$%u 1[^_]Ð\8uh?u)D$$u1T$ 2BÅ@SdD$F.t$hOJ1[^_]ÐPjjjt$OtÐ1Ð=t(Pjjj51tÐ=pt p1Ð$Id: rcssyn.c,v 5.8 1991/08/19 03:13:55 eggert Exp $desclogtextaccessauthorbranchbranchescommentdateexpandheadlocksnextstatestrictsymbolsmissing ';' after '%s'%s isn't a delta numbermissing ':' in symbolic name definitionmissing number in symbolic name definitionmissing ':' in lockmissing number in lockunknown expand mode %.*sWVSThRÅt3$t3hSpj uhRhShRt1 Åtj uhRhSihRƅtj0X␐j _uhRhShRcƅtIj "u h1S_Åu hYSj 0Xxj uhRhShR"Hƅtij u hSMÅt3R$t3hS'u hSj e0Xx뎐j 'uhRhShR"htj uhRhShRtE=uhj uhRhSFxhRtu=uND$ D$|$ W&ÉVSx} SVhSW躲j uhRhShRV[^_ÐkvkvlkvoPWSWWWYW[WWT$0׹HPR_ÐUWVSl$\$`W=`Wt.2٨u<u-`W[^_]Ð:uԸ[^_]Ð t |0t#&5WVS Åt3$t 3hSt߅u1[^_jj hR Gjj hRn Gjj hRZ GhRwÅt3$t3hStj- pj uhRhShRBÅt3$t3hSr_(j uhRhSPG GG8hRG W$T[^_{uHtB H RuS\$hRt [Ð[Ðmissing %sWVSt$\$1VY9u=ǿ|$u VhZj uVhSk[^_Ð%s %s; %s; %s %s:%s; %s; %s %s %c%s%c; VSt$ =pt pZPhRhZVf=t"=t|5hRhZV;VhRt3hZV [uhRhZV ts3hZV[uhRhZV HtC03hZV[u=hthRhZV hZVq=t:hRhZVU j55jVhZV.=xt#j@x4`Wj@hRhZVV55e V9Vrj V_F F } Vx[^Ð %s %s %s; %s %s; %s %s; branches; %s %s; WVSt$|$~8FuZPhRvhRvhR6h\W<$^t0hZW! [u~(t F(ZPhRh\WWv$v [ Wv(O^tW3<[u[^_Ðunexpected EOF in diff outputrVS\$jh]S ƅt0t$ t$ Vt$ t$ t$ jV?[^ÐS1[^ÐWVS\$|$t1S9Srj@S^_C@C@} St$|$tq>@u2K9Krj@S_C@C@} StS9SrPFS_S%FC} S>Ou|$t8|$ t1K9Krj S袡_C C } SS9Sr j@Sq_C@C@} S[^_Ð %s %s %s %c%c UWVS\$(t$,|$0l$4hRt$(hD_UjVSjUj@hRhM_U|$8O9OrW"_tGG}W$@u2M9Mrj@U胠_E@E@} UM9MrPUO_U؈%EYUKD$P.D$PUjVtL$|$tڐO9OrW2_tGG}'W$t|$h]{@u2M9Mrj@U_E@E@} UM9MrPUK_U؈%E} U 7L$|$(j@hT_U [^_]ÐD$@@ Ðbad diff output line: %sdiff line number too large: %s%c%cdiff output command line too longbackward insertion in diff output: %sbackward deletion in diff output: %s%s UWVS$$ T$$N9NrVK_t FF}/V1$t t h][^_]Å@u{V9VrV_t FF} V@uD$@D$D$Pha,|$tSj@hat$j|$$9w ha؈GN9NrVI_t FF}V-$t h] ut\$|$ u G t1+wt9sD$PhaHGCЃ vЃ u G t1/Dwl9sD$PhaGCЃ v̅uuD$Pha\59sD$PhaD$R0׹ЅuP觟_u herP_1uD踜_u6%PG_u%Ph%h5B_HangupInterruptBroken pipeQuitTerminatedCputime limit exceededFilesize limit exceeded RCS: %s. Cleaning up. RCS: Signal %d. Cleaning up. ̘@̘ÁW̘H̘̘EȘ8=ȘjW_̘t=Ș_=l1ҍO9$jkkk5k5k5k5k5k5k5k5k5kk5k k5k5k5k5k5k5k5k5k(k0kti.{i&iiiiit Rhi WhiD$ P\_ T$0׹HPRj̥_ l_ signalWVS=D$ k I D$ Ky|$kWj6_ t hky|$t-D$ tL$ L$jW6ߠ_ t hkFKy[^_Ð WVS$ $ $u@\$ Vh jS_uVU[^_ WPS $t[^_ ÐWVSt$\$|$v5WhjV_=t苽wWSjV_9t^[^_/bin/sh: not found forkwaitpid%s failedUWVS$_…4L$)˃tYj”_hjU _ Dž|u%jjW6_ W苔_uЃtU谿+t_j`_hhAU襛_ Dž|u(jjWΕ_ W#_uЃtUHS3h_=< `u,mSh,mH_0׹HPRj貢_ j h4mj衢_ jO_} hAm־jD$PR_ } hFm趾|$tL$qhNmD$[^_]Ðtoo many command argumentsPVSD$`t$\t$D$ \$hD$dD$t#~ hoʃACDuߍD$P[^P19%.*s/%.2s/%.2s %.2s:%.2s:%sSL$\$ ʐB<.uB PB PBPBPRQ)HPoy.u =t}oPSŝ_$[Ð%s isn't a number%s out of range %d..%dWVS|$w=t jVtN1G\PFЃ v>t Who~~jjWhp׾t[^_ÐRCSINITUWVSl$t$hp貔_…tAR0׹ЅuP袗_u hemP_1ۅuL$1}ڐB<  <} t < uG名uP2_u heNjL$9ڊ<  <} tF< uC鐉ECB<  <}t"< t<\u;t JCאB뮐u[^_]Ð=uȔ_fÐ=uP_fÐsetuidroot setuid not supportedИÐVS=И=u_ff=uĒ_ff5=u_fff9tNP_t hHr|o_f9t*=u!OrftTrP.[^ÐVS=И=ue_ff=u_ff5=u_fff9tNP!_t hHr訹蛑_f9t*=u!OrftTrPZ[^ÐW$jW*_̘t=Ș_=l1ҍO9$ttttuuuuuuuuutuuuuuuuuuu uuti.{i&iiiiit Rhi WhiD$ Px_ T$0׹HPRj_ 舍$Id: rcskeep.c,v 5.4 1991/08/19 03:13:55 eggert Exp $rclosing %c missing on keyword UWVSt$ =t[^_] Ð1u;jhu5ܘ ƅu5ܘԶ1[^_] Ðhuh huhhuh\huhL֔1ې$r|$N9NrVb_tFF}VE$l$t t:tD$9v؈G뜃$t:u:N9NrV_t FF}Vճ$ t 2D$PD P 9$\wwwwwHxHxHxTxHx`xhV^ÅcjjV NVM =V Å*hVS hLVj jjVj tjjVY uF=$pjjV2V hLVj N9NrVb_tFF}VE$t1ۃ$uu8t8t\8t L8uAN9NrV_t FFWVٱ$DtV j$huV[^_] badly terminated keyword valueVS\$ S9SrSP_t C0C}#S5$thdyZ1[^Ðt$t$SV1[^Ðtoo much white space in keyword valueUWVST$t$ l$$t!jUT$]ML$T$ 1D$1$9$pzh{{{{{{{{{,{h{{{{{{{{{{{{{{{{{{{{{{,{{{{P{tsЈC9\$whD$PUVtu hy[^_]Ðu|$(t 1[^_]Ðhdy趲1[^_]ÐN9NrVZ_tFFVT$5$T$hdyR1[^_]Ð19%s%s %s %s$UWVS|$81D$,D$0l$,O9OrWń_t GG}#W詮$thdyα1jUWSjD$$D$(l$$O9OrWM_t GG}#W1$thdyV1jUWS2D$D$ huD$ P(O9OrWǃ_t G0G}W譭$t1-t +l$jUT$讋\$L$ L$1T$$9$}t~0~0~0~0~0~0~0~0~X~t~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~X~0~0~0~t~tOЈC9\$wDD$PUы2tu hy軯ohdy誯1bO9OrWR_tGGWT$-$T$hdyJ1u 1O9OrW_tG0G}Wͫ$t1\$,0߹҉T$|$$ҋ|$ЋL$TDPh蚉t$t$(Sкu wCЃ w {/u{Rh{5_D$PD$$PD$,P׉[^_]$ÐUWVS\$t$ l$$uEN9NrVǀ_t FF}V譪$t 1[^_]Ðڅt"jUT$貈]ML$T$ 1D$1$9$x44444444\x444444444444444444444\444xtOЈC9\$wDD$PU͈2tu hy跬ohdy覬1{N9NrVN_tFFVT$)$T$hdyF1tu蹧[^_]Ð1[^_]ÐWVS\$1S9SrS~_t C0C}#S襨$thdyʫ11jh\SVtj5\t[^_ST$\$ 1ɀ:t:.tЃ v1[AB:u} ȃ[Ð9%[$Id: rcskeys.c,v 5.2 1991/08/19 03:13:55 eggert Exp $AuthorDateHeaderIdLockerLogRCSfileRevisionSourceState"),37?HOUWVSl$ "9u<$t<:u [^_]Ð1[^_]ÐCA8tփNu1[^_]ÐUVSu1҃<tB8uӅt4ЃKue[^US=tЃ;uh؃F}_]U=uÐSL$ T$\$̀} أ [ÐVSt$ \$T$t'Ѐ:t@8u)PRV Su[^' : can't load library 'Incompatible version. Too many libraries. No such library. Permission denied. Exec format error. Unspecified error. ) ( UWVSl$|$,=,PV>̀} ى  jh0huj9$lxjh:jh.jh+"jh=jhQ jhej̀򐐋H %t 93D$ځ%9u 9}D$T$t;jh0hujujhjd̀򐐃>L[^_]þ,=,t.jhyph|0hj>u֐1۸̀[^_]/lib/libc.so.4Jump table 4.1LJ`ibgc./usr/bin/rcs 755 0 0 172000 5316132315 11707 0ustar rootsystem d-̀\ `-:D$4 `P`[̀rCopyright 1982,1988,1989 by Walter F. Tichy Purdue CS Copyright 1990,1991 by Paul Eggert$Id: rcsbase.h,v 5.11 1991/10/07 17:32:46 eggert Exp $rcs$Id: rcs.c,v 5.12 1991/11/20 17:58:08 eggert Exp $ rcs usage: rcs -{ae}logins -Afile -{blu}[rev] -cstring -{iLU} -{nNs}name[:rev] -orange -t[file] -Vn file ...,v/missing file name after -A-L overrides -U.missing symbolic name after -nmissing symbolic name after -Nmissing revision range after -ostate missing after -sunknown option: %s%sno input file%s%s aborted file %s exists alreadyRCS file: %s can't change states in an empty treesaved in %sdone %s aborted; %s unchanged. tUWVS${xtD$4D$,D$0D$D$(D$<D$@11fD$D$$luD$D$ D$D$8PV$ky $t$8C79$UUUUUUUUUUPUUUUUU$UUUUUUUUUUUDUUUtU0Xp<UUUUD$ |$(t jb<D$(\$0|$,t jcf<\$,j~;u hyjjhظVjr=t1j0 nP@=uhh6&j@P ;uLjal@tGHTA;uPj)l@tEXU D$|$t|$u hd:D$dD$|$t|$Nh4:<D$/;uhv@Pj;uhb@PjS=|t jo:;uh@P ;uh7@P_D$;t{|$4t jt!:\$4dxXLlD6 u8|$$| jk9S@D$$|$$}h6h^8$$~C<-$hh/"8=HtKhh?t9[^_]t5Wh55h6|$ t1j`fD$D$P`fD$ff%$fD$sj|$ t@jjh@V$膴'~IuD5hK6jjh@V$F 5hbx8fl$|$ t!D$DP5p`u#fl$L+BAf-fm|$t L$ |$,t!L$, 40|$,H8|$$| L$$ $|$(t;D$+C t t t,tu[^Ð-m option lacks revision number-m option lacks log messageUWVSl$j:U_…uh0/[^_]ÐB0׹HPR1uÉօu hPŐjc‰*ZrB =`t `P \`[^_]Ðmissing ':' after state in option -sVS\$ C t t tj:V)C t t tuD5@[^Ð:th .[^ÐC t t tj b‰rB=ht hPdh[^Ð`-' is obsolete in `-o%s'; use `:' insteadinvalid range %s %s after -oWVS|t$F t t tj:V_t :.j-V_t= |Vh/-9uIF t t t7GF t t tuG[^_Ð7F t t tt9uF t t tuGG[^_Ð9tV7h'o.F t t tuGG[^_ÐwGF t t tu[^_Ðcan't find delta for revision %sdelta number corrupted %s %s VSt$ TtZ6h-7Åu h-{8t& ( ThC3h5(30hC9u+h@$~uuR5@DqFV^{tR{8tLT" ( Tjssj5(;5T5`.C"R=0 u&hC5t_t05=0 thC9t !|$t j[^?[^WVS|$=Tt07T0~_uTXP_TuЋ5Tt-73G_uSVS_ދ^uӉ[^_ÐWVS=ttF?u rtb37_u[su>t37_tsj]ÉCl[^_Revision %s is already locked by %s. Do you want to break the lock? [ny](n): wSubject: Broken lock on %s Your lock on revision %s of file %s has been broken by %s for the following reason: State the reason for breaking the lock: (terminate with single '.' or end of file) >> %c >> /bin/mailMail may have failed.Please tell `%s' why you broke the lock.UWVS]u Shh `q,hjou1%jEhu_E}u"uj'Shu, ;P٫PS5Phu+h `hbU+ mƊ< `$u u .u t,uS*߉ uh `h+뷐EP$ju hjucth)u h(e[^_%s still locked by %s%s unlocked no lock set on revision %scan't remove branch point %scan't remove locked revision %sdeleting revision %s Revision %s doesn't exist.invalid branch range %s after -oinvalid revision range %s-%sRevisions %s-%s don't exist.UWVSD$h85|Uhjjj58ADž587=tD$584=D$=\D$$t8/t$FVUC0? tmS|$t58h!%1[^_]Ë58t$VC0)? tSݐs(=-19tQ{t3h$@t9Xut3hw$[(9uu'9tC83h'[(9ut5[^_]ÐD$$t58h!=[|$vH/t$NVUC0> t Ss(=w7t$VC0= tSݐs=t0j07t< u@(=uӋ-19tP{t3h #@t9Xut3h"[(9u9tC83hl%[(9u`m={|$u`7jVC0< tSߐs|$t=(=|$t=w(uC7t$VC0%< tSݐsh869hjjj58=-19tR{t3h!@t9Xut3hS![(9u9C83h#[(9ukh85P5889D$u!|$v6D$HP758; t587hB hjjj58<Ņg|$u78~%58u8%D$|$t5u7_8u55|h__=w(<7t$VC0!: tSݐsm(-u77} "58u7%D$|$t*u77u55|h_m(-7t$VC0a9 tSݐs-19tR{t3h@t9Xut3h[(9uu+9tC83hH![(9uN1[^_]Ðcan't delete nonexisting symbol %sno latest revision to associate with symbol %sWVS=l?u[ޅt;w3z_t ދ[ut9u[}[^rwh `8t)1h8P`Mt058^R/PÅuwh3 XtwwS  7[^_ÐNo locks are set.can't unlock an empty treecan't unlock nonexisting revision %s%s locked can't lock an empty treeUWVS=P==D$Pj΃tB0Ӊ\$|$C0V_u63臅P_t+3Vu3Vhu zߋ[ut/C0hKOC@ L$ >Vh-D$0h\hH!hZ!j=X.h87@K hjjj58G7D$582$u&58D$ 0E3t7hu!D$0\$l$C0Vu_u63'Pa_t+3VNu3Vhu K݋[ut/C0h<KMC@ L$ VhY=Tt7u=Ltg=t5[^_]Ð=t/5|*0h![^_]Ðh![^_]Ðcan't lock nonexisting revision %sSh8t$ UItvhjjj58`5ÅtW580$u)583h1t58h$%[S"|3h![ÐS\tDh83Ht)hjjj584t SKPH[ u[Ðcan't set state of nonexisting revision %s to %sVSt$h8t$8Ht`hjjj58C4ÅtA58/$u,583K0tV58h% [^Ðs[^Ðdiff failed-an/usr/bin/diffWVS\$1@8js8=tgj}hW_ƅuWjs9SuVfVjs9Sujjjf hd=tbjj5Wh&h&SjS} h&)j5(Spp0u&[^_Ðj5(5pp0L&[^_ÐDo you really want to delete all revisions? [ny](n): No revision deleted=tc 9H(u H(ÐPЋRt 9 u=t Ð9u RPËRPÐ=u?=u6h'j\u#h(t@8@(uË Ð$Id: rcslex.c,v 5.11 1991/11/03 03:30:44 eggert Exp $Unknown phrases like `%s ...;' are in the RCS file. u5th.)ÐJyH=hT\<jh蕋hH9HrP_thP@`}5hÐunknown character `%c'UWVS5T=h `L$L$ S 9r=$*t+**,,*.**.**.t$hH*R<O9OrW_tGD$G D$|$} W3PN9NrD$PVL_VD$%FV - L$D$EEO9OrWJ_tGD$G D$|$} Wt:N9NrD$PV_VD$%F} VML$ tu-D$EE9l$[D$PhBE=\t{=1Ҁ?t C;uй14t3Wv_t's,搐j$162$202626262|262$262$2$2T3RhH* <N9NrV_t FFKVT$ T$59|$wt$t$赃NjN9NrVF_tFF}VT$ T$ЈG t@t 뙐<됋N9NrV_tFF}VT$5 T$@}9|$wt$t$@G(N9NrV_tFF}VT$T$< uh<9|$wt$t$T$苂NjT$ЈGN9NrV_t FF}VT$]T$ tt %<N9NrV_u붐 l$,@N9NrV~_tFF}VT$T$EtE9t}u; t/| }#`t$,>t0 G\$,99|$wt$t$T$9NjT$ CG9r`1+D$ PD$$P[^_]ÐWVST=hO9OrW~_tG0G} Wt8K9KrPS_SȈ%C} S t @t낐<uO9OrW_tG0G} W=t8K9KrPSZ_SȈ%C} S@5`[^_ÐWVS `5hN9NrVZ_tFF} V t @t R<HN9NrV_tFF} VY@t `[^_ÐO9OrPWj_W؈%G=W/UWVST=h|$L$$)y|$L$y9yrt$W_tL$A0A} t$t9{9{rPS_S%C} Sa t @t<L$y9yrt$_tL$A0A} t$t9{9{rPS_S%C} S@t)5`L$$9|$)l$D$T$[^_]Ð9l$uD$Pt$(l}ʼnȈEEinvalid character %c in identifier `%s'identifier `%s' doesn't start with letterVSL$ \$ tulA‹ tttt߄tot8tg tb t] tXАA t t tt8uVPh8A t t tt8uVh9[^Ðjt$9Ð`%s' is not a regular file@WVS|$PjWn_ƅ} 1[^_@Ë\$Xu\$ SVq_tWtfCf%f=t*Wh :V_< `1[^_@t$TVR_uW%[^_@Ðoutput error=th:unexpected end of fileh:input errorh$;D$$ t h$;ÐD$$ t"=th:\ÐD$tPR_t h$;9ÐD$t0P._t#=t%h:ÐS\$tP_t h$;[S\$t1P_t$=th:[ËT$$ t h$;t$t h:Ðjjt$ 3_ t h$;BÐh `r_t=uh:Ðu `P4_t=uh:Ð %s aborted %s error: t$5< `Ðu `P_t=uh:hhh!=h ` HT$< `t$@_h `k_t =uh:Ðt$5< `u `P_t=uh:hh!=h `H_ T$< `t$_hh=h `_ u `P_t=uh:0hh!=h ` HD$Pt$h `| h `j h `$_t=uh:Ð%s: %s:%lu: u `P_t=uh:t5<5hh$?h `_D$Pt$h ` hh=h `_ 3u `PH_t=uh:hh!=h `x_ D$Pt$h `6 hh=h `K_ %s warning: u `P_t=uh:PhhH@h ` D$Pt$h ` h `j h `J_t=uh:Ðredefinition of -%c optiont$hA.Ð=uu `P_t =uh:oD$Pt$h ` h `_t=uh:(ÐSD$\$ K9Kr%PS跾_S%C}+$ t%=th:[Ðt$t$k_}$=th:Ðt$ t$ t$ _ }$=trh:HÐD$ Pt$ t$ _ }#=t1h:Ð$Id: rcssyn.c,v 5.8 1991/08/19 03:13:55 eggert Exp $desclogtextaccessauthorbranchbranchescommentdateexpandheadlocksnextstatestrictsymbolsmissing ';' after '%s'%s isn't a delta numbermissing ':' in symbolic name definitionmissing number in symbolic name definitionmissing ':' in lockmissing number in lockunknown expand mode %.*sWVShQCbÅt3$t3hCj uhQChvCh-Ct1Åtj uh-ChvCEhCƅtj>-0X␐j ;uhChvChnC?ƅtIj u hC;Åu hCj ,0Xxj uhnChvCahVCƅtij ru hC)Åt3$t3hCu h Dj ,0Xx뎐j uhVChvChgCtj uhgChvC8h=CtE=0uhr48kj puh=ChvC"$hJC`tu=0uND$ D$|$ WÉVS$} SVh#DWjnj uhJChvChC2[^_ÐkvkvlkvoGGGGGWT$0׹HPR_ÐUWVSl$\$G=Gt.2٨u<u-G[^_]Ð:uԸ[^_]Ð\0 t |0t#&\5t5*WVSÅt3O $t 3hCP߅u1[^_\jj hEC G\jj h&Cn Gjj haCZ Gh4CwkÅt3 $t3hCtj(pj uh4ChvCh\CÅt3M $t3hCN_(j zuh\ChvC,G GG8hCG W$[^_{utB H RuS\$hCt [Ð[Ðmissing %sWVSt$\$1V590u=t|$u VhJbj uVhvCG[^_Ð%s %s; %s; %s %s:%s; %s; %s %s %c%s%c; VSt$ =t JPhQChJVB=t"= |5h-ChJVVhCt3hKV [uhnChKV ts3h KV[uhVChKV tC03h KV~[u=thgChKV[ hKVM=8t:h=ChKV1 j5854jVhKV =$t#j@$4Gj@hJChKVV55 , V9Vrj V誳_F F } VT[^Ð %s %s %s; %s %s; %s %s; branches; %s %s; WVSt$|$~8FuJPhaCvh&CvhEC6h MW$^t0hKW [u~(t F(JPh\Ch.MWWv$v * Wv(O^tW3<[u[^_Ðunexpected EOF in diff outputrVS\$jh*NS ƅt0t$ t$ Vt$ t$ t$ jV[^ÐS1[^ÐWVS\$|$t1S9Srj@S_C@C@} St$|$tq>@u2K9Krj@S觱_C@C@} SPS9SrPFSr_S%FC} SOu|$t8|$ t1K9Krj S._C C } SS9Sr j@S_C@C@} S[^_Ð %s %s %s %c%c UWVS\$(t$,|$0l$4hCt$(hOUjVSjUj@hChOU|$8O9OrW记_tGG}W$@u2M9Mrj@U_E@E@} UM9MrPUۯ_U؈%EYUKD$P.D$PUjVtL$|$tڐO9OrW辯_tGG}'W$t|$h NW@u2M9Mrj@U _E@E@} UM9MrPU׮_U؈%E} U 7L$|$(j@hOU [^_]ÐD$@@ Ðbad diff output line: %sdiff line number too large: %s%c%cdiff output command line too longbackward insertion in diff output: %sbackward deletion in diff output: %s%s UWVS$$ T$$N9NrV׭_t FF}/V $t t h Nz[^_]Å@u{V9VrVq_t FF} V@uD$@D$D$Ph0R`|$tSj@hhRt$j|$$9w hmR؈GN9NrVլ_t FF}V $t h Nz ut<\$|$ u G t1+wt9sD$PhIR$GCЃ vЃ u G t1/Dwl9sD$PhIRGCЃ v̅uuD$Ph0R\59sD$PhIRD$u [^_]À;u[^_]ÐD$t$>0t1t$ Et$D5Ѓ v;0uC;0t1BЃ v9tr[^_]ËT$߉0tF*Gu#l$t$>tD$;?C9[^_]UWVSL$\$T$A<.uC<.uJu90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r+uʉ߉0tF*G[^_]Ð[^_]Ð[^_]Ð and state and author a date before No revision on branch %s has%s%s%s%s%s%s.revisionbranch%s %s absentUWVSt$t$\$u [^_]Åu[^_]Ðt$>tր;tD$t$>0t1t$ Et$D5Ѓ v;0uC;0t1BЃ v9trwT$߉0tF*Gu%l$t$>.uD$;.uCL$ X1[^_]ÐVSt$ \$t$V]t@8.t8u@Ku@[^RCS file emptybranch number %s too lowrevision number %s too lowRevision %s has date %s.Revision %s has author %s.Revision %s has state %s.hUWVSD$PD$T=|$ uhY T$||$|t t$|>uD$$WB<.uA:uL$$|$$0L$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r#Ή߉0tF*GD$ D$|$}qjt$ p$$v(t$ ID$Pt$|P[D$P@8.t8u@Ku@t$PhY+|$~1D$HD$Lj$\$PS PhX:|$$|$ 7t$pL$|$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r'Ή߉0tF*G_$$t$ ^uV}t;}0u E}0tD$ED$|$/Ѓ v;0u C;0t1BЃ v9T$t9T$sBߋL$0tF*Gu!l$\$}tE;MCG|H$tt$ v$?_u$$tJ|$ w$_t0jQt$ p$$v(t$ |$ t~L$|$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ru&ʉ߉0tF*G|$$t\$|5D$Pt$PXD$P@8.t8u@Ku@\$P$$uVP$t DX$u$u HXVP$$uVP$tPX$uTXVP$tD$8P$#VPV$t]XPShmX j|$ x$$D$ [^_]hÐL$|t$ A<.uC<.uJu90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r/uΉ߉0tF*GD$D$D$|$L$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ruRΉ߉0tF*Gu0j$t$ p$$v(t$ |$ tyL$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ru"ʉ߉0tF*GtKD$Pt$|PpUD$P@8.t8u@Ku@t$PhZ__|$$vQ|$tJD$HD$Lj$\$PSK PhXhX SwSj‹|$ z$$|$$v>R$$$t$4$t$8[^_]hÐ$ $t$|$ _uVt$>tÀ;>0uD$|$?0t1t$ E|$D=Ѓ v;0uC;0t1BЃ v9t 9sBDt$߉0tF*Gu%l$t$>tD$;UCO}4D$XP|$$wPt$$6hZ 1[^_]hÐ$t*|$ w$_twt$$6h4Z븃$t:|$ w$é_t GuOZPt$$6hWZw$mD$PP^Q1[^_]hÐno side branches present for %sbranch number %s too highpUWVS$D$,@D$ t$Xt$L$PL$|$ uqD$XD$\\$,K$t$ ,RD$Xt@8.t8u@Ku@t$Xhdt${P1[^_]pÐt$ $8T$,EE<.uG<.uJu}0uE}0t1EC+Ѓ v?0uG?0t1B:Ѓ v9ru0tF*G~kL$ IL$ XD$XD$\\$,$t$ QD$Xt@8.t8u@Ku@t$Xhd}TD$PD$Tt$,$t$ PD$0$XtXRhX t$t$ L$(L$,9$D$$$$t$L$(YuVt$>u ;L$90uD$t$>0t1L$ Et$D5Ѓ v;0uC;0t1BЃ v9t9sFt$߉0tF*Gu%l$L$9tD$;AC;|P$tt$(v$_u,$tL$(q$ߥ_ut$(t$$L$(I(L$(|$$$$uVP$t!DX$u$u HXVP$$uVP$tPX$uTXVP$tD$@P$VPV$t]XP$hmXD 1[^_]pÐt$ $j L$(H$$I(L$(t$$9ujL$(H$$D$([^_]pÐ$t$(.T$,tG<.uEE<.uJuG?0t1C;Ѓ v}0uE}0t1EB*Ѓ v9ruyى0tF*G}WD$XD$\\$,C$t$ LD$Xt@8.t8u@Ku@t$XhZjL$(H$$L$$q(t$($>T$,tEE<.uG<.uJuE}0t1EC+Ѓ v?0uG?0t1B:Ѓ v9rY0tF*G7D$,@9$$L$$)T$,tG<.uEE<.uJuG?0t1C;Ѓ v}0uE}0t1EB*Ѓ v9ru"ى0tF*Gt[\$,CD$PD$TS$t$ i P$XtXRhX t$D$,@9$$$L$$YuV}t;}0u E}0tD$ED$t$.Ѓ v;0u C;0t1BЃ v9T$t 9T$s>@ߋL$0tF*Gu!l$\$}tE;QCK}4D$`PL$(qGPt$(6hZ 1[^_]pÐ$t.L$$q$__tt$$vL$(1h4Z봃$t:t$$v$'_t FuOZPL$(1hWZst$$NL$ D$,$9t$,$D$$[^_]pÐjt$ t$ i Ðworking file lacks revision numberSymbolic number %s is undefined.improper revision number: %sUWVS|$jt$$fFL$ 1t?u[^_]ËT$:$u_zuYt$$Vu 1[^_]Ð8uh`n<ڐPt$$H뜐Vhn뷉L$ QT$D$l$ t_VMOG?0uGЃ v9t$wUt$$tFƊGF vOF[L$ +9t$wUt$$4FƊGF tփtуt̃t9t$wUt$$EދL$ 1t3V褝_y[u1ۅ9t$wUt$$EƊCFuG=<.u>?u)D$$u1T$ 2BÅ@SdD$F.t$hnv1[^_]ÐPjjjt$OtÐ1Ð=t(Pjjj51tÐ=t 1Ð$Id: rcsutil.c,v 5.10 1991/10/07 17:32:46 eggert Exp $out of memoryD$uP豖_u hqÐt$t$_u hqÐS\$jl_u hqP[SD$uP0_Åu hqIj_u hq0P[VS5t^6_V_ޅu[^ÐST$9t C[9uK3螑_S蕑_[Wt$|$ 0҅uR[_…u hqtRʚ__ÐWt$ |$0҅uR_Džu hq-j_…u hqB:WV_D$D$_ÐWt$蚑_…t=R0׹ЅuP芔_u hqP__Ð1_LOGNAMEUSERno password entry for userid %luW=|$h0t_…tR0׹ЅuP菓_u hqP_1uD蠐_u6%P/_u%Ph=tW5z_HangupInterruptBroken pipeQuitTerminatedCputime limit exceededFilesize limit exceeded RCS: %s. Cleaning up. RCS: Signal %d. Cleaning up. @ÁWHE8=jW_t=_=1ҍO9$vw w0wMwMwMwMwMwMwMwMwMw(wMw8wMwMwMwMwMwMwMwMw@wHwu.u&uuuuut Rhu WhvD$ PD_ T$0׹HPRj贙_ `_ signalWVS=D$ w I D$ Ky|$wWj6_ t hw|$t-D$8L$ L$jW6ǔ_ t hw~Ky[^_Ð WVS$ $ $u@\$ Vh jS_uV[^_ WPS $t[^_ ÐWVSt$\$|$v5WhjV_=twWSjV΋_9t[^_/bin/sh: not found forkwaitpid%s failedUWVS\#ʖ_…4L$)˃tYj誈_hjU_ Dž|u%jjW_ Ws_uЃtU+t_jH_hhAU荏_ Dž|u(jjW趉_ W _uЃtUS3P_=< `uDyShDy0_0׹HPRj蚖_ j hLyj艖_ j7_} hYyjD$PRߕ_ } h^y|$tL$qhfyD$[^_]Ðtoo many command argumentsPVSD$`t$\t$D$ \$hD$dD$t#~ h{QʃACDuߍD$P[^P19%.*s/%.2s/%.2s %.2s:%.2s:%sSL$\$ ʐB<.uB PB PBPBPRQ)HP{y.u = }{PS譑_$[Ð%s isn't a number%s out of range %d..%dWVS|$w=t jVtN1G\PFЃ v>t Wh |*~~jjWh| [^_ÐRCSINITUWVSl$t$h|蚈_…tAR0׹ЅuP芋_u hqP_1ۅuL$1}ڐB<  <} t < uG名uP_u hq5NjL$9ڊ<  <} tF< uC鐉ECB<  <}t"< t<\u;t JCאB뮐u[^_]Ð=u谈_fÐ=u8_fÐsetuidroot setuid not supportedÐVS==uц_ff=u謆_ff5=uׇ_fff9tNPݍ_t h`~贾W_f9t*=u!g~ftl~Pf[^ÐVS==uM_ff=u؅_ff5=u_fff9tNP _t h`~胅_f9t*=u!g~ftl~P蒿[^ÐW$jW_t=_=1ҍO9$111111111 111111111$,u.u&uuuuut Rhu WhvD$ P`_ T$0׹HPRjЏ_ |$Id: rcsgen.c,v 5.10 1991/10/07 17:32:46 eggert Exp $UWVS\$l$t$|$ 9kuGV jtPU t1[^_]Ðhd[^_]Ðjjjjs ;uut jVj jtPs\ jV1tCP t1[^_]Ðcan't find delta for revision %sdelta number corruptedUWVSt$|$l$ӫt6hW{֭Åu h:hC>t+9u'h@9R5@FV=0 u&hC5t贊_t=0 thCɬ9t ű<t# tGt/t8[^_]Ð_ [^_]ÐV& [^_]Ðj=[^_]ÐVUWVSt$T$t?JCA< uy ty t AڐI9rѐy t y ty uI9r)[^_]Ð=u"=xujc_xxÐVS< `< `$t7=u"=xuj_x=xt#ϋS9SrS|_tC0C}RSE$tC=u"=xuj諂_x=xth `j x[^WVS=,=u"=xujS_x=x?D$Pt$h `谼 < `< `$t7=u"=xuj_x=xt#ϋS9SrSz_t C0C}RS$tC=u"=xuj{_x=xth `j H < `$< `t7=u"=xuj_x=xt&ϋV9VrVz_t FF}RV=$tC=u"=xuj裀_x=xth `j p؃ t< `$4ytYu [^_ÐntNu1[^_ËD$[^_ %s%c %s %cNOTE: This is NOT the log message! descriptiont-rUWVSt$,-(=htJ|$(uC5`hChU葺(Tj?T[^_]ÐT=ht jj@hChU5u.hhhÇhχY=p>-uF0Hh҇V{_…uVjhT$P,5 L$ T$Z9ZrRT$w_T$tB8B}RT$T$$u,9t$ wD$ PhT$,ƋT$ȈF뉐R^z_t蚱+5ljt$tEO\$D$B< uz tz t BԐJ9rːz t z tz uJ9rt$)T$L$\$ j55jUY]9]rj UNv_E E } U[^_]Ðenter %s, terminated with single '.' or end of file: %s>> can't reread redirected stdin for %s; use -%s<%s>>> UWVS\$(=u"=xuj|_x xL$tt$,Shlh `d< `$tSt$(Shj11< `< `$t8=u"=xuj=|_x=xteϋM9MrU0u_t EE}SUeE$tC=u"=xuj{_x=xth `j 藵\$< `$ub|$ u4t|7.ut|7 uNA|$th `hي貵^St$4 )L$09L$ >t?NCB< uz tz t BڐJ9rѐz t z tz uJ9r|$)T$D$T$[^_]Ð$Id: rcsedit.c,v 5.11 1991/11/03 01:11:44 eggert Exp $t$ς_1҅t=< `%ډedit script ends prematurelyedit script refers to line past end of filew+D$du?=uj%h5v_du 5ÐS\$jjj$ S5Y5W[ÐUWVS|$l$5t5dtjjWSV SVV|$ jj5dv_ td-duPd t$LP3tML$D$ u뒐[^_]0ÁUWVSt$D$D$WV$$2k_ t\9uPD$PCt$|$ʐM0$>/t SV$ x돐< `D$P< `ttEu?[^_]Ð1[^_]Ð< `([^_]Ð[^_]symbolic link to non RCS filename `%s'RCS filename `%s' incompatible with suffix `%s'RCS filename `%s' ends with `%c'rwTUWVSt$h\$p=(%D$VDD$ \$9\$} 1[^_]TÐ.U4lj)T$T$Ut$U7u$UhĠ衜< `1[^_]TÐ8uPWhv Ӑ8tGC?uC*GCu;_uj_Uh1 _T$D$ ^$h$hS,g_ D$=< `|$}+ D$$PS/k_|$t$lh<U? D$ =< `|$ tm|$tfh(z5l_1t=< `%ޅt=< `t 5W蘚Shh>t$`_(u 5Q=< `D$ [^_]TÐkeepdirtempL$9 tHyhXXXXXXcan't make temporary file name `%.*s%c_%cXXXXXX'UWVSl$|$uU[^_]Ðt$Ǎ4G PSt$S7_C0C5ffSSV[d_t>uE0Pj/t$Wh[^_]ÐUWVSt$u7k_uHMy[^_]VSD$ t$f\$t P˖PV\_t [^Ðt$Ve_1҅t=< `%ډ[^Ðmultiple revisions locked by %s; please specify oneUWVSl$1t'3Ph_uu{[u܅u(1[^_]ÐPhT[^_]ÐSU|$tC@ [[^_]revision %s already locked by %sVSt$ tOC06u53&P`g_u1[^36h\讗 [^Ð[uj nF sS[^Ðsymbolic name %s already bound to %sUWVS|$t$l$tQ3Vf_u9uWsf_u {[^_]sVh 1[^_]Ë[uj É3{S[^_]ÐSb3f9%Pr[Ðrootuser %s not on the access listWVS=t@f9t2f9%Pƿu [^_Ð56f9%PPpe_t=vuVf9%PPh蟕1[^_Ð[^_Ð %s%cWVSD$|$t^}1[^_Ð5( 5(55`hCh5(G=(=Th(螒5f_1҅t=< `%ډӋ5< ` 9 tHyhHwt5VC1[^_Ð[^_Ðbreaking hard link to %ssaved in %sUWVS|$}=Hp=ht!5(5hhhif=v5h輕{fm(5=t h(BPVIW_t (WVI`_1҅t=< `%ډӋ5< ` 9 tHyh脔to5Vۑ5h-t$u7md_uMy1[^_]Ð[^_]Ðt$CX_tÐ$Id: rcskeys.c,v 5.2 1991/08/19 03:13:55 eggert Exp $AuthorDateHeaderIdLockerLogRCSfileRevisionSourceState&-29<CGOX_UWVSl$ "9u<$t<:u [^_]Ð1[^_]ÐCA8tփNu1[^_]Ð$Id: rcsmap.c,v 5.2 1991/08/19 03:13:55 eggert Exp $    $Id: rcsfnms.c,v 5.8 1991/09/24 00:28:40 eggert Exp $RCSa-- adaasm;; bat:: c * c++// cccppcxxcl;;; cmdcmfc csel; fforhhpphxxllisplspmacme.\" mlmmmsppaspl% texy# Z\`\dhlptvz~~~~pvv~~vhıhȱ˱бӱ˱ֱ˱ٱv۱v߱vTMPDIRTMPTEMP/tmp%s%cT%cXXXXXXcan't make temporary file name `%s%cT%cXXXXXX'UWVSl$TX=uLhau6hKu h5u 0߹Ѓ PǍu0Vj/Sh WY_W U_t?uVj/Sh诋z0߹ЍpNt|3/t݉-(5<1=|$?.u4|$/u D$|$.u/u@D$|$?.t͋5< N<./uHtu0T$׹Ѝ\90sF=0t5,A@_0%090r50C,,VUS1D_ /Ct$SfI_,[^_]Ð$Id: rcskeep.c,v 5.4 1991/08/19 03:13:55 eggert Exp $rclosing %c missing on keyword UWVSt$ =,t[^_] Ð1u;jh5pt ƅu5pw1[^_] ÐhhhhLhhhh1ې$r|$N9NrV:_tFF}V)u$l$t t:tD$9v؈G뜃$t:u:N9NrV:_t FF}Vt$ t 2D$PP 9$hV^ÅcjjV NVM =V Å*hVS hVj jjVj tjjVY uF=H$pjjV2V hVj N9NrV8_tFF}V)s$t1ۃ$uu8tL8t8t 8uAN9NrV8_t FFWVr$DtVrj$huVs,[^_] badly terminated keyword valueVS\$ S9SrS7_t C0C}#Sr$th>u1[^Ðt$t$SV1[^Ðtoo much white space in keyword valueUWVST$t$ l$$t!jUT$]ML$T$ 1D$1$9$pppppppppppppppppppppppppppppppptsЈC9\$whD$PUVtu h\s[^_]Ðu|$(t 1[^_]Ðhs1[^_]ÐN9NrV5_tFFVT$p$T$h6s1[^_]Ð19%s%s %s %s$UWVS|$81D$,D$0l$,O9OrWY5_t GG}#Wo$thr1jUWSjD$$D$(l$$O9OrW4_t GG}#Wo$th:r1jUWS2D$D$ hD$ PO9OrW[4_t G0G}Wn$t1-t +l$jUT$f\$L$ L$1T$$9$tOЈC9\$wDD$PU2tu h\pohp1bO9OrW2_tGGWT$m$T$h.p1u 1O9OrW~2_tG0G}Wl$t1\$,0߹҉T$|$$ҋ|$ЋL$TDPhLRt$t$(Sк wCЃ w {/uPRhS5L~>_D$PD$$PD$,P[^_]$ÐUWVS\$t$ l$$uEN9NrV[1_t FF}Vk$t 1[^_]Ðڅt"jUT$j]ML$T$ 1D$1$9$ tOЈC9\$wDD$PU2tu h\mohm1{N9NrV/_tFFVT$ j$T$h*m1tuh[^_]Ð1[^_]ÐWVS\$1S9SrSU/_t C0C}#Si$thl11jhSVtj5t[^_ST$\$ 1ɀ:t:.tЃ v1[AB:u} ȃ[Ð9%[UVS|u1҃<tB8uӅt4|ЃKue[^US=tЃ;uhL._]U=uÐSL$ T$\$̀} أ [ÐVSt$ \$T$t'Ѐ:t@8u)PRV Su[^' : can't load library 'Incompatible version. Too many libraries. No such library. Permission denied. Exec format error. Unspecified error. ) ( UWVSl$|$,=,PV>̀} ى  jhX0h\uj9$jhs:jh.jh"jhjh jhj̀򐐋H %t 93D$ځ%9u 9}D$T$t;jhX0h\ujujhsjd̀򐐃>L[^_]þ,=,t.jhph0hj>u֐1۸̀[^_]/lib/libc.so.4Jump table 4.1,;`ibgc./usr/bin/rcsdiff 755 0 0 142000 5316132315 12535 0ustar rootsystem d-̀\ `-:D$4 `P`[̀rCopyright 1982,1988,1989 by Walter F. Tichy Purdue CS Copyright 1990,1991 by Paul Eggert$Id: rcsbase.h,v 5.11 1991/10/07 17:32:46 eggert Exp $rcsdiff$Id: rcsdiff.c,v 5.10 1991/10/07 17:32:46 eggert Exp $ rcsdiff usage: rcsdiff [-q] [-rrev1 [-rrev2]] [-Vn] [diff options] file ...,v//usr/bin/difftoo many revision numberstoo many -L options-%c needs following argument%sunknown option: %s%sno input file%s/usr/bin/co-q=================================================================== RCS file: %s rno revisions present-kkvlretrieving revision %s -pco faileddiff%s -r%s %s diff%s -r%s -r%s diff failedUWVS$HD$pD$tD$hD$lD$\D$LD$TD$XD$@D$DD$H8\$P D$4@@`ǃ |$0D$dPU$ $l$dnAVиH9$ttttttttttt(((t(ttttttttttt|tttD$\|$\t |$\tL$XL$ThnRtD$@|$@u h;tC9tAC9u$uhVhtE|$0D$0iCa̹T}=8RED$DP>}|$HWND$}!huhs1AE@9t}D$08D$0M$$~A<-q$hh$s\$4 19\$0v;0щL$t$9\$0wFPD$,L$,\$4 9\$0v ABu9\$0wD$8D$<|$@!|$@u |$0|$R0׹ЅuP_u hK iPv_1uD_u6%P_u%Phki5c_HangupInterruptBroken pipeQuitTerminatedCputime limit exceededFilesize limit exceeded RCS: %s. Cleaning up. RCS: Signal %d. Cleaning up. @ÁWHE8=jWn_t=_=̹1ҍO9$<.&%16AXt Rhp WhD$ P_ T$0׹HPRj,_ _ signalWVS=D$ < I D$ Ky|$<Wj6r_ t h@d|$t-D$L$ L$jW6?_ t h@dKy[^_Ð WVS$ $ $u@\$ Vh jSr_uVa[^_ WPS $t[^_ ÐWVSt$\$|$v5WhjVv_=t`wWSjVF_9t`[^_/bin/sh: not found forkwaitpid%s failedUWVSpb7bB_…4L$)˃tYj"_hjUj_ Dž|u%jjW_ W_uЃtUb+t_j_hhAU_ Dž|u(jjW._ W_uЃtUbS3_=< `uSh_0׹HPRj_ j hj_ j_} h"bjD$PRW_ } hb|$tL$qhcD$[^_]Ðtoo many command argumentsPVSD$`t$\t$D$ \$hD$dD$t#~ hecʃACDuߍD$P[^P19%.*s/%.2s/%.2s %.2s:%.2s:%sSL$\$ ʐB<.uB PB PBPBPRQ)HP y.u =Թ}"PS%_$[Ð%s isn't a number%s out of range %d..%dWVS|$w=t jVctN1G\PFЃ v>t Wh>b~~jjWh#bԹ[^_ÐRCSINITUWVSl$t$hP_…tAR0׹ЅuP_u hK aPr_1ۅuL$1}ڐB<  <} t < uG名uP_u hK IaNjL$9ڊ<  <} tF< uC鐉ECB<  <}t"< t<\u;t JCאB뮐u[^_]Ð=u(_fÐ=u_fÐsetuidroot setuid not supportedÐVS==uI_ff=u$_ff5=uO_fff9tNPU_t h]_f9t*=u!ftPz_[^ÐVS==u_ff=uP_ff5=u{_fff9tNP_t h\_f9t*=u!ftP^[^ÐW$jW_t=_=̹1ҍO9$ .&%16AXt Rhp WhD$ P_ T$0׹HPRjH_ $Id: rcsfnms.c,v 5.8 1991/09/24 00:28:40 eggert Exp $RCSa-- adaasm;; bat:: c * c++// cccppcxxcl;;; cmdcmfc csel; fforhhpphxxllisplspmacme.\" mlmmmsppaspl% texy# :<@<DHLPTVZ^b^e^i^mpuPy}V}}V^^VpHHVVVTMPDIRTMPTEMP/tmp%s%cT%cXXXXXXcan't make temporary file name `%s%cT%cXXXXXX'UWVSl$=uLh u6hu hu 0߹Ѓ PǍu0Vj/ShW_W-_t?uVj/ShkZ<[^_]ÐVStP_Ny[^ÐUWVSйXLdȹ<.р9tB8uр:u9-<u41t4)ЉD$AC|$t|$uu_%9r5h45s_|$$t5t$8t$80|$HPt$t$$t$0jU b|$ )58t$t$8t$8T$tu [^_]À;u[^_]ÐD$t$>0t1t$ Et$D5Ѓ v;0uC;0t1BЃ v9tr[^_]ËT$߉0tF*Gu#l$t$>tD$;?C9[^_]UWVSL$\$T$A<.uC<.uJu90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r+uʉ߉0tF*G[^_]Ð[^_]Ð[^_]Ð and state and author a date before No revision on branch %s has%s%s%s%s%s%s.revisionbranch%s %s absentUWVSt$t$\$u [^_]Åu[^_]Ðt$>tր;tD$t$>0t1t$ Et$D5Ѓ v;0uC;0t1BЃ v9trwT$߉0tF*Gu%l$t$>.uD$;.uCL$ X1[^_]ÐVSt$ \$t$Vt@8.t8u@Ku@[^RCS file emptybranch number %s too lowrevision number %s too lowRevision %s has date %s.Revision %s has author %s.Revision %s has state %s.hUWVSD$PD$T=й|$ uh7u? T$||$|t t$|>uD$$WB<.uA:uL$$|$$0L$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r#Ή߉0tF*GD$ D$|$}qj^t$ p$$v(t$ ID$Pt$|PD$P@8.t8u@Ku@t$Ph7+|$~1D$HD$Lj$\$PS Ph6:|$$|$ 7t$pL$|$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r'Ή߉0tF*G_$$t$ ^u4}t;}0u E}0tD$ED$|$/Ѓ v;0u C;0t1BЃ v9T$t9T$sBߋL$0tF*Gu!l$\$}tE;MCG|H$tt$ v$C_u$$tJ|$ w$_t0jt$ p$$v(t$ |$ t~L$|$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ru&ʉ߉0tF*G|$$t\$|5D$Pt$PmD$P@8.t8u@Ku@\$P$$u4P$t @6$u$u D64P$$u4P$tL6$uP64P$tD$8P$4P4$tY6PShi6V: j |$ x$$D$ [^_]hÐL$|t$ A<.uC<.uJu90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r/uΉ߉0tF*GD$D$D$|$L$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ruRΉ߉0tF*Gu0jt$ p$$v(t$ |$ tyL$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ru"ʉ߉0tF*GtKD$Pt$|PTD$P@8.t8u@Ku@t$Ph77_|$$vQ|$tJD$HD$Lj$\$PSK Ph6h67 S[j]‹|$ z$$|$$v>R$$$t$4$t$8[^_]hÐ$ $t$|$ _u4t$>tÀ;>0uD$|$?0t1t$ E|$D=Ѓ v;0uC;0t1BЃ v9t 9sBDt$߉0tF*Gu%l$t$>tD$;UCO}4D$XP|$$wkPt$$6h8+6 1[^_]hÐ$t*|$ w$_twt$$6h08븃$t:|$ w$_t GuK8Pt$$6hS8w$mD$PPB1[^_]hÐno side branches present for %sbranch number %s too highpUWVS$D$,@D$ t$Xt$L$PL$|$ uqD$XD$\\$,K$t$ D$Xt@8.t8u@Ku@t$XhB4t$_1[^_]pÐt$ $8T$,EE<.uG<.uJu}0uE}0t1EC+Ѓ v?0uG?0t1B:Ѓ v9ru0tF*G~kL$ IL$ XD$XD$\\$,$t$ D$Xt@8.t8u@Ku@t$XhB}TD$PD$Tt$,$t$ PD$0$6t6Rh6Q3 t$t$ L$(L$,9$D$$$$t$L$(Yu4t$>u ;L$90uD$t$>0t1L$ Et$D5Ѓ v;0uC;0t1BЃ v9t9sFt$߉0tF*Gu%l$L$9tD$;AC;|P$tt$(v$_u,$tL$(q$_ut$(t$$L$(I(L$(|$$$$u4P$t!@6$u$u D64P$$u4P$tL6$uP64P$tD$@P$C4P4$tY6P$hi60 1[^_]pÐt$ $jL$(H$$I(L$(t$$9uj]L$(H$$D$([^_]pÐ$t$(.T$,tG<.uEE<.uJuG?0t1C;Ѓ v}0uE}0t1EB*Ѓ v9ruyى0tF*G}WD$XD$\\$,C$t$ D$Xt@8.t8u@Ku@t$Xh7j9L$(H$$L$$q(t$($>T$,tEE<.uG<.uJuE}0t1EC+Ѓ v?0uG?0t1B:Ѓ v9rY0tF*G7D$,@9$$L$$)T$,tG<.uEE<.uJuG?0t1C;Ѓ v}0uE}0t1EB*Ѓ v9ru"ى0tF*Gt[\$,CD$PD$TS$t$ i P$6t6Rh6- t$D$,@9$$$L$$Yu4}t;}0u E}0tD$ED$t$.Ѓ v;0u C;0t1BЃ v9T$t 9T$s>@ߋL$0tF*Gu!l$\$}tE;QCK}4D$`PL$(qPt$(6h8, 1[^_]pÐ$t.L$$q$c_tt$$vL$(1h08봃$t:t$$v$+_t FuK8PL$(1hS8st$$NL$ D$,$9t$,$D$$[^_]pÐjt$ t$ i Ðworking file lacks revision numberSymbolic number %s is undefined.improper revision number: %sUWVS|$jt$$JL$ 1t?u[^_]ËT$:$u_zuYt$$Fu 1[^_]Ð8uh\L*ڐPt$$뜐VhL*뷉L$ QT$D$l$/t_VMOG?0uGЃ v9t$wUt$$XƊGF vOF[L$ +9t$wUt$$ƊGF/tփtуt̃t9t$wUt$$ދL$ 1dt3V訿_y[u1ۅ9t$wUt$$ƊCFuG=<.u>?u)D$$u1T$ 2BÅ@SdD$F.t$hL)1[^_]ÐPjjjt$OtÐ1Ð=Xt(Pjjj5X1tÐ=йt й1Ð$Id: rcssyn.c,v 5.8 1991/08/19 03:13:55 eggert Exp $desclogtextaccessauthorbranchbranchescommentdateexpandheadlocksnextstatestrictsymbolsmissing ';' after '%s'%s isn't a delta numbermissing ':' in symbolic name definitionmissing number in symbolic name definitionmissing ':' in lockmissing number in lockunknown expand mode %.*sWVShOvRÅt3$t3h9P'йj uhOh"P'XhOt1ÅtXj uhOh"P5'hOLƅtj0X␐j +uhOh"P&hPzd/ƅtIj u hQP&+Åu hyP&j 葺0Xxj uhPh"PQ&hPƅtij bu hP&Åt3R$t3h9P%u hP%j 0Xx뎐j uhPh"P%hPȹtj uhPh"Pq%hOtE=uh b[j `uhOh"P%عhOPtu=uND$ D$|$ WÉVSع} SVhP$Wj uhOh"P$hO"[^_ÐkvkvlkvopTsTwTyT{TWT$0׹HPR_ÐUWVSl$\$T=Tt.2٨u<u-T[^_]Ð:uԸ[^_]Ð  t |0t#&5@WVSÅt3$t 3h9P@#߅u1[^_jj hO Gjj hOn Gjj h PZ GhOw[Åt3$t3h9P"tj譶pj uhOh"Pq"hPÅt3$t3h9P>"_(j juhPh"P"G GG8hOG W$[^_{utB H RuS\$hOt [Ð[Ðmissing %sWVSt$\$1V%9u=@ |$u Vh4WR!j uVh"P7![^_Ð%s %s; %s; %s %s:%s; %s; %s %s %c%s%c; VSt$ =йt йWPhOhWV2$=Xt"=Թ|5XhOhWV$VhO}#Lt3hWV# [uhPhWV# dts3hWV#[uhPhWV# tC03hWVn#[u=ȹthPhWVK# hWV=#=t:hOhWV!# j55jVhWV"=عt#j@ع4Tj@hOhWV"V55 V9Vrj V_F F } VD[^Ð %s %s %s; %s %s; %s %s; branches; %s %s; WVSt$|$~8FuWPh PvhOvhO6hYW"$^t0hWW! [u~(t F(WPhPhYW!Wv$v ۸ Wv(O^tW3<[u[^_Ðunexpected EOF in diff outputrVS\$jhZS ƅt0t$ t$ Vt$ t$ t$ jV [^ÐS1[^ÐWVS\$|$t1S9Srj@S>_C@C@} St$|$tq>@u2K9Krj@S_C@C@} S@S9SrPFSƤ_S%FC} S Ou|$t8|$ t1K9Krj S肤_C C } SS9Sr j@SQ_C@C@} S[^_Ð %s %s %s %c%c UWVS\$(t$,|$0l$4hOt$(hd\UjVSjUj@hOhm\Uq|$8O9OrW_tGG}W$@u2M9Mrj@Uc_E@E@} UM9MrPU/_U؈%EYUoKD$P.D$PUjVtL$|$tڐO9OrW_tGG}'W$t|$hZG@u2M9Mrj@U__E@E@} UM9MrPU+_U؈%E} Uo 7L$|$(j@ht\U [^_]ÐD$@@ Ðbad diff output line: %sdiff line number too large: %s%c%cdiff output command line too longbackward insertion in diff output: %sbackward deletion in diff output: %s%s UWVS$$ T$$N9NrV+_t FF}/V$t t hZj[^_]Å@u{V9VrVŠ_t FF} V@uD$@D$D$Ph^|$tSj@h_t$j|$$9w h_؈GN9NrV)_t FF}V$t hZj ut\$|$ u G t1+wt9sD$Ph^GCЃ vЃ u G t1/Dwl9sD$Ph^GCЃ v̅uuD$Ph^\59sD$Ph^D$$kkkkkkklkkkkklRhc N9NrV_t FFKVT$ T$59|$wt$t$NjN9NrV誔_tFF}VT$ T$ЈG t@t 뙐됋N9NrVR_tFF}VT$5 T$@}9|$wt$t$B@G(N9NrV_tFF}VT$T$|$4 |Y 9_ u,|$4|Y9_u|$4zI9OnL$2[^_] ÐUTC is not available; perhaps TZ is not set?U`=Թ}h`URЃu hÐ%.2d.%.2d.%.2d.%.2d.%.2d.%.2dL$ $`=Թ}h`RЃ…u h2rrr B@PBzc~lPhht$(Ê_ can't parse date/time: %sbad date/time: %s(WVSt$8|$ W\$SV~ u Vht$ SuVhD$ `=Թ}h`WЃ…u h2rrr B@PBzc~lPhht$X_ [^_(ÐHVST$Xu 1[^HÐD$0PRIÍD$Pt$VS u ShBt$VuSh#0,h,t$X_[^HÐ$Id: partime.c,v 5.6 1991/08/19 03:13:55 eggert Exp $januaryfebruarymarchaprilmayjunejulyaugustseptemberoctobernovemberdecembersundaymondaytuesdaywednesdaythursdayfridaysaturdaygmtutcutcutnzstjstkstisteetcetmetwetnstastestcstmstpstaksthasthstsstnzdtkdtbstndtadtedtcdtmdtpdtakdthadtltdstddstampmnoonmidnightń̄ք ބ   )-1480=AEIMQUY]a,ehimqvX{X0,hX<xą Ʌ/-.DUWVS1ۋT$\BBB BBBBD$$D$(D$0D$LD$H|$X|$DD$DD$ t$ ux|$Ps|$$|t$$t$`!TT$\z}BL$0}1Ƀ|$(|L$D$()ȋ|$`ًT$` [^_]DÐ|$ND$Ph@ȸ9$D(PL$\DL$\8L$0/jD$4P4@ ŠD$P@$tj|$8u{\$@` oT$4T$:Ѓ w\ؿdӃ;Kt$@D$)L$|$D$x+uۉ\$,݋T$T$DD$H|$<|$Lt$PL$(L$$UQ Wt$DЃ |$N8|$H-\$P` FЃ  ؿdӃ;L$PșD$)L$|$>+uۉ\$,D$,D$(Xl$P|$HuEdщQD$`D$ t$ 6D$UD$`P|$HT$\z}z|$L:uPdӉQD$`D$ t$ D$SD$`PO|$L,A|$L/6t$4D$8T$LT$tD$4Ѓ D$@@$|$L:bD$|$.D$\$T$8T$Lu{8T$Mt]|$D|$4D$HD$8T$LT$<|$P|$@D$8D$4P'D$t|$>uD$@xT$\z }Iz=D$8D$Mu>t T$\r|$\w |%t D$\p T$\r} D$AT$\zz z}vq|$D|$4D$HD$8T$LT$<|$P|$@D$4P<D$u|$@t51[^_]DÀ|$>tD$4Ѓ ]D$@@$LUD$` PQEPD$`P=ŔxUD$`P6냐UD$`Pit$ u|$P%[^_]DÐ|$N7|$HuZL$PȿdQD$`D$ t$ D$L$PșQt$`D$tv|$Ht$PD$`P`|$L:uBt$ ;|$N|$H~t$Pt$`fD$8} T$1ÐÐT$L$B(|# ~1Ð uBu0B *z܃:ׅ| uJu ttÐUWVSl$Uu 1[^_]Ð}} t[u?+t?-uGNNxaE DЉD$GȻ 9E u9L$}E 1[^_]ÐT$U NyhԅuW E tɸ[^_]ÐUWVS\$3s3SS C CCC ^i19$ؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑؑ{u3r{u 3K cKC[^_]ÐC{u'AЃ wCC F9s8~-t~+u, C%AЃ C 9tKKC[^_]ÐFC[^_]ÃUWVS|$ 1ft$\$~/T$+D$AFtuT$̀} ى  jhL0hPuj9$xԣjhg:jh~.jh"jhjh jh͢j̀򐐋H %t 93D$ځ%9u 9}D$T$t;jhL0hPujujhgjd̀򐐃>L[^_]þ,=,t.jhph0hj>u֐1۸̀[^_]/lib/libc.so.4Jump table 4.1 /`ibgc./usr/bin/rcsmerge 755 0 0 122000 5316132315 12722 0ustar rootsystem d胉-̀\ `-:D$4 `2P`[̀r/usr/bin/coCopyright 1982,1988,1989 by Walter F. Tichy Purdue CS Copyright 1990,1991 by Paul Eggert$Id: rcsbase.h,v 5.11 1991/10/07 17:32:46 eggert Exp $rcsmerge$Id: rcsmerge.c,v 5.7 1991/11/20 17:58:09 eggert Exp $ rcsmerge usage: rcsmerge -rrev1 [-rrev2] [-p] [-Vn] file-q,v/too many revision numbersunknown option: %s%sno input file%sno base revision number giventoo many argumentsRCS file: %s rno revisions presentretrieving revision %s -pco failed; result to stdoutMerging differences between %s and %s into %s%s 8UWVSt$L\$PD$4D$8D$,D$0D$D$D$D$VVؘYD$(PSVt Ƌ\$(*B"9$D$ l:te|$uT$X|$u T$Kh]rؘ4+U';GPM}h3hwErN~B<-hhr|$u h rjjh SVP Su{t hjr5Xh/sjh5ܘl D$ |$ u 5ܘoO=pu h|qD$8uupD$t$ D$0Pt$ D D$$Pjjjt$<>0D$|$t D$8uupD$t$ D$0Pt$$GD BD$$Pjjjt$Wju 0Ņt(u=luhMn tjhcL$H1_ƅu T$D2kjheWh D$|$u WkVt$*t$FiVai| t t _Ny[^_]($Id: rcsutil.c,v 5.10 1991/10/07 17:32:46 eggert Exp $out of memoryD$uP=_u h7 lÐt$t${`u h7 lÐS\$j_u h7 lXPX[SD$uP_Åu h7 ]lj_u h7 DlXPX[VS5Xt^6v_Vm_ޅuX[^ÐST$XX9t C[9uK3*_S!_[Wt$|$ 0҅uR_…u h7 kRV`_ÐWt$ |$0҅uR_Džu h7 Akj_…u h7 &kXBX:W`D$D$_ÐWt$&_…t=R0׹ЅuP_u h7 jP`_Ð1_LOGNAMEUSERno password entry for userid %luW=8|$h _…tR0׹ЅuP_u h7 iP`18uD,_8u6%P_u%Ph ki858c8_HangupInterruptBroken pipeQuitTerminatedCputime limit exceededFilesize limit exceeded RCS: %s. Cleaning up. RCS: Signal %d. Cleaning up. `@`ÁW`H``E\8=\jW_`t=\_=l1ҍO9$( . &  " - D t Rh\ Whu D$ P_ T$0׹HPRj@` _ signalWVS=<<D$ ( I D$ Ky|$(Wj6_ t h,d|$t-D$L$ L$jW6S_ t h,dKy[^_Ð WVS$ $ $u@\$ Vh jS_uVa[^_ WPS $t[^_ ÐWVSt$\$|$v5WhjV_=t`wWSjVZ_9t`[^_/bin/sh: not found forkwaitpid%s failedUWVSpb7bV_…4L$)˃tYj6_hjU~_ Dž|u%jjW_ W_uЃtUb+t_j_hhAU_ Dž|u(jjWB_ W_uЃtUbS3_=< `uSh_0׹HPRj&_ j hj_ j_} h"bjD$PRk_ } hb|$tL$qhcD$[^_]Ðtoo many command argumentsPVSD$`t$\t$D$ \$hD$dD$t#~ hecʃACDuߍD$P[^P19%.*s/%.2s/%.2s %.2s:%.2s:%sSL$\$ ʐB<.uB PB PBPBPRQ)HP y.u =t}PS9_$[Ð%s isn't a number%s out of range %d..%dWVS|$w=@t jVc@tN1G\PFЃ v>t Wh>b~~jjWh#bt[^_ÐRCSINITUWVSl$t$h<&_…tAR0׹ЅuP_u h7 aP_1ۅuL$1}ڐB<  <} t < uG名uP_u h7 IaNjL$9ڊ<  <} tF< uC鐉ECB<  <}t"< t<\u;t JCאB뮐u[^_]Ð=HuH<_fDDÐ=PuP_fLLÐsetuidroot setuid not supporteddÐVS=d=PuP]_fLfL=PuP8_fLf5L=HuHc_fDfDf9tNPi_t h]_f9t*=Tu!TftPz_[^ÐVS=d=HuH_fDfD=PuPd_fLf5L=HuH_fDfDf9tNP_t h\_f9t*=Tu!TftP^[^ÐW$jW_`t=\_=l1ҍO9$ px . &  " - D t Rh\ Whu D$ P_ T$0׹HPRj\_ $Id: rcsfnms.c,v 5.8 1991/09/24 00:28:40 eggert Exp $RCSa-- adaasm;; bat:: c * c++// cccppcxxcl;;; cmdcmfc csel; fforhhpphxxllisplspmacme.\" mlmmmsppaspl% texy# &(,(048<@BFJNJQJUJY\a<eilBoruiwi{B}JJB\44rBBBTMPDIRTMPTEMP/tmp%s%cT%cXXXXXXcan't make temporary file name `%s%cT%cXXXXXX'UWVSl$=huLh hu6hhu hhu hh0߹Ѓ PǍu0Vj/ShW_WA_t?uVj/ShkZ<[^_]ÐVStP_Ny[^ÐUWVSpHhܘ.р9tB8uр:u9-ܘu 1t4)ЉD$AC|$t|$uu<,t҃Fċ<0щHC[^_]ÐVS\$ t$9ss6{t3_Cc9srs[^S\$T$ 9SsP{u,9SsEC9Ss c9Srs[ÐKMC9rP3[ËD$xt 0_ÐVST$ D$ƅtP2Pzt 2_ ؉[^WVS\$|$sV9SsLu*9SsCC9Ss c9SrsKMC9rP3 K[^_ÐUWVS\$l$;t0;Ѝp109CsN{u*9CsCC9Cs c9Crs\KMS9rR3cUP_[^_]ÐWVS\$t$09{s6{t3T_Cc9{rsV3_[^_ËD$ Bt /uÐS\$؉ڐ Bt /u)[ÃUWVS0|$HD$t$Ɖt$ؘڐtu [^_]À;u[^_]ÐD$t$>0t1t$ Et$D5Ѓ v;0uC;0t1BЃ v9tr[^_]ËT$߉0tF*Gu#l$t$>tD$;?C9[^_]UWVSL$\$T$A<.uC<.uJu90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r+uʉ߉0tF*G[^_]Ð[^_]Ð[^_]Ð and state and author a date before No revision on branch %s has%s%s%s%s%s%s.revisionbranch%s %s absentUWVSt$t$\$u [^_]Åu[^_]Ðt$>tր;tD$t$>0t1t$ Et$D5Ѓ v;0uC;0t1BЃ v9trwT$߉0tF*Gu%l$t$>.uD$;.uCL$ X1[^_]ÐVSt$ \$t$Vt@8.t8u@Ku@[^RCS file emptybranch number %s too lowrevision number %s too lowRevision %s has date %s.Revision %s has author %s.Revision %s has state %s.hUWVSD$PD$T=p|$ uh4u? T$||$|t t$|>uD$$WB<.uA:uL$$|$$0L$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r#Ή߉0tF*GD$ D$|$}qj^t$ p$$v(t$ ID$Pt$|PD$P@8.t8u@Ku@t$Ph4+|$~1D$HD$Lj$\$PS Ph3:|$$|$ 7t$pL$|$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r'Ή߉0tF*G_$$t$ ^u1}t;}0u E}0tD$ED$|$/Ѓ v;0u C;0t1BЃ v9T$t9T$sBߋL$0tF*Gu!l$\$}tE;MCG|H$tt$ v$W_u$$tJ|$ w$3_t0jt$ p$$v(t$ |$ t~L$|$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ru&ʉ߉0tF*G|$$t\$|5D$Pt$PmD$P@8.t8u@Ku@\$P$$u1P$t ,3$u$u 031P$$u1P$t83$u<31P$tD$8P$1P1$tE3PShU3V: j |$ x$$D$ [^_]hÐL$|t$ A<.uC<.uJu90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r/uΉ߉0tF*GD$D$D$|$L$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ruRΉ߉0tF*Gu0jt$ p$$v(t$ |$ tyL$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ru"ʉ߉0tF*GtKD$Pt$|PTD$P@8.t8u@Ku@t$Ph47_|$$vQ|$tJD$HD$Lj$\$PSK Ph3h37 S[j]‹|$ z$$|$$v>R$$$t$4$t$8[^_]hÐ$ $t$|$ _u1t$>tÀ;>0uD$|$?0t1t$ E|$D=Ѓ v;0uC;0t1BЃ v9t 9sBDt$߉0tF*Gu%l$t$>tD$;UCO}4D$XP|$$wkPt$$6h5+6 1[^_]hÐ$t*|$ w$_twt$$6h5븃$t:|$ w$_t Gu75Pt$$6h?5w$mD$PPB1[^_]hÐno side branches present for %sbranch number %s too highpUWVS$D$,@D$ t$Xt$L$PL$|$ uqD$XD$\\$,K$t$ D$Xt@8.t8u@Ku@t$Xh?4t$_1[^_]pÐt$ $8T$,EE<.uG<.uJu}0uE}0t1EC+Ѓ v?0uG?0t1B:Ѓ v9ru0tF*G~kL$ IL$ XD$XD$\\$,$t$ D$Xt@8.t8u@Ku@t$Xh?}TD$PD$Tt$,$t$ PD$0$3t3Rh3Q3 t$t$ L$(L$,9$D$$$$t$L$(Yu1t$>u ;L$90uD$t$>0t1L$ Et$D5Ѓ v;0uC;0t1BЃ v9t9sFt$߉0tF*Gu%l$L$9tD$;AC;|P$tt$(v$_u,$tL$(q$_ut$(t$$L$(I(L$(|$$$$u1P$t!,3$u$u 031P$$u1P$t83$u<31P$tD$@P$C1P1$tE3P$hU30 1[^_]pÐt$ $jL$(H$$I(L$(t$$9uj]L$(H$$D$([^_]pÐ$t$(.T$,tG<.uEE<.uJuG?0t1C;Ѓ v}0uE}0t1EB*Ѓ v9ruyى0tF*G}WD$XD$\\$,C$t$ D$Xt@8.t8u@Ku@t$Xh4j9L$(H$$L$$q(t$($>T$,tEE<.uG<.uJuE}0t1EC+Ѓ v?0uG?0t1B:Ѓ v9rY0tF*G7D$,@9$$L$$)T$,tG<.uEE<.uJuG?0t1C;Ѓ v}0uE}0t1EB*Ѓ v9ru"ى0tF*Gt[\$,CD$PD$TS$t$ i P$3t3Rh3- t$D$,@9$$$L$$Yu1}t;}0u E}0tD$ED$t$.Ѓ v;0u C;0t1BЃ v9T$t 9T$s>@ߋL$0tF*Gu!l$\$}tE;QCK}4D$`PL$(qPt$(6h5, 1[^_]pÐ$t.L$$q$w_tt$$vL$(1h5봃$t:t$$v$?_t Fu75PL$(1h?5st$$NL$ D$,$9t$,$D$$[^_]pÐjt$ t$ i Ðworking file lacks revision numberSymbolic number %s is undefined.improper revision number: %sUWVS|$jt$$JL$ 1t?u[^_]ËT$:$u_zuYt$$/u 1[^_]Ð\8uhHI*ڐPt$$뜐VhkI*뷉L$ QT$D$l$,t_VMOG?0uGЃ v9t$wUt$$XƊGF vOF[L$ +9t$wUt$$ƊGF,tփtуt̃t9t$wUt$$ދL$ 1t3V_y[u1ۅ9t$wUt$$ƊCFuG=<.u>?u)D$$u1T$ 2BÅ@SdD$F.t$hI)1[^_]ÐPjjjt$OtÐ1Ð=t(Pjjj51tÐ=pt p1Ð$Id: rcssyn.c,v 5.8 1991/08/19 03:13:55 eggert Exp $desclogtextaccessauthorbranchbranchescommentdateexpandheadlocksnextstatestrictsymbolsmissing ';' after '%s'%s isn't a delta numbermissing ':' in symbolic name definitionmissing number in symbolic name definitionmissing ':' in lockmissing number in lockunknown expand mode %.*sWVSThLvRÅt3$t3h%M'pj uhLhM'hLt1Åtj uhLhM5'hLƅtj0X␐j +uhLhM&hMz/ƅtIj u h=M&+Åu heM&j 葺0Xxj uhMhMQ&hLHƅtij bu hM&Åt3R$t3h%M%u hM%j 0Xx뎐j uhLhM%hLhtj uhLhMq%hLtE=uhb[j `uhLhM%xhLPtu=uND$ D$|$ WÉVSx} SVhM$Wj uhLhM$hL"[^_Ðkvkvlkvo\Q_QcQeQgQWT$0׹HPR_ÐUWVSl$\$lQ=lQt.2٨u<u-lQ[^_]Ð:uԸ[^_]Ð  t |0t#&5WVSÅt3$t 3h%M@#߅u1[^_jj hL Gjj hLn Gjj hLZ GhLw[Åt3$t3h%M"tj譶pj uhLhMq"hLÅt3$t3h%M>"_(j juhLhM"G GG8hLG W$T[^_{uHtB H RuS\$hLt [Ð[Ðmissing %sWVSt$\$1V%9u= |$u Vh TR!j uVhM7![^_Ð%s %s; %s; %s %s:%s; %s; %s %s %c%s%c; VSt$ =pt pTPhLhTV2$=t"=t|5hLhTV$VhL}#t3hTV# [uhMhTV# ts3hTV#[uhLhTV# HtC03hTVn#[u=hthLhTVK# hTV=#=t:hLhTV!# j55jVhTV"=xt#j@x4lQj@hLhTV"V55 V9Vrj V_F F } VD[^Ð %s %s %s; %s %s; %s %s; branches; %s %s; WVSt$|$~8FuTPhLvhLvhL6hVW"$^t0hTW! [u~(t F(TPhLhVW!Wv$v ۸ Wv(O^tW3<[u[^_Ðunexpected EOF in diff outputrVS\$jhWS ƅt0t$ t$ Vt$ t$ t$ jV [^ÐS1[^ÐWVS\$|$t1S9Srj@SR_C@C@} St$|$tq>@u2K9Krj@S_C@C@} S@S9SrPFSڧ_S%FC} S Ou|$t8|$ t1K9Krj S薧_C C } SS9Sr j@Se_C@C@} S[^_Ð %s %s %s %c%c UWVS\$(t$,|$0l$4hLt$(hPYUjVSjUj@hLhYYUq|$8O9OrW_tGG}W$@u2M9Mrj@Uw_E@E@} UM9MrPUC_U؈%EYUoKD$P.D$PUjVtL$|$tڐO9OrW&_tGG}'W$t|$hWG@u2M9Mrj@Us_E@E@} UM9MrPU?_U؈%E} Uo 7L$|$(j@h`YU [^_]ÐD$@@ Ðbad diff output line: %sdiff line number too large: %s%c%cdiff output command line too longbackward insertion in diff output: %sbackward deletion in diff output: %s%s UWVS$$ T$$N9NrV?_t FF}/V$t t hWj[^_]Å@u{V9VrV٣_t FF} V@uD$@D$D$Ph[|$tSj@h\t$j|$$9w h\؈GN9NrV=_t FF}V$t hWj ut\$|$ u G t1+wt9sD$Ph[GCЃ vЃ u G t1/Dwl9sD$Ph[GCЃ v̅uuD$Ph[\59sD$Ph[D$_tGD$G D$|$} Wt:N9NrD$PV蜜_VD$%F} V L$,tt tu+D$EE9l$QD$PhȐ趹8E5Ȑ] O9OrWJ_tGD$G D$|$} Wt:N9NrD$PV訛_VD$%F} V L$ [^_]ÐWVS=5Ԙ,tt=1[^_ÐK9KrSt_t C8C}S1 $t [^_ÐtN9NrPV̚_VȈ%F[V MD$9t1ÐÐ= u/5t$_u51Ðmissing '%s' keywordS\$= u*5S蒧_u5ģP[ÐShLfmissing string after '%s' keywordS\$= u*5S*_u5\ShLf=t Shf[ÐS= t1[Ð[ÐS= t1[ÐĐ[ÐUWVS= ut$,5艦_u11؉[^_]Ð̘ lu̘5h_5ԘD$ D$$5\$$S85V0|$ H|$ L$ L$$L$L$L$\$9|$wt$t$T$NjT$ЈG,K 9r>$xhhhhhhhihhhhhiRh` N9NrV_t FFKVT$ T$59|$wt$t$NjN9NrV辗_tFF}VT$ T$ЈG t@t 뙐됋N9NrVf_tFF}VT$5 T$@}9|$wt$t$B@G(N9NrV_tFF}VT$T$<,uh9|$wt$t$T$ϳNjT$ЈGN9NrV苖_t FF}VT$]T$,tt %N9NrV4_u붐,l$,@N9NrV_tFF}VT$T$EtE9t}u;,t/| }#t$,t G\$,99|$wt$t$T$}NjT$ CG9r1+D$ PD$$P[^_]ÐWVS=ԘO9OrW_tG0G} Wt8K9KrPS^_SȈ%C} S t @t낐uO9OrWj_tG0G} W=t8K9KrPSғ_SȈ%C} S@5[^_ÐWVS `5ԘN9NrVғ_tFF} V t @t RHN9NrV膓_tFF} VY@t [^_ÐO9OrPW_W؈%G=W/UWVS=Ԙ|$L$$)y|$L$y9yrt$ϒ_tL$A0A} t$t9{9{rPS3_S%C} Sa t @tL$y9yrt$3_tL$A0A} t$t9{9{rPS藑_S%C} S@t)5L$$9|$)l$D$T$[^_]Ð9l$uD$Pt$(谮ʼnȈEEinvalid character %c in identifier `%s'identifier `%s' doesn't start with letterVSL$ \$,tulA‹,tttt߄tot8tg tb t] tXАA t t tt8uVPhtoA t t tt8uVho[^Ðjt$9Ð`%s' is not a regular file@WVS|$PjW_ƅ} 1[^_@Ë\$Xu\$ SV_tWtfCf%f=t*WhpV:_< `1[^_@t$TVʒ_uW%[^_@Ðoutput error=Иt肕ИhLqunexpected end of filehqinput errorhqD$$ t hqÐD$$ t"=ИtИhLq\ÐD$tPʑ_t hq9ÐD$t0P覑_t#=Иt蕔ИhLqÐS\$tPg_t hq[S\$t1P;_t$=Иt*ИhLq[ËT$$ t hqt$t hqÐjjt$ 諑_ t hqBÐh `_t=ИuИhLqÐdu `P謐_t=ИuИhLqÐ %s aborted %s error: t$5< `Ðdu `PD_t=ИuИhLqhhhsh ` T$< `t$踕_h `_t =ИuИhLqÐt$5< `du `P萏_t=ИuИhLqhhsh `_ T$< `t$ _hhsh `蓏_ du `P _t=ИuИhLq0hhsh ` D$Pt$h `| h `j h `蜎_t=ИuИhLqÐ%s: %s:%lu: du `PP_t=ИuИhLqt55Xhhuh `t_D$Pt$h ` hhsh `G_ 裐du `P_t=ИuИhLqhhsh `_ D$Pt$h `6 hhsh `Í_ %s warning: du `P,_t=ИuИhLqPhhvh ` D$Pt$h ` h `j h `Œ_t=ИuИhLqÐredefinition of -%c optiont$hw.Ð=ludu `PK_t =ИuИhLqoD$Pt$h ` h `_t=ИuИhLq(ÐSD$\$ K9Kr%PS/_S%C}+$ t%=Иt_ИhLq[Ðt$t$_}$=Иt"ИhLqÐt$ t$ t$ c_ }$=ИtИhLqHÐD$ Pt$ t$ "_ }#=Иt衍ИhLqÐ$Id: rcskeep.c,v 5.4 1991/08/19 03:13:55 eggert Exp $rclosing %c missing on keyword UWVSt$ =t[^_] Ð1u;jhy5ܘ ƅu5ܘ1[^_] Ðhyhhyhhyh\ԤhyhL¤1ې$r|$N9NrV^_tFF}V$l$t t:tD$9v؈G뜃$t:u:N9NrV_t FF}V$ t 2D$PD P 9$`{{{{{L|L|L|X|L|d|hV^ÅcjjV NVM =V Å*hVS hLVj jjVj tjjVY uF=$pjjV2V hLVj N9NrV^_tFF}V$t1ۃ$uu8t8t\8t L8uAN9NrV_t FFWV$DtVj$hyV[^_] badly terminated keyword valueVS\$ S9SrSL_t C0C}#S $thh}.1[^Ðt$t$SV1[^Ðtoo much white space in keyword valueUWVST$t$ l$$t!jUT$͞]ML$T$ 1D$1$9$t~l0l0TtsЈC9\$whD$PUVtu h}[^_]Ðu|$(t 1[^_]Ðhh}1[^_]ÐN9NrVV_tFFVT$ $T$hh}&1[^_]Ð19%s%s %s %s$UWVS|$81D$,D$0l$,O9OrW_t GG}#W}$thh}1jUWSjD$$D$(l$$O9OrWI_t GG}#W$thh}*1jUWS2D$D$ hyD$ PO9OrW_t G0G}W$t1-t +l$jUT$蚛\$L$ L$1T$$9$x44444444\x444444444444444444444\444xtOЈC9\$wDD$PU轛2tu h}ohh}~1bO9OrWN~_tGGWT$$T$hh}1u 1O9OrW}_tG0G}W$t1\$,0߹҉T$|$$ҋ|$ЋL$TDPh膙t$t$(Sкy wCЃ w {/uRh5_D$PݙD$$PЙD$,PÙ[^_]$ÐUWVS\$t$ l$$uEN9NrV|_t FF}V$t 1[^_]Ðڅt"jUT$螘]ML$T$ 1D$1$9$|88888888`|888888888888888888888`888|tOЈC9\$wDD$PU蹘2tu h}ohh}z1{N9NrVJ{_tFFVT$$T$hh}1tu[^_]Ð1[^_]ÐWVS\$1S9SrSz_t C0C}#Sy$thh}11jh\SVtj5\t[^_ST$\$ 1ɀ:t:.tЃ v1[AB:u} ȃ[Ð9%[$Id: rcskeys.c,v 5.2 1991/08/19 03:13:55 eggert Exp $AuthorDateHeaderIdLockerLogRCSfileRevisionSourceState!&-07;CLSUWVSl$ "9u<$t<:u [^_]Ð1[^_]ÐCA8tփNu1[^_]ÐUVSu1҃<tB8uӅt4ЃKue[^US=tЃ;uh܇By_]U=uÐSL$ T$\$̀} أ [ÐVSt$ \$T$t'Ѐ:t@8u)PRV Su[^' : can't load library 'Incompatible version. Too many libraries. No such library. Permission denied. Exec format error. Unspecified error. ) ( UWVSl$|$,=,PV>̀} ى  jh0huj9$p|jh:jh.jh/"jhAjhU jhij̀򐐋H %t 93D$ځ%9u 9}D$T$t;jh0hujujhjd̀򐐃>L[^_]þ,=,t.jh}ph0hj>u֐1۸̀[^_]/lib/libc.so.4Jump table 4.1ˋ`ibgc./usr/bin/rlog 755 0 0 152000 5316132316 12062 0ustar rootsystem d -̀\ `-:D$4 `P`[̀rCopyright 1982,1988,1989 by Walter F. Tichy Purdue CS Copyright 1990,1991 by Paul Eggert$Id: rcsbase.h,v 5.11 1991/10/07 17:32:46 eggert Exp $rlog$Id: rlog.c,v 5.9 1991/09/17 19:07:40 eggert Exp $ rlog usage: rlog -{bhLRt} -ddates -l[lockers] -rrevs -sstates -w[logins] -Vn file ...,v/unknown option: %s%sno input file%s-t overrides -h. access list: %s comment leader: " RCS file: %s; Working file: %s head: %s%s branch: %s%s locks: lines added/del: %lu/%lu %s: %s; access list: %s comment leader: " RCS file: %s Working file: %s head:%s%s branch:%s%s locks:%s lines: +%lu -%lu %s: %s%s strict strict symbolic names:" keyword substitution: %s total revisions: %u%.2d.%.2d.%.2d.%.2d.%.2d.%.2d; selected revisions: %udescription: ============================================================================= (UWVSl$@D$D$D$D$ `,_D$4PUt$D>p D$iR ]R QD$FD$:,,$unhuhcR-UL$<|$<~B<-L|$<hhx-D$ D$uh-D$=}4D$0D$,D$(D$$X)D$ D4D$0ND$,\D$(aD$$tXD$ cjjhUt$Lh=dtC |$t =|$t5hW/ =tPLuP=LtP=t P=tP505t$@W.$tC03t$(W_.[u=t=}Wh-Wt$4-@t3t$0W. [uWh-Xts3t$(W-[uWt$,M-W55,h Wh*-=} =t4L?hWz- J95hWa- 1=tvL$L$tld 5lt0jjjjjjh(S` S5[@u5VhFW, Wj +|$tWh_D,j8tHKÀ{8tNu{(t3KDu #9C(uy5Whm+(L$<|$<WL%`[^_](Ã=t `h([%Ðj_Stjs(S [(u[ÐS\$ts(s[ÐS\$t1s3!ts(s[S\$ts(jSSw [Ð---------------------------- revision %s locked by: %s; date: %s; author: %s; state: %s; branches: %s;(UWVS|$<\$@8& `7h h `*  tw h h `* wwD$ PwgPh h `q*t+|$Dt s0s4 s4s05Xh `B*_tWD$D$Uh )t$V0At$h U) [uڍD$PUj (w_u USV2d | t Uj ([^_](Ðmissing delta logdelta number corruptedduplicate delta logVSVt h@ %^ƅu hR %h:~t hi %D$D$ \$SRS(FV= u&h:54`t2= th:EF4F095t V6#[^Ðunexpected end to edit scriptUWVSl$(5(t$D$P;D$Pjjt$<u T$U4؋|$}0V9VrV_tFF} V}! t]@uV9VrV_tFF} V=!@tOt ht $[^_]ÐO[&[^_]S\$t8SC8Cs([t3[u[ÐS\$C<,t< t< t< t<;tu |[Ðj5Z|P|C<,tt< t < t< t<;utC<,t< t< t< t<;tu[ÐS\$C,t t t t;tu+jYxj)\xB[ÐjY xHxC,tt t t t;ut!C,t t t t;tu[Ðmissing state attributes after -s optionsS\$C<,t< t< t< t<;tuh,#[ÐjXPC<,tt< t < t< t<;utC<,t< t< t< t<;tu[ÐVS=|t\=tS5t?|t63_t[uFtV5ƅu[^ÐVS\$ t$t\{8t/Vs<|F Ps< sV_Vs([tV3[u[^ÐWVS|$u 1[^_Ð=hu =ltiht9;tSw<|{ twC P;}[@u˅u&lSw;t [@uG8w(iW84_t3QƋ[u[^_ÐWVS|$xt#w3f_t[u1[^_Ðtw3:_t [uҐ=dtt9xt@򐐋5ttJ7{:ڃ9u$Sv7< |S7v< } v u][^_Ðmissing date/time after -dUWVSt$F,t t t t;tuhh[^_]Ð1jDUǀuFG Ft ;tu>utG PRy;tu!WG P_ lO@=lsF t t t;tut=G 7F>ty hO@=htF;t t t t[^_].1UWVSt=pD$$D$(D$D$ T$$T$T$T$1l$$T$T$t{w t7&Uw;Pyl$t$$7ƅcSÅPSt$S73UwOt$$t$t$$7ƃw D$j.t$ Q_t$wOt$D7ƃwhUt$U~j.t$(_ffPit$wOtVt$wOtCt$t$(Et/t$$6Vt$ t$,29 ~ l$T$T$t$0%v%d%p%v%v%v%%v%d%v%d%d%&Rh N9NrVd_t FFKVT$ T$59|$wt$t$nNjN9NrV_tFF}VT$ T$ЈG t@t 뙐됋N9NrV_tFF}VT$5 T$@}9|$wt$t$m@G(N9NrVF_tFF}VT$T$_tFF}VT$T$EtE9t}u;T6t/| }#t$,B4 G\$,99|$wt$t$T$lNjT$ CG9r1+D$ PD$$Pk[^_]ÐWVS=(O9OrW>_tG0G} Wt8K9KrPS_SȈ%C} S t @t낐uO9OrW_tG0G} W=t8K9KrPS_SȈ%C} S@5[^_ÐWVS `5(N9NrV_tFF} V t @t RHN9NrV_tFF} VY@t [^_ÐO9OrPW*_W؈%G=W/UWVS=(|$L$$)y|$L$y9yrt$_tL$A0A} t$t9{9{rPS{_S%C} Sa t @tL$y9yrt${_tL$A0A} t$t9{9{rPS_S%C} S@t)5L$$9|$)l$D$T$[^_]Ð9l$uD$Pt$(LhʼnȈEEinvalid character %c in identifier `%s'identifier `%s' doesn't start with letterVSL$ \$T6tulA‹T6tttt߄tot8tg tb t] tXАA t t tt8uVPh,,A t t tt8uVhT,[^Ðjt$9Ð`%s' is not a regular file@WVS|$PjW._ƅ} 1[^_@Ë\$Xu\$ SV1_tWtfCf%f=t*WhL-V_< `1[^_@t$TV_uW%[^_@Ðoutput error=th.unexpected end of fileh<.input errorhd.D$$ t hd.ÐD$$ t"=t$h.\ÐD$tP_t hd.9ÐD$t0P_t#=th.ÐS\$tP_t hd.[S\$t1P_t$=tZh.[ËT$$ t hd.t$t h<.Ðjjt$ _ t hd.BÐh `2_t=uh.Ðu `P_t=uh.Ð %s aborted %s error: t$5< `Ðu `P_t=uh.hhha0h ` T$< `t$_h `+_t =uh.Ðt$5< `u `P_t=uh.hha0h `_ T$< `t$R_hhU0h `_ u `PT_t=uh.0hha0h ` D$Pt$h `| h `j h `_t=uh.Ð%s: %s:%lu: u `P_t=uh.t55hhd2h `_D$Pt$h ` hhT0h `_ u `P_t=uh.hha0h `8_ D$Pt$h `6 hhT0h ` _ O%s warning: u `Pt_t=uh.Phh3h ` D$Pt$h ` h `j h ` _t=uh.Ðredefinition of -%c optiont$h@4.Ð=uu `P_t =uh.oD$Pt$h ` h `L_t=uh.(ÐSD$\$ K9Kr%PSw_S%C}+$ t%=th.[Ðt$t$+_}$=tRh.Ðt$ t$ t$ _ }$=th.HÐD$ Pt$ t$ j_ }#=th.Ð$Id: rcsmap.c,v 5.2 1991/08/19 03:13:55 eggert Exp $    $Id: rcssyn.c,v 5.8 1991/08/19 03:13:55 eggert Exp $desclogtextaccessauthorbranchbranchescommentdateexpandheadlocksnextstatestrictsymbolsmissing ';' after '%s'%s isn't a delta numbermissing ':' in symbolic name definitionmissing number in symbolic name definitionmissing ':' in lockmissing number in lockunknown expand mode %.*sWVSh:N*Åt3$t3h;~j uh:h:YLh:t1ÅtLj [uh:h: h:@_ƅtj>-0X␐j uh:h:h:RXƅtIj u h;}Åu hE;gj ,0Xxj wuh:h:)h:{ƅtij :u hp;wÅt3$t3h;u h;j ,0Xx뎐j uh:h:}h:tj uh:h:Ih:tE=uh:3j 8uh:h:h:(tu=uND$ D$|$ WÉVS} SVh;WUj uh:h:Yh:[^_Ðkvkvlkvo@u2K9Krj@S/_C@C@} SS9SrPFS_S%FC} SOu|$t8|$ t1K9Krj S趹_C C } SS9Sr j@S腹_C@C@} Sp[^_Ð %s %s %s %c%c UWVS\$(t$,|$0l$4h:t$(h0GUmjVSjUj@h:h9GUI|$8O9OrW6_tGG}W$@u2M9Mrj@U藸_E@E@} UM9MrPUc_U؈%EYUGKD$P.D$PUjVtL$|$tڐO9OrWF_tGG}'W$t|$hE@u2M9Mrj@U蓷_E@E@} U|M9MrPU__U؈%E} UG 7L$|$(j@h@GU[ [^_]ÐD$@@ Ðbad diff output line: %sdiff line number too large: %s%c%cdiff output command line too longbackward insertion in diff output: %sbackward deletion in diff output: %s%s UWVS$$ T$$N9NrV__t FF}/V$t t hEB[^_]Å@u{V9VrV_t FF} V@uD$@D$D$PhI|$tSj@hIt$j|$$9w hI؈GN9NrV]_t FF}V$t hEB ut\$|$ u G t1+wt9sD$PhIGCЃ vЃ u G t1/Dwl9sD$PhIGCЃ v̅uuD$PhI}\59sD$PhIeD$u [^_]À;u[^_]ÐD$t$>0t1t$ Et$D5Ѓ v;0uC;0t1BЃ v9tr[^_]ËT$߉0tF*Gu#l$t$>tD$;?C9[^_]UWVSL$\$T$A<.uC<.uJu90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r+uʉ߉0tF*G[^_]Ð[^_]Ð[^_]Ð and state and author a date before No revision on branch %s has%s%s%s%s%s%s.revisionbranch%s %s absentUWVSt$t$\$u [^_]Åu[^_]Ðt$>tր;tD$t$>0t1t$ Et$D5Ѓ v;0uC;0t1BЃ v9trwT$߉0tF*Gu%l$t$>.uD$;.uCL$ X1[^_]ÐVSt$ \$t$VPDt@8.t8u@Ku@[^RCS file emptybranch number %s too lowrevision number %s too lowRevision %s has date %s.Revision %s has author %s.Revision %s has state %s.hUWVSD$PD$T=|$ uhPQ T$||$|t t$|>uD$$WB<.uA:uL$$|$$0L$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r#Ή߉0tF*GD$ D$|$}qjt$ p$$v(t$ ID$Pt$|PFBD$P@8.t8u@Ku@t$Ph_Q+|$~1D$HD$Lj$\$PS PhP:|$$|$ 7t$pL$|$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r'Ή߉0tF*G_$$t$ ^uN}t;}0u E}0tD$ED$|$/Ѓ v;0u C;0t1BЃ v9T$t9T$sBߋL$0tF*Gu!l$\$}tE;MCG|H$tt$ v$Ǹ_u$$tJ|$ w$裸_t0jQt$ p$$v(t$ |$ t~L$|$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ru&ʉ߉0tF*G|$$t\$|5D$Pt$P1?D$P@8.t8u@Ku@\$P$$uNP$t O$u$u ONP$$uNP$tO$uONP$tD$8P$#NPN$tOPShO~ j|$ x$$D$ [^_]hÐL$|t$ A<.uC<.uJu90uA90t1 ED Ѓ v;0uC;0t1BЃ v9r/uΉ߉0tF*GD$D$D$|$L$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ruRΉ߉0tF*Gu0j$t$ p$$v(t$ |$ tyL$||$ 90uA90t1 ED Ѓ v;0uC;0t1BЃ v9ru"ʉ߉0tF*GtKD$Pt$|P<D$P@8.t8u@Ku@t$PhxQ'_|$$vQ|$tJD$HD$Lj$\$PSK PhPhP S:j‹|$ z$$|$$v>R$$$t$4$t$8[^_]hÐ$ $t$|$ _uNt$>tÀ;>0uD$|$?0t1t$ E|$D=Ѓ v;0uC;0t1BЃ v9t 9sBDt$߉0tF*Gu%l$t$>tD$;UCO}4D$XP|$$wPt$$6hQS 1[^_]hÐ$t*|$ w$_twt$$6hQ븃$t:|$ w$K_t GuQPt$$6hQw$mD$PP81[^_]hÐno side branches present for %sbranch number %s too highpUWVS$D$,@D$ t$Xt$L$PL$|$ uqD$XD$\\$,K$t$ 8D$Xt@8.t8u@Ku@t$Xh\t$#71[^_]pÐt$ $8T$,EE<.uG<.uJu}0uE}0t1EC+Ѓ v?0uG?0t1B:Ѓ v9ru0tF*G~kL$ IL$ XD$XD$\\$,$t$ 7D$Xt@8.t8u@Ku@t$Xh0\}TD$PD$Tt$,$t$ PD$0$PtPRhPy t$t$ L$(L$,9$D$$$$t$L$(YuNt$>u ;L$90uD$t$>0t1L$ Et$D5Ѓ v;0uC;0t1BЃ v9t9sFt$߉0tF*Gu%l$L$9tD$;AC;|P$tt$(v$苮_u,$tL$(q$g_ut$(t$$L$(I(L$(|$$$$uNP$t!O$u$u ONP$$uNP$tO$uONP$tD$@P$NPN$tOP$hO 1[^_]pÐt$ $j L$(H$$I(L$(t$$9ujL$(H$$D$([^_]pÐ$t$(.T$,tG<.uEE<.uJuG?0t1C;Ѓ v}0uE}0t1EB*Ѓ v9ruyى0tF*G}WD$XD$\\$,C$t$ 3D$Xt@8.t8u@Ku@t$XhxQjL$(H$$L$$q(t$($>T$,tEE<.uG<.uJuE}0t1EC+Ѓ v?0uG?0t1B:Ѓ v9rY0tF*G7D$,@9$$L$$)T$,tG<.uEE<.uJuG?0t1C;Ѓ v}0uE}0t1EB*Ѓ v9ru"ى0tF*Gt[\$,CD$PD$TS$t$ i P$PtPRhP t$D$,@9$$$L$$YuN}t;}0u E}0tD$ED$t$.Ѓ v;0u C;0t1BЃ v9T$t 9T$s>@ߋL$0tF*Gu!l$\$}tE;QCK}4D$`PL$(qGPt$(6hQ 1[^_]pÐ$t.L$$q$_tt$$vL$(1hQ봃$t:t$$v$诨_t FuQPL$(1hQst$$NL$ D$,$9t$,$D$$[^_]pÐjt$ t$ i Ðworking file lacks revision numberSymbolic number %s is undefined.improper revision number: %sUWVS|$jt$$-L$ 1t?u[^_]ËT$:$u_zuYt$$<u 1[^_]Ð8uheڐPt$$.뜐Vhe뷉L$ QT$D$l$T6t_VMOG?0uGЃ v9t$wUt$$-ƊGF vOF[L$ +9t$wUt$$,ƊGFT6tփtуt̃t9t$wUt$$,ދL$ 1Xt3V,_y[u1ۅ9t$wUt$$T,ƊCFuG=<.u>?u)D$$u1T$ 2BÅ@SdD$F.t$hf>1[^_]ÐPjjjt$OtÐ1Ð=Lt(Pjjj5L1tÐ=t 1Ð$Id: rcsutil.c,v 5.10 1991/10/07 17:32:46 eggert Exp $out of memoryD$uP9_u h;iÐt$t$w_u h;irÐS\$j_u h;iOP[SD$uP踞_Åu h;ij蝞_u h;iP[VS5t^6r_Vi_ޅu[^ÐST$9t C[9uK3&_S_[Wt$|$ 0҅uR_…u h;iR0׹ЅuP_u h;irP膡_1uD(_u6%P跙_u%Phk5B_HangupInterruptBroken pipeQuitTerminatedCputime limit exceededFilesize limit exceeded RCS: %s. Cleaning up. RCS: Signal %d. Cleaning up. @ÁWHE8=jW~_t=_=1ҍO9$,nnnnnnnnnnnnnnnnnnnnnnnnnnm. m&m!m&m1mHmt Rh`m WhymD$ P̞_ T$0׹HPRj<_ Ț_ signalWVS=D$ ,o I D$ Ky|$,oWj6肝_ t h0oy|$t-D$wL$ L$jW6O_ t h0oFKy[^_Ð WVS$ $ $u@\$ Vh jS肔_uVU[^_ WPS $t[^_ ÐWVSt$\$|$v5WhjV膔_=t苽wWSjVV_9t^[^_/bin/sh: not found forkwaitpid%s failedUWVS$R_…4L$)˃tYj2_hjUz_ Dž|u%jjW覒_ W_uЃtU谿+t_jА_hhAU_ Dž|u(jjW>_ W蓐_uЃtUHS3ؑ_=< `upShp踑_0׹HPRj"_ j hpj_ j迎_} hp־jD$PRg_ } hp趾|$tL$qhpD$[^_]Ðtoo many command argumentsPVSD$`t$\t$D$ \$hD$dD$t#~ hrʃACDuߍD$P[^P19%.*s/%.2s/%.2s %.2s:%.2s:%sSL$\$ ʐB<.uB PB PBPBPRQ)HPsy.u =}sPS5_$[Ð%s isn't a number%s out of range %d..%dWVS|$w=t jVtN1G\PFЃ v>t Whs~~jjWhs׾[^_ÐRCSINITUWVSl$t$h@t"_…tAR0׹ЅuP_u h;imP肙_1ۅuL$1}ڐB<  <} t < uG名uP袓_u h;iNjL$9ڊ<  <} tF< uC鐉ECB<  <}t"< t<\u;t JCאB뮐u[^_]Ð=u8_fÐ=u_fÐsetuidroot setuid not supportedÐVS==uY_ff=u4_ff5=u__fff9tNPe_t hu|ߎ_f9t*=u!uftuP.[^ÐVS==uՏ_ff=u`_ff5=u苏_fff9tNP葕_t hu訹 _f9t*=u!uftuPZ[^ÐW$jW蚕_t=_=1ҍO9$xtx|xxxxxxxxxxxxxxxxxxxxxxxxm. m&m!m&m1mHmt Rh`m WhymD$ P_ T$0׹HPRjX_ $Id: partime.c,v 5.6 1991/08/19 03:13:55 eggert Exp $januaryfebruarymarchaprilmayjunejulyaugustseptemberoctobernovemberdecembersundaymondaytuesdaywednesdaythursdayfridaysaturdaygmtutcutcutnzstjstkstisteetcetmetwetnstastestcstmstpstaksthasthstsstnzdtkdtbstndtadtedtcdtmdtpdtakdthadtltdstddstampmnoonmidnight&y.y7y=yCyGyLyQyXyby jy sy |yyyyyyyyyyyy0yyyyyyyyyy,yhyyyzXzX zz0zzz z$z,(zh,z0z4z9zX>zAz<EzxJzMzPz Uz/-.DUWVS1ۋT$\BBB BBBBD$$D$(D$0D$LD$H|$X|$DD$DD$ t$ ux|$Ps|$$|t$$t$`!TT$\z}BL$0}1Ƀ|$(|L$D$()ȋ|$`ًT$` [^_]DÐ|$ND$Ph@ȸ9$x}}}}}}~L$\DL$\8L$0/jD$4P4@ ŠD$P@$tj|$8u{\$@` oT$4T$:Ѓ w\ؿdӃ;Kt$@D$)L$|$D$x+uۉ\$,݋T$T$DD$H|$<|$Lt$PL$(L$$UQ Wt$DЃ |$N8|$H-\$P` FЃ  ؿdӃ;L$PșD$)L$|$>+uۉ\$,D$,D$(Xl$P|$HuEdщQD$`D$ t$ 6D$UD$`P|$HT$\z}z|$L:uPdӉQD$`D$ t$ D$SD$`PO|$L,A|$L/6t$4D$8T$LT$tD$4Ѓ D$@@$|$L:b@|D$A||$.D$\$T$8T$Lu{8T$Mt]|$D|$4D$HD$8T$LT$<|$P|$@D$8D$4P'D$t|$>uD$@xT$\z }Iz=D$8D$Mu>t T$\r|$\w |%t D$\p T$\r} D$AT$\zz z}vq|$D|$4D$HD$8T$LT$<|$P|$@D$4P<D$u|$@t51[^_]DÀ|$>tD$4Ѓ ]D$@@$LUD$` PQEPD$`P=ŔxUD$`P6냐UD$`Pit$ u|$P%[^_]DÐ|$N7|$HuZL$PȿdQD$`D$ t$ D$L$PșQt$`D$tv|$Ht$PD$`P`|$L:uBt$ ;|$N|$H~t$Pt$`fD$8} T$1ÐÐT$L$B(|# ~1Ð uBu0B *z܃:ׅ| uJu ttÐUWVSl$Uu 1[^_]Ð}} t[u?+t?-uGNNxaE DЉD$GȻ 9E u9L$}E 1[^_]ÐT$U Nyh`zuW E tɸ[^_]ÐUWVS\$3s3SS C CCC ^i19$t<<<<<dddddddddddddddddd<dddddddHHdHHHHHddddddddddH{u3r{u 3K cKC[^_]ÐC{u'AЃ wCC F9s8~-t~+u, C%AЃ C 9tKKC[^_]ÐFC[^_]ÃUWVS|$ 1ft$\$~/T$+D$AFtuT$|$4 |Y 9_ u,|$4|Y9_u|$4zI9OnL$2[^_] ÐUTC is not available; perhaps TZ is not set?U`=}h`URЃu hǥÐ%.2d.%.2d.%.2d.%.2d.%.2d.%.2dL$ $`=}h`RЃ…u hk2rrr B@PBzc~lPhDt$(_ can't parse date/time: %sbad date/time: %s(WVSt$8|$ W\$SV. u VhЍܤt$ SuVh迤D$ `=}h`WЃ…u h菤2rrr B@PBzc~lPhDt$X _ [^_(ÐHVST$Xu 1[^HÐD$0PR]ÍD$Pt$VS\ u ShЍ t$VuShht$X_[^HÐ$Id: rcsfnms.c,v 5.8 1991/09/24 00:28:40 eggert Exp $RCSa-- adaasm;; bat:: c * c++// cccppcxxcl;;; cmdcmfc csel; fforhhpphxxllisplspmacme.\" mlmmmsppaspl% texy# z||ÏƏɏˏϏяՏُۏƏ TMPDIRTMPTEMP/tmp%s%cT%cXXXXXXcan't make temporary file name `%s%cT%cXXXXXX'UWVSl$=uLhu6hu h#u (0߹Ѓ PQǍu0Vj/Sh-W{_Wv_t?uVj/Sh;Ϡ<[^_]ÐVS$tP}_Ny[^ÐUWVSL@X0.р9tB8uр:u9-0ut1t4)ЉD$AC|$t|$uù} ى ((jhp0htuj9$444444(444444444444jh:jh.jh"jhɲjhݲ jhj̀򐐋H %t 93D$ځ%9u 9}D$T$t;jhp0htujujhjd̀򐐃>L[^_]þH=Ht.jhph0h j>u֐1۸̀[^_]/lib/libc.so.4Jump table 4.1000000000000000000000000000000000000000000*** empty log message ***$DS`0ibgc./usr/man/man1/ci.1 444 0 0 43022 5316132316 12466 0ustar rootsystem.de Id .ds Rv \\$3 .ds Dt \\$4 .. .Id $Id: ci.1,v 5.9 1991/10/07 17:32:46 eggert Exp $ .ds r \&\s-1RCS\s0 .if n .ds - \%-- .if t .ds - \(em .TH CI 1 \*(Dt GNU .SH NAME ci \- check in RCS revisions .SH SYNOPSIS .B ci .RI [ options ] " file " .\|.\|. .SH DESCRIPTION .B ci stores new revisions into \*r files. Each pathname matching an \*r suffix is taken to be an \*r file. All others are assumed to be working files containing new revisions. .B ci deposits the contents of each working file into the corresponding \*r file. If only a working file is given, .B ci tries to find the corresponding \*r file in an \*r subdirectory and then in the working file's directory. For more details, see .SM "FILE NAMING" below. .PP For .B ci to work, the caller's login must be on the access list, except if the access list is empty or the caller is the superuser or the owner of the file. To append a new revision to an existing branch, the tip revision on that branch must be locked by the caller. Otherwise, only a new branch can be created. This restriction is not enforced for the owner of the file if non-strict locking is used (see .BR rcs (1)). A lock held by someone else may be broken with the .B rcs command. .PP Unless the .B \-f option is given, .B ci checks whether the revision to be deposited differs from the preceding one. If not, instead of creating a new revision .B ci reverts to the preceding one. To revert, ordinary .B ci removes the working file and any lock; .B "ci\ \-l" keeps and .B "ci\ \-u" removes any lock, and then they both generate a new working file much as if .B "co\ \-l" or .B "co\ \-u" had been applied to the preceding revision. When reverting, any .B \-n and .B \-s options apply to the preceding revision. .PP For each revision deposited, .B ci prompts for a log message. The log message should summarize the change and must be terminated by end-of-file or by a line containing .BR \&. "\ by" itself. If several files are checked in .B ci asks whether to reuse the previous log message. If the standard input is not a terminal, .B ci suppresses the prompt and uses the same log message for all files. See also .BR \-m . .PP If the \*r file does not exist, .B ci creates it and deposits the contents of the working file as the initial revision (default number: .BR 1.1 ). The access list is initialized to empty. Instead of the log message, .B ci requests descriptive text (see .B \-t below). .PP The number .I rev of the deposited revision can be given by any of the options .BR \-f , .BR \-I , .BR \-k , .BR \-l , .BR \-M , .BR \-q , .BR \-r , or .BR \-u . .I rev may be symbolic, numeric, or mixed. If .I rev is .BR $ , .B ci determines the revision number from keyword values in the working file. .PP If .I rev is a revision number, it must be higher than the latest one on the branch to which .I rev belongs, or must start a new branch. .PP If .I rev is a branch rather than a revision number, the new revision is appended to that branch. The level number is obtained by incrementing the tip revision number of that branch. If .I rev indicates a non-existing branch, that branch is created with the initial revision numbered .IB rev .1\f1.\fP .br .ne 8 .PP If .I rev is omitted, .B ci tries to derive the new revision number from the caller's last lock. If the caller has locked the tip revision of a branch, the new revision is appended to that branch. The new revision number is obtained by incrementing the tip revision number. If the caller locked a non-tip revision, a new branch is started at that revision by incrementing the highest branch number at that revision. The default initial branch and level numbers are .BR 1 . .PP If .I rev is omitted and the caller has no lock, but owns the file and locking is not set to .IR strict , then the revision is appended to the default branch (normally the trunk; see the .B \-b option of .BR rcs (1)). .PP Exception: On the trunk, revisions can be appended to the end, but not inserted. .SH OPTIONS .TP .BR \-r [\f2rev\fP] checks in a revision, releases the corresponding lock, and removes the working file. This is the default. .RS .PP The .B \-r option has an unusual meaning in .BR ci . In other \*r commands, .B \-r merely specifies a revision number, but in .B ci it also releases a lock and removes the working file. See .B \-u for a tricky example. .RE .TP .BR \-l [\f2rev\fP] works like .BR \-r , except it performs an additional .B "co\ \-l" for the deposited revision. Thus, the deposited revision is immediately checked out again and locked. This is useful for saving a revision although one wants to continue editing it after the checkin. .TP .BR \-u [\f2rev\fP] works like .BR \-l , except that the deposited revision is not locked. This lets one read the working file immediately after checkin. .RS .PP The .BR \-l , .BR \-r , and .B \-u options are mutually exclusive and silently override each other. For example, .B "ci\ \-u\ \-r" is equivalent to .B "ci\ \-r" because .B \-r overrides .BR \-u . .RE .TP .BR \-f [\f2rev\fP] forces a deposit; the new revision is deposited even it is not different from the preceding one. .TP .BR \-k [\f2rev\fP] searches the working file for keyword values to determine its revision number, creation date, state, and author (see .BR co (1)), and assigns these values to the deposited revision, rather than computing them locally. It also generates a default login message noting the login of the caller and the actual checkin date. This option is useful for software distribution. A revision that is sent to several sites should be checked in with the .B \-k option at these sites to preserve the original number, date, author, and state. The extracted keyword values and the default log message may be overridden with the options .BR \-d , .BR \-m , .BR \-s , .BR \-w , and any option that carries a revision number. .TP .BR \-q [\f2rev\fP] quiet mode; diagnostic output is not printed. A revision that is not different from the preceding one is not deposited, unless .B \-f is given. .TP .BR \-I [\f2rev\fP] interactive mode; the user is prompted and questioned even if the standard input is not a terminal. .TP .BR \-d "[\f2date\fP]" uses .I date for the checkin date and time. The .I date is specified in free format as explained in .BR co (1). This is useful for lying about the checkin date, and for .B \-k if no date is available. If .I date is empty, the working file's time of last modification is used. .TP .BR \-M [\f2rev\fP] Set the modification time on any new working file to be the date of the retrieved revision. For example, .BI "ci\ \-d\ \-M\ \-u" "\ f" does not alter .IR f 's modification time, even if .IR f 's contents change due to keyword substitution. Use this option with care; it can confuse .BR make (1). .TP .BI \-m "msg" uses the string .I msg as the log message for all revisions checked in. .TP .BI \-n "name" assigns the symbolic name .I name to the number of the checked-in revision. .B ci prints an error message if .I name is already assigned to another number. .TP .BI \-N "name" same as .BR \-n , except that it overrides a previous assignment of .IR name . .TP .BI \-s "state" sets the state of the checked-in revision to the identifier .IR state . The default state is .BR Exp . .TP .BI \-t file writes descriptive text from the contents of the named .I file into the \*r file, deleting the existing text. The .I file may not begin with .BR \- . .TP .BI \-t\- string Write descriptive text from the .I string into the \*r file, deleting the existing text. .RS .PP The .B \-t option, in both its forms, has effect only during an initial checkin; it is silently ignored otherwise. .PP During the initial checkin, if .B \-t is not given, .B ci obtains the text from standard input, terminated by end-of-file or by a line containing .BR \&. "\ by" itself. The user is prompted for the text if interaction is possible; see .BR \-I . .PP For backward compatibility with older versions of \*r, a bare .B \-t option is ignored. .RE .TP .BI \-w "login" uses .I login for the author field of the deposited revision. Useful for lying about the author, and for .B \-k if no author is available. .TP .BI \-V n Emulate \*r version .IR n . See .BR co (1) for details. .TP .BI \-x "suffixes" specifies the suffixes for \*r files. A nonempty suffix matches any pathname ending in the suffix. An empty suffix matches any pathname of the form .BI RCS/ file or .IB path /RCS/ file. The .B \-x option can specify a list of suffixes separated by .BR / . For example, .B \-x,v/ specifies two suffixes: .B ,v and the empty suffix. If two or more suffixes are specified, they are tried in order when looking for an \*r file; the first one that works is used for that file. If no \*r file is found but an \*r file can be created, the suffixes are tried in order to determine the new \*r file's name. The default for .IR suffixes is installation-dependent; normally it is .B ,v/ for hosts like Unix that permit commas in file names, and is empty (i.e. just the empty suffix) for other hosts. .SH "FILE NAMING" Pairs of \*r files and working files may be specified in three ways (see also the example section). .PP 1) Both the \*r file and the working file are given. The \*r pathname is of the form .IB path1 / workfileX and the working pathname is of the form .IB path2 / workfile where .IB path1 / and .IB path2 / are (possibly different or empty) paths, .I workfile is a filename, and .I X is an \*r suffix. If .I X is empty, .IB path1 / must be .B RCS/ or must end in .BR /RCS/ . .PP 2) Only the \*r file is given. Then the working file is created in the current directory and its name is derived from the name of the \*r file by removing .IB path1 / and the suffix .IR X . .PP 3) Only the working file is given. Then .B ci considers each \*r suffix .I X in turn, looking for an \*r file of the form .IB path2 /RCS/ workfileX or (if the former is not found and .I X is nonempty) .IB path2 / workfileX. .PP If the \*r file is specified without a path in 1) and 2), .B ci looks for the \*r file first in the directory .B ./RCS and then in the current directory. .PP .B ci reports an error if an attempt to open an \*r file fails for an unusual reason, even if the \*r file's pathname is just one of several possibilities. For example, to suppress use of \*r commands in a directory .IR d , create a regular file named .IB d /RCS so that casual attempts to use \*r commands in .I d fail because .IB d /RCS is not a directory. .SH EXAMPLES Suppose .B ,v is an \*r suffix and the current directory contains a subdirectory .B RCS with an \*r file .BR io.c,v . Then each of the following commands check in a copy of .B io.c into .B RCS/io.c,v as the latest revision, removing .BR io.c . .LP .RS .nf .ft 3 ci io.c; ci RCS/io.c,v; ci io.c,v; ci io.c RCS/io.c,v; ci io.c io.c,v; ci RCS/io.c,v io.c; ci io.c,v io.c; .ft .fi .RE .PP Suppose instead that the empty suffix is an \*r suffix and the current directory contains a subdirectory .B RCS with an \*r file .BR io.c . The each of the following commands checks in a new revision. .LP .RS .nf .ft 3 ci io.c; ci RCS/io.c; ci io.c RCS/io.c; ci RCS/io.c io.c; .ft .fi .RE .SH "FILE MODES" An \*r file created by .B ci inherits the read and execute permissions from the working file. If the \*r file exists already, .B ci preserves its read and execute permissions. .B ci always turns off all write permissions of \*r files. .SH FILES Several temporary files may be created in the directory containing the working file, and also in the temporary directory (see .B \s-1TMPDIR\s0 under .BR \s-1ENVIRONMENT\s0 ). A semaphore file or files are created in the directory containing the \*r file. With a nonempty suffix, the semaphore names begin with the first character of the suffix; therefore, do not specify an suffix whose first character could be that of a working filename. With an empty suffix, the semaphore names end with .B _ so working filenames should not end in .BR _ . .PP .B ci never changes an \*r or working file. Normally, .B ci unlinks the file and creates a new one; but instead of breaking a chain of one or more symbolic links to an \*r file, it unlinks the destination file instead. Therefore, .B ci breaks any hard or symbolic links to any working file it changes; and hard links to \*r files are ineffective, but symbolic links to \*r files are preserved. .PP The effective user must be able to search and write the directory containing the \*r file. Normally, the real user must be able to read the \*r and working files and to search and write the directory containing the working file; however, some older hosts cannot easily switch between real and effective users, so on these hosts the effective user is used for all accesses. The effective user is the same as the real user unless your copies of .B ci and .B co have setuid privileges. As described in the next section, these privileges yield extra security if the effective user owns all \*r files and directories, and if only the effective user can write \*r directories. .PP Users can control access to \*r files by setting the permissions of the directory containing the files; only users with write access to the directory can use \*r commands to change its \*r files. For example, in hosts that allow a user to belong to several groups, one can make a group's \*r directories writable to that group only. This approach suffices for informal projects, but it means that any group member can arbitrarily change the group's \*r files, and can even remove them entirely. Hence more formal projects sometimes distinguish between an \*r administrator, who can change the \*r files at will, and other project members, who can check in new revisions but cannot otherwise change the \*r files. .SH "SETUID USE" To prevent anybody but their \*r administrator from deleting revisions, a set of users can employ setuid privileges as follows. .nr n \w'\(bu '+1n-1/1n .IP \(bu \nn Check that the host supports \*r setuid use. Consult a trustworthy expert if there are any doubts. It is best if the .B seteuid() system call works as described in Posix 1003.1a Draft 5, because \*r can switch back and forth easily between real and effective users, even if the real user is .BR root . If not, the second best is if the .B setuid() system call supports saved setuid (the {\s-1_POSIX_SAVED_IDS\s0} behavior of Posix 1003.1-1990); this fails only if the real user is .BR root . If \*r detects any failure in setuid, it quits immediately. .IP \(bu \nn Choose a user .I A to serve as \*r administrator for the set of users. Only .I A will be able to invoke the .B rcs command on the users' \*r files. .I A should not be .B root or any other user with special powers. Mutually suspicious sets of users should use different administrators. .IP \(bu \nn Choose a path name .I B that will be a directory of files to be executed by the users. .IP \(bu \nn Have .I A set up .I B to contain copies of .B ci and .B co that are setuid to .I A by copying the commands from their standard installation directory .I D as follows: .LP .RS .nf .ne 3 \f3mkdir\fP \f2B\fP \f3cp\fP \f2D\fP\^\f3/c[io]\fP \f2B\fP \f3chmod go\-w,u+s\fP \f2B\fP\f3/c[io]\fP .fi .RE .IP \(bu \nn Have each user prepend .I B to their path as follows: .LP .RS .nf .ne 2 \f3PATH=\fP\f2B\fP\f3:$PATH; export PATH\fP # ordinary shell \f3set path=(\fP\f2B\fP \f3$path)\fP # C shell .fi .RE .IP \(bu \nn Have .I A create each \*r directory .I R with write access only to .I A as follows: .LP .RS .nf .ne 2 \f3mkdir\fP \f2R\fP \f3chmod go\-w\fP \f2R\fP .fi .RE .IP \(bu \nn If you want to let only certain users read the \*r files, put the users into a group .IR G , and have .I A further protect the \*r directory as follows: .LP .RS .nf .ne 2 \f3chgrp\fP \f2G R\fP \f3chmod g\-w,o\-rwx\fP \f2R\fP .fi .RE .IP \(bu \nn Have .I A copy old \*r files (if any) into .IR R , to ensure that .I A owns them. .IP \(bu \nn An \*r file's access list limits who can check in and lock revisions. The default access list is empty, which grants checkin access to anyone who can read the \*r file. If you want limit checkin access, have .I A invoke .B "rcs\ \-a" on the file; see .BR rcs (1). In particular, .BI "rcs\ \-e\ \-a" A limits access to just .IR A . .IP \(bu \nn Have .I A initialize any new \*r files with .B "rcs\ \-i" before initial checkin, adding the .B \-a option if you want to limit checkin access. .IP \(bu \nn Give setuid privileges only to .BR ci , .BR co , and .BR rcsclean ; do not give them to .B rcs or to any other command. .IP \(bu \nn Do not use other setuid commands to invoke \*r commands; setuid is trickier than you think! .SH ENVIRONMENT .TP .B \s-1RCSINIT\s0 options prepended to the argument list, separated by spaces. A backslash escapes spaces within an option. The .B \s-1RCSINIT\s0 options are prepended to the argument lists of most \*r commands. Useful .B \s-1RCSINIT\s0 options include .BR \-q , .BR \-V , and .BR \-x . .TP .B \s-1TMPDIR\s0 Name of the temporary directory. If not set, the environment variables .B \s-1TMP\s0 and .B \s-1TEMP\s0 are inspected instead and the first value found is taken; if none of them are set, a host-dependent default is used, typically .BR /tmp . .SH DIAGNOSTICS For each revision, .B ci prints the \*r file, the working file, and the number of both the deposited and the preceding revision. The exit status is zero if and only if all operations were successful. .SH IDENTIFICATION Author: Walter F. Tichy. .br Revision Number: \*(Rv; Release Date: \*(Dt. .br Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. .br Copyright \(co 1990, 1991 by Paul Eggert. .SH "SEE ALSO" co(1), ident(1), make(1), rcs(1), rcsclean(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1), rcsfile(5) .br Walter F. Tichy, \*r\*-A System for Version Control, .I "Software\*-Practice & Experience" .BR 15 , 7 (July 1985), 637-654. .br ./usr/man/man1/co.1 444 0 0 32520 5316132316 12475 0ustar rootsystem.de Id .ds Rv \\$3 .ds Dt \\$4 .. .Id $Id: co.1,v 5.7 1991/08/19 03:13:55 eggert Exp $ .ds g \&\s-1UTC\s0 .ds r \&\s-1RCS\s0 .if n .ds - \%-- .if t .ds - \(em .TH CO 1 \*(Dt GNU .SH NAME co \- check out RCS revisions .SH SYNOPSIS .B co .RI [ options ] " file " .\|.\|. .SH DESCRIPTION .B co retrieves a revision from each \*r file and stores it into the corresponding working file. .PP Pathnames matching an \*r suffix denote \*r files; all others denote working files. Names are paired as explained in .BR ci (1). .PP Revisions of an \*r file may be checked out locked or unlocked. Locking a revision prevents overlapping updates. A revision checked out for reading or processing (e.g., compiling) need not be locked. A revision checked out for editing and later checkin must normally be locked. Checkout with locking fails if the revision to be checked out is currently locked by another user. (A lock may be broken with .BR rcs "(1).)\ \&" Checkout with locking also requires the caller to be on the access list of the \*r file, unless he is the owner of the file or the superuser, or the access list is empty. Checkout without locking is not subject to accesslist restrictions, and is not affected by the presence of locks. .PP A revision is selected by options for revision or branch number, checkin date/time, author, or state. When the selection options are applied in combination, .B co retrieves the latest revision that satisfies all of them. If none of the selection options is specified, .B co retrieves the latest revision on the default branch (normally the trunk, see the .B \-b option of .BR rcs (1)). A revision or branch number may be attached to any of the options .BR \-f , .BR \-I , .BR \-l , .BR \-M , .BR \-p , .BR \-q , .BR \-r , or .BR \-u . The options .B \-d (date), .B \-s (state), and .B \-w (author) retrieve from a single branch, the .I selected branch, which is either specified by one of .BR \-f, \&.\|.\|., .BR \-u , or the default branch. .PP A .B co command applied to an \*r file with no revisions creates a zero-length working file. .B co always performs keyword substitution (see below). .SH OPTIONS .TP .BR \-r [\f2rev\fP] retrieves the latest revision whose number is less than or equal to .I rev. If .I rev indicates a branch rather than a revision, the latest revision on that branch is retrieved. If .I rev is omitted, the latest revision on the default branch (see the .B \-b option of .BR rcs (1)) is retrieved. If .I rev is .BR $ , .B co determines the revision number from keyword values in the working file. Otherwise, a revision is composed of one or more numeric or symbolic fields separated by periods. The numeric equivalent of a symbolic field is specified with the .B \-n option of the commands .BR ci (1) and .BR rcs (1). .TP .BR \-l [\f2rev\fP] same as .BR \-r , except that it also locks the retrieved revision for the caller. .TP .BR \-u [\f2rev\fP] same as .BR \-r , except that it unlocks the retrieved revision if it was locked by the caller. If .I rev is omitted, .B \-u retrieves the revision locked by the caller, if there is one; otherwise, it retrieves the latest revision on the default branch. .TP .BR \-f [\f2rev\fP] forces the overwriting of the working file; useful in connection with .BR \-q . See also .SM "FILE MODES" below. .TP .B \-kkv Generate keyword strings using the default form, e.g.\& .B "$\&Revision: \*(Rv $" for the .B Revision keyword. A locker's name is inserted in the value of the .BR Header , .BR Id , and .B Locker keyword strings only as a file is being locked, i.e. by .B "ci\ \-l" and .BR "co\ \-l". This is the default. .TP .B \-kkvl Like .BR \-kkv , except that a locker's name is always inserted if the given revision is currently locked. .TP .BR \-kk Generate only keyword names in keyword strings; omit their values. See .SM "KEYWORD SUBSTITUTION" below. For example, for the .B Revision keyword, generate the string .B $\&Revision$ instead of .BR "$\&Revision: \*(Rv $". This option is useful to ignore differences due to keyword substitution when comparing different revisions of a file. .TP .BR \-ko Generate the old keyword string, present in the working file just before it was checked in. For example, for the .B Revision keyword, generate the string .B "$\&Revision: 1.1 $" instead of .B "$\&Revision: \*(Rv $" if that is how the string appeared when the file was checked in. This can be useful for binary file formats that cannot tolerate any changes to substrings that happen to take the form of keyword strings. .TP .BR \-kv Generate only keyword values for keyword strings. For example, for the .B Revision keyword, generate the string .B \*(Rv instead of .BR "$\&Revision: \*(Rv $". This can help generate files in programming languages where it is hard to strip keyword delimiters like .B "$\&Revision:\ $" from a string. However, further keyword substitution cannot be performed once the keyword names are removed, so this option should be used with care. Because of this danger of losing keywords, this option cannot be combined with .BR \-l , and the owner write permission of the working file is turned off; to edit the file later, check it out again without .BR \-kv . .TP .BR \-p [\f2rev\fP] prints the retrieved revision on the standard output rather than storing it in the working file. This option is useful when .B co is part of a pipe. .TP .BR \-q [\f2rev\fP] quiet mode; diagnostics are not printed. .TP .BR \-I [\f2rev\fP] interactive mode; the user is prompted and questioned even if the standard input is not a terminal. .TP .BI \-d date retrieves the latest revision on the selected branch whose checkin date/time is less than or equal to .I date. The date and time may be given in free format. The time zone .B LT stands for local time; other common time zone names are understood. For example, the following .IR date s are equivalent if local time is January 11, 1990, 8pm Pacific Standard Time, eight hours west of Coordinated Universal Time (\*g): .RS .LP .RS .nf .ta \w'\f3Thu, 11 Jan 1990 20:00:00 \-0800\fP 'u .ne 9 \f38:00 pm lt\fP \f34:00 AM, Jan. 12, 1990\fP note: default is \*g \f31990/01/12 04:00:00\fP \*r date format \f3Thu Jan 11 20:00:00 1990 LT\fP output of \f3ctime\fP(3) + \f3LT\fP \f3Thu Jan 11 20:00:00 PST 1990\fP output of \f3date\fP(1) \f3Fri Jan 12 04:00:00 GMT 1990\fP \f3Thu, 11 Jan 1990 20:00:00 \-0800\fP \f3Fri-JST, 1990, 1pm Jan 12\fP \f312-January-1990, 04:00-WET\fP .ta 4n +4n +4n +4n .fi .RE .LP Most fields in the date and time may be defaulted. The default time zone is \*g. The other defaults are determined in the order year, month, day, hour, minute, and second (most to least significant). At least one of these fields must be provided. For omitted fields that are of higher significance than the highest provided field, the time zone's current values are assumed. For all other omitted fields, the lowest possible values are assumed. For example, the date .B "20, 10:30" defaults to 10:30:00 \*g of the 20th of the \*g time zone's current month and year. The date/time must be quoted if it contains spaces. .RE .TP .BR \-M [\f2rev\fP] Set the modification time on the new working file to be the date of the retrieved revision. Use this option with care; it can confuse .BR make (1). .TP .BI \-s state retrieves the latest revision on the selected branch whose state is set to .I state. .TP .BR \-w [\f2login\fP] retrieves the latest revision on the selected branch which was checked in by the user with login name .I login. If the argument .I login is omitted, the caller's login is assumed. .TP .BI \-j joinlist generates a new revision which is the join of the revisions on .I joinlist. This option is largely obsoleted by .BR rcsmerge (1) but is retained for backwards compatibility. .RS .PP The .I joinlist is a comma-separated list of pairs of the form .IB rev2 : rev3, where .I rev2 and .I rev3 are (symbolic or numeric) revision numbers. For the initial such pair, .I rev1 denotes the revision selected by the above options .BR \-f, \&.\|.\|., .BR \-w . For all other pairs, .I rev1 denotes the revision generated by the previous pair. (Thus, the output of one join becomes the input to the next.) .PP For each pair, .B co joins revisions .I rev1 and .I rev3 with respect to .I rev2. This means that all changes that transform .I rev2 into .I rev1 are applied to a copy of .I rev3. This is particularly useful if .I rev1 and .I rev3 are the ends of two branches that have .I rev2 as a common ancestor. If .IR rev1 < rev2 < rev3 on the same branch, joining generates a new revision which is like .I rev3, but with all changes that lead from .I rev1 to .I rev2 undone. If changes from .I rev2 to .I rev1 overlap with changes from .I rev2 to .I rev3, .B co reports overlaps as described in .BR merge (1). .PP For the initial pair, .I rev2 may be omitted. The default is the common ancestor. If any of the arguments indicate branches, the latest revisions on those branches are assumed. The options .B \-l and .B \-u lock or unlock .I rev1. .RE .TP .BI \-V n Emulate \*r version .I n, where .I n may be .BR 3 , .BR 4 , or .BR 5 . This may be useful when interchanging \*r files with others who are running older versions of \*r. To see which version of \*r your correspondents are running, have them invoke .B rlog on an \*r file; if none of the first few lines of output contain the string .B branch: it is version 3; if the dates' years have just two digits, it is version 4; otherwise, it is version 5. An \*r file generated while emulating version 3 will lose its default branch. An \*r revision generated while emulating version 4 or earlier will have a timestamp that is off by up to 13 hours. A revision extracted while emulating version 4 or earlier will contain dates of the form .IB yy / mm / dd instead of .IB yyyy / mm / dd and may also contain different white space in the substitution for .BR $\&Log$ . .TP .BI \-x "suffixes" Use .I suffixes to characterize \*r files. See .BR ci (1) for details. .SH "KEYWORD SUBSTITUTION" Strings of the form .BI $ keyword $ and .BI $ keyword : .\|.\|. $ embedded in the text are replaced with strings of the form .BI $ keyword : value $ where .I keyword and .I value are pairs listed below. Keywords may be embedded in literal strings or comments to identify a revision. .PP Initially, the user enters strings of the form .BI $ keyword $ . On checkout, .B co replaces these strings with strings of the form .BI $ keyword : value $ . If a revision containing strings of the latter form is checked back in, the value fields will be replaced during the next checkout. Thus, the keyword values are automatically updated on checkout. This automatic substitution can be modified by the .B \-k options. .PP Keywords and their corresponding values: .TP .B $\&Author$ The login name of the user who checked in the revision. .TP .B $\&Date$ The date and time (\*g) the revision was checked in. .TP .B $\&Header$ A standard header containing the full pathname of the \*r file, the revision number, the date (\*g), the author, the state, and the locker (if locked). .TP .B $\&Id$ Same as .BR $\&Header$ , except that the \*r filename is without a path. .TP .B $\&Locker$ The login name of the user who locked the revision (empty if not locked). .TP .B $\&Log$ The log message supplied during checkin, preceded by a header containing the \*r filename, the revision number, the author, and the date (\*g). Existing log messages are .I not replaced. Instead, the new log message is inserted after .BR $\&Log: .\|.\|. $ . This is useful for accumulating a complete change log in a source file. .TP .B $\&RCSfile$ The name of the \*r file without a path. .TP .B $\&Revision$ The revision number assigned to the revision. .TP .B $\&Source$ The full pathname of the \*r file. .TP .B $\&State$ The state assigned to the revision with the .B \-s option of .BR rcs (1) or .BR ci (1). .SH "FILE MODES" The working file inherits the read and execute permissions from the \*r file. In addition, the owner write permission is turned on, unless .B \-kv is set or the file is checked out unlocked and locking is set to strict (see .BR rcs (1)). .PP If a file with the name of the working file exists already and has write permission, .B co aborts the checkout, asking beforehand if possible. If the existing working file is not writable or .B \-f is given, the working file is deleted without asking. .SH FILES .B co accesses files much as .BR ci (1) does, except that it does not need to read the working file. .SH ENVIRONMENT .TP .B \s-1RCSINIT\s0 options prepended to the argument list, separated by spaces. See .BR ci (1) for details. .SH DIAGNOSTICS The \*r pathname, the working pathname, and the revision number retrieved are written to the diagnostic output. The exit status is zero if and only if all operations were successful. .SH IDENTIFICATION Author: Walter F. Tichy. .br Revision Number: \*(Rv; Release Date: \*(Dt. .br Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. .br Copyright \(co 1990, 1991 by Paul Eggert. .SH "SEE ALSO" ci(1), ctime(3), date(1), ident(1), make(1), rcs(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1), rcsfile(5) .br Walter F. Tichy, \*r\*-A System for Version Control, .I "Software\*-Practice & Experience" .BR 15 , 7 (July 1985), 637-654. .SH LIMITS Links to the \*r and working files are not preserved. .PP There is no way to selectively suppress the expansion of keywords, except by writing them differently. In nroff and troff, this is done by embedding the null-character .B \e& into the keyword. .SH BUGS The .B \-d option sometimes gets confused, and accepts no date before 1970. .br ./usr/man/man1/ident.1 444 0 0 2606 5316132316 13161 0ustar rootsystem.de Id .ds Rv \\$3 .ds Dt \\$4 .ds iD \\$3 \\$4 \\$5 \\$6 \\$7 .. .Id $Id: ident.1,v 5.0 1990/08/22 09:09:36 eggert Exp $ .ds r \s-1RCS\s0 .if n .ds - \%-- .if t .ds - \(em .TH IDENT 1 \*(Dt GNU .SH NAME ident \- identify files .SH SYNOPSIS .B ident [ .B \-q ] [ .I file \&.\|.\|. ] .SH DESCRIPTION .B ident searches for all occurrences of the pattern .BI $ keyword : .\|.\|. $ in the named files or, if no file name appears, the standard input. .PP These patterns are normally inserted automatically by the \*r command .BR co (1), but can also be inserted manually. The option .B \-q suppresses the warning given if there are no patterns in a file. .PP .B ident works on text files as well as object files and dumps. For example, if the C program in .B f.c contains .IP \f3char rcsid[] = \&"$\&Id: f.c,v \*(iD $\&";\fP .LP and .B f.c is compiled into .BR f.o , then the command .IP .B "ident f.c f.o" .LP will output .nf .IP .ft 3 f.c: $\&Id: f.c,v \*(iD $ f.o: $\&Id: f.c,v \*(iD $ .ft .fi .SH IDENTIFICATION Author: Walter F. Tichy. .br Revision Number: \*(Rv; Release Date: \*(Dt. .br Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. .br Copyright \(co 1990 by Paul Eggert. .SH "SEE ALSO" ci(1), co(1), rcs(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1), rcsfile(5) .br Walter F. Tichy, \*r\*-A System for Version Control, .I "Software\*-Practice & Experience" .BR 15 , 7 (July 1985), 637-654. ./usr/man/man1/merge.1 444 0 0 3373 5316132316 13157 0ustar rootsystem.de Id .ds Rv \\$3 .ds Dt \\$4 .. .Id $Id: merge.1,v 5.3 1991/02/28 19:18:45 eggert Exp $ .TH MERGE 1 \*(Dt GNU .SH NAME merge \- three-way file merge .SH SYNOPSIS .B merge [ .B \-L .I label1 [ .B \-L .I label3 ] ] [ .B \-p ] [ .B \-q ] .I "file1 file2 file3" .SH DESCRIPTION .B merge incorporates all changes that lead from .I file2 to .I file3 into .IR file1 . The result goes to standard output if .B \-p is present, into .I file1 otherwise. .B merge is useful for combining separate changes to an original. Suppose .I file2 is the original, and both .I file1 and .I file3 are modifications of .IR file2 . Then .B merge combines both changes. .PP An overlap occurs if both .I file1 and .I file3 have changes in a common segment of lines. On a few older hosts where .B diff3 does not support the .B \-E option, .B merge does not detect overlaps, and merely supplies the changed lines from .I file3. On most hosts, if overlaps occur, .B merge outputs a message (unless the .B \-q option is given), and includes both alternatives in the result. The alternatives are delimited as follows: .LP .RS .nf .BI <<<<<<< " file1" .I "lines in file1" .B "=======" .I "lines in file3" .BI >>>>>>> " file3" .RE .fi .LP If there are overlaps, the user should edit the result and delete one of the alternatives. If the .BI \-L "\ label1" and .BI \-L "\ label3" options are given, the labels are output in place of the names .I file1 and .I file3 in overlap reports. .SH DIAGNOSTICS Exit status is 0 for no overlaps, 1 for some overlaps, 2 for trouble. .SH IDENTIFICATION Author: Walter F. Tichy. .br Revision Number: \*(Rv; Release Date: \*(Dt. .br Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. .br Copyright \(co 1990, 1991 by Paul Eggert. .SH SEE ALSO diff3(1), diff(1), rcsmerge(1), co(1). ./usr/man/man1/rcs.1 444 0 0 20702 5316132316 12662 0ustar rootsystem.de Id .ds Rv \\$3 .ds Dt \\$4 .. .Id $Id: rcs.1,v 5.6 1991/09/26 23:16:17 eggert Exp $ .ds r \&\s-1RCS\s0 .if n .ds - \%-- .if t .ds - \(em .TH RCS 1 \*(Dt GNU .SH NAME rcs \- change RCS file attributes .SH SYNOPSIS .B rcs .RI [ " options " ] " file " .\|.\|. .SH DESCRIPTION .B rcs creates new \*r files or changes attributes of existing ones. An \*r file contains multiple revisions of text, an access list, a change log, descriptive text, and some control attributes. For .B rcs to work, the caller's login name must be on the access list, except if the access list is empty, the caller is the owner of the file or the superuser, or the .B \-i option is present. .PP Pathnames matching an \*r suffix denote \*r files; all others denote working files. Names are paired as explained in .BR ci (1). Revision numbers use the syntax described in .BR ci (1). .SH OPTIONS .TP .B \-i Create and initialize a new \*r file, but do not deposit any revision. If the \*r file has no path prefix, try to place it first into the subdirectory .BR ./RCS , and then into the current directory. If the \*r file already exists, print an error message. .TP .BI \-a "logins" Append the login names appearing in the comma-separated list .I logins to the access list of the \*r file. .TP .BI \-A "oldfile" Append the access list of .I oldfile to the access list of the \*r file. .TP .BR \-e [\f2logins\fP] Erase the login names appearing in the comma-separated list .I logins from the access list of the \*r file. If .I logins is omitted, erase the entire access list. .TP .BR \-b [\f2rev\fP] Set the default branch to .IR rev . If .I rev is omitted, the default branch is reset to the (dynamically) highest branch on the trunk. .TP .BI \-c string sets the comment leader to .IR string . The comment leader is printed before every log message line generated by the keyword .B $\&Log$ during checkout (see .BR co (1)). This is useful for programming languages without multi-line comments. An initial .B ci , or an .B "rcs\ \-i" without .BR \-c , guesses the comment leader from the suffix of the working file. .TP .BI \-k subst Set the default keyword substitution to .IR subst . The effect of keyword substitution is described in .BR co (1). Giving an explicit .B \-k option to .BR co , .BR rcsdiff , and .B rcsmerge overrides this default. Beware .BR "rcs\ \-kv", because .B \-kv is incompatible with .BR "co\ \-l". Use .B "rcs\ \-kkv" to restore the normal default keyword substitution. .TP .BR \-l [\f2rev\fP] Lock the revision with number .IR rev . If a branch is given, lock the latest revision on that branch. If .I rev is omitted, lock the latest revision on the default branch. Locking prevents overlapping changes. A lock is removed with .B ci or .B "rcs\ \-u" (see below). .TP .BR \-u [\f2rev\fP] Unlock the revision with number .IR rev . If a branch is given, unlock the latest revision on that branch. If .I rev is omitted, remove the latest lock held by the caller. Normally, only the locker of a revision may unlock it. Somebody else unlocking a revision breaks the lock. This causes a mail message to be sent to the original locker. The message contains a commentary solicited from the breaker. The commentary is terminated by end-of-file or by a line containing .BR \&. "\ by" itself. .TP .B \-L Set locking to .IR strict . Strict locking means that the owner of an \*r file is not exempt from locking for checkin. This option should be used for files that are shared. .TP .B \-U Set locking to non-strict. Non-strict locking means that the owner of a file need not lock a revision for checkin. This option should .I not be used for files that are shared. Whether default locking is strict is determined by your system administrator, but it is normally strict. .TP \f3\-m\fP\f2rev\fP\f3:\fP\f2msg\fP Replace revision .IR rev 's log message with .IR msg . .TP \f3\-n\fP\f2name\fP[\f3:\fP[\f2rev\fP]] Associate the symbolic name .I name with the branch or revision .IR rev . Delete the symbolic name if both .B : and .I rev are omitted; otherwise, print an error message if .I name is already associated with another number. If .I rev is symbolic, it is expanded before association. A .I rev consisting of a branch number followed by a .B .\& stands for the current latest revision in the branch. A .B : with an empty .I rev stands for the current latest revision on the default branch, normally the trunk. For example, .BI "rcs\ \-n" name ":\ RCS/*" associates .I name with the current latest revision of all the named \*r files; this contrasts with .BI "rcs\ \-n" name ":$\ RCS/*" which associates .I name with the revision numbers extracted from keyword strings in the corresponding working files. .TP \f3\-N\fP\f2name\fP[\f3:\fP[\f2rev\fP]] Act like .BR \-n , except override any previous assignment of .IR name . .TP .BI \-o range deletes (\*(lqoutdates\*(rq) the revisions given by .IR range . A range consisting of a single revision number means that revision. A range consisting of a branch number means the latest revision on that branch. A range of the form .IB rev1 : rev2 means revisions .I rev1 to .I rev2 on the same branch, .BI : rev means from the beginning of the branch containing .I rev up to and including .IR rev , and .IB rev : means from revision .I rev to the end of the branch containing .IR rev . None of the outdated revisions may have branches or locks. .TP .B \-q Run quietly; do not print diagnostics. .TP .B \-I Run interactively, even if the standard input is not a terminal. .TP .B \-s\f2state\fP\f1[\fP:\f2rev\fP\f1]\fP Set the state attribute of the revision .I rev to .I state . If .I rev is a branch number, assume the latest revision on that branch. If .I rev is omitted, assume the latest revision on the default branch. Any identifier is acceptable for .IR state . A useful set of states is .B Exp (for experimental), .B Stab (for stable), and .B Rel (for released). By default, .BR ci (1) sets the state of a revision to .BR Exp . .TP .BR \-t [\f2file\fP] Write descriptive text from the contents of the named .I file into the \*r file, deleting the existing text. The .IR file pathname may not begin with .BR \- . If .I file is omitted, obtain the text from standard input, terminated by end-of-file or by a line containing .BR \&. "\ by" itself. Prompt for the text if interaction is possible; see .BR \-I . With .BR \-i , descriptive text is obtained even if .B \-t is not given. .TP .BI \-t\- string Write descriptive text from the .I string into the \*r file, deleting the existing text. .TP .BI \-V n Emulate \*r version .IR n . See .BR co (1) for details. .TP .BI \-x "suffixes" Use .I suffixes to characterize \*r files. See .BR ci (1) for details. .SH COMPATIBILITY The .BI \-b rev option generates an \*r file that cannot be parsed by \*r version 3 or earlier. .PP The .BI \-k subst options (except .BR \-kkv ) generate an \*r file that cannot be parsed by \*r version 4 or earlier. .PP Use .BI "rcs \-V" n to make an \*r file acceptable to \*r version .I n by discarding information that would confuse version .IR n . .PP \*r version 5.5 and earlier does not support the .B \-x option, and requires a .B ,v suffix on an \*r pathname. .SH FILES .B rcs accesses files much as .BR ci (1) does, except that it uses the effective user for all accesses, it does not write the working file or its directory, and it does not even read the working file unless a revision number of .B $ is specified. .SH ENVIRONMENT .TP .B \s-1RCSINIT\s0 options prepended to the argument list, separated by spaces. See .BR ci (1) for details. .SH DIAGNOSTICS The \*r pathname and the revisions outdated are written to the diagnostic output. The exit status is zero if and only if all operations were successful. .SH IDENTIFICATION Author: Walter F. Tichy. .br Revision Number: \*(Rv; Release Date: \*(Dt. .br Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. .br Copyright \(co 1990, 1991 by Paul Eggert. .SH "SEE ALSO" co(1), ci(1), ident(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1), rcsfile(5) .br Walter F. Tichy, \*r\*-A System for Version Control, .I "Software\*-Practice & Experience" .BR 15 , 7 (July 1985), 637-654. .SH BUGS The separator for revision ranges in the .B \-o option used to be .B \- instead of .BR : , but this leads to confusion when symbolic names contain .BR \- . For backwards compatibility .B "rcs \-o" still supports the old .B \- separator, but it warns about this obsolete use. .PP Symbolic names need not refer to existing revisions or branches. For example, the .B \-o option does not remove symbolic names for the outdated revisions; you must use .B \-n to remove the names. .br ./usr/man/man1/rcsdiff.1 444 0 0 5371 5316132316 13500 0ustar rootsystem.de Id .ds Rv \\$3 .ds Dt \\$4 .. .Id $Id: rcsdiff.1,v 5.3 1991/04/21 12:00:46 eggert Exp $ .ds r \&\s-1RCS\s0 .if n .ds - \%-- .if t .ds - \(em .TH RCSDIFF 1 \*(Dt GNU .SH NAME rcsdiff \- compare RCS revisions .SH SYNOPSIS .B rcsdiff [ .BI \-k subst ] [ .B \-q ] [ .BI \-r rev1 [ .BI \-r rev2 ] ] [ .BI \-V n ] [ .BI \-x suffixes ] [ .I "diff options" ] .I "file .\|.\|." .SH DESCRIPTION .B rcsdiff runs .BR diff (1) to compare two revisions of each \*r file given. .PP Pathnames matching an \*r suffix denote \*r files; all others denote working files. Names are paired as explained in .BR ci (1). .PP The option .B \-q suppresses diagnostic output. Zero, one, or two revisions may be specified with .BR \-r . The option .BI \-k subst affects keyword substitution when extracting revisions, as described in .BR co (1); for example, .B "\-kk\ \-r1.1\ \-r1.2" ignores differences in keyword values when comparing revisions .B 1.1 and .BR 1.2 . To avoid excess output from locker name substitution, .B \-kkvl is assumed if (1) at most one revision option is given, (2) no .B \-k option is given, (3) .B \-kkv is the default keyword substitution, and (4) the working file's mode would be produced by .BR "co\ \-l". See .BR co (1) for details about .B \-V and .BR \-x . Otherwise, all options of .BR diff (1) that apply to regular files are accepted, with the same meaning as for .BR diff . .PP If both .I rev1 and .I rev2 are omitted, .B rcsdiff compares the latest revision on the default branch (by default the trunk) with the contents of the corresponding working file. This is useful for determining what you changed since the last checkin. .PP If .I rev1 is given, but .I rev2 is omitted, .B rcsdiff compares revision .I rev1 of the \*r file with the contents of the corresponding working file. .PP If both .I rev1 and .I rev2 are given, .B rcsdiff compares revisions .I rev1 and .I rev2 of the \*r file. .PP Both .I rev1 and .I rev2 may be given numerically or symbolically. .SH EXAMPLE The command .LP .B " rcsdiff f.c" .LP compares the latest revision on the default branch of the \*r file to the contents of the working file .BR f.c . .SH ENVIRONMENT .TP .B \s-1RCSINIT\s0 options prepended to the argument list, separated by spaces. See .BR ci (1) for details. .SH DIAGNOSTICS Exit status is 0 for no differences during any comparison, 1 for some differences, 2 for trouble. .SH IDENTIFICATION Author: Walter F. Tichy. .br Revision Number: \*(Rv; Release Date: \*(Dt. .br Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. .br Copyright \(co 1990, 1991 by Paul Eggert. .SH "SEE ALSO" ci(1), co(1), diff(1), ident(1), rcs(1), rcsintro(1), rcsmerge(1), rlog(1) .br Walter F. Tichy, \*r\*-A System for Version Control, .I "Software\*-Practice & Experience" .BR 15 , 7 (July 1985), 637-654. .br ./usr/man/man1/rcsintro.1 444 0 0 22123 5316132316 13735 0ustar rootsystem.de Id .ds Rv \\$3 .ds Dt \\$4 .. .Id $Id: rcsintro.1,v 5.1 1991/04/21 12:00:46 eggert Exp $ .ds r \&\s-1RCS\s0 .if n .ds - \%-- .if t .ds - \(em .am SS .LP .. .TH RCSINTRO 1 \*(Dt GNU .SH NAME rcsintro \- introduction to RCS commands .SH DESCRIPTION The Revision Control System (\*r) manages multiple revisions of files. \*r automates the storing, retrieval, logging, identification, and merging of revisions. \*r is useful for text that is revised frequently, for example programs, documentation, graphics, papers, and form letters. .PP The basic user interface is extremely simple. The novice only needs to learn two commands: .BR ci (1) and .BR co (1). .BR ci , short for \*(lqcheck in\*(rq, deposits the contents of a file into an archival file called an \*r file. An \*r file contains all revisions of a particular file. .BR co , short for \*(lqcheck out\*(rq, retrieves revisions from an \*r file. .SS "Functions of \*r" .IP \(bu Store and retrieve multiple revisions of text. \*r saves all old revisions in a space efficient way. Changes no longer destroy the original, because the previous revisions remain accessible. Revisions can be retrieved according to ranges of revision numbers, symbolic names, dates, authors, and states. .IP \(bu Maintain a complete history of changes. \*r logs all changes automatically. Besides the text of each revision, \*r stores the author, the date and time of check-in, and a log message summarizing the change. The logging makes it easy to find out what happened to a module, without having to compare source listings or having to track down colleagues. .IP \(bu Resolve access conflicts. When two or more programmers wish to modify the same revision, \*r alerts the programmers and prevents one modification from corrupting the other. .IP \(bu Maintain a tree of revisions. \*r can maintain separate lines of development for each module. It stores a tree structure that represents the ancestral relationships among revisions. .IP \(bu Merge revisions and resolve conflicts. Two separate lines of development of a module can be coalesced by merging. If the revisions to be merged affect the same sections of code, \*r alerts the user about the overlapping changes. .IP \(bu Control releases and configurations. Revisions can be assigned symbolic names and marked as released, stable, experimental, etc. With these facilities, configurations of modules can be described simply and directly. .IP \(bu Automatically identify each revision with name, revision number, creation time, author, etc. The identification is like a stamp that can be embedded at an appropriate place in the text of a revision. The identification makes it simple to determine which revisions of which modules make up a given configuration. .IP \(bu Minimize secondary storage. \*r needs little extra space for the revisions (only the differences). If intermediate revisions are deleted, the corresponding deltas are compressed accordingly. .SS "Getting Started with \*r" Suppose you have a file .B f.c that you wish to put under control of \*r. If you have not already done so, make an \*r directory with the command .IP .B "mkdir RCS" .LP Then invoke the check-in command .IP .B "ci f.c" .LP This command creates an \*r file in the .B RCS directory, stores .B f.c into it as revision 1.1, and deletes .BR f.c . It also asks you for a description. The description should be a synopsis of the contents of the file. All later check-in commands will ask you for a log entry, which should summarize the changes that you made. .PP Files in the \*r directory are called \*r files; the others are called working files. To get back the working file .B f.c in the previous example, use the check-out command .IP .B "co f.c" .LP This command extracts the latest revision from the \*r file and writes it into .BR f.c . If you want to edit .BR f.c , you must lock it as you check it out with the command .IP .B "co \-l f.c" .LP You can now edit .BR f.c . .PP Suppose after some editing you want to know what changes that you have made. The command .IP .B "rcsdiff f.c" .LP tells you the difference between the most recently checked-in version and the working file. You can check the file back in by invoking .IP .B "ci f.c" .LP This increments the revision number properly. .PP If .B ci complains with the message .IP .BI "ci error: no lock set by " "your name" .LP then you have tried to check in a file even though you did not lock it when you checked it out. Of course, it is too late now to do the check-out with locking, because another check-out would overwrite your modifications. Instead, invoke .IP .B "rcs \-l f.c" .LP This command will lock the latest revision for you, unless somebody else got ahead of you already. In this case, you'll have to negotiate with that person. .PP Locking assures that you, and only you, can check in the next update, and avoids nasty problems if several people work on the same file. Even if a revision is locked, it can still be checked out for reading, compiling, etc. All that locking prevents is a .I "check-in" by anybody but the locker. .PP If your \*r file is private, i.e., if you are the only person who is going to deposit revisions into it, strict locking is not needed and you can turn it off. If strict locking is turned off, the owner of the \*r file need not have a lock for check-in; all others still do. Turning strict locking off and on is done with the commands .IP .BR "rcs \-U f.c" " and " "rcs \-L f.c" .LP If you don't want to clutter your working directory with \*r files, create a subdirectory called .B RCS in your working directory, and move all your \*r files there. \*r commands will look first into that directory to find needed files. All the commands discussed above will still work, without any modification. (Actually, pairs of \*r and working files can be specified in three ways: (a) both are given, (b) only the working file is given, (c) only the \*r file is given. Both \*r and working files may have arbitrary path prefixes; \*r commands pair them up intelligently.) .PP To avoid the deletion of the working file during check-in (in case you want to continue editing or compiling), invoke .IP .BR "ci \-l f.c" " or " "ci \-u f.c" .LP These commands check in .B f.c as usual, but perform an implicit check-out. The first form also locks the checked in revision, the second one doesn't. Thus, these options save you one check-out operation. The first form is useful if you want to continue editing, the second one if you just want to read the file. Both update the identification markers in your working file (see below). .PP You can give .B ci the number you want assigned to a checked in revision. Assume all your revisions were numbered 1.1, 1.2, 1.3, etc., and you would like to start release 2. The command .IP .BR "ci \-r2 f.c" " or " "ci \-r2.1 f.c" .LP assigns the number 2.1 to the new revision. From then on, .B ci will number the subsequent revisions with 2.2, 2.3, etc. The corresponding .B co commands .IP .BR "co \-r2 f.c" " and " "co \-r2.1 f.c" .PP retrieve the latest revision numbered .RI 2. x and the revision 2.1, respectively. .B co without a revision number selects the latest revision on the .IR trunk , i.e. the highest revision with a number consisting of two fields. Numbers with more than two fields are needed for branches. For example, to start a branch at revision 1.3, invoke .IP .B "ci \-r1.3.1 f.c" .LP This command starts a branch numbered 1 at revision 1.3, and assigns the number 1.3.1.1 to the new revision. For more information about branches, see .BR rcsfile (5). .SS "Automatic Identification" \*r can put special strings for identification into your source and object code. To obtain such identification, place the marker .IP .B "$\&Id$" .LP into your text, for instance inside a comment. \*r will replace this marker with a string of the form .IP .BI $\&Id: " filename revision date time author state " $ .LP With such a marker on the first page of each module, you can always see with which revision you are working. \*r keeps the markers up to date automatically. To propagate the markers into your object code, simply put them into literal character strings. In C, this is done as follows: .IP .ft 3 static char rcsid[] = \&"$\&Id$\&"; .ft .LP The command .B ident extracts such markers from any file, even object code and dumps. Thus, .B ident lets you find out which revisions of which modules were used in a given program. .PP You may also find it useful to put the marker .B $\&Log$ into your text, inside a comment. This marker accumulates the log messages that are requested during check-in. Thus, you can maintain the complete history of your file directly inside it. There are several additional identification markers; see .BR co (1) for details. .SH IDENTIFICATION Author: Walter F. Tichy. .br Revision Number: \*(Rv; Release Date: \*(Dt. .br Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. .br Copyright \(co 1990, 1991 by Paul Eggert. .SH "SEE ALSO" ci(1), co(1), ident(1), rcs(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1) .br Walter F. Tichy, \*r\*-A System for Version Control, .I "Software\*-Practice & Experience" .BR 15 , 7 (July 1985), 637-654. .br ./usr/man/man1/rcsmerge.1 444 0 0 6351 5316132316 13666 0ustar rootsystem.de Id .ds Rv \\$3 .ds Dt \\$4 .. .Id $Id: rcsmerge.1,v 5.3 1991/08/19 03:13:55 eggert Exp $ .ds r \&\s-1RCS\s0 .if n .ds - \%-- .if t .ds - \(em .TH RCSMERGE 1 \*(Dt GNU .SH NAME rcsmerge \- merge RCS revisions .SH SYNOPSIS .B rcsmerge .RI [ options ] " file" .SH DESCRIPTION .B rcsmerge incorporates the changes between two revisions of an \*r file into the corresponding working file. .PP Pathnames matching an \*r suffix denote \*r files; all others denote working files. Names are paired as explained in .BR ci (1). .PP At least one revision must be specified with one of the options described below, usually .BR \-r . At most two revisions may be specified. If only one revision is specified, the latest revision on the default branch (normally the highest branch on the trunk) is assumed for the second revision. Revisions may be specified numerically or symbolically. .PP .B rcsmerge prints a warning if there are overlaps, and delimits the overlapping regions as explained in .BR merge (1). The command is useful for incorporating changes into a checked-out revision. .SH OPTIONS .TP .BI \-k subst Use .I subst style keyword substitution. See .BR co (1) for details. For example, .B "\-kk\ \-r1.1\ \-r1.2" ignores differences in keyword values when merging the changes from .B 1.1 to .BR 1.2 . .TP .BR \-p [\f2rev\fP] Send the result to standard output instead of overwriting the working file. .TP .BR \-q [\f2rev\fP] Run quietly; do not print diagnostics. .TP .BR \-r [\f2rev\fP] Merge with respect to revision .IR rev . Here an empty .I rev stands for the latest revision on the default branch, normally the head. .TP .BI \-V n Emulate \*r version .IR n . See .BR co (1) for details. .TP .BI \-x "suffixes" Use .I suffixes to characterize \*r files. See .BR ci (1) for details. .SH EXAMPLES Suppose you have released revision 2.8 of .BR f.c . Assume furthermore that after you complete an unreleased revision 3.4, you receive updates to release 2.8 from someone else. To combine the updates to 2.8 and your changes between 2.8 and 3.4, put the updates to 2.8 into file f.c and execute .LP .B " rcsmerge \-p \-r2.8 \-r3.4 f.c >f.merged.c" .PP Then examine .BR f.merged.c . Alternatively, if you want to save the updates to 2.8 in the \*r file, check them in as revision 2.8.1.1 and execute .BR "co \-j": .LP .B " ci \-r2.8.1.1 f.c" .br .B " co \-r3.4 \-j2.8:2.8.1.1 f.c" .PP As another example, the following command undoes the changes between revision 2.4 and 2.8 in your currently checked out revision in .BR f.c . .LP .B " rcsmerge \-r2.8 \-r2.4 f.c" .PP Note the order of the arguments, and that .B f.c will be overwritten. .SH ENVIRONMENT .TP .B \s-1RCSINIT\s0 options prepended to the argument list, separated by spaces. See .BR ci (1) for details. .SH DIAGNOSTICS Exit status is 0 for no overlaps, 1 for some overlaps, 2 for trouble. .SH IDENTIFICATION Author: Walter F. Tichy. .br Revision Number: \*(Rv; Release Date: \*(Dt. .br Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. .br Copyright \(co 1990, 1991 by Paul Eggert. .SH "SEE ALSO" ci(1), co(1), ident(1), merge(1), rcs(1), rcsdiff(1), rcsintro(1), rlog(1), rcsfile(5) .br Walter F. Tichy, \*r\*-A System for Version Control, .I "Software\*-Practice & Experience" .BR 15 , 7 (July 1985), 637-654. .br ./usr/man/man1/rlog.1 444 0 0 13101 5316132316 13031 0ustar rootsystem.de Id .ds Rv \\$3 .ds Dt \\$4 .. .Id $Id: rlog.1,v 5.3 1991/08/22 06:50:48 eggert Exp $ .ds g \&\s-1UTC\s0 .ds r \&\s-1RCS\s0 .if n .ds - \%-- .if t .ds - \(em .TH RLOG 1 \*(Dt GNU .SH NAME rlog \- print log messages and other information about RCS files .SH SYNOPSIS .B rlog .RI [ " options " ] " file " .\|.\|. .SH DESCRIPTION .B rlog prints information about \*r files. .PP Pathnames matching an \*r suffix denote \*r files; all others denote working files. Names are paired as explained in .BR ci (1). .PP .B rlog prints the following information for each \*r file: \*r pathname, working pathname, head (i.e., the number of the latest revision on the trunk), default branch, access list, locks, symbolic names, suffix, total number of revisions, number of revisions selected for printing, and descriptive text. This is followed by entries for the selected revisions in reverse chronological order for each branch. For each revision, .B rlog prints revision number, author, date/time, state, number of lines added/deleted (with respect to the previous revision), locker of the revision (if any), and log message. All times are displayed in Coordinated Universal Time (\*g). Without options, .B rlog prints complete information. The options below restrict this output. .nr n \w'\f3\-V\fP\f2n\fP '+1n-1/1n .TP \nn .B \-L Ignore \*r files that have no locks set. This is convenient in combination with .BR \-h , .BR \-l , and .BR \-R . .TP .B \-R Print only the name of the \*r file. This is convenient for translating a working pathname into an \*r pathname. .TP .B \-h Print only the \*r pathname, working pathname, head, default branch, access list, locks, symbolic names, and suffix. .TP .B \-t Print the same as .BR \-h , plus the descriptive text. .TP .B \-b Print information about the revisions on the default branch, normally the highest branch on the trunk. .TP .BI \-d "dates" Print information about revisions with a checkin date/time in the ranges given by the semicolon-separated list of .IR dates . A range of the form .IB d1 < d2 or .IB d2 > d1 selects the revisions that were deposited between .I d1 and .I d2 inclusive. A range of the form .BI < d or .IB d > selects all revisions dated .I d or earlier. A range of the form .IB d < or .BI > d selects all revisions dated .I d or later. A range of the form .I d selects the single, latest revision dated .I d or earlier. The date/time strings .IR d , .IR d1 , and .I d2 are in the free format explained in .BR co (1). Quoting is normally necessary, especially for .B < and .BR > . Note that the separator is a semicolon. .TP .BR \-l [\f2lockers\fP] Print information about locked revisions only. In addition, if the comma-separated list .I lockers of login names is given, ignore all locks other than those held by the .IR lockers . For example, .B "rlog\ \-L\ \-R\ \-lwft\ RCS/*" prints the name of \*r files locked by the user .BR wft . .TP .BR \-r [\f2revisions\fP] prints information about revisions given in the comma-separated list .I revisions of revisions and ranges. A range .IB rev1 : rev2 means revisions .I rev1 to .I rev2 on the same branch, .BI : rev means revisions from the beginning of the branch up to and including .IR rev , and .IB rev : means revisions starting with .I rev to the end of the branch containing .IR rev . An argument that is a branch means all revisions on that branch. A range of branches means all revisions on the branches in that range. A branch followed by a .B .\& means the latest revision in that branch. A bare .B \-r with no .I revisions means the latest revision on the default branch, normally the trunk. .TP .BI \-s states prints information about revisions whose state attributes match one of the states given in the comma-separated list .IR states . .TP .BR \-w [\f2logins\fP] prints information about revisions checked in by users with login names appearing in the comma-separated list .IR logins . If .I logins is omitted, the user's login is assumed. .TP .BI \-V n Emulate \*r version .I n when generating logs. See .BR co (1) for more. .TP .BI \-x "suffixes" Use .I suffixes to characterize \*r files. See .BR ci (1) for details. .PP .B rlog prints the intersection of the revisions selected with the options .BR \-d , .BR \-l , .BR \-s , and .BR \-w , intersected with the union of the revisions selected by .B \-b and .BR \-r . .SH EXAMPLES .LP .nf .B " rlog \-L \-R RCS/*" .B " rlog \-L \-h RCS/*" .B " rlog \-L \-l RCS/*" .B " rlog RCS/*" .fi .LP The first command prints the names of all \*r files in the subdirectory .B RCS that have locks. The second command prints the headers of those files, and the third prints the headers plus the log messages of the locked revisions. The last command prints complete information. .SH ENVIRONMENT .TP .B \s-1RCSINIT\s0 options prepended to the argument list, separated by spaces. See .BR ci (1) for details. .SH DIAGNOSTICS The exit status is zero if and only if all operations were successful. .SH IDENTIFICATION Author: Walter F. Tichy. .br Revision Number: \*(Rv; Release Date: \*(Dt. .br Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. .br Copyright \(co 1990, 1991 by Paul Eggert. .SH "SEE ALSO" ci(1), co(1), ident(1), rcs(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rcsfile(5) .br Walter F. Tichy, \*r\*-A System for Version Control, .I "Software\*-Practice & Experience" .BR 15 , 7 (July 1985), 637-654. .SH BUGS The separator for revision ranges in the .B \-r option used to be .B \- instead of .BR : , but this leads to confusion when symbolic names contain .BR \- . For backwards compatibility .B "rlog \-r" still supports the old .B \- separator, but it warns about this obsolete use. .br ./usr/man/man5/rcsfile.5 444 0 0 14173 5316132316 13537 0ustar rootsystem.de Id .ds Rv \\$3 .ds Dt \\$4 .. .Id $Id: rcsfile.5,v 5.1 1991/08/19 03:13:55 eggert Exp $ .ds r \s-1RCS\s0 .if n .ds - \%-- .if t .ds - \(em .TH RCSFILE 5 \*(Dt GNU .SH NAME rcsfile \- format of RCS file .SH DESCRIPTION An \*r file's contents are described by the grammar below. .PP The text is free format: space, backspace, tab, newline, vertical tab, form feed, and carriage return (collectively, .IR "white space") have no significance except in strings. However, an \*r file must end in a newline character. .PP Strings are enclosed by .BR @ . If a string contains a .BR @ , it must be doubled; otherwise, strings may contain arbitrary binary data. .PP The meta syntax uses the following conventions: `|' (bar) separates alternatives; `{' and `}' enclose optional phrases; `{' and `}*' enclose phrases that may be repeated zero or more times; `{' and '}+' enclose phrases that must appear at least once and may be repeated; Terminal symbols are in .BR boldface ; nonterminal symbols are in .IR italics . .LP .nr x \w'\f3branches\fP' .nr y \w'{ \f3comment\fP' .if \nx<\ny .nr x \ny .nr y \w'\f3{ branch\fP' .if \nx<\ny .nr x \ny .ta \w'\f2deltatext\fP 'u +\w'::= 'u +\nxu+\w' 'u .fc ~ .nf \f2rcstext\fP ::= \f2admin\fP {\f2delta\fP}* \f2desc\fP {\f2deltatext\fP}* .LP \f2admin\fP ::= \f3head\fP {\f2num\fP}\f3;\fP { \f3branch\fP {\f2num\fP}\f3;\fP } \f3access\fP {\f2id\fP}*\f3;\fP \f3symbols\fP {\f2id\fP \f3:\fP \f2num\fP}*\f3;\fP \f3locks\fP {\f2id\fP \f3:\fP \f2num\fP}*\f3;\fP {\f3strict ;\fP} { \f3comment\fP {\f2string\fP}\f3;\fP } { \f3expand\fP {\f2string\fP}\f3;\fP } { \f2newphrase\fP }* .LP \f2delta\fP ::= \f2num\fP \f3date\fP \f2num\fP\f3;\fP \f3author\fP \f2id\fP\f3;\fP \f3state\fP {\f2id\fP}\f3;\fP \f3branches\fP {\f2num\fP}*\f3;\fP \f3next\fP {\f2num\fP}\f3;\fP { \f2newphrase\fP }* .LP \f2desc\fP ::= \f3desc\fP \f2string\fP .LP \f2deltatext\fP ::= \f2num\fP \f3log\fP \f2string\fP { \f2newphrase\fP }* \f3text\fP \f2string\fP .LP \f2num\fP ::= {\f2digit\fP{\f3.\fP}}+ .LP \f2digit\fP ::= \f30\fP | \f31\fP | .\|.\|. | \f39\fP .LP \f2id\fP ::= \f2letter\fP{\f2idchar\fP}* .LP \f2letter\fP ::= any letter .LP \f2idchar\fP ::= any visible graphic character except \f2special\fP .LP \f2special\fP ::= \f3$\fP | \f3,\fP | \f3.\fP | \f3:\fP | \f3;\fP | \f3@\fP .LP \f2string\fP ::= \f3@\fP{any character, with \f3@\fP doubled}*\f3@\fP .LP \f2newphrase\fP ::= \f2id\fP \f2word\fP* \f3;\fP .LP \f2word\fP ::= \f2id\fP | \f2num\fP | \f2string\fP | \f3:\fP .fi .PP Identifiers are case sensitive. Keywords are in lower case only. The sets of keywords and identifiers may overlap. In most environments RCS uses the ISO 8859/1 encoding: letters are octal codes 101\-132, 141\-172, 300\-326, 330\-366 and 370-377, visible graphic characters are codes 041\-176 and 240\-377, and white space characters are codes 010\-015 and 040. .PP The .I newphrase productions in the grammar are reserved for future extensions to the format of \*r files. No .I newphrase will begin with any keyword already in use. .PP The .I delta nodes form a tree. All nodes whose numbers consist of a single pair (e.g., 2.3, 2.1, 1.3, etc.) are on the trunk, and are linked through the .B next field in order of decreasing numbers. The .B head field in the .I admin node points to the head of that sequence (i.e., contains the highest pair). The .B branch node in the admin node indicates the default branch (or revision) for most \*r operations. If empty, the default branch is the highest branch on the trunk. .PP All .I delta nodes whose numbers consist of .RI 2 n fields .RI ( n \(\fP=2) (e.g., 3.1.1.1, 2.1.2.2, etc.) are linked as follows. All nodes whose first .RI 2 n \-1 number fields are identical are linked through the .B next field in order of increasing numbers. For each such sequence, the .I delta node whose number is identical to the first .RI 2 n \-2 number fields of the deltas on that sequence is called the branchpoint. The .B branches field of a node contains a list of the numbers of the first nodes of all sequences for which it is a branchpoint. This list is ordered in increasing numbers. .LP .nf .vs 12 .ne 38 Example: .if t .in +0.5i .cs 1 20 .eo Head | | v / \ --------- / \ / \ / \ | | / \ / \ / \ / \ | 2.1 | / \ / \ / \ / \ | | / \ / \ /1.2.1.3\ /1.3.1.1\ | | /1.2.2.2\ /1.2.2.1.1.1\ --------- --------- --------- --------- ------------- ^ ^ | ^ ^ | | | | | | | v | | / \ | --------- / \ | / \ | \ 1.3 / / \ | / \ ---------\ / / \----------- /1.2.1.1\ \ / /1.2.2.1\ --------- \ / --------- ^ | ^ | | | | v | | --------- | | \ 1.2 / | ----------------------\ /--------- \ / \ / | | v --------- \ 1.1 / \ / \ / \ / .ec .if t .in .cs 1 .ce Fig. 1: A revision tree .vs .fi .PP .SH IDENTIFICATION .de VL \\$2 .. Author: Walter F. Tichy, Purdue University, West Lafayette, IN, 47907. .br Revision Number: \*(Rv; Release Date: \*(Dt. .br Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. .br Copyright \(co 1990, 1991 by Paul Eggert. .SH SEE ALSO ci(1), co(1), ident(1), rcs(1), rcsdiff(1), rcsmerge(1), rlog(1), .br Walter F. Tichy, \*r\*-A System for Version Control, .I "Software\*-Practice & Experience" .BR 15 , 7 (July 1985), 637-654. ./usr/src/rcs/COPYING 444 156 3 43076 5113220517 11425 0ustar mem GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. ./usr/src/rcs/README 444 156 3 42417 5113220520 11242 0ustar memThis directory contains complete sources for RCS version 5.6. RCS, the Revision Control System, manages multiple revisions of files. RCS can store, retrieve, log, identify, and merge revisions. It is useful for files that are revised frequently, e.g. programs, documentation, graphics, and papers. /* Copyright (C) 1982, 1988, 1989 Walter Tichy Copyright 1990, 1991 by Paul Eggert Distributed under license by the Free Software Foundation, Inc. This file is part of RCS. RCS is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. RCS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with RCS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. Report problems and direct all questions to: rcs-bugs@cs.purdue.edu */ $Id: README,v 5.16 1991/11/03 01:09:19 eggert Exp $ Installation notes: RCS requires a diff that supports the -n option. Get GNU diff (version 1.15 or later) if your diff lacks -n. RCS works best with a diff that supports -a and -L, and a diff3 that supports -E and -m. GNU diff supports these options. Sources for RCS are in the src directory. Read the directions in src/README to build RCS on your system. Manual entries reside in man. Troff source for the paper `RCS--A System for Version Control', which appeared in _Software--Practice & Experience_, is in rcs.ms. If you don't have troff, you can get GNU groff to format the documentation. RCS compatibility notes: RCS version 5 reads RCS files written by any RCS version released since 1982. It also writes RCS files that these older versions of RCS can read, unless you use one of the following new features: checkin times after 1999/12/31 23:59:59 GMT checking in non-text files non-Ascii symbolic names rcs -bX, where X is nonempty rcs -kX, where X is not `kv' RCS files that exceed hardcoded limits in older RCS versions A working file written by RCS 5.5 or later contains four-digit years in its keyword strings. If you check out a working file with RCS 5.5 or later, an older RCS version's `ci -k' may insist on two-digit years. Fix this with `co -V4', or by editing the working file. Features new to RCS version 5.6 include: Security holes have been plugged; setgid use is no longer supported. co can retrieve old revisions much more efficiently. To generate the Nth youngest revision on the trunk, the old method used up to N passes through copies of the working file; the new method uses a piece table to generate the working file in one pass. When ci finds no changes in the working file, it automatically reverts to the previous revision unless -f is given. RCS follows symbolic links to RCS files instead of breaking them, and warns when it breaks hard links to RCS files. `$' stands for the revision number taken from working file keyword strings. E.g. if F contains an Id keyword string, `rcsdiff -r$ F' compares F to its checked-in revision, and `rcs -nL:$ F' gives the symbolic name L to F's revision. co and ci's new -M option sets the modification time of the working file to be that of the revision. Without -M, ci now tries to avoid changing the working file's modification time if its contents are unchanged. rcs's new -m option changes the log message of an old revision. RCS is portable to hosts that do not permit `,' in filenames. (`,' is not part of the Posix portable filename character set.) A new -x option specifies extensions other than `,v' for RCS files. The Unix default is `-x,v/', so that the working file `w' corresponds to the first file in the list `RCS/w,v', `w,v', `RCS/w' that works. The non-Unix default is `-x', so that only `RCS/w' is tried. Eventually, the Unix default should change to `-x/,v' to encourage interoperability among all Posix hosts. A new RCSINIT environment variable specifies defaults for options like -x. The separator for revision ranges has been changed from `-' to `:', because the range `A-B' is ambiguous if `A', `B' and `A-B' are all symbolic names. E.g. the old `rlog -r1.5-1.7' is now `rlog -r1.5:1.7'; ditto for `rcs -o'. For a while RCS will still support (but warn about) the old `-' separator. RCS manipulates its lock files using a method that is more reliable under NFS. Experimental support for MS-DOS and OS/2 is available as part of a separate software distribution. Features new to RCS version 5 include: RCS can check in arbitrary files, not just text files, if diff -a works. RCS can merge lines containing just a single `.' if diff3 -m works. GNU diff supports the -a and -m options. RCS can now be used as a setuid program. See ci(1) for how users can employ setuid copies of ci, co, and rcsclean. Setuid privileges yield extra security if the effective user owns RCS files and directories, and if only the effective user can write RCS directories. RCS uses the real user for all accesses other than writing RCS directories. As described in ci(1), there are three levels of setuid support. 1. Setuid works fully if the seteuid() system call lets any process switch back and forth between real and effective users, as specified in Posix 1003.1a Draft 5. 2. On hosts with saved setuids (a Posix 1003.1-1990 option) and without a modern seteuid(), setuid works unless the real or effective user is root. 3. On hosts that lack both modern seteuid() and saved setuids, setuid does not work, and RCS uses the effective user for all accesses; formerly it was inconsistent. New options to co, rcsdiff, and rcsmerge give more flexibility to keyword substitution. -kkv substitutes the default `$Keyword: value $' for keyword strings. However, a locker's name is inserted only as a file is being locked, i.e. by `ci -l' and `co -l'. This is normally the default. -kkvl acts like -kkv, except that a locker's name is always inserted if the given revision is currently locked. This was the default in version 4. It is now the default only with when using rcsdiff to compare a revision to a working file whose mode is that of a file checked out for changes. -kk substitutes just `$Keyword$', which helps to ignore keyword values when comparing revisions. -ko retrieves the old revision's keyword string, thus bypassing keyword substitution. -kv retrieves just `value'. This can ease the use of keyword values, but it is dangerous because it causes RCS to lose track of where the keywords are, so for safety the owner write permission of the working file is turned off when -kv is used; to edit the file later, check it out again without -kv. rcs -ko sets the default keyword substitution to be in the style of co -ko, and similarly for the other -k options. This can be useful with binary file formats that cannot tolerate changing the lengths of keyword strings. However it also renders a RCS file readable only by RCS version 5 or later. Use rcs -kkv to restore the usual default substitution. RCS can now be used by development groups that span timezone boundaries. All times are now displayed in GMT, and GMT is the default timezone. To use local time with co -d, append ` LT' to the time. When interchanging RCS files with sites running older versions of RCS, time stamp discrepancies may prevent checkins; to work around this, use `ci -d' with a time slightly in the future. Dates are now displayed using four-digit years, not two-digit years. Years given in -d options must now have four digits. This change is required for RCS to continue to work after 1999/12/31. The form of dates in version 5 RCS files will not change until 2000/01/01, so in the meantime RCS files can still be interchanged with sites running older versions of RCS. To make room for the longer dates, rlog now outputs `lines: +A -D' instead of `lines added/del: A/D'. To help prevent diff programs that are broken or have run out of memory from trashing an RCS file, ci now checks diff output more carefully. ci -k now handles the Log keyword, so that checking in a file with -k does not normally alter the file's contents. RCS no longer outputs white space at the ends of lines unless the original working file had it. For consistency with other keywords, a space, not a tab, is now output after `$Log:'. Rlog now puts lockers and symbolic names on separate lines in the output to avoid generating lines that are too long. A similar fix has been made to lists in the RCS files themselves. RCS no longer outputs the string `Locker: ' when expanding Header or Id keywords. This saves space and reverts back to version 3 behavior. The default branch is not put into the RCS file unless it is nonempty. Therefore, files generated by RCS version 5 can be read by RCS version 3 unless they use the default branch feature introduced in version 4. This fixes a compatibility problem introduced by version 4. RCS can now emulate older versions of RCS; see `co -V'. This may be useful to overcome compatibility problems due to the above changes. Programs like Emacs can now interact with RCS commands via a pipe: the new -I option causes ci, co, and rcs to run interactively, even if standard input is not a terminal. These commands now accept multiple inputs from stdin separated by `.' lines. ci now silently ignores the -t option if the RCS file already exists. This simplifies some shell scripts and improves security in setuid sites. Descriptive text may be given directly in an argument of the form -t-string. The character set for symbolic names has been upgraded from Ascii to ISO 8859. rcsdiff now passes through all options used by GNU diff; this is a longer list than 4.3BSD diff. merge's new -L option gives tags for merge's overlap report lines. This ability used to be present in a different, undocumented form; the new form is chosen for compatibility with GNU diff3's -L option. rcsmerge and merge now have a -q option, just like their siblings do. RCS now attempts to ignore parts of an RCS file that look like they come from a future version of RCS. When properly configured, RCS now strictly conforms with Posix 1003.1-1990. RCS can still be compiled in non-Posix traditional Unix environments, and can use common BSD and USG extensions to Posix. RCS is a conforming Standard C program, and also compiles under traditional C. Arbitrary limits on internal table sizes have been removed. The only limit now is the amount of memory available via malloc(). File temporaries, lock files, signals, and system call return codes are now handled more cleanly, portably, and quickly. Some race conditions have been removed. A new compile-time option RCSPREFIX lets administrators avoid absolute path names for subsidiary programs, trading speed for flexibility. The configuration procedure is now more automatic. Snooping has been removed. Version 4 was the first version distributed by FSF. Beside bug fixes, features new to RCS version 4 include: The notion of default branch has been added; see rcs -b. Version 3 was included in the 4.3BSD distribution. Further projects: Add format options for finer control over the output of ident and rlog. Be able to redo the most recent checkin with minor changes. Add a `-' option to take the list of pathnames from standard input. Perhaps the pathnames should be null-terminated, not newline-terminated, so that pathnames that contain newlines are handled properly. Add general options so that rcsdiff and rcsmerge can pass arbitrary options to its subsidiary co and diff processes. E.g. -.OPTION to pass OPTION to the subsidiary `co' -/OPTION to pass OPTION to the subsidiary `diff' (for rcsdiff only) For example: rcsdiff -.-d"1991/02/09 18:09" -.-sRel -/+unified -/-C -/5 -/-d foo.c invokes `co -d"1991/02/09 18:09" -sRel ...' and `diff +unified -C 5 -d ...'. To pass an option to just one subsidiary `co', put the -. option after the corresponding -r option. For example: rcsmerge -r1.4 -.-ko -r1.8 -.-kkv foo.c passes `-ko' to the first subsidiary `co', and `-kkv' to the second one. Permit multiple option-pathname pairs, e.g. co -r1.4 a -r1.5 b. Add ways to specify the earliest revision, the most recent revision, the earliest or latest revision on a particular branch, and the parent or child of some other revision. If a user has multiple locks, perhaps ci should fall back on ci -k's method to figure out which revision to use. Symbolic names need not refer to existing branches and revisions. rcs(1)'s BUGS section says this is a bug. Is it? If so, it should be fixed. Write an rcsck program that repairs corrupted RCS files, much as fsck repairs corrupted file systems. Clean up the source code with a consistent indenting style. Update the date parser to use the more modern getdate.y by Bellovin, Salz, and Berets, or the even more modern getdate by Moraes. None of these getdate implementations are as robust as RCS's old warhorse in avoiding problems like arithmetic overflow, so they'll have to be fixed first. Break up the code into a library so that it's easier to write new programs that manipulate RCS files, and so that useless code is removed from the existing programs. For example, the rcs command contains unnecessary keyword substitution baggage, and the merge command can be greatly pruned. Make it easier to use your favorite text editor to edit log messages, etc. instead of having to type them in irretrievably at the terminal. The following projects require a change to RCS file format, and thus must wait until at least RCS version 6. Be able to store RCS files in compressed format. Don't bother to use a .Z extension that would exceed file name length limits; just look at the magic number. Add locker commentary, e.g. `co -l -m"checkout to fix merge bug" foo' to tell others why you checked out `foo'. Also record the time when the revision was locked, and perhaps the working pathname (if applicable). Let the user mark an RCS revision as deleted; checking out such a revision would result in no working file. Similarly, using `co -d' with a date either before the initial revision or after the file was marked deleted should remove the working file. For extra credit, extend the notion of `deleted' to include `renamed'. RCS should support arbitrary combinations of renaming and deletion, e.g. renaming A to B and B to A, checking in new revisions to both files, and then renaming them back. Use a better scheme for locking revisions; the current scheme requires changing the RCS file just to lock or unlock a revision. The new scheme should coexist as well as possible with older versions of RCS, and should avoid the rare NFS bugs mentioned in rcsedit.c. Add rcs options for changing keyword names, e.g. XConsortium instead of Id. Add frozen branches a la SCCS. In general, be able to emulate all of SCCS, so that an SCCS-to-RCS program can be practical. Add support for distributed RCS, where widely separated users cannot easily access each others' RCS files, and must periodically distribute and reconcile new revisions. Be able to create empty branches. Improve RCS's method for storing binary files. Although it is more efficient than SCCS's, the diff algorithm is still line oriented, and often generates long output for minor changes to an executable file. Add a new `-kb' expansion for binary files on non-Posix hosts that distinguish between text and binary I/O. The current `text_work_stdio' compile-time switch is too inflexible. This fix either requires nonstandard primitives like DOS's setmode(), or requires that `-kb' be specified on initial checkin and never changed. From the user's point of view, it would be best if RCS detected and handled binary files without human intervention, switching expansion methods as needed from revision to revision. Extend the grammar of RCS files so that keywords need not be in a fixed order. Internationalize messages; unfortunately, there's no common standard yet. This requires a change in RCS file format because of the `empty log message' and `checked in with -k' hacks inside RCS files. Credits: RCS was designed and built by Walter F. Tichy of Purdue University. RCS version 3 was released in 1983. Adam Hammer, Thomas Narten, and Dan Trinkle of Purdue supported RCS through version 4.3, released in 1990. Guy Harris of Sun contributed many porting fixes. Paul Eggert of System Development Corporation contributed bug fixes and tuneups. Jay Lepreau contributed 4.3BSD support. Paul Eggert of Twin Sun wrote the changes for RCS version 5, released in 1991. Rich Braun of Kronos and Andy Glew of Intel contributed ideas for new options. Bill Hahn of Stratus contributed ideas for setuid support. Ideas for piece tables came from Joe Berkovitz of Stratus and Walter F. Tichy. Matt Cross of Stratus contributed test case ideas. Adam Hammer of Purdue QAed. ./usr/src/rcs/rcs.ms 444 156 3 157112 5113220525 11536 0ustar mem.\" Format this file with: .\" pic file | tbl | troff -ms .\" .\" \*s stands for $, and avoids problems when this file is checked in. .ds s $ .\" PS and PE center pic diagrams. (The corresponding ms-macros may not.) .de PS .nr pE (\\n(.lu-\\$2u)/2u .in +\\n(pEu .ne \\$1u .. .de PE .in -\\n(pEu .. .de D( .DS .nr VS 12p .vs 12p .I .. .de D) .DE .nr VS 18p .vs 18p .R .. .de Id .ND \\$4 .. .Id $Id: rcs.ms,v 5.2 1991/01/03 10:57:28 eggert Exp $ .RP .TL RCS\*-A System for Version Control .sp .AU Walter F. Tichy .AI Department of Computer Sciences Purdue University West Lafayette, Indiana 47907 .sp .AB An important problem in program development and maintenance is version control, i.e., the task of keeping a software system consisting of many versions and configurations well organized. The Revision Control System (RCS) is a software tool that assists with that task. RCS manages revisions of text documents, in particular source programs, documentation, and test data. It automates the storing, retrieval, logging and identification of revisions, and it provides selection mechanisms for composing configurations. This paper introduces basic version control concepts and discusses the practice of version control using RCS. For conserving space, RCS stores deltas, i.e., differences between successive revisions. Several delta storage methods are discussed. Usage statistics show that RCS's delta storage method is space and time efficient. The paper concludes with a detailed survey of version control tools. .sp \fBKeywords\fR: configuration management, history management, version control, revisions, deltas. .AE .FS An earlier version of this paper was published in .I "Software\*-Practice & Experience" .B 15 , 7 (July 1985), 637-654. .FE .nr VS 18p .LP .NH Introduction .PP Version control is the task of keeping software systems consisting of many versions and configurations well organized. The Revision Control System (RCS) is a set of UNIX commands that assist with that task. .PP RCS' primary function is to manage \fIrevision groups\fR. A revision group is a set of text documents, called \fIrevisions\fR, that evolved from each other. A new revision is created by manually editing an existing one. RCS organizes the revisions into an ancestral tree. The initial revision is the root of the tree, and the tree edges indicate from which revision a given one evolved. Besides managing individual revision groups, RCS provides flexible selection functions for composing configurations. RCS may be combined with MAKE\u1\d, resulting in a powerful package for version control. .PP RCS also offers facilities for merging updates with customer modifications, for distributed software development, and for automatic identification. Identification is the `stamping' of revisions and configurations with unique markers. These markers are akin to serial numbers, telling software maintainers unambiguously which configuration is before them. .PP RCS is designed for both production and experimental environments. In production environments, access controls detect update conflicts and prevent overlapping changes. In experimental environments, where strong controls are counterproductive, it is possible to loosen the controls. .PP Although RCS was originally intended for programs, it is useful for any text that is revised frequently and whose previous revisions must be preserved. RCS has been applied successfully to store the source text for drawings, VLSI layouts, documentation, specifications, test data, form letters and articles. .PP This paper discusses the practice of version control using RCS. It also introduces basic version control concepts, useful for clarifying current practice and designing similar systems. Revision groups of individual components are treated in the next three sections, and the extensions to configurations follow. Because of its size, a survey of version control tools appears at the end of the paper. .NH Getting started with RCS .PP Suppose a text file \fIf.c\fR is to be placed under control of RCS. Invoking the check-in command .D( ci f.c .D) creates a new revision group with the contents of \fIf.c\fR as the initial revision (numbered 1.1) and stores the group into the file \fIf.c,v\fR. Unless told otherwise, the command deletes \fIf.c\fR. It also asks for a description of the group. The description should state the common purpose of all revisions in the group, and becomes part of the group's documentation. All later check-in commands will ask for a log entry, which should summarize the changes made. (The first revision is assigned a default log message, which just records the fact that it is the initial revision.) .PP Files ending in \fI,v\fR are called \fIRCS files\fR (\fIv\fR stands for \fIv\fRersions); the others are called working files. To get back the working file \fIf.c\fR in the previous example, execute the check-out command: .D( co f.c .D) .R This command extracts the latest revision from the revision group \fIf.c,v\fR and writes it into \fIf.c\fR. The file \fIf.c\fR can now be edited and, when finished, checked back in with \fIci\fR: .D( ci f.c .D) \fICi\fR assigns number 1.2 to the new revision. If \fIci\fR complains with the message .D( ci error: no lock set by .D) then the system administrator has decided to configure RCS for a production environment by enabling the `strict locking feature'. If this feature is enabled, all RCS files are initialized such that check-in operations require a lock on the previous revision (the one from which the current one evolved). Locking prevents overlapping modifications if several people work on the same file. If locking is required, the revision should have been locked during the check-out by using the option \fI\-l\fR: .D( co \-l f.c .D) Of course it is too late now for the check-out with locking, because \fIf.c\fR has already been changed; checking out the file again would overwrite the modifications. (To prevent accidental overwrites, \fIco\fR senses the presence of a working file and asks whether the user really intended to overwrite it. The overwriting check-out is sometimes useful for backing up to the previous revision.) To be able to proceed with the check-in in the present case, first execute .D( rcs \-l f.c .D) This command retroactively locks the latest revision, unless someone else locked it in the meantime. In this case, the two programmers involved have to negotiate whose modifications should take precedence. .PP If an RCS file is private, i.e., if only the owner of the file is expected to deposit revisions into it, the strict locking feature is unnecessary and may be disabled. If strict locking is disabled, the owner of the RCS file need not have a lock for check-in. For safety reasons, all others still do. Turning strict locking off and on is done with the commands: .D( rcs \-U f.c \fRand\fP rcs \-L f.c .D) These commands enable or disable the strict locking feature for each RCS file individually. The system administrator only decides whether strict locking is enabled initially. .PP To reduce the clutter in a working directory, all RCS files can be moved to a subdirectory with the name \fIRCS\fR. RCS commands look first into that directory for RCS files. All the commands presented above work with the \fIRCS\fR subdirectory without change.\(dg .FS \(dg Pairs of RCS and working files can actually be specified in 3 ways: a) both are given, b) only the working file is given, c) only the RCS file is given. If a pair is given, both files may have arbitrary path prefixes; RCS commands pair them up intelligently. .FE .PP It may be undesirable that \fIci\fR deletes the working file. For instance, sometimes one would like to save the current revision, but continue editing. Invoking .D( ci \-l f.c .D) checks in \fIf.c\fR as usual, but performs an additional check-out with locking afterwards. Thus, the working file does not disappear after the check-in. Similarly, the option \fI\-u\fR does a check-in followed by a check-out without locking. This option is useful if the file is needed for compilation after the check-in. Both options update the identification markers in the working file (see below). .PP Besides the operations \fIci\fR and \fIco\fR, RCS provides the following commands: .sp 0 .nr VS 12p .vs 12p .TS tab(%); li l. ident%extract identification markers rcs%change RCS file attributes rcsclean%remove unchanged working files (optional) rcsdiff%compare revisions rcsfreeze%record a configuration (optional) rcsmerge%merge revisions rlog%read log messages and other information in RCS files .TE A synopsis of these commands appears in the Appendix. .NH 2 Automatic Identification .PP RCS can stamp source and object code with special identification strings, similar to product and serial numbers. To obtain such identification, place the marker .D( \*sId\*s .D) into the text of a revision, for instance inside a comment. The check-out operation will replace this marker with a string of the form .D( \*sId: filename revisionnumber date time author state locker \*s .D) This string need never be touched, because \fIco\fR keeps it up to date automatically. To propagate the marker into object code, simply put it into a literal character string. In C, this is done as follows: .D( static char rcsid[] = \&"\*sId\*s\&"; .D) The command \fIident\fR extracts such markers from any file, in particular from object code. \fIIdent\fR helps to find out which revisions of which modules were used in a given program. It returns a complete and unambiguous component list, from which a copy of the program can be reconstructed. This facility is invaluable for program maintenance. .PP There are several additional identification markers, one for each component of \*sId\*s. The marker .D( \*sLog\*s .D) has a similar function. It accumulates the log messages that are requested during check-in. Thus, one can maintain the complete history of a revision directly inside it, by enclosing it in a comment. Figure 1 is a partial reproduction of a log contained in revision 4.1 of the file \fIci.c\fR. The log appears at the beginning of the file, and makes it easy to determine what the recent modifications were. .sp .nr VS 12p .vs 12p .ne 18 .nf .in +0.5i /* \*sLog: ci.c,v \*s * Revision 4.1 1983/05/10 17:03:06 wft * Added option \-d and \-w, and updated assignment of date, etc. to new delta. * Added handling of default branches. * * Revision 3.9 1983/02/15 15:25:44 wft * Added call to fastcopy() to copy remainder of RCS file. * * Revision 3.8 1983/01/14 15:34:05 wft * Added ignoring of interrupts while new RCS file is renamed; * avoids deletion of RCS files by interrupts. * * Revision 3.7 1982/12/10 16:09:20 wft * Corrected checking of return code from diff. * An RCS file now inherits its mode during the first ci from the working file, * except that write permission is removed. */ .in 0 .ce 1 Figure 1. Log entries produced by the marker \*sLog\*s. .fi .nr VS 18p .vs 18p .sp 0 .LP Since revisions are stored in the form of differences, each log message is physically stored once, independent of the number of revisions present. Thus, the \*sLog\*s marker incurs negligible space overhead. .NH The RCS Revision Tree .PP RCS arranges revisions in an ancestral tree. The \fIci\fR command builds this tree; the auxiliary command \fIrcs\fR prunes it. The tree has a root revision, normally numbered 1.1, and successive revisions are numbered 1.2, 1.3, etc. The first field of a revision number is called the \fIrelease number\fR and the second one the \fIlevel number\fR. Unless given explicitly, the \fIci\fR command assigns a new revision number by incrementing the level number of the previous revision. The release number must be incremented explicitly, using the \fI\-r\fR option of \fIci\fR. Assuming there are revisions 1.1, 1.2, and 1.3 in the RCS file f.c,v, the command .D( ci \-r2.1 f.c \fRor\fP ci \-r2 f.c .D) assigns the number 2.1 to the new revision. Later check-ins without the \fI\-r\fR option will assign the numbers 2.2, 2.3, and so on. The release number should be incremented only at major transition points in the development, for instance when a new release of a software product has been completed. .NH 2 When are branches needed? .PP A young revision tree is slender: It consists of only one branch, called the trunk. As the tree ages, side branches may form. Branches are needed in the following 4 situations. .IP "\fITemporary fixes\fR" .sp 0 Suppose a tree has 5 revisions grouped in 2 releases, as illustrated in Figure 2. Revision 1.3, the last one of release 1, is in operation at customer sites, while release 2 is in active development. .ne 4 .PS 4i .ps -2 box "1.1" arrow box "1.2" arrow box "1.3" arrow box "2.1" arrow box "2.2" arrow dashed .ps +2 .PE .ce 1 Figure 2. A slender revision tree. .sp 0 Now imagine a customer requesting a fix of a problem in revision 1.3, although actual development has moved on to release 2. RCS does not permit an extra revision to be spliced in between 1.3 and 2.1, since that would not reflect the actual development history. Instead, create a branch at revision 1.3, and check in the fix on that branch. The first branch starting at 1.3 has number 1.3.1, and the revisions on that branch are numbered 1.3.1.1, 1.3.1.2, etc. The double numbering is needed to allow for another branch at 1.3, say 1.3.2. Revisions on the second branch would be numbered 1.3.2.1, 1.3.2.2, and so on. The following steps create branch 1.3.1 and add revision 1.3.1.1: .sp 0 .I .nr VS 12p .vs 12p .TS tab(%); l l l. %co \-r1.3 f.c% \*- check out revision 1.3 %edit f.c% \*- change it %ci \-r1.3.1 f.c% \*- check it in on branch 1.3.1 .TE .nr VS 18p .vs 18p .R This sequence of commands transforms the tree of Figure 2 into the one in Figure 3. Note that it may be necessary to incorporate the differences between 1.3 and 1.3.1.1 into a revision at level 2. The operation \fIrcsmerge\fR automates this process (see the Appendix). .ne 7 .PS 4i .ps -2 box "1.1" arrow box "1.2" arrow R13: box "1.3" arrow R21: box "2.1" arrow R22: box "2.2" arrow dashed line invis down from R21.s RB1: box "1.3.1.1" arrow dashed right from RB1.e arrow from R13.s to RB1.w .ps +2 .PE .ce 1 Figure 3. A revision tree with one side branch .sp .IP "\fIDistributed development and customer modifications\fR" .sp 0 Assume a situation as in Figure 2, where revision 1.3 is in operation at several customer sites, while release 2 is in development. Customer sites should use RCS to store the distributed software. However, customer modifications should not be placed on the same branch as the distributed source; instead, they should be placed on a side branch. When the next software distribution arrives, it should be appended to the trunk of the customer's RCS file, and the customer can then merge the local modifications back into the new release. In the above example, a customer's RCS file would contain the following tree, assuming that the customer has received revision 1.3, added his local modifications as revision 1.3.1.1, then received revision 2.4, and merged 2.4 and 1.3.1.1, resulting in 2.4.1.1. .ne 7 .PS 4i .ps -2 R13: box "1.3" line invis R21: box invis line invis R22: box invis line invis R24: box "2.4" line invis R25: box invis line invis arrow from R13.e to R24.w line invis down from R21.s RB1: box "1.3.1.1" arrow from R13.s to RB1.w right line invis down from R25.s RB2: box "2.4.1.1" arrow from R24.s to RB2.w .ps +2 .PE .ce 1 Figure 4. A customer's revision tree with local modifications. .sp 1 This approach is actually practiced in the CSNET project, where several universities and a company cooperate in developing a national computer network. .IP "\fIParallel development\fR" .sp 0 Sometimes it is desirable to explore an alternate design or a different implementation technique in parallel with the main line development. Such development should be carried out on a side branch. The experimental changes may later be moved into the main line, or abandoned. .IP "\fIConflicting updates\fR" .sp 0 A common occurrence is that one programmer has checked out a revision, but cannot complete the assignment for some reason. In the meantime, another person must perform another modification immediately. In that case, the second person should check-out the same revision, modify it, and check it in on a side branch, for later merging. .PP Every node in a revision tree consists of the following attributes: a revision number, a check-in date and time, the author's identification, a log entry, a state and the actual text. All these attributes are determined at the time the revision is checked in. The state attribute indicates the status of a revision. It is set automatically to `experimental' during check-in. A revision can later be promoted to a higher status, for example `stable' or `released'. The set of states is user-defined. .NH 2 Revisions are represented as deltas .PP For conserving space, RCS stores revisions in the form of deltas, i.e., as differences between revisions. The user interface completely hides this fact. .PP A delta is a sequence of edit commands that transforms one string into another. The deltas employed by RCS are line-based, which means that the only edit commands allowed are insertion and deletion of lines. If a single character in a line is changed, the edit scripts consider the entire line changed. The program \fIdiff\fR\u2\d produces a small, line-based delta between pairs of text files. A character-based edit script would take much longer to compute, and would not be significantly shorter. .PP Using deltas is a classical space-time tradeoff: deltas reduce the space consumed, but increase access time. However, a version control tool should impose as little delay as possible on programmers. Excessive delays discourage the use of version controls, or induce programmers to take shortcuts that compromise system integrity. To gain reasonably fast access time for both editing and compiling, RCS arranges deltas in the following way. The most recent revision on the trunk is stored intact. All other revisions on the trunk are stored as reverse deltas. A reverse delta describes how to go backward in the development history: it produces the desired revision if applied to the successor of that revision. This implementation has the advantage that extraction of the latest revision is a simple and fast copy operation. Adding a new revision to the trunk is also fast: \fIci\fR simply adds the new revision intact, replaces the previous revision with a reverse delta, and keeps the rest of the old deltas. Thus, \fIci\fR requires the computation of only one new delta. .PP Branches need special treatment. The naive solution would be to store complete copies for the tips of all branches. Clearly, this approach would cost too much space. Instead, RCS uses \fIforward\fR deltas for branches. Regenerating a revision on a side branch proceeds as follows. First, extract the latest revision on the trunk; secondly, apply reverse deltas until the fork revision for the branch is obtained; thirdly, apply forward deltas until the desired branch revision is reached. Figure 5 illustrates a tree with one side branch. Triangles pointing to the left and right represent reverse and forward deltas, respectively. .ne 8 .PS 4i .ps -2 define BD X [line invis $1 right .5; line up .3 then left .5 down .3 then right .5 down .3 then up .3] X define FD X [line invis $1 right .5; line left .5 down .3 then up .6 then right .5 down .3;] X right D11: BD(" 1.1") arrow right from D11.e D12: BD(" 1.2") arrow right from D12.e D13: BD(" 1.3") arrow right from D13.e D21: BD(" 2.1") arrow right from D21.e D22: box "2.2" line invis down from D21.s F1: FD("1.3.1.1 ") arrow from D13.se to F1.w arrow from F1.e right right F2: FD("1.3.1.2 ") .ps +2 .PE .ce 1 Figure 5. A revision tree with reverse and forward deltas. .sp 0 .PP Although implementing fast check-out for the latest trunk revision, this arrangement has the disadvantage that generation of other revisions takes time proportional to the number of deltas applied. For example, regenerating the branch tip in Figure 5 requires application of five deltas (including the initial one). Since usage statistics show that the latest trunk revision is the one that is retrieved in 95 per cent of all cases (see the section on usage statistics), biasing check-out time in favor of that revision results in significant savings. However, careful implementation of the delta application process is necessary to provide low retrieval overhead for other revisions, in particular for branch tips. .PP There are several techniques for delta application. The naive one is to pass each delta to a general-purpose text editor. A prototype of RCS invoked the UNIX editor \fIed\fR both for applying deltas and for expanding the identification markers. Although easy to implement, performance was poor, owing to the high start-up costs and excess generality of \fIed\fR. An intermediate version of RCS used a special-purpose, stream-oriented editor. This technique reduced the cost of applying a delta to the cost of checking out the latest trunk revision. The reason for this behavior is that each delta application involves a complete pass over the preceding revision. .PP However, there is a much better algorithm. Note that the deltas are line oriented and that most of the work of a stream editor involves copying unchanged lines from one revision to the next. A faster algorithm avoids unnecessary copying of character strings by using a \fIpiece table\fR. A piece table is a one-dimensional array, specifying how a given revision is `pieced together' from lines in the RCS file. Suppose piece table \fIPT\dr\u\fR represents revision \fIr\fR. Then \fIPT\dr\u[i]\fR contains the starting position of line \fIi\fR of revision \fIr\fR. Application of the next delta transforms piece table \fIPT\dr\u\fR into \fIPT\dr+1\u\fR. For instance, a delete command removes a series of entries from the piece table. An insertion command inserts new entries, moving the entries following the insertion point further down the array. The inserted entries point to the text lines in the delta. Thus, no I/O is involved except for reading the delta itself. When all deltas have been applied to the piece table, a sequential pass through the table looks up each line in the RCS file and copies it to the output file, updating identification markers at the same time. Of course, the RCS file must permit random access, since the copied lines are scattered throughout that file. Figure 6 illustrates an RCS file with two revisions and the corresponding piece tables. .ne 13 .sp 6 .ce 1 \fIFigure 6 is not available.\fP .sp 5 .ce 1 Figure 6. An RCS file and its piece tables .sp 0 .PP The piece table approach has the property that the time for applying a single delta is roughly determined by the size of the delta, and not by the size of the revision. For example, if a delta is 10 per cent of the size of a revision, then applying it takes only 10 per cent of the time to generate the latest trunk revision. (The stream editor would take 100 per cent.) .PP There is an important alternative for representing deltas that affects performance. SCCS\u3\d, a precursor of RCS, uses \fIinterleaved\fR deltas. A file containing interleaved deltas is partitioned into blocks of lines. Each block has a header that specifies to which revision(s) the block belongs. The blocks are sorted out in such a way that a single pass over the file can pick up all the lines belonging to a given revision. Thus, the regeneration time for all revisions is the same: all headers must be inspected, and the associated blocks either copied or skipped. As the number of revisions increases, the cost of retrieving any revision is much higher than the cost of checking out the latest trunk revision with reverse deltas. A detailed comparison of SCCS's interleaved deltas and RCS's reverse deltas can be found in Reference 4. This reference considers the version of RCS with the stream editor only. The piece table method improves performance further, so that RCS is always faster than SCCS, except if 10 or more deltas are applied. .PP Additional speed-up for both delta methods can be obtained by caching the most recently generated revision, as has been implemented in DSEE.\u5\d With caching, access time to frequently used revisions can approach normal file access time, at the cost of some additional space. .NH Locking: A Controversial Issue .PP The locking mechanism for RCS was difficult to design. The problem and its solution are first presented in their `pure' form, followed by a discussion of the complications caused by `real-world' considerations. .PP RCS must prevent two or more persons from depositing competing changes of the same revision. Suppose two programmers check out revision 2.4 and modify it. Programmer A checks in a revision before programmer B\&. Unfortunately, programmer B has not seen A's changes, so the effect is that A's changes are covered up by B's deposit. A's changes are not lost since all revisions are saved, but they are confined to a single revision.\(dd .FS \(dd Note that this problem is entirely different from the atomicity problem. Atomicity means that concurrent update operations on the same RCS file cannot be permitted, because that may result in inconsistent data. Atomic updates are essential (and implemented in RCS), but do not solve the conflict discussed here. .FE .PP This conflict is prevented in RCS by locking. Whenever someone intends to edit a revision (as opposed to reading or compiling it), the revision should be checked out and locked, using the \fI\-l\fR option on \fIco\fR. On subsequent check-in, \fIci\fR tests the lock and then removes it. At most one programmer at a time may lock a particular revision, and only this programmer may check in the succeeding revision. Thus, while a revision is locked, it is the exclusive responsibility of the locker. .PP An important maxim for software tools like RCS is that they must not stand in the way of making progress with a project. This consideration leads to several weakenings of the locking mechanism. First of all, even if a revision is locked, it can still be checked out. This is necessary if other people wish to compile or inspect the locked revision while the next one is in preparation. The only operations they cannot do are to lock the revision or to check in the succeeding one. Secondly, check-in operations on other branches in the RCS file are still possible; the locking of one revision does not affect any other revision. Thirdly, revisions are occasionally locked for a long period of time because a programmer is absent or otherwise unable to complete the assignment. If another programmer has to make a pressing change, there are the following three alternatives for making progress: a) find out who is holding the lock and ask that person to release it; b) check out the locked revision, modify it, check it in on a branch, and merge the changes later; c) break the lock. Breaking a lock leaves a highly visible trace, namely an electronic mail message that is sent automatically to the holder of the lock, recording the breaker and a commentary requested from him. Thus, breaking locks is tolerated under certain circumstances, but will not go unnoticed. Experience has shown that the automatic mail message attaches a high enough stigma to lock breaking, such that programmers break locks only in real emergencies, or when a co-worker resigns and leaves locked revisions behind. .PP If an RCS file is private, i.e., when a programmer owns an RCS file and does not expect anyone else to perform check-in operations, locking is an unnecessary nuisance. In this case, the `strict locking feature' discussed earlier may be disabled, provided that file protection is set such that only the owner may write the RCS file. This has the effect that only the owner can check-in revisions, and that no lock is needed for doing so. .PP As added protection, each RCS file contains an access list that specifies the users who may execute update operations. If an access list is empty, only normal UNIX file protection applies. Thus, the access list is useful for restricting the set of people who would otherwise have update permission. Just as with locking, the access list has no effect on read-only operations such as \fIco\fR. This approach is consistent with the UNIX philosophy of openness, which contributes to a productive software development environment. .NH Configuration Management .PP The preceding sections described how RCS deals with revisions of individual components; this section discusses how to handle configurations. A configuration is a set of revisions, where each revision comes from a different revision group, and the revisions are selected according to a certain criterion. For example, in order to build a functioning compiler, the `right' revisions from the scanner, the parser, the optimizer and the code generator must be combined. RCS, in conjunction with MAKE, provides a number of facilities to effect a smooth selection. .NH 2 RCS Selection Functions .PP .IP "\fIDefault selection\fR" .sp 0 During development, the usual selection criterion is to choose the latest revision of all components. The \fIco\fR command makes this selection by default. For example, the command .D( co *,v .D) retrieves the latest revision on the default branch of each RCS file in the current directory. The default branch is usually the trunk, but may be set to be a side branch. Side branches as defaults are needed in distributed software development, as discussed in the section on the RCS revision tree. .sp .IP "\fIRelease based selection\fR" .sp 0 Specifying a release or branch number selects the latest revision in that release or branch. For instance, .D( co \-r2 *,v .D) retrieves the latest revision with release number 2 from each RCS file. This selection is convenient if a release has been completed and development has moved on to the next release. .sp .IP "\fIState and author based selection\fR" .sp 0 If the highest level number within a given release number is not the desired one, the state attribute can help. For example, .D( co \-r2 \-sReleased *,v .D) retrieves the latest revision with release number 2 whose state attribute is `Released'. Of course, the state attribute has to be set appropriately, using the \fIci\fR or \fIrcs\fR commands. Another alternative is to select a revision by its author, using the \fI\-w\fR option. .sp .IP "\fIDate based selection\fR" .sp 0 Revisions may also be selected by date. Suppose a release of an entire system was completed and current on March 4, at 1:00 p.m. local time. Then the command .D( co \-d'March 4, 1:00 pm LT' *,v .D) checks out all the components of that release, independent of the numbering. The \fI\-d\fR option specifies a `cutoff date', i.e., the revision selected has a check-in date that is closest to, but not after the date given. .IP "\fIName based selection\fR" .sp 0 The most powerful selection function is based on assigning symbolic names to revisions and branches. In large systems, a single release number or date is not sufficient to collect the appropriate revisions from all groups. For example, suppose one wishes to combine release 2 of one subsystem and release 15 of another. Most likely, the creation dates of those releases differ also. Thus, a single revision number or date passed to the \fIco\fR command will not suffice to select the right revisions. Symbolic revision numbers solve this problem. Each RCS file may contain a set of symbolic names that are mapped to numeric revision numbers. For example, assume the symbol \fIV3\fR is bound to release number 2 in file \fIs,v\fR, and to revision number 15.9 in \fIt,v\fR. Then the single command .D( co \-rV3 s,v t,v .D) retrieves the latest revision of release 2 from \fIs,v\fR, and revision 15.9 from \fIt,v\fR. In a large system with many modules, checking out all revisions with one command greatly simplifies configuration management. .PP Judicious use of symbolic revision numbers helps with organizing large configurations. A special command, \fIrcsfreeze\fR, assigns a symbolic revision number to a selected revision in every RCS file. \fIRcsfreeze\fR effectively freezes a configuration. The assigned symbolic revision number selects all components of the configuration. If necessary, symbolic numbers may even be intermixed with numeric ones. Thus, \fIV3.5\fR in the above example would select revision 2.5 in \fIs,v\fR and branch 15.9.5 in \fIt,v\fR. .PP The options \fI\-r\fR, \fI\-s\fR, \fI\-w\fR and \fI\-d\fR may be combined. If a branch is given, the latest revision on that branch satisfying all conditions is retrieved; otherwise, the default branch is used. .NH 2 Combining MAKE and RCS .PP MAKE\u1\d is a program that processes configurations. It is driven by configuration specifications recorded in a special file, called a `Makefile'. MAKE avoids redundant processing steps by comparing creation dates of source and processed objects. For example, when instructed to compile all modules of a given system, it only recompiles those source modules that were changed since they were processed last. .PP MAKE has been extended with an auto-checkout feature for RCS.* .FS * This auto-checkout extension is available only in some versions of MAKE, e.g. GNU MAKE. .FE When a certain file to be processed is not present, MAKE attempts a check-out operation. If successful, MAKE performs the required processing, and then deletes the checked out file to conserve space. The selection parameters discussed above can be passed to MAKE either as parameters, or directly embedded in the Makefile. MAKE has also been extended to search the subdirectory named \fIRCS\fR for needed files, rather than just the current working directory. However, if a working file is present, MAKE totally ignores the corresponding RCS file and uses the working file. (In newer versions of MAKE distributed by AT&T and others, auto-checkout can be achieved with the rule DEFAULT, instead of a special extension of MAKE. However, a file checked out by the rule DEFAULT will not be deleted after processing. \fIRcsclean\fR can be used for that purpose.) .PP With auto-checkout, RCS/MAKE can effect a selection rule especially tuned for multi-person software development and maintenance. In these situations, programmers should obtain configurations that consist of the revisions they have personally checked out plus the latest checked in revision of all other revision groups. This schema can be set up as follows. .PP Each programmer chooses a working directory and places into it a symbolic link, named \fIRCS\fR, to the directory containing the relevant RCS files. The symbolic link makes sure that \fIco\fR and \fIci\fR operations need only specify the working files, and that the Makefile need not be changed. The programmer then checks out the needed files and modifies them. If MAKE is invoked, it composes configurations by selecting those revisions that are checked out, and the rest from the subdirectory \fIRCS\fR. The latter selection may be controlled by a symbolic revision number or any of the other selection criteria. If there are several programmers editing in separate working directories, they are insulated from each other's changes until checking in their modifications. .PP Similarly, a maintainer can recreate an older configuration by starting to work in an empty working directory. During the initial MAKE invocation, all revisions are selected from RCS files. As the maintainer checks out files and modifies them, a new configuration is gradually built up. Every time MAKE is invoked, it substitutes the modified revisions into the configuration being manipulated. .PP A final application of RCS is to use it for storing Makefiles. Revision groups of Makefiles represent multiple versions of configurations. Whenever a configuration is baselined or distributed, the best approach is to unambiguously fix the configuration with a symbolic revision number by calling \fIrcsfreeze\fR, to embed that symbol into the Makefile, and to check in the Makefile (using the same symbolic revision number). With this approach, old configurations can be regenerated easily and reliably. .NH Usage Statistics .PP The following usage statistics were collected on two DEC VAX-11/780 computers of the Purdue Computer Science Department. Both machines are mainly used for research purposes. Thus, the data reflect an environment in which the majority of projects involve prototyping and advanced software development, but relatively little long-term maintenance. .PP For the first experiment, the \fIci\fR and \fIco\fR operations were instrumented to log the number of backward and forward deltas applied. The data were collected during a 13 month period from Dec. 1982 to Dec. 1983. Table I summarizes the results. .sp 0 .nr VS 12p .vs 12p .TS center,box,tab(#); c|c|c|c|c s|c s c|c|c|c|c s|c s l|n|n|n|n n|n n. Operation#Total#Total deltas#Mean deltas#Operations#Branch #operations #applied#applied#with >1 delta#operations _ co # 7867# 9320#1.18#509#(6%)#203#(3%) ci # 3468# 2207#0.64# 85#(2%)# 75#(2%) ci & co#11335#11527#1.02#594#(5%)#278#(2%) .TE .ce 1 Table I. Statistics for \fIco\fR and \fIci\fR operations. .nr VS 18p .vs 18p .PP The first two lines show statistics for check-out and check-in; the third line shows the combination. Recall that \fIci\fR performs an implicit check-out to obtain a revision for computing the delta. In all measures presented, the most recent revision (stored intact) counts as one delta. The number of deltas applied represents the number of passes necessary, where the first `pass' is a copying step. .PP Note that the check-out operation is executed more than twice as frequently as the check-in operation. The fourth column gives the mean number of deltas applied in all three cases. For \fIci\fR, the mean number of deltas applied is less than one. The reasons are that the initial check-in requires no delta at all, and that the only time \fIci\fR requires more than one delta is for branches. Column 5 shows the actual number of operations that applied more than one delta. The last column indicates that branches were not used often. .PP The last three columns demonstrate that the most recent trunk revision is by far the most frequently accessed. For RCS, check-out of this revision is a simple copy operation, which is the absolute minimum given the copy-semantics of \fIco\fR. Access to older revisions and branches is more common in non-academic environments, yet even if access to older deltas were an order of magnitude more frequent, the combined average number of deltas applied would still be below 1.2. Since RCS is faster than SCCS until up to 10 delta applications, reverse deltas are clearly the method of choice. .PP The second experiment, conducted in March of 1984, involved surveying the existing RCS files on our two machines. The goal was to determine the mean number of revisions per RCS file, as well as the space consumed by them. Table II shows the results. (Tables I and II were produced at different times and are unrelated.) .sp 0 .nr VS 12p .vs 12p .TS center,box,tab(#); c | c | c | c | c | c | c c | c | c | c | c | c | c l | n | n | n | n | n | n. #Total RCS#Total#Mean#Mean size of#Mean size of#Overhead #files#revisions#revisions#RCS files#revisions _ All files #8033#11133#1.39#6156#5585#1.10 Files with#1477# 4578#3.10#8074#6041#1.34 \(>= 2 deltas .TE .ce 1 Table II. Statistics for RCS files. .nr VS 18p .vs 18p .PP The mean number of revisions per RCS file is 1.39. Columns 5 and 6 show the mean sizes (in bytes) of an RCS file and of the latest revision of each RCS file, respectively. The `overhead' column contains the ratio of the mean sizes. Assuming that all revisions in an RCS file are approximately the same size, this ratio gives a measure of the space consumed by the extra revisions. .PP In our sample, over 80 per cent of the RCS files contained only a single revision. The reason is that our systems programmers routinely check in all source files on the distribution tapes, even though they may never touch them again. To get a better indication of how much space savings are possible with deltas, all measures with those files that contained 2 or more revisions were recomputed. Only for those files is RCS necessary. As shown in the second line, the average number of revisions for those files is 3.10, with an overhead of 1.34. This means that the extra 2.10 deltas require 34 per cent extra space, or 16 per cent per extra revision. Rochkind\u3\d measured the space consumed by SCCS, and reported an average of 5 revisions per group and an overhead of 1.37 (or about 9 per cent per extra revision). In a later paper, Glasser\u6\d observed an average of 7 revisions per group in a single, large project, but provided no overhead figure. In his paper on DSEE\u5\d, Leblang reported that delta storage combined with blank compression results in an overhead of a mere 1\-2 per cent per revision. Since leading blanks accounted for about 20 per cent of the surveyed Pascal programs, a revision group with 5\-10 members was smaller than a single cleartext copy. .PP The above observations demonstrate clearly that the space needed for extra revisions is small. With delta storage, the luxury of keeping multiple revisions online is certainly affordable. In fact, introducing a system with delta storage may reduce storage requirements, because programmers often save back-up copies anyway. Since back-up copies are stored much more efficiently with deltas, introducing a system such as RCS may actually free a considerable amount of space. .NH Survey of Version Control Tools .PP The need to keep back-up copies of software arose when programs and data were no longer stored on paper media, but were entered from terminals and stored on disk. Back-up copies are desirable for reliability, and many modern editors automatically save a back-up copy for every file touched. This strategy is valuable for short-term back-ups, but not suitable for long-term version control, since an existing back-up copy is overwritten whenever the corresponding file is edited. .PP Tape archives are suitable for long-term, offline storage. If all changed files are dumped on a back-up tape once per day, old revisions remain accessible. However, tape archives are unsatisfactory for version control in several ways. First, backing up the file system every 24 hours does not capture intermediate revisions. Secondly, the old revisions are not online, and accessing them is tedious and time-consuming. In particular, it is impractical to compare several old revisions of a group, because that may require mounting and searching several tapes. Tape archives are important fail-safe tools in the event of catastrophic disk failures or accidental deletions, but they are ill-suited for version control. Conversely, version control tools do not obviate the need for tape archives. .PP A natural technique for keeping several old revisions online is to never delete a file. Editing a file simply creates a new file with the same name, but with a different sequence number. This technique, available as an option in DEC's VMS operating system, turns out to be inadequate for version control. First, it is prohibitively expensive in terms of storage costs, especially since no data compression techniques are employed. Secondly, indiscriminately storing every change produces too many revisions, and programmers have difficulties distinguishing them. The proliferation of revisions forces programmers to spend much time on finding and deleting useless files. Thirdly, most of the support functions like locking, logging, revision selection, and identification described in this paper are not available. .PP An alternative approach is to separate editing from revision control. The user may repeatedly edit a given revision, until freezing it with an explicit command. Once a revision is frozen, it is stored permanently and can no longer be modified. (In RCS, freezing a revisions is done with \fIci\fR.) Editing a frozen revision implicitly creates a new one, which can again be changed repeatedly until it is frozen itself. This approach saves exactly those revisions that the user considers important, and keeps the number of revisions manageable. IBM's CLEAR/CASTER\u7\d, AT&T's SCCS\u3\d, CMU's SDC\u8\d and DEC's CMS\u9\d, are examples of version control systems using this approach. CLEAR/CASTER maintains a data base of programs, specifications, documentation and messages, using deltas. Its goal is to provide control over the development process from a management viewpoint. SCCS stores multiple revisions of source text in an ancestral tree, records a log entry for each revision, provides access control, and has facilities for uniquely identifying each revision. An efficient delta technique reduces the space consumed by each revision group. SDC is much simpler than SCCS because it stores not more than two revisions. However, it maintains a complete log for all old revisions, some of which may be on back-up tape. CMS, like SCCS, manages tree-structured revision groups, but offers no identification mechanism. .PP Tools for dealing with configurations are still in a state of flux. SCCS, SDC and CMS can be combined with MAKE or MAKE-like programs. Since flexible selection rules are missing from all these tools, it is sometimes difficult to specify precisely which revision of each group should be passed to MAKE for building a desired configuration. The Xerox Cedar system\u10\d provides a `System Modeller' that can rebuild a configuration from an arbitrary set of module revisions. The revisions of a module are only distinguished by creation time, and there is no tool for managing groups. Since the selection rules are primitive, the System Modeller appears to be somewhat tedious to use. Apollo's DSEE\u5\d is a sophisticated software engineering environment. It manages revision groups in a way similar to SCCS and CMS. Configurations are built using `configuration threads'. A configuration thread states which revision of each group named in a configuration should be chosen. A configuration thread may contain dynamic specifiers (e.g., `choose the revisions I am currently working on, and the most recent revisions otherwise'), which are bound automatically at build time. It also provides a notification mechanism for alerting maintainers about the need to rebuild a system after a change. .PP RCS is based on a general model for describing multi-version/multi-configuration systems\u11\d. The model describes systems using AND/OR graphs, where AND nodes represent configurations, and OR nodes represent version groups. The model gives rise to a suit of selection rules for composing configurations, almost all of which are implemented in RCS. The revisions selected by RCS are passed to MAKE for configuration building. Revision group management is modelled after SCCS. RCS retains SCCS's best features, but offers a significantly simpler user interface, flexible selection rules, adequate integration with MAKE and improved identification. A detailed comparison of RCS and SCCS appears in Reference 4. .PP An important component of all revision control systems is a program for computing deltas. SCCS and RCS use the program \fIdiff\fR\u2\d, which first computes the longest common substring of two revisions, and then produces the delta from that substring. The delta is simply an edit script consisting of deletion and insertion commands that generate one revision from the other. .PP A delta based on a longest common substring is not necessarily minimal, because it does not take advantage of crossing block moves. Crossing block moves arise if two or more blocks of lines (e.g., procedures) appear in a different order in two revisions. An edit script derived from a longest common substring first deletes the shorter of the two blocks, and then reinserts it. Heckel\u12\d proposed an algorithm for detecting block moves, but since the algorithm is based on heuristics, there are conditions under which the generated delta is far from minimal. DSEE uses this algorithm combined with blank compression, apparently with satisfactory overall results. A new algorithm that is guaranteed to produce a minimal delta based on block moves appears in Reference 13. A future release of RCS will use this algorithm. .PP \fIAcknowledgements\fR: Many people have helped make RCS a success by contributed criticisms, suggestions, corrections, and even whole new commands (including manual pages). The list of people is too long to be reproduced here, but my sincere thanks for their help and goodwill goes to all of them. .sp .nr VS 12p .vs 12p .SH Appendix: Synopsis of RCS Operations .LP .IP "\fIci\fP \fB\- check in revisions\fP" .sp 0 \fICi\fR stores the contents of a working file into the corresponding RCS file as a new revision. If the RCS file doesn't exist, \fIci\fR creates it. \fICi\fR removes the working file, unless one of the options \fI\-u\fR or \fI\-l\fR is present. For each check-in, \fIci\fR asks for a commentary describing the changes relative to the previous revision. .sp 1 \fICi\fR assigns the revision number given by the \fI\-r\fR option; if that option is missing, it derives the number from the lock held by the user; if there is no lock and locking is not strict, \fIci\fR increments the number of the latest revision on the trunk. A side branch can only be started by explicitly specifying its number with the \fI\-r\fR option during check-in. .sp 1 \fICi\fR also determines whether the revision to be checked in is different from the previous one, and asks whether to proceed if not. This facility simplifies check-in operations for large systems, because one need not remember which files were changed. .sp 1 The option \fI\-k\fR searches the checked in file for identification markers containing the attributes revision number, check-in date, author and state, and assigns these to the new revision rather than computing them. This option is useful for software distribution: Recipients of distributed software using RCS should check in updates with the \fI\-k\fR option. This convention guarantees that revision numbers, check-in dates, etc., are the same at all sites. .IP "\fIco\fP \fB\- check out revisions\fP" .sp 0 \fICo\fR retrieves revisions according to revision number, date, author and state attributes. It either places the revision into the working file, or prints it on the standard output. \fICo\fR always expands the identification markers. .IP "\fIident\fP \fB\- extract identification markers\fP" .sp 0 \fIIdent\fR extracts the identification markers expanded by \fIco\fR from any file and prints them. .IP "\fIrcs\fP \fB\- change RCS file attributes\fP" .sp 0 \fIRcs\fR is an administrative operation that changes access lists, locks, unlocks, breaks locks, toggles the strict-locking feature, sets state attributes and symbolic revision numbers, changes the description, and deletes revisions. A revision can only be deleted if it is not the fork of a side branch. .IP "\fIrcsclean\fP \fB\- clean working directory\fP" .sp 0 .ne 10 \fIRcsclean\fR removes working files that were checked out but never changed.* .FS * The \fIrcsclean\fP and \fIrcsfreeze\fP commands are optional and are not always installed. .FE .IP "\fIrcsdiff\fP \fB\- compare revisions\fP" .sp 0 \fIRcsdiff\fR compares two revisions and prints their difference, using the UNIX tool \fIdiff\fR. One of the revisions compared may be checked out. This command is useful for finding out about changes. .IP "\fIrcsfreeze\fP \fB\- freeze a configuration\fP" .sp 0 \fIRcsfreeze\fR assigns the same symbolic revision number to a given revision in all RCS files. This command is useful for accurately recording a configuration.* .IP "\fIrcsmerge\fP \fB\- merge revisions\fP" .sp 0 \fIRcsmerge\fR merges two revisions, \fIrev1\fR and \fIrev2\fR, with respect to a common ancestor. A 3-way file comparison determines the segments of lines that are (a) the same in all three revisions, or (b) the same in 2 revisions, or (c) different in all three. For all segments of type (b) where \fIrev1\fR is the differing revision, the segment in \fIrev1\fR replaces the corresponding segment of \fIrev2\fR. Type (c) indicates an overlapping change, is flagged as an error, and requires user intervention to select the correct alternative. .IP "\fIrlog\fP \fB\- read log messages\fP" .sp 0 \fIRlog\fR prints the log messages and other information in an RCS file. .bp .LP .nr VS 12p .vs 12p .]< .ds [F 1 .]- .ds [K FELD02 .ds [K MakeArticle .ds [A Feldman, Stuart I. .ds [D March 1979 .ds [T Make\*-A Program for Maintaining Computer Programs .ds [J Software\*-Practice & Experience .ds [V 9 .ds [N 3 .ds [P 255-265 .nr [P 1 .nr [T 0 .nr [A 1 .nr [O 0 .][ 1 journal-article .ds [F 2 .]- .ds [K HUNT01 .ds [T An Algorithm for Differential File Comparison .ds [A Hunt, James W. .as [A " and McIlroy, M. D. .ds [I Computing Science Technical Report, Bell Laboratories .ds [R 41 .ds [D June 1976 .nr [T 0 .nr [A 1 .nr [O 0 .][ 4 tech-report .ds [F 3 .]- .ds [K SCCS .ds [A Rochkind, Marc J. .ds [D Dec. 1975 .ds [T The Source Code Control System .ds [J IEEE Transactions on Software Engineering .ds [V SE-1 .ds [N 4 .ds [P 364-370 .nr [P 1 .nr [T 0 .nr [A 1 .nr [O 0 .][ 1 journal-article .ds [F 4 .]- .ds [K TICH08 .ds [T Design, Implementation, and Evaluation of a Revision Control System .ds [A Tichy, Walter F. .ds [B Proceedings of the 6th International Conference on Software Engineering .ds [I ACM, IEEE, IPS, NBS .ds [D September 1982 .ds [P 58-67 .nr [P 1 .nr [T 0 .nr [A 1 .nr [O 0 .][ 3 article-in-book .ds [F 5 .]- .ds [K LEBL01 .ds [A Leblang, David B. .as [A " and Chase, Robert P. .ds [T Computer-Aided Software Engineering in a Distributed Workstation Environment .ds [O Proceedings of the ACM SIGSOFT/SIGPLAN Software Engineering Symposium .as [O " on Practical Software Development Environments. .ds [J SIGPLAN Notices .ds [V 19 .ds [N 5 .ds [D May 1984 .ds [P 104-112 .nr [P 1 .nr [T 0 .nr [A 1 .nr [O 0 .][ 1 journal-article .ds [F 1 .ds [F 3 .ds [F 6 .]- .ds [K SCCSEval .ds [A Glasser, Alan L. .ds [D Nov. 1978 .ds [T The Evolution of a Source Code Control System .ds [J Software Engineering Notes .ds [V 3 .ds [N 5 .ds [P 122-125 .nr [P 1 .ds [O Proceedings of the Software Quality and Assurance Workshop. .nr [T 0 .nr [A 1 .nr [O 1 .][ 1 journal-article .ds [F 5 .ds [F 7 .]- .ds [K IBMClearCaster .ds [A Brown, H.B. .ds [D 1970 .ds [T The Clear/Caster System .ds [J Nato Conference on Software Engineering, Rome .nr [T 0 .nr [A 1 .nr [O 0 .][ 1 journal-article .ds [F 3 .ds [F 8 .]- .ds [K HabermannSDC .ds [A Habermann, A. Nico .ds [D Jan. 1979 .ds [T A Software Development Control System .ds [I Technical Report, Carnegie-Mellon University, Department of Computer Science .nr [T 0 .nr [A 0 .nr [O 0 .][ 2 book .ds [F 9 .]- .ds [K CMS .ds [A DEC .ds [T Code Management System .ds [I Digital Equipment Corporation .ds [O Document No.\ EA-23134-82 .ds [D 1982 .nr [T 0 .nr [A 0 .nr [O 0 .][ 2 book .ds [F 10 .]- .ds [K LAMP01 .ds [A Lampson, Butler W. .as [A " and Schmidt, Eric E. .ds [T Practical Use of a Polymorphic Applicative Language .ds [B Proceedings of the 10th Symposium on Principles of Programming Languages .ds [I ACM .ds [P 237-255 .nr [P 1 .ds [D January 1983 .nr [T 0 .nr [A 1 .nr [O 0 .][ 3 article-in-book .ds [F 5 .ds [F 11 .]- .ds [K TICH07 .ds [T A Data Model for Programming Support Environments and its Application .ds [A Tichy, Walter F. .ds [B Automated Tools for Information System Design and Development .ds [E Hans-Jochen Schneider and Anthony I. Wasserman .ds [C Amsterdam .ds [I North-Holland Publishing Company .ds [D 1982 .nr [T 0 .nr [A 1 .nr [O 0 .][ 3 article-in-book .ds [F 4 .ds [F 2 .ds [F 12 .]- .ds [K HECK01 .ds [T A Technique for Isolating Differences Between Files .ds [A Heckel, Paul .ds [J Communications of the ACM .ds [D April 1978 .ds [V 21 .ds [N 4 .ds [P 264-268 .nr [P 1 .nr [T 0 .nr [A 0 .nr [O 0 .][ 1 journal-article .ds [F 13 .]- .ds [K TICH11 .ds [T The String-to-String Correction Problem with Block Moves .ds [A Tichy, Walter F. .ds [D Nov. 1984 .ds [J ACM Transactions on Computer Systems .ds [V 2 .ds [N 4 .ds [P 309-321 .nr [P 1 .nr [T 0 .nr [A 1 .nr [O 0 .][ 1 journal-article .]> ./usr/src/rcs/rcs.ps 644 156 3 424171 5113220535 11546 0ustar mem%!PS-Adobe-1.0 %%Creator: devps (Pipeline Associates, Inc.) %%CreationDate: Fri Jan 4 00:13:52 1991 %%Pages: (atend) %%DocumentFonts: (atend) /X /exch load def /r /rmoveto load def /m /moveto load def /l /lineto load def /rl /rlineto load def /lc{yc X xc X l st} bind def /mc{yc X xc X m} bind def /el{gs /a X def a div 1 X scale cp np a xc 2 div 0 360 arc st gr} bind def /ar{cp 7 2 roll np xc 5 1 roll atan 3 1 roll atan X arc st} bind def /sp{yc X xc X 6 2 roll yc X xc X 6 2 roll yc X xc X 6 2 roll ct} bind def /st /stroke load def /gs /gsave load def /gr /grestore load def /cp /currentpoint load def /np /newpath load def /ct /curveto load def /m0{0 0 moveto} bind def /BP{/devps-save save def m0} bind def /EP{ clear devps-save restore showpage} bind def /res 10.000000 def /V{res neg div 792 add currentpoint pop X m} bind def /H{res div currentpoint X pop transform round exch round exch itransform moveto} bind def /h{res div 0 r} bind def /v{res neg div 0 X r} bind def /xc{res div} bind def /yc{res neg div 792 add} bind def /S{X H show} bind def /psize 10 def /height 1 def /slant 0 def /FF{findfont X dup 12 div setlinewidth /psize X def [psize 0 psize height mul slant sin slant cos div mul psize height mul 0 0] makefont setfont} bind def /shade{gs /dy X def /dx X def np m setgray 0 dy rl dx 0 rl 0 dy neg rl dx neg 0 rl closepath fill gr} bind def 1 setlinecap 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 1000 1000] def /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put dup 8#110/rc put dup 8#111/lt put dup 8#112/bv put dup 8#113/lk put dup 8#114/lb put dup 8#115/rt put dup 8#116/rk put dup 8#117/rb put dup 8#120/rf put dup 8#121/lf put dup 8#122/lc put dup 8#140/sq put dup 8#141/bx put dup 8#142/ci put dup 8#143/br put dup 8#144/rn put dup 8#145/vr put dup 8#146/ob put dup 8#147/bu put dup 8#150/ru put dup 8#151/ul put dup 8#326/sr put pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 2 setlinejoin 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def /ru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{0 800 moveto 0 -770 rls}def /bv{0 800 moveto 0 -1000 rls}def /br{0 750 moveto 0 -1000 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{0 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{0 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{0 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{0 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{0 800 moveto 0 300 -300 300 s4 arcto pop pop 1000 sub 0 300 4 2 roll s4 a4p 0 -200 lineto stroke}def /rk{0 800 moveto 0 300 s2 300 s4 arcto pop pop 1000 sub 0 300 4 2 roll s4 a4p 0 -200 lineto stroke}def /lf{0 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{0 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{0 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{0 -200 moveto 0 1000 rlineto s4 neg 0 rls}def /sr{395.744681 0 moveto 557.446809 995.744681 lineto 521.276596 1000 lineto 382.978723 170.212766 lineto 168.085106 602.127660 lineto 8.510638 525.531915 lineto 23.404255 496.170213 lineto 127.659574 546.808511 lineto 395.744681 0 lineto closepath fill} def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0 def /lt 416 def /lb 416 def /rt 416 def /rb 416 def /lk 416 def /rk 416 def /rc 416 def /lc 416 def /rf 416 def /lf 416 def /bv 416 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def /sr 750 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def /resolution 720 def /startFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch def /urx exch def /lly exch def /llx exch def /y exch 72 mul resolution div def /x exch 72 mul resolution div def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def % scaling for x /sy y ury lly sub div def % scaling for y sx sy scale % scale by (sx,sy) cx sx div llx sub cy sy div ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix { DefFigCTM setmatrix } def /defaultmatrix { DefFigCTM exch copy } def /initgraphics { DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix } def /showpage { initgraphics } def } def /clipFig { currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto } def /doclip { llx lly urx ury clipFig } def /endFig { end SavedState restore } def /globalstart { % Push details about the enviornment on the stack. fontnum fontsize fontslant fontheight % firstpage mh my resolution slotno currentpoint pagesave restore gsave } def /globalend { grestore moveto /slotno exch def /resolution exch def /my exch def /mh exch def % /firstpage exch def /fontheight exch def /fontslant exch def /fontsize exch def /fontnum exch def F /pagesave save def } def /C{/Courier FF}def /R{/Times-Roman FF}def /B{/Times-Bold FF}def /I{/Times-Italic FF}def %% Troff special characters not on Symbol font %% Copyright (C) 1986 by Pipeline Associates, Inc. %% Version 1.0 /altRTD 20 dict def altRTD begin /s{setcachedevice}def /C{1000 1000 scale}def /m /moveto load def /c /curveto load def /S /stroke load def /l /lineto load def /a /arcto load def /p /pop load def /sl /setlinewidth load def end /F_Troff 17 dict def F_Troff begin systemdict /currentpacking known {/SavePacking currentpacking def true setpacking}if /PaintType 0 def /FontType 3 def /StrokeWidth 0 def /UniqueID 8277003 def /FontMatrix [.001000 0 0 .001000 0 0] def /FontBBox [-12 -105 942 855 ] def /Encoding 256 array def /CD 256 1 add dict def /FontInfo 3 dict def FontInfo begin /UnderlinePosition -133 def /UnderlineThickness 20 def end /FontName (Troff) def 0 1 256 1 sub{Encoding exch /.notdef put}for CD /.notdef{500 0 setcharwidth{}}put Encoding (1) 0 get /br put %% bold vertical rule used by tbl CD /br{ C 0 0 -.5 -.5 1 1 s np .05 sl 0 -.1 m 0 .9 l {S} }put Encoding (2) 0 get /ul put %% underline used by tbl CD /ul{ C .5 0 -.5 -.5 1 1 s np .05 sl 0 -.1 m .5 -.1 l {S} }put Encoding (3) 0 get /ru put %% baseline rule CD /ru{ C .5 0 -.5 -.5 1 1 s np .05 sl m0 .5 0 l {S} }put Encoding (4) 0 get /vr put %% vertical rule CD /vr{ C 0 0 -.5 -.5 1 1 s np .05 sl m0 0 1 l {S} }put Encoding (5) 0 get /sq put %% square CD /sq{ C .5 0 -.5 -.5 1 1 s np .05 sl 0 .25 m 0 .5 rl .5 0 rl 0 -.5 rl -.5 0 rl closepath {S} }put Encoding (6) 0 get /bx put %% solid box CD /bx{ C .5 0 -.5 -.5 1 1 s np 0 .25 m 0 .5 rl .5 0 rl 0 -.5 rl -.5 0 rl closepath {fill} }put Encoding (7) 0 get /rn put %% radical extender CD /rn{ C .5 0 -.5 -.5 1 1 s np .03 sl -.03 .9 m .5 0 rl {S} }put Encoding (8) 0 get /GR put %% gray mask CD /GR{ C .5 0 setcharwidth .5 setgray np 0 -.1 m 0 1 rl .5 0 rl 0 -1 rl -.5 0 rl closepath {fill} }put Encoding 97 /a put CD /a{1000 0 0 66 942 421 s 430 415 m 578 406 678 349 662 319 c 655 306 614 287 583 296 c 570 300 466 340 438 332 c 365 309 335 213 270 209 c 0 310 m 108 310 l 108 114 l 0 114 l 0 310 l 42 161 m 42 134 l 66 134 l 66 161 l 42 161 l 47 155 m 47 140 l 62 140 l 62 155 l 47 155 l 110 133 m 226 113 300 66 410 80 c 497 91 550 69 634 76 c 645 76 663 92 669 107 c 677 125 673 141 668 160 c 725 334 m 758 332 734 253 701 250 c 501 325 m 475 316 476 309 473 302 c 465 282 482 263 499 257 c 552 236 615 253 689 253 c 701 253 713 236 713 218 c 712 194 702 168 678 161 c 671 159 663 160 655 160 c 591 158 516 156 479 168 c 461 173 453 191 453 210 c 453 224 456 235 466 244 c 476 253 490 252 503 255 c 459 84 m 447 96 435 106 435 123 c 435 136 440 145 447 155 c 453 163 462 168 469 173 c 110 293 m 173 318 300 421 435 415 c 609 407 852 416 885 411 c 898 409 924 411 930 380 c 942 316 828 339 742 334 c 731 334 730 335 725 335 c 701 336 685 336 660 336 c{S}}put Encoding 98 /b put CD /b{1000 0 -12 66 930 421 s 500 415 m 352 406 252 349 268 319 c 275 306 316 287 347 296 c 360 300 464 340 492 332 c 565 309 595 213 660 209 c 930 310 m 822 310 l 822 114 l 930 114 l 930 310 l 888 161 m 888 134 l 864 134 l 864 161 l 888 161 l 883 155 m 883 140 l 868 140 l 868 155 l 883 155 l 820 133 m 704 113 630 66 520 80 c 433 91 380 69 296 76 c 285 76 267 92 261 107 c 253 125 257 141 262 160 c 205 334 m 172 332 196 253 229 250 c 429 325 m 455 316 454 309 457 302 c 465 282 448 263 431 257 c 378 236 315 253 241 253 c 229 253 217 236 217 218 c 218 194 228 168 252 161 c 259 159 267 160 275 160 c 339 158 414 156 451 168 c 469 173 477 191 477 210 c 477 224 474 235 464 244 c 454 253 440 252 427 255 c 471 84 m 483 96 495 106 495 123 c 495 136 490 145 483 155 c 477 163 468 168 461 173 c 820 293 m 757 318 630 421 495 415 c 321 407 78 416 45 411 c 32 409 6 411 0 380 c -12 316 102 339 188 334 c 199 334 200 335 205 335 c 229 336 245 336 270 336 c{S}}put Encoding 99 /c put CD /c{1000 0 184 0 827 627 s 185 315 m 186 488 332 627 505 625 c 682 623 827 467 815 290 c 804 124 666 0 500 0 c 327 0 184 142 185 315 c{S}}put Encoding 100 /d put CD /d{590 0 134 158 477 500 s 300 160 m 208 162 134 238 135 330 c 136 423 212 500 305 500 c 397 500 473 427 475 335 c 477 239 396 158 300 160 c{fill}}put Encoding 101 /e put % Bell Symbol CD /e{1010 0 -100 -210 1010 1010 s 100 sl 0 setlinecap 420 300 450 0 360 arc 420 650 m 420 575 l S newpath 120 125 m 720 125 l 75 sl S 420 125 m 420 25 l S 220 400 m 220 175 120 175 100 a p p p p 220 400 m 220 550 420 550 80 a p p p p 620 400 m 620 175 720 175 100 a p p p p 620 400 m 620 550 420 550 80 a p p p p 295 550 m 545 550 l{S}}put /BuildChar{altRTD /BuildChar get exec}def end altRTD begin /BuildChar{altRTD begin /char exch def /fontdict exch def save /charname fontdict /Encoding get char get def fontdict /StrokeWidth get sl fontdict /CD get dup charname known {charname}{/.notdef}ifelse get newpath exec fontdict /PaintType get 0 eq{exec}{p S}ifelse restore end}def end systemdict /currentpacking known{F_Troff /SavePacking get setpacking}if /Troff F_Troff definefont pop /Y1{/Troff FF}def /Y{/Symbol FF}def %%EndProlog %%Page: 0 1 BP /slant 0 def /height 1.000000 def 10 C 10 R 40 V 0(-)S 1230 V 12 B 1925(RCS\320A)S 2406(System)S 2809(for)S 2998(Version)S 3434(Control)S 1620 V 10 I 2560(Walter)S 2862(F.)S 2978(Tichy)S 1800 V 10 R 2183(Department)S 2684(of)S 2797(Computer)S 3227(Sciences)S 1920 V 2512(Purdue)S 2825(University)S 2040 V 2257(West)S 2492(Lafayette,)S 2923(Indiana)S 3252(47907)S 2640 V 10 I 2643(ABSTRACT)S 2880 V 10 R 1330(An)S 1490(important)S 1917(problem)S 2289(in)S 2406(program)S 2783(development)S 3338(and)S 3521(maintenance)S 4064(is)S 4170(version)S 4503(con-)S 3000 V 1080(trol,)S 1302(i.e.,)S 1507(the)S 1687(task)S 1906(of)S 2047(keeping)S 2421(a)S 2523(software)S 2924(system)S 3260(consisting)S 3724(of)S 3865(many)S 4145(versions)S 4536(and)S 3120 V 1080(con\256gurations)S 1691(well)S 1902(organized.)S 2389(The)S 2583(Revision)S 2978(Control)S 3323(System)S 3657(\(RCS\))S 3952(is)S 4058(a)S 4141(software)S 4524(tool)S 3240 V 1080(that)S 1280(assists)S 1586(with)S 1814(that)S 2014(task.)S 2280(RCS)S 2520(manages)S 2919(revisions)S 3330(of)S 3463(text)S 3663(documents,)S 4171(in)S 4298(particular)S 3360 V 1080(source)S 1376(programs,)S 1815(documentation,)S 2471(and)S 2652(test)S 2828(data.)S 3086(It)S 3184(automates)S 3626(the)S 3785(storing,)S 4125(retrieval,)S 4519(log-)S 3480 V 1080(ging)S 1289(and)S 1464(identi\256cation)S 2023(of)S 2136(revisions,)S 2552(and)S 2726(it)S 2812(provides)S 3186(selection)S 3571(mechanisms)S 4095(for)S 4241(composing)S 3600 V 1080(con\256gurations.)S 1745(This)S 1962(paper)S 2222(introduces)S 2677(basic)S 2921(version)S 3254(control)S 3576(concepts)S 3964(and)S 4147(discusses)S 4558(the)S 3720 V 1080(practice)S 1438(of)S 1564(version)S 1901(control)S 2227(using)S 2487(RCS.)S 2775(For)S 2957(conserving)S 3438(space,)S 3726(RCS)S 3958(stores)S 4233(deltas,)S 4533(i.e.,)S 3840 V 1080(di)S 1158 H (f)show 10 -.5 mul h (f)show 10 R 1219(erences)S 1555(between)S 1925(successive)S 2384(revisions.)S 2838(Several)S 3175(delta)S 3407(storage)S 3734(methods)S 4112(are)S 4272(discussed.)S 3960 V 1080(Usage)S 1365(statistics)S 1746(show)S 1993(that)S 2179(RCS's)S 2476(delta)S 2705(storage)S 3028(method)S 3363(is)S 3465(space)S 3721(and)S 3900(time)S 4113(e)S 4157 H (f)show 10 -.5 mul h (\256)show 10 R 4241(cient.)S 4525(The)S 4080 V 1080(paper)S 1331(concludes)S 1760(with)S 1968(a)S 2042(detailed)S 2388(survey)S 2684(of)S 2797(version)S 3121(control)S 3434(tools.)S 4320 V 10 B 1080(Keywords)S 10 R 1513(:)S 1579(con\256guration)S 2150(management,)S 2723(history)S 3040(management,)S 3614(version)S 3947(control,)S 4294(revisions,)S 4440 V 1080(deltas.)S 4920 V 720(1991/01/03)S 7920 V EP %%Page: 1 2 BP /slant 0 def /height 1.000000 def 10 R 10 R 40 V 0(-)S 1230 V 12 B 1925(RCS\320A)S 2406(System)S 2809(for)S 2998(Version)S 3434(Control)S 1620 V 10 I 2560(Walter)S 2862(F.)S 2978(Tichy)S 1800 V 10 R 2183(Department)S 2684(of)S 2797(Computer)S 3227(Sciences)S 1920 V 2512(Purdue)S 2825(University)S 2040 V 2257(West)S 2492(Lafayette,)S 2923(Indiana)S 3252(47907)S 2676 V 10 B 720(1.)S 855(Introduction)S 2892 V 10 R 970(Version)S 1353(control)S 1703(is)S 1837(the)S 2026(task)S 2254(of)S 2404(keeping)S 2787(software)S 3197(systems)S 3581(consisting)S 4054(of)S 4205(many)S 4495(versions)S 4896(and)S 3072 V 720(con\256gurations)S 1337(well)S 1554(organized.)S 2047(The)S 2247(Revision)S 2648(Control)S 2999(System)S 3339(\(RCS\))S 3639(is)S 3750(a)S 3838(set)S 3993(of)S 4120(UNIX)S 4413(commands)S 4890(that)S 3252 V 720(assist)S 967(with)S 1175(that)S 1355(task.)S 3468 V 970(RCS')S 1227(primary)S 1577(function)S 1944(is)S 2045(to)S 2157(manage)S 10 I 2501(revision)S 2857(groups)S 10 R 3135(.)S 3224(A)S 3330(revision)S 3686(group)S 3953(is)S 4054(a)S 4133(set)S 4279(of)S 4397(text)S 4582(documents,)S 3648 V 720(called)S 10 I 991(revisions)S 10 R 1352(,)S 1410(that)S 1593(evolved)S 1942(from)S 2169(each)S 2384(other.)S 2677(A)S 2781(new)S 2979(revision)S 3333(is)S 3432(created)S 3751(by)S 3883(manually)S 4287(editing)S 4597(an)S 4723(existing)S 3828 V 720(one.)S 956(RCS)S 1183(organizes)S 1602(the)S 1761(revisions)S 2159(into)S 2352(an)S 2483(ancestral)S 2874(tree.)S 3115(The)S 3307(initial)S 3579(revision)S 3939(is)S 4044(the)S 4204(root)S 4403(of)S 4524(the)S 4684(tree,)S 4896(and)S 4008 V 720(the)S 880(tree)S 1067(edges)S 1332(indicate)S 1686(from)S 1918(which)S 2200(revision)S 2560(a)S 2642(given)S 2902(one)S 3084(evolved.)S 3493(Besides)S 3842(managing)S 4274(individual)S 4718(revision)S 4188 V 720(groups,)S 1052(RCS)S 1277(provides)S 1657(\257exible)S 1993(selection)S 2384(functions)S 2792(for)S 2944(composing)S 3419(con\256gurations.)S 4082(RCS)S 4308(may)S 4516(be)S 4646(combined)S 4368 V 720(with)S 928(MAKE)S 4318 V 1222(1)S 4368 V 1272(,)S 1327(resulting)S 1707(in)S 1815(a)S 1889(powerful)S 2279(package)S 2635(for)S 2781(version)S 3105(control.)S 4584 V 970(RCS)S 1192(also)S 1385(o)S 1435 H (f)show 10 -.5 mul h (f)show 10 R 1496(ers)S 1644(facilities)S 2021(for)S 2170(merging)S 2536(updates)S 2874(with)S 3085(customer)S 3484(modi\256cations,)S 4087(for)S 4236(distributed)S 4697(software)S 4764 V 720(development,)S 1334(and)S 1551(for)S 1740(automatic)S 2207(identi\256cation.)S 2863(Identi\256cation)S 3469(is)S 3609(the)S 3803(`stamping')S 4308(of)S 4463(revisions)S 4896(and)S 4944 V 720(con\256gurations)S 1336(with)S 1558(unique)S 1874(markers.)S 2294(These)S 2576(markers)S 2941(are)S 3106(akin)S 3322(to)S 3444(serial)S 3704(numbers,)S 4118(telling)S 4419(software)S 4807(main-)S 5124 V 720(tainers)S 1016(unambiguously)S 1663(which)S 1937(con\256guration)S 2500(is)S 2597(before)S 2881(them.)S 5340 V 970(RCS)S 1194(is)S 1295(designed)S 1684(for)S 1835(both)S 2048(production)S 2516(and)S 2695(experimental)S 3251(environments.)S 3885(In)S 4003(production)S 4471(environments,)S 5520 V 720(access)S 1014(controls)S 1376(detect)S 1654(update)S 1959(con\257icts)S 2337(and)S 2520(prevent)S 2858(overlapping)S 3374(changes.)S 3789(In)S 3911(experimental)S 4471(environments,)S 5700 V 720(where)S 993(strong)S 1273(controls)S 1625(are)S 1776(counterproductive,)S 2557(it)S 2643(is)S 2740(possible)S 3098(to)S 3206(loosen)S 3497(the)S 3649(controls.)S 5916 V 970(Although)S 1389(RCS)S 1621(was)S 1818(originally)S 2249(intended)S 2635(for)S 2793(programs,)S 3237(it)S 3335(is)S 3444(useful)S 3730(for)S 3888(any)S 4074(text)S 4266(that)S 4458(is)S 4567(revised)S 4897(fre-)S 6096 V 720(quently)S 1054(and)S 1232(whose)S 1521(previous)S 1898(revisions)S 2292(must)S 2520(be)S 2647(preserved.)S 3122(RCS)S 3345(has)S 3511(been)S 3732(applied)S 4059(successfully)S 4580(to)S 4691(store)S 4918(the)S 6276 V 720(source)S 1010(text)S 1190(for)S 1336(drawings,)S 1757(VLSI)S 2009(layouts,)S 2353(documentation,)S 3002(speci\256cations,)S 3601(test)S 3770(data,)S 3991(form)S 4215(letters)S 4489(and)S 4663(articles.)S 6492 V 970(This)S 1191(paper)S 1455(discusses)S 1870(the)S 2035(practice)S 2393(of)S 2519(version)S 2856(control)S 3182(using)S 3442(RCS.)S 3730(It)S 3834(also)S 4038(introduces)S 4497(basic)S 4746(version)S 6672 V 720(control)S 1036(concepts,)S 1443(useful)S 1720(for)S 1869(clarifying)S 2290(current)S 2605(practice)S 2953(and)S 3130(designing)S 3551(similar)S 3861(systems.)S 4265(Revision)S 4653(groups)S 4957(of)S 6852 V 720(individual)S 1161(components)S 1679(are)S 1835(treated)S 2141(in)S 2254(the)S 2411(next)S 2618(three)S 2853(sections,)S 3236(and)S 3416(the)S 3574(extensions)S 4032(to)S 4146(con\256gurations)S 4754(follow.)S 7032 V 720(Because)S 1082(of)S 1195(its)S 1320(size,)S 1530(a)S 1604(survey)S 1900(of)S 2013(version)S 2337(control)S 2650(tools)S 2875(appears)S 3209(at)S 3311(the)S 3463(end)S 3637(of)S 3750(the)S 3902(paper.)S 7132 V 8 Y1 720(333333333333333333)S 7232 V 8 R 720(An)S 842(earlier)S 1067(version)S 1325(of)S 1415(this)S 1554(paper)S 1754(was)S 1902(published)S 2236(in)S 8 I 2322(Software\320Practice)S 2970(&)S 3056(Experience)S 8 B 3450(15)S 8 R 3530(,)S 3574(7)S 3638(\(July)S 3821(1985\),)S 4051(637-654.)S 7920 V EP %%Page: 2 3 BP /slant 0 def /height 1.000000 def 8 R 8 R 40 V 10 R 0(-)S 580 V 2792(- 2 -)S 900 V 10 B 720(2.)S 855(Getting)S 1207(started)S 1536(with)S 1755(RCS)S 1116 V 10 R 970(Suppose)S 1339(a)S 1413(text)S 1593(\256le)S 10 I 1751(f.c)S 10 R 1878(is)S 1975(to)S 2083(be)S 2207(placed)S 2497(under)S 2754(control)S 3067(of)S 3180(RCS.)S 3455(Invoking)S 3846(the)S 3998(check-in)S 4371(command)S 1296 V 10 I 1080(ci)S 1212(f.c)S 1536 V 10 R 720(creates)S 1030(a)S 1108(new)S 1308(revision)S 1664(group)S 1931(with)S 2143(the)S 2299(contents)S 2666(of)S 10 I 2783(f.c)S 10 R 2914(as)S 3031(the)S 3187(initial)S 3455(revision)S 3811(\(numbered)S 4278(1.1\))S 4471(and)S 4650(stores)S 4918(the)S 1716 V 720(group)S 986(into)S 1175(the)S 1330(\256le)S 10 I 1491(f.c,v)S 10 R 1657(.)S 1745(Unless)S 2050(told)S 2239(otherwise,)S 2685(the)S 2840(command)S 3267(deletes)S 10 I 3577(f.c)S 10 R 3674(.)S 3762(It)S 3856(also)S 4050(asks)S 4255(for)S 4404(a)S 4481(description)S 4957(of)S 1896 V 720(the)S 878(group.)S 1202(The)S 1393(description)S 1873(should)S 2176(state)S 2395(the)S 2553(common)S 2939(purpose)S 3291(of)S 3410(all)S 3546(revisions)S 3943(in)S 4057(the)S 4215(group,)S 4510(and)S 4691(becomes)S 2076 V 720(part)S 913(of)S 1034(the)S 1194(group's)S 1537(documentation.)S 2224(All)S 2390(later)S 2605(check-in)S 2986(commands)S 3457(will)S 3651(ask)S 3822(for)S 3976(a)S 4058(log)S 4224(entry,)S 4492(which)S 4773(should)S 2256 V 720(summarize)S 1197(the)S 1358(changes)S 1718(made.)S 2029(\(The)S 2257(\256rst)S 2453(revision)S 2815(is)S 2922(assigned)S 3306(a)S 3390(default)S 3707(log)S 3875(message,)S 4278(which)S 4562(just)S 4747(records)S 2436 V 720(the)S 872(fact)S 1051(that)S 1231(it)S 1317(is)S 1414(the)S 1566(initial)S 1830(revision.\))S 2652 V 970(Files)S 1204(ending)S 1515(in)S 10 I 1632(,v)S 10 R 1740(are)S 1900(called)S 10 I 2177(RCS)S 2394(files)S 10 R 2600(\()S 10 I 2633(v)S 10 R 2716(stands)S 3006(for)S 10 I 3162(v)S 10 R 3206(ersions\);)S 3590(the)S 3752(others)S 4036(are)S 4197(called)S 4475(working)S 4848(\256les.)S 2832 V 720(To)S 861(get)S 1013(back)S 1231(the)S 1383(working)S 1746(\256le)S 10 I 1904(f.c)S 10 R 2031(in)S 2139(the)S 2291(previous)S 2665(example,)S 3058(execute)S 3392(the)S 3544(check-out)S 3967(command:)S 3012 V 10 I 1080(co)S 1234(f.c)S 3252 V 10 R 720(This)S 932(command)S 1360(extracts)S 1704(the)S 1860(latest)S 2105(revision)S 2461(from)S 2689(the)S 2845(revision)S 3201(group)S 10 I 3468(f.c,v)S 10 R 3668(and)S 3846(writes)S 4124(it)S 4214(into)S 10 I 4404(f.c)S 10 R 4501(.)S 4590(The)S 4780(\256le)S 10 I 4943(f.c)S 3432 V 10 R 720(can)S 888(now)S 1090(be)S 1214(edited)S 1488(and,)S 1687(when)S 1933(\256nished,)S 2305(checked)S 2661(back)S 2879(in)S 2987(with)S 10 I 3195(ci)S 10 R 3267(:)S 3612 V 10 I 1080(ci)S 1212(f.c)S 3852 V 720(Ci)S 10 R 845(assigns)S 1164(number)S 1499(1.2)S 1654(to)S 1762(the)S 1914(new)S 2110(revision.)S 2517(If)S 10 I 2613(ci)S 10 R 2715(complains)S 3156(with)S 3364(the)S 3516(message)S 4032 V 10 I 1080(ci)S 1182(error:)S 1456(no)S 1586(lock)S 1782(set)S 1923(by)S 2047()S 4272 V 10 R 720(then)S 922(the)S 1074(system)S 1383(administrator)S 1947(has)S 2111(decided)S 2452(to)S 2561(con\256gure)S 2969(RCS)S 3190(for)S 3337(a)S 3412(production)S 3876(environment)S 4412(by)S 4543(enabling)S 4918(the)S 4452 V 720(`strict)S 993(locking)S 1333(feature'.)S 1736(If)S 1841(this)S 2025(feature)S 2340(is)S 2446(enabled,)S 2820(all)S 2959(RCS)S 3188(\256les)S 3394(are)S 3554(initialized)S 3993(such)S 4215(that)S 4404(check-in)S 4786(opera-)S 4632 V 720(tions)S 959(require)S 1285(a)S 1373(lock)S 1590(on)S 1735(the)S 1902(previous)S 2291(revision)S 2658(\(the)S 2858(one)S 3047(from)S 3286(which)S 3575(the)S 3742(current)S 4069(one)S 4258(evolved\).)S 4707(Locking)S 4812 V 720(prevents)S 1100(overlapping)S 1619(modi\256cations)S 2206(if)S 2309(several)S 2633(people)S 2941(work)S 3188(on)S 3330(the)S 3494(same)S 3740(\256le.)S 3964(If)S 4071(locking)S 4412(is)S 4520(required,)S 4918(the)S 4992 V 720(revision)S 1072(should)S 1369(have)S 1587(been)S 1805(locked)S 2101(during)S 2392(the)S 2544(check-out)S 2967(by)S 3097(using)S 3344(the)S 3496(option)S 10 I 3782(\261l)S 10 R 3860(:)S 5172 V 10 I 1080(co)S 1234(\261l)S 1372(f.c)S 5412 V 10 R 720(Of)S 858(course)S 1151(it)S 1240(is)S 1340(too)S 1501(late)S 1678(now)S 1883(for)S 2032(the)S 2187(check-out)S 2614(with)S 2826(locking,)S 3185(because)S 10 I 3534(f.c)S 10 R 3665(has)S 3832(already)S 4159(been)S 4381(changed;)S 4775(check-)S 5592 V 720(ing)S 880(out)S 1040(the)S 1194(\256le)S 1354(again)S 1602(would)S 1884(overwrite)S 2298(the)S 2452(modi\256cations.)S 3084(\(To)S 3260(prevent)S 3591(accidental)S 4027(overwrites,)S 10 I 4505(co)S 10 R 4631(senses)S 4918(the)S 5772 V 720(presence)S 1111(of)S 1237(a)S 1324(working)S 1700(\256le)S 1871(and)S 2058(asks)S 2273(whether)S 2637(the)S 2803(user)S 3013(really)S 3284(intended)S 3672(to)S 3794(overwrite)S 4220(it.)S 4375(The)S 4574(overwriting)S 5952 V 720(check-out)S 1151(is)S 1256(sometimes)S 1722(useful)S 2004(for)S 2158(backing)S 2512(up)S 2650(to)S 2766(the)S 2926(previous)S 3307(revision.\))S 3754(To)S 3902(be)S 4033(able)S 4236(to)S 4351(proceed)S 4703(with)S 4918(the)S 6132 V 720(check-in)S 1093(in)S 1201(the)S 1353(present)S 1671(case,)S 1897(\256rst)S 2083(execute)S 6312 V 10 I 1080(rcs)S 1262(\261l)S 1400(f.c)S 6552 V 10 R 720(This)S 933(command)S 1363(retroactively)S 1903(locks)S 2150(the)S 2308(latest)S 2555(revision,)S 2938(unless)S 3224(someone)S 3615(else)S 3806(locked)S 4108(it)S 4200(in)S 4314(the)S 4472(meantime.)S 4957(In)S 6732 V 720(this)S 895(case,)S 1121(the)S 1273(two)S 1453(programmers)S 2015(involved)S 2395(have)S 2613(to)S 2721(negotiate)S 3117(whose)S 3402(modi\256cations)S 3977(should)S 4274(take)S 4470(precedence.)S 6948 V 970(If)S 1073(an)S 1204(RCS)S 1431(\256le)S 1596(is)S 1700(private,)S 2039(i.e.,)S 2223(if)S 2321(only)S 2536(the)S 2695(owner)S 2981(of)S 3101(the)S 3260(\256le)S 3426(is)S 3531(expected)S 3923(to)S 4039(deposit)S 4366(revisions)S 4765(into)S 4959(it,)S 7128 V 720(the)S 879(strict)S 1116(locking)S 1453(feature)S 1766(is)S 1870(unnecessary)S 2394(and)S 2575(may)S 2784(be)S 2915(disabled.)S 3340(If)S 3443(strict)S 3680(locking)S 4017(is)S 4120(disabled,)S 4514(the)S 4672(owner)S 4957(of)S 7308 V 720(the)S 884(RCS)S 1117(\256le)S 1288(need)S 1519(not)S 1690(have)S 1921(a)S 2008(lock)S 2223(for)S 2382(check-in.)S 2823(For)S 3005(safety)S 3286(reasons,)S 3653(all)S 3796(others)S 4083(still)S 4277(do.)S 4475(Turning)S 4840(strict)S 7920 V EP %%Page: 3 4 BP /slant 0 def /height 1.000000 def 10 R 10 R 40 V 0(-)S 580 V 2792(- 3 -)S 900 V 720(locking)S 1050(o)S 1100 H (f)show 10 -.5 mul h (f)show 10 R 1191(and)S 1365(on)S 1495(is)S 1592(done)S 1816(with)S 2024(the)S 2176(commands:)S 1080 V 10 I 1080(rcs)S 1262(\261U)S 1444(f.c)S 10 R 1751(and)S 10 I 2165(rcs)S 2347(\261L)S 2513(f.c)S 1320 V 10 R 720(These)S 993(commands)S 1461(enable)S 1756(or)S 1875(disable)S 2194(the)S 2352(strict)S 2588(locking)S 2924(feature)S 3236(for)S 3388(each)S 3606(RCS)S 3832(\256le)S 3996(individually.)S 4571(The)S 4762(system)S 1500 V 720(administrator)S 1283(only)S 1491(decides)S 1820(whether)S 2171(strict)S 2401(locking)S 2731(is)S 2828(enabled)S 3168(initially.)S 1716 V 970(To)S 1114(reduce)S 1412(the)S 1567(clutter)S 1855(in)S 1966(a)S 2043(working)S 2409(directory,)S 2827(all)S 2960(RCS)S 3183(\256les)S 3383(can)S 3554(be)S 3681(moved)S 3986(to)S 4097(a)S 4174(subdirectory)S 4706(with)S 4918(the)S 1896 V 720(name)S 10 I 980(RCS)S 10 R 1158(.)S 1257(RCS)S 1491(commands)S 1968(look)S 2190(\256rst)S 2390(into)S 2590(that)S 2784(directory)S 3188(for)S 3348(RCS)S 3581(\256les.)S 3846(All)S 4017(the)S 4182(commands)S 4658(presented)S 2076 V 720(above)S 988(work)S 1223(with)S 1431(the)S 10 I 1583(RCS)S 10 R 1791(subdirectory)S 2320(without)S 2656(change.\262)S 2292 V 970(It)S 1068(may)S 1277(be)S 1408(undesirable)S 1906(that)S 10 I 2094(ci)S 10 R 2204(deletes)S 2519(the)S 2679(working)S 3050(\256le.)S 3271(For)S 3448(instance,)S 3838(sometimes)S 4304(one)S 4486(would)S 4774(like)S 4962(to)S 2472 V 720(save)S 927(the)S 1079(current)S 1391(revision,)S 1768(but)S 1926(continue)S 2300(editing.)S 2663(Invoking)S 2652 V 10 I 1080(ci)S 1212(\261l)S 1350(f.c)S 2892 V 10 R 720(checks)S 1027(in)S 10 I 1141(f.c)S 10 R 1274(as)S 1393(usual,)S 1665(but)S 1829(performs)S 2225(an)S 2355(additional)S 2792(check-out)S 3222(with)S 3437(locking)S 3774(afterwards.)S 4286(Thus,)S 4548(the)S 4707(working)S 3072 V 720(\256le)S 883(does)S 1101(not)S 1264(disappear)S 1681(after)S 1898(the)S 2055(check-in.)S 2488(Similarly,)S 2921(the)S 3078(option)S 10 I 3368(\261u)S 10 R 3502(does)S 3719(a)S 3797(check-in)S 4174(followed)S 4563(by)S 4697(a)S 4775(check-)S 3252 V 720(out)S 885(without)S 1228(locking.)S 1620(This)S 1835(option)S 2128(is)S 2232(useful)S 2513(if)S 2611(the)S 2770(\256le)S 2935(is)S 3039(needed)S 3359(for)S 3513(compilation)S 4029(after)S 4249(the)S 4409(check-in.)S 4845(Both)S 3432 V 720(options)S 1045(update)S 1341(the)S 1493(identi\256cation)S 2051(markers)S 2402(in)S 2510(the)S 2662(working)S 3025(\256le)S 3183(\(see)S 3373(below\).)S 3648 V 970(Besides)S 1311(the)S 1463(operations)S 10 I 1909(ci)S 10 R 2011(and)S 10 I 2185(co)S 10 R 2279(,)S 2334(RCS)S 2554(provides)S 2928(the)S 3080(following)S 3499(commands:)S 3828 V 10 I 720(ident)S 10 R 1241(extract)S 1542(identi\256cation)S 2100(markers)S 3948 V 10 I 720(rcs)S 10 R 1241(change)S 1553(RCS)S 1773(\256le)S 1931(attributes)S 4068 V 10 I 720(rcsclean)S 10 R 1241(remove)S 1570(unchanged)S 2032(working)S 2395(\256les)S 2592(\(optional\))S 4188 V 10 I 720(rcsdiff)S 10 R 1241(compare)S 1614(revisions)S 4308 V 10 I 720(rcsfreeze)S 10 R 1241(record)S 1525(a)S 1599(con\256guration)S 2162(\(optional\))S 4428 V 10 I 720(rcsmerge)S 10 R 1241(merge)S 1520(revisions)S 4548 V 10 I 720(rlog)S 10 R 1241(read)S 1442(log)S 1600(messages)S 2007(and)S 2181(other)S 2416(information)S 2918(in)S 3026(RCS)S 3246(\256les)S 4728 V 720(A)S 822(synopsis)S 1197(of)S 1310(these)S 1545(commands)S 2008(appears)S 2342(in)S 2450(the)S 2602(Appendix.)S 4968 V 10 B 720(2.1.)S 930(Automatic)S 1409(Identi\256cation)S 5124 V 10 R 970(RCS)S 1201(can)S 1381(stamp)S 1662(source)S 1964(and)S 2150(object)S 2436(code)S 2666(with)S 2886(special)S 3205(identi\256cation)S 3775(strings,)S 4109(similar)S 4429(to)S 4549(product)S 4896(and)S 5244 V 720(serial)S 966(numbers.)S 1395(To)S 1536(obtain)S 1816(such)S 2029(identi\256cation,)S 2612(place)S 2852(the)S 3004(marker)S 5424 V 10 I 1080($Id$)S 5664 V 10 R 720(into)S 923(the)S 1092(text)S 1289(of)S 1419(a)S 1510(revision,)S 1904(for)S 2067(instance)S 2441(inside)S 2727(a)S 2818(comment.)S 3292(The)S 3494(check-out)S 3934(operation)S 4358(will)S 4561(replace)S 4895(this)S 5844 V 720(marker)S 1032(with)S 1240(a)S 1314(string)S 1572(of)S 1685(the)S 1837(form)S 6024 V 10 I 1080($Id:)S 1306(filename)S 1710(revisionnumber)S 2397(date)S 2629(time)S 2861(author)S 3188(state)S 3437(locker)S 3716($)S 6264 V 10 R 720(This)S 929(string)S 1188(need)S 1407(never)S 1659(be)S 1784(touched,)S 2156(because)S 10 I 2502(co)S 10 R 2627(keeps)S 2885(it)S 2972(up)S 3103(to)S 3212(date)S 3409(automatically.)S 4039(To)S 4181(propagate)S 4605(the)S 4758(marker)S 6444 V 720(into)S 906(object)S 1180(code,)S 1423(simply)S 1726(put)S 1884(it)S 1970(into)S 2156(a)S 2230(literal)S 2493(character)S 2887(string.)S 3200(In)S 3313(C,)S 3435(this)S 3610(is)S 3707(done)S 3931(as)S 4044(follows:)S 6702 V 8 Y1 720(333333333333333333)S 6820 V 8 R 820(\262)S 900(Pairs)S 1088(of)S 1184(RCS)S 1367(and)S 1512(working)S 1808(\256les)S 1971(can)S 2111(actually)S 2392(be)S 2497(speci\256ed)S 2810(in)S 2902(3)S 2972(ways:)S 3188(a\))S 3279(both)S 3451(are)S 3577(given,)S 3804(b\))S 3900(only)S 4072(the)S 4199(working)S 4495(\256le)S 4627(is)S 6920 V 720(given,)S 945(c\))S 1034(only)S 1204(the)S 1329(RCS)S 1510(\256le)S 1640(is)S 1721(given.)S 1970(If)S 2050(a)S 2113(pair)S 2264(is)S 2345(given,)S 2570(both)S 2740(\256les)S 2900(may)S 3064(have)S 3241(arbitrary)S 3540(path)S 3704(pre\256xes;)S 4005(RCS)S 4185(commands)S 4557(pair)S 7020 V 720(them)S 903(up)S 1007(intelligently.)S 7920 V EP %%Page: 4 5 BP /slant 0 def /height 1.000000 def 8 R 8 R 40 V 10 R 0(-)S 520 V 2792(- 4 -)S 900 V 10 I 1080(static)S 1327(char)S 1540(rcsid[])S 1848(=)S 1946("$Id$";)S 1140 V 10 R 720(The)S 914(command)S 10 I 1347(ident)S 10 R 1586(extracts)S 1935(such)S 2157(markers)S 2517(from)S 2750(any)S 2933(\256le,)S 3125(in)S 3243(particular)S 3665(from)S 3899(object)S 4183(code.)S 10 I 4466(Ident)S 10 R 4711(helps)S 4962(to)S 1320 V 720(\256nd)S 921(out)S 1094(which)S 1383(revisions)S 1789(of)S 1917(which)S 2206(modules)S 2590(were)S 2828(used)S 3056(in)S 3179(a)S 3268(given)S 3535(program.)S 3972(It)S 4077(returns)S 4398(a)S 4486(complete)S 4896(and)S 1500 V 720(unambiguous)S 1300(component)S 1785(list,)S 1974(from)S 2209(which)S 2494(a)S 2579(copy)S 2814(of)S 2938(the)S 3101(program)S 3480(can)S 3659(be)S 3794(reconstructed.)S 4428(This)S 4648(facility)S 4973(is)S 1680 V 720(invaluable)S 1166(for)S 1312(program)S 1680(maintenance.)S 1896 V 970(There)S 1232(are)S 1383(several)S 1695(additional)S 2125(identi\256cation)S 2683(markers,)S 3059(one)S 3233(for)S 3379(each)S 3591(component)S 4065(of)S 4178($Id$.)S 4446(The)S 4631(marker)S 2076 V 10 I 1080($Log$)S 2316 V 10 R 720(has)S 894(a)S 979(similar)S 1298(function.)S 1727(It)S 1829(accumulates)S 2363(the)S 2526(log)S 2695(messages)S 3113(that)S 3304(are)S 3466(requested)S 3889(during)S 4191(check-in.)S 4630(Thus,)S 4896(one)S 2496 V 720(can)S 891(maintain)S 1274(the)S 1429(complete)S 1828(history)S 2139(of)S 2255(a)S 2332(revision)S 2687(directly)S 3025(inside)S 3297(it,)S 3411(by)S 3544(enclosing)S 3960(it)S 4049(in)S 4160(a)S 4237(comment.)S 4697(Figure)S 4990(1)S 2676 V 720(is)S 822(a)S 901(partial)S 1191(reproduction)S 1736(of)S 1854(a)S 1933(log)S 2096(contained)S 2519(in)S 2632(revision)S 2990(4.1)S 3151(of)S 3270(the)S 3428(\256le)S 10 I 3592(ci.c)S 10 R 3733(.)S 3824(The)S 4015(log)S 4179(appears)S 4519(at)S 4627(the)S 4785(begin-)S 2856 V 720(ning)S 928(of)S 1041(the)S 1193(\256le,)S 1376(and)S 1550(makes)S 1835(it)S 1921(easy)S 2128(to)S 2236(determine)S 2665(what)S 2889(the)S 3041(recent)S 3314(modi\256cations)S 3889(were.)S 3156 V 1080(/*)S 1188($Log:)S 1457(ci.c,v)S 1703($)S 3276 V 1110(*)S 1190(Revision)S 1576(4.1)S 1761(1983/05/10)S 2277(17:03:06)S 2693(wft)S 3396 V 1110(*)S 1190(Added)S 1486(option)S 1772(\261d)S 1902(and)S 2076(\261w,)S 2253(and)S 2427(updated)S 2773(assignment)S 3253(of)S 3366(date,)S 3587(etc.)S 3758(to)S 3866(new)S 4062(delta.)S 3516 V 1110(*)S 1190(Added)S 1486(handling)S 1866(of)S 1979(default)S 2286(branches.)S 3636 V 1110(*)S 3756 V 1110(*)S 1190(Revision)S 1576(3.9)S 1761(1983/02/15)S 2277(15:25:44)S 2693(wft)S 3876 V 1110(*)S 1190(Added)S 1486(call)S 1660(to)S 1768(fastcopy\(\))S 2202(to)S 2310(copy)S 2534(remainder)S 2968(of)S 3081(RCS)S 3301(\256le.)S 3996 V 1110(*)S 4116 V 1110(*)S 1190(Revision)S 1576(3.8)S 1761(1983/01/14)S 2277(15:34:05)S 2693(wft)S 4236 V 1110(*)S 1190(Added)S 1486(ignoring)S 1855(of)S 1968(interrupts)S 2381(while)S 2633(new)S 2829(RCS)S 3049(\256le)S 3207(is)S 3304(renamed;)S 4356 V 1110(*)S 1190(avoids)S 1481(deletion)S 1833(of)S 1946(RCS)S 2166(\256les)S 2363(by)S 2493(interrupts.)S 4476 V 1110(*)S 4596 V 1110(*)S 1190(Revision)S 1576(3.7)S 1761(1982/12/10)S 2277(16:09:20)S 2693(wft)S 4716 V 1110(*)S 1190(Corrected)S 1613(checking)S 2003(of)S 2116(return)S 2384(code)S 2602(from)S 2826(di)S 2904 H (f)show 10 -.5 mul h (f)show 10 R 2965(.)S 4836 V 1110(*)S 1190(An)S 1342(RCS)S 1562(\256le)S 1720(now)S 1922(inherits)S 2252(its)S 2377(mode)S 2629(during)S 2920(the)S 3072(\256rst)S 3258(ci)S 3360(from)S 3584(the)S 3736(working)S 4099(\256le,)S 4956 V 1110(*)S 1190(except)S 1480(that)S 1660(write)S 1895(permission)S 2364(is)S 2461(removed.)S 5076 V 1110(*/)S 5196 V 1783(Figure)S 2074(1.)S 2209(Log)S 2400(entries)S 2696(produced)S 3097(by)S 3227(the)S 3379(marker)S 3691($Log$.)S 5412 V 720(Since)S 973(revisions)S 1365(are)S 1517(stored)S 1792(in)S 1901(the)S 2054(form)S 2279(of)S 2393(di)S 2471 H (f)show 10 -.5 mul h (f)show 10 R 2532(erences,)S 2886(each)S 3099(log)S 3258(message)S 3628(is)S 3727(physically)S 4170(stored)S 4446(once,)S 4691(indepen-)S 5592 V 720(dent)S 922(of)S 1035(the)S 1187(number)S 1522(of)S 1635(revisions)S 2026(present.)S 2399(Thus,)S 2654(the)S 2806($Log$)S 3097(marker)S 3409(incurs)S 3683(negligible)S 4113(space)S 4364(overhead.)S 5952 V 10 B 720(3.)S 855(The)S 1052(RCS)S 1282(Revision)S 1679(Tree)S 6168 V 10 R 970(RCS)S 1198(arranges)S 1573(revisions)S 1972(in)S 2089(an)S 2222(ancestral)S 2615(tree.)S 2858(The)S 10 I 3052(ci)S 10 R 3163(command)S 3596(builds)S 3880(this)S 4064(tree;)S 4280(the)S 4441(auxiliary)S 4835(com-)S 6348 V 720(mand)S 10 I 983(rcs)S 10 R 1146(prunes)S 1453(it.)S 1605(The)S 1801(tree)S 1991(has)S 2165(a)S 2250(root)S 2452(revision,)S 2840(normally)S 3242(numbered)S 3682(1.1,)S 3873(and)S 4057(successive)S 4518(revisions)S 4919(are)S 6528 V 720(numbered)S 1154(1.2,)S 1339(1.3,)S 1524(etc.)S 1730(The)S 1921(\256rst)S 2113(\256eld)S 2327(of)S 2446(a)S 2526(revision)S 2884(number)S 3225(is)S 3328(called)S 3602(the)S 10 I 3760(release)S 4084(number)S 10 R 4425(and)S 4605(the)S 4763(second)S 6708 V 720(one)S 900(the)S 10 I 1058(level)S 1282(number)S 10 R 1587(.)S 1677(Unless)S 1984(given)S 2241(explicitly,)S 2679(the)S 10 I 2836(ci)S 10 R 2943(command)S 3372(assigns)S 3696(a)S 3775(new)S 3976(revision)S 4333(number)S 4673(by)S 4808(incre-)S 6888 V 720(menting)S 1085(the)S 1244(level)S 1475(number)S 1817(of)S 1937(the)S 2096(previous)S 2477(revision.)S 2891(The)S 3084(release)S 3398(number)S 3741(must)S 3974(be)S 4106(incremented)S 4637(explicitly,)S 7068 V 720(using)S 974(the)S 10 I 1133(\261r)S 10 R 1259(option)S 1551(of)S 10 I 1670(ci)S 10 R 1742(.)S 1833(Assuming)S 2275(there)S 2510(are)S 2667(revisions)S 3064(1.1,)S 3250(1.2,)S 3436(and)S 3616(1.3)S 3777(in)S 3891(the)S 4049(RCS)S 4275(\256le)S 4439(f.c,v,)S 4677(the)S 4835(com-)S 7248 V 720(mand)S 7920 V EP %%Page: 5 6 BP /slant 0 def /height 1.000000 def 10 R 10 R 40 V 0(-)S 580 V 2792(- 5 -)S 900 V 10 I 1080(ci)S 1212(\261r2.1)S 1486(f.c)S 10 R 1793(or)S 10 I 2086(ci)S 2218(\261r2)S 2417(f.c)S 1140 V 10 R 720(assigns)S 1061(the)S 1235(number)S 1592(2.1)S 1769(to)S 1899(the)S 2074(new)S 2293(revision.)S 2723(Later)S 2986(check-ins)S 3421(without)S 3780(the)S 10 I 3955(\261r)S 10 R 4097(option)S 4406(will)S 4615(assign)S 4918(the)S 1320 V 720(numbers)S 1095(2.2,)S 1276(2.3,)S 1457(and)S 1632(so)S 1751(on.)S 1936(The)S 2121(release)S 2427(number)S 2762(should)S 3059(be)S 3183(incremented)S 3706(only)S 3914(at)S 4016(major)S 4279(transition)S 4687(points)S 4962(in)S 1500 V 720(the)S 872(development,)S 1443(for)S 1589(instance)S 1946(when)S 2192(a)S 2266(new)S 2462(release)S 2768(of)S 2881(a)S 2955(software)S 3328(product)S 3663(has)S 3826(been)S 4044(completed.)S 1860 V 10 B 720(3.1.)S 930(When)S 1216(are)S 1384(branches)S 1803(needed?)S 2076 V 10 R 970(A)S 1075(young)S 1358(revision)S 1713(tree)S 1895(is)S 1995(slender:)S 2344(It)S 2438(consists)S 2789(of)S 2906(only)S 3118(one)S 3296(branch,)S 3626(called)S 3898(the)S 4054(trunk.)S 4354(As)S 4499(the)S 4655(tree)S 4838(ages,)S 2256 V 720(side)S 911(branches)S 1295(may)S 1497(form.)S 1776(Branches)S 2177(are)S 2328(needed)S 2640(in)S 2748(the)S 2900(following)S 3319(4)S 3399(situations.)S 2472 V 10 I 720(Temporary)S 1194(fixes)S 2652 V 10 R 970(Suppose)S 1346(a)S 1427(tree)S 1614(has)S 1785(5)S 1873(revisions)S 2272(grouped)S 2637(in)S 2753(2)S 2841(releases,)S 3219(as)S 3340(illustrated)S 3778(in)S 3894(Figure)S 4193(2.)S 4336(Revision)S 4730(1.3,)S 4918(the)S 2832 V 970(last)S 1139(one)S 1313(of)S 1426(release)S 1732(1,)S 1837(is)S 1934(in)S 2042(operation)S 2449(at)S 2551(customer)S 2947(sites,)S 3180(while)S 3432(release)S 3738(2)S 3818(is)S 3915(in)S 4023(active)S 4291(development.)S 3143 V 8 R 2532(1.1)S 3242 V 2410 H 2410 3012 lc 2410 3012 mc 2410 H 2755 3012 lc 2755 3012 mc 2755 H 2755 3242 lc 2755 3242 mc 2755 H 2410 3242 lc 2410 3242 mc 3127 V 2755 H 2985 3127 lc 2985 3127 mc 3138 V 2939 H 2985 3127 lc 2985 3127 mc 3115 V 2939 H 2985 3126 lc 2985 3126 mc 3143 V 3108(1.2)S 3242 V 2986 H 2986 3012 lc 2986 3012 mc 2986 H 3331 3012 lc 3331 3012 mc 3331 H 3331 3242 lc 3331 3242 mc 3331 H 2986 3242 lc 2986 3242 mc 3127 V 3331 H 3561 3127 lc 3561 3127 mc 3138 V 3515 H 3561 3127 lc 3561 3127 mc 3115 V 3515 H 3561 3126 lc 3561 3126 mc 3143 V 3684(1.3)S 3242 V 3562 H 3562 3012 lc 3562 3012 mc 3562 H 3907 3012 lc 3907 3012 mc 3907 H 3907 3242 lc 3907 3242 mc 3907 H 3562 3242 lc 3562 3242 mc 3127 V 3907 H 4137 3127 lc 4137 3127 mc 3138 V 4091 H 4137 3127 lc 4137 3127 mc 3115 V 4091 H 4137 3126 lc 4137 3126 mc 3143 V 4260(2.1)S 3242 V 4138 H 4138 3012 lc 4138 3012 mc 4138 H 4483 3012 lc 4483 3012 mc 4483 H 4483 3242 lc 4483 3242 mc 4483 H 4138 3242 lc 4138 3242 mc 3127 V 4483 H 4713 3127 lc 4713 3127 mc 3138 V 4667 H 4713 3127 lc 4713 3127 mc 3115 V 4667 H 4713 3126 lc 4713 3126 mc 3143 V 4836(2.2)S 3242 V 4714 H 4714 3012 lc 4714 3012 mc 4714 H 5059 3012 lc 5059 3012 mc 5059 H 5059 3242 lc 5059 3242 mc 5059 H 4714 3242 lc 4714 3242 mc 3127 V 5059 H 5082 3127 lc 5082 3127 mc 5111 H 5134 3127 lc 5134 3127 mc 5163 H 5186 3127 lc 5186 3127 mc 5215 H 5238 3127 lc 5238 3127 mc 5266 H 5289 3127 lc 5289 3127 mc 3138 V 5243 H 5289 3127 lc 5289 3127 mc 3115 V 5243 H 5289 3126 lc 5289 3126 mc 3422 V 10 R 2319(Figure)S 2610(2.)S 2745(A)S 2847(slender)S 3165(revision)S 3517(tree.)S 3602 V 970(Now)S 1194(imagine)S 1547(a)S 1622(customer)S 2019(requesting)S 2466(a)S 2541(\256x)S 2678(of)S 2792(a)S 2867(problem)S 3231(in)S 3340(revision)S 3693(1.3,)S 3874(although)S 4255(actual)S 4524(development)S 3782 V 970(has)S 1135(moved)S 1439(on)S 1571(to)S 1681(release)S 1989(2.)S 2126(RCS)S 2347(does)S 2561(not)S 2720(permit)S 3012(an)S 3137(extra)S 3367(revision)S 3720(to)S 3829(be)S 3954(spliced)S 4268(in)S 4377(between)S 4740(1.3)S 4896(and)S 3962 V 970(2.1,)S 1151(since)S 1387(that)S 1568(would)S 1849(not)S 2008(re\257ect)S 2288(the)S 2441(actual)S 2710(development)S 3257(history.)S 3621(Instead,)S 3966(create)S 4235(a)S 4311(branch)S 4614(at)S 4718(revision)S 4142 V 970(1.3,)S 1155(and)S 1334(check)S 1601(in)S 1714(the)S 1871(\256x)S 2012(on)S 2147(that)S 2332(branch.)S 2692(The)S 2881(\256rst)S 3071(branch)S 3376(starting)S 3710(at)S 3816(1.3)S 3975(has)S 4142(number)S 4481(1.3.1,)S 4740(and)S 4918(the)S 4322 V 970(revisions)S 1374(on)S 1517(that)S 1710(branch)S 2024(are)S 2188(numbered)S 2630(1.3.1.1,)S 2974(1.3.1.2,)S 3318(etc.)S 3533(The)S 3732(double)S 4048(numbering)S 4525(is)S 4636(needed)S 4962(to)S 4502 V 970(allow)S 1235(for)S 1394(another)S 1736(branch)S 2050(at)S 2165(1.3,)S 2358(say)S 2534(1.3.2.)S 2832(Revisions)S 3270(on)S 3413(the)S 3578(second)S 3898(branch)S 4212(would)S 4505(be)S 4641(numbered)S 4682 V 970(1.3.2.1,)S 1300(1.3.2.2,)S 1630(and)S 1804(so)S 1923(on.)S 2108(The)S 2293(following)S 2712(steps)S 2942(create)S 3209(branch)S 3510(1.3.1)S 3740(and)S 3914(add)S 4088(revision)S 4440(1.3.1.1:)S 4862 V 10 I 1270(co)S 1424(\261r1.3)S 1698(f.c)S 2028(\320)S 2147(check)S 2403(out)S 2561(revision)S 2913(1.3)S 4982 V 1270(edit)S 1480(f.c)S 2028(\320)S 2147(change)S 2465(it)S 5102 V 1270(ci)S 1402(\261r1.3.1)S 1751(f.c)S 2028(\320)S 2147(check)S 2403(it)S 2489(in)S 2597(on)S 2727(branch)S 3040(1.3.1)S 5342 V 10 R 970(This)S 1184(sequence)S 1585(of)S 1704(commands)S 2173(transforms)S 2636(the)S 2794(tree)S 2979(of)S 3098(Figure)S 3395(2)S 3481(into)S 3673(the)S 3831(one)S 4011(in)S 4126(Figure)S 4424(3.)S 4566(Note)S 4797(that)S 4984(it)S 5522 V 970(may)S 1179(be)S 1310(necessary)S 1734(to)S 1849(incorporate)S 2340(the)S 2499(di)S 2577 H (f)show 10 -.5 mul h (f)show 10 R 2638(erences)S 2973(between)S 3342(1.3)S 3504(and)S 3685(1.3.1.1)S 3997(into)S 4189(a)S 4269(revision)S 4627(at)S 4735(level)S 4965(2.)S 5702 V 970(The)S 1155(operation)S 10 I 1562(rcsmerge)S 10 R 1963(automates)S 2398(this)S 2573(process)S 2902(\(see)S 3092(the)S 3244(Appendix\).)S 6013 V 8 R 2532(1.1)S 6112 V 2410 H 2410 5882 lc 2410 5882 mc 2410 H 2755 5882 lc 2755 5882 mc 2755 H 2755 6112 lc 2755 6112 mc 2755 H 2410 6112 lc 2410 6112 mc 5997 V 2755 H 2985 5997 lc 2985 5997 mc 6008 V 2939 H 2985 5997 lc 2985 5997 mc 5985 V 2939 H 2985 5996 lc 2985 5996 mc 6013 V 3108(1.2)S 6112 V 2986 H 2986 5882 lc 2986 5882 mc 2986 H 3331 5882 lc 3331 5882 mc 3331 H 3331 6112 lc 3331 6112 mc 3331 H 2986 6112 lc 2986 6112 mc 5997 V 3331 H 3561 5997 lc 3561 5997 mc 6008 V 3515 H 3561 5997 lc 3561 5997 mc 5985 V 3515 H 3561 5996 lc 3561 5996 mc 6013 V 3684(1.3)S 6112 V 3562 H 3562 5882 lc 3562 5882 mc 3562 H 3907 5882 lc 3907 5882 mc 3907 H 3907 6112 lc 3907 6112 mc 3907 H 3562 6112 lc 3562 6112 mc 5997 V 3907 H 4137 5997 lc 4137 5997 mc 6008 V 4091 H 4137 5997 lc 4137 5997 mc 5985 V 4091 H 4137 5996 lc 4137 5996 mc 6013 V 4260(2.1)S 6112 V 4138 H 4138 5882 lc 4138 5882 mc 4138 H 4483 5882 lc 4483 5882 mc 4483 H 4483 6112 lc 4483 6112 mc 4483 H 4138 6112 lc 4138 6112 mc 5997 V 4483 H 4713 5997 lc 4713 5997 mc 6008 V 4667 H 4713 5997 lc 4713 5997 mc 5985 V 4667 H 4713 5996 lc 4713 5996 mc 6013 V 4836(2.2)S 6112 V 4714 H 4714 5882 lc 4714 5882 mc 4714 H 5059 5882 lc 5059 5882 mc 5059 H 5059 6112 lc 5059 6112 mc 5059 H 4714 6112 lc 4714 6112 mc 5997 V 5059 H 5082 5997 lc 5082 5997 mc 5111 H 5134 5997 lc 5134 5997 mc 5163 H 5186 5997 lc 5186 5997 mc 5215 H 5238 5997 lc 5238 5997 mc 5266 H 5289 5997 lc 5289 5997 mc 6008 V 5243 H 5289 5997 lc 5289 5997 mc 5985 V 5243 H 5289 5996 lc 5289 5996 mc 6474 V 4200(1.3.1.1)S 6573 V 4138 H 4138 6343 lc 4138 6343 mc 6342 V 4138 H 4483 6342 lc 4483 6342 mc 4483 H 4483 6572 lc 4483 6572 mc 6573 V 4483 H 4138 6573 lc 4138 6573 mc 6458 V 4483 H 4506 6458 lc 4506 6458 mc 4535 H 4558 6458 lc 4558 6458 mc 4587 H 4610 6458 lc 4610 6458 mc 4639 H 4662 6458 lc 4662 6458 mc 4690 H 4713 6458 lc 4713 6458 mc 6469 V 4667 H 4713 6458 lc 4713 6458 mc 6446 V 4667 H 4713 6457 lc 4713 6457 mc 6112 V 3734 H 4137 6457 lc 4137 6457 mc 6436 V 4095 H 4137 6457 lc 4137 6457 mc 6419 V 4110 H 4137 6457 lc 4137 6457 mc 6753 V 10 R 2053(Figure)S 2344(3.)S 2479(A)S 2581(revision)S 2933(tree)S 3112(with)S 3320(one)S 3494(side)S 3685(branch)S 7149 V 10 I 720(Distributed)S 1206(development)S 1740(and)S 1920(customer)S 2316(modifications)S 7329 V 10 R 970(Assume)S 1337(a)S 1426(situation)S 1816(as)S 1944(in)S 2067(Figure)S 2373(2,)S 2493(where)S 2781(revision)S 3148(1.3)S 3319(is)S 3432(in)S 3556(operation)S 3979(at)S 4097(several)S 4425(customer)S 4837(sites,)S 7920 V EP %%Page: 6 7 BP /slant 0 def /height 1.000000 def 10 R 10 R 40 V 0(-)S 580 V 2792(- 6 -)S 900 V 970(while)S 1223(release)S 1530(2)S 1611(is)S 1709(in)S 1818(development.)S 2420(Customer)S 2840(sites)S 3049(should)S 3347(use)S 3510(RCS)S 3730(to)S 3838(store)S 4062(the)S 4214(distributed)S 4672(software.)S 1080 V 970(However,)S 1413(customer)S 1832(modi\256cations)S 2430(should)S 2750(not)S 2931(be)S 3078(placed)S 3391(on)S 3544(the)S 3719(same)S 3977(branch)S 4301(as)S 4437(the)S 4612(distributed)S 1260 V 970(source;)S 1309(instead,)S 1668(they)S 1891(should)S 2209(be)S 2354(placed)S 2665(on)S 2816(a)S 2911(side)S 3123(branch.)S 3500(When)S 3789(the)S 3962(next)S 4185(software)S 4578(distribution)S 1440 V 970(arrives,)S 1303(it)S 1396(should)S 1700(be)S 1831(appended)S 2250(to)S 2365(the)S 2524(trunk)S 2772(of)S 2892(the)S 3051(customer's)S 3527(RCS)S 3755(\256le,)S 3946(and)S 4128(the)S 4288(customer)S 4692(can)S 4868(then)S 1620 V 970(merge)S 1254(the)S 1411(local)S 1640(modi\256cations)S 2220(back)S 2443(into)S 2634(the)S 2791(new)S 2992(release.)S 3358(In)S 3475(the)S 3631(above)S 3903(example,)S 4300(a)S 4378(customer's)S 4850(RCS)S 1800 V 970(\256le)S 1134(would)S 1421(contain)S 1752(the)S 1911(following)S 2337(tree,)S 2548(assuming)S 2963(that)S 3150(the)S 3309(customer)S 3712(has)S 3882(received)S 4256(revision)S 4615(1.3,)S 4802(added)S 1980 V 970(his)S 1124(local)S 1355(modi\256cations)S 1937(as)S 2057(revision)S 2416(1.3.1.1,)S 2753(then)S 2962(received)S 3336(revision)S 3695(2.4,)S 3882(and)S 4063(merged)S 4399(2.4)S 4560(and)S 4740(1.3.1.1,)S 2160 V 970(resulting)S 1350(in)S 1458(2.4.1.1.)S 2471 V 8 R 2532(1.3)S 2570 V 2410 H 2410 2340 lc 2410 2340 mc 2410 H 2755 2340 lc 2755 2340 mc 2755 H 2755 2570 lc 2755 2570 mc 2755 H 2410 2570 lc 2410 2570 mc 2471 V 4260(2.4)S 2570 V 4138 H 4138 2340 lc 4138 2340 mc 4138 H 4483 2340 lc 4483 2340 mc 4483 H 4483 2570 lc 4483 2570 mc 4483 H 4138 2570 lc 4138 2570 mc 2455 V 2755 H 4137 2455 lc 4137 2455 mc 2466 V 4091 H 4137 2455 lc 4137 2455 mc 2443 V 4091 H 4137 2454 lc 4137 2454 mc 2932 V 3048(1.3.1.1)S 3031 V 2986 H 2986 2801 lc 2986 2801 mc 2800 V 2986 H 3331 2800 lc 3331 2800 mc 3331 H 3331 3030 lc 3331 3030 mc 3031 V 3331 H 2986 3031 lc 2986 3031 mc 2570 V 2582 H 2985 2915 lc 2985 2915 mc 2894 V 2943 H 2985 2915 lc 2985 2915 mc 2877 V 2958 H 2985 2915 lc 2985 2915 mc 2932 V 4776(2.4.1.1)S 3031 V 4714 H 4714 2801 lc 4714 2801 mc 2800 V 4714 H 5059 2800 lc 5059 2800 mc 5059 H 5059 3030 lc 5059 3030 mc 3031 V 5059 H 4714 3031 lc 4714 3031 mc 2570 V 4310 H 4713 2915 lc 4713 2915 mc 2894 V 4671 H 4713 2915 lc 4713 2915 mc 2877 V 4686 H 4713 2915 lc 4713 2915 mc 3211 V 10 R 1740(Figure)S 2031(4.)S 2166(A)S 2268(customer's)S 2736(revision)S 3088(tree)S 3267(with)S 3475(local)S 3699(modi\256cations.)S 3571 V 970(This)S 1178(approach)S 1573(is)S 1670(actually)S 2016(practiced)S 2411(in)S 2519(the)S 2671(CSNET)S 3018(project,)S 3350(where)S 3623(several)S 3935(universities)S 4426(and)S 4600(a)S 4674(company)S 3751 V 970(cooperate)S 1387(in)S 1495(developing)S 1969(a)S 2043(national)S 2395(computer)S 2802(network.)S 3967 V 10 I 720(Parallel)S 1078(development)S 4147 V 10 R 970(Sometimes)S 1451(it)S 1543(is)S 1646(desirable)S 2042(to)S 2156(explore)S 2491(an)S 2621(alternate)S 3000(design)S 3297(or)S 3416(a)S 3497(di)S 3575 H (f)show 10 -.5 mul h (f)show 10 R 3636(erent)S 3872(implementation)S 4537(technique)S 4962(in)S 4327 V 970(parallel)S 1301(with)S 1511(the)S 1665(main)S 1896(line)S 2077(development.)S 2679(Such)S 2910(development)S 3457(should)S 3755(be)S 3880(carried)S 4187(out)S 4346(on)S 4477(a)S 4552(side)S 4744(branch.)S 4507 V 970(The)S 1155(experimental)S 1706(changes)S 2057(may)S 2259(later)S 2466(be)S 2590(moved)S 2892(into)S 3078(the)S 3230(main)S 3460(line,)S 3665(or)S 3778(abandoned.)S 4723 V 10 I 720(Conflicting)S 1201(updates)S 4903 V 10 R 970(A)S 1075(common)S 1458(occurrence)S 1927(is)S 2027(that)S 2210(one)S 2387(programmer)S 2913(has)S 3079(checked)S 3438(out)S 3599(a)S 3676(revision,)S 4056(but)S 4218(cannot)S 4518(complete)S 4918(the)S 5083 V 970(assignment)S 1459(for)S 1614(some)S 1864(reason.)S 2218(In)S 2340(the)S 2501(meantime,)S 2959(another)S 3297(person)S 3602(must)S 3836(perform)S 4196(another)S 4534(modi\256cation)S 5263 V 970(immediately.)S 1565(In)S 1689(that)S 1880(case,)S 2117(the)S 2280(second)S 2598(person)S 2905(should)S 3213(check-out)S 3647(the)S 3810(same)S 4056(revision,)S 4444(modify)S 4774(it,)S 4896(and)S 5443 V 970(check)S 1232(it)S 1318(in)S 1426(on)S 1556(a)S 1630(side)S 1821(branch,)S 2147(for)S 2293(later)S 2500(merging.)S 5659 V 970(Every)S 1238(node)S 1462(in)S 1570(a)S 1644(revision)S 1996(tree)S 2175(consists)S 2522(of)S 2635(the)S 2787(following)S 3206(attributes:)S 3636(a)S 3711(revision)S 4064(number,)S 4425(a)S 4500(check-in)S 4874(date)S 5839 V 720(and)S 896(time,)S 1131(the)S 1285(author's)S 1644(identi\256cation,)S 2229(a)S 2305(log)S 2465(entry,)S 2727(a)S 2803(state)S 3018(and)S 3194(the)S 3348(actual)S 3618(text.)S 3855(All)S 4015(these)S 4252(attributes)S 4656(are)S 4808(deter-)S 6019 V 720(mined)S 1000(at)S 1102(the)S 1254(time)S 1462(the)S 1614(revision)S 1966(is)S 2063(checked)S 2419(in.)S 2582(The)S 2767(state)S 2980(attribute)S 3344(indicates)S 3730(the)S 3883(status)S 4142(of)S 4256(a)S 4331(revision.)S 4739(It)S 4831(is)S 4929(set)S 6199 V 720(automatically)S 1299(to)S 1412(`experimental')S 2034(during)S 2330(check-in.)S 2763(A)S 2870(revision)S 3227(can)S 3400(later)S 3612(be)S 3741(promoted)S 4158(to)S 4270(a)S 4348(higher)S 4637(status,)S 4924(for)S 6379 V 720(example)S 1088(`stable')S 1417(or)S 1530(`released'.)S 2007(The)S 2192(set)S 2333(of)S 2446(states)S 2698(is)S 2795(user-de\256ned.)S 6739 V 10 B 720(3.2.)S 930(Revisions)S 1366(are)S 1534(represented)S 2068(as)S 2187(deltas)S 6955 V 10 R 970(For)S 1145(conserving)S 1619(space,)S 1901(RCS)S 2127(stores)S 2396(revisions)S 2793(in)S 2907(the)S 3065(form)S 3295(of)S 3414(deltas,)S 3708(i.e.,)S 3891(as)S 4010(di)S 4088 H (f)show 10 -.5 mul h (f)show 10 R 4149(erences)S 4483(between)S 4852(revi-)S 7135 V 720(sions.)S 1011(The)S 1196(user)S 1392(interface)S 1770(completely)S 2244(hides)S 2485(this)S 2660(fact.)S 7920 V EP %%Page: 7 8 BP /slant 0 def /height 1.000000 def 10 R 10 R 40 V 0(-)S 580 V 2792(- 7 -)S 900 V 970(A)S 1096(delta)S 1344(is)S 1465(a)S 1563(sequence)S 1982(of)S 2119(edit)S 2323(commands)S 2810(that)S 3014(transforms)S 3495(one)S 3694(string)S 3977(into)S 4188(another.)S 4597(The)S 4807(deltas)S 1080 V 720(employed)S 1156(by)S 1298(RCS)S 1529(are)S 1691(line-based,)S 2167(which)S 2452(means)S 2748(that)S 2939(the)S 3102(only)S 3321(edit)S 3512(commands)S 3986(allowed)S 4343(are)S 4505(insertion)S 4896(and)S 1260 V 720(deletion)S 1091(of)S 1223(lines.)S 1516(If)S 1631(a)S 1724(single)S 2012(character)S 2425(in)S 2552(a)S 2646(line)S 2846(is)S 2963(changed,)S 3370(the)S 3542(edit)S 3742(scripts)S 4053(consider)S 4441(the)S 4613(entire)S 4890(line)S 1440 V 720(changed.)S 1145(The)S 1337(program)S 10 I 1712(diff)S 1390 V 10 R 1846(2)S 1440 V 1933(produces)S 2330(a)S 2411(small,)S 2690(line-based)S 3137(delta)S 3368(between)S 3737(pairs)S 3968(of)S 4088(text)S 4275(\256les.)S 4534(A)S 4643(character-)S 1620 V 720(based)S 977(edit)S 1157(script)S 1409(would)S 1689(take)S 1885(much)S 2137(longer)S 2422(to)S 2530(compute,)S 2929(and)S 3103(would)S 3383(not)S 3541(be)S 3665(signi\256cantly)S 4190(shorter.)S 1836 V 970(Using)S 1259(deltas)S 1542(is)S 1659(a)S 1753(classical)S 2141(space-time)S 2623(tradeo)S 2872 H (f)show 10 -.5 mul h (f)show 10 R 2933(:)S 3011(deltas)S 3294(reduce)S 3609(the)S 3782(space)S 4054(consumed,)S 4535(but)S 4714(increase)S 2016 V 720(access)S 1012(time.)S 1283(However,)S 1711(a)S 1793(version)S 2124(control)S 2444(tool)S 2637(should)S 2941(impose)S 3267(as)S 3387(little)S 3608(delay)S 3861(as)S 3981(possible)S 4346(on)S 4483(programmers.)S 2196 V 720(Excessive)S 1163(delays)S 1462(discourage)S 1938(the)S 2104(use)S 2281(of)S 2408(version)S 2746(controls,)S 3137(or)S 3264(induce)S 3574(programmers)S 4150(to)S 4273(take)S 4484(shortcuts)S 4890(that)S 2376 V 720(compromise)S 1252(system)S 1568(integrity.)S 2000(To)S 2149(gain)S 2359(reasonably)S 2829(fast)S 3011(access)S 3303(time)S 3518(for)S 3671(both)S 3886(editing)S 4201(and)S 4382(compiling,)S 4850(RCS)S 2556 V 720(arranges)S 1096(deltas)S 1368(in)S 1485(the)S 1646(following)S 2074(way.)S 2334(The)S 2528(most)S 2762(recent)S 3044(revision)S 3406(on)S 3546(the)S 3708(trunk)S 3959(is)S 4066(stored)S 4350(intact.)S 4667(All)S 4835(other)S 2736 V 720(revisions)S 1117(on)S 1253(the)S 1411(trunk)S 1658(are)S 1815(stored)S 2095(as)S 2214(reverse)S 2537(deltas.)S 2861(A)S 2969(reverse)S 3292(delta)S 3522(describes)S 3928(how)S 4135(to)S 4248(go)S 4383(backward)S 4805(in)S 4918(the)S 2916 V 720(development)S 1277(history:)S 1624(it)S 1721(produces)S 2122(the)S 2285(desired)S 2615(revision)S 2979(if)S 3082(applied)S 3418(to)S 3538(the)S 3702(successor)S 4126(of)S 4251(that)S 4443(revision.)S 4862(This)S 3096 V 720(implementation)S 1379(has)S 1543(the)S 1696(advantage)S 2131(that)S 2311(extraction)S 2740(of)S 2853(the)S 3005(latest)S 3246(revision)S 3598(is)S 3695(a)S 3769(simple)S 4066(and)S 4240(fast)S 4414(copy)S 4638(operation.)S 3276 V 720(Adding)S 1051(a)S 1126(new)S 1324(revision)S 1678(to)S 1788(the)S 1942(trunk)S 2185(is)S 2284(also)S 2477(fast:)S 10 I 2681(ci)S 10 R 2785(simply)S 3090(adds)S 3305(the)S 3459(new)S 3657(revision)S 4011(intact,)S 4290(replaces)S 4648(the)S 4802(previ-)S 3456 V 720(ous)S 895(revision)S 1253(with)S 1467(a)S 1546(reverse)S 1868(delta,)S 2122(and)S 2301(keeps)S 2563(the)S 2720(rest)S 2899(of)S 3017(the)S 3174(old)S 3337(deltas.)S 3660(Thus,)S 10 I 3920(ci)S 10 R 4027(requires)S 4383(the)S 4540(computation)S 3636 V 720(of)S 833(only)S 1041(one)S 1215(new)S 1411(delta.)S 3852 V 970(Branches)S 1373(need)S 1593(special)S 1902(treatment.)S 2366(The)S 2553(naive)S 2801(solution)S 3156(would)S 3439(be)S 3566(to)S 3677(store)S 3904(complete)S 4303(copies)S 4591(for)S 4740(the)S 4895(tips)S 4032 V 720(of)S 836(all)S 969(branches.)S 1411(Clearly,)S 1762(this)S 1939(approach)S 2336(would)S 2618(cost)S 2811(too)S 2971(much)S 3225(space.)S 3533(Instead,)S 3878(RCS)S 4100(uses)S 10 I 4304(forward)S 10 R 4659(deltas)S 4924(for)S 4212 V 720(branches.)S 1163(Regenerating)S 1729(a)S 1807(revision)S 2163(on)S 2297(a)S 2375(side)S 2570(branch)S 2875(proceeds)S 3263(as)S 3380(follows.)S 3769(First,)S 4012(extract)S 4317(the)S 4473(latest)S 4718(revision)S 4392 V 720(on)S 864(the)S 1030(trunk;)S 1313(secondly,)S 1737(apply)S 2003(reverse)S 2334(deltas)S 2611(until)S 2839(the)S 3005(fork)S 3215(revision)S 3581(for)S 3741(the)S 3907(branch)S 4222(is)S 4333(obtained;)S 4748(thirdly,)S 4572 V 720(apply)S 974(forward)S 1321(deltas)S 1586(until)S 1802(the)S 1956(desired)S 2277(branch)S 2581(revision)S 2936(is)S 3036(reached.)S 3433(Figure)S 3727(5)S 3810(illustrates)S 4232(a)S 4309(tree)S 4491(with)S 4702(one)S 4879(side)S 4752 V 720(branch.)S 1076(Triangles)S 1483(pointing)S 1847(to)S 1955(the)S 2107(left)S 2270(and)S 2444(right)S 2663(represent)S 3058(reverse)S 3375(and)S 3549(forward)S 3894(deltas,)S 4182(respectively.)S 5130 V 8 R 2273(1.1)S 5114 V 2463 H 2463 4932 lc 2463 4932 mc 2463 H 2160 5114 lc 2160 5114 mc 2160 H 2463 5296 lc 2463 5296 mc 5295 V 2463 H 2463 5113 lc 2463 5113 mc 5114 V 2463 H 2766 5114 lc 2766 5114 mc 5129 V 2705 H 2765 5114 lc 2765 5114 mc 5099 V 2705 H 2765 5114 lc 2765 5114 mc 5130 V 2880(1.2)S 5114 V 3069 H 3069 4932 lc 3069 4932 mc 3069 H 2766 5114 lc 2766 5114 mc 2766 H 3069 5296 lc 3069 5296 mc 5295 V 3069 H 3069 5113 lc 3069 5113 mc 5114 V 3069 H 3372 5114 lc 3372 5114 mc 5129 V 3312 H 3372 5114 lc 3372 5114 mc 5099 V 3312 H 3372 5114 lc 3372 5114 mc 5130 V 3486(1.3)S 5114 V 3675 H 3675 4932 lc 3675 4932 mc 3675 H 3372 5114 lc 3372 5114 mc 3372 H 3675 5296 lc 3675 5296 mc 5295 V 3675 H 3675 5113 lc 3675 5113 mc 5114 V 3675 H 3978 5114 lc 3978 5114 mc 5129 V 3918 H 3978 5114 lc 3978 5114 mc 5099 V 3918 H 3978 5114 lc 3978 5114 mc 5130 V 4092(2.1)S 5114 V 4281 H 4281 4932 lc 4281 4932 mc 4281 H 3978 5114 lc 3978 5114 mc 3978 H 4281 5296 lc 4281 5296 mc 5295 V 4281 H 4281 5113 lc 4281 5113 mc 5114 V 4281 H 4584 5114 lc 4584 5114 mc 5129 V 4524 H 4584 5114 lc 4584 5114 mc 5099 V 4524 H 4584 5114 lc 4584 5114 mc 5130 V 4762(2.2)S 5265 V 4584 H 4584 4962 lc 4584 4962 mc 4584 H 5039 4962 lc 5039 4962 mc 5040 H 5040 5265 lc 5040 5265 mc 5040 H 4585 5265 lc 4585 5265 mc 5796 V 4008(1.3.1.1)S 5780 V 4281 H 3978 5962 lc 3978 5962 mc 5963 V 3978 H 3978 5600 lc 3978 5600 mc 5598 V 3978 H 4281 5780 lc 4281 5780 mc 5295 V 3675 H 3978 5780 lc 3978 5780 mc 5737 V 3934 H 3978 5780 lc 3978 5780 mc 5721 V 3960 H 3979 5780 lc 3979 5780 mc 4281 H 4584 5780 lc 4584 5780 mc 5796 V 4524 H 4584 5781 lc 4584 5781 mc 5765 V 4524 H 4584 5780 lc 4584 5780 mc 5796 V 4614(1.3.1.2)S 5780 V 4888 H 4585 5962 lc 4585 5962 mc 5963 V 4584 H 4584 5600 lc 4584 5600 mc 5598 V 4584 H 4887 5780 lc 4887 5780 mc 6143 V 10 R 1699(Figure)S 1990(5.)S 2125(A)S 2227(revision)S 2579(tree)S 2758(with)S 2966(reverse)S 3283(and)S 3457(forward)S 3802(deltas.)S 6359 V 970(Although)S 1382(implementing)S 1972(fast)S 2150(check-out)S 2577(for)S 2727(the)S 2884(latest)S 3130(trunk)S 3376(revision,)S 3758(this)S 3938(arrangement)S 4471(has)S 4639(the)S 4796(disad-)S 6539 V 720(vantage)S 1071(that)S 1262(generation)S 1724(of)S 1848(other)S 2093(revisions)S 2494(takes)S 2739(time)S 2957(proportional)S 3491(to)S 3609(the)S 3771(number)S 4116(of)S 4239(deltas)S 4512(applied.)S 4901(For)S 6719 V 720(example,)S 1121(regenerating)S 1657(the)S 1817(branch)S 2126(tip)S 2270(in)S 2386(Figure)S 2685(5)S 2773(requires)S 3132(application)S 3614(of)S 3735(\256ve)S 3923(deltas)S 4195(\(including)S 4645(the)S 4806(initial)S 6899 V 720(one\).)S 983(Since)S 1236(usage)S 1494(statistics)S 1870(show)S 2112(that)S 2293(the)S 2446(latest)S 2688(trunk)S 2930(revision)S 3282(is)S 3379(the)S 3531(one)S 3705(that)S 3885(is)S 3982(retrieved)S 4366(in)S 4474(95)S 4604(per)S 4761(cent)S 4957(of)S 7079 V 720(all)S 859(cases)S 1108(\(see)S 1307(the)S 1468(section)S 1790(on)S 1929(usage)S 2195(statistics\),)S 2638(biasing)S 2967(check-out)S 3400(time)S 3618(in)S 3736(favor)S 3986(of)S 4109(that)S 4299(revision)S 4661(results)S 4962(in)S 7259 V 720(signi\256cant)S 1186(savings.)S 1590(However,)S 2029(careful)S 2354(implementation)S 3030(of)S 3161(the)S 3331(delta)S 3573(application)S 4065(process)S 4412(is)S 4527(necessary)S 4962(to)S 7920 V EP %%Page: 8 9 BP /slant 0 def /height 1.000000 def 10 R 10 R 40 V 0(-)S 580 V 2792(- 8 -)S 900 V 720(provide)S 1055(low)S 1235(retrieval)S 1597(overhead)S 1992(for)S 2138(other)S 2373(revisions,)S 2789(in)S 2897(particular)S 3309(for)S 3455(branch)S 3756(tips.)S 1116 V 970(There)S 1233(are)S 1386(several)S 1700(techniques)S 2159(for)S 2307(delta)S 2533(application.)S 3064(The)S 3251(naive)S 3499(one)S 3675(is)S 3774(to)S 3884(pass)S 4088(each)S 4302(delta)S 4528(to)S 4638(a)S 4714(general-)S 1296 V 720(purpose)S 1077(text)S 1267(editor.)S 1595(A)S 1707(prototype)S 2130(of)S 2253(RCS)S 2483(invoked)S 2845(the)S 3007(UNIX)S 3296(editor)S 10 I 3569(ed)S 10 R 3703(both)S 3921(for)S 4077(applying)S 4467(deltas)S 4740(and)S 4924(for)S 1476 V 720(expanding)S 1172(the)S 1330(identi\256cation)S 1894(markers.)S 2306(Although)S 2720(easy)S 2934(to)S 3049(implement,)S 3539(performance)S 4079(was)S 4271(poor,)S 4516(owing)S 4803(to)S 4918(the)S 1656 V 720(high)S 934(start-up)S 1275(costs)S 1511(and)S 1691(excess)S 1987(generality)S 2422(of)S 10 I 2541(ed)S 10 R 2635(.)S 2726(An)S 2884(intermediate)S 3419(version)S 3749(of)S 3867(RCS)S 4092(used)S 4310(a)S 4389(special-purpose,)S 1836 V 720(stream-oriented)S 1376(editor.)S 1694(This)S 1902(technique)S 2320(reduced)S 2665(the)S 2817(cost)S 3008(of)S 3121(applying)S 3501(a)S 3575(delta)S 3800(to)S 3909(the)S 4062(cost)S 4254(of)S 4368(checking)S 4759(out)S 4918(the)S 2016 V 720(latest)S 965(trunk)S 1210(revision.)S 1621(The)S 1810(reason)S 2104(for)S 2254(this)S 2433(behavior)S 2816(is)S 2917(that)S 3101(each)S 3316(delta)S 3543(application)S 4020(involves)S 4392(a)S 4469(complete)S 4868(pass)S 2196 V 720(over)S 927(the)S 1079(preceding)S 1502(revision.)S 2412 V 970(However,)S 1395(there)S 1629(is)S 1731(a)S 1810(much)S 2068(better)S 2331(algorithm.)S 2811(Note)S 3041(that)S 3227(the)S 3385(deltas)S 3654(are)S 3811(line)S 3997(oriented)S 4360(and)S 4540(that)S 4726(most)S 4957(of)S 2592 V 720(the)S 884(work)S 1131(of)S 1256(a)S 1342(stream)S 1650(editor)S 1925(involves)S 2306(copying)S 2670(unchanged)S 3143(lines)S 3373(from)S 3608(one)S 3793(revision)S 4156(to)S 4275(the)S 4438(next.)S 4706(A)S 4819(faster)S 2772 V 720(algorithm)S 1141(avoids)S 1434(unnecessary)S 1953(copying)S 2307(of)S 2423(character)S 2820(strings)S 3120(by)S 3253(using)S 3503(a)S 10 I 3580(piece)S 3823(table)S 10 R 4023(.)S 4111(A)S 4216(piece)S 4459(table)S 4686(is)S 4786(a)S 4863(one-)S 2952 V 720(dimensional)S 1245(array,)S 1509(specifying)S 1960(how)S 2167(a)S 2246(given)S 2503(revision)S 2860(is)S 2962(`pieced)S 3290(together')S 3685(from)S 3914(lines)S 4138(in)S 4251(the)S 4408(RCS)S 4633(\256le.)S 4851(Sup-)S 3132 V 720(pose)S 935(piece)S 1177(table)S 10 I 1403(PT)S 3182 V 1520(r)S 3132 V 10 R 1591(represents)S 2027(revision)S 10 I 2381(r)S 10 R 2420(.)S 2507(Then)S 10 I 2744(PT)S 3182 V 2861(r)S 3132 V 2900([i])S 10 R 3038(contains)S 3403(the)S 3557(starting)S 3889(position)S 4244(of)S 4359(line)S 10 I 4541(i)S 10 R 4602(of)S 4718(revision)S 3312 V 10 I 720(r)S 10 R 759(.)S 848(Application)S 1354(of)S 1471(the)S 1627(next)S 1833(delta)S 2061(transforms)S 2522(piece)S 2766(table)S 10 I 2994(PT)S 3362 V 3111(r)S 3312 V 10 R 3184(into)S 10 I 3374(PT)S 3362 V 3491(r+1)S 3312 V 10 R 3648(.)S 3737(For)S 3910(instance,)S 4296(a)S 4374(delete)S 4646(command)S 3492 V 720(removes)S 1093(a)S 1173(series)S 1436(of)S 1555(entries)S 1857(from)S 2087(the)S 2245(piece)S 2491(table.)S 2776(An)S 2934(insertion)S 3320(command)S 3750(inserts)S 4047(new)S 4249(entries,)S 4576(moving)S 4918(the)S 3672 V 720(entries)S 1019(following)S 1441(the)S 1596(insertion)S 1979(point)S 2218(further)S 2522(down)S 2777(the)S 2932(array.)S 3224(The)S 3411(inserted)S 3759(entries)S 4057(point)S 4295(to)S 4405(the)S 4559(text)S 4741(lines)S 4962(in)S 3852 V 720(the)S 874(delta.)S 1155(Thus,)S 1412(no)S 1544(I/O)S 1709(is)S 1808(involved)S 2190(except)S 2483(for)S 2632(reading)S 2964(the)S 3119(delta)S 3346(itself.)S 3634(When)S 3905(all)S 4038(deltas)S 4304(have)S 4525(been)S 4746(applied)S 4032 V 720(to)S 834(the)S 992(piece)S 1238(table,)S 1493(a)S 1573(sequential)S 2014(pass)S 2222(through)S 2569(the)S 2726(table)S 2955(looks)S 3207(up)S 3342(each)S 3559(line)S 3744(in)S 3857(the)S 4014(RCS)S 4239(\256le)S 4402(and)S 4581(copies)S 4871(it)S 4962(to)S 4212 V 720(the)S 872(output)S 1158(\256le,)S 1341(updating)S 1721(identi\256cation)S 2279(markers)S 2630(at)S 2732(the)S 2884(same)S 3119(time.)S 3382(Of)S 3517(course,)S 3832(the)S 3984(RCS)S 4204(\256le)S 4362(must)S 4588(permit)S 4880(ran-)S 4392 V 720(dom)S 930(access,)S 1241(since)S 1478(the)S 1632(copied)S 1930(lines)S 2151(are)S 2304(scattered)S 2690(throughout)S 3161(that)S 3343(\256le.)S 3558(Figure)S 3851(6)S 3933(illustrates)S 4354(an)S 4480(RCS)S 4702(\256le)S 4862(with)S 4572 V 720(two)S 900(revisions)S 1291(and)S 1465(the)S 1617(corresponding)S 2218(piece)S 2458(tables.)S 5832 V 10 I 2363(Figure)S 2665(6)S 2745(is)S 2842(not)S 3000(available.)S 6912 V 10 R 2016(Figure)S 2307(6.)S 2442(An)S 2594(RCS)S 2814(\256le)S 2972(and)S 3146(its)S 3271(piece)S 3511(tables)S 7128 V 970(The)S 1157(piece)S 1399(table)S 1625(approach)S 2022(has)S 2187(the)S 2341(property)S 2711(that)S 2893(the)S 3047(time)S 3257(for)S 3405(applying)S 3788(a)S 3865(single)S 4137(delta)S 4364(is)S 4464(roughly)S 4808(deter-)S 7308 V 720(mined)S 1004(by)S 1138(the)S 1294(size)S 1483(of)S 1600(the)S 1756(delta,)S 2009(and)S 2187(not)S 2349(by)S 2483(the)S 2639(size)S 2828(of)S 2945(the)S 3101(revision.)S 3512(For)S 3685(example,)S 4082(if)S 4177(a)S 4254(delta)S 4481(is)S 4581(10)S 4714(per)S 4874(cent)S 7920 V EP %%Page: 9 10 BP /slant 0 def /height 1.000000 def 10 R 10 R 40 V 0(-)S 580 V 2792(- 9 -)S 900 V 720(of)S 840(the)S 999(size)S 1191(of)S 1311(a)S 1392(revision,)S 1776(then)S 1985(applying)S 2372(it)S 2466(takes)S 2709(only)S 2925(10)S 3063(per)S 3228(cent)S 3432(of)S 3553(the)S 3713(time)S 3929(to)S 4045(generate)S 4420(the)S 4580(latest)S 4829(trunk)S 1080 V 720(revision.)S 1127(\(The)S 1345(stream)S 1641(editor)S 1904(would)S 2184(take)S 2380(100)S 2560(per)S 2717(cent.\))S 1296 V 970(There)S 1233(is)S 1331(an)S 1456(important)S 1876(alternative)S 2328(for)S 2475(representing)S 2999(deltas)S 3263(that)S 3444(a)S 3488 H (f)show 10 -.5 mul h (f)show 10 R 3549(ects)S 3735(performance.)S 4324(SCCS)S 1246 V 4570(3)S 1296 V 4620(,)S 4677(a)S 4753(precur-)S 1476 V 720(sor)S 889(of)S 1019(RCS,)S 1281(uses)S 10 I 1499(interleaved)S 10 R 1994(deltas.)S 2328(A)S 2446(\256le)S 2620(containing)S 3088(interleaved)S 3577(deltas)S 3856(is)S 3969(partitioned)S 4448(into)S 4650(blocks)S 4957(of)S 1656 V 720(lines.)S 1009(Each)S 1253(block)S 1520(has)S 1698(a)S 1787(header)S 2097(that)S 2292(speci\256es)S 2681(to)S 2804(which)S 3093(revision\(s\))S 3565(the)S 3732(block)S 3999(belongs.)S 4411(The)S 4612(blocks)S 4919(are)S 1836 V 720(sorted)S 995(out)S 1154(in)S 1262(such)S 1475(a)S 1549(way)S 1745(that)S 1925(a)S 1999(single)S 2268(pass)S 2470(over)S 2677(the)S 2829(\256le)S 2987(can)S 3155(pick)S 3357(up)S 3487(all)S 3617(the)S 3769(lines)S 3988(belonging)S 4418(to)S 4526(a)S 4600(given)S 4852(revi-)S 2016 V 720(sion.)S 984(Thus,)S 1251(the)S 1415(regeneration)S 1955(time)S 2175(for)S 2333(all)S 2475(revisions)S 2878(is)S 2987(the)S 3151(same:)S 3426(all)S 3568(headers)S 3914(must)S 4151(be)S 4287(inspected,)S 4731(and)S 4918(the)S 2196 V 720(associated)S 1169(blocks)S 1469(either)S 1735(copied)S 2040(or)S 2162(skipped.)S 2567(As)S 2717(the)S 2878(number)S 3222(of)S 3344(revisions)S 3744(increases,)S 4172(the)S 4332(cost)S 4531(of)S 4652(retrieving)S 2376 V 720(any)S 896(revision)S 1251(is)S 1351(much)S 1606(higher)S 1894(than)S 2099(the)S 2254(cost)S 2448(of)S 2564(checking)S 2957(out)S 3118(the)S 3273(latest)S 3517(trunk)S 3761(revision)S 4116(with)S 4327(reverse)S 4647(deltas.)S 4968(A)S 2556 V 720(detailed)S 1071(comparison)S 1572(of)S 1690(SCCS's)S 2043(interleaved)S 2520(deltas)S 2787(and)S 2965(RCS's)S 3261(reverse)S 3582(deltas)S 3849(can)S 4021(be)S 4149(found)S 4416(in)S 4528(Reference)S 4965(4.)S 2736 V 720(This)S 952(reference)S 1375(considers)S 1806(the)S 1982(version)S 2330(of)S 2467(RCS)S 2711(with)S 2943(the)S 3119(stream)S 3440(editor)S 3728(only.)S 4016(The)S 4226(piece)S 4491(table)S 4740(method)S 2916 V 720(improves)S 1131(performance)S 1673(further,)S 2008(so)S 2135(that)S 2323(RCS)S 2551(is)S 2656(always)S 2971(faster)S 3230(than)S 3440(SCCS,)S 3749(except)S 4047(if)S 4146(10)S 4284(or)S 4405(more)S 4648(deltas)S 4919(are)S 3096 V 720(applied.)S 3312 V 970(Additional)S 1429(speed-up)S 1820(for)S 1967(both)S 2176(delta)S 2402(methods)S 2773(can)S 2943(be)S 3069(obtained)S 3445(by)S 3577(caching)S 3919(the)S 4073(most)S 4300(recently)S 4653(generated)S 3492 V 720(revision,)S 1101(as)S 1218(has)S 1385(been)S 1607(implemented)S 2163(in)S 2275(DSEE.)S 3442 V 2550(5)S 3492 V 2634(With)S 2868(caching,)S 3237(access)S 3525(time)S 3737(to)S 3849(frequently)S 4292(used)S 4508(revisions)S 4902(can)S 3672 V 720(approach)S 1115(normal)S 1428(\256le)S 1586(access)S 1870(time,)S 2103(at)S 2205(the)S 2357(cost)S 2548(of)S 2661(some)S 2902(additional)S 3332(space.)S 4032 V 10 B 720(4.)S 855(Locking:)S 1269(A)S 1371(Controversial)S 1989(Issue)S 4248 V 10 R 970(The)S 1169(locking)S 1513(mechanism)S 2012(for)S 2172(RCS)S 2406(was)S 2605(di)S 2683 H (f)show 10 -.5 mul h (\256)show 10 R 2767(cult)S 2961(to)S 3083(design.)S 3443(The)S 3643(problem)S 4021(and)S 4210(its)S 4350(solution)S 4718(are)S 4884(\256rst)S 4428 V 720(presented)S 1136(in)S 1248(their)S 1465(`pure')S 1742(form,)S 1995(followed)S 2384(by)S 2518(a)S 2596(discussion)S 3047(of)S 3163(the)S 3318(complications)S 3912(caused)S 4216(by)S 4349(`real-world')S 4863(con-)S 4608 V 720(siderations.)S 4824 V 970(RCS)S 1198(must)S 1431(prevent)S 1768(two)S 1956(or)S 2077(more)S 2320(persons)S 2663(from)S 2895(depositing)S 3350(competing)S 3810(changes)S 4169(of)S 4290(the)S 4450(same)S 4693(revision.)S 5004 V 720(Suppose)S 1104(two)S 1299(programmers)S 1875(check)S 2151(out)S 2323(revision)S 2689(2.4)S 2858(and)S 3046(modify)S 3379(it.)S 3534(Programmer)S 4077(A)S 4193(checks)S 4508(in)S 4630(a)S 4718(revision)S 5184 V 720(before)S 1010(programmer)S 1539(B.)S 1697(Unfortunately,)S 2318(programmer)S 2847(B)S 2950(has)S 3119(not)S 3284(seen)S 3498(A's)S 3679(changes,)S 4062(so)S 4188(the)S 4347(e)S 4391 H (f)show 10 -.5 mul h (f)show 10 R 4452(ect)S 4605(is)S 4709(that)S 4896(A's)S 5364 V 720(changes)S 1079(are)S 1238(covered)S 1591(up)S 1729(by)S 1867(B's)S 2044(deposit.)S 2426(A's)S 2608(changes)S 2967(are)S 3126(not)S 3292(lost)S 3475(since)S 3718(all)S 3856(revisions)S 4255(are)S 4414(saved,)S 4703(but)S 4868(they)S 5544 V 720(are)S 871(con\256ned)S 1245(to)S 1353(a)S 1427(single)S 1696(revision.\263)S 5760 V 970(This)S 1191(con\257ict)S 1534(is)S 1644(prevented)S 2080(in)S 2201(RCS)S 2434(by)S 2577(locking.)S 2975(Whenever)S 3427(someone)S 3825(intends)S 4157(to)S 4278(edit)S 4471(a)S 4558(revision)S 4924(\(as)S 5940 V 720(opposed)S 1083(to)S 1191(reading)S 1520(or)S 1633(compiling)S 2069(it\),)S 2213(the)S 2365(revision)S 2717(should)S 3014(be)S 3138(checked)S 3494(out)S 3652(and)S 3826(locked,)S 4147(using)S 4394(the)S 10 I 4546(\261l)S 10 R 4654(option)S 4940(on)S 6120 V 10 I 720(co)S 10 R 814(.)S 908(On)S 1069(subsequent)S 1552(check-in,)S 10 I 1959(ci)S 10 R 2070(tests)S 2287(the)S 2448(lock)S 2659(and)S 2842(then)S 3053(removes)S 3430(it.)S 3580(At)S 3719(most)S 3953(one)S 4136(programmer)S 4668(at)S 4779(a)S 4862(time)S 6300 V 720(may)S 932(lock)S 1144(a)S 1228(particular)S 1650(revision,)S 2037(and)S 2221(only)S 2439(this)S 2624(programmer)S 3157(may)S 3368(check)S 3639(in)S 3756(the)S 3917(succeeding)S 4399(revision.)S 4815(Thus,)S 6480 V 720(while)S 972(a)S 1046(revision)S 1398(is)S 1495(locked,)S 1816(it)S 1902(is)S 1999(the)S 2151(exclusive)S 2558(responsibility)S 3133(of)S 3246(the)S 3398(locker.)S 6702 V 8 Y1 720(333333333333333333)S 6820 V 8 R 820(\263)S 900(Note)S 1088(that)S 1240(this)S 1388(problem)S 1686(is)S 1773(entirely)S 2049(di)S 2111 H (f)show 8 -.5 mul h (f)show 8 R 2160(erent)S 2352(from)S 2540(the)S 2671(atomicity)S 3005(problem.)S 3348(Atomicity)S 3705(means)S 3942(that)S 4095(concurrent)S 4468(update)S 6920 V 720(operations)S 1082(on)S 1193(the)S 1321(same)S 1515(RCS)S 1698(\256le)S 1830(cannot)S 2072(be)S 2177(permitted,)S 2531(because)S 2812(that)S 2961(may)S 3128(result)S 3334(in)S 3426(inconsistent)S 3836(data.)S 4042(Atomic)S 4311(updates)S 4584(are)S 7020 V 720(essential)S 1017(\(and)S 1182(implemented)S 1621(in)S 1707(RCS\),)S 1930(but)S 2056(do)S 2160(not)S 2286(solve)S 2478(the)S 2599(con\257ict)S 2862(discussed)S 3191(here.)S 7920 V EP %%Page: 10 11 BP /slant 0 def /height 1.000000 def 8 R 8 R 40 V 10 R 0(-)S 580 V 2767(- 10 -)S 900 V 970(An)S 1126(important)S 1549(maxim)S 1861(for)S 2011(software)S 2388(tools)S 2617(like)S 2801(RCS)S 3025(is)S 3126(that)S 3310(they)S 3516(must)S 3745(not)S 3907(stand)S 4152(in)S 4264(the)S 4421(way)S 4622(of)S 4740(making)S 1080 V 720(progress)S 1093(with)S 1305(a)S 1383(project.)S 1749(This)S 1961(consideration)S 2533(leads)S 2772(to)S 2884(several)S 3200(weakenings)S 3705(of)S 3822(the)S 3978(locking)S 4312(mechanism.)S 4856(First)S 1260 V 720(of)S 839(all,)S 1000(even)S 1224(if)S 1321(a)S 1401(revision)S 1759(is)S 1862(locked,)S 2189(it)S 2281(can)S 2455(still)S 2642(be)S 2772(checked)S 3134(out.)S 3353(This)S 3567(is)S 3670(necessary)S 4093(if)S 4191(other)S 4433(people)S 4736(wish)S 4962(to)S 1440 V 720(compile)S 1073(or)S 1187(inspect)S 1501(the)S 1654(locked)S 1951(revision)S 2304(while)S 2556(the)S 2708(next)S 2910(one)S 3084(is)S 3181(in)S 3289(preparation.)S 3828(The)S 4013(only)S 4221(operations)S 4667(they)S 4869(can-)S 1620 V 720(not)S 880(do)S 1012(are)S 1165(to)S 1275(lock)S 1479(the)S 1633(revision)S 1987(or)S 2102(to)S 2212(check)S 2476(in)S 2586(the)S 2740(succeeding)S 3215(one.)S 3447(Secondly,)S 3877(check-in)S 4253(operations)S 4702(on)S 4835(other)S 1800 V 720(branches)S 1109(in)S 1222(the)S 1379(RCS)S 1604(\256le)S 1767(are)S 1923(still)S 2109(possible;)S 2500(the)S 2657(locking)S 2991(of)S 3108(one)S 3286(revision)S 3642(does)S 3859(not)S 4021(a)S 4065 H (f)show 10 -.5 mul h (f)show 10 R 4126(ect)S 4276(any)S 4454(other)S 4693(revision.)S 1980 V 720(Thirdly,)S 1084(revisions)S 1484(are)S 1644(occasionally)S 2183(locked)S 2489(for)S 2645(a)S 2729(long)S 2947(period)S 3242(of)S 3365(time)S 3583(because)S 3938(a)S 4022(programmer)S 4555(is)S 4662(absent)S 4957(or)S 2160 V 720(otherwise)S 1153(unable)S 1464(to)S 1587(complete)S 1998(the)S 2165(assignment.)S 2715(If)S 2826(another)S 3170(programmer)S 3708(has)S 3886(to)S 4008(make)S 4268(a)S 4356(pressing)S 4733(change,)S 2340 V 720(there)S 950(are)S 1102(the)S 1255(following)S 1675(three)S 1905(alternatives)S 2397(for)S 2545(making)S 2877(progress:)S 3275(a\))S 3384(\256nd)S 3572(out)S 3732(who)S 3936(is)S 4035(holding)S 4373(the)S 4527(lock)S 4731(and)S 4907(ask)S 2520 V 720(that)S 906(person)S 1208(to)S 1322(release)S 1634(it;)S 1754(b\))S 1873(check)S 2141(out)S 2305(the)S 2463(locked)S 2765(revision,)S 3148(modify)S 3473(it,)S 3590(check)S 3858(it)S 3950(in)S 4064(on)S 4200(a)S 4280(branch,)S 4612(and)S 4791(merge)S 2700 V 720(the)S 878(changes)S 1236(later;)S 1478(c\))S 1592(break)S 1850(the)S 2009(lock.)S 2273(Breaking)S 2676(a)S 2757(lock)S 2966(leaves)S 3252(a)S 3333(highly)S 3626(visible)S 3930(trace,)S 4185(namely)S 4516(an)S 4647(electronic)S 2880 V 720(mail)S 930(message)S 1300(that)S 1482(is)S 1581(sent)S 1774(automatically)S 2350(to)S 2460(the)S 2614(holder)S 2901(of)S 3015(the)S 3168(lock,)S 3396(recording)S 3809(the)S 3962(breaker)S 4291(and)S 4466(a)S 4541(commentary)S 3060 V 720(requested)S 1135(from)S 1362(him.)S 1606(Thus,)S 1864(breaking)S 2246(locks)S 2490(is)S 2590(tolerated)S 2972(under)S 3232(certain)S 3536(circumstances,)S 4159(but)S 4321(will)S 4511(not)S 4673(go)S 4807(unno-)S 3240 V 720(ticed.)S 1016(Experience)S 1511(has)S 1691(shown)S 1998(that)S 2194(the)S 2362(automatic)S 2802(mail)S 3026(message)S 3410(attaches)S 3777(a)S 3867(high)S 4091(enough)S 4431(stigma)S 4744(to)S 4868(lock)S 3420 V 720(breaking,)S 1130(such)S 1349(that)S 1535(programmers)S 2103(break)S 2360(locks)S 2607(only)S 2821(in)S 2935(real)S 3120(emergencies,)S 3679(or)S 3798(when)S 4050(a)S 4130(co-worker)S 4576(resigns)S 4896(and)S 3600 V 720(leaves)S 999(locked)S 1295(revisions)S 1686(behind.)S 3816 V 970(If)S 1074(an)S 1206(RCS)S 1434(\256le)S 1600(is)S 1705(private,)S 2046(i.e.,)S 2232(when)S 2487(a)S 2570(programmer)S 3102(owns)S 3352(an)S 3485(RCS)S 3714(\256le)S 3881(and)S 4064(does)S 4286(not)S 4453(expect)S 4752(anyone)S 3996 V 720(else)S 912(to)S 1027(perform)S 1385(check-in)S 1765(operations,)S 2243(locking)S 2580(is)S 2684(an)S 2815(unnecessary)S 3339(nuisance.)S 3780(In)S 3900(this)S 4081(case,)S 4313(the)S 4471(`strict)S 4740(locking)S 4176 V 720(feature')S 1069(discussed)S 1492(earlier)S 1786(may)S 1998(be)S 2133(disabled,)S 2532(provided)S 2928(that)S 3119(\256le)S 3288(protection)S 3734(is)S 3842(set)S 3994(such)S 4218(that)S 4409(only)S 4628(the)S 4791(owner)S 4356 V 720(may)S 927(write)S 1167(the)S 1324(RCS)S 1549(\256le.)S 1767(This)S 1980(has)S 2148(the)S 2305(e)S 2349 H (f)show 10 -.5 mul h (f)show 10 R 2410(ect)S 2561(that)S 2746(only)S 2959(the)S 3116(owner)S 3400(can)S 3573(check-in)S 3951(revisions,)S 4372(and)S 4550(that)S 4734(no)S 4868(lock)S 4536 V 720(is)S 817(needed)S 1129(for)S 1275(doing)S 1533(so.)S 4752 V 970(As)S 1113(added)S 1383(protection,)S 1845(each)S 2059(RCS)S 2281(\256le)S 2441(contains)S 2806(an)S 2932(access)S 3218(list)S 3373(that)S 3556(speci\256es)S 3933(the)S 4088(users)S 4326(who)S 4531(may)S 4736(execute)S 4932 V 720(update)S 1019(operations.)S 1523(If)S 1622(an)S 1749(access)S 2036(list)S 2192(is)S 2292(empty,)S 2600(only)S 2811(normal)S 3127(UNIX)S 3408(\256le)S 3568(protection)S 4005(applies.)S 4375(Thus,)S 4632(the)S 4786(access)S 5112 V 720(list)S 878(is)S 980(useful)S 1259(for)S 1410(restricting)S 1851(the)S 2009(set)S 2156(of)S 2275(people)S 2577(who)S 2785(would)S 3071(otherwise)S 3495(have)S 3719(update)S 4021(permission.)S 4551(Just)S 4743(as)S 4862(with)S 5292 V 720(locking,)S 1077(the)S 1231(access)S 1517(list)S 1672(has)S 1837(no)S 1969(e)S 2013 H (f)show 10 -.5 mul h (f)show 10 R 2074(ect)S 2222(on)S 2354(read-only)S 2768(operations)S 3216(such)S 3431(as)S 10 I 3546(co)S 10 R 3640(.)S 3727(This)S 3937(approach)S 4333(is)S 4431(consistent)S 4862(with)S 5472 V 720(the)S 872(UNIX)S 1151(philosophy)S 1626(of)S 1739(openness,)S 2160(which)S 2434(contributes)S 2908(to)S 3016(a)S 3090(productive)S 3547(software)S 3920(development)S 4466(environment.)S 5832 V 10 B 720(5.)S 855(Con\256guration)S 1486(Management)S 6048 V 10 R 970(The)S 1156(preceding)S 1580(sections)S 1933(described)S 2346(how)S 2549(RCS)S 2770(deals)S 3006(with)S 3215(revisions)S 3607(of)S 3722(individual)S 4160(components;)S 4703(this)S 4880(sec-)S 6228 V 720(tion)S 917(discusses)S 1330(how)S 1543(to)S 1662(handle)S 1969(con\256gurations.)S 2637(A)S 2749(con\256guration)S 3322(is)S 3429(a)S 3513(set)S 3664(of)S 3787(revisions,)S 4213(where)S 4496(each)S 4718(revision)S 6408 V 720(comes)S 1007(from)S 1233(a)S 1309(di)S 1387 H (f)show 10 -.5 mul h (f)show 10 R 1448(erent)S 1679(revision)S 2033(group,)S 2323(and)S 2500(the)S 2655(revisions)S 3049(are)S 3203(selected)S 3557(according)S 3983(to)S 4094(a)S 4171(certain)S 4475(criterion.)S 4901(For)S 6588 V 720(example,)S 1121(in)S 1237(order)S 1485(to)S 1601(build)S 1845(a)S 1927(functioning)S 2426(compiler,)S 2844(the)S 3004(`right')S 3297(revisions)S 3696(from)S 3928(the)S 4088(scanner,)S 4454(the)S 4613(parser,)S 4918(the)S 6768 V 720(optimizer)S 1154(and)S 1349(the)S 1522(code)S 1761(generator)S 2188(must)S 2434(be)S 2579(combined.)S 3079(RCS,)S 3345(in)S 3475(conjunction)S 3999(with)S 4229(MAKE,)S 4600(provides)S 4996(a)S 6948 V 720(number)S 1055(of)S 1168(facilities)S 1542(to)S 1650(e)S 1694 H (f)show 10 -.5 mul h (f)show 10 R 1755(ect)S 1901(a)S 1975(smooth)S 2300(selection.)S 7920 V EP %%Page: 11 12 BP /slant 0 def /height 1.000000 def 10 R 10 R 40 V 0(-)S 580 V 2767(- 11 -)S 900 V 10 B 720(5.1.)S 930(RCS)S 1160(Selection)S 1573(Functions)S 1152 V 10 I 720(Default)S 1050(selection)S 1332 V 10 R 970(During)S 1285(development,)S 1858(the)S 2012(usual)S 2255(selection)S 2642(criterion)S 3012(is)S 3111(to)S 3221(choose)S 3530(the)S 3684(latest)S 3928(revision)S 4283(of)S 4399(all)S 4532(components.)S 1512 V 970(The)S 10 I 1155(co)S 10 R 1279(command)S 1703(makes)S 1988(this)S 2163(selection)S 2548(by)S 2678(default.)S 3040(For)S 3209(example,)S 3602(the)S 3754(command)S 1692 V 10 I 1330(co)S 1484(*,v)S 1932 V 10 R 970(retrieves)S 1354(the)S 1517(latest)S 1769(revision)S 2132(on)S 2273(the)S 2437(default)S 2756(branch)S 3069(of)S 3194(each)S 3418(RCS)S 3650(\256le)S 3820(in)S 3940(the)S 4104(current)S 4428(directory.)S 4885(The)S 2112 V 970(default)S 1285(branch)S 1594(is)S 1699(usually)S 2025(the)S 2184(trunk,)S 2457(but)S 2622(may)S 2831(be)S 2962(set)S 3110(to)S 3225(be)S 3356(a)S 3437(side)S 3635(branch.)S 3998(Side)S 4213(branches)S 4604(as)S 4724(defaults)S 2292 V 970(are)S 1133(needed)S 1457(in)S 1577(distributed)S 2047(software)S 2432(development,)S 3015(as)S 3140(discussed)S 3565(in)S 3686(the)S 3851(section)S 4177(on)S 4320(the)S 4485(RCS)S 4718(revision)S 2472 V 970(tree.)S 2868 V 10 I 720(Release)S 1060(based)S 1323(selection)S 3048 V 10 R 970(Specifying)S 1448(a)S 1537(release)S 1858(or)S 1986(branch)S 2302(number)S 2653(selects)S 2965(the)S 3133(latest)S 3390(revision)S 3758(in)S 3882(that)S 4078(release)S 4400(or)S 4529(branch.)S 4901(For)S 3228 V 970(instance,)S 3408 V 10 I 1330(co)S 1484(\261r2)S 1683(*,v)S 3648 V 10 R 970(retrieves)S 1344(the)S 1497(latest)S 1739(revision)S 2092(with)S 2302(release)S 2610(number)S 2947(2)S 3029(from)S 3255(each)S 3469(RCS)S 3691(\256le.)S 3906(This)S 4116(selection)S 4503(is)S 4602(convenient)S 3828 V 970(if)S 1061(a)S 1135(release)S 1441(has)S 1604(been)S 1822(completed)S 2268(and)S 2442(development)S 2988(has)S 3151(moved)S 3453(on)S 3583(to)S 3691(the)S 3843(next)S 4045(release.)S 4224 V 10 I 720(State)S 950(and)S 1130(author)S 1427(based)S 1690(selection)S 4404 V 10 R 970(If)S 1070(the)S 1226(highest)S 1549(level)S 1777(number)S 2116(within)S 2406(a)S 2484(given)S 2740(release)S 3050(number)S 3389(is)S 3490(not)S 3652(the)S 3808(desired)S 4130(one,)S 4333(the)S 4489(state)S 4707(attribute)S 4584 V 970(can)S 1138(help.)S 1395(For)S 1564(example,)S 4764 V 10 I 1330(co)S 1484(\261r2)S 1683(\261sReleased)S 2192(*,v)S 5004 V 10 R 970(retrieves)S 1352(the)S 1513(latest)S 1763(revision)S 2124(with)S 2341(release)S 2656(number)S 3001(2)S 3091(whose)S 3386(state)S 3609(attribute)S 3982(is)S 4089(`Released'.)S 4610(Of)S 4755(course,)S 5184 V 970(the)S 1126(state)S 1343(attribute)S 1710(has)S 1877(to)S 1989(be)S 2117(set)S 2262(appropriately,)S 2853(using)S 3104(the)S 10 I 3260(ci)S 10 R 3366(or)S 10 I 3483(rcs)S 10 R 3638(commands.)S 4159(Another)S 4519(alternative)S 4973(is)S 5364 V 970(to)S 1078(select)S 1335(a)S 1409(revision)S 1761(by)S 1891(its)S 2016(author,)S 2326(using)S 2573(the)S 10 I 2725(\261w)S 10 R 2872(option.)S 5760 V 10 I 720(Date)S 944(based)S 1207(selection)S 5940 V 10 R 970(Revisions)S 1399(may)S 1605(also)S 1800(be)S 1928(selected)S 2283(by)S 2417(date.)S 2672(Suppose)S 3045(a)S 3123(release)S 3433(of)S 3551(an)S 3680(entire)S 3942(system)S 4255(was)S 4445(completed)S 4896(and)S 6120 V 970(current)S 1282(on)S 1412(March)S 1702(4,)S 1807(at)S 1909(1:00)S 2117(p.m.)S 2325(local)S 2549(time.)S 2812(Then)S 3047(the)S 3199(command)S 6300 V 10 I 1330(co)S 1484(\261d'March)S 1913(4,)S 2018(1:00)S 2231(pm)S 2383(LT')S 2588(*,v)S 6540 V 10 R 970(checks)S 1293(out)S 1473(all)S 1626(the)S 1801(components)S 2337(of)S 2473(that)S 2676(release,)S 3030(independent)S 3571(of)S 3707(the)S 3882(numbering.)S 4423(The)S 10 I 4631(\261d)S 10 R 4784(option)S 6720 V 970(speci\256es)S 1346(a)S 1422(`cuto)S 1627 H (f)show 10 -.5 mul h (f)show 10 R 1720(date',)S 1976(i.e.,)S 2155(the)S 2309(revision)S 2662(selected)S 3014(has)S 3178(a)S 3253(check-in)S 3627(date)S 3824(that)S 4005(is)S 4103(closest)S 4406(to,)S 4540(but)S 4699(not)S 4858(after)S 6900 V 970(the)S 1122(date)S 1318(given.)S 7116 V 10 I 720(Name)S 983(based)S 1246(selection)S 7296 V 10 R 970(The)S 1178(most)S 1426(powerful)S 1839(selection)S 2247(function)S 2633(is)S 2753(based)S 3033(on)S 3187(assigning)S 3619(symbolic)S 4040(names)S 4349(to)S 4481(revisions)S 4896(and)S 7920 V EP %%Page: 12 13 BP /slant 0 def /height 1.000000 def 10 R 10 R 40 V 0(-)S 580 V 2767(- 12 -)S 900 V 970(branches.)S 1412(In)S 1528(large)S 1760(systems,)S 2135(a)S 2212(single)S 2484(release)S 2793(number)S 3131(or)S 3247(date)S 3446(is)S 3546(not)S 3707(su)S 3796 H (f)show 10 -.5 mul h (\256)show 10 R 3880(cient)S 4107(to)S 4217(collect)S 4515(the)S 4669(appropri-)S 1080 V 970(ate)S 1122(revisions)S 1519(from)S 1749(all)S 1885(groups.)S 2248(For)S 2423(example,)S 2822(suppose)S 3181(one)S 3362(wishes)S 3671(to)S 3786(combine)S 4167(release)S 4480(2)S 4567(of)S 4687(one)S 4868(sub-)S 1260 V 970(system)S 1296(and)S 1488(release)S 1812(15)S 1960(of)S 2091(another.)S 2493(Most)S 2747(likely,)S 3048(the)S 3218(creation)S 3587(dates)S 3840(of)S 3971(those)S 4229(releases)S 4591(di)S 4669 H (f)show 10 -.5 mul h (f)show 10 R 4730(er)S 4854(also.)S 1440 V 970(Thus,)S 1226(a)S 1301(single)S 1571(revision)S 1924(number)S 2260(or)S 2375(date)S 2573(passed)S 2871(to)S 2981(the)S 10 I 3135(co)S 10 R 3261(command)S 3687(will)S 3875(not)S 4035(su)S 4124 H (f)show 10 -.5 mul h (\256)show 10 R 4208(ce)S 4328(to)S 4438(select)S 4697(the)S 4851(right)S 1620 V 970(revisions.)S 1432(Symbolic)S 1862(revision)S 2230(numbers)S 2620(solve)S 2877(this)S 3068(problem.)S 3502(Each)S 3747(RCS)S 3983(\256le)S 4156(may)S 4373(contain)S 4712(a)S 4801(set)S 4957(of)S 1800 V 970(symbolic)S 1377(names)S 1672(that)S 1862(are)S 2023(mapped)S 2379(to)S 2497(numeric)S 2864(revision)S 3226(numbers.)S 3665(For)S 3844(example,)S 4247(assume)S 4582(the)S 4745(symbol)S 1980 V 10 I 970(V3)S 10 R 1122(is)S 1230(bound)S 1521(to)S 1640(release)S 1957(number)S 2303(2)S 2394(in)S 2513(\256le)S 10 I 2682(s,v)S 10 R 2790(,)S 2856(and)S 3041(to)S 3160(revision)S 3523(number)S 3869(15.9)S 4084(in)S 10 I 4202(t,v)S 10 R 4299(.)S 4394(Then)S 4639(the)S 4801(single)S 2160 V 970(command)S 2340 V 10 I 1330(co)S 1484(\261rV3)S 1744(s,v)S 1912(t,v)S 2580 V 10 R 970(retrieves)S 1344(the)S 1497(latest)S 1739(revision)S 2092(of)S 2206(release)S 2513(2)S 2594(from)S 10 I 2819(s,v)S 10 R 2927(,)S 2983(and)S 3159(revision)S 3513(15.9)S 3720(from)S 10 I 3946(t,v)S 10 R 4043(.)S 4130(In)S 4245(a)S 4321(large)S 4552(system)S 4862(with)S 2760 V 970(many)S 1249(modules,)S 1670(checking)S 2087(out)S 2271(all)S 2427(revisions)S 2844(with)S 3078(one)S 3278(command)S 3728(greatly)S 4061(simpli\256es)S 4507(con\256guration)S 2940 V 970(management.)S 3156 V 970(Judicious)S 1385(use)S 1555(of)S 1675(symbolic)S 2079(revision)S 2439(numbers)S 2821(helps)S 3070(with)S 3286(organizing)S 3751(large)S 3988(con\256gurations.)S 4653(A)S 4763(special)S 3336 V 720(command,)S 10 I 1195(rcsfreeze)S 10 R 1555(,)S 1636(assigns)S 1981(a)S 2081(symbolic)S 2504(revision)S 2882(number)S 3243(to)S 3377(a)S 3477(selected)S 3854(revision)S 4232(in)S 4366(every)S 4642(RCS)S 4887(\256le.)S 3516 V 10 I 720(Rcsfreeze)S 10 R 1147(e)S 1191 H (f)show 10 -.5 mul h (f)show 10 R 1252(ectively)S 1613(freezes)S 1939(a)S 2028(con\256guration.)S 2661(The)S 2861(assigned)S 3250(symbolic)S 3662(revision)S 4029(number)S 4379(selects)S 4690(all)S 4835(com-)S 3696 V 720(ponents)S 1062(of)S 1176(the)S 1329(con\256guration.)S 1948(If)S 2045(necessary,)S 2488(symbolic)S 2886(numbers)S 3260(may)S 3462(even)S 3680(be)S 3804(intermixed)S 4267(with)S 4475(numeric)S 4832(ones.)S 3876 V 720(Thus,)S 10 I 975(V3.5)S 10 R 1191(in)S 1299(the)S 1451(above)S 1719(example)S 2087(would)S 2367(select)S 2624(revision)S 2976(2.5)S 3131(in)S 10 I 3239(s,v)S 10 R 3377(and)S 3551(branch)S 3852(15.9.5)S 4132(in)S 10 I 4240(t,v)S 10 R 4337(.)S 4092 V 970(The)S 1162(options)S 10 I 1494(\261r)S 10 R 1583(,)S 10 I 1645(\261s)S 10 R 1734(,)S 10 I 1796(\261w)S 10 R 1950(and)S 10 I 2131(\261d)S 10 R 2269(may)S 2479(be)S 2611(combined.)S 3098(If)S 3202(a)S 3284(branch)S 3593(is)S 3698(given,)S 3983(the)S 4143(latest)S 4392(revision)S 4752(on)S 4890(that)S 4272 V 720(branch)S 1021(satisfying)S 1440(all)S 1570(conditions)S 2017(is)S 2114(retrieved;)S 2526(otherwise,)S 2969(the)S 3121(default)S 3428(branch)S 3729(is)S 3826(used.)S 4632 V 10 B 720(5.2.)S 930(Combining)S 1439(MAKE)S 1780(and)S 1972(RCS)S 4848 V 10 R 970(MAKE)S 4798 V 1264(1)S 4848 V 1360(is)S 1473(a)S 1563(program)S 1947(that)S 2143(processes)S 2571(con\256gurations.)S 3245(It)S 3353(is)S 3467(driven)S 3769(by)S 3916(con\256guration)S 4496(speci\256cations)S 5028 V 720(recorded)S 1108(in)S 1226(a)S 1310(special)S 1627(\256le,)S 1820(called)S 2098(a)S 2182(`Make\256le'.)S 2698(MAKE)S 3031(avoids)S 3331(redundant)S 3769(processing)S 4235(steps)S 4474(by)S 4613(comparing)S 5208 V 720(creation)S 1072(dates)S 1308(of)S 1422(source)S 1713(and)S 1888(processed)S 2312(objects.)S 2681(For)S 2851(example,)S 3245(when)S 3492(instructed)S 3917(to)S 4026(compile)S 4379(all)S 4510(modules)S 4881(of)S 4996(a)S 5388 V 720(given)S 972(system,)S 1305(it)S 1391(only)S 1599(recompiles)S 2067(those)S 2308(source)S 2598(modules)S 2967(that)S 3147(were)S 3370(changed)S 3732(since)S 3967(they)S 4169(were)S 4392(processed)S 4815(last.)S 5604 V 970(MAKE)S 1298(has)S 1465(been)S 1687(extended)S 2081(with)S 2293(an)S 2421(auto-checkout)S 3020(feature)S 3330(for)S 3481(RCS.*)S 3811(When)S 4084(a)S 4163(certain)S 4469(\256le)S 4632(to)S 4745(be)S 4874(pro-)S 5784 V 720(cessed)S 1012(is)S 1111(not)S 1271(present,)S 1616(MAKE)S 1942(attempts)S 2313(a)S 2389(check-out)S 2813(operation.)S 3276(If)S 3373(successful,)S 3839(MAKE)S 4164(performs)S 4555(the)S 4708(required)S 5964 V 720(processing,)S 1210(and)S 1392(then)S 1602(deletes)S 1917(the)S 2077(checked)S 2441(out)S 2607(\256le)S 2773(to)S 2889(conserve)S 3281(space.)S 3595(The)S 3788(selection)S 4181(parameters)S 4657(discussed)S 6144 V 720(above)S 996(can)S 1172(be)S 1304(passed)S 1608(to)S 1724(MAKE)S 2056(either)S 2321(as)S 2442(parameters,)S 2942(or)S 3063(directly)S 3406(embedded)S 3854(in)S 3970(the)S 4129(Make\256le.)S 4576(MAKE)S 4907(has)S 6324 V 720(also)S 922(been)S 1152(extended)S 1554(to)S 1674(search)S 1970(the)S 2134(subdirectory)S 2675(named)S 10 I 2983(RCS)S 10 R 3203(for)S 3361(needed)S 3685(\256les,)S 3919(rather)S 4193(than)S 4407(just)S 4594(the)S 4758(current)S 6504 V 720(working)S 1090(directory.)S 1542(However,)S 1969(if)S 2067(a)S 2148(working)S 2517(\256le)S 2681(is)S 2784(present,)S 3133(MAKE)S 3463(totally)S 3755(ignores)S 4085(the)S 4243(corresponding)S 4850(RCS)S 6684 V 720(\256le)S 894(and)S 1085(uses)S 1304(the)S 1473(working)S 1853(\256le.)S 2083(\(In)S 2246(newer)S 2536(versions)S 2916(of)S 3046(MAKE)S 3387(distributed)S 3862(by)S 4009(AT&T)S 4328(and)S 4519(others,)S 4835(auto-)S 6864 V 720(checkout)S 1112(can)S 1282(be)S 1408(achieved)S 1794(with)S 2004(the)S 2158(rule)S 2345(DEFAULT,)S 2856(instead)S 3170(of)S 3284(a)S 3359(special)S 3667(extension)S 4081(of)S 4195(MAKE.)S 4575(However,)S 4996(a)S 6964 V 8 Y1 720(333333333333333333)S 7082 V 8 R 820(*)S 900(This)S 1066(auto-checkout)S 1540(extension)S 1869(is)S 1946(available)S 2256(only)S 2422(in)S 2508(some)S 2700(versions)S 2989(of)S 3079(MAKE,)S 3359(e.g.)S 3498(GNU)S 3696(MAKE.)S 7920 V EP %%Page: 13 14 BP /slant 0 def /height 1.000000 def 8 R 8 R 40 V 10 R 0(-)S 580 V 2767(- 13 -)S 900 V 720(\256le)S 879(checked)S 1236(out)S 1395(by)S 1526(the)S 1679(rule)S 1865(DEFAULT)S 2351(will)S 2538(not)S 2697(be)S 2822(deleted)S 3141(after)S 3355(processing.)S 10 I 3839(Rcsclean)S 10 R 4231(can)S 4401(be)S 4527(used)S 4742(for)S 4890(that)S 1080 V 720(purpose.\))S 1296 V 970(With)S 1225(auto-checkout,)S 1870(RCS/MAKE)S 2437(can)S 2630(e)S 2674 H (f)show 10 -.5 mul h (f)show 10 R 2735(ect)S 2906(a)S 3005(selection)S 3415(rule)S 3625(especially)S 4079(tuned)S 4357(for)S 4529(multi-person)S 1476 V 720(software)S 1107(development)S 1667(and)S 1855(maintenance.)S 2458(In)S 2585(these)S 2834(situations,)S 3287(programmers)S 3863(should)S 4174(obtain)S 4468(con\256gurations)S 1656 V 720(that)S 910(consist)S 1228(of)S 1351(the)S 1513(revisions)S 1914(they)S 2126(have)S 2354(personally)S 2810(checked)S 3176(out)S 3344(plus)S 3552(the)S 3715(latest)S 3967(checked)S 4334(in)S 4453(revision)S 4816(of)S 4940(all)S 1836 V 720(other)S 955(revision)S 1307(groups.)S 1664(This)S 1872(schema)S 2201(can)S 2369(be)S 2493(set)S 2634(up)S 2764(as)S 2877(follows.)S 2052 V 970(Each)S 1207(programmer)S 1738(chooses)S 2092(a)S 2174(working)S 2546(directory)S 2945(and)S 3128(places)S 3416(into)S 3611(it)S 3706(a)S 3789(symbolic)S 4195(link,)S 4415(named)S 10 I 4720(RCS)S 10 R 4898(,)S 4962(to)S 2232 V 720(the)S 879(directory)S 1276(containing)S 1735(the)S 1894(relevant)S 2252(RCS)S 2479(\256les.)S 2738(The)S 2930(symbolic)S 3334(link)S 3527(makes)S 3818(sure)S 4020(that)S 10 I 4206(co)S 10 R 4336(and)S 10 I 4516(ci)S 10 R 4624(operations)S 2412 V 720(need)S 947(only)S 1164(specify)S 1491(the)S 1652(working)S 2024(\256les,)S 2255(and)S 2438(that)S 2627(the)S 2788(Make\256le)S 3183(need)S 3411(not)S 3579(be)S 3713(changed.)S 4140(The)S 4335(programmer)S 4868(then)S 2592 V 720(checks)S 1039(out)S 1215(the)S 1385(needed)S 1715(\256les)S 1930(and)S 2121(modi\256es)S 2513(them.)S 2815(If)S 2928(MAKE)S 3269(is)S 3383(invoked,)S 3777(it)S 3880(composes)S 4321(con\256gurations)S 4940(by)S 2772 V 720(selecting)S 1112(those)S 1360(revisions)S 1758(that)S 1945(are)S 2103(checked)S 2466(out,)S 2656(and)S 2837(the)S 2996(rest)S 3177(from)S 3408(the)S 3567(subdirectory)S 10 I 4103(RCS)S 10 R 4281(.)S 4373(The)S 4565(latter)S 4808(selec-)S 2952 V 720(tion)S 912(may)S 1120(be)S 1250(controlled)S 1691(by)S 1827(a)S 1907(symbolic)S 2310(revision)S 2668(number)S 3009(or)S 3128(any)S 3307(of)S 3425(the)S 3582(other)S 3822(selection)S 4212(criteria.)S 4584(If)S 4685(there)S 4919(are)S 3132 V 720(several)S 1034(programmers)S 1598(editing)S 1908(in)S 2018(separate)S 2376(working)S 2741(directories,)S 3219(they)S 3423(are)S 3576(insulated)S 3969(from)S 4195(each)S 4409(other's)S 4719(changes)S 3312 V 720(until)S 934(checking)S 1324(in)S 1432(their)S 1645(modi\256cations.)S 3528 V 970(Similarly,)S 1399(a)S 1475(maintainer)S 1934(can)S 2104(recreate)S 2450(an)S 2576(older)S 2813(con\256guration)S 3378(by)S 3510(starting)S 3842(to)S 3952(work)S 4189(in)S 4299(an)S 4425(empty)S 4707(working)S 3708 V 720(directory.)S 1172(During)S 1492(the)S 1651(initial)S 1922(MAKE)S 2253(invocation,)S 2737(all)S 2874(revisions)S 3272(are)S 3430(selected)S 3788(from)S 4018(RCS)S 4244(\256les.)S 4502(As)S 4649(the)S 4807(main-)S 3888 V 720(tainer)S 977(checks)S 1278(out)S 1436(\256les)S 1633(and)S 1807(modi\256es)S 2182(them,)S 2437(a)S 2511(new)S 2707(con\256guration)S 3270(is)S 3367(gradually)S 3774(built)S 3988(up.)S 4173(Every)S 4441(time)S 4649(MAKE)S 4973(is)S 4068 V 720(invoked,)S 1097(it)S 1183(substitutes)S 1636(the)S 1788(modi\256ed)S 2174(revisions)S 2565(into)S 2751(the)S 2903(con\256guration)S 3466(being)S 3718(manipulated.)S 4284 V 970(A)S 1096(\256nal)S 1328(application)S 1826(of)S 1963(RCS)S 2208(is)S 2330(to)S 2463(use)S 2651(it)S 2762(for)S 2933(storing)S 3266(Make\256les.)S 3770(Revision)S 4181(groups)S 4508(of)S 4646(Make\256les)S 4464 V 720(represent)S 1126(multiple)S 1501(versions)S 1875(of)S 1999(con\256gurations.)S 2667(Whenever)S 3117(a)S 3202(con\256guration)S 3776(is)S 3884(baselined)S 4302(or)S 4425(distributed,)S 4918(the)S 4644 V 720(best)S 929(approach)S 1342(is)S 1457(to)S 1584(unambiguously)S 2250(\256x)S 2405(the)S 2576(con\256guration)S 3158(with)S 3385(a)S 3478(symbolic)S 3894(revision)S 4265(number)S 4619(by)S 4768(calling)S 4824 V 10 I 720(rcsfreeze)S 10 R 1080(,)S 1137(to)S 1247(embed)S 1545(that)S 1727(symbol)S 2054(into)S 2242(the)S 2396(Make\256le,)S 2808(and)S 2983(to)S 3092(check)S 3355(in)S 3464(the)S 3617(Make\256le)S 4003(\(using)S 4284(the)S 4437(same)S 4673(symbolic)S 5004 V 720(revision)S 1072(number\).)S 1495(With)S 1725(this)S 1900(approach,)S 2320(old)S 2478(con\256gurations)S 3080(can)S 3248(be)S 3372(regenerated)S 3866(easily)S 4129(and)S 4303(reliably.)S 5364 V 10 B 720(6.)S 855(Usage)S 1140(Statistics)S 5580 V 10 R 970(The)S 1165(following)S 1594(usage)S 1861(statistics)S 2246(were)S 2479(collected)S 2879(on)S 3019(two)S 3209(DEC)S 3449(VAX-11/780)S 4016(computers)S 4472(of)S 4595(the)S 4757(Purdue)S 5760 V 720(Computer)S 1164(Science)S 1517(Department.)S 2086(Both)S 2324(machines)S 2744(are)S 2908(mainly)S 3229(used)S 3455(for)S 3614(research)S 3988(purposes.)S 4441(Thus,)S 4709(the)S 4874(data)S 5940 V 720(re\257ect)S 1019(an)S 1163(environment)S 1718(in)S 1847(which)S 2142(the)S 2315(majority)S 2705(of)S 2839(projects)S 3206(involve)S 3557(prototyping)S 4075(and)S 4270(advanced)S 4697(software)S 6120 V 720(development,)S 1291(but)S 1449(relatively)S 1856(little)S 2070(long-term)S 2494(maintenance.)S 6336 V 970(For)S 1141(the)S 1295(\256rst)S 1483(experiment,)S 1989(the)S 10 I 2143(ci)S 10 R 2247(and)S 10 I 2423(co)S 10 R 2549(operations)S 2997(were)S 3222(instrumented)S 3776(to)S 3886(log)S 4046(the)S 4200(number)S 4537(of)S 4653(backward)S 6516 V 720(and)S 903(forward)S 1256(deltas)S 1527(applied.)S 1914(The)S 2107(data)S 2311(were)S 2542(collected)S 2940(during)S 3239(a)S 3321(13)S 3459(month)S 3753(period)S 4046(from)S 4278(Dec.)S 4501(1982)S 4739(to)S 4855(Dec.)S 6696 V 720(1983.)S 1005(Table)S 1262(I)S 1325(summarizes)S 1832(the)S 1984(results.)S 7920 V EP %%Page: 14 15 BP /slant 0 def /height 1.000000 def 10 R 10 R 40 V 0(-)S 520 V 2767(- 14 -)S 740 V 10 Y1 1032(2)S 1078(2222222222222222222222222222222222222222222222222222222222222222222222222)S 860 V 10 R 1082(Operation)S 1748(Total)S 2227(Total)S 2468(deltas)S 2851(Mean)S 3108(deltas)S 3541(Operations)S 4284(Branch)S 980 V 1631(operations)S 2317(applied)S 2949(applied)S 3491(with)S 3699(>1)S 3835(delta)S 4220(operations)S 1000 V 10 Y1 1032(2)S 1078(2222222222222222222222222222222222222222222222222222222222222222222222222)S 1120 V 10 R 1082(co)S 1779(7867)S 2389(9320)S 3008(1.18)S 3491(509)S 3810(\(6%\))S 4179(203)S 4479(\(3%\))S 1240 V 1082(ci)S 1779(3468)S 2389(2207)S 3008(0.64)S 3541(85)S 3810(\(2%\))S 4229(75)S 4479(\(2%\))S 1360 V 1082(ci)S 1184(&)S 1292(co)S 1729(11335)S 2339(11527)S 3008(1.02)S 3491(594)S 3810(\(5%\))S 4179(278)S 4479(\(2%\))S 1380 V 10 Y1 1032(2)S 1078(2222222222222222222222222222222222222222222222222222222222222222222222222)S 1032(1)S 1340 V 1032(1)S 1240 V 1032(1)S 1140 V 1032(1)S 1040 V 1032(1)S 940 V 1032(1)S 840 V 1032(1)S 1380 V 1556(1)S 1340 V 1556(1)S 1240 V 1556(1)S 1140 V 1556(1)S 1040 V 1556(1)S 940 V 1556(1)S 840 V 1556(1)S 1380 V 2152(1)S 1340 V 2152(1)S 1240 V 2152(1)S 1140 V 2152(1)S 1040 V 2152(1)S 940 V 2152(1)S 840 V 2152(1)S 1380 V 2776(1)S 1340 V 2776(1)S 1240 V 2776(1)S 1140 V 2776(1)S 1040 V 2776(1)S 940 V 2776(1)S 840 V 2776(1)S 1380 V 3416(1)S 1340 V 3416(1)S 1240 V 3416(1)S 1140 V 3416(1)S 1040 V 3416(1)S 940 V 3416(1)S 840 V 3416(1)S 1380 V 4104(1)S 1340 V 4104(1)S 1240 V 4104(1)S 1140 V 4104(1)S 1040 V 4104(1)S 940 V 4104(1)S 840 V 4104(1)S 1380 V 4728(1)S 1340 V 4728(1)S 1240 V 4728(1)S 1140 V 4728(1)S 1040 V 4728(1)S 940 V 4728(1)S 840 V 4728(1)S 1560 V 10 R 2003(Table)S 2260(I.)S 2378(Statistics)S 2770(for)S 10 I 2916(co)S 10 R 3040(and)S 10 I 3214(ci)S 10 R 3316(operations.)S 1776 V 970(The)S 1157(\256rst)S 1345(two)S 1527(lines)S 1748(show)S 1991(statistics)S 2368(for)S 2516(check-out)S 2941(and)S 3117(check-in;)S 3520(the)S 3674(third)S 3895(line)S 4077(shows)S 4360(the)S 4515(combination.)S 1956 V 720(Recall)S 1006(that)S 10 I 1187(ci)S 10 R 1290(performs)S 1681(an)S 1806(implicit)S 2149(check-out)S 2573(to)S 2682(obtain)S 2963(a)S 3038(revision)S 3391(for)S 3537(computing)S 3995(the)S 4147(delta.)S 4426(In)S 4539(all)S 4669(measures)S 2136 V 720(presented,)S 1173(the)S 1341(most)S 1582(recent)S 1871(revision)S 2239(\(stored)S 2562(intact\))S 2863(counts)S 3170(as)S 3299(one)S 3489(delta.)S 3784(The)S 3985(number)S 4336(of)S 4466(deltas)S 4746(applied)S 2316 V 720(represents)S 1154(the)S 1306(number)S 1641(of)S 1754(passes)S 2039(necessary,)S 2481(where)S 2754(the)S 2906(\256rst)S 3092(`pass')S 3360(is)S 3457(a)S 3531(copying)S 3883(step.)S 2532 V 970(Note)S 1199(that)S 1384(the)S 1541(check-out)S 1969(operation)S 2381(is)S 2483(executed)S 2872(more)S 3112(than)S 3319(twice)S 3570(as)S 3688(frequently)S 4133(as)S 4251(the)S 4408(check-in)S 4786(opera-)S 2712 V 720(tion.)S 972(The)S 1168(fourth)S 1453(column)S 1794(gives)S 2046(the)S 2209(mean)S 2466(number)S 2812(of)S 2936(deltas)S 3210(applied)S 3544(in)S 3662(all)S 3802(three)S 4041(cases.)S 4346(For)S 10 I 4525(ci)S 10 R 4597(,)S 4662(the)S 4824(mean)S 2892 V 720(number)S 1055(of)S 1168(deltas)S 1431(applied)S 1755(is)S 1852(less)S 2032(than)S 2234(one.)S 2463(The)S 2649(reasons)S 2979(are)S 3131(that)S 3312(the)S 3465(initial)S 3730(check-in)S 4104(requires)S 4456(no)S 4587(delta)S 4812(at)S 4915(all,)S 3072 V 720(and)S 913(that)S 1111(the)S 1281(only)S 1507(time)S 10 I 1733(ci)S 10 R 1853(requires)S 2222(more)S 2475(than)S 2695(one)S 2887(delta)S 3129(is)S 3244(for)S 3408(branches.)S 3865(Column)S 4236(5)S 4334(shows)S 4632(the)S 4802(actual)S 3252 V 720(number)S 1058(of)S 1174(operations)S 1623(that)S 1806(applied)S 2133(more)S 2371(than)S 2576(one)S 2753(delta.)S 3035(The)S 3223(last)S 3395(column)S 3728(indicates)S 4116(that)S 4299(branches)S 4686(were)S 4912(not)S 3432 V 720(used)S 933(often.)S 3648 V 970(The)S 1156(last)S 1326(three)S 1556(columns)S 1926(demonstrate)S 2445(that)S 2626(the)S 2779(most)S 3005(recent)S 3279(trunk)S 3522(revision)S 3876(is)S 3975(by)S 4107(far)S 4249(the)S 4403(most)S 4630(frequently)S 3828 V 720(accessed.)S 1154(For)S 1324(RCS,)S 1570(check-out)S 1994(of)S 2108(this)S 2284(revision)S 2637(is)S 2735(a)S 2810(simple)S 3108(copy)S 3332(operation,)S 3764(which)S 4038(is)S 4135(the)S 4287(absolute)S 4650(minimum)S 4008 V 720(given)S 996(the)S 1172(copy-semantics)S 1847(of)S 10 I 1984(co)S 10 R 2078(.)S 2187(Access)S 2523(to)S 2655(older)S 2914(revisions)S 3329(and)S 3528(branches)S 3937(is)S 4059(more)S 4319(common)S 4724(in)S 4857(non-)S 4188 V 720(academic)S 1131(environments,)S 1735(yet)S 1892(even)S 2115(if)S 2210(access)S 2498(to)S 2610(older)S 2849(deltas)S 3116(were)S 3343(an)S 3471(order)S 3715(of)S 3832(magnitude)S 4288(more)S 4527(frequent,)S 4918(the)S 4368 V 720(combined)S 1155(average)S 1505(number)S 1851(of)S 1975(deltas)S 2249(applied)S 2584(would)S 2875(still)S 3068(be)S 3204(below)S 3490(1.2.)S 3712(Since)S 3976(RCS)S 4208(is)S 4317(faster)S 4580(than)S 4794(SCCS)S 4548 V 720(until)S 934(up)S 1064(to)S 1172(10)S 1302(delta)S 1526(applications,)S 2064(reverse)S 2381(deltas)S 2644(are)S 2795(clearly)S 3096(the)S 3248(method)S 3578(of)S 3691(choice.)S 4764 V 970(The)S 1158(second)S 1468(experiment,)S 1975(conducted)S 2418(in)S 2529(March)S 2822(of)S 2938(1984,)S 3196(involved)S 3580(surveying)S 4008(the)S 4164(existing)S 4515(RCS)S 4739(\256les)S 4940(on)S 4944 V 720(our)S 887(two)S 1071(machines.)S 1536(The)S 1724(goal)S 1929(was)S 2117(to)S 2228(determine)S 2660(the)S 2815(mean)S 3064(number)S 3402(of)S 3518(revisions)S 3912(per)S 4072(RCS)S 4295(\256le,)S 4481(as)S 4597(well)S 4802(as)S 4918(the)S 5124 V 720(space)S 977(consumed)S 1418(by)S 1554(them.)S 1845(Table)S 2109(II)S 2212(shows)S 2499(the)S 2658(results.)S 3011(\(Tables)S 3347(I)S 3417(and)S 3598(II)S 3701(were)S 3931(produced)S 4339(at)S 4448(di)S 4526 H (f)show 10 -.5 mul h (f)show 10 R 4587(erent)S 4823(times)S 5304 V 720(and)S 894(are)S 1045(unrelated.\))S 5384 V 10 Y1 883(2)S 926(2222222222222222222222222222222222222222222222222222222222222222222222222222222)S 5504 V 10 R 1486(Total)S 1727(RCS)S 2142(Total)S 2645(Mean)S 3089(Mean)S 3346(size)S 3531(of)S 3764(Mean)S 4021(size)S 4206(of)S 4439(Overhead)S 5624 V 1618(\256les)S 2067(revisions)S 2578(revisions)S 3158(RCS)S 3378(\256les)S 3846(revisions)S 5644 V 10 Y1 883(2)S 926(2222222222222222222222222222222222222222222222222222222222222222222222222222222)S 5764 V 10 R 933(All)S 1091(\256les)S 1601(8033)S 2122(11133)S 2671(1.39)S 3251(6156)S 3926(5585)S 4545(1.10)S 5884 V 933(Files)S 1158(with)S 1601(1477)S 2172(4578)S 2671(3.10)S 3251(8074)S 3926(6041)S 4545(1.34)S 6004 V 10 Y 933(\263)S 10 R 1018(2)S 1098(deltas)S 6024 V 10 Y1 883(2)S 926(2222222222222222222222222222222222222222222222222222222222222222222222222222222)S 883(1)S 5984 V 883(1)S 5884 V 883(1)S 5784 V 883(1)S 5684 V 883(1)S 5584 V 883(1)S 5484 V 883(1)S 6024 V 1411(1)S 5984 V 1411(1)S 5884 V 1411(1)S 5784 V 1411(1)S 5684 V 1411(1)S 5584 V 1411(1)S 5484 V 1411(1)S 6024 V 1992(1)S 5984 V 1992(1)S 5884 V 1992(1)S 5784 V 1992(1)S 5684 V 1992(1)S 5584 V 1992(1)S 5484 V 1992(1)S 6024 V 2503(1)S 5984 V 2503(1)S 5884 V 2503(1)S 5784 V 2503(1)S 5684 V 2503(1)S 5584 V 2503(1)S 5484 V 2503(1)S 6024 V 3014(1)S 5984 V 3014(1)S 5884 V 3014(1)S 5784 V 3014(1)S 5684 V 3014(1)S 5584 V 3014(1)S 5484 V 3014(1)S 6024 V 3689(1)S 5984 V 3689(1)S 5884 V 3689(1)S 5784 V 3689(1)S 5684 V 3689(1)S 5584 V 3689(1)S 5484 V 3689(1)S 6024 V 4364(1)S 5984 V 4364(1)S 5884 V 4364(1)S 5784 V 4364(1)S 5684 V 4364(1)S 5584 V 4364(1)S 5484 V 4364(1)S 6024 V 4876(1)S 5984 V 4876(1)S 5884 V 4876(1)S 5784 V 4876(1)S 5684 V 4876(1)S 5584 V 4876(1)S 5484 V 4876(1)S 6204 V 10 R 2201(Table)S 2458(II.)S 2609(Statistics)S 3001(for)S 3147(RCS)S 3367(\256les.)S 6420 V 970(The)S 1166(mean)S 1423(number)S 1769(of)S 1893(revisions)S 2295(per)S 2463(RCS)S 2694(\256le)S 2863(is)S 2972(1.39.)S 3244(Columns)S 3648(5)S 3740(and)S 3926(6)S 4018(show)S 4271(the)S 4435(mean)S 4693(sizes)S 4929(\(in)S 6600 V 720(bytes\))S 1004(of)S 1127(an)S 1261(RCS)S 1491(\256le)S 1659(and)S 1842(of)S 1964(the)S 2125(latest)S 2375(revision)S 2736(of)S 2858(each)S 3079(RCS)S 3308(\256le,)S 3500(respectively.)S 4076(The)S 4270(`overhead')S 4740(column)S 6780 V 720(contains)S 1093(the)S 1255(ratio)S 1478(of)S 1601(the)S 1763(mean)S 2019(sizes.)S 2308(Assuming)S 2754(that)S 2944(all)S 3084(revisions)S 3485(in)S 3603(an)S 3738(RCS)S 3969(\256le)S 4138(are)S 4300(approximately)S 4918(the)S 6960 V 720(same)S 955(size,)S 1165(this)S 1340(ratio)S 1553(gives)S 1794(a)S 1868(measure)S 2230(of)S 2343(the)S 2495(space)S 2746(consumed)S 3181(by)S 3311(the)S 3463(extra)S 3692(revisions.)S 7176 V 970(In)S 1092(our)S 1264(sample,)S 1611(over)S 1827(80)S 1966(per)S 2132(cent)S 2337(of)S 2459(the)S 2620(RCS)S 2849(\256les)S 3055(contained)S 3482(only)S 3699(a)S 3782(single)S 4061(revision.)S 4478(The)S 4673(reason)S 4973(is)S 7356 V 720(that)S 911(our)S 1085(systems)S 1443(programmers)S 2016(routinely)S 2418(check)S 2691(in)S 2810(all)S 2951(source)S 3252(\256les)S 3460(on)S 3600(the)S 3762(distribution)S 4264(tapes,)S 4534(even)S 4762(though)S 7920 V EP %%Page: 15 16 BP /slant 0 def /height 1.000000 def 10 R 10 R 40 V 0(-)S 580 V 2767(- 15 -)S 900 V 720(they)S 933(may)S 1146(never)S 1408(touch)S 1672(them)S 1914(again.)S 2227(To)S 2380(get)S 2544(a)S 2630(better)S 2899(indication)S 3341(of)S 3466(how)S 3680(much)S 3944(space)S 4207(savings)S 4549(are)S 4712(possible)S 1080 V 720(with)S 935(deltas,)S 1230(all)S 1367(measures)S 1775(with)S 1990(those)S 2238(\256les)S 2442(that)S 2629(contained)S 3054(2)S 3140(or)S 3259(more)S 3500(revisions)S 3897(were)S 4126(recomputed.)S 4688(Only)S 4924(for)S 1260 V 720(those)S 961(\256les)S 1158(is)S 1255(RCS)S 1475(necessary.)S 1947(As)S 2088(shown)S 2379(in)S 2487(the)S 2639(second)S 2946(line,)S 3151(the)S 3303(average)S 3642(number)S 3978(of)S 4092(revisions)S 4484(for)S 4631(those)S 4873(\256les)S 1440 V 720(is)S 823(3.10,)S 1059(with)S 1273(an)S 1403(overhead)S 1804(of)S 1923(1.34.)S 2188(This)S 2401(means)S 2691(that)S 2876(the)S 3033(extra)S 3267(2.10)S 3477(deltas)S 3745(require)S 4062(34)S 4197(per)S 4359(cent)S 4560(extra)S 4794(space,)S 1620 V 720(or)S 842(16)S 981(per)S 1147(cent)S 1352(per)S 1518(extra)S 1756(revision.)S 2172(Rochkind)S 1570 V 2561(3)S 1620 V 2650(measured)S 3071(the)S 3233(space)S 3494(consumed)S 3939(by)S 4079(SCCS,)S 4390(and)S 4574(reported)S 4946(an)S 1800 V 720(average)S 1067(of)S 1188(5)S 1276(revisions)S 1675(per)S 1840(group)S 2111(and)S 2293(an)S 2425(overhead)S 2828(of)S 2949(1.37)S 3162(\(or)S 3316(about)S 3575(9)S 3662(per)S 3826(cent)S 4029(per)S 4193(extra)S 4429(revision\).)S 4876(In)S 4996(a)S 1980 V 720(later)S 930(paper,)S 1209(Glasser)S 1930 V 1508(6)S 1980 V 1591(observed)S 1984(an)S 2111(average)S 2453(of)S 2569(7)S 2652(revisions)S 3046(per)S 3206(group)S 3472(in)S 3583(a)S 3660(single,)S 3957(large)S 4189(project,)S 4524(but)S 4685(provided)S 2160 V 720(no)S 863(overhead)S 1271(\256gure.)S 1602(In)S 1728(his)S 1888(paper)S 2152(on)S 2294(DSEE)S 2110 V 2544(5)S 2160 V 2594(,)S 2661(Leblang)S 3030(reported)S 3404(that)S 3596(delta)S 3832(storage)S 4162(combined)S 4598(with)S 4818(blank)S 2340 V 720(compression)S 1260(results)S 1556(in)S 1669(an)S 1798(overhead)S 2198(of)S 2316(a)S 2395(mere)S 2629(1\2612)S 2814(per)S 2976(cent)S 3177(per)S 3339(revision.)S 3751(Since)S 4009(leading)S 4339(blanks)S 4636(accounted)S 2520 V 720(for)S 870(about)S 1126(20)S 1260(per)S 1421(cent)S 1621(of)S 1738(the)S 1894(surveyed)S 2288(Pascal)S 2577(programs,)S 3013(a)S 3091(revision)S 3447(group)S 3714(with)S 3926(5\26110)S 4159(members)S 4558(was)S 4746(smaller)S 2700 V 720(than)S 922(a)S 996(single)S 1265(cleartext)S 1638(copy.)S 2916 V 970(The)S 1155(above)S 1423(observations)S 1958(demonstrate)S 2476(clearly)S 2777(that)S 2957(the)S 3109(space)S 3360(needed)S 3672(for)S 3818(extra)S 4047(revisions)S 4439(is)S 4537(small.)S 4840(With)S 3096 V 720(delta)S 950(storage,)S 1299(the)S 1457(luxury)S 1753(of)S 1871(keeping)S 2222(multiple)S 2591(revisions)S 2987(online)S 3272(is)S 3374(certainly)S 3758(a)S 3802 H (f)show 10 -.5 mul h (f)show 10 R 3863(ordable.)S 4252(In)S 4370(fact,)S 4579(introducing)S 3276 V 720(a)S 803(system)S 1120(with)S 1337(delta)S 1571(storage)S 1899(may)S 2111(reduce)S 2416(storage)S 2744(requirements,)S 3330(because)S 3685(programmers)S 4257(often)S 4502(save)S 4719(back-up)S 3456 V 720(copies)S 1011(anyway.)S 1411(Since)S 1668(back-up)S 2024(copies)S 2314(are)S 2470(stored)S 2749(much)S 3006(more)S 3246(e)S 3290 H (f)show 10 -.5 mul h (\256)show 10 R 3374(ciently)S 3681(with)S 3894(deltas,)S 4187(introducing)S 4683(a)S 4762(system)S 3636 V 720(such)S 933(as)S 1046(RCS)S 1266(may)S 1468(actually)S 1814(free)S 1998(a)S 2072(considerable)S 2606(amount)S 2936(of)S 3049(space.)S 3996 V 10 B 720(7.)S 855(Survey)S 1185(of)S 1298(Version)S 1661(Control)S 2024(Tools)S 4212 V 10 R 970(The)S 1159(need)S 1381(to)S 1493(keep)S 1715(back-up)S 2070(copies)S 2359(of)S 2477(software)S 2855(arose)S 3100(when)S 3351(programs)S 3763(and)S 3942(data)S 4143(were)S 4371(no)S 4506(longer)S 4796(stored)S 4392 V 720(on)S 861(paper)S 1123(media,)S 1433(but)S 1602(were)S 1836(entered)S 2170(from)S 2405(terminals)S 2818(and)S 3003(stored)S 3288(on)S 3428(disk.)S 3690(Back-up)S 4068(copies)S 4363(are)S 4524(desirable)S 4924(for)S 4572 V 720(reliability,)S 1166(and)S 1342(many)S 1596(modern)S 1934(editors)S 2239(automatically)S 2816(save)S 3026(a)S 3103(back-up)S 3457(copy)S 3684(for)S 3833(every)S 4087(\256le)S 4248(touched.)S 4652(This)S 4863(stra-)S 4752 V 720(tegy)S 928(is)S 1031(valuable)S 1405(for)S 1557(short-term)S 2009(back-ups,)S 2430(but)S 2593(not)S 2756(suitable)S 3102(for)S 3253(long-term)S 3682(version)S 4011(control,)S 4354(since)S 4594(an)S 4723(existing)S 4932 V 720(back-up)S 1071(copy)S 1295(is)S 1392(overwritten)S 1882(whenever)S 2299(the)S 2451(corresponding)S 3052(\256le)S 3210(is)S 3307(edited.)S 5148 V 970(Tape)S 1217(archives)S 1597(are)S 1766(suitable)S 2125(for)S 2289(long-term,)S 2756(o)S 2806 H (f)show 10 -.5 mul h (\257)show 10 R 2890(ine)S 3060(storage.)S 3451(If)S 3565(all)S 3713(changed)S 4093(\256les)S 4308(are)S 4477(dumped)S 4847(on)S 4996(a)S 5328 V 720(back-up)S 1073(tape)S 1271(once)S 1491(per)S 1650(day,)S 1851(old)S 2010(revisions)S 2402(remain)S 2710(accessible.)S 3200(However,)S 3621(tape)S 3818(archives)S 4181(are)S 4333(unsatisfactory)S 4924(for)S 5508 V 720(version)S 1049(control)S 1367(in)S 1480(several)S 1797(ways.)S 2092(First,)S 2337(backing)S 2689(up)S 2825(the)S 2983(\256le)S 3147(system)S 3461(every)S 3718(24)S 3854(hours)S 4112(does)S 4331(not)S 4495(capture)S 4824(inter-)S 5688 V 720(mediate)S 1078(revisions.)S 1536(Secondly,)S 1975(the)S 2139(old)S 2308(revisions)S 2710(are)S 2872(not)S 3041(online,)S 3357(and)S 3542(accessing)S 3965(them)S 4206(is)S 4314(tedious)S 4644(and)S 4829(time-)S 5868 V 720(consuming.)S 1248(In)S 1365(particular,)S 1806(it)S 1896(is)S 1997(impractical)S 2480(to)S 2592(compare)S 2969(several)S 3285(old)S 3447(revisions)S 3843(of)S 3961(a)S 4040(group,)S 4333(because)S 4683(that)S 4868(may)S 6048 V 720(require)S 1037(mounting)S 1456(and)S 1635(searching)S 2052(several)S 2369(tapes.)S 2664(Tape)S 2898(archives)S 3265(are)S 3421(important)S 3845(fail-safe)S 4206(tools)S 4436(in)S 4549(the)S 4706(event)S 4957(of)S 6228 V 720(catastrophic)S 1240(disk)S 1445(failures)S 1782(or)S 1903(accidental)S 2345(deletions,)S 2769(but)S 2935(they)S 3145(are)S 3304(ill-suited)S 3698(for)S 3852(version)S 4184(control.)S 4560(Conversely,)S 6408 V 720(version)S 1044(control)S 1357(tools)S 1582(do)S 1712(not)S 1870(obviate)S 2194(the)S 2346(need)S 2564(for)S 2710(tape)S 2906(archives.)S 6624 V 970(A)S 1076(natural)S 1387(technique)S 1809(for)S 1959(keeping)S 2309(several)S 2625(old)S 2787(revisions)S 3182(online)S 3466(is)S 3567(to)S 3679(never)S 3934(delete)S 4206(a)S 4285(\256le.)S 4503(Editing)S 4833(a)S 4912(\256le)S 6804 V 720(simply)S 1036(creates)S 1355(a)S 1442(new)S 1651(\256le)S 1822(with)S 2043(the)S 2208(same)S 2456(name,)S 2740(but)S 2911(with)S 3132(a)S 3218(di)S 3296 H (f)show 10 -.5 mul h (f)show 10 R 3357(erent)S 3598(sequence)S 4005(number.)S 4407(This)S 4627(technique,)S 6984 V 720(available)S 1119(as)S 1241(an)S 1374(option)S 1669(in)S 1786(DEC's)S 2097(VMS)S 2353(operating)S 2769(system,)S 3111(turns)S 3350(out)S 3518(to)S 3636(be)S 3770(inadequate)S 4242(for)S 4398(version)S 4732(control.)S 7164 V 720(First,)S 970(it)S 1067(is)S 1174(prohibitively)S 1731(expensive)S 2170(in)S 2288(terms)S 2550(of)S 2673(storage)S 3001(costs,)S 3266(especially)S 3705(since)S 3950(no)S 4090(data)S 4296(compression)S 4841(tech-)S 7344 V 720(niques)S 1016(are)S 1172(employed.)S 1656(Secondly,)S 2088(indiscriminately)S 2773(storing)S 3086(every)S 3342(change)S 3659(produces)S 4054(too)S 4217(many)S 4474(revisions,)S 4896(and)S 7920 V EP %%Page: 16 17 BP /slant 0 def /height 1.000000 def 10 R 10 R 40 V 0(-)S 580 V 2767(- 16 -)S 900 V 720(programmers)S 1289(have)S 1514(di)S 1592 H (f)show 10 -.5 mul h (\256)show 10 R 1676(culties)S 1974(distinguishing)S 2579(them.)S 2871(The)S 3063(proliferation)S 3599(of)S 3718(revisions)S 4115(forces)S 4394(programmers)S 4962(to)S 1080 V 720(spend)S 989(much)S 1247(time)S 1461(on)S 1597(\256nding)S 1917(and)S 2097(deleting)S 2455(useless)S 2774(\256les.)S 3032(Thirdly,)S 3393(most)S 3624(of)S 3743(the)S 3902(support)S 4239(functions)S 4648(like)S 4835(lock-)S 1260 V 720(ing,)S 903(logging,)S 1264(revision)S 1616(selection,)S 2026(and)S 2200(identi\256cation)S 2758(described)S 3170(in)S 3278(this)S 3453(paper)S 3704(are)S 3855(not)S 4013(available.)S 1476 V 970(An)S 1122(alternative)S 1573(approach)S 1968(is)S 2065(to)S 2173(separate)S 2529(editing)S 2837(from)S 3061(revision)S 3414(control.)S 3783(The)S 3969(user)S 4166(may)S 4369(repeatedly)S 4815(edit)S 4996(a)S 1656 V 720(given)S 985(revision,)S 1374(until)S 1600(freezing)S 1968(it)S 2066(with)S 2286(an)S 2422(explicit)S 2764(command.)S 3255(Once)S 3507(a)S 3593(revision)S 3957(is)S 4066(frozen,)S 4387(it)S 4485(is)S 4594(stored)S 4880(per-)S 1836 V 720(manently)S 1122(and)S 1296(can)S 1464(no)S 1594(longer)S 1879(be)S 2003(modi\256ed.)S 2445(\(In)S 2592(RCS,)S 2838(freezing)S 3195(a)S 3270(revisions)S 3662(is)S 3760(done)S 3985(with)S 10 I 4194(ci)S 10 R 4266(.\))S 4385(Editing)S 4711(a)S 4786(frozen)S 2016 V 720(revision)S 1073(implicitly)S 1494(creates)S 1801(a)S 1876(new)S 2073(one,)S 2273(which)S 2548(can)S 2717(again)S 2964(be)S 3089(changed)S 3451(repeatedly)S 3896(until)S 4110(it)S 4196(is)S 4293(frozen)S 4577(itself.)S 4862(This)S 2196 V 720(approach)S 1123(saves)S 1377(exactly)S 1703(those)S 1952(revisions)S 2352(that)S 2541(the)S 2702(user)S 2907(considers)S 3323(important,)S 3776(and)S 3959(keeps)S 4225(the)S 4386(number)S 4730(of)S 4852(revi-)S 2376 V 720(sions)S 969(manageable.)S 1543(IBM's)S 1847(CLEAR/CASTER)S 2326 V 2587(7)S 2376 V 2637(,)S 2705(AT&T's)S 3092(SCCS)S 2326 V 3338(3)S 2376 V 3388(,)S 3456(CMU's)S 3799(SDC)S 2326 V 3994(8)S 2376 V 4087(and)S 4274(DEC's)S 4589(CMS)S 2326 V 4801(9)S 2376 V 4851(,)S 4919(are)S 2556 V 720(examples)S 1142(of)S 1270(version)S 1609(control)S 1937(systems)S 2299(using)S 2561(this)S 2751(approach.)S 3216(CLEAR/CASTER)S 4001(maintains)S 4435(a)S 4524(data)S 4735(base)S 4957(of)S 2736 V 720(programs,)S 1163(speci\256cations,)S 1773(documentation)S 2407(and)S 2591(messages,)S 3033(using)S 3290(deltas.)S 3618(Its)S 3758(goal)S 3970(is)S 4077(to)S 4195(provide)S 4540(control)S 4863(over)S 2916 V 720(the)S 873(development)S 1420(process)S 1750(from)S 1975(a)S 2050(management)S 2591(viewpoint.)S 3077(SCCS)S 3354(stores)S 3618(multiple)S 3983(revisions)S 4375(of)S 4489(source)S 4780(text)S 4962(in)S 3096 V 720(an)S 861(ancestral)S 1262(tree,)S 1483(records)S 1823(a)S 1913(log)S 2087(entry)S 2338(for)S 2500(each)S 2728(revision,)S 3121(provides)S 3511(access)S 3811(control,)S 4165(and)S 4355(has)S 4534(facilities)S 4924(for)S 3276 V 720(uniquely)S 1100(identifying)S 1569(each)S 1781(revision.)S 2188(An)S 2340(e)S 2384 H (f)show 10 -.5 mul h (\256)show 10 R 2468(cient)S 2692(delta)S 2916(technique)S 3334(reduces)S 3668(the)S 3820(space)S 4072(consumed)S 4508(by)S 4639(each)S 4852(revi-)S 3456 V 720(sion)S 919(group.)S 1239(SDC)S 1466(is)S 1565(much)S 1819(simpler)S 2151(than)S 2355(SCCS)S 2633(because)S 2980(it)S 3068(stores)S 3333(not)S 3493(more)S 3730(than)S 3934(two)S 4116(revisions.)S 4563(However,)S 4984(it)S 3636 V 720(maintains)S 1140(a)S 1215(complete)S 1612(log)S 1771(for)S 1918(all)S 2049(old)S 2208(revisions,)S 2625(some)S 2867(of)S 2981(which)S 3256(may)S 3459(be)S 3584(on)S 3715(back-up)S 4067(tape.)S 4319(CMS,)S 4587(like)S 4769(SCCS,)S 3816 V 720(manages)S 1099(tree-structured)S 1710(revision)S 2062(groups,)S 2389(but)S 2547(o)S 2597 H (f)show 10 -.5 mul h (f)show 10 R 2658(ers)S 2804(no)S 2934(identi\256cation)S 3492(mechanism.)S 4032 V 970(Tools)S 1228(for)S 1374(dealing)S 1698(with)S 1906(con\256gurations)S 2508(are)S 2659(still)S 2841(in)S 2950(a)S 3025(state)S 3239(of)S 3353(\257ux.)S 3595(SCCS,)S 3897(SDC)S 4123(and)S 4298(CMS)S 4541(can)S 4710(be)S 4835(com-)S 4212 V 720(bined)S 988(with)S 1211(MAKE)S 1550(or)S 1678(MAKE-like)S 2200(programs.)S 2677(Since)S 2944(\257exible)S 3289(selection)S 3689(rules)S 3928(are)S 4094(missing)S 4451(from)S 4690(all)S 4835(these)S 4392 V 720(tools,)S 986(it)S 1088(is)S 1201(sometimes)S 1675(di)S 1753 H (f)show 10 -.5 mul h (\256)show 10 R 1837(cult)S 2033(to)S 2157(specify)S 2491(precisely)S 2897(which)S 3187(revision)S 3555(of)S 3685(each)S 3914(group)S 4194(should)S 4508(be)S 4649(passed)S 4962(to)S 4572 V 720(MAKE)S 1055(for)S 1211(building)S 1585(a)S 1669(desired)S 1997(con\256guration.)S 2625(The)S 2820(Xerox)S 3109(Cedar)S 3387(system)S 4522 V 3665(10)S 4572 V 3805(provides)S 4189(a)S 4273(`System)S 4641(Modeller')S 4752 V 720(that)S 903(can)S 1074(rebuild)S 1390(a)S 1467(con\256guration)S 2033(from)S 2260(an)S 2387(arbitrary)S 2763(set)S 2907(of)S 3023(module)S 3356(revisions.)S 3806(The)S 3995(revisions)S 4390(of)S 4507(a)S 4585(module)S 4919(are)S 4932 V 720(only)S 935(distinguished)S 1506(by)S 1643(creation)S 2001(time,)S 2241(and)S 2422(there)S 2658(is)S 2762(no)S 2899(tool)S 3092(for)S 3245(managing)S 3676(groups.)S 4039(Since)S 4297(the)S 4455(selection)S 4846(rules)S 5112 V 720(are)S 871(primitive,)S 1293(the)S 1445(System)S 1770(Modeller)S 2166(appears)S 2500(to)S 2608(be)S 2732(somewhat)S 3167(tedious)S 3486(to)S 3594(use.)S 3812(Apollo's)S 4192(DSEE)S 5062 V 4442(5)S 5112 V 4522(is)S 4620(a)S 4695(sophisti-)S 5292 V 720(cated)S 961(software)S 1335(engineering)S 1837(environment.)S 2428(It)S 2520(manages)S 2900(revision)S 3253(groups)S 3556(in)S 3665(a)S 3740(way)S 3937(similar)S 4245(to)S 4353(SCCS)S 4629(and)S 4803(CMS.)S 5472 V 720(Con\256gurations)S 1359(are)S 1524(built)S 1752(using)S 2013(`con\256guration)S 2624(threads'.)S 3045(A)S 3162(con\256guration)S 3740(thread)S 4034(states)S 4301(which)S 4590(revision)S 4957(of)S 5652 V 720(each)S 947(group)S 1225(named)S 1536(in)S 1659(a)S 1748(con\256guration)S 2326(should)S 2638(be)S 2777(chosen.)S 3154(A)S 3271(con\256guration)S 3849(thread)S 4142(may)S 4358(contain)S 4696(dynamic)S 5832 V 720(speci\256ers)S 1141(\(e.g.,)S 1387(`choose)S 1741(the)S 1908(revisions)S 2314(I)S 2392(am)S 2559(currently)S 2964(working)S 3342(on,)S 3512(and)S 3701(the)S 3868(most)S 4108(recent)S 4396(revisions)S 4802(other-)S 6012 V 720(wise'\),)S 1030(which)S 1310(are)S 1467(bound)S 1753(automatically)S 2332(at)S 2439(build)S 2680(time.)S 2948(It)S 3044(also)S 3240(provides)S 3619(a)S 3698(noti\256cation)S 4189(mechanism)S 4679(for)S 4830(alert-)S 6192 V 720(ing)S 878(maintainers)S 1374(about)S 1626(the)S 1778(need)S 1996(to)S 2104(rebuild)S 2417(a)S 2491(system)S 2799(after)S 3011(a)S 3085(change.)S 6408 V 970(RCS)S 1195(is)S 1298(based)S 1561(on)S 1697(a)S 1777(general)S 2106(model)S 2392(for)S 2544(describing)S 2996(multi-version/multi-con\256guration)S 4377(systems)S 6358 V 4694(11)S 6408 V 4794(.)S 4885(The)S 6588 V 720(model)S 1017(describes)S 1435(systems)S 1798(using)S 2061(AND/OR)S 2490(graphs,)S 2827(where)S 3116(AND)S 3378(nodes)S 3657(represent)S 4068(con\256gurations,)S 4711(and)S 4901(OR)S 6768 V 720(nodes)S 1012(represent)S 1436(version)S 1789(groups.)S 2175(The)S 2389(model)S 2698(gives)S 2968(rise)S 3171(to)S 3308(a)S 3411(suit)S 3615(of)S 3757(selection)S 4171(rules)S 4425(for)S 4601(composing)S 6948 V 720(con\256gurations,)S 1354(almost)S 1658(all)S 1795(of)S 1915(which)S 2196(are)S 2354(implemented)S 2913(in)S 3028(RCS.)S 3310(The)S 3501(revisions)S 3898(selected)S 4255(by)S 4391(RCS)S 4617(are)S 4774(passed)S 7128 V 720(to)S 831(MAKE)S 1158(for)S 1307(con\256guration)S 1873(building.)S 2295(Revision)S 2684(group)S 2950(management)S 3493(is)S 3593(modelled)S 3999(after)S 4215(SCCS.)S 4550(RCS)S 4774(retains)S 7308 V 720(SCCS's)S 1080(best)S 1283(features,)S 1665(but)S 1835(o)S 1885 H (f)show 10 -.5 mul h (f)show 10 R 1946(ers)S 2104(a)S 2190(signi\256cantly)S 2727(simpler)S 3068(user)S 3275(interface,)S 3689(\257exible)S 4030(selection)S 4426(rules,)S 4686(adequate)S 7920 V EP %%Page: 17 18 BP /slant 0 def /height 1.000000 def 10 R 10 R 40 V 0(-)S 580 V 2767(- 17 -)S 900 V 720(integration)S 1190(with)S 1405(MAKE)S 1736(and)S 1917(improved)S 2337(identi\256cation.)S 2957(A)S 3066(detailed)S 3419(comparison)S 3922(of)S 4042(RCS)S 4270(and)S 4452(SCCS)S 4736(appears)S 1080 V 720(in)S 828(Reference)S 1261(4.)S 1296 V 970(An)S 1126(important)S 1549(component)S 2027(of)S 2144(all)S 2278(revision)S 2634(control)S 2951(systems)S 3303(is)S 3405(a)S 3484(program)S 3857(for)S 4008(computing)S 4471(deltas.)S 4794(SCCS)S 1476 V 720(and)S 896(RCS)S 1118(use)S 1283(the)S 1437(program)S 10 I 1807(diff)S 1426 V 10 R 1941(2)S 1476 V 1991(,)S 2048(which)S 2324(\256rst)S 2512(computes)S 2927(the)S 3081(longest)S 3402(common)S 3784(substring)S 4183(of)S 4298(two)S 4479(revisions,)S 4896(and)S 1656 V 720(then)S 927(produces)S 1322(the)S 1479(delta)S 1708(from)S 1937(that)S 2122(substring.)S 2579(The)S 2769(delta)S 2998(is)S 3100(simply)S 3408(an)S 3537(edit)S 3722(script)S 3979(consisting)S 4420(of)S 4538(deletion)S 4896(and)S 1836 V 720(insertion)S 1100(commands)S 1563(that)S 1743(generate)S 2110(one)S 2284(revision)S 2636(from)S 2860(the)S 3012(other.)S 2052 V 970(A)S 1078(delta)S 1308(based)S 1571(on)S 1707(a)S 1787(longest)S 2112(common)S 2498(substring)S 2901(is)S 3004(not)S 3168(necessarily)S 3648(minimal,)S 4044(because)S 4396(it)S 4489(does)S 4709(not)S 4874(take)S 2232 V 720(advantage)S 1156(of)S 1271(crossing)S 1636(block)S 1890(moves.)S 2238(Crossing)S 2626(block)S 2880(moves)S 3173(arise)S 3392(if)S 3484(two)S 3665(or)S 3779(more)S 4015(blocks)S 4307(of)S 4421(lines)S 4641(\(e.g.,)S 4874(pro-)S 2412 V 720(cedures\))S 1090(appear)S 1388(in)S 1499(a)S 1576(di)S 1654 H (f)show 10 -.5 mul h (f)show 10 R 1715(erent)S 1947(order)S 2190(in)S 2301(two)S 2484(revisions.)S 2933(An)S 3088(edit)S 3271(script)S 3526(derived)S 3858(from)S 4085(a)S 4162(longest)S 4484(common)S 4868(sub-)S 2592 V 720(string)S 987(\256rst)S 1182(deletes)S 1498(the)S 1659(shorter)S 1975(of)S 2097(the)S 2258(two)S 2447(blocks,)S 2772(and)S 2955(then)S 3166(reinserts)S 3543(it.)S 3693(Heckel)S 2542 V 3975(12)S 2592 V 4114(proposed)S 4519(an)S 4651(algorithm)S 2772 V 720(for)S 884(detecting)S 1298(block)S 1568(moves,)S 1902(but)S 2078(since)S 2331(the)S 2501(algorithm)S 2938(is)S 3053(based)S 3328(on)S 3476(heuristics,)S 3932(there)S 4179(are)S 4348(conditions)S 4813(under)S 2952 V 720(which)S 997(the)S 1152(generated)S 1572(delta)S 1799(is)S 1899(far)S 2042(from)S 2269(minimal.)S 2691(DSEE)S 2974(uses)S 3179(this)S 3357(algorithm)S 3779(combined)S 4205(with)S 4415(blank)S 4669(compres-)S 3132 V 720(sion,)S 965(apparently)S 1439(with)S 1670(satisfactory)S 2183(overall)S 2514(results.)S 2884(A)S 3010(new)S 3230(algorithm)S 3673(that)S 3877(is)S 3998(guaranteed)S 4489(to)S 4621(produce)S 4996(a)S 3312 V 720(minimal)S 1085(delta)S 1310(based)S 1568(on)S 1699(block)S 1951(moves)S 2242(appears)S 2576(in)S 2684(Reference)S 3117(13.)S 3302(A)S 3404(future)S 3672(release)S 3978(of)S 4091(RCS)S 4311(will)S 4497(use)S 4660(this)S 4835(algo-)S 3492 V 720(rithm.)S 3708 V 10 I 970(Acknowledgements)S 10 R 1735(:)S 1818(Many)S 2106(people)S 2427(have)S 2670(helped)S 2991(make)S 3262(RCS)S 3507(a)S 3606(success)S 3960(by)S 4115(contributed)S 4626(criticisms,)S 3888 V 720(suggestions,)S 1246(corrections,)S 1748(and)S 1926(even)S 2148(whole)S 2426(new)S 2626(commands)S 3093(\(including)S 3538(manual)S 3866(pages\).)S 4214(The)S 4402(list)S 4558(of)S 4674(people)S 4973(is)S 4068 V 720(too)S 878(long)S 1086(to)S 1194(be)S 1318(reproduced)S 1796(here,)S 2022(but)S 2180(my)S 2338(sincere)S 2650(thanks)S 2941(for)S 3087(their)S 3300(help)S 3502(and)S 3676(goodwill)S 4062(goes)S 4275(to)S 4383(all)S 4513(of)S 4626(them.)S 4488 V 10 B 720(Appendix:)S 1201(Synopsis)S 1605(of)S 1718(RCS)S 1948(Operations)S 4680 V 10 I 720(ci)S 10 B 822(\261)S 902(check)S 1176(in)S 1290(revisions)S 4800 V 10 I 970(Ci)S 10 R 1102(stores)S 1372(the)S 1531(contents)S 1901(of)S 2021(a)S 2102(working)S 2472(\256le)S 2637(into)S 2830(the)S 2989(corresponding)S 3598(RCS)S 3826(\256le)S 3992(as)S 4113(a)S 4195(new)S 4399(revision.)S 4814(If)S 4918(the)S 4920 V 970(RCS)S 1191(\256le)S 1350(doesn't)S 1675(exist,)S 10 I 1920(ci)S 10 R 2023(creates)S 2330(it.)S 10 I 2472(Ci)S 10 R 2598(removes)S 2967(the)S 3120(working)S 3484(\256le,)S 3668(unless)S 3949(one)S 4124(of)S 4238(the)S 4391(options)S 10 I 4717(\261u)S 10 R 4848(or)S 10 I 4962(\261l)S 5040 V 10 R 970(is)S 1071(present.)S 1448(For)S 1621(each)S 1837(check-in,)S 10 I 2239(ci)S 10 R 2345(asks)S 2551(for)S 2701(a)S 2779(commentary)S 3312(describing)S 3763(the)S 3920(changes)S 4276(relative)S 4610(to)S 4723(the)S 4880(pre-)S 5160 V 970(vious)S 1217(revision.)S 5400 V 10 I 970(Ci)S 10 R 1111(assigns)S 1446(the)S 1614(revision)S 1982(number)S 2333(given)S 2601(by)S 2747(the)S 10 I 2915(\261r)S 10 R 3050(option;)S 3380(if)S 3487(that)S 3683(option)S 3985(is)S 4098(missing,)S 4481(it)S 4583(derives)S 4918(the)S 5520 V 970(number)S 1313(from)S 1545(the)S 1705(lock)S 1915(held)S 2125(by)S 2263(the)S 2423(user;)S 2655(if)S 2754(there)S 2991(is)S 3096(no)S 3234(lock)S 3444(and)S 3625(locking)S 3962(is)S 4066(not)S 4231(strict,)S 10 I 4493(ci)S 10 R 4602(increments)S 5640 V 970(the)S 1136(number)S 1485(of)S 1612(the)S 1778(latest)S 2033(revision)S 2399(on)S 2544(the)S 2711(trunk.)S 3022(A)S 3139(side)S 3345(branch)S 3661(can)S 3844(only)S 4067(be)S 4206(started)S 4517(by)S 4662(explicitly)S 5760 V 970(specifying)S 1416(its)S 1541(number)S 1876(with)S 2084(the)S 10 I 2236(\261r)S 10 R 2355(option)S 2641(during)S 2932(check-in.)S 6000 V 10 I 970(Ci)S 10 R 1106(also)S 1308(determines)S 1787(whether)S 2149(the)S 2312(revision)S 2675(to)S 2794(be)S 2929(checked)S 3296(in)S 3415(is)S 3523(di)S 3601 H (f)show 10 -.5 mul h (f)show 10 R 3662(erent)S 3902(from)S 4137(the)S 4300(previous)S 4685(one,)S 4896(and)S 6120 V 970(asks)S 1194(whether)S 1567(to)S 1697(proceed)S 2064(if)S 2177(not.)S 2412(This)S 2642(facility)S 2977(simpli\256es)S 3419(check-in)S 3814(operations)S 4281(for)S 4448(large)S 4698(systems,)S 6240 V 970(because)S 1315(one)S 1489(need)S 1707(not)S 1865(remember)S 2299(which)S 2573(\256les)S 2770(were)S 2993(changed.)S 6480 V 970(The)S 1161(option)S 10 I 1453(\261k)S 10 R 1583(searches)S 1956(the)S 2114(checked)S 2476(in)S 2590(\256le)S 2754(for)S 2906(identi\256cation)S 3470(markers)S 3827(containing)S 4285(the)S 4443(attributes)S 4852(revi-)S 6600 V 970(sion)S 1169(number,)S 1530(check-in)S 1904(date,)S 2126(author)S 2412(and)S 2587(state,)S 2826(and)S 3001(assigns)S 3321(these)S 3557(to)S 3666(the)S 3819(new)S 4016(revision)S 4369(rather)S 4632(than)S 4835(com-)S 6720 V 970(puting)S 1275(them.)S 1579(This)S 1806(option)S 2111(is)S 2227(useful)S 2520(for)S 2685(software)S 3077(distribution:)S 3616(Recipients)S 4087(of)S 4219(distributed)S 4697(software)S 6840 V 970(using)S 1227(RCS)S 1457(should)S 1764(check)S 2036(in)S 2154(updates)S 2499(with)S 2717(the)S 10 I 2879(\261k)S 10 R 3013(option.)S 3364(This)S 3581(convention)S 4064(guarantees)S 4529(that)S 4718(revision)S 6960 V 970(numbers,)S 1369(check-in)S 1742(dates,)S 2002(etc.,)S 2198(are)S 2349(the)S 2501(same)S 2736(at)S 2838(all)S 2968(sites.)S 7116 V 10 I 720(co)S 10 B 844(\261)S 924(check)S 1198(out)S 1367(revisions)S 7236 V 10 I 970(Co)S 10 R 1136(retrieves)S 1528(revisions)S 1938(according)S 2380(to)S 2507(revision)S 2878(number,)S 3257(date,)S 3497(author)S 3801(and)S 3994(state)S 4226(attributes.)S 4702(It)S 4813(either)S 7920 V EP %%Page: 18 19 BP /slant 0 def /height 1.000000 def 10 R 10 R 40 V 0(-)S 520 V 2767(- 18 -)S 840 V 970(places)S 1251(the)S 1405(revision)S 1759(into)S 1947(the)S 2101(working)S 2465(\256le,)S 2649(or)S 2763(prints)S 3022(it)S 3109(on)S 3240(the)S 3393(standard)S 3762(output.)S 10 I 4104(Co)S 10 R 4252(always)S 4560(expands)S 4918(the)S 960 V 970(identi\256cation)S 1528(markers.)S 1116 V 10 I 720(ident)S 10 B 950(\261)S 1030(extract)S 1358(identi\256cation)S 1950(markers)S 1236 V 10 I 970(Ident)S 10 R 1205(extracts)S 1545(the)S 1697(identi\256cation)S 2255(markers)S 2606(expanded)S 3018(by)S 10 I 3148(co)S 10 R 3272(from)S 3496(any)S 3670(\256le)S 3828(and)S 4002(prints)S 4260(them.)S 1392 V 10 I 720(rcs)S 10 B 872(\261)S 952(change)S 1282(RCS)S 1512(\256le)S 1670(attributes)S 1512 V 10 I 970(Rcs)S 10 R 1144(is)S 1241(an)S 1365(administrative)S 1967(operation)S 2374(that)S 2554(changes)S 2905(access)S 3189(lists,)S 3406(locks,)S 3673(unlocks,)S 4040(breaks)S 4331(locks,)S 4598(toggles)S 4918(the)S 1632 V 970(strict-locking)S 1541(feature,)S 1880(sets)S 2068(state)S 2289(attributes)S 2699(and)S 2881(symbolic)S 3286(revision)S 3646(numbers,)S 4053(changes)S 4412(the)S 4571(description,)S 1752 V 970(and)S 1144(deletes)S 1451(revisions.)S 1897(A)S 1999(revision)S 2351(can)S 2519(only)S 2727(be)S 2851(deleted)S 3169(if)S 3260(it)S 3346(is)S 3443(not)S 3601(the)S 3753(fork)S 3949(of)S 4062(a)S 4136(side)S 4327(branch.)S 1908 V 10 I 720(rcsclean)S 10 B 1088(\261)S 1168(clean)S 1420(working)S 1806(directory)S 2028 V 10 I 970(Rcsclean)S 10 R 1360(removes)S 1728(working)S 2091(\256les)S 2288(that)S 2468(were)S 2691(checked)S 3047(out)S 3205(but)S 3363(never)S 3614(changed.*)S 2184 V 10 I 720(rcsdiff)S 10 B 1006(\261)S 1086(compare)S 1487(revisions)S 2304 V 10 I 970(Rcsdiff)S 10 R 1289(compares)S 1712(two)S 1903(revisions)S 2305(and)S 2490(prints)S 2759(their)S 2983(di)S 3061 H (f)show 10 -.5 mul h (f)show 10 R 3122(erence,)S 3447(using)S 3705(the)S 3868(UNIX)S 4158(tool)S 10 I 4355(diff)S 10 R 4489(.)S 4585(One)S 4793(of)S 4918(the)S 2424 V 970(revisions)S 1361(compared)S 1784(may)S 1986(be)S 2110(checked)S 2466(out.)S 2679(This)S 2887(command)S 3311(is)S 3408(useful)S 3682(for)S 3828(\256nding)S 4142(out)S 4300(about)S 4552(changes.)S 2580 V 10 I 720(rcsfreeze)S 10 B 1110(\261)S 1190(freeze)S 1473(a)S 1553(con\256guration)S 2700 V 10 I 970(Rcsfreeze)S 10 R 1394(assigns)S 1726(the)S 1891(same)S 2139(symbolic)S 2549(revision)S 2914(number)S 3262(to)S 3383(a)S 3470(given)S 3735(revision)S 4100(in)S 4221(all)S 4364(RCS)S 4597(\256les.)S 4862(This)S 2820 V 970(command)S 1394(is)S 1491(useful)S 1765(for)S 1911(accurately)S 2350(recording)S 2762(a)S 2836(con\256guration.*)S 2976 V 10 I 720(rcsmerge)S 10 B 1121(\261)S 1201(merge)S 1496(revisions)S 3096 V 10 I 970(Rcsmerge)S 10 R 1400(merges)S 1725(two)S 1912(revisions,)S 10 I 2335(rev1)S 10 R 2549(and)S 10 I 2730(rev2)S 10 R 2907(,)S 2969(with)S 3184(respect)S 3504(to)S 3620(a)S 3702(common)S 4090(ancestor.)S 4515(A)S 4625(3-way)S 4912(\256le)S 3216 V 970(comparison)S 1472(determines)S 1946(the)S 2104(segments)S 2512(of)S 2631(lines)S 2856(that)S 3042(are)S 3199(\(a\))S 3345(the)S 3503(same)S 3744(in)S 3858(all)S 3994(three)S 4228(revisions,)S 4649(or)S 4767(\(b\))S 4918(the)S 3336 V 970(same)S 1216(in)S 1336(2)S 1428(revisions,)S 1856(or)S 1981(\(c\))S 2133(di)S 2211 H (f)show 10 -.5 mul h (f)show 10 R 2272(erent)S 2513(in)S 2633(all)S 2775(three.)S 3071(For)S 3252(all)S 3394(segments)S 3808(of)S 3933(type)S 4147(\(b\))S 4305(where)S 10 I 4590(rev1)S 10 R 4809(is)S 4918(the)S 3456 V 970(di)S 1048 H (f)show 10 -.5 mul h (f)show 10 R 1109(ering)S 1350(revision,)S 1733(the)S 1891(segment)S 2260(in)S 10 I 2374(rev1)S 10 R 2587(replaces)S 2949(the)S 3107(corresponding)S 3713(segment)S 4081(of)S 10 I 4199(rev2)S 10 R 4376(.)S 4466(Type)S 4706(\(c\))S 4851(indi-)S 3576 V 970(cates)S 1215(an)S 1355(overlapping)S 1878(change,)S 2231(is)S 2344(\257agged)S 2684(as)S 2813(an)S 2953(error,)S 3217(and)S 3408(requires)S 3776(user)S 3989(intervention)S 4519(to)S 4644(select)S 4918(the)S 3696 V 970(correct)S 1276(alternative.)S 3852 V 10 I 720(rlog)S 10 B 917(\261)S 997(read)S 1221(log)S 1379(messages)S 3972 V 10 I 970(Rlog)S 10 R 1189(prints)S 1447(the)S 1599(log)S 1757(messages)S 2164(and)S 2338(other)S 2573(information)S 3075(in)S 3183(an)S 3307(RCS)S 3527(\256le.)S 6962 V 8 Y1 720(333333333333333333)S 7080 V 8 R 820(*)S 900(The)S 8 I 1048(rcsclean)S 8 R 1341(and)S 8 I 1480(rcsfreeze)S 8 R 1790(commands)S 2159(are)S 2279(optional)S 2564(and)S 2703(are)S 2823(not)S 2949(always)S 3194(installed.)S 7920 V EP %%Page: 19 20 BP /slant 0 def /height 1.000000 def 8 R 8 R 40 V 10 R 0(-)S 520 V 2767(- 19 -)S 840 V 10 B 720(References)S 1032 V 10 R 720(1.)S 970(Feldman,)S 1378(Stuart)S 1650(I.,)S 1766(``Make\320A)S 2264(Program)S 2642(for)S 2792(Maintaining)S 3315(Computer)S 3749(Programs,'')S 10 I 4257(Software\320Practice)S 1152 V 970(&)S 1078(Experience)S 10 R 1526(,)S 1581(vol.)S 1764(9,)S 1869(no.)S 2024(3,)S 2129(pp.)S 2284(255-265,)S 2672(March)S 2962(1979.)S 1308 V 720(2.)S 970(Hunt,)S 1229(James)S 1507(W.)S 1660(and)S 1838(McIlroy,)S 2224(M.)S 2372(D.,)S 2528(``An)S 2750(Algorithm)S 3201(for)S 3351(Di)S 3451 H (f)show 10 -.5 mul h (f)show 10 R 3512(erential)S 3846(File)S 4037(Comparison,'')S 4652(41,)S 4812(Com-)S 1428 V 970(puting)S 1256(Science)S 1596(Technical)S 2019(Report,)S 2346(Bell)S 2543(Laboratories,)S 3102(June)S 3315(1976.)S 1584 V 720(3.)S 970(Rochkind,)S 1414(Marc)S 1654(J.,)S 1773(``The)S 2024(Source)S 2331(Code)S 2572(Control)S 2908(System,'')S 10 I 3324(IEEE)S 3570(Transactions)S 4123(on)S 4254(Software)S 4641(Engineer-)S 1704 V 970(ing)S 10 R 1098(,)S 1153(vol.)S 1336(SE-1,)S 1591(no.)S 1746(4,)S 1851(pp.)S 2006(364-370,)S 2394(Dec.)S 2609(1975.)S 1860 V 720(4.)S 970(Tichy,)S 1275(Walter)S 1593(F.,)S 1746(``Design,)S 2168(Implementation,)S 2874(and)S 3066(Evaluation)S 3547(of)S 3678(a)S 3770(Revision)S 4174(Control)S 4528(System,'')S 4962(in)S 1980 V 10 I 970(Proceedings)S 1503(of)S 1615(the)S 1771(6th)S 1933(International)S 2495(Conference)S 2989(on)S 3123(Software)S 3512(Engineering)S 10 R 4006(,)S 4064(pp.)S 4222(58-67,)S 4513(ACM,)S 4799(IEEE,)S 2100 V 970(IPS,)S 1170(NBS,)S 1420(September)S 1877(1982.)S 2256 V 720(5.)S 970(Leblang,)S 1357(David)S 1636(B.)S 1763(and)S 1942(Chase,)S 2247(Robert)S 2555(P.,)S 2697(``Computer-Aided)S 3476(Software)S 3872(Engineering)S 4396(in)S 4510(a)S 4590(Distributed)S 2376 V 970(Workstation)S 1505(Environment,'')S 10 I 2159(SIGPLAN)S 2600(Notices)S 10 R 2900(,)S 2966(vol.)S 3160(19,)S 3325(no.)S 3490(5,)S 3605(pp.)S 3770(104-112,)S 4168(May)S 4391(1984.)S 4686(Proceed-)S 2496 V 970(ings)S 1184(of)S 1314(the)S 1484(ACM)S 1760(SIGSOFT/SIGPLAN)S 2664(Software)S 3072(Engineering)S 3608(Symposium)S 4135(on)S 4283(Practical)S 4680(Software)S 2616 V 970(Development)S 1538(Environments.)S 2772 V 720(6.)S 970(Glasser,)S 1325(Alan)S 1551(L.,)S 1694(``The)S 1947(Evolution)S 2374(of)S 2489(a)S 2565(Source)S 2874(Code)S 3117(Control)S 3455(System,'')S 10 I 3873(Software)S 4261(Engineering)S 4787(Notes)S 10 R 5015(,)S 2892 V 970(vol.)S 1180(3,)S 1312(no.)S 1494(5,)S 1626(pp.)S 1808(122-125,)S 2223(Nov.)S 2477(1978.)S 2789(Proceedings)S 3334(of)S 3474(the)S 3653(Software)S 4069(Quality)S 4425(and)S 4625(Assurance)S 3012 V 970(Workshop.)S 3168 V 720(7.)S 970(Brown,)S 1297(H.B.,)S 1541(``The)S 1792(Clear/Caster)S 2321(System,'')S 10 I 2737(Nato)S 2962(Conference)S 3452(on)S 3582(Software)S 3968(Engineering,)S 4517(Rome)S 10 R 4744(,)S 4799(1970.)S 3324 V 720(8.)S 970(Habermann,)S 1493(A.)S 1623(Nico,)S 10 I 1875(A)S 1969(Software)S 2358(Development)S 2918(Control)S 3264(System,)S 10 R 3600(Technical)S 4027(Report,)S 4358(Carnegie-Mellon)S 3444 V 970(University,)S 1447(Department)S 1948(of)S 2061(Computer)S 2491(Science,)S 2856(Jan.)S 3044(1979.)S 3600 V 720(9.)S 970(DEC,)S 10 I 1258(Code)S 1532(Management)S 2116(System,)S 10 R 2481(Digital)S 2823(Equipment)S 3326(Corporation,)S 3898(1982.)S 4217(Document)S 4697(No. EA-)S 3720 V 970(23134-82)S 3876 V 720(10.)S 970(Lampson,)S 1437(Butler)S 1757(W.)S 1946(and)S 2160(Schmidt,)S 2589(Eric)S 2825(E.,)S 3006(``Practical)S 3491(Use)S 3717(of)S 3871(a)S 3986(Polymorphic)S 4574(Applicative)S 3996 V 970(Language,'')S 1491(in)S 10 I 1606(Proceedings)S 2142(of)S 2257(the)S 2416(10th)S 2630(Symposium)S 3121(on)S 3257(Principles)S 3704(of)S 3818(Programming)S 4415(Languages)S 10 R 4854(,)S 4915(pp.)S 4116 V 970(237-255,)S 1358(ACM,)S 1641(January)S 1981(1983.)S 4272 V 720(11.)S 970(Tichy,)S 1260(Walter)S 1563(F.,)S 1701(``A)S 1871(Data)S 2091(Model)S 2385(for)S 2534(Programming)S 3117(Support)S 3467(Environments)S 4061(and)S 4238(its)S 4366(Application,'')S 4962(in)S 4392 V 10 I 970(Automated)S 1438(Tools)S 1696(for)S 1848(Information)S 2361(System)S 2673(Design)S 2991(and)S 3176(Development)S 10 R 3702(,)S 3761(ed.)S 3914(Hans-Jochen)S 4463(Schneider)S 4896(and)S 4512 V 970(Anthony)S 1350(I.)S 1438(Wasserman,)S 1958(North-Holland)S 2576(Publishing)S 3035(Company,)S 3479(Amsterdam,)S 4000(1982.)S 4668 V 720(12.)S 970(Heckel,)S 1328(Paul,)S 1582(``A)S 1771(Technique)S 2243(for)S 2410(Isolating)S 2811(Di)S 2911 H (f)show 10 -.5 mul h (f)show 10 R 2972(erences)S 3321(Between)S 3721(Files,'')S 10 I 4058(Communications)S 4788(of)S 4918(the)S 4788 V 970(ACM)S 10 R 1181(,)S 1236(vol.)S 1419(21,)S 1574(no.)S 1729(4,)S 1834(pp.)S 1989(264-268,)S 2377(April)S 2618(1978.)S 4944 V 720(13.)S 970(Tichy,)S 1270(Walter)S 1583(F.,)S 1731(``The)S 1994(String-to-String)S 2670(Correction)S 3139(Problem)S 3520(with)S 3740(Block)S 4021(Moves,'')S 10 I 4426(ACM)S 4679(Transac-)S 5064 V 970(tions)S 1195(on)S 1325(Computer)S 1755(Systems)S 10 R 2071(,)S 2126(vol.)S 2309(2,)S 2414(no.)S 2569(4,)S 2674(pp.)S 2829(309-321,)S 3217(Nov.)S 3444(1984.)S 7950 V 0(-)S 7950 V EP %%Trailer %%DocumentFonts: Courier Times-Roman Times-Bold Times-Italic Symbol Troff %%Pages: 20 ./usr/src/rcs/rcs56A.Dist 700 0 0 1045 5316132400 13614 0ustar rootsystem#!/bin/sh # Create binary distribution in rcs56A.taz cd /usr/bin chmod a+rx ci co ident merge rcs* rlog cd /usr/man/man1 chmod a+r ci.1 co.1 ident.1 merge.1 rcs*.1 rlog.1 cd /usr/man/man5 chmod a+r rcsfile.5 cd / gtar zcvf /dist/rcs56A.taz ./usr/bin/ci ./usr/bin/co ./usr/bin/ident \ ./usr/bin/merge ./usr/bin/rcs* ./usr/bin/rlog ./usr/man/man1/ci.1 \ ./usr/man/man1/co.1 ./usr/man/man1/ident.1 ./usr/man/man1/merge.1 \ ./usr/man/man1/rcs*.1 ./usr/man/man1/rlog.1 ./usr/man/man5/rcsfile.5 \ ./usr/src/rcs/C* ./usr/src/rcs/R* ./usr/src/rcs/rcs* ./usr/src/rcs/rcs56A.Notes 600 0 0 7020 5316124222 14002 0ustar rootsystemGNU rcs 5.6 Binaries for Linux prepared by faith@cs.unc.edu, Wed Dec 23 17:34:19 1992 Compiled with gcc 2.2.2d7 (-O6) Linked with jump-4.1 libraries (-s), but tested with jump-4.2 libraries To install from Linux binary distribution: 1) Get binary distribution (rcs56A.taz) from ftp.cs.unc.edu:/pub/faith/linux/utils or from tsx-11.mit.edu:/pub/linux/binaries/FSF 2) cd / 3) gtar zpxvf rcs56A.taz Alternatively, the SLS sysinstall program can be used. To uninstall this binary distribution, do the following: cd /usr/src/rcs ./rcs56A.Unins To install from source: 1) Get source from: prep.ai.mit.edu:/pub/gnu/rcs-5.6.tar.Z 2) Untar rcs-5.6.tar.Z in /usr/src 3) cd rcs 4) patch -p1 < rcs56A.Notes [no editing needed!] 6) make 7) make install The following are diffs against the FSF source distribution: diff -rc rcs.old/src/Makefile rcs/src/Makefile *** rcs.old/src/Makefile Fri Nov 22 15:24:25 1991 --- rcs/src/Makefile Wed Dec 23 17:32:29 1992 *************** *** 35,41 **** CC = cc #CC = bsdcc -qlanglvl=ansi# AIX #CC = cc -g# debug ! #CC = gcc -g# GCC CC_D = --- 35,41 ---- CC = cc #CC = bsdcc -qlanglvl=ansi# AIX #CC = cc -g# debug ! CC = gcc # GCC CC_D = *************** *** 42,51 **** CC_O = -O #CC_O =# debug #CC_O = -O -R# BSD compilers that do not support `const' ! #CC_O = -O -fdelayed-branch -finline-functions -fomit-frame-pointer -fstrength-reduce# GCC options for brave souls CC_W = ! #CC_W = -Wall -Wcast-qual -Wpointer-arith -Wshadow -Wwrite-strings# GCC CFLAGS = $(CC_D) $(CC_O) $(CC_W) --- 42,51 ---- CC_O = -O #CC_O =# debug #CC_O = -O -R# BSD compilers that do not support `const' ! CC_O = -O6 -finline-functions -fomit-frame-pointer -fstrength-reduce# GCC options for brave souls CC_W = ! CC_W = -Wall -Wcast-qual -Wpointer-arith -Wshadow -Wwrite-strings# GCC CFLAGS = $(CC_D) $(CC_O) $(CC_W) *************** *** 57,63 **** DIFFPREFIX = /usr/local/gnu/# GNU diff -- must be version 1.15 or later #DIFFPREFIX = /bin/# traditional diff ! #DIFFPREFIX = /usr/bin/# traditional diff (alternate name) DIFF_FLAGS = -an# GNU diff #DIFF_FLAGS = -n# traditional diff --- 57,63 ---- DIFFPREFIX = /usr/local/gnu/# GNU diff -- must be version 1.15 or later #DIFFPREFIX = /bin/# traditional diff ! DIFFPREFIX = /usr/bin/# traditional diff (alternate name) DIFF_FLAGS = -an# GNU diff #DIFF_FLAGS = -n# traditional diff *************** *** 73,79 **** #DIFF_TROUBLE = (EXIT_FAILURE*2) DIFF3 = $(DIFF)3# GNU diff3 ! #DIFF3 = /usr/lib/diff3# traditional diff3 #DIFF3 = /usr/5lib/diff3prog# other aliases for traditional diff3 #DIFF3 = /usr/lib/diff3prog #DIFF3 = /usr/lib/rdiff3 --- 73,79 ---- #DIFF_TROUBLE = (EXIT_FAILURE*2) DIFF3 = $(DIFF)3# GNU diff3 ! DIFF3 = /usr/bin/diff3# traditional diff3 #DIFF3 = /usr/5lib/diff3prog# other aliases for traditional diff3 #DIFF3 = /usr/lib/diff3prog #DIFF3 = /usr/lib/rdiff3 *************** *** 88,94 **** INSTALL = install -c $(EXECUTABLE_PERMISSIONS)# BSD unix installation ! #INSTALL = cp# traditional Unix installation ! LDFLAGS = LDLIBS = --- 88,94 ---- INSTALL = install -c $(EXECUTABLE_PERMISSIONS)# BSD unix installation ! INSTALL = cp# traditional Unix installation ! LDFLAGS =-s LDLIBS = *************** *** 103,109 **** RCSDIR = /usr/local/bin #RCSDIR = /bin ! #RCSDIR = /usr/bin RCSPREFIX = $(RCSDIR)/ #RCSPREFIX = --- 103,109 ---- RCSDIR = /usr/local/bin #RCSDIR = /bin ! RCSDIR = /usr/bin RCSPREFIX = $(RCSDIR)/ #RCSPREFIX = ./usr/src/rcs/rcs56A.Unins 700 0 0 306 5316132377 14001 0ustar rootsystem#!/bin/sh # Uninstall the rcs56A binary distribution cd /usr/man/man1 rm -f ci.1 co.1 ident.1 merge.1 rcs*.1 rlog.1 cd /usr/man/man5 rm -f rcsfile.5 cd /usr/bin rm -f ci co ident merge rcs* rlog ./usr/src/rcs/rcs_func.ms 444 156 3 7143 5113220535 12510 0ustar mem.SH Functions of RCS (Revision Control System) .PP RCS manages software libraries. It greatly increases programmer productivity by providing the following functions. .IP 1. RCS stores and retrieves multiple revisions of program and other text. Thus, one can maintain one or more releases while developing the next release, with a minimum of space overhead. Changes no longer destroy the original -- previous revisions remain accessible. .RS .IP a. Maintains each module as a tree of revisions. .IP b. Project libraries can be organized centrally, decentralized, or any way you like. .IP c. RCS works for any type of text: programs, documentation, memos, papers, graphics, VLSI layouts, form letters, etc. .RE .IP 2. RCS maintains a complete history of changes. Thus, one can find out what happened to a module easily and quickly, without having to compare source listings or having to track down colleagues. .RS .IP a. RCS performs automatic record keeping. .IP b. RCS logs all changes automatically. .IP c. RCS guarantees project continuity. .RE .IP 3. RCS manages multiple lines of development. .IP 4. RCS can merge multiple lines of development. Thus, when several parallel lines of development must be consolidated into one line, the merging of changes is automatic. .IP 5. RCS flags coding conflicts. If two or more lines of development modify the same section of code, RCS can alert programmers about overlapping changes. .IP 6. RCS resolves access conflicts. When two or more programmers wish to modify the same revision, RCS alerts the programmers and makes sure that one modification won't wipe out the other one. .IP 7. RCS provides high-level retrieval functions. Revisions can be retrieved according to ranges of revision numbers, symbolic names, dates, authors, and states. .IP 8. RCS provides release and configuration control. Revisions can be marked as released, stable, experimental, etc. Configurations of modules can be described simply and directly. .IP 9. RCS performs automatic identification of modules with name, revision number, creation time, author, etc. Thus, it is always possible to determine which revisions of which modules make up a given configuration. .IP 10. Provides high-level management visibility. Thus, it is easy to track the status of a software project. .RS .IP a. RCS provides a complete change history. .IP b. RCS records who did what when to which revision of which module. .RE .IP 11. RCS is fully compatible with existing software development tools. RCS is unobtrusive -- its interface to the file system is such that all your existing software tools can be used as before. .IP 12. RCS' basic user interface is extremely simple. The novice need to learn only two commands. Its more sophisticated features have been tuned towards advanced software development environments and the experienced software professional. .IP 13. RCS simplifies software distribution if customers maintain sources with RCS also. This technique assures proper identification of versions and configurations, and tracking of customer modifications. Customer modifications can be merged into distributed versions locally or by the development group. .IP 14. RCS needs little extra space for the revisions (only the differences). If intermediate revisions are deleted, the corresponding differences are compressed into the shortest possible form. .IP 15. RCS is implemented with reverse deltas. This means that the latest revision, which is the one that is accessed most often, is stored intact. All others are regenerated from the latest one by applying reverse deltas (backward differences). This results in fast access time for the revision needed most often.