// // WSEARCH.VDM - Point and shoot - Auswahl aus Suchliste // // Christian Ziemski 17.05.1995 // 17.05.1995 // fr VEDIT 4.20 16.10.1995 // 13.07.1999 // // inspiriert von: Kerry E. Wilkinson's CFUNC.VDM // // // // Erzeugt eine Liste der Zeilen, in denen das Wort am Cursor enthalten // ist (inkl. Zeilennummer) und zeigt diese Liste in einem eigenen Fenster // an. In der Liste kann durch Scrollen auf verschiedene Eintr„ge gezeigt // werden, wobei synchron dazu im Hauptfenster der ursprngliche Text // entsprechend auf diese Zeile positioniert wird. // // Jetzt kann mit in den Text gegangen oder das ganze mit // abgebrochen werden (dann wird das Listfenster geschlossen). // // Bei Wiederanwahl nach kann die vorhanden Liste wahlweise // weiter verwendet werden. // // if (#84>0) { // falls schon Liste vorhanden ... #88=0 #88=Get_Key("Es gibt schon eine Tabelle! Diese benutzen ? [J/n]",STATLINE) if (#88=='R'+'T'*256 || #88=='j' || #88=='J'){ goto warmstart } if (#88=='E'+'S'*256){ break } goto lauwarmstart } // Kaltstart Num_Push(80,89) // Numerische Register sichern #85 = Buf_Num // #85 = originaler Editbuffer #81 = Reg_Free() // #81 = T-Reg ZeilenNummern #83 = Buf_Free() // #83 = Buffer ***Zeilennummern if (#81<=0 || #83<=0) { // wenn keine Ressourcen... Get_Key("Keine T-Regs/Buffer vorhanden fr WSEARCH",STATLINE+RAW) Num_Pop(80,89) Return } :lauwarmstart: Reg_Empty(#81) #84 = 0 // Schleifenz„hler #87 = 0 // ZeilenNummer Register // #88 = temp. #89 = Cur_Pos // #89 = Fileposition im Haupttext if(BB == -1){ Search("|S",REVERSE+ADVANCE+NOERR) if (Error_Match){ Get_Key("Fehler: konnte kein Wort isolieren! Abbruch!", STATLINE) return } #100=Cur_Pos Search("|S",NOERR) if (Error_Match){ Get_Key("Fehler: konnte kein Wort isolieren! Abbruch!", STATLINE) return } Reg_Copy_Block(103,#100,CP) } else { Reg_Copy_Block(103,BB,BE) } Begin_Of_File() Message("am Wursteln dran. Etwas Geduld...",STATLINE) // // Array: Zeilen und Zeilennummern // repeat (ALL) { // 'endless' loop Buf_Switch(#85) // Originalbuffer Search(@103,NOERR+CASE) if (Error_Match) { break } #87 = Cur_Line // Out_Reg(#81,APPEND) // Append Zeilennummer an T-Reg #81 Num_Type(#87,NOCR) Out_Reg(CLEAR) #84++ // Schleifenz„hler Reg_Set(#81,/:/,APPEND) // Trennzeichen BoL Reg_Copy(#81,1,APPEND) // Append Zeile an T-Reg #81 Line(1,NOERR) // n„chste Zeile } :warmstart: if (#84>0) { // mindestens 1 Fundstelle if (Win_Status(*) == -1){ Win_Split(*,4,BOTTOM) // Zeilen-Window } Win_Switch(*) // // Buffer #83: ZeilenNummer // Buf_Switch(#83) Buf_Empty(OK) Reg_Ins(#81) BOF() // Zeilenummern/Zeilen array Win_Attach(*) repeat (ALL) { // bis oder BOL() Block_Begin(Cur_Pos) EOL() Block_End(Cur_Pos) BOL() Update() // Highlight Zeile #88 = Cur_Line // #88 = array index Buf_Switch(#83) Goto_Line(#88) #86 = Num_Eval() // #86 = korrespondierende Zeilennummer Buf_Switch(#85) // Mainbuffer Goto_Line(#86) Update() // Goto Zeile BOL() Buf_Switch(#83) Win_Switch(*) // Listwindow #88 = Get_Key("Cursortasten und fr Auswahl oder fr Abbruch",STATLINE) if(#88=='E'+'S'*256) { // Escape Win_Delete(*) Buf_Switch(#83) Buf_Quit(OK) Reg_Empty(#81) Buf_Switch(#85) Goto_Pos(#89) Update() Num_Pop(80,89) // Restore Numerische Regs #84=0 // nicht ganz sauber so ... Return } if (#88=='R'+'T'*256) { // Return Buf_Switch(#85) #89 = Cur_Pos() Break // Break out of Repeat Loop } if (#88=='C'+'D'*256) { // Cursor Down if (Cur_Line<#84) { Do_Visual("\CD\") } } if (#88=='C'+'U'*256) { // Cursor Up if (Cur_Line>1) { Do_Visual("\CU\") } } if (#88=='P'+'D'*256) { // Page Down if ((Cur_Line+23)<#84) { Line(23,NOERR) } else { EOF() Line(-1,NOERR) } } if (#88=='P'+'U'*256) { // Page Up if (Cur_Line > 23) { Line(-23,NOERR) } else { BOF()} } if (#88=='L'+'E'*256) { End_Of_File() Line(-1,NOERR) } if (#88=='L'+'B'*256) { Begin_Of_File() } // Home } } Buf_Switch(#85) Goto_Pos(#89) Update() Return