HISTORY16X.TXT Fehlerreport und Änderungsliste für FoldMaster, dem Falteneditor für Programmierer. Autor : M.Leute / A.Raible Home- Page : http://www.foldmaster.de Enthält wesentliche Änderungen und Korrekturen ab Version 1.60. Die Version 1.60 wurde am 01.07.2002 veröffentlicht. =============================================================== (*{{{ FoldMaster Version 1.60*) --------------------------------------------------------------- FoldMaster Version 1.60 --------------------------------------------------------------- 141.) Fixed: Langsame Abarbeitung von Makros die über SyntaxDefineRwMacros eingebunden werden, durch Aktualisierung der Toolbar bei jedem Aufruf. 142.) Added: Bis zu 1024 reservierte Worte, die bis zu 8KByte belegen können. 143.) Fixed: Makro "MacroRun" braucht weiteren Parameter. Bei MacroRun wieder alte Funktionalität hergestellt wie sie in der Hilfe beschrieben ist. Weiteres Makro MacroRunX eingeführt, das den Aufruf eines weiteren Makros mit Parametern erlaubt. Eine Beschreibung ist in der Hilfe enthalten. 144.) Added: Dialog "Attribute des Moduls" umgestellt. 145.) Fixed: Probleme bei Maximierung von Druckvorschaufenster und FoldMaster- Hauptfenster 146.) Fixed: Im Druckvorschaufenster wird bei zweiseitiger Darstellung eine zweite Seite angezeigt obwohl nur eine Seite vorhanden ist. Die erste Seite wird gedoppelt. 147.) Added: Im Statusfenster der Druckvorschau wird jetzt auch die gesamte Seitenzahl angezeigt. 148.) Fixed: Bei der Druckvorschau und beim Ausdrucken werden Faltenenden nicht ausgedruckt. 149.) Added: Beim Ausdrucken von nur Faltentitel werden jetzt die geschweiften Klammern unterdrückt. 150.) Fixed: Beim Springen zu einer bestimmten Zeile wird Cursorposition nicht endgültig gesetzt. Eine weitere Eingabe setzt den Cursor wieder auf die Ausgangsposition. 151.) Added: Die Makrosprache lässt jetzt eine beliebige Reihenfolge von const und var Deklarationen sowie Funktionen und Prozeduren zu. Const und var Deklarationen dürfen auch mehrfach in einem Programm vorkommen. 152.) Fixed: Positionierung des Cursors nach Fehler in Makrodatei passt nicht genau. 153.) Added: Ausdrucken aus Hex- Editor. 154.) Added: Beim Ausdruck wird in der Kopfzeile jetzt auch die Anzahl der Seiten mit ausgegeben z.B. Seite 1 von 10. 155.) Fixed: Bei Perl- Syntaxfilter werden am Ende der Zeile nach einem String mit // Zeichen gelöscht. 156.) Fixed: Wenn mit dem Makro 'FileAdd' eine Datei in das Projekt eingefügt wird, welche bereits geöffnet und geändert ist, wird die Datei geschlossen und die Änderungen ohne Warnung verworfen. Gleiches Verhalten ist beim Einfügen von Dateien über den Dateidialog zu beobachten. 157.) Added: Textmarken und Notizen verschmolzen. Es gibt jetzt nur noch Textmarken, die aber über alle Eigenschaften von Notizen verfügen. Sie besitzen jetzt die Eigenschaft Infotext und Zustand. Der Zustand von Textmarken wurde um Zustand "Normale Textmarke" ergänzt. Die bisherigen Zustände verschieben sich um eins. 158.) Added: Makros ergaenzt um Textmarken einzufügen und zu manipulieren, ohne dass Datei geladen ist: - TmListAdd : Fügt eine Textmarke in der Datei in einer bestimmten Zeile ein. Evtl. vorhandene Textmarken werden überschrieben - TmListDelete : Löscht eine Textmarke in der angegebenen Datei in der gegebenen Zeile. - TmListSet : Ändert die Eigenschaften einer Textmarke in der Datei in der gegebenen Zeile - TmListSetState : Ändert nur den Zustand der referenzierten Textmarke 159.) Added: Zum Ändern einer Textmarke im Textmarkenfenster lässt sich im unteren Teil des Fensters ein Propertypage einblenden, um alle Einstellungen (Titel, Beschreibung und Zustand) vorzunehmen. Die Propertypage kann ein- und ausgeschaltet werden. 160.) Fixed: Perl- Syntaxfilter eliminiert beim Laden Zeilen die entsprechend diesem Muster #!!! KOMMENTAR aufgebaut sind. Genauso werden Zeichen am Ende einer Zeile gelöscht, die folgenden Aufbau haben: $ModeTimeString =~ /(\d+) (\w+) (\d+)/; 161.) Fixed: Undeterministisches Verhalten von StartOfFold und EndOfFold. EndOfFold wurde dahingehend geändert, dass immer versucht wird auf das Faltenende }}} zu springen. In der aktiven Liste (im Fenster geöffnet) wird in die letzte enthaltene Zeile gesprungen. StartOfFold wurde so geändert, dass immer versucht wird auf den Titel {{{ einer Falte zu springen. In der aktiven Liste wird in die erste enthaltene Zeile gesprungen. 162.) Fixed: IsFoldTitle liefert innerhalb des Projekts auch bei Modulen TRUE, obwohl Module keine Falten sind. 163.) Added: Das Makro MessageAddGroupRef hat einen weiteren Parameter bekommen, der die Zeile in der Zieldatei angibt. Dadurch können auch über Gruppen auf eine bestimmt Zeile in der Zieldatei gesprungen werden. Das hinzugekommene Makro MessageAddSubGroup ermöglicht die Erstellung von Gruppen innerhalb der Hauptgruppen, so dass 2 Ebenen möglich sind. 164.) Fixed: FoldMaster stürzt ab, wenn man versucht etwa 32KByte Text ohne Zeilenumbrüche über die Zwischenablage einzufügen. Beim Laden und prozessieren solcher Dateien über ein Makro das über SyntaxDefineRWMacros eingebunden wurde stürzt FoldMaster ebenfalls ab. 165.) Fixed: Werden Messages generiert, die auf eine beliebige Zeile in der Projektdatei verweisen, wird beim Auswählen der Message die Zeile im Projekt nicht gefunden, der Cursor wird an das Ende der Datei gesetzt. 166.) Added: Die Makrosprache in FoldMaster unterstützt jetzt auch Arrays. Für die Grundtypen lässt sich ein Array definieren. Es können nur Variablen als Arrays deklariert werden. Der Zugriff auf einen String über Array ist ebenfalls möglich. Beim Debuggen werden alle Elemente angezeigt. Beispiel: var // global vars simple_array : array [1 .. 3*maxarray] of integer; char_array : array [1..255] of char; string_array : array [0..25] of string; simple_array9 : array [1..20] of integer; multi_array2 : array [1..20,1..4] of integer; multi_array3 : array [1..20,1..4,0..6] of integer; 167.) Added: Im Watchfenster im Makrodebugger werden Strings jetzt in " und einzelne Zeichen in ' eingerahmt ausgegeben. 168.) Fixed: Bei "Klammern suchen" kann jetzt als öffnende oder schließende Klammer mehrere Zeichen/Worte angegeben werden, die alternativ behandelt werden. Z.B. bei Pascal wird dann nicht nur die Kombination BEGIN...END sondern auch RECORD...END, OBJECT...END und CASE...END erkannt. 169.) Added: Bei Betätigung der rechten Maustaste in der DragBar öffnet sich ein Fenster mit dem Infotext, der in der entsprechenden Zeile gesetzten Textmarke. 170.) Added: Space im Textmarkenfenster kollabiert bzw. expandiert eine Falte, wenn diese selektiert ist. 171.) Added: Suchen im Textmarkenfenster implementiert, wobei alle Titel und auch der Infotext durchsucht wird. CTRL- S um weiter zu suchen, CTRL- R um rückwärts zu suchen. 172.) Fixed: TempStoreInsert fügt immer eine Position zu weit ein. -> TempStoreInsert fügt am Anfang der Liste ein, wenn 0 übergeben wird. TempStoreInsert fügt vor dem adressierten Element ein, wobei die Zählung der Zeilen bei 0 beginnt. Ist die Liste nicht lang genug, wird das einzufügende Element lediglich an die Liste angehängt. 173.) Fixed: Beim sortierten Einfügen in einen Tempstore werden jetzt auch Tabulatoren korrekt expandiert und behandelt. 174.) Fixed: In der Makrokonsole werden Tabulatoren jetzt korrekt expandiert. 175.) Fixed: Muss nach Änderungen von Einstellungen der Attribute eines geänderten Moduls die Datei nachgeladen werden, so wird ein Dialog angezeigt, dass Änderungen beim Nachladen verloren gehen ein Abbrechen des Dialogs führt jedoch dazu, dass die Datei nicht neu geladen wird, die Änderung an den Attributen wird jedoch durchgeführt. => Dialog wurde umgestellt. Beim Abbrechen des Dialogs werden die Änderungen rückgängig gemacht. 176.) Fixed: Beim Einfügen eines Spaltenblocks: Bei Leerzeilen wird der Block immer am Zeilenanfang eingefügt, obwohl der Cursor weiter rechts steht. 177.) Added: Scrollen in X- Richtung im HEX- Editor. UNDO im HEX- Editor. Blockfunktionen im HEX- Editor. Suchen nach HEX- Werten. 178.) Fixed: Beim Suchen von Klammernpaaren werden die Optionen aus dem Dialog nicht beim Weitersuchen übernommen. 179.) Fixed: Beim Suchen von Klammernpaaren wird beim Aufruf aus der Toolbar vom Anfang der Zeile an gesucht, obwohl der Cursor hinter dem Text steht. 180.) Added: Zugriff auf weitere Einstellungen des Editors über Integer- Variablen in der Makrosprache realisiert: EditorOpt_Language EditorOpt_DefaultWindowWidth EditorOpt_DefaultWindowHeight EditorOpt_LineNumWidth EditorOpt_PageMargin EditorOpt_AutoSaveSeconds EditorOpt_CharDispOptions EditorOpt_BlockIndent 181.) Fixed: Absturz beim Einfügen einer neuen Zeile innerhalb von Falten, die im gleichen Fenster geöffnet wurden. 182.) Fixed: Positionierung des Cursors nach dem Einfügen eines Templates in Falten, die im gleichen Fenster geöffnet wurden. 183.) Fixed: MessageSelect, MessageActivate, MessageDelete und IterateMessages arbeiten jetzt in der kompletten Liste, nicht nur in allen angezeigten Nachrichten. 184.) Added: Folgende Funktionen ergänzt: MessageGetIndex : Ermittelt den Index der im aktuellen MessagePort aktivierten Nachricht. MessageGetCount : Ermittelt die Anzahl der im aktuellen MessagePort eingetragenen Nachrichten. 185.) Added: Makrofunktion GetCount ergänzt, um die Anzahl Elemente in einem Array zu bestimmen. 186.) Added: Im Hex- Editor Möglichkeit ergänzt, um einzelne Bits in einem Wert per Dialog zu setzen oder zu löschen. 187.) Added: Zwei weitere Schalter in der Druckvorschau ergänzt, um an den Textanfang und an das Textende zu springen. 188.) Fixed: Nummerieren über Dialog überarbeitet. 189.) Fixed: Bei Anwendung eines Makros auf alle Zeichen einer Markierung im Hex- Editor über das "Bearbeiten"- Menü wird das letzte Byte der Markierung nicht berücksichtigt. 190.) Added: Anzeige des Textmarkentitels bzw. deren Infotext innerhalb eines Editorfensters bei rechter Maustaste in Dragbar umgestellt, so dass immer Titel und Info angezeigt werden. 191.) Added: Im Makroeditor werden Variablen im WatchFenster beim Neustart eines Makros oder beim Abbrechen des Makros nicht mehr gelöscht. 192.) Fixed: Elemente von Arrays können jetzt auch als var- Parameter übergeben werden. 193.) Fixed: Zuweisung an Array- Elemente, wenn in Ausdruck weitere Elemente des Arrays zur Berechnung verwendet werden. 194.) Added: Weitere System- Hooks ergänzt: AfterPrjLoaded : Wird aufgerufen, nachdem ein Projekt geladen wurde BeforePrjClose : Wird aufgerufen, bevor ein Projekt geschlossen wird 195.) Fixed: Probleme beim Fokussieren unterschiedlicher Makroeditoren, während einer Debug- Session. 196.) Added: Makrofunktion WindowGetFocused ergänzt, um das aktuell fokussierte Fenster zu ermitteln. 197.) Fixed: Die Funktion IsModuleInProject prüft ob eine Datei deren Name angegeben ist bereits im Hauptprojekt eingetragen ist. Dies funktioniert jetzt auch, wenn die Datei bereits offen und selbst im Vordergrund ist. 198.) Added: Makrofunktion FoldInsExtRef ergänzt zum Einfügen einer externen Referenz in der Projektdatei. Makrofunktion FoldInsModRef ergänzt, um eine Referenz auf eine Datei aus dem Projekt einzufügen. 199.) Fixed: Einfügen von Text aus der Zwischenablage in den HEX- Editor. Es werden mehr Daten eingefügt als enthalten sind. 200.) Fixed: XML- Projektdateien werden nicht korrekt geladen, wenn sie als Subprojekt in einem Projekt eingefügt sind. 201.) Added: Makro SetProjectVar ergänzt um den Wert einer Variablen im Projekt zu setzen, wobei das Projekt von Anfang bis Ende nach einer entsprechenden Variablen durchsucht wird. Makro SetVariable ergänzt um den Wert einer Variablen im Projekt zu setzen, wobei beginnend an der aktuellen Position in Richtung Projektanfang nach einer entsprechenden Variablen gesucht wird. 202.) Added Folgende Makros zur Benutzung im Hexeditor ergänzt: function HexGetOffset : integer; Liefert den Offset an der aktuellen Position function HexGetWordSize : integer Liefert die eingestellte Wort- Größe function HexGetData (offset:integer) : integer; Liefert das Byte an der aktuellen Position + n n kann auch negativ sein function HexGetWord (offset:integer) : integer; Liefert das Wort (16 Bit) an der aktuellen Position + n n kann auch negativ sein. Die Einstellung von Big- Endian wird berücksichtigt. function HexGetLong (offset:integer) : integer; Liefert das Langwort (32 Bit) an der aktuellen Position + n n kann auch negativ sein. Die Einstellung von Big- Endian wird berücksichtigt. function HexGetString(offset, max_len :integer) : string; Liefert einen String ab der aktuellen Position + n. n kann auch negativ sein. Der String hat eine maximale Länge von max_len. Das Einlesen wird beim ersten Auftreten eines 0- Byte abgebrochen (Null- terminierter String). procedure HexGoto(abs_pos : integer); Springt an die absolute Position procedure HexJump(offset : integer); Springt an die relative Position. Negative Werte für offset springen in Richtung Dateianfang. procedure HexInsCount(count : integer); Angegebene Anzahl Bytes an aktueller Position einfügen procedure HexDelCount(count : integer); Angegebene Anzahl Bytes an aktueller Position löschen procedure HexSetData (offset, data : integer); Ausgehend von der aktuellen Position das Byte an dem angegebenen Offset setzen. procedure HexSearchData( such_string, options : string); Nach Text oder Daten suchen. Folgende Optionen können angegeben werden: Suchbereich 'g' ab Anfang/Ende des Bereichs default ab aktueller Position der Textmarke Optionen 'h' Beim angegebenen String handelt es sich um eine Folge von Hex- Werten 'u' Groß-Kleinschreibung nicht unterscheiden u = U 'c' Fundstellen im Meldungsfenster eintragen procedure HexSearchPrev; Vorhergehendes Vorkommen suchen. procedure HexSearchNext; Nächstes Vorkommen suchen. function HexFound : boolean; Liefert TRUE, wenn Suche im Hex- Fenster erfolgreich war. Cursor steht am Anfang des gefunden Patterns. 203.) Added: WatchFenster für HexEditor, mit dazugehörigen Makros: Ein Watch ist ein Eintrag im WatchFenster der durch Makros aktualisiert werden kann. Durch das Makro HexWatchSetMacro kann ein Makro bekannt gemacht werden, das bei einer Änderung der aktuellen Position aufgerufen wird. Dieses Makro kann die eingetragenen Watches aktualisieren. procedure HexWatchAdd(name : string; type : integer); Fügt ein Watch mit dem angegebenen Namen und Typ ein. Der Typ bestimmt die Darstellung des Wertes. Für Typ gilt: 0 : String Ausgabe eines Strings 1 : INT32 Ausgabe als vorzeichenbehaftete Dezimalzahl mit 32 Bit 2 : UINT32 Ausgabe als vorzeichenlose Dezimalzahl mit 32 Bit 3 : INT16 Ausgabe als vorzeichenbehaftete Dezimalzahl mit 16 Bit 4 : UINT16 Ausgabe als vorzeichenlose Dezimalzahl mit 16 Bit 5 : INT8 Ausgabe als vorzeichenbehaftete Dezimalzahl mit 8 Bit 6 : UINT8 Ausgabe als vorzeichenlose Dezimalzahl mit 8 Bit 7 : XINT32 Ausgabe als 32 Hex 8 : XINT16 Ausgabe als 16 Hex 9 : XINT8 Ausgabe als 8 Hex Für andere Typen kann im Makro selbst die Konvertierung durchgeführt werden und als String ausgegeben werden. procedure HexWatchSetInt(name : string; value : integer); procedure HexWatchSetStr(name : string; value : string); Werden benutzt um bei den Angegebenen Watches einen neuen Wert einzutragen. Die Anzeige wird nicht aktualisiert. Dazu muss das Makro HexWatchUpdate aufgerufen werden. procedure HexWatchDel(name : string); Den angegebenen Eintrag löschen. procedure HexWatchDelAll; Alle Einträge im Watch- Fenster löschen. procedure HexWatchShow; Watch- Fenster anzeigen. procedure HexWatchUpdate; Anzeige des Watch- Fenster aktualisieren. procedure HexWatchSetMacro(name : string); Das angegebene Makro bekannt machen, das bei einer Änderung der aktuellen Position aufgerufen werden soll. Das Makro darf keine Parameter erwarten. Die Anzeige wird nach Beendigung des Makros automatisch aktualisiert. Der Aufruf des Makros HexWatchUpdate ist nicht notwendig innerhalb dieses Makros. --------------------------------------------------------------- Version veröffentlicht am 01.07.2002 --------------------------------------------------------------- (*}}}*) (*{{{ FoldMaster Version 1.61*) --------------------------------------------------------------- FoldMaster Version 1.61 --------------------------------------------------------------- 204.) Added: Textmarken gehen beim Löschen einer Zeile nicht mehr verloren. Bei der Selektion der Textmarke wird in der Zeile mit der entsprechenden Zeilennummer der Verweis wieder gesetzt. 205.) Added: Im Textmarkenfenster kann jetzt auch nach Titel und Status sortiert werden. 206.) Fixed: Nummerierung bei Offset in den Makros - TempStoreInsSorted - TempStoreInsSortedX - TempStoreSort beginnt jetzt bei 1. Soll also ab dem ersten Zeichen sortiert werden muss eine 1 übergeben werden. 207.) Fixed: Bei TempStoreCut und TempStoreCopy wird auch der Blockmodus mitgespeichert, so dass bei TempStorePaste der Block wieder korrekt eingefügt werden kann. TempStoreClear setzt den Modus wieder auf Textblock. Die Funktionen erlauben jetzt also auch die Bearbeitung eines Spaltenblocks. Folgende Funktion sortiert einen markierten Bereich: procedure TestTempStoreSort; var i:integer; begin TempStoreClear(0); TempStoreCut (0); TempStoreSort (0, 1); TempStorePaste(0); end; Durch Markieren eines Spaltenblocks kann innerhalb der markierten Spalten sortiert werden, ohne die restlichen Inhalte zu ändern. 208.) Added: In der Makrokonsole können jetzt auch Kommandos direkt per Tastatur eingegeben und ausgeführt werden. Das Fenster sieht ein entsprechendes Editfeld vor. 209.) Added: Makro AddMRUFile ergänzt, um ein Dateinamen in die Liste der zuletzt benutzten Dateien einzutragen. Die Unterscheidung ob der Name als Projekt oder als andere Datei eingetragen wird, wird anhand der Erweiterung getroffen. 210.) Added: Makro GetParentProjectName ergänzt. Dieses Makro liefert den Namen der Projektdatei in der das aktuelle Modul eingetragen ist, unabhängig davon ob diese Projektdatei ein Subprojekt ist oder nicht. 211.) Fixed: In den Makros SetProjectVar und GetPrjVarValue werden Variablen, die in einem Subprojekt enthalten sind, nicht behandelt oder gefunden, wenn diese Makros innerhalb eines Moduls aufgerufen werden, das Teil des Subprojekts ist. => Die Makros durchsuchen jetzt zuerst das Projekt der nächst höheren Ebene nach den Variablen. Nur wenn hier nichts gefunden wird, wird in einer Ebene höher weiter gesucht. 212.) Added: Makro GetId ergänzt. Das Makro liefert den Typ des Elements an der aktuellen Cursor- Position. Der gelieferte Wert ist identisch mit dem Wert der bei FoldInsType verwendet wird. 213.) Added: Makro InsertProject ergänzt um ein Subprojekt im aktuellen Projekt an der Cursorposition einzufügen. Als ersten Parameter erwartet das Makro den Namen des Projektes als zweiten Parameter wird ein Integer erwartet. Ist dieser Wert <> 0 dann wird ein read- only Projekt eingefügt. 214.) Added: Folgende Makros ergänzt, die zur Abfrage und zum Setzen einer Variablen an der aktuellen Cursorposition dienen. Diese Makros haben keine Wirkung, wenn sich der Cursor nicht auf einer Variablen befindet. - IsVariable : prüft ob es sich bei aktueller Zeile um eine Variable handelt - SetNameOfVariable : setzt den Namen der Variablen in der aktuellen Zeile - GetNameOfVariable : ermittelt den Namen der Variablen in der aktuellen Zeile - SetValueOfVariable : setzt den Wert der Variablen in der aktuellen Zeile - GetValueOfVariable : ermittelt den Wert der Variablen in der aktuellen Zeile im Unterschied zu GetVarValue und GetPrjVarValue wird der eingetragene String ungeparst geliefert. Enthaltene TransferMakros werden nicht expandiert. Eine Variable kann an der aktuellen Position mit InsertVariable eingefügt werden. 22.07.2002 215.) Added: Beim Anlegen eines Makromoduls aus dem Dialog Makromodule bearbeiten, kann jetzt ausgewählt werden ob ein Makromodul oder eine Include- Datei angelegt werden soll. 216.) Added: Im Menü "Automation" einen weiteren Menüpunkt eingefügt, um Makromodule oder Include- Dateien für Makromodule anzulegen. 217.) Fixed: Werden Makros innerhalb eines Projekts angelegt, die bereits im Dialog "Makromodule bearbeiten" enthalten sind, werden diese jetzt nicht mehr entfernt, wenn das Projekt geschlossen wird. Es werden nur solche Einträge aus der Liste der Makromodule entfernt, die durch FoldMaster automatisch eingetragen wurden. 218.) Added: Neues Makrokommando TextMarkSetState um den Zustand der Textmarke in der aktuellen Zeile zu setzen. 219.) Fixed: Sind in einer Datei mehr als 64 Textmarken definiert, wird jetzt bei Auswahl des Textmarkenauswahlmenüs in der lokalen Toolbar ein Listenfenster angezeigt, das die Auswahl aus der Liste aller Textmarken erlaubt. 220.) Fixed: Beim Löschen einer Textmarke am oberen Rand des Textmarkenfensters stürzt FoldMaster ab. 02.08.2002 221.) Added: Makro IterateKeyMap ergänzt, um die Tastenbelegung auszulesen. Definition: function IterateKeyMap (mapping ,modifier, index : integer; var macname : string; var keyname : string): integer; Liefert 0 : für nicht belegt 1 : internes Kommando, das nicht als DDE- Kommando verfügbar ist 2 : DDE Kommando über KeymapSetCommand 3 : Makrofunktion über KeymapSetMacro mapping : 0 steht für DDE Kommandos des Editors 1 steht für System und alle vom Anwender definierten Makros index : Index der Taste im Bereich von 0 bis 255 macname : wird gefüllt mit dem Namen des DDE- Makros oder des vom Anwender definierten Makros keyname : Tastenkürzel oder Taste in Klartext 222.) Added: In der Makrosprache geht jetzt auch die "forward" Deklaration für Funktionen. 223.) Added: Funktionen und Prozeduren der Makrosprache lassen sich jetzt auch über Modulgrenzen hinweg aufrufen. Die Module müssen zur Ausführung kompiliert sein. Es findet ein späte Bindung statt, d.h. die Verweise werden erst beim ersten Aufruf einer Funktion aufgelöst. Die Verweise werden sobald ein Modul in der Liste entladen oder neu kompiliert wird wieder zurückgesetzt und beim nächsten Aufruf erneut eingetragen. Die Funktionen werden anhand ihres Namens referenziert. Die Module müssen alle in der Modulliste vorhanden sein. Die Deklaration einer solchen Funktion erfolgt über das Schlüsselwort "external" im aufrufenden Modul. Die Parameter müssen genau übereinstimmen. Zusätzlich kann ein anderer Name(Alias) oder ein vollständiger Name inklusive des Namens des Programms angegeben werden, wodurch eine eindeutige Referenzierung erfolgen kann. Beispiele: function FDateStr (fdate : integer) : string; external 'Project_Statistics/FDateStr'; function GetAString(ip : integer) : string; external; procedure TestProc2 (var i : integer; s : string); external; Die Parameterliste kann beliebig sein, muss aber genau übereinstimmen. Der Typ des Funktionswertes einer Funktion muss genauso übereinstimmen. Als external deklarierte Funktionen lassen sich genauso verwenden wie normale Funktionen. Die aufgerufene Funktion hat jedoch keinen Zugriff auf globale Variablen des Aufrufers sondern nur auf globale Variablen innerhalb des eigenen Moduls. 08.08.2002 224.) Added: Reservierte Worte können beim Editieren jetzt durch FoldMaster automatisch mit den im Syntaxfilter hinterlegten Worten ersetzt werden, um die Schreibweise Groß oder Klein zu korrigieren und zu vereinheitlichen. Diese Option ist nur für Syntaxfilter einstellbar, die Groß- Kleinschreibung nicht unterscheiden wie Pascal und Occam. Bei C/C++ kann diese Option nicht aktiviert werden, da hier z.B. "VOID" ungleich ist wie "void" und daher eine automatische Ersetzung zu Problemen führen kann, wenn beide Schreibweisen im Code verwendet werden. 225.) Added: Innerhalb der Templatedatei kann jetzt auch eine Falte mit dem Namen '@' angelegt werden, die in jeder Zeile nur ein Wort enthält. FoldMaster ist in der Lage auch diese einzelnen Worte zu vervollständigen. 226.) Added: Beim Editieren werden jetzt in der Statuszeile mögliche Templates und Worte angezeigt. Solange die Liste länger ist wird durch F8 immer das erste Element in der Liste eingefügt. 227.) Added: In der Kommandozeile der Makrokonsole kann jetzt jede bekannte Prozedur und auch Funktion aufgerufen werden. Um z.B. das Ergebnis einer Funktion anzuzeigen kann der Befehl writeln verwendet werden. Beispiel : writeln(GetModuleName); // Zeigt den Namen des aktuellen Moduls an 20.08.2002 228.) Added Makro IterateOpenModules und FileCloseX ergänzt: function IterateOpenModules(rel_path : bool; index : integer) : string; IterateOpenModules iteriert durch alle offenen Module. Die Funktion liefert die durch index angegebene offene Datei. Wird während des Iterierens die indizierte Datei geschlossen, sollte der Index nicht inkrementiert werden, um die nächste Datei zu indizieren. Werden Dateien geöffnet oder geschlossen oder wird eine andere Datei in den Vordergrund gebracht ändert sich die Liste. procedure FileCloseX(fn : string); Schließt die durch fn angegebene Datei. Die Datei muss sich nicht im Vordergrund befinden. 229.) Fixed: Beim Suchen von Klammern können die Einstellungen jetzt für alle Klammernpaare angepasst werden. Die Einstellung aller Paare wird in den Optionen gespeichert und beim Neustart automatisch geladen. Klammernpaare, die durch den Anwender definiert wurden, werden beim Neustart ebenfalls wieder angelegt. 230.) Fixed: Editieren im Makroeditor, während ein Makro ausgeführt bzw. schrittweise abgearbeitet wird, teilweise nicht möglich. 27.08.2002 231.) Fixed: Hook AFTERPRJOPENED wird für Subprojekte nicht aufgerufen. 232.) Fixed: Bei 'Optionen/Anzeige/Falte öffnen/Falte im aktiven Fenster ersetzen' wird beim Öffnen einer Falte der Faltentitel auch als FoldMaster- Fenster- Titel angezeigt. Sind im Faltentitel Umlaute enthalten, so werden diese im OEM-Modus nicht korrekt im FoldMaster- Fenster- Titel angezeigt. 233.) Fixed: Absturz beim Versuch an einzelne Elemente aus einem Stringarray zuzuweisen. 234.) Added: Funktion SetDel ergänzt. Diese Funktion erlaubt die Festlegung eines Begrenzungszeichens beim Schreiben von ganzen Arrays in Textdateien oder beim Lesen von Arrays aus Textdateien. Mit dieser Funktion und der Funktion readln ist es möglich ein Array aus einer Datei zu laden. z.B.: procedure test; var f : text; a : array[0..10000] of string; ai: array[0..100] of integer; begin assign (f, 'c:\projekte\fmtest\test.txt'); reset(f); setdel(f, #10); // wir wollen Zeilenende als Trennung read(f, a); // das ist schon alles um das komplette Array zu füllen close(f); // erste 100 Zeilen ausgeben for i := 0 to 100 do begin writeln(a[i]); end; for i := 0 to 100 do begin ai[i] := random(1000); end; rewrite(f); setdel (f, #10); // wir wollen Zeilenende als Trennung writeln(f, ai); // Ein Integer pro Zeile writeln(f, ai:8); // Ein Integer rechtsbündig in einem Feld von 8 Zeichen pro Zeile, Format gilt für jedes Element setdel (f, ','); // Komma als Trenner setzen writeln(f, ai:8); // Alle integer in einem Feld von 8 Zeichen in einer Zeile jeweils mit Komma getrennt. // am Ende wird ein Zeilenumbruch ausgegeben. close (f); // Das geht auch rückwärts reset (f); setdel (f, #10); // Zeilenumbruch als Kenner readln (f, ai); // Array füllen aus Datei mit einem Integer pro Zeile readln (f, ai); // zweitesmal writeln(ai); // Ausgabe des kompletten Arrays in der Makrokonsole setdel (f, ','); // Komma als Trenner readln (f, ai); // jetzt wieder komplette Zeile lesen bis ans Zeilenende writeln(ai); // Ausgabe des kompletten Arrays in der Makrokonsole close (f); setdel (f,#0); // unterdrückt die Ausgabe eines Trennzeichens setdel (f, #10); // Ausgabe eines Zeilenumbruchs entsprechend Einstellung von seteol z.B. CR/LF setdel (f, ';'); // Ausgabe mit ; getrennt end; 235.) Added: In Arrays können jetzt bis zu 1 Mio. Elemente angelegt werden. 240.) Fixed: Absturz beim Anlegen von Arrays die größer sind als erlaubt. Jetzt wird ein entsprechender Runtime- Fehler generiert. 241.) Fixed: Fokussierung beim Debuggen von Makros umgestellt, so dass jetzt alle Editfunktionen möglich sind, wenn im Makrodebugger das Makro angehalten wurde. Wird ein Schritt ausgeführt oder das Programm wieder gestartet, wird der zuletzt im Vordergrund befindliche Editor wieder fokussiert, so dass sich Makros auf diesen Editor auswirken und nicht auf den Makrodebugger. 242.) Added: Neben der hierarchischen Darstellung im Textmarkenfenster gibt es jetzt auch eine Darstellung als Tabelle. Die Tabelle verfügt über die Spalten Status, Titel, Dateiname und Zeile. Die Breite der einzelnen Spalten kann angepasst werden. Die Tabelle kann nach den Einträgen in jeder Spalte auf- und absteigend sortiert werden. 243.) Added: Im Textmarkenfenster kann über eine Option die Darstellung der Dateinamen umgestellt werden. Es kann gewählt werden zwischen vollem Dateinamen mit Pfadangabe und lediglich dem Dateinamen mit der Dateierweiterung. 244.) Added: In der hierarchischen Darstellung im Textmarkenfenster kann jetzt auch der Name jeder Textmarkenliste editiert werden. Dies ist notwendig, wenn die Dateien mit den Textmarken verschoben wurden, und FoldMaster die entsprechenden Dateien nicht mehr findet, bzw. die Textmarken einer anderen Datei zugewiesen werden sollen. 245.) Added: Makrofunktionen IterateTmModules und TmModuleSetName ergänzt: function IterateTmModules(index : integer) : string; Bestimmt die durch index angegebene Textmarkenliste (Falten im Textmarkenfenster) und liefert den eingetragenen Dateinamen der Datei mit dem die Textmarken verbunden werden sollen. procedure TmModuleSetName(index : integer; new_name : string); Erlaubt das Setzen des Dateinamens der durch index angegebenen Textmarkenliste. Dadurch können Textmarken einer anderen Datei zugeordnet werden. Die Verbindungen zu der bisherigen Datei werden gelöst. Verbindungen zur neuen Datei werden angelegt, wenn diese im Projekt vorhanden oder geladen ist. 246.) Added: Wortlisten implementiert. Diese Listen enthalten nach deren Generierung alle Worte einer Datei und werden anschließend durch neue Eingaben aktualisiert. Durch CTRL-F8 oder CTRL-SPACE wird eine Liste aller Worte angezeigt die auf das aktuell eingegebene Wortteil passen. Durch Return kann die Auswahl eingefügt werden. Es können die Listen der aktuellen Datei sowie aller Include- Dateien durchsucht werden. Folgende Makros wurden ergänzt: function IterateWords (index : integer) : string; iteriert durch die Liste aller Worte innerhalb des aktuellen Moduls. procedure WordComplete; Zeigt den Dialog zur Auswahl aus der aktuellen Wortlist an. procedure WordListGenerate; Generiert die Liste der Worte für die aktuelle Datei. procedure WordListAdd(words : string); Fügt die in einem String durch SPACE getrennten Worte in die Liste der Worte des aktuellen Moduls ein. In Optionen des Editors wurde ein Dialog zur Einstellung verschiedener Optionen eingefügt. Folgende Optionen lassen sich einstellen: nicht automatisch generieren Die Wortlisten werden nicht automatisch generiert. beim Laden generieren Die Wortlisten werden beim Laden einer Datei erzeugt. beim ersten Zugriff generieren Sobald sie die Funktion z.B. durch CTRL-F8 aktivieren, werden die Wortlisten generiert. Vorschlagen aus Include- Dateien Bei Aktivierung der Funktion werden alle Wortlisten der Include- Dateien durchsucht und Übereinstimmungen als Liste zur Auswahl gestellt. Vorschlagen aus der aktuellen Datei Es werden alle Worte der aktuellen Datei nach Übereinstimmungen durchsucht. Dateien automatisch zur Generierung laden Werden Wortlisten automatisch generiert, werden Include- Dateien für die noch keine Wortliste besteht geladen um sie zu generieren. Mindestlänge von Worten Hier kann die Mindestlänge von Worten eingestellt werden. Nur Worte die mindestens diese Länge haben werden in der Liste aufgenommen. 247.) Added: Beim Einfügen eines Templates kann jetzt auch über SHIFT- F8 (Kommando TemplateCompleteList) eine Liste der verbleibenden und übereinstimmenden Templates und Worte aus der Templatedatei zur Auswahl angezeigt werden. Wie bisher wird mit F8(Kommando TemplateComplete) das erste übereinstimmende Template eingefügt. 248.) Added: Makrofunktion TempStoreSetCaseSense ergänzt, mit der einstellbar ist ob beim Sortieren eines Tempstores Groß- und Kleinschreibung unterschieden wird oder nicht. procedure TempStoreSetCaseSense(tmps_index, casesensitive : integer); tmps_index gibt die Nummer des Tempstores an. casesensitive = 0 : Groß- und Kleinschreibung wird ignoriert <> 0 : Groß- und Kleinschreibung wird unterschieden 249.) Fixed: Beim Anzeigen einer Fundstelle, Anzeigen einer Falte aus dem Browser oder Anzeige einer Nachricht aus einem Messageport wird die Fundstelle immer am oberen Fensterrand dargestellt. => Dies wurde geändert. Die Fundstelle wird jetzt dynamisch bei 1/3 der Höhe des aktuellen Fensters dargestellt. Dies ermöglicht die Darstellung auch bei kleinen Fenstern was bei einem fest eingestellten Wert (z.B. 4) zu Problemen führen würde. 250.) Fixed: Während Makros ausgeführt werden wird der Lock (Makrofunktion Lock/Unlock) eines Editors beim Wechsel zwischen verschiedenen Fenstern nicht mehr aufgehoben. 251.) Fixed: Wird durch ein Makro eine bereits geladene Datei auf den Datenträger verändert, so erkennt FoldMaster dies nicht. Erst beim Wechsel von einer anderen Applikation zurück zu FoldMaster wird die Datei nachgeladen. 252.) Fixed: Die Einstellungen für Suchen und Ersetzen werden jetzt auch in der Desktopdatei gespeichert, so dass nach einem Neustart die letzten Einstellungen wieder vorhanden sind. Alternativ kann jetzt eingestellt werden, dass nach dem Laden der Defaulteinstellungen aus den Optionen diese einmalig in den Dialog übertragen werden, oder dass diese Einstellungen bei jedem Aufruf eines Dialogs wieder restauriert werden. 253.) Fixed: In einer zweiten Instanz von FoldMaster werden verschiedene Dateien aktualisiert, was der zweiten Instanz nicht erlaubt ist. 254.) Fixed: Die Funktionen StrInputX und InputBox erlauben jetzt die Eingabe eines Strings mit einer Länge von bis zu 8192 Zeichen. 255.) Added: Die Funktionen WindowSetPos und WindowSetSize kennen jetzt zwei weitere Fenster die über den Index 11 und 12 adressiert werden. Dabei handelt es sich um den Dialog: - zur Auswahl aus einer Liste von Strings, der über die Makrofunktion StringListInput aufrufbar ist (Index 11). - und zur Eingabe eines mehrzeiligen Strings, der über die Makrofunktion StrInputX aufrufbar ist (Index 12). 256.) Added: Funktion SetArraySize hinzugefügt, die es erlaubt die Größe eines eindimensionalen Arrays neu zu bestimmen. Das neue Array wird mit 0 initialisiert. Die Daten aus dem alten Array werden in das neue Array kopiert. Bei einer Verkleinerung des Array werden restliche Daten frei gegeben z.B. Strings gelöscht. Der Startindex bleibt erhalten. Der Maxindex wird entsprechend angepasst. procedure SetArraySize(a : array; new_size : integer); 257.) Added: Die Funktion TempStoreSelect verfügt nun über einen vierten optionalen Parameter der die Defaultauswahl für den String angibt. Wird der String innerhalb der Liste gefunden wird dieser beim Start des Dialogs selektiert. 258.) Fixed: Wenn in einer Zeile eine Textmarke gesetzt, im Textmarkenfenster gelöscht und anschließend in der Zeile erneut ein Textmarke gesetzt wird stürzt FoldMaster ab. 259.) Fixed: Mit ModuleTranslate(0) kann eine Makrodatei übersetzt werden. Entsprechend kann mit ModuleExecute(0) die Makrodatei ausgeführt werden. => Dies ist jedoch nur einmal möglich ohne die Datei nochmals zu fokussieren. 260.) Added Eine weitere Toolbar "Parameter -Hilfe" implementiert. Dabei wird eine Toolbar geöffnet, die Hilfe zu Parametern von Funktionen und Prozeduren anzeigen soll. Diese wird bei F8 und SHIFT-F8 (Kommandos TemplateComplete und TemplateCompleteList) bei Vervollständigung eines Wortes eingetragen, für das in der Templatedatei entsprechende Hilfe eingetragen ist. 261.) Added: siehe auch Punkt 225. Die Wortlisten werden in der jeweiligen Templatedatei mit einem führenden @ gekennzeichnet. Dahinter kann beliebiger erklärender Text folgen. Vor @ dürfen keine anderen Zeichen stehen. Fügen Sie ein Zeichen ein, um die jeweilige Liste zu deaktivieren. Innerhalb der Liste gibt es verschiedene Möglichkeiten: 1.) Um einfach Worte zu vervollständigen: Das Wort steht alleine in einer Zeile. 2.) Ein Kürzel mit einer Phrase ersetzen: Das Kürzel steht am Anfang der Zeile. Es folgt ein ':'. Hinter den ':' folgt der einzusetzende Text. z.B.: mfg:Mit freundlichen Grüssen 3.) Eine Funktion mit Parameterhilfe Der Funktionsname steht am Anfang der Zeile. Es folgt ein '/' und anschließend die Parameterhilfe. z.B.: strstr / char *strstr (const char *s, const char *substring); Leerzeichen am Ende des ersten Wortes und jeweils nach ':' und '/' werden ignoriert. Die Funktion ist über SHIFT-F8 (Kommando TemplateCompleteList) erreichbar. 262.) Added: In Makros können jetzt eigene Dialoge angelegt werden. Dabei stehen verschiedene Elemente auch statische Elemente zur Verfügung, wie sie auch aus den Dialogen von FoldMaster bekannt sind. Siehe auch Beispiel Dialogs.pas. Folgende Funktionen stehen zur Verfügung: DlgInit : procedure DlgInit(title : string; std_buttons : integer); DlgExecute : function DlgExecute : integer; DlgClose : procedure DlgClose(return_value : integer); DlgAddFrame : procedure DlgAddFrame (x, y, width, height : integer); DlgAddText : procedure DlgAddText (x, y, width, height : integer; text : string); DlgAddTextFlow : procedure DlgAddTextFlow (x, y, width, height : integer; text : string); DlgAddGroupBox : procedure DlgAddGroupBox (x, y, width, height : integer; title : string); DlgAddEdit : procedure DlgAddEdit (x, y, width, height : integer; var ref_val : string; multiline : boolean[; var changed : procedure]); DlgAddInteger : procedure DlgAddInteger (x, y, width, height : integer; var ref_val : integer; min,max : integer[; var changed : procedure]); DlgAddListBox : procedure DlgAddListBox (x, y, width, height : integer; item_count : integer; var ref_val : integer; var list : array of string; sort : boolean [; var sel_change [, dbl_click] : procedure]); DlgAddListWindow : procedure DlgAddListWindow (x, y, width, height : integer; title : string; var ref_val : integer; item_count : integer; var list : array of string; sort : boolean [; var sel_change[, dbl_click] : procedure]); DlgAddComboBox : procedure DlgAddComboBox (x, y, width, height : integer; item_count : integer; var ref_val : string; var list : array of string; sort : boolean [; var sel_change : procedure]); DlgAddCheckBox : procedure DlgAddCheckBox (x, y, width, height : integer; var ref_val : boolean; title : string [; var clicked : procedure]); DlgAddRadioButton : procedure DlgAddRadioButton(x, y, width, height : integer; var ref_val : boolean; title : string [; var clicked : procedure]); DlgAddProcButton : procedure DlgAddProcButton (x, y, width, height : integer; title : string; var clicked : procedure); 263.) Added: Weiteren System- Hooks ergänzt: APPACTIVATED : wird aufgerufen, wenn FoldMaster beim Wechsel von einer anderen Applikation zu FoldMaster aktiviert wurde. 264.) Fixed: In Konstantendeklarationen können keine negativen Werte angegeben werden. 265.) Fixed: werden mehrere Einträge im Messagefenster oder im Textmarkenfenster markiert und aus der lokalen Toolbar des entsprechenden Fensters der Befehl "Löschen" ausgewählt werden nicht alle markierten Einträge gelöscht. 266.) Fixed: Soll beim Suchen und Ersetzen die Fundstelle durch einen Leerstring ersetzt werden und dabei das Ersetzen bestätigt werden, bleibt FoldMaster an der ersten Fundstelle hängen, bei der die Ersetzung abgelehnt wird. 267.) Added: Folgende Makrofunktionen ergänzt: procedure EditorSelect(editor_handle : integer); Selektiert den durch sein Handle identifizierten Editor. Ein Handle ist ein eindeutiger Index, der während ein Editor offen bleibt konstant ist. procedure EditorClose(editor_handle : integer); Schließt den durch sein Handle identifizierten Editor. function GetEdHandle : integer; Liefert das Handle des aktiven Editors. function IterateEditors(rel_path : boolean; index : integer; var module_name, window_title : string) : integer; Liefert das Handle des durch index angegebenen Editors oder -1, wenn kein Editor offen, oder kein weiterer Editor vorhanden ist. In module_name wird der Name des Moduls zu der der bearbeitete Text gehört eingetragen. Über rel_path kann angegeben ob der Pfad relativ zum Projekt angegeben wird. Window_title wird auf den aktuellen Titel des Fensters gesetzt. 268.) Added: Verschiedene Inhalte von Comboboxen aus den Editoroptionen werden jetzt in der Desktop- Datei gespeichert. 269.) Added: Makrofunktion IterateMsgPorts ergänzt: function IterateMsgPorts (index : integer):string; liefert den Namen des durch index indizierten MessagePorts, oder einen Leerstring wenn keine weiteren Messageports vorhanden sind. 270.) Added: Die Makrofunktion IterateMessages hat einen weiteren optionalen Parameter bekommen, der die Ebene des Eintrages zurückgibt. Die Funktion MessageGetPort ergänzt. Zusätzlicher Parameter für MessageaddSubGroup. Zusätzliche Funktion zum iterieren eines nicht aktiven Ports. function IterateMessages (index : integer; var module_name, message : string; var line, pos [, level] : integer): integer; level = 1 -> Es handelt sich um eine Gruppe level >= 2 -> es handelt sich um eine SubGruppe der Ebene 2 oder höher function IteratePortMessages (port_name : string, index : integer; var module_name, message : string; var line, pos, level : integer): integer; Gleiche Funktionalität wie IterateMessages, nur kann der Name des Ports angegeben werden, so dass der Port nicht sichtbar gemacht werden muss. Der Parameter level ist nicht optional und muss immer angegeben werden. function MessageGetPort : string; liefert den Namen des aktuellen MessagePorts. procedure MessageAddSubGroup(port_name, group_name, file_name : string; line_no [, level]); Die Prozedur MessageAddSubGroup hat einen weiteren optionalen Parameter bekommen, der das Anlegen einer Gruppe in einem tieferen Level erlaubt. Bei der Angabe eines Level der Größer ist als der der aktuellen Gruppe wird eine Subgruppe darunter angelegt unabhängig vom genauen Wert von Level. Ansonsten wird auf dem korrekten Level eingefügt jeweils am Ende der Liste. 271.) Fixed: Beim Umschalten von Messageports wird jetzt die letzte Cursorposition wieder restauriert. 272.) Added: Beim Öffnen von Fenstern wird deren Größe jetzt so eingestellt, dass die Fenster immer komplett sichtbar sind. 273.) Added: Die Funktionen TempstoreSelect und StringListInput haben einen weiteren optionalen Parameter bekommen, mit dem das Sortieren in der Liste aus- oder eingeschaltet werden kann. Solange der Parameter nicht angegeben ist, wird die Liste sortiert. 274.) Added: Über CTRL- rechte Maustaste kann das Kontextmenü jetzt immer aufgerufen werden, auch wenn man die rechte Maustaste zum Schließen der Falten (Schließen u. Übergeordnete) benutzt. 275.) Fixed: Wird bei FileNameInput der Parameter fname vorbelegt, so wird im Dialog diese Vorgabe als Default- Dateiname angezeigt. 276.) Added: Makrofunktion FileOpenIcon ergänzt, um die angegebene Datei als Icon zu öffnen. Gleichzeitig wird der Editor gelockt. Dadurch werden Aktualisierungen der Oberfläche reduziert. Die Abarbeitung der Makros wird deutlich beschleunigt. FileOpenIcon kann auch zum Umschalten zwischen zwei derart geöffneten Fenstern benutzt werden. 277.) Fixed: Arrays mit einem Element werden nicht akzeptiert. 278.) Added: Die Makro- Funktionen TempStoreToClip und TempStoreFromClip ergänzt, um die zusätzlichen Zwischenspeicher in einen Tempstore zu kopieren bzw. die Inhalte des Tempstores in den angegebenen Zwischenspeicher zu kopieren. procedure TempStoreToClip (tmps_index, clip_index : integer); Kopiert den Inhalt des angegebenen Tempstores in den durch clip_index angegebenen Zwischenspeicher. Inhalte im Zwischenspeicher werden ersetzt. procedure TempStoreFromClip (tmps_index, clip_index : integer); Kopiert den Inhalt des durch clip_index angegebenen Zwischenspeichers in den angegebenen Tempstore. Inhalte im Tempstore werden ersetzt. 06.10.2002 279.) Fixed: Makro das über SyntaxDefineRwMacros für Schreiben eingebunden wird, wird nicht für Leerzeilen innerhalb der Datei aufgerufen. 280.) Fixed: Bei jedem Aufruf eines Makros wird geprüft ob Datei nachgeladen werden muss. Dies geht auf Kosten der Ausführungsgeschwindigkeit der Makros speziell bei solchen, die über SyntaxDefineRwMacros eingebunden werden. 281.) Fixed: In der Makrosprache werden Zuweisungen an Funktionen mit dem entsprechenden Typ nicht als Fehler erkannt. Zuweisungen an Funktionsnamen sind nur erlaubt um in einer Funktion den Returnwert zu setzen. 282.) Fixed: Das Makro FoldCloseToParent verhält sich anders als die Funktion bei rechter Maustaste mit der Option "Schließen und übergeordnete". FoldCloseToParent schließt auf oberster Ebene auch die Datei. 283.) Fixed: Bei Optionen von Syntaxfiltern und Wechseln vom "Binary"- Filter zurück zu einem anderen Filter werden nicht alle Felder freigeschaltet. 284.) Fixed: Bei umfangreichen Makros, die EditorKommandos verwenden, werden extrem viele Undo- Einträge generiert. FoldMaster kennt keine Begrenzung. => maximale Anzahl UNDO- Einträge auf 5000 pro Datei festgelegt. 10.10.2002 285.) Fixed: Bei Includedateien in C/C++ werden Dateien in <> nicht berücksichtigt. => Dies wurde implementiert. Die Funktion IterateIncludes erhält einen zusätzlichen optionalen Parameter der angibt ob es sich bei der indizierten Datei um eine Systemincludedatei handelt. function IterateIncludes (rel_path : boolean; index : integer [; var sys_include : boolean]) : string; 286.) Added: Makro TempStoreSetBlkMode ergänzt, um den Blockmodus für den angegebenen Tempstore zu setzen. procedure TempStoreSetBlkMode (tmps_index, blkmode : integer); Dabei gilt für blkmode: 0 : Textblock 1 : Spaltenblock 2 : Zeilenblock alle anderen Werte werden als Zeilenblock interpretiert. 287.) Fixed: Laut History ist der neue Parameter der Funktion "IterateMessages" optional. Wenn ich diesen Parameter aber nicht angebe, stürzt FoldMaster bei der Ausführung ab. 288.) Fixed: Werden DlgAdd-Routinen innerhalb von referenzierten Routinen aufgerufen, die nach DlgExecute gestartet werden so stürzt FoldMaster ab. 289.) Fixed: FoldMaster merkt sich jetzt auch die Position der Toolbars. 290.) Added: Suchen und Ersetzen Dialoge umgestellt. Modale wie auch nicht modale Dialoge sehen jetzt identisch aus und bieten die gleiche Funktionalität. Zusätzlich können die Optionen unsichtbar gemacht werden, wodurch der Dialog kleiner wird. 291.) Fixed: Wurde ein Tempstore mit TempStoreClear gelöscht und mit TempStoreToClip in einen Zwischenspeicher übertragen, wird der Inhalt des Zwischenspeichers zwar gelöscht, aber der Eintrag im Menü bleibt bestehen. 292.) Fixed: Nach Zeilen umbrechen im Dokument stürzt FoldMaster ab, wenn UNDO betätigt wird. 293.) Fixed: Probleme bei ESC- Taste in Kommandozeile der Makrokonsole oder im Eingabefeld im Textmarkenfenster. In beiden Fällen wird versucht das entsprechende Feld zu schließen was zu Problemen führt. 294.) Added: Dritter Kommentarstil für definierbare Syntaxfilter verfügbar gemacht. Makro "SyntaxDefineThirdCom" ergänzt. 295.) Fixed: Vorgaben des Dateinamens für FileNameInput werden nicht korrekt verarbeitet. Jetzt ist auch die Vorgabe eines Startverzeichnisses möglich. 296.) Fixed: In HTML- Dateien Problem mit mehrzeiligen Kommentaren. 297.) Fixed: Problem mit XML- CDATA Sektionen. Diese werden nicht korrekt gespeichert. Problem mit Kommentaren, wo Sonderzeichen wie > ebenfalls durch z.B. > ersetzt werden. 298.) Fixed: Wenn in einem Syntaxfilter keine Extension angegeben wird, wird im Dateidialog die Liste der Filter nach diesem Eintrag abgeschnitten. 299.) Fixed: FoldMaster beherrscht keine Dateinamen im UNC- Format. \\servername\sharename\dir\name.ext 300.) Fixed: Ab aktueller Position rückwärts suchen im Projekt, geht nicht, wenn Cursor innerhalb eines Moduls des Projekts steht. 301.) Fixed: Wird in einem als Zeilenblock markierten Bereich gesucht werden Vorkommen in der letzten Zeile nicht gefunden und ersetzt. 302.) Fixed: Suchen- Operationen lassen sich nicht auf eine Spaltenblockmarkierung einschränken. 303.) Fixed: Suche kann nicht wiederholt auf eine Markierung angewendet werden. 304.) Added: Maximale Anzahl Zeichen im Infotext einer Textmarke vergrößert auf 2048 Zeichen. 305.) Added: Folgende Makros ergänzt: TextmarkSetInfo : Setzen des Infotextes einer Textmarke in der aktuellen Zeile GetTextmarkInfo : Ermittelt den Infotext einer Textmarke in der aktuellen Zeile GetTextmarkState : Ermittelt den Zustand einer Textmarke in der aktuellen Zeile FileNameGetServer : Ermittelt den Servernamen aus einem Pfad in UNC- Notation FileNameGetServerShare: Ermittelt den Servernamen und den Sharenamen aus einem Pfad in UNC- Notation. 306.) Added: TmListGet : Funktion um eine Textmarke bei gegebenem Modulnamen und gegebener Zeilennummer zu ermitteln. 307.) Fixed: Zählung der Zeilennummern von Textmarken korrigiert. Angaben im Textmarkenfenster stimmen jetzt mit Zeilenangabe in der Datei überein. Dies trifft auch auf Editor zu, solange keinen neuen Zeilen eingefügt oder Zeilen gelöscht wurden. Um Textmarken und Editor zu synchronisieren muss Datei gespeichert werden. 308.) Added: Makrofunktion TextmarkGetIndex ergänzt, um den Index einer Textmarke über deren Namen zu ermitteln. Weitere Infos können dann über TextmarkIterateAll abgefragt werden. 309.) Added: MakroFunktion IsFirstInstance ergänzt, um festzustellen ob die aktuelle Instanz die erste Instanz ist. 310.) Added: Block sortieren eingefügt. Entsprechendes Makro BlockSort eingeführt. Die Funktion sortiert den markierten Bereich zeilenweise auf- of absteigend. Groß- und Kleinschreibung kann ignoriert werden. Der Offset, ab dem der Vergleich innerhalb der Zeile beginnen soll, kann eingestellt werden. --------------------------------------------------------------- Version veröffentlicht am 18.12.2002 --------------------------------------------------------------- (*}}}*) (*{{{ FoldMaster Version 1.62*) --------------------------------------------------------------- FoldMaster Version 1.62 --------------------------------------------------------------- 311.) Fixed: Bei Angabe einer Datei in der Kommandozeile hinter den Optionen -P, -T, -O und -L wird ein Dateiname der Leerzeichen enthält nicht richtig verarbeitet, auch wenn dieser korrekt in " oder ' eingebettet wurde. 312.) Added: Über den Kommandozeilenparameter -K kann jetzt eine Konfigurationsdatei angegeben werden, die anstatt FMASTER.INI aus dem Windows- Verzeichnis verwendet werden soll. Diese Datei kann sich auch in einem anderen Verzeichnis befinden. In diesem Fall muss jedoch der komplette Pfad angegeben werden. 313.) Added: Für den Hex- Editor kann ein eigener Font eingestellt werden. 314.) Added: Dateien vergleichen binär im Hex- Editor oder zeilenweise im Texteditor. Binärer Vergleich: ================== Dateien werden dabei byteweise verglichen. Unterschiede werden farblich hervorgehoben. Es gibt drei Modi: Byteweise : Der Vergleich wird byteweise durchgeführt. Eine Synchronisation findet nicht statt, wenn in einer Datei Bytes eingefügt oder gelöscht wurden. Interaktiv: Dabei wird immer ausgehend von der aktuellen Cursorposition die nächste unterschiedliche Stelle gesucht. FoldMaster markiert diese Stelle entsprechend. Bei Bedarf kann der Cursor selbst versetzt werden. Bleibt die Markierung bestehen, wird beim Suchen der nächsten Differenz der Cursor zuerst an das Ende der Markierung gesetzt. Synchronisierend: FoldMaster versucht selbst beide Dateien zu synchronisieren und festzustellen, wo Bereiche gelöscht, geändert oder hinzugekommen sind. Jeder Bereich wird im Messagefenster im Tab "xcmp" eingetragen und im Editor entsprechend farblich markiert. Durch Doppelklick auf einen der Einträge im Messagefenster werden die entsprechenden Bereiche in beiden Dateien markiert. Zeilenweiser Vergleich: ======================= Dateien müssen im Texteditor geöffnet sein. Sie werden zeilenweise verglichen. Im Messagefenster werden alle unterschiedlichen und gleichen Bereiche aufgelistet. Es kann angegeben werden, dass beim Vergleich unterschiedliche Anzahl von Leerzeichen und Tabulatoren ignoriert werden, oder dass Groß- und Kleinschreibung ignoriert wird. In diesem Modus werden immer nur ganze Zeilen als geändert, ergänzt oder gelöscht gekennzeichnet. Markierungen im Editor ====================== In beiden Fällen können die Bereiche im Editor entsprechend markiert werden. Beim Textvergleich werden im Editor zusätzliche Füllzeilen eingefügt, damit beide Dateien nebeneinander angezeigt werden können. Schalten Sie dazu Synchronisiertes Scrolling ein und expandieren Sie alle Falten in den entsprechenden Fenstern. MAKROS: ======= Folgende Makros wurden ergänzt: CompareDlg : Ruft den Dialog zur Eingabe der Dateinamen und zur Einstellung der Optionen auf. CompareRepeat : Wiederholt die letzte Vergleichsoperation. CompareRemove : Entfernt aus allen Editoren die entsprechenden Markierungen CompareNextDiff : Sucht die nächste Differenz Zuvor muss ein Vergleich durchgeführt worden sein ComparePrevDiff : Sucht die vorhergehende Differenz. Zuvor muss ein Vergleich durchgeführt worden sein (*{{{ CompareSetHexRange*) procedure CompareSetHexRange(sync_range, matching_bytes : integer); Stellt sync_range und matching_bytes für den binären Vergleich ein. sync_range : integer; Anzahl von Bytes, die nach einer Übereinstimmung durchsucht werden sollen. Eine höhere Einstellung bedeutet eine längere Bearbeitungszeit. Wurde in einer Datei viel eingefügt muss diese Zahl entsprechend höher gewählt werden. matching_bytes : integer; Ist die Anzahl Bytes die mindestens übereinstimmen müssen, damit eine Übereinstimmung erkannt wird. (*}}}*) (*{{{ CompareHex*) procedure CompareHex(file1, file2, options : string; offset1, offset2 : integer); Binärer Dateivergleich aufrufen, wobei alle Informationen als Parameter mit gegeben werden. Beide Dateien sollten als binary gekennzeichnet sein. file1 : Name der ersten (neueren) Datei file2 : Name der zweiten (älteren) Datei options : string; 'B' - Vergleich Byte für Byte 'M' - Manuelle Synchronisation 'S' - Automatische Synchronisation mit Eintrag der Bereich im Messagefenster. 'V' - Fenster vertikal anordnen 'H' - Fenster horizontal anordnen 'D' - nur Differenzen in Messagefenster eintragen 'R' - Zeilen im Editor werden entsprechend markiert. offset1 : integer; Bytes die am Dateianfang ignoriert werden sollen offset2 : integer; Bytes die am Dateianfang ignoriert werden sollen (*}}}*) (*{{{ CompareSetSyncRange*) procedure CompareSetSyncRange(sync_range : integer); Erlaubt die Angabe des sync_ranges beim Textvergleich. sync_range : Anzahl von Zeilen, die nach einer Übereinstimmung durchsucht werden sollen. Wurden in einer Datei viele Zeilen ergänzt, ist diese Zahl größer zu wählen. (*}}}*) (*{{{ CompareText*) procedure CompareText(file1, file2, options : string; offset1, offset2 : integer); Zeilenweiser Vergleich zweier Textdateien. Beide Dateien sollen nicht als binary gekennzeichnet sein. file1 : Name der ersten (neueren) Datei file2 : Name der zweiten (älteren) Datei options : Verschiedene Optionen 'U' - Groß- Kleinschreibung unterscheiden 'C' - Leerzeichen und Tabulatoren kollabieren. Eine Reihe von Leerzeichen und/oder Tabulatoren wird jeweils als ein einzelnes Leerzeichen behandelt. 'V' - Fenster vertikal anordnen 'H' - Fenster horizontal anordnen 'D' - nur Differenzen in Messagefenster eintragen 'R' - Zeilen im Editor werden entsprechend markiert. offset1 : integer; Zeilen die am Dateianfang ignoriert werden sollen offset2 : integer; Zeilen die am Dateianfang ignoriert werden sollen (*}}}*) (*{{{ CompareSetMacro*) procedure CompareSetMacro(macro_name : string); Erlaubt das Eintragen eines Makros, das bei jedem Bereich aufgerufen wird. es wird angegeben, ob es sich dabei um eine Übereinstimmung, Änderung, Ergänzung, oder Löschung handelt. Es wird jeweils der Anfang des Bereichs und die Länge angegeben. Bei einem binären Vergleich erfolgt die Angabe in Byte, bei einem Textvergleich erfolgt die Angabe in Zeilen. Kann benutzt werden um einen Report zu generieren. Deklaration des Makros für CompareSetMacro: procedure TxtCompReporter( mode, // 0 - Init, 1-Match, 2-Changed, 3-Added, 4-Deleted, 5-End ed1_handle, // Handle des ersten Editors ed1_pos, // Position in Zeilen bzw. Bytes ed1_size, // Größe des Bereichs ed2_handle, ed2_pos, ed2_size : integer); (*}}}*) (*{{{ FilesMatching*) FilesMatching function FilesMatching(dest_file, src_file : string; var offset : integer); Schneller Vergleich zweier Dateien auf Datenträger. Dateien, die im Editor offen sind, sollten zuerst gespeichert werden. Es werden die Namen der beiden Dateien mit optionalem Pfad übergeben. Die Funktion liefert -1, wenn eine der beiden Dateien nicht geöffnet werden konnte. Sie liefert 0 wenn die Dateien unterschiedlich sind. offset ist der Offset des ersten unterschiedlichen Bytes. Sie liefert 1, wenn die Dateien identisch sind. (*}}}*) 315.) Fixed: Beim zeilenweisen Einlesen einer Textdatei mit readln über einen String wird jede zweite Zeile nicht eingelesen. 316.) Added: Der Dialog zur Auswahl eines Templates bzw. eines Wortes bei der Autovervollständigung verbessert. Dialog jetzt verschiebbar und in der Größe änderbar. Größe wird gespeichert. Durch Eingabe von einzelnen Zeichen wird die Selektion aktualisiert. Bei Wort vervollständigen über CTRL- Space werden jetzt auch Templates aus der Template- Datei aufgelistet. Worte, Templates und Phrasen werden durch entsprechende Symbole gekennzeichnet. 317.) Added: Die Liste der Include- Dateien wird jetzt nach der Definitionszeile sortiert. Entsprechend wird bei der Makrofunktion IterateIncludes die korrekte Reihenfolge eingehalten. 318.) Fixed: Radio buttons in Optionen/Editor/Maus/rechte Taste funktionieren nicht korrekt. 319.) Fixed: Die Zeilen- und Pos-Angaben von IterateMessage und MessageAddMessage sind nicht kompatibel. Die Zeilennummer, welche man mit MessageAddMessage einträgt, wird bei IterateMessage um eins erhöht zurückgegeben. 320.) Added: Eine Textfalte "Wechsel für Syntax" erlaubt mehrere SyntaxFilter in einer Datei zu benutzen, wie es z.B. in HTML- Dateien vorkommen kann. Der Titel der Falte muss dem Namen des entsprechenden SyntaxFilters entsprechen. Der Titel der Falte wird bereits im neuen Syntaxstil ausgegeben. Z.B. in HTML (Im Beispiel sind zu viele Leerzeichen!) 321.) Added: Icon in Tableiste um anzuzeigen, welche Module geändert sind. Grün : Modul wurde nicht geändert oder wurde bereits gespeichert. Gelb : Modul enthält Änderungen, die noch nicht gespeichert sind. 322.) Added: 6 Sätze von reservierten Worten möglich. Die Makros, um reservierte Worte zu ergänzen, wurden entsprechend erweitert. SyntaxDefineResWords SyntaxDefineAddResW Diese haben jetzt einen weiteren optionalen Parameter, der den Satz von reservierten Worten angibt, in dem die angegebenen Worte eingetragen werden. Es handelt sich um einen Integer Parameter. Wird der Parameter weggelassen, werden die Worte in den Satz 0 eingetragen. Wird 1 angegeben, haben diese Makros jetzt die gleiche Wirkung wie SyntaxDefineAuxWords bzw. SyntaxDefineAddAuxW. Folgende Makros wurden nicht verändert, tragen die Worte aber in den Satz 1 ein: SyntaxDefineAuxWords SyntaxDefineAddAuxW 323.) Added: Neue Makros: (*{{{ MessagePortGetIndex*) MessagePortGetIndex : function MessagePortGetIndex(port_name : string) : integer; Ermittelt den Index der im angegebenen MessagePort aktiven Message. Erwartet als Parameter den Namen des MessagePorts. (*}}}*) (*{{{ MessagePortGetCount*) MessagePortGetCount : function MessagePortGetCount(port_name : string) : integer; Ermittelt die Anzahl von Messages im angegebenen MessagePort. Erwartet als ersten Parameter den Namen des MessagePorts. (*}}}*) (*{{{ MessagePortActivate*) MessagePortActivate : function MessagePortActivate(port_name : string; index : integer) : boolean; Aktiviert die angegebene Nachricht im ebenfalls angegebenen MessagePort. Der erste Parameter ist der Name des Ports. Der zweite Parameter ist der Index der Nachricht. Die Zählung beginnt hier bei 0. Die Funktion liefert true, wenn eine Message mit dem angegebenem Index gefunden werden konnte. (*}}}*) 324.) Added: Makros ergänzt um einen TempStore in das Clipboard des Systems zu kopieren bzw. einen TempStore aus dem Clipboard des Systems zu initialisieren. (*{{{ TempStoreToSysClip*) procedure TempStoreToSysClip (tempstore : integer); (*}}}*) (*{{{ TempStoreFromSysClip*) procedure TempStoreFromSysClip (tempstore : integer); (*}}}*) 325.) Fixed: Folgende Anweisung in einem Makro geht nicht und führt zu undefinierten Ergebnissen bis zum Absturz von FoldMaster. s := chr(39) + 'Text' + chr(39); 326.) Fixed: SearchText, RepeatSearch und LineDown ... funktionieren jetzt auch in Dateien, die mit FileOpenIcon geöffnet wurden. Zusätzlich kann Lock ausgeführt werden, um die Geschwindigkeit zu erhöhen. 327.) Fixed: Nach FileOpenIcon wird die Anzeige nicht aktualisiert, solange bis zwischen Fenstern gewechselt wurde. 328.) Fixed: Nach der Ausführung eines Makros werden jetzt alle Locks wieder zurückgesetzt. 329.) Fixed: Beim Ausdrucken werden Faltenenden unterschlagen, wenn diese direkt hintereinander kommen. 330.) Fixed: Die Funktion Copy, die verwendet wird um einen Teilstring zu extrahieren, liefert jetzt einen Leerstring, wenn als Count 0 angegeben wird. 331.) Fixed: Zuweisung von Charactern an String- Arrays geht jetzt. for i := 1 to length(s)-1 do begin v := chr(i+'0'); s[i] := s[i+1]; t[i] := v; writeln(s, ' ', t); end; 332.) Fixed: Bei der Suche in allen Projektdateien und allen offenen Dateien mittels der Funktion "SearchInFiles" reagiert der Button "Suchen anhalten" nicht. 332.) Fixed: Bei der Suche in allen Projektdateien und allen offenen Dateien mittels der Funktion "SearchInFiles" gibt es keine Anzeige, um zu sehen dass FoldMaster gerade arbeitet. => Statuszeile wird jetzt aktualisiert. 334.) Fixed: Absturz bei MatchPairX('{', '}', ''). 335.) Added: MessageAddMessage mit einem weiteren optionalen Parameter der den ErrorLevel angibt: 0 - Normal 1 - Warning 2 - Error Die Zeilen werden entsprechend hervorgehoben. Wird der Parameter nicht angegeben, wird der ErrorLevel anhand von bestimmten Schlüsselwörtern im Text versucht zu ermitteln. 336.) Fixed: Die Makros MessageAddGroup, MessageAddGroupRef und MessageAddSubGroup bringen den Port immer in den Vordergrund. => Die Makros bringen den angegebenen Port nicht mehr in den Vordergrund. Bei Bedarf muss dies mit MessageSetPort erfolgen. 337.) Added: Die Größe des Property- Dialogs im unteren Teil des Textmarkenfenster lässt sich jetzt einstellen. ------ 03.02.2003 338.) Fixed: Schließen einer Falte über den Menüpunkt "Falten| Schließen" funktioniert nicht, wenn Falte leer ist. 339.) Added: Textmarken bzw. Notizen können jetzt auch angelegt werden, ohne mit einer Datei verknüpft zu werden. Dazu lassen sich im Textmarkenfenster entsprechende Listen einfügen, die diese Notizen aufnehmen. Jeder Textmarke kann jetzt eine Priorität zugeordnet werden. In der Tabellen- ansicht kann nach diesen Prioritäten sortiert werden. Die entsprechenden Dialoge verfügen über ein zusätzliches Eingabefeld für die Priorität. Folgende Prozeduren und Funktionen sind neu oder haben einen zusätzlichen Parameter erhalten, um die Priorität abzufragen bzw. zu setzen. function GetTextmarkPrio : integer; procedure TmListAdd (file_name, title, info : string; line, column, state, prio : integer); function TmListGet (file_name : string; line : integer; var title, info : string; var status [ , prio] : integer): boolean; procedure TmListSet (file_name, new_title, new_info : string; line, new_column, new_state, new_prio : integer); function TextmarkIterateAll(module_only : boolean; index : integer; var module_name : string; var textmark_line : integer; var title, info : string; var state [ , prio] : integer) : boolean; procedure TodoListAdd (todo_list_name : string); Legt eine neue Liste an, ohne Verknüpfung zu einer Datei procedure TodoListAddTodo (todo_list_name, title, info : string; state, prio : integer); Legt einen neuen Eintrag in der angegebenen Liste an. Die generierte Textmarke hat keinen Link zu einer Datei. 340.) Added: Ergänzung zu Parameterhilfe. Im Falle einer Funktion, die mit einer Parameterhilfe angegeben wird kann jetzt auch // statt nur / angegeben werden. Dadurch wird die farbliche Darstellung im Fenster unterdrückt. 341.) Fixed: Beim Aufruf von FoldMaster kann in der Kommandozeile jeweils eine alternative Datei für die Optionen und die Textmarken angegeben werden. Wird dabei kein Pfad mit angegeben, wird versucht die Datei aus dem Startverzeichnis zu laden. Wird die Datei dort jedoch nicht gefunden wird die Datei im Installationsverzeichnis von FoldMaster gesucht. In diesem Fall wird die Datei beim Speichern nicht in das Installationsverzeichnis zurück geschrieben. 342.) Fixed: Im Menü Automation erscheint das Untermenü "Schalter" nicht mehr. 343.) Fixed: In DlgAddListWindow wird die Spaltenbreite jetzt korrekt berechnet, so dass zumindest der angegebene Text komplett dargestellt werden kann. 344.) Fixed: Das Einrücken von Templates in Zeilen mit Tabulatoren führt zur fehlerhaften Einrückung der Zeilen des eingefügten Templates, wenn dieses mehrere Zeilen umfasst. Die Cursor- Position wird dabei ebenfalls nicht korrekt gesetzt. => Neu: Template werden jetzt korrekt eingerückt. Als Vorlage zum Einrücken wird der Text aus der aktuellen Zeile verwendet. Dabei werden auch Tabulatoren in allen Zeilen des Templates entsprechend eingefügt. 345.) Fixed: Beim Ermitteln der automatischen Abhängigkeiten für Make werden Include- Dateien, die relativ angegeben sind nicht gefunden. => Neu: An dieser Stelle werden relative Pfade korrekt bearbeitet: 1.) relativ zum aktuellen Modul 2.) relativ zum Projektverzeichnis 3.) relativ zu den in der Variablen INCDIRS angegebenen Verzeichnissen. ---- 14.02.03 346.) Fixed: In Projektdateien werden fälschlicherweise die kompletten Inhalte von Subprojekten mit abgespeichert, statt nur einer Referenz auf das Projekt. Die Inhalte werden beim Laden jedoch ignoriert. 347.) Fixed: Werden Include- Dateien innerhalb von Makrodateien auch in ein Projekt aufgenommen, werden diese nicht korrekt gelesen, wenn sie nicht geöffnet wurden. 348.) Added: Die Makrofunktion IterateModules hat einen zusätzlichen optionalen Parameter, der nach dem Aufruf die ID der entsprechenden Liste enthält. Die id entspricht dem Wert von GetID. 349.) Fixed: Absturz beim Laden eines Projektes über "Projekt nur zum Lesen öffnen...". 350.) Fixed: Über SyntaxDefineOptions kann der HEX- Mode für einen SyntaxFilter nicht eingestellt werden. 351.) Fixed: Beim Speichern von einfachen Textzeilen innerhalb von verschachtelten Falten innerhalb von Projekten wird Einrückung nicht korrekt behandelt. 352.) Fixed: Entities werden in HTML jetzt wie Zeichenkonstanten eingefärbt. 353.) Fixed: TempStoreGetCount und TempStoreGetLineAt funktionieren nicht korrekt, wenn mit TempStoreCopy ein Text kopiert wurde, der Falten enthält. Der Inhalt dieser Falten wird ignoriert. 354.) Fixed: Beim Ausdruck und in der Druckvorschau werden $ Zeichen am Anfang jedes Faltenheaders ausgegeben, wenn Option "markierter Bereich" ausdrucken gewählt wurde. Bei Druckvorschau mit Option "markierter Bereich" stürzt FoldMaster ab. 355.) Fixed: GetLine und ReplaceLine sind nicht kompatibel. Wird eine Zeile mit GetLine gelesen und mit ReplaceLine wieder eingesetzt, gehen führende Leerzeichen verloren. => GetLine wurde angepasst und liefert jetzt die Zeile mit allen führenden Leerzeichen. 356.) Added: Weitere durch den Anwender definierbare Toolbar ergänzt. Diese ist mit dem Index 6 über die entsprechenden Makrofunktionen zu programmieren. --- 03.03.2003 ---- 357.) Added: Bei Make wird vor jedem Lauf der Inhalt des Trace- Ports gelöscht. 358.) Added: Makro- Funktion TempStoreGetBlkMode ergänzt um nach TempStoreCopy oder TempStoreCut Blockmodus des Tempstores zu ermitteln. (*{{{ function TempStoreGetBlkMode(tmps_index : integer) : integer;*) function TempStoreGetBlkMode(tmps_index : integer) : integer; Die Funktion liefert 0 : bei Textblock 1 : bei Spaltenblock 2 : bei Zeilenblock (*}}}*) 359.) Added: Makrofunktion TempStoreSort deutlich beschleunigt. 360.) Added: Makrofunktion TempStoreGetStrSorted ergänzt. Die Funktion hat die gleichen Parameter wie TempStoreGetLineStr. Die Funktion sucht jedoch nicht eine Übereinstimmung eines Substrings sondern eine Übereinstimmung ab dem angegebenen Offset, wobei jedoch nur so viele Zeichen verglichen werden wie der Parameter s Zeichen hat. Die Funktion erwartet zudem, dass der Tempstore aufsteigend sortiert vorliegt. Dazu kann die Funktion TempStoreSort verwendet werden. (*{{{ function TempStoreGetStrSorted (tmps_index : integer; s : string;*) function TempStoreGetStrSorted (tmps_index : integer; s : string; var start_index : integer; from, options : integer): string; tmps_index : Index des TempStores s : Zu suchende Zeichenkette. start_index: Index ab dem gesucht werden soll Wird auf den Index des gefundenen Eintrages gesetzt. from : Offset ab dem ein Eintrag mit s verglichen werden soll. Dieser Offset sollte identisch sein mit der entsprechenden Angabe bei TempStoreSort. options : 1 : Bei der Suche wird Groß- und Kleinschreibung beachtet 0 : Groß- und Kleinschreibung wird ignoriert. (*}}}*) 361.) Added: Die Funktionen und Prozeduren StrLwr, StrUpr, StrLower, StrUpper, UpCase und DownCase berücksichtigen jetzt Umlaute entsprechend der Sprache die in FoldMaster eingestellt ist. 362.) Added: Bei der Suche in Dateien kann jetzt unterschieden werden ob die Suche im Projekt oder im Hauptprojekt durchgeführt wird. Werden Sub- Projekte verwendet, kann die Suche damit auf eines der Sub. Projekte beschränkt werden. 363.) Added: Eine Makrofunktion zum Vergleichen von Strings. (*{{{ function StrCmp(s1, s2 : string; casesense : boolean) : integer;*) function StrCmp(s1, s2 : string; casesense : boolean) : integer; Die Funktion ermittelt die Position des ersten ungleichen Zeichens und liefert wenn s1 > s2 den positiven Wert wenn s1 < s2 den negativen Wert der Position oder 0 wenn beide Strings identisch sind. (*}}}*) 364.) Added: Funktion IsFoldEnd ergänzt um abzufragen, ob Cursor auf einem Faltenende steht. 365.) Fixed: Das Lesen von XML- Dateien wurde deutlich beschleunigt. 366.) Added: Makrofunktionen DlgCreate und DlgUpdate eingeführt. Beide Prozeduren erhalten keine Parameter. Mit DlgUpdate wird der Dialog aufgefordert alle Elemente im Dialog zu aktualisieren. Mit DlgCreate kann ein nicht modaler Dialog permanent angezeigt werden. Der Dialog hat eine Lebenszeit wie der Block in dem DlgInit aufgerufen wird. Sinn macht es DlgInit im Hauptprogramm aufzurufen. Über Funktionen und Prozeduren des Programms kann der Dialog gesteuert werden. Dabei ist zu beachten, dass die Elemente für den Dialog nach dem Laden des Programms nur einmal angelegt werden dürfen. z.B. Programm zur dauernden Anzeige einer Message: (*{{{ PROGRAM MyDialog;*) PROGRAM MyDialog; var msg : string; created : boolean; // steht nach dem Laden auf False procedure MyDialogClose; begin DlgClose(0); end; procedure MyDialogSetString(news : string); begin msg := news; DlgUpdate; end; procedure MyDialogShow; begin DlgCreate; end; procedure MyDialogSetup; begin if (NOT created) then begin DlgAddEdit(0,0,100,50, msg, true); end; created := true; end; BEGIN DlgInit('MyDialog', 1); // Änderungen am Titel wären möglich MyDialogSetup; MyDialogShow; END. (*}}}*) 367.) Added: Folgende boolsche Variablen ergänzt zur Steuerung der Darstellung. ViewOpt_Dragbar : Dragbar sichtbar ViewOpt_LocalMarks : Lokale oder globale Textmarken ViewOpt_Animate : Beim Suchen&Ersetzen Fundstellen anzeigen ViewOpt_ShowTab : Tabulatoren darstellen ViewOpt_PageMargin : Seitengrenze anzeigen ViewOpt_ModalDialogs : Modale Dialoge für Suchen und Suchen&Ersetzen ViewOpt_LocalToolbars : Lokale Toolbar in Textmarken, Message, Browsefenstern sichtbar ViewOpt_LocalEditorTb : Lokale Toolbar in Editor sichtbar ViewOpt_ExplorerDlgs : Explorer Dateidialoge ViewOpt_LineNumbers : Zeilennummern sichtbar ViewOpt_ScrollInfo : Info beim Scrollen 368.) Added: Wird bei Drag&Drop in der Dragbar die ALT- Taste gedrückt gehalten, wird eine eingetragene Textmarke verschoben. Das ist besonders nützlich, wenn die Datei außerhalb von FoldMaster geändert wurde, so dass die Textmarken nicht mehr synchron sind. 369.) Added: Im Textmarkenfenster kann jetzt eine Textmarke mit einer anderen Datei verknüpft werden. Globale Textmarken ohne Verknüpfung können so einer Datei zugewiesen werden. Genauso können Textmarken aus einer Datei einer globalen Todoliste zugeordnet werden. 370.) Added: Im Textmarkenfenster werden die Listen jetzt sortiert eingefügt, wobei globale Listen für Todos und Notizen zuerst einsortiert werden. 371.) Added: Statuszeile in Textmarkenfenster ergänzt. In der Statuszeile wird eine Statistik ausgegeben, wie viele Textmarken mit dem jeweiligen Status eingetragen sind. ---- 14.03.03 ----- 372.) Added: Bei Textmarken und Notizen kann jetzt zusätzlich ein Thema angegeben werden. Im Textmarkenfenster wurde eine entsprechende Ansicht eingeführt, in der die Textmarken thematisch sortiert werden. Folgende Makros gibt es neu: function GetTextmarkSubject : string; Diese Funktion liefert das Thema einer Textmarke, die in der aktuellen Zeile eingetragen ist. procedure TextmarkSetSubject(subject : string); Diese Prozedur setzt das Thema einer in der aktuellen Zeile eingetragenen Textmarke. procedure TextmarkAddSubject(new_subject : string); Diese Prozedur legt ein neues Thema an. Wird ein Leerstring übergeben, wird ein Dialog aufgerufen, der zur Eingabe eines Titels auffordert. Folgende Funktionen und Prozeduren haben einen zusätzlichen Parameter erhalten, um das Thema einzutragen bzw. auszulesen: NoteAdd procedure NoteAdd (title, info, subject : string; state : integer); TmListGet function TmListGet(file_name : string; line : integer; var title, info, subject : string; var status, prio : integer): boolean; TmListSet procedure TmListSet (file_name, new_title, new_info, new_subject : string; line, new_column, new_state, new_prio : integer); TmListAdd procedure TmListAdd (file_name, title, info, subject : string; line, column, state, prio : integer); TodoListAddTodo procedure TodoListAddTodo(todo_list_name, title, info, subject : string; state, prio : integer); TextmarkIterateAll function TextmarkIterateAll(module_only : boolean; index : integer; var module_name : string; var textmark_line : integer; var title, info, subject : string; var state, prio : integer) : boolean; 373.) Added: Die Funktion DlgAddText hat einen weiteren Parameter bekommen. Dabei handelt es sich um eine Referenz auf eine String- Variable. Wird die Variable angegeben, werden Änderungen in das Dialogfenster übernommen. 374.) Added: DlgAddEdit hat einen neuen Parameter der angibt ob das Eingabefeld verändert werden kann oder nicht. procedure DlgAddEdit(x, y, width, height : integer; var ref_val : string; multiline, read_only : boolean [ ; var changed : procedure]); 375.) Added: Die Funktion DlgInit hat zwei weitere optionale Parameter erhalten, die die Anfangsposition des Dialogs in Pixel angeben. Zusätzlich wird bei Schließen eines Dialogs die Position gespeichert. Wird ein Dialog mit DlgCreate wieder geöffnet, wird er an dieser Position erneut dargestellt. procedure DlgInit(title : string; std_buttons [ , default_x, default_y] : integer); 376.) Added: History- Funktion im Editor überarbeitet. Darstellung deutlich verbessert. History lässt sich jetzt global für alle zu öffnenden Editoren einstellen. 377.) Added: Bei "Datei|Neu anlegen" wird jetzt sofort Dateiname abgefragt. Dadurch kann der korrekte Dateiname in Templates eingefügt werden. 378.) Fixed: Mit den Makrofunktionen TempStoreAddLine und TempStoreGetLineAt werden nichtdruckbare Zeichen (kleiner wie #32) unterdrückt. => TempStoreGetLineAt, TempStoreGetLineStr und TempStoreGetStrSorted entsprechend korrigiert. 379.) Fixed: Das Textmarkenfenster wird nicht fokussiert und in den Vordergrund gebracht, wenn man in eines der Editfelder des Textmarkenfensters im unteren Bereich klickt. 380.) Added: SearchFold verfügt jetzt über alle Optionen wie auch SearchText außer rückwärts suchen. 381.) Fixed: Die Optionen bezüglich "Level" bei Suchen und Ersetzen entwirrt. Aktuell Die im aktuellen Editor dargestellte Liste wird durchsucht. Es werden nur Subfalten berücksichtigt, die expandiert sind. Module werden nicht durchsucht. Alle tieferen (Default- Einstellung bei SearchText) Die im aktuellen Editor geöffnete Liste und alle ihre Subfalten werden durchsucht. Achtung : Module werden nicht durchsucht. Modul Das komplette Modul der im aktuellen Editor geöffneten Liste wird durchsucht. Bei Projektdateien wird die Projektdatei komplett durchsucht. Achtung : Enthaltene Module werden nicht durchsucht. Projekt 1.) Gehört die Liste im aktuellen Editor zu einem Modul innerhalb eines Projekts wird dieses Projekt und alle darin enthaltenen Module komplett durchsucht. Ist das Modul Teil eines Subprojekts wird nur das Subprojekt durchsucht. 2.) Gehört die Liste im aktuellen Editor zu einem Projekt wird diese Liste und alle enthaltenen Subfalten mit allen enthaltenen Modulen komplett durchsucht. => Submodule werden nur in der Einstellung "Projekt" durchsucht. Folgende zusätzliche Optionen wurden für SearchText definiert: 'v' : Nur aktuelle Ebene durchsuchen. 'l' : Alle tieferen Falten durchsuchen (nicht Module). 382.) Fixed: SearchText durchsucht mit der Option "nur markierte Falten" auch Dateien, die nicht markiert sind. 383.) Fixed: Defaults werden jetzt wieder korrekt in den Suchen&Ersetzen Dialog entsprechend den Einstellungen übernommen. 384.) Added: Neue Option "Einrücken mit Tab" hinzugefügt, die es erlaubt das Einrücken von markierten Zeilen mit der Tabulator- Taste (bzw. Ausrücken mit SHIFT- TAB und Ausrichten mit CTRL-TAB) ein und auszuschalten. Über EditorOpt_IndentWithTab kann aus einem Makro auf diese Option zugegriffen werden. 385.) Added: Für Filetabs lässt sich jetzt auch der Font einstellen. Zusätzliche Option um in Filetabs nur den Dateinamen anzuzeigen, nicht den Titel der geöffneten Falte. --- 21-03-2002 ----- 386.) Fixed: MessagegetPortIndex liefert -1 für alle Ports, die nicht aktiv sind. Beim Wechsel von einem MessagePort zu einem anderen wird die alte Position im MessagePort nicht korrekt restauriert. 387.) Fixed: FoldRemoveAll oder "Falten | alle aufheben" wird der Text zwar aus den Falten herauskopiert aber die leeren Falten bleiben noch erhalten und werden nicht gelöscht. 388.) Fixed: Beim schrittweisen Ausführen eines Makros im Debugmodus funktionieren die Prüfungen mittels "FoldFound" und "TextFound" nicht. Es wird immer ein "FALSE" zurückgeliefert. 389.) Added: Folgende Funktionen wurden ergänzt, um die Einstellungen eines Syntaxfilters aus zu lesen. Die Parameter entsprechen denen von SyntaxDefinexxxxxxx. (*{{{ procedure SyntaxGetResWords (syntax_name : string; set : integer; var res_words : string);*) procedure SyntaxGetResWords (syntax_name : string; set : integer; var res_words : string); Liefert die reservierten Worte als mit Komma getrennte Liste. (*}}}*) (*{{{ procedure SyntaxGetExtension (syntax_name : string; var extensions : string; var enabled : boolean);*) procedure SyntaxGetExtension (syntax_name : string; var extensions : string; var enabled : boolean); Liefert die Dateinamenserweiterungen des Filters und ob der Filter in den Datei- Dialogen angezeigt werden soll oder nicht. (*}}}*) (*{{{ procedure SyntaxGetOptions (syntax_name : string; var options : string; var num_opts : integer);*) procedure SyntaxGetOptions (syntax_name : string; var options : string; var num_opts : integer); Liefert verschiedene Optionen in einem String. (*}}}*) (*{{{ procedure SyntaxGetComment (syntax_name : string; var start, end : string);*) procedure SyntaxGetComment (syntax_name : string; var start, end : string); Liefert Anfang und Ende des ersten Kommentars. Dieser wird auch für Faltenkommentare verwendet. Handelt es sich um Zeilenkommentare ist der zweite Parameter ein Leerstring. (*}}}*) (*{{{ procedure SyntaxGetAuxComment (syntax_name : string; var start, end : string);*) procedure SyntaxGetAuxComment (syntax_name : string; var start, end : string); Liefert Anfang und Ende des zweiten Kommentars. (*}}}*) (*{{{ procedure SyntaxGetTrdComment (syntax_name : string; var start, end : string);*) procedure SyntaxGetTrdComment (syntax_name : string; var start, end : string); Liefert Anfang und Ende des dritten Kommentars. (*}}}*) (*{{{ procedure SyntaxGetChars (syntax_name : string; var extra_word_chars, symbols : string);*) procedure SyntaxGetChars (syntax_name : string; var extra_word_chars, symbols : string); Liefert die für einen Bezeichner zugelassenen Sonderzeichen und die definierten Symbole. (*}}}*) (*{{{ procedure SyntaxGetString (syntax_name : string; var delimiter, escape : string);*) procedure SyntaxGetString (syntax_name : string; var delimiter, escape : string); Liefert das String Delimiter und das String Escape Zeichen. (*}}}*) (*{{{ procedure SyntaxGetTemplate (syntax_name : string; var template_file_name : string);*) procedure SyntaxGetTemplate (syntax_name : string; var template_file_name : string); Liefert den Dateinamen der eingetragenen Templatedatei. (*}}}*) (*{{{ function SyntaxIterate ( index : integer; var user_filter : boolean) : string;*) function SyntaxIterate ( index : integer; var user_filter : boolean) : string; Liefert den durch index indizierten Syntaxfilter, oder einen Leerstring, wenn das Ende der Liste erreicht ist. Der Parameter "user_filter" wird auf TRUE gesetzt, wenn es sich um einen vom Anwender definierten Filter handelt. (*}}}*) (*{{{ procedure SyntaxDelete(syntax_name : string);*) procedure SyntaxDelete(syntax_name : string); Löscht den angegebenen vom Anwender definierten Filter. (*}}}*) Beispiel: (*{{{ Beispiel: TestSyntaxIterate*) { TestSyntaxIterate } procedure TestSyntaxIterate; var stx_i : integer; stx_user : boolean; stx_name : string; s1,s2 : string; stx_en : boolean; stx_no : integer; begin stx_i := 0; repeat stx_name := SyntaxIterate(stx_i, stx_user); if (stx_name <> '') then begin writeln('Found : ', strfill(stx_name,20), ' User : ', stx_user); SyntaxGetResWords (stx_name, 0, s1); writeln(' ResWords0: ', s1); SyntaxGetResWords (stx_name, 1, s1); writeln(' ResWords1: ', s1); SyntaxGetResWords (stx_name, 2, s1); writeln(' ResWords2: ', s1); SyntaxGetResWords (stx_name, 3, s1); writeln(' ResWords3: ', s1); SyntaxGetResWords (stx_name, 4, s1); writeln(' ResWords4: ', s1); SyntaxGetResWords (stx_name, 5, s1); writeln(' ResWords5: ', s1); SyntaxGetExtension (stx_name, s1, stx_en); writeln(' Extensions: ', s1); writeln(' Enabled: ', stx_en); SyntaxGetOptions (stx_name, s1, stx_no); writeln(' Options: ', s1); writeln(' NumOpts: ', stx_no); SyntaxGetComment (stx_name, s1, s2); writeln(' Com1 Start: ', s1); writeln(' Com1 End: ', s2); SyntaxGetAuxComment(stx_name, s1, s2); writeln(' Com2 Start: ', s1); writeln(' Com2 End: ', s2); SyntaxGetTrdComment(stx_name, s1, s2); writeln(' Com3 Start: ', s1); writeln(' Com3 End: ', s2); SyntaxGetChars (stx_name, s1, s2); writeln(' Extra Chars:', s1); writeln(' Symbols: ', s2); SyntaxGetString (stx_name, s1, s2); writeln(' Stringbegr. ', s1); writeln(' Str Escape: ', s2); SyntaxGetTemplate (stx_name, s1); writeln(' Template: ', s1); end; inc(stx_i); until (stx_name = ''); end; (*}}}*) ---- 04.04.03 ------ 390.) Fixed: Update von Comboboxen, die mit DlgAddComboBox in einem eigenen Dialog angelegt wurden. 391.) Fixed: Unsaubere Darstellung in FileTabs. 392.) Fixed: Absturz bei TextmarkIterateAll, wenn als mod_name ein Leerstring übergeben wird und der Parameter module_only auf TRUE gesetzt wird. => Jetzt wird der Name des aktuellen Moduls eingetragen. 393.) Added: Neue Funktionen ergänzt: IsTextmarkNextOk : Zur nächsten Zeile mit einer Textmarke gehen. Liefert True, wenn Zeile gefunden wurde. IsTextmarkPrevOk : Zur vorherigen Zeile mit einer Textmarke gehen. Liefert True, wenn Zeile gefunden wurde. IsMarkedNextOk : Zur nächsten markierten Zeile gehen. Liefert True, wenn Zeile gefunden wurde. IsMarkedPrevOk : Zur vorigen markierten Zeile gehen. Liefert True, wenn Zeile gefunden wurde. 394.) Fixed: Der Parameter von DlgClose wird ignoriert. Ein Aufruf von DlgExecute liefert immer 0 auch wenn der Dialog durch einen Aufruf von DlgClose mit einem anderen Wert geschlossen wurde. 395.) Added: Funktion DlgEnable ergänzt, die es erlaubt ein Oberflächen- Element innerhalb eines Dialogs zu aktivieren oder zu deaktivieren. Dabei werden die Elemente im Dialog beginnend bei 0 entsprechend der Erstellungsreihenfolge durchnummeriert. procedure DlgEnable(id : integer; enable : boolean); Ist der Parameter enable true, wird das Element aktiviert, ist der Parameter enable false, wird das durch id identifizierte Element deaktiviert. Deaktivierte Elemente lassen sich nicht mehr anwählen oder ändern. 396.) Fixed: TmListAdd funktioniert nicht mehr. Parameter werden durch Funktion scheinbar ignoriert. 397.) Added: Funktion IterateMacroModules ergänzt, um die Liste der Makromodule zu prozessieren. Zusätzlich können einige Informationen zu jedem Modul abgefragt werden. Deklaration: function IterateMacroModules (rel_path : boolean; index : integer; var start_mode, compiled, run_count : integer; var prog_name : string); Die Funktion liefert den Dateinamen des indizierten Moduls. Parameter: rel_path : Wenn TRUE erfolgt die Angabe des Dateinamens relativ zum Installationsverzeichnis von FoldMaster. index : Ein laufender Index beginnend bei 0. start_mode : Enthält den Modus, wie ein Makromodul nach dem Starten behandelt wird: 0 : Keine Aktion 1 : Wird übersetzt 2 : Wird ausgeführt compiled : Ist 1, wenn Modul erfolgreich compiliert wurde. run_count : Ist die Anzahl, wie oft das Modul ausgeführt wurde. Aufrufe von einzelnen Funktionen aus dem Modul werden nicht gezählt. prog_name : Enthält den Namen des Programms. Entspricht der Angabe hinter dem Bezeichner "program". Beispiel: procedure TestIterateMacroModules; var s : string; i : integer; start_mode : integer; run_count : integer; compiled : integer; prg_name : string; begin i := 0; repeat s := IterateMacroModules(true, i, start_mode, compiled, run_count, prg_name); if (s <> '') then begin writeln(start_mode:3, compiled:2, run_count:3, ' ', prg_name, ' ', s); end; inc(i); until (s = ''); end; 398.) Fixed: Darstellung im HexEditor im OEM- Modus ist nicht korrekt. Im Texteditor wird beim Suchen und Ersetzen der OEM- Modus nicht berücksichtigt. => FoldMaster kann jetzt im Projekt über alle Module suchen, auch wenn sich davon welche im OEM- Modus befinden. Dies wird bei der Suche automatisch berücksichtigt. 399.) Added: Prozedur FileTabSelect ergänzt. procedure FileTabSelect(index : integer); Selektiert das Fenster mit dem angegebenen Index entsprechend der Reihenfolge in den FileTabs. Dabei ist zu berücksichtigen, dass das erste Editor- Fenster den Index 0 hat. Textmarkenfenster, Makrokonsole usw. haben demnach einen negativen Index. 400.) Added: Suchen&Ersetzen im HEX- Editor. OEM Zeichensatz- Unterstützung im HEX- Editor beim Suchen und Suchen&Ersetzen. 401.) Added: DlgInit mit zwei weiteren optionalen Parametern. Dabei handelt es sich jeweils um eine Referenz einer Prozedur. Die erste Prozedur wird aufgerufen, wenn der Dialog erstellt und angezeigt wurde. Die zweite Prozedur wird aufgerufen, wenn der Dialog geschlossen wurde. procedure DlgInit(title : string; std_buttons [ , default_x, default_y] : integer [; init, closed : procedure]); 402.) Fixed: Beim Ausdrucken und in der Druckvorschau wird beim Versuch einen markierten Bereich auszudrucken das erste Zeichen in der Zeile verschluckt. 403.) Fixed: Ist ein Editor gelockt wird trotzdem das History aktualisiert. --- 28.04.03 --- 404.) Fixed: Wird mit der Option "-K" eine alternative INI- Datei angegeben, wird im Windows- Verzeichnis trotzdem eine Datei "fmaster.ini" angelegt. => fmaster.ini wird nicht mehr angelegt, unabhängig welchen Dateinamen und welchen Pfad man einstellt. 405.) Fixed: Bei Textvergleich werden Leerzeichen und Tabs am Zeilenende und in Leerzeilen nicht ignoriert. => Im Gegensatz zu Leerzeichen innerhalb des Textes werden Leerzeichen am Zeilenende und damit auch in Leerzeilen komplett ignoriert. 406.) Fixed: Der Kommandozeilenparameter "-T" funktioniert nicht, wenn der Parameter "-O" mit angegeben wurde. => Die Reihenfolge wie Konfigurationsdateien geladen werden umgestellt. Dadurch werden nach Angabe von "-O" und "-T" die Originaldateien im FoldMaster- Verzeichnis gar nicht mehr geladen. 407.) Added: Makrovariablen ergänzt für Zugriff auf weitere interne Daten von FoldMaster: EditorOpt_BackupPath : Verzeichnis um Sicherungsdateien zu speichern EditorOpt_StartupPath : Verzeichnis aus dem FoldMaster gestartet wurde EditorOpt_FMasterPath : Installationsverzeichnis von FoldMaster EditorOpt_AuxDesktopPath : Verzeichnis und Name einer alternativen Default Desktop -Datei. Voreinstellung: "fmaster.xdk" im FoldMaster- Verzeichnis. Lässt sich über Kommandozeilenparameter "-D" ändern. EditorOpt_AuxOptionFileName : Dateiname einer anderen Optionendatei. Voreinstellung: "fmaster.fmo" im FoldMaster- Verzeichnis. Lässt sich über Kommandozeilenparameter "-O" ändern. EditorOpt_AuxTextmarkFileName : Dateiname einer alternativen Textmarkendatei. Voreinstellung: "fmaster.fmt" im FoldMaster- Verzeichnis. Lässt sich über Kommandozeilenparameter "-T" ändern. EditorOpt_FMasterConfigFile : Dateiname einer anderen Konfigdatei als "fmaster.ini", die normalerweise im Windows- Verzeichnis angelegt wird. Lässt sich über Kommandozeilenparameter "-K" ändern. 408.) Added: Funktion zum Iterieren von externen Referenzen in der Projektdatei ergänzt: function IterateExtRefs(rel_path : boolean; index : integer; var compiler, editor: string): string; Die Fuktion liefert den Dateinamen der durch index angegebenen externen Referenz. Der Parameter rel_path gibt an, ob dieser Dateiname relativ zum Projekt angegeben werden soll. compiler : Ist der eingetragene Compiler. editor : Ist der eingetragene Editor. 409.) Added: Funktion TextmarksSave ergänzt um Textmarken zu speichern. procedure TextmarksSave; keine Parameter 410.) Fixed: In Templates kann mit dem Makro $RUN jetzt auch eine interne vordefinierte Funktion aufgerufen werden. Das Kommando ist nicht mehr beschränkt auf selbst erstellte Funktionen. 411.) Fixed: Beim Vergleichen von Dateien werden neue Zeilen am Ende einer der beiden Dateien nicht als Unterschied erkannt oder markiert. ---- 12.05.2003 ---- 412.) Fixed: Die Funktion FileNameInput geht nicht wenn z.B. "D:\FmTest\" als Dateiname übergeben wird. Der Dateidialog wird nicht angezeigt. 413.) Fixed: Beim Suchen in einem Spaltenblock werden nur Vorkommen in der ersten Zeile gefunden. Vorkommen in folgenden Zeilen werden nur gefunden wenn sie sich in der Zeile weiter rechts befinden als das letzte Vorkommen. 414.) Added: Kommandozeilenparameter "-D" ergänzt, der es erlaubt den Namen und das Verzeichnis der Default- Desktop- Datei zu ändern. Die Voreinstellung für diese Datei ist "fmaster.xdk" im Installationsvezeichnis von FoldMaster. --- 21.05.2003 --- 415.) Fixed: Bei klammern eines markierten Textes werden alle Worte eines Klammernpaares eingefügt, wenn dieses aus mehreren Worten besteht. => es wird jetzt nur das erste Wort eingefügt. 416.) Added: Neue Funktion GetVariable ergänzt, die den Wert einer angegebenen Variablen liefert, ohne evtl. enthaltene Transfermakros zu ersetzen. function GetVariable(VariableName : string) : string; 417.) Fixed: Kommando "FoldHide" funktioniert nicht so wie in der Hilfe beschrieben ist, wenn Cursor in einer expandierten Liste steht: Liste wird nicht kollabiert. 418.) Fixed: Die Funktion "FoldRemove" bzw. "Falten|Aufheben" funktioniert nicht korrekt, wenn sich die Falte direkt hinter dem Ende einer expandierten Falte befindet. 419.) Added: Die Makrofunktion "TempStoreGetIdAt" ergänzt, um den Typ einer Zeile im Tempstore zu ermitteln. function TempStoreGetIdAt(tmps_index, line_index : integer) : integer; 420.) Added: Makrofunktionen "GeIndent" und "SetIndent" ergänzt, um Einrückung einer Zeile zu ermitteln bzw. zu setzen. procedure SetIndent(indent : integer); function GetIndent : integer; 421.) Fixed: Um Textmarken zu verschieben mit Drag&Drop über Drag- Bar muss die ALT- Taste gedrückt werden. 422.) Fixed: Rückwärtssuchen im OEM- Modus. 423.) Fixed: Bei "FoldMake" ohne Markierung im OEM- Modus wird Dialog geöffnet, um Titel der Falte einzulesen. Eingabe wird nicht in den OEM- Zeichensatz umgewandelt. 424.) Fixed: Im Textmarken- Fenster und Sortierung nach Themen, wird bei Eingabe im Titelfeld der Titel von mehrere Textmarken überschrieben. 425.) Added: PHP- Filter ergänzt. 426.) Added: HTML- Filter verbessert: 1.) Tags inklusive Klammern werden einheitlich eingefärbt. Das funktioniert auch über mehrere Zeilen hinweg. 2.) Automatische Erkennung von PHP- Abschnitten. Diese werden automatisch gefaltet. Dazu wird eine PHP- Falte eingefügt. Diese Falten können wie alle anderen Falten auch einen Titel haben. Falten werden wie folgt gespeichert: Faltenkopf: Um einen neuen PHP- Abschnitt einzufügen genügt es eine PHP- Falte (Id: 76) einzufügen. Die Setzung der Klammern wird automatisch durchgeführt. Innerhalb einer PHP- Falte gilt der PHP- Syntaxfilter. --- 01.06.2003 --- 427.) Added: Filter in Textmarken eingefügt, der es erlaubt die Textmarken und Notizen in der Tabellenansicht und in der Themenansicht zu selektieren. Dadurch ist es möglich z.B. geschlossene Todos auszublenden. 428.) Added: Prozedur DlgSetFocus ergänzt, die es erlaubt ein Oberflächen- Element innerhalb eines Dialogs zu fokussieren. Dabei werden die Elemente im Dialog beginnend bei 0 entsprechend der Erstellungsreihenfolge durchnummeriert. procedure DlgSetFocus(id : integer); 429.) Added: Weitere Option hinzugefügt, dadurch jetzt schaltbar ob Dateien beim Laden Schreibgeschützt geöffnet werden oder nicht. Dialog für Optionen des Editors etwas umgestellt. EditorOpt_OpenFilesReadOnly 430.) Fixed: Wird einer globalen Variablen ein String zugewiesen, der länger ist als 128 Zeichen stürzt FoldMaster beim Öffnen des Variablen- Dialogs ab. 431.) Added: Eingabefeld für Variablen im Variablen- Dialog vergrößert. 432.) Fixed: Absturz bei Anwendung von TempStoreGetStrSorted auf einen TempStore mit genau einem Element. 433.) Fixed: Reservierung von temporären Speichern mit TempStoreAllocate, TempStoreFree und TempStoreGetFree umgestellt auf eine eindeutige ID statt auf den Namen des Programms. Der Name des Programms muss nicht zwingend eindeutig sein. 434.) Added: Wurden bei "Make" noch keine automatischen Abhängigkeiten für eine der Dateien ermittelt, wird eine Warnung ausgegeben. Diese Warnung wird jetzt nur noch einmalig ausgegeben. Die betroffenen Dateien werden im Trace- Port eingetragen. 435.) Added: Transfermakro $SLIST eingeführt. Dieses ist ähnlich wie $MLIST und $TLIST gibt jedoch eine Liste aller Quelldateien in der aktuellen Makefalte aus. 436.) Fixed: Wird eine Textmarke aus einem anderen Projekt selektiert, kommt es vor, dass zwar das aktuelle Projekt geschlossen und die andere Projektdatei geöffnet wird, die Datei in der die Textmarke definiert ist wird jedoch nicht geöffnet. ----- 18.07.03 ----- 437.) Fixed: Beim Ausdrucken von Projektdateien, werden hinter Titeln von Modulen Faltenenden ausgegeben. Ist eine Datei geöffnet, wird in der Projektdatei die komplette Datei mit ausgegeben. 438.) Added: Die Funktion DlgAddComboBox wurde durch DlgAddDropDownList ersetzt. DlgAddComboBox wurd geändert, so dass das Oberflächenelement jetzt über ein Eingabefeld verfügt, das Eingaben durch den Anwender erlaubt. 439.) Fixed: Bei der Funktion KeyMapUpdateMenu bzw. beim Öffnen von FoldMaster werden Tastenkürzel, die mit TAB getrennt sind, in Einträgen im Menü Automation gelöscht. 440.) Fixed: Änderungen in Optionen beim Ausdrucken werden nicht gespeichert, selbst wenn die Option "Automatisch Speichern" für Optionen aktiviert ist. 441.) Added: FoldMaster unterstützt jetzt auch eingebettete PHP Statements in HTML. Tags und deren Attribute werden jetzt gleich eingefärbt. 442.) Added: Die Funktion "MakeDependGet" hat einen zusätzlichen optionalen var- Parameter bekommen, welcher die Verschachtelungsebene der zurückgelieferten Include- Datei enthält. 443.) Fixed: "FoldFound" geht nicht, obwohl die Suche mittels "SearchFound" erfolgreich war und der Cursor korrekt positioniert wurde. 444.) Fixed: Es lassen sich keine Konstanten vom Typ boolean anlegen. Folgendes Beispiel zeigt was jetzt geht. // global constants const an = true; aus = false; on = an; off = aus; 445.) Fixed: In Dialogfunktionen wie z.B. einer CheckBox können keine Arrayelemente referenziert werden. Folgendes Testprogramm zeigt eine mögliche Anwendung: program test; // global vars var a : array[0..10] of boolean; procedure TestDialogArray; var i : integer; erg : integer; y : integer; procedure btn_clicked; begin if (y >= GetCount(a)) then y := 0; a[y] := not a[y]; inc(y); end; begin y := 0; DlgInit('Hallo', 1); // Elemente einfuegen // es werden Elemente eines Arrays referenziert DlgAddProcButton(0,0,55,15, 'Toggle', btn_clicked); for i := 0 to 10 do begin DlgAddCheckBox(0,20+(15*i),100,12, a[i], 'Test'); end; // Dialog ausfuehren erg := DlgExecute; // Ergebnisse anzeigen for i := 0 to 10 do begin writeln(i:5, ' ', a[i]); end; end; begin TestDialogArray; end. 446.) Fixed: Wird ein String aus einem Array of String an eine Funktion übergeben, kann auf den String nicht mit dem []- Operator zugegriffen werden. Es wird immer ein Laufzeitfehler generiert. Folgende Prozedur zeigt die Anwendung: procedure TestSetChar; var a:array[1..2] of string; i:integer; c:char; procedure SetChar(var s:string;i:integer;c:char); begin s[i] := c; end; begin a[1] := '++++'; a[2] := '-------'; for i := 1 to 2 do begin SetChar(a[i],1,'I'); writeln(a[i]); SetChar(a[i],2,'I'); writeln(a[i]); SetChar(a[i],3,'I'); writeln(a[i]); SetChar(a[i],4,'I'); writeln(a[i]); end; end; --- 17.08.2003 447.) Added: Funktion GetInnerSize ergänzt. Sie ermittelt die Grösse des Clientbereichs von FoldMaster. procedure GetInnerSize (var x, y : integer); Funktion IsZoomed prüft ob FoldMaster maximiert ist. function IsZoomed : boolean; Funktion ChildsZoomed prüft ob Fenster innerhalb von FoldMaster maximiert sind. function ChildsZoomed : boolean; 448.) Fixed: Nach dem eine Datei mit TempStoreLoad geladen wurde, tauchen in Strings, die mit TempStoreAddLine eingetragen wurden Sonderzeichen auf. 449.) Fixed: Im Windows- Verzeichnis werden ab und zu beim Schließen von FoldMaster unkontrolliert Ini- Dateien mit einem verstümmelten Dateinamen angelegt. 450.) Fixed: Wird ein Makro als System-Hook-Funktion "AfterPrjLoaded" eingebunden, das z.B. die Funktion "SearchFold" aufruft, wird das Makro mehrfach aufgerufen. 451.) Fixed: Absturz bei komplexen Makros mit ineinanderverschatelten Prozeduren, die rekursiv aufgerufen werden. 452.) Fixed: Textmarken sollen nicht gelöscht werden, wenn eine Zeile gelöscht wird. Da die Textmarken Eingaben des Anwenders enthalten, sollen diese erhalten bleiben. Bei Bedarf können diese manuell gelöscht werden. Beim Löschen von Textzeilen mit einer Textmarke hat das bereits funktioniert. Beim Löschen oder verschieben einer Textfalte, die eine Zeile mit einer Textmarke enthält, wird die Textmarke jedoch gelöscht. 453.) Fixed: Wird das beim Suchen "Sammeln" eingeschaltet werden die Suchergebnisse in das Messagefenster eingetragen. Gleiches gilt für "In Dateien suchen". Bei Selektion eines Eintrages wird die entsprechende Fundstelle angezeigt. Dies funktioniert nicht korrekt, wenn Zeilen eingefügt oder gelöscht werden. Die gelöschten oder eingefügten Zeilen werden nicht mitgezählt, die Anzeige ist um die entsprechende Anzahl von Zeilen versetzt. 454.) Added: Darstellung in Textmarkenfenster und Messagefenster verbessert. Bei Gruppen bzw. Falten wird jetzt die kompette Zeile auch der Bereich links des Textes in der entsprechenden Farbe dargestellt. Dadurch können Gruppen noch besser hervorgehoben werden. 455.) Fixed: Im Dialog, um eine Textmarke/Todo zu editieren, wird das Thema falsch ausgewählt, wenn zwei Themen gleichlautend anfangen. ------ 29.08.2003 --------------- 456.) Fixed: Wird als Kommandozeile eines Tools nur die Referenz auf eine lokale Variable angegeben z.B. "$(BCC_CMDLINE)", so wird die Kommandozeile nach 256 Zeichen abgebrochen. 457.) Fixed: Include- Dateien die in <> angegeben sind, werden als Systemincludes identifiziert. Solange diese beim Öffnen einer Datei ermittelt werden ist dieser Eintrag korrekt. Der Eintrag wird in der Projektdatei gespeichert. Nach einem erneuten Laden der Projektdatei ist dieser Eintrag verloren, alle Includedateien werden als "" Projekt- Include kategorisiert. 458.) Fixed: Die Suchfunktion "SearchInFiles" arbeitet bei der Option "D" nicht mehr rekursiv sondern nur noch im aktuellen Verzeichnis. 459.) Added: Menüpunkt "Bearbeiten | Blockoperationen | Blocksatz" sowie die entsprechende Funktion BlockAlignBlock ergänzt. Dadurch werden in jeder Zeile eines markierten Blocks (Zeilenblock oder Spaltenblock) Leerzeichen eingefügt, bis die Zeile mindestens die Breite der markierten Spalte hat oder die Breite wie sie durch PageMargin eingestellt wurde. 460.) Added: Folgende Makros wurden ergänzt: procedure DelGlobalVar(var_name :string); Diese Prozedur löscht die angegebene globale Variable. function GotoVariable(var_name : string) : boolean; Diese Funktion springt in die Zeile mit der angegebenen Variablen. Die Funktion liefert True, wenn eine entsprechende Variable gefunden wurde. Beim Suchen der Variable gelten die gleichen Sichtbarkeitsregeln wie bei GetVarValue. function GotoProjectVar(var_name : string) : boolean; Diese Funktion springt in die Zeile in der die angegebene Projektvariable definiert wurde. Die Funktion liefert True, wenn eine entsprechende Variable gefunden wurde. Beim Suchen der Variable gelten die gleichen Sichtbarkeitsregeln wie bei GetPrjVarValue. --------------------------------------------------------------- Version veröffentlicht am 17.10.2003 --------------------------------------------------------------- (*}}}*) (*{{{ FoldMaster Version 1.63*) --------------------------------------------------------------- FoldMaster Version 1.63 --------------------------------------------------------------- 461.) Added: Funktion DlgAddListWindow ergänzt um weitere optionale Parameter, die zur Einstellung der Breite einer Spalte dienen. Diese Parameter sind vom Typ integer. Jeder gibt die Breite einer Spalte in Prozent der Breite des Listenfensters an. 462.) Fixed: SyntaxGetAuxComment und SyntaxGetTrdComment liefern bei internen SyntaxFiltern nicht die korrekten Ergebnisse für den Anfang und das Ende von Kommentaren. 463.) Fixed: Beim Anlegen einer neuen Datei kann die Dateierweiterung nicht beliebig vorgegeben werden. => Die Funktion akzeptiert jetzt jede eingegebene Erweiterung. Wird keine Erweiterung angegeben wird die Voreinstellung übernommen. 464.) Fixed: Statt Index = 9 - 2 + 1 = 8 wurde berechnet Index = 9 - (2 + 1) = 6 ==> Jaaa, man lässt sich überzeugen. Nachdem C/C++ und auch Turbo Pascal der Meinung sind, dass 9 - 2 + 1 = 8 ist macht das FoldMaster jetzt auch so; auch ohne Klammern zu setzen. 465.) Added: FoldMaster kann jetzt auch CTRL- Zeichen im Bereich von 0x01 bis 0x1F. Eingabe erfolgt z.B. über "InsertText(char(12));" 466.) Fixed: Behandlung von Include- Anweisungen und Compiler- Befehlen in Pascal ist nicht korrekt. Include- Dateien werden nicht gefunden. Compiler- Anweisungen werden nicht entsprechend eingefärbt. z.B. {$if } {$define name 12} 467.) Fixed: Es wird eine falsche Zeile angesprungen, wenn man versucht aus dem Makro- Modul- Dialog eine Funktion oder eine Prozedur zu ändern. 468.) Fixed: Beim Filter für Textmarken und Todos kann jetzt auch angegeben werden, dass der Text genau uebereinstimmen muss. 469.) Added: Funktionen und Prozeduren zur Verwaltung einer Liste von Variablen in jedem Modul. Die Variablen werden mit dem Projekt gespeichert. Module, die nicht in einem Projekt enthalten sind, können die Informationen nicht speichern. Über Attribute des Moduls können diese Variablen auch eingesehen und bearbeitet werden. GetModuleVariable function GetModuleVariable (variable_name : string) : string; Ermittelt Wert einer Variablen aus der aktuellen Datei. SetModuleVariable procedure SetModuleVariable(var_name, var_value : string); Setzt den Wert einer Variablen in der aktuellen Datei. IterateModuleVars function IterateModuleVars (mod_name : string; index : integer; var var_name, var_value : string ) : boolean; Iteriert durch alle Variablen in einer Datei. ModuleVarDelAll procedure ModuleVarDelAll(mod_name : string); Löscht alle Variablen der angegebenen Datei ModuleVarDelete procedure ModuleVarDelete(mod_name, var_name : string); Löscht nur die angegebene Variable im angegebenen Modul. ModuleVarGetVal function ModuleVarGetVal(mod_name, var_name : string) : string; Ermittelt den Wert der angegebenen Variablen im angegebenen Modul ModuleVarSet procedure ModuleVarSet(mod_name, var_name, var_value : string); Setzt den Wert einer Variablen im angegebenen Modul. 470.) Fixed: FoldMaster legt jetzt seinen Verweis auf das Installationsverzeichnis unter folgendem Key in der Registry ab: SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\Fmaster.exe\\Path Dieser Key wird auch durch das Installationsprogramm eingetragen. Dadurch scheinen die Abstürze nach einer Neuinstallation behoben zu sein. 471.) Fixed: Probleme bei Darstellung (Zeilennummern und Seitengrenze) nachdem in der Druckvorschau Optionen verändert wurden. 472.) Fixed: Kleines Problem in der Darstellung des Rahmens im Hex- Editor. 473.) Added: Kommando und Icon in der Toolbar um in den Hex- Mode umzuschalten. Die Datei wird automatisch neu geladen. FileEditAsHex : Toggelt den Hex- Modus der aktuellen Datei --- 18.12.2003 474.) Fixed: Absturz beim Aufruf von FoldListSelect nachdem Datei neu angelegt wurde. 475.) Fixed: Steuerzeichen werden im Text ergänzt, wenn Ziffern in einer neu angelegten Datei eingegeben werden. 476.) Fixed: Abbruch von Suchen und Ersetzen Aktionen wird nicht immer ausgeführt. Bei langen Zeilen kann immer nur am Ende einer Zeile abgebrochen werden. 477.) Added: Die Filterung der Textmarken und Todos nach Priorität umgestellt, so dass jetzt die einzelnen Prioritäten, die angezeigt werden sollen, ausgewählt werden können. 478.) Fixed: Bei der Ermittlung von Include- Dateien stimmt Priorität nicht. => Neu : 1.) Wurde die Datei mit einem vollständigen Pfad angegeben, wird diese im angegebenen Pfad geöffnet, unabhängig davon, ob die Datei im Projekt enthalten ist oder nicht. 2.) FoldMaster prüft ob die entsprechende Datei relativ zur aktuellen Datei angegeben wurde. Ist dies der Fall wird diese Datei geöffnet. Es werden auch Dateien geöffnet, die nicht im Projekt enthalten sind. z.B. c:\projekte\test\filename.cpp mit #include "filename.h" öffnet c:\projekte\test\filename.h mit #include "..\incdirs\filename.h" öffnet c:\projekte\incdirs\filename.h 3.) In gleicher Art werden alle Verzeichnisse durchsucht, die über die Variable "INCDIRS" bekannt gemacht wurden. 4.) In gelicher Art wird das Projektverzeichnis durchsucht. 5.) Es wird geprüft ob eine entsprechende Datei im Projekt enthalten ist. Zuerst werden auch evtl. angegebenen Unterverzeichnisse abgeprüft. Wenn auch hier nicht gefunden wird, wird nur noch nach einer Datei mit dem entsprechenden Namen und Erweiterung gesucht. 479.) Added: Transfermakro $CLIST eingeführt. Dieses ist ähnlich wie $MLIST und $TLIST steht jedoch für eine Liste der Quelldateien, deren Zieldatei aktualisiert werden muss, da sie nicht existiert, die Quelldatei selber neuer ist oder eine der Include- Dateien neuer ist. $CLIST kann verwendet werden, um bei einem Aufruf des Compilers alle zu übersetzenden Module zu übergeben. Einige Compiler lassen die Übergabe mehrere Quelldateien zu. Dies beschleunigt die Compilierung, da z.B. vorcompilierte Header nicht wiederholt geladen werden müsssen. Um den Aufruf des Compilers für jede einzelne Datei zu unterbinden kann z.B. USE_COMPILER auf * gesetzt werden (angenommen * kommt in keinem der Namen für die eingestellten Tools vor). {{{ make USE_COMPILER = * file1.cpp <- wird hier nicht compiliert file2.cpp <- wird hier nicht compiliert file3.cpp <- wird hier nicht compiliert BCC_CMDLINE = $CLIST BCC Compiler [$BCC_CMDLINE] <- wird aufgerufen mit file1.cpp file2.cpp file3.cpp, <- wenn alle Module zu übersetzen sind }}} 480.) Added: Syntaxfilter für INI- Dateien ergänzt. Damit lassen sich INI- Dateien gleich handhaben wie andere Dateien auch. Zudem besteht die Möglichkeit reservierte Worte einzustellen. 481.) Added: Textmarken verfügen über ein weiteres Feld: Einen Link auf eine externe Datei. Die Datei kann über die Shell geöffnet werden, so dass das entsprechende Bearbeitungsprogramm aufgerufen wird. TextmarkSetLink : Setzt den externen Link der Textmarke in der aktuellen Zeile procedure TextmarkSetLink(ext_link : string); TextmarkExeLink : Öffnet den externen Link der Textmarke in der aktuellen Zeile procedure TextmarkExeLink; GetTextmarkLink : Liefert den externen Link der Textmarke in der aktuellen Zeile function GetTextmarkLink : string; Folgende Funktionen wurden angepasst TmListGet : erhält zusätzlichen optionalen Parameter, um den Eintrag für den externen Link abzufragen. TextmarkIterateAll: erhält zusätzlichen optionalen Parameter, um den Eintrag für den externen Link abzufragen. 482.) Fixed: Wird bei einer im MessageFenster enthaltenen Meldung (z.B. eines Compilers) in eine Zeile verwiesen, die TABS enthält, wird die Spaltenposition nicht korrekt gesetzt wenn die Message ausgewählt wird. => Dieses wurde behoben. Die meisten Compiler verwenden Tabweite 8. FoldMaster setzt diese um auf die in FoldMaster eingestellten Tabpositionen. 483.) Fixed: Bei Userfiltern werden Zeichenfolgen die mit 0 beginnen und falsche Zeichen enthalten, wie z.B. 0f12, nicht als falsche Ziffer markiert. ------- 20.02.2004 484.) Fixed: Nach einem Dateivergleich wird das Meldungsfenster jetzt immer angezeigt. Sind die Fenster maximiert werden die Fenster restauriert und nebeneinander bzw. untereinander dargestellt. 485.) Fixed: Wenn beim Vergleich von Dateien eine der beiden Dateien leer ist, stürzt FoldMaster ab. => Wenn eine der beiden Dateie leer ist, wird eine entsprechende Fehlermeldung generiert und abgebrochen. 486.) Fixed: Ist "Nach Übereinstimmung suchen" kleiner als die kürzeste Datei, und sind die Dateien vollkommen verschieden, so bleibt der Vergleich hängen und muss manuell abgebrochen werden. 487.) Added: Bei einem Dateivergleich wird für beide Editoren synchronisertes Scrolling eingeschaltet. Zusätzlich werden alle Falten expandiert. 488.) Fixed: Beim Löschen von Textmarken im Textmarken-Fenster werden die Verweise in den einzelnen Zeilen der entsprechenden Datei nicht mit gelöscht; das '!' bleibt in der Dragbar stehen. 489.) Fixed: Problem beim Restaurieren des Fenster nach dem Laden eines Projekts. 490.) Fixed: Wird im Falten- Browser aus Versehen eine Gruppe mit einem Leerstring angelegt, so passt die Zuordnung der Tabs und der Inhalte nicht mehr zusammen. Die Gruppe mit dem Leerstring kann nicht gelöscht werden. Änderungen werden nicht automatisch in den Optionen gespeichert. 491.) Fixed: In Dialogen zur Auswahl einer Datei können Verweise in den Favoriten, die auf ein nicht vorhandenes Verzeichnis zeigen, nicht mehr gelöscht werden. ------------- 20.02.2004 ------------------------------ 492.) Fixed: Beim Laden der Projektdatei über den Kommandozeilenparameter -P wird das Projekt zwar geladen, jedoch wird dieses sofort geschlossen und das davor geöffnete Projekt wird wieder geöffnet. 493.) Fixed: Beim Einfügen von INI- Dateien in ein Projekt, sei es per Drag&Drop oder über "Projekt|Datei einfügen...", werden diese als normale Module eingefügt nicht als INI- Dateien. 494.) Fixed: Der Syntaxfilter für Perl erkennt in dem Fileglob in folgender Zeile while () einen Stringanfang, der sich über mehrere Zeilen bis zum nächsten /- Zeichen spannt. 495.) Fixed: In PHP Falten innerhalb einer PHP- Datei wird mehrzeiliger Kommentar mit /* und */ nicht korrekt aktualisiert, wenn die Kommentierung aufgehoben wird. 496.) Added: Unterstützung von bis zu 6- stelligen Hexzahlen mit führendem #- Zeichen in Syntaxfiltern, wie sie in CSS- Dateien für RGB- Werte benutzt werden. 497.) Added: Option für einfache Zahlen eingeführt, bei denen eine Dimension folgt wie z.B. 8MByte. Dies wird damit nicht als Fehler gekennzeichnet. ------------- 29.03.2004 ------------------------------ 498.) Fixed: Absturz bei bestimmter Fehlbedienung im FileOpen- Dialog. 499.) Added: Im Dialog zur Auswahl eines Templates oder einer Phrase [CTRL]- [SPACE] oder "Bearbeiten | Wort ergänzen" wird jetzt auch die Parameterhilfe aktualisiert, wenn sich die Selektion in der Liste ändert. 500.) Added: Beim Suchen&Ersetzen kann jetzt wieder am Anfang des Suchbereichs begonnen werden, wenn dessen Ende erreicht wurde (wrap araound). Diese Funktion kann über die Optionen des Editors aktiviert werden. 501.) Added: Prüfen der Abhängigkeiten bei Make deutlich beschleunigt. ------------- 01.04.2004 ------------------------------ 502.) Fixed: Absturz beim Kopieren und ändern von Falten mit Include- Anweisungen. 503.) Fixed: Im Dialog, um im Hexeditor zu suchen, werden Eingaben im Hex- Format jetzt automatisch formatiert, damit eine korrekte Bytefolge entsteht. Jeder Eintrag sollte maximal zwei Zeichen lang sein. 504.) Fixed: Beim Ersetzen von Daten im Hex- Editor werden zusätzliche Bytes nicht eingefügt, wenn mehr Daten einzufügen sind als gelöscht werden. ------------- 11.04.2004 ------------------------------ 505.) Fixed: Bei mehrzeiligen Macros in C/C++ wird die Einfärbung nicht bis ans Ende des Macros fortgesetzt, wenn in einer Zeile am Anfang ein einzelnes "i" steht. 506.) Fixed: Bei XML- Dateien werden die deutschen Umlaute und andere Sonderzeichen beim Speichern nicht in eine Entity (z.B: Ö) umgewandelt. Andere XML- Editoren melden Fehler beim Öffnen dieser Dateien. 507.) Added: Möglichkeit FoldMaster mit Dateien zu verknüpfen. Die Verknüpfungen lassen sich über "Optionen|Dateien verknüpfen..." erstellen und bearbeiten. 508.) Added: Zusätzliche Kommandozeilen- Parameter: -M Öffnet die angegebene Datei als Makrodatei im Makroeditor. -R Es wird ein Makromodul aus der Liste der Module compiliert und ausgeführt. Wird das Modul nicht gefunden, wird es angelegt. Die Ausführung der Makrodatei wird verzögert bis andere Dateien aus der Kommandozeile geladen sind. 509.) Fixed: Einfügen von Datein über den Menüpunkt "Falten|Neue Falte/Element..." 510.) Fixed: Werden Textmarken in einer Template- Datei gesetzt, stürtzt FoldMaster beim Beenden ab. Bei erneutem Start sind die Textmarken zwar im Textmarkenfenster sichtbar jedoch nicht in der Datei, wenn diese über das Optionen Menü geöffnet wird. 511.) Fixed: Bei HTML- Dateien akzeptiert FoldMaster für eingebettete PHP- Teile auch andere Schreibweisen für den Suche am Ende der Datei nicht abbrechen< aktiviert ist. 549.) Fixed: Suche im Zusammenhang mit der Option >Suche am Ende der Datei nicht abbrechen< und >ab Cursor< verbessert. --------------------------------------------------------------- Version veröffentlicht am 16.03.2006 --------------------------------------------------------------- 550.) Added: Verwendung des Nullsoft Scriptable Install System (NSIS) als neuen Installer. --------------------------------------------------------------- Version veröffentlicht am 26.05.2006 --------------------------------------------------------------- (*}}}*) (*{{{ FoldMaster Version 1.64*) --------------------------------------------------------------- FoldMaster Version 1.64 --------------------------------------------------------------- 551.) Fixed: Absturz bei folgender Sequenz behoben: procedure TestInsertText; begin FileTabSelect(1); //erstes Register springen InsertLine('TEXT'); end; 552.) Fixed: Aktualisierung des Editorfensters im Hexeditor nach Änderung der Parameter für die HEX- Darstellung (Worte je Gruppe, Bytes pro Zeile). 553.) Added: Funktion IntToHex ergänzt. z.B.: var s : string; i : integer; i := $1234; s := IntToHex(i:2); // liefert s = 34 s := IntToHex(i:8); // liefert s = 00001234 ----- 06.07.2006 Build 35 554.) Fixed: Bei Anzeige in der Adressenleiste des Hexeditors werden bei Offsets höher als die darstellbare Zahl nur die vordersten Stellen angezeigt, statt den hintersten. 555.) Fixed: Beim Scrollen in grossen Dateien mit mehr als 65536 Zeilen mit dem Mausrad kann die erste Zeile nicht sichtbar gemacht werden. ----- 14.10.2006 Build 36 556.) Fixed: Nach dem Kopieren von Text in das Clipboard innerhalb von FoldMaster funktioniert das Kopieren und Einfügen von Text mit Hilfe des Clipboards in anderen Applikationen nicht mehr. Das Clipboard wird durch FoldMaster nicht mehr frei gegeben. --------------------------------------------------------------- Version veröffentlicht am 14.10.2006 Build 37 --------------------------------------------------------------- (*}}}*) (*{{{ FoldMaster Version 1.65*) --------------------------------------------------------------- FoldMaster Version 1.65 --------------------------------------------------------------- 557.) Fixed: Ausgaben von Tools (Compiler, Linker, usw.) werden unter bestimmten Umständen nicht in das Messagefenster übertragen. 558.) Fixed: Einfrieren nachdem Hook MODFOCUSSET gesetzt wurde. 559.) Fixed: Löschen am Ende einer Binärdatei. 560.) Fixed: Scrollrad funktioniert nicht bei Anzeige über zwei Bildschirme. Scrollrad wird jetzt auf fokussiertes Fenster angewendet. Evtl. Radunterstützung für FoldMaster bei MS IntelliPoint Maustreibern deaktivieren, da FoldMaster über eine eigene Radunterstützung verfügt. ----- 27.07.2008 Build 39 561.) Fixed: Absturz bei der Bearbeitung sehr großer Dateien behoben. Das betraf vor allem Binärdateien, da diese sehr viel Speicher beanspruchen. --------------------------------------------------------------- Version veröffentlicht am 17.08.2008 Build 40 --------------------------------------------------------------- (*}}}*)