~4 N(g(gAAAA@ANANANANjB8LBB BB?!+=`/P    PR@dSpecification for Program Name: Meta-X Refind File, Meta-X Refind All Files, Meta-X Refind All Files Without Query, Meta-X Refind All Files For Specified Buffers, Meta-X Refind All Files For Specified Buffers Without Query, Meta-X Revert Buffer If Needed Meta-X Revert All Buffers Meta-X Revert All Buffers If Needed Date: 9/15/88 Programmer: Saz Est. Work: 1-2 days Project status: Under review Purpose: These programs are intended to serve as a mechanism for preventing corruption of development files, in cases where developers are forced to read in and save out shared files between cold boots. Currently, Keith Corbett and William Foster are involved with development efforts requiring such a tool, for the Lambda and Falcon source files, respectively. Description: Meta-X Refind File The behavior of Refind File is similar to that of Revert Buffer, in that it is used to ensure a user that a given ZMacs buffer or set of buffers is consistent with the file system. The current buffer is used to contain the results of this command. The new commands differ from Revert Buffer when changes have been made to the current buffer; in this case, the user is presented with options, including replacing the buffer's contents with the contents of the most recent file version, or performing a regular Source Compare Merge. Meta-X Refind All Files Refind All Files performs the operation of Refind File on each file-associated buffer that has been read into the machine, prompting the user for a decision for each :NEWEST buffer that has been modified since it was read in. In this mode, all file-associated buffers without the :NEWEST version designation are simply reverted. Meta-X Refind All Files Without Query Refind All Files Without Query performs the same function as Refind All Files, with a specified behavior replacing the querying behavior of Refind All Files. Hence, the user can use Refind All Files Without Query to perform a Source Compare Merge each time a modified buffer is encountered. Alternatively, the user may specify that all modifications be discarded, with all files being Refound with the same pathname designations with which they were read in. Meta-X Refind All Files For Specified Buffers Meta-X Refind All Files For Specified Buffers Without Query Refind All Files For Specified Buffers and Refind All Files For Specified Buffers Without Query present the user with the opportunity to select a subset of the current buffers on which to perform the Refind File operation. The choices of subset are: % All file-associated buffers that have been read in for a (specified) tag table; % All buffers that have been read in and which are associated with a system; % All buffers that have been read in from a given directory; % All file-associated buffers that have been modified; % All file-associated buffers that have not been modified; % Any subset of the buffers that have been read in (as specified via menu). To clarify further, Refind All Files For Specified Buffers Without Query is to Refind All Files For Specified Buffers as Refind All Files Without Query is to Refind All Files. Meta-XRevert All Buffers If Necessary Revert All Buffers If Necessary performs the operation of Revert Buffer on each buffer for which a :revert-buffer operation is defined (this includes file-associated buffers and Dired buffers) and for which the results of a buffer reversion would produce results different from the current buffer contents. This includes all cases in which modifications exist in a file-associated buffer, a newer version of a file exists for a buffer with the :NEWEST version attribute, and all Dired buffers (since deciding "if necessary" in this case would take just as long as actually reverting the Dired buffer). No querying occurs in these cases, and, in case any buffer modifications exist, they are discarded. Functionality: Presented below are tables defining the behavior of the basic modules of this specification. Commands not outlined in this section are trivial extensions, as described in the previous section. Meta-X Refind File Specification Modified? More recent Action Observed: of pathname (">" version or used to read more recently in current written) version buffer's available when contents: Meta-X Refind File is executed? FILE1.LISP#> YES YES User given choice to: discard changes and read in most recent (the new ">" version) of FILE1.LISP into buffer, do a Source Compare Merge into current buffer or a separate buffer, or nothing. FILE1.LISP#> NO YES Newest version of FILE1.LISP#> read into current buffer FILE1.LISP#> YES NO User informed of disk status, asked whether to Revert Buffer, do a Source Compare Merge with version read in, or nothing FILE1.LISP#> NO NO None FILE2.LISP#43 NO DC User informed of disk status, asked whether to Revert Buffer to contain original contents of FILE2.LISP#43, or of most recent (">") version of FILE2.LISP found on disk, changing buffer name accordingly. Meta-X Refind File, continued Specification Modified? More recent Action Observed: of pathname (">" version or used to read more recently in current written) version buffer's available when contents: Meta-X Refind File is executed? FILE2.LISP#43 YES DC User informed of disk status, queried as to whether to write file out to a user-specified pathname, then queried whether to revert buffer contents to FILE2.LISP or do nothing Meta-X Refind File Without Query Mode: SAFE Specification Modified? More recent Action Observed: of pathname version of current used to read buffer's associated in current pathname available buffer's on disk at the time contents: Meta-X Refind File Without Query is executed? DC YES YES Newest version of associated pathname named "xxx" read into a newly created buffer named "NEWER-xxx" DC NO YES Newest version of associated pathname read into current buffer DC DC NO None Meta-X Refind File Without Query Mode: DISCARD-CHANGES Specification Modified? More recent Action Observed: of pathname version of current used to read buffer's associated in current pathname available buffer's on disk at the time contents: Meta-X Refind File Without Query is executed? DC DC YES Newest version of associated pathname read into current buffer DC DC NO None For Meta-X Revert Buffer If Necessary Specification Modified? More recent Action Observed: of pathname version of current used to read buffer's associated in current pathname available buffer's on disk at the time contents: Meta-X Revert Buffer If Necessary is executed? DC NO NO None DC YES DC Same as Meta-X Revert Buffer Related work: In order to fully protect against file branching in a parallel development setting, it is also necessary to ensure that a user is really modifying the most recent version of a front-line file as he begins working after an extended time away from a machine. There is code which marks a previously unmodified buffer as modified ; this code could also be made to include a version of Meta-X Refind File which would check if the user was actually typing in a buffer whose contents truly represent the latest contents of the intended file (numeric version, latest version, whatever). If not, a warning could be displayed indicating the discrepancy; the user could be instructed to execute the Meta-X Refind File command at that time, if file system consistency is to be maintained. Meta-X Revert All Buffers <}}}}}}}}fgEGLVagr| !"$*:E}}}}}}}}}}{}@E\iAO*>@[k'LNl Zj$}}}}{}}}{}}}}@$1E  M O 3 6 l T ` 0 2 F {  ( + J P b d}}{}{}}}}}}}}}@ d + E SNr6IKy8:+-7:_a}{{{{u{uo{u{u{uou{@a4B M N P R T V p+g+h+{++!+=+I+Mywuwuwyyywuouwwww@@6Px(f!FGUVfg{| ){wwwwwwwwwwwwwwwwwwsww    )@AZ%&M      N  ] , l % b 0{wwsww{wwwwwwowwwwwww         0 1 b c LNOPQRSTUVWXYZ[\{w{pl{{{{{{{{{{{{{{{       \]^_`abcd56IJ"Dd6{{{{{{{{w{j{fffffff        67]^>? 5PoKabcd{r{n{jf{{{f{{b{{{{            defg=^ >Zrs  {{{nj{{{{{{{{_{          -89p8Y{2BCrXrea]]]]]]]]]WL               XYklmnopqrst+,ttttttiiiii\OK              ,c+Ln&67456]_`:{{{{{{{{{w{{{{j{f{{        :_"=Wjk}~34 N O P Q R S T{{{{{{{r{n{jdd````          zTitle of ProgramProgram Title Bar"English Description" headEnglish Description body Entry StyleSpecification EntrySpecification BodySpecification EntriesAlgorithm EntryAlgorithm StyleAlgorithm BodyIndented Algorithm BodyM$$$b    @z` f @z` fxxT xxT xx  fT (@+ & T X (x"h8 X#(%x ` < xx/T< X t,Hd8Tp! #(``````````````i dTp! #(T<p $ X @ t ( \Dx,`H|0dL4hP8l`````````````````````````````stv^   Revert All Buffers is a simple extension to Revert Buffer, traversing all buffers in the current *ZMACS-BUFFER-LIST* and sending each a :revert-buffer message. Revert Buffer ededBufferededa , if it hasdefined all all ,if such fferent from the current buffer's a) b) c) itselfor confirmation (outside of the mini-buffer for specifying the buffer to Revert) for this command edededed If NeededRevert Buffer If Needed would have had an effect of existing commands or of those presented here (see "Description" section)ededfor ...+M+\,, ,,,!,%,',2,:,;,?,C,D,G,L,n,q,t,w,~,,}}{{{}}}}}}}}}}}}}}}}@,,9,=,D,O,S,_,`,d,h,r- -"-N-X-Y-d-n-r-y//!}}}}}}{{}}}}}}uo@@ T U p,/"//0{12!5\5]55152666o6p{{{{{{{wwswi_i_i_i   $v\   $v\      Meta-X Revert All Buffers in ... acs buffer or set of buffers becomes in two ways: 1) when a more recent version of the filename (as it was originally between the modified buffer and the most recent version found on disk. buffer that has been modified, and reading in the newest versions of each non-modified file-associated buffer (for which a more recent version exists.) /!/"/G/W/X/^///;/b0R0\0^0j0r0z0{111)12131D1T}}}}}}}}}}}}}}}w}}@ Meta-X Revert Buffer (Numeric Argument Extension)Being Implementedin two ways: 1] exists the more recent version may be read in, as opposed to only the version read in), and 2] when modifications have been made to the current buffer (the user is queried as to how to proceed in most cases). See the "Functionality" section for precise operational details. querying as to how to proceed requiring such directives. A numeric argument extension toprovides the user with an automatic version for which certain default actions are taken in those cases where Refind All Files would ordinarily have queried the user as to how to proceed. See the "Functionality" section entitled, "Numeric Argument Extension to Meta-X Refind All Files". The following six commands represent extensions to the Refind All Files command. These commands provide the user with varying mechanisms for specifying the buffers on which to execute the Refind File command. For each command in this section, a numeric argument variant performs the default operations on the same subset of buffers, without querying the user before proceeding. Meta-X Refind All Files For Tag Table Refind All Files with already been read in Meta-X Refind All Files For System Buffers Refind All Files with associated already (specified) Meta-X Refind All Files For Directory Refind Files with associated buffers that already Meta-X Refind All Modified Files Refind Fs with that since they were read in Meta-X Refind All Unmodified Files Refind AFs with that not since they were read in Meta-X Refind All Files For Specified Buffers Refind All Files for a menu-specified already been read in. Meta-X Revert Buffer (Numeric Argument Extension) With a numeric argument, Revert Buffer now checks to see if a newer version of the file associated with the specified buffer exists on disk, doing nothing if not, and reading the new file into the current buffer if so. Executing the command a a specified doing such a revert alter :NEWEST on disk, and needed confirmation once the user has specified the buffer to Revert in the mini-buffer); any to the current buffer , as with Revert BufferNAcurrent accordingly, or nothing exists? Action YES NA (default being the same pathname)contents to FILE2.LISP#43, NANANA NA NA(All other cases) developmentdesirable actually development (newest source) of the point at which he working, possibly absence the machine. The a version of Meta-X Refind File, in the background as to whether representative of version's contents. "Latest" in this sense could be determined by with most recent write date, . discrepancy were to be found, , thus ensuring both that developmental modifications take place only in the intended places and that no two programmers cause a "fork" to occur in the file system. 1T1[1)121K1m222%2I2d2g2p22 2!252A3333M3]3^3_}}}}}}}}}}}}}}}}}}}}}}}}3_3`4A4I4R4n44 4(4}555&5/5[5]5^5b5555 5 5}{{{{{{{{{{{{{}}}}{{@555555#505253575U5]5^5n5666666;6<6C6H}}}}}}{{{}}}}}}}}}@6H6f6n6p6q666666!6&6-6>6?6@6c6d6l6m6n6t6y6}6~}}}}}}}}}}}}}}}}}}6~7777D7E7F7V7]7a7l7777777,7576787Q7^8}}}}}}}}}}{{}}@88$8<8C8g8888*8,888>8E8L8R8Z8g8m8{8|99?9B9F9\}}}}}}}}}}}}}}}}}}}}}}9\9s9u9}999%949<9F9N9]9e9m9n::::::%:*:,:-}wwwwwwwwwwwwwwwwwwwwww:-:=:>:J:T:]:y::&:.:<:@:a;;;;%;(;);*;1;V;t;wyywwwwwwwwwwwwwwwwwwwww;w;;%;/;q;~<<<&<-<9}}}}}}}}}} 6p6?6c77E77788::&:':(:):*uuuuqqmqi^^^^^           $v\!, #]b!,@E$ da+M,/!1T3_56H6~89\:-;w<9BCDEF[\ayz{|}~) 0\6d X,: T6p:*GHIJKLMNOP] $v\ $v\    Qip"#_HY_%&,PWX&/Hj}"Fade{ "*2MNOcoFY\  ! 0_bj?G^hq   $ E F G N O R S W X ] z   + - . 2 P X Y Z j {  " B N U V W X } ~   - 2 : G _ a b         - 2 D K \ ^ _ `        - 2 7 ; H I ` b c d    # * . 9 Y o p q    # $ & r  * 1 U    1 J W s >?EFTY]_u| )5;FIQijy}+,-0?ELSY_t #TWlt 6<  "07;GHIi !7D[`fg!ISm"#Lx-/ /HPWZ]z| /1?GT^fu}Fjmux$%/1P\]_DJY^`bc}"$%56_`#+7DNgp3;TZn [at'Gp "#$+Pah      4   ! c p! !!!!+!,y-r111)12e/!/!F13/">1D/W/X/^1T/1[1)121K1m222%2I2d/@2g`2px/b20z2 2!25-2A3333M3]3^    3_ 4A 4I 4R 4n 4 4 4(4}555&5/5[5]5^5b5555 5 5555 55# @505253575U \5]5^5n e5 w 6 $6666 +6;6< 06C6H A6f F S6n6p6q k 6 6  p 6  u 6 6  y 6!   6& 6-  # 6> 6? 6@ 6c 6d  q 6l  u 6m 6n  y 6t   6y   6} 6~  #7777D7E7F7V7]7a j7l /777777,75767888$8<8C8g88 U+g+{++!+=+I+M+\ b d,,  }, 8 , ,! *8* E8, [,' k,2 n,:,;!,?=,CK ,DZ888>8E|8L,Y4,n`,q8R&8Z,th8g,wd,~8mt,O,S8{ , 8| 99?9B#9F=9\J  d ,_  j ,`  ,d  * ,h  R ,r JPd-"-N-X-Y-d3HJ9s59u)9}99`dg9%;r949<9F9N9]9e9m29nu:x  N :9 : Feq:t:_:%nr6;-n\_`:*m:,:-:=  S3x:>:J+:TK:]}:y::&4:.:<N!:@T:ai;1;;;%;(;);*;1[s;V|;t  ;w I;;%;/;q;~<<<&<- M