!* -*-TECO-*-! !* BUFED.EMACS.36, 7-Dec-81 11:49:33, Edit by GERGELY! !~Filename~:! !Edit a list of all active Buffers in recursive ^R.! BUFED !:! !C Major entry point is BUFED.! F:M(M.M BUFED) !* [PJG] To help the autoloading! !Bufed:! !C Display information about all buffers. A recursive ^R is entered on a list of all buffers. On exit the buffer on the current line is selected. Point is initially on line of current buffer and space is bound to exit ^R mode, so this is very much like MM List Buffers. Symbols preceding the buffer number are: D - Buffer has been marked for deletion. F - Buffer can be changed, but the file is readonly. R - Both buffer and the file are readonly. * - Buffer has been modified (or so marked). The following are the commands available: D - Mark Buffers for Deletion on exit. E - Examine (View) Buffer. M - Toggle Buffer's Modified Flag. Q - Quit, delete buffers marked, select buffer on current line. R - Toggle Buffer's Read only Flag (- Arg. = File read only, 0 = Not read only + Arg. = Buffer and File Read Only). S - Save Buffer's File. U - Undelete Buffers, Remove deletion marker. W - Write Buffer's File. ? - Type out this message. Space - Same as Q RubOut - Backward undelete Buffers. ! [9 FN fsQPPtr[8 !* 8: point to unwind before! !* selecting a different buffer! [0[1[2[3[4[5[6[7[.6 !* save regs! f[BBind !* get us a buffer! i_____Buffers_in_this_ gEditor_Name i _____#_Buffer____(Mode)_________Filename i  QNext_Bfr_Number+1*5 FS Q Vector u9 !* 9: State table! 2u7 !* 7: line count! 0u4 fq.b/5u5 !* 4: .B index, 5: stopping point! < q4-q5; !* Go thru buffer table; stop at end! q:.b(q4+4!*bufbuf!)[..o !* [PJG] make the buffer current so can! !* check modified, readonly, etc.! Q:.B(Q4+12!*bufnwr!)U1 !* [PJG] Check if read only! fsModifiedu2 !* 2: nonzero if modified! fsZu3 !* 3: no. of characters in buffer! ]..o !*back to listing buffer! .u0 !* 0: start address of this line! q:.b(q4+7!*bufnum!)u6 1u:9(q6) !* [PJG] 6: buffer index! q2"n i* q:9(q6)2 u:9(q6)' !* indicate if modified! "# i_' q1 f"n "L IF' !* [PJG] -: Buffer can be changed, but not! !* the file! "# iR' !* [PJG] Both cannot be changed! q:9(q6)4 u:9(q6)' !* indicate if readonly! "# Wi_' 6-(.-q0),q:.b(q4+7!*bufnum!)\ !* [PJG] Type the buffer's number! i_ g:.b(q4+1!*bufnam!) !* [PJG] Type buffer's name,! 17-(.-q0):f"gw 1',32i !* move to column 17! q:.b(q4+3!*bufmod!)u1 !* [PJG] 1: buffer's major mode! qBuffer_Index-q4"e !* if current buffer! qModeu1 q0u.6' !* then use current mode, and save .! i(1) !* Type major mode! 32-(.-q0):f"gw 1',32i !* move to column 32! Q:.B(Q4+2!*bufvis!)U1 Q1"N !* [PJG] Get the visited file if any! G1 !* [PJG] Insert it! ET1 !* [PJG] Set the default! Q:.B(Q4+9!*bufver!)U1 !* [PJG] and actual version number.! FS D VERS:"G FS D VERS+1"N I_( FQ1"L Q1\' "# I1' I)''' "# q3\ i__Characters' !* No filename, type the size! i  %7w !* add CRLF, increment line count! q:.b(q4)+q4u4 !* advance past this buffer! > q.6"n q.6j' !* goto line with current buffer! fsLinesu6 q6"e fsHeight-(fsEchoLines)-1u6' !* 6: current fsLines! q7+2-q6"l q7+2f[Lines' !* set fsLines so that only the amount! !* of screen needed is used, reducing! !* redisplay of rest of buffer.! 0f[Window !* start display at top! 1f[ Read Only !* Don't let him change it! m.m^R_BUFED_Delete[D !* Set up our functions! m.m^R_BUFED_Undelete[U !* ! m.m^R_BUFED_Back_Undelete[ !* ! m.m^R_BUFED_Toggle_Modified[M !* ! m.m^R_BUFED_Toggle_R/O[R !* ! m.m^R_BUFED_Save[S !* ! m.m^R_BUFED_Write[W !* ! m.m^R_BUFED_Examine[E !* ! m.m^R_BUFED_Help[? !* ! 33. FS^R Init [_ !* ! 33. FS^R Init [Q !* ! m.m^R_BUFED_Help f[Help Mac !* ! :i*BUFED[..j !* use reasonable mode line! 0[..F !* dont let user screw himself! !^R!  !* let user see buffer, and move! !* around! 0l @f_*RFDl \u1 !* get buffer number! q:9(q1)&9-1 "N !* If not legal! -1u0 fq9/5 u1 0u2 !* Look for one that is! < %0-q1; !*! q:9(q0)&9-1"E !* If we find one! 1u2 0;'> !* Make note! q2 "N @FG o^R' !* If found, ring bell and try again! @FTDelete_All_Buffers_ !* Else wants to kill everything! 1m(m.m&_Yes_or_No) "E !* Get conformation! o^R' !* No conformation - don't do it! 1,:I*Main m(m.m&_Find_Buffer) u0 !* Look for Main! q0 :"L !* If it exists! :I:.b(q0+1)XMain---XMain' !* Give it a random name! :I*Main m(m.m&_Create_Buffer) !* Make a new main! :@I..n\:IPrevious_BufferMain\ !* ! fq9/5 u1' !* Get it's number,fall through! q1(q8fsQPUnwind)m(m.mSelect_Buffer) !* select one he wants! -1[0 fq9/5 [1 !* Kill the ones he said! < %0-q1; !* Stop at end! q:9(q0)&8 "N !* Marked for delete?! q0 m(m.mKill_Buffer)'> !* Get rid of it! 1 FSMode Change !* Just in case!  !^R BUFED Delete:! !^R Mark Buffer for deletion.! 0 f[Read Only < 0@l @F_*$DJ \[0 !* Get buffer number! q0 "N q:9(q0)8 u:9(q0) !* Mark it! 0@l 2C D ID .-1,. F' 1@l > 0 !^R BUFED Undelete:! !^R Remove Deletion mark.! 0 f[Read Only < 0@l @F_*$DJ \[0 !* Get buffer number! q0 "N q:9(q0)&7 u:9(q0) !* Unmark it! @0l 2C D I_ .-1,.F' 1@l > 0 !^R BUFED Back Undelete:! !^R Upline then undelete.! -1@l F@m(m.m^R_BUFED_Undelete) -1@l 0 !^R BUFED Toggle Modified:! !^R Toggle Modified Flag.! @0l @F_*$DJ \[0 !* Get buffer number! Q0 "N 1,q0m(m.m&_Find_Buffer)[1 !* Get its index! q1 "L ' !* Something wrong here! q:9(q0)&2 "E 1'"# 0'[2 !* Which way we are going! 2*q2(13&q:9(q0)) u:9(q0) !* Set flag! q:.b(q1+4)[..o !* select buffer! q2 fsModified !* Mark it! q2 fsX Modified ]..o !* Back to list buffer! 0 f[Read Only @0l D q2 "E I_'"# I*' .-1,.' 0 !^R BUFED Toggle R/O:! !^R Toggle Read only flag.! @0l @F_*FRDJ \[0 !* Get buffer number! q0 "N 1,q0m(m.m&_Find_Buffer)[1 !* Get its index! q1 "L ' !* Something wrong here! FF"N [2' "#q:9(q0)&4 "E 1'"# 0' [2' !* [PJG] Which way?! q:9(q0)&11(4*(q2)) u:9(q0) !* Set flag! Q2 U:.b(q1+12) !* [PJG] Set the variable in the buffer! 0 f[Read Only @0l C D q2 F"E WI_'"# "L IF' "# IR'' .-1,.' 0 !^R BUFED Save File:! !^R Save the buffer's File.! 0@l @F_*$DJ \[7 !* Get buffer number! q7 "E 0' !* no buffer! FSQP Ptr [8 1,q7m(m.m&_Find_Buffer)[5 !* Get its index! q:.b(q5+4)[..o !* select it! !* The rest mostly stolen from ^R Save File.! FS MODIF"N 1FS X MODIF' !* If want real save,! !* Make FS X MODIF nonzero if we need a real save.! q:.b(q5+2)[0 !* Q0 gets appropriate filenames to save as.! Q0F"E W'F[D FILE FS DD FAST"L !* If disk or other device fast to open,! 1:< ER FS IF CDATE[4 EC !* See if date of existing file matches when we last! Q:.B(Q5+8)[3 !* read or wrote the file.! Q4"N Q3"N Q4-Q3"N !* If not, warn user he may be losing.! :I*A FS ECHO DIS @FT This_file_has_been_changed_on_disk_since_you_last_read_or_wrote_it.  FS X MODIF"N @FT Should_I_write_it_anyway 1M(M.M &_Yes_or_No)"E 0'' "# @FT There_are_no_changes_in_core.__Use_Revert_File_to_read_the_version_off_disk. 0FS ECHO ACT' ''' >' FS X MODIFIED"E !* If don't need to write since no changes,! @FT !* tell the user so.! (No_changes_need_to_be_written) 0FS ECHO ACT' Q0"E @:m(m.m^R_BUFED_Write_File)' FS OS TECO"N !* On Twenex,! fs xjname [j f~jSNDMSG"n !* Unless from cretinous Twenex mail program! 0FS D VERS"N !* always save as new version,! FS D FILEU0 Q0U:.B(Q5+2) !* and permanently clobber visited version to 0.! 1FS MODE CH''' 1,M(M.M Write_File)0 u:.b(q5+8) Q8 FSQP Unwind !* Back to listing buffer! 0 f[Read Only @0l D I_ q:9(q7)&13 u:9(q7) !* No longer modified! .-1,. !^R BUFED Write File:! !^R Write out Buffer.! 0@l @F_*$DJ \[0 !* Get buffer number! Q0 "E 0' !* No such buffer! 1,Q0m(m.m&_Find_Buffer)[1 !* Get its index! Q1 "L 0' !* Something wrong! Q:.b(Q1+2) f[D File !* Default to same name! Q:.b(Q1+4)[..o !* Select it! @m(m.mWrite_File) u:.b(Q1+8) !* Write it out! QBuffer_Index-Q1 "N FSD File u:.b(Q1+2)' !* Change visited filenames! "# FSD File uBuffer_Filenames' !* One way or other! ]..o !* Back to list buffer! 0 f[Read Only 0@l D I_ q:9(q0)&13 u:9(q0) !* Not modified! .-1,.  !^R BUFED Examine:! !^R View Buffer contents! @0l @F_*$DJ \[0 !* Get buffer number! Q0 "E 0' !* No buffer! 1,Q0m(m.m&_Find_Buffer)[1 !* Get its index! Q:.b(Q1+1) u1 !* And its name! 0 f[Lines !* Use the whole screen! m(m.mView_Buffer)1 !* View it! 0 !^R BUFED Help:! !^R Types out Help message.! 0 f[Lines m(m.mDescribe)Bufed  !* / Local Modes: \ / MM Compile: 1: M(M.M^R Save File) M(M.MGenerate Library)BUFEDBUFED 1:W \ / End: \ !