// // CHKGOTOS.VDM Christian Ziemski 03.04.1997 // 10.04.1997 // // // Checks a DOS-Batch for existing labels against the GOTO's. // // It's a quick and dirty macro which should be an example only .... // // // Usage: vedit -x chkgotos.vdm example.bat result.txt // // Returncode = 0 if no errors found // Returncode = 1 if one or more error found // // ---------------------------------------------------------------------------- // // Prft ein DOS-BAT-Programm auf korrekte Sprungmarken fr die GOTOs. // // In Buffer 1 erwartet es den zu prfenden Text und in Buffer 2 die Datei, // in die das Ergebnis zu schreiben ist. // // Die Ausgabedatei enth„lt im Fehlerfall die // Zeilennummern und die Sprungziele ohne passende Marke // BOF #98=0 RegEmpty(10) RegSet(12,"GOTOs auf nicht vorhandene Sprungmarken (in Zeile ... ): ") repeat(all) { Search("goto", WORD+NOERR) if (Error_Match) { break } Set_Marker(9,Cur_Pos) #99=Cur_Line Line(1) Out_Reg(10,APPEND) Num_Type(#99,NOCR) Out_Reg(CLEAR) Reg_Set(10," : ", APPEND) Reg_Copy_Block(10, Marker(9), Cur_Pos, APPEND) } BOF repeat(all){ Search("|<:|!:", NOERR) if (Error_Match) { break } Set_Marker(9,Cur_Pos) Line(1) Reg_Copy_Block(10, Marker(9), Cur_Pos, APPEND) } Buf_Switch(2) Reg_Ins(10) Replace("|W|>","",ALL+NOERR+BEGIN) BOF update() repeat(all) { Search(" : goto ", NOERR) if (Error_Match) { break } BOL #99=Num_Eval() Search("goto ", NOERR) Do_Visual("\NW\") Set_Marker(9,Cur_Pos) Reg_Copy_Block(10, Marker(9), EOL_Pos) Line(1) Reg_Copy_Block(11, Marker(9), Cur_Pos) Search("|<:|@(10)", NOERR) if (Error_Match) { Out_Reg(12,APPEND) Num_Type(#99,NOCR) Out_Reg(CLEAR) Reg_Set(12," : ", APPEND) Reg_Set(12,@11, APPEND) #98=1 } Goto_Pos(Marker(9)) } EOF Ins_Newline(2) Reg_ins(12) FileSave() exit(#98)