// // VEDITSYS.VDM 12/94 // 7.03.95 // // File-Generation-Modul fr 1-10 Dateien // // // Generationen mit *.001 bis *.999 bzw. // mit *.A00 bis *.Z99, wobei A-Z jeweils gleiche Dateinamen // mit verschiedenen Extensions bedeuten // // (Eintrag 000 bedeutet: gerade angelegt) // // gesteuert duch INI-Datei (Aufrufparameter): // FILENAME.EXT=nr mit nr=letzte aktuelle Gen.-Nr. (3-stellig, s.o.) // // // Aufruf: VE -X C:\VEDIT\VEDITSYS.VDM Datei1 Datei2 ... Pfad\Steuerdatei // // // Es wird das File-Close-Macro in Reg.111 verwendet. // // ------------------------------------------------------------------------ // // Buffer: // // 1 .. n-1 Texte // n Steuerdatei // 33 temp. // 34 temp. // // Register: // // #1 Schleifenz„hler // #2 Steuerregister bezogen auf #1 --> Reg 15, 20, 25 ... bzw. #15 ... // #3 Steuerregister bezogen auf #1 --> Reg 16, 21, 26 ... bzw. #16 ... // // #6 Nr des letzten Buffers (=Steuerdatei) // #7 temp.: ASCII-Value des 1. Zeichens der Generations-Extension bzw. 0 // #8 flag fr Schleifensteuerung // // #9 Anzahl Files // // 11 Pfad und Name der Steuerdatei // // 12 Pfad und Name der aktuellen Datei, aber ohne Extension // 13 Pfad und Datei-Name neu (Generation) // // // und je Datei ein Registerblock: // // Datei 1 2 usw Bedeutung // ---------------------------------------------------------- // #15 #20 ... aktuelle Generationsnummer // #16 #21 ... ASCII-Value wie #7 // 15 20 ... Pfad und Datei-Name // 16 21 ... Original-Inhalt der Datei (vor Modifikationen) // // ------------------------------------------------------------------------ #6=Buf_Total // = Nr. des letzten Buffers #9=#6-1 // Anzahl geladener Files (o.St.) Buf_Switch(#6) // Steuerdatei Out_Reg(11) // Name_Read(EXTRA+NOMSG+NOCR) // Pfad und Name holen Out_Reg(CLEAR) if (#9 > 10) { Get_Key("too many files !! (max. 10) ",STATLINE) exit() } // alle Namen und Inhalte sichern for(#1=1 ; #1<=#9 ; #1++) { // ab 1. File #2=(#1-1)*5+15 // Reg. 15, 20, 25 ... #3=#2+1 // Reg. 16, 21, 26 ... Buf_Switch(#1) // jeweils akt. File Out_Reg(#2) Name_Read(EXTRA+NOMSG+NOCR) // Pfad u. Name in Reg.15 ... merken Out_Reg(CLEAR) Out_Reg(#3) // Inhalt in Reg. 16 ... merken Reg_Type(#1+Buffer) Out_Reg(CLEAR) } // Generationswerte aus Steuerdatei holen Buf_Switch(34) // Steuerdatei --> temp.Buffer 34 RI(#6+BUFFER) for(#1=15 ; #1<=(#9-1)*5+15 ; #1=#1+5) { // alle Files durchgehen BS(33) // temp. Buffer BufEmpty(OK) Reg_Ins(#1) // Pfad und Dateiname End_of_File Search("\", REVERSE+ADVANCE+NOERR) // ohne evtl. vorh. Extension Search(".", NOERR+ADVANCE) // nach Reg 12 kopieren if(!ErrorMatch) { Reg_Copy_Block(12,0,CP-1) // (entweder bis vor den Punkt) } else { Begin_of_Line Reg_Copy(12,1) // (oder gesamt) } Buf_Switch(34) // Steuerdatei #7=64 // "@" (1 vor "A") search("|<|@(12)|{.,=}", BEGIN+ADVANCE+NOERR) // Dateinamen ohne Ext. in // Steuerdatei suchen if (! ErrorMatch) { // wenn 1. Mal gefunden while(! ErrorMatch) { // solange noch Eintr„ge da #8=0 // Flag Begin_of_Line Match("|@(#1)", ADVANCE) // prfen, ob der gesamte // Name schon passt if (! ErrorMatch && (CurChar()==61)) { // wenn Treffer und schon // auf "=" (incl. Ext.) char(1) // => hinter "=" #3=#1+1 // relativ #@3=Cur_Char // 1. Zeichen Ext. speichern if(Cur_Char>57) { // wenn keine Ziffer (also // > "9" (57="9") Char(1) // => 1 Zchn weiter } else { #@3=0 // 1. Zchn.Ext-Flag auf NULL } #@1=NumEval() // numerischen Wert der Ext. #8=1 // Flag setzen break // und raus aus while() } else { Search("=",ADVANCE) // wenn noch kein eindeutiger // Treffer: Eintrag prfen if (Cur_Char > #7) { // wenn 1. Zeichen der Ext. #7=Cur_Char // > als bisher gemerktes } // => das aktuelle merken // (Max. ermitteln) search("|<|@(12)|{.,=}", ADVANCE+NOERR) // und zum n„chsten Eintrag } } // while() if (#8==0) { // wenn nicht gefunden-Flag // anlegen mit #7 00 #7++ // erst #7 erh”hen End_of_File Reg_Ins(#1) // Eintrag anlegen Ins_Text("=") Ins_Char(#7) // 1. Zchn der Ext. Ins_Text("00") // mit Startwert 0 Ins_NewLine(1) #@1=0 // lfd Nr (Generation) #3=#1+1 #@3=#7 // 1. Zchn der Ext. merken } } else { // Name garnicht gefunden // anlegen mit 000 End_of_File Reg_Ins(#1) // Eintrag anlegen Ins_Text("=000") // mit Startwert 000 Ins_NewLine(1) #@1=0 // lfd Nr (Generation) #3=#1+1 #@3=0 // 1. Zchn der Ext. == NULL } } // for() // alle Files Buf_Switch(#6) // Orig. Steuerdatei schlieáen Buf_Quit() Buf_Switch(1) // 1. Text //-------------------------------------------------------------------------- Config(F_E_F_MACRO,1) // File-Open/Close-Macro aktivieren Reg_Set(111,' // und File-Close-Macro fllen #1=Buf_Num #2=(#1-1)*5+15 Replace("|W|>","",BEGIN+ALL+NOERR) // trailing spaces l”schen File_Save() // speichern BufEmpty(OK) // File schlieáen Reg_Ins(#2) // Dateinamen holen End_of_File Search("\",NOERR+ADVANCE+REVERSE) // letzten Backslash suchen Search(".",NOERR+ADVANCE) // ab da Punkt im Filename suchen if (Error_Match) { // wenn kein Punkt gefunden End_of_Line // an das Zeilenende Ins_Text(".") // Punkt einfgen } Del_Line(1) #@2++ // Gen.Nr. indirekt erh”hen #3=#2+1 // relativ: Speicher f. 1.Ext.Zchn if(#@3==0){ // wenn kein Buchstabe if (#@2 < 100) { Ins_Text("0") // Gen.Nr. 3-stellig numerisch } } else { Ins_Char(#@3) // sonst mit Buchstabe und 2-st. } if (#@2 < 10) { // mit fhrenden 0en formatieren Ins_Text("0") } Num_Ins(#@2,LEFT+NOCR) // Gen.Nr. einfgen Begin_of_File Reg_Copy(13,1) // Gen.Namen merken BufEmpty(OK) // Buffer l”schen Reg_Ins(#2+1) // Original-Inhalt holen File_Save_As("|@(13)",NOMSG) // und mit Gen.Namen speichern // Steuerdatei aktualisieren BufSwitch(34) Search("|@(#2)=", BEGIN+ADVANCE+NOERR) // Namen suchen DelLine(1) // Gen.Nr. l”schen #3=#2+1 // relativ: Speicher f. 1.Ext.Zchn if(#@3==0){ // wenn kein Buchstabe if (#@2 < 100) { Ins_Text("0") // Gen.Nr. 3-stellig numerisch } } else { Ins_Char(#@3) // sonst mit Buchstabe und 2-st. } if (#@2 < 10) { // m. fhrenden Nullen formatieren Ins_Text("0") } NumIns(#@2,LEFT) // und akt. Gen.Nr. eintragen Buf_Switch(#1) // wieder zurck in Textbuffer if (Buf_Num_Altered==0){ // wenn auch der letzte Buffer Buf_Empty() // gesichert ist => Steuerdatei Reg_Ins(34+BUFFER) // holen FileSaveAs("|@(11)", NOMSG+OK) // und auch sichern } ')