TCC pLugins sind vom Benutzer geschriebene DLLs, mit denen Sie Ihre eigenen internen Variablen, Variablenfunktionen und internen Befehle schreiben können TCC Laden Sie sie beim Start. Plugin-Namen überschreiben vorhandene Namen, sodass Sie interne Variablen und Befehle erweitern und/oder ersetzen können. Wann TCC startet, lädt es automatisch alle Plugins im Standardverzeichnis (das Unterverzeichnis PLUGINS\ im TCC Installationsverzeichnis). Die Plugins werden vor der Startdatei geladen (TCSTART) werden ausgeführt.

 

Sie können ein bestimmtes Plugin zur Ausführung angeben, indem Sie dem Funktions-/Variablen-/Befehlsnamen den Plugin-Namen und ein $ voranstellen. Zum Beispiel:

 

echo %_myplugin$variable

echo %@myplugin$func[abc]

meinplugin$mycommand

 

Plugins können in jeder Sprache geschrieben werden, die eine Windows-DLL erstellen kann. Der TCC Das Plugin-SDK enthält Beispiele für Visual C++ und Delphi. Das SDK ist auf unserer Website unter verfügbar https://jpsoft.com/downloads/sdk/sdk.zip.

 

Tastenanschlag-Plugins:

 

Sie können auch Tastenanschlag-Plugins schreiben, die bei jedem über die Befehlszeile eingegebenen Tastendruck aufgerufen werden. Ein Tastenanschlag-Plugin kann Aktionen ausführen, wenn eine bestimmte Taste eingegeben wird, oder sogar die Taste ändern, bevor sie an den Befehlsprozessor zurückgegeben wird. Tastenanschlag-Plugins werden nach und vor Tastenaliasen aufgerufen TCC sucht nach der Standardaktion für diesen Schlüssel.

 

Nur V24+: Wenn der in „nKey“ übergebene Wert 0 ist, ist der Schlüssel kein gültiges Unicode-Zeichen und das Plugin muss ihn analysieren pszKey Zeichenfolge, um den Namen zu erhalten. Der Name wird im Format übergeben:

 

[Strg-][Alt-][Umschalt-]Taste

 

Beispielsweise:

 

F12

Strg-F1

Strg-Alt-Links

Strg-Umschalt-F5

 

Das Tastenanschlag-Plugin kann das ändern nKey or pszKey Wert und geben Sie ihn zurück an TCC um die Standardaktion für den (neuen) Wert auszuwerten. Wenn nKey ist != 0, TCC behandelt es als normales Unicode-Zeichen. Wenn nKey = 0, TCC werde auswerten pszKey für einen gültigen Schlüsselnamen.

 

Wenn das Plugin den Schlüssel verarbeitet hat und nicht möchte TCC um noch etwas zu tun, einstellen nKey zu 0 und pszKey in eine leere Zeichenfolge (schreiben Sie eine Null in das erste Byte).

 

Plugin-Syntax:

 

// PluginInfo-Struktur – wird vom Plugin als Antwort auf den GetPluginInfo()-Aufruf vom Befehlsprozessor zurückgegeben

// Beachten Sie, dass die Zeichenfolgen alle Unicode sein sollten; Wenn Ihr PlugIn für ASCII kompiliert ist, müssen Sie es verwenden

//  die MultiByteToWideChar-API, um die Zeichenfolgen zu konvertieren, bevor sie an sie zurückgegeben werden TCC

typedef struct {

 TCHAR *pszDll;        // Name der DLL

 TCHAR *pszAuthor;        // Name des Autors

 TCHAR *pszEmail;        // E-Mail des Autors

 TCHAR *pszWWW;        // Webseite des Autors

 TCHAR *pszDescription;        // (kurze) Beschreibung des Plugins

 TCHAR *pszFunctions;        // durch Kommas getrennte Liste der Funktionen in der

                 //   Plugin (führendes _ für interne Variablen, @ für

                 //   var funcs, * für Tastendruckfunktion,

                 //  sonst ist es ein Befehl)

 int        nDur;        // Hauptversion des Plugins #

 int        nMoll;        // Nebenversion des Plugins #

 int        nBuild;        // Build-Nr. des Plugins

 HMODULE hModule;        // Modulhandle

 TCHAR *pszModule;        // Modulname

} PLUGININFO, *LPPLUGININFO;

 

 

// Struktur, die an Plugin-Funktionen übergeben wird, um Tastenanschläge zu überwachen. A

//   Tastendruckfunktion kann einen beliebigen Namen haben, muss aber ein voranstellen

//   * zu seinem Namen in der Funktionsliste (pszFunctions, oben).

//  Wenn das Tastenanschlag-Plugin den Tastenanschlag verarbeitet hat und nicht möchte

//  um es zurückzugeben TCC, sollte es nKey = 0 und pszKey auf eine leere Zeichenfolge setzen.

//  Der Befehlsprozessor ruft die Tastendruckfunktion mit allen auf

//     Parameter werden auf 0 gesetzt, kurz bevor die Eingabe für jeden neuen akzeptiert wird

// Befehlszeile.

//   Die String-Zeiger sind Unicode

typedef struct {

 int        nKey;        // Schlüssel eingegeben

 int        nHomeRow;        // Startreihe

 int        nHomeColumn;        // Startspalte

 int        nRow;        // aktuelle Zeile im Fenster

 int        nSpalte;        // aktuelle Spalte im Fenster

 LPTSTR pszLine;        // Befehlszeile

 LPTSTR pszCurrent;        // Zeiger auf Position in der Zeile

 int        fRedraw;        // wenn != 0, zeichne die Linie neu

 LPTSTR pszKey;        // (nur v24+) ASCII-Name der Taste (zum Beispiel „Strg-Alt-PosXNUMX“)

} KEYINFO, *LPKEYINFO;

 

__declspez(dllexport) BOOL WINAPI InitializePlugin( ungültig );        // Wird vom Befehlsprozessor aufgerufen, nachdem alle Plugins geladen wurden

__declspez(dllexport) LPPLUGININFO WINAPI GetPluginInfo( HMODULE hModule );        // Wird vom Befehlsprozessor aufgerufen, um Informationen vom Plugin abzurufen, hauptsächlich für die Namen von Funktionen und Befehlen

__declspez(dllexport) BOOL WINAPI ShutdownPlugin( BOOL bEndProcess );        // Wird beim Herunterfahren vom Befehlsprozessor aufgerufen

 //   wenn bEndProcess = 0, wird nur das Plugin geschlossen

 //   wenn bEndProcess = 1, wird der Befehlsprozessor heruntergefahren

 

Die in „pszFunctions“ aufgeführten und aufgerufenen Funktionen TCC muss im folgenden Format vorliegen:

 

DLLExports INT WINAPI MyFunctionName( LPTSTR pszArguments );

 

Interne Variablennamen in pszFunctions (und ihren entsprechenden Funktionen) müssen mit einem Unterstrich („_“) beginnen.

 

Variablenfunktionsnamen in pszFunctions müssen mit einem @ beginnen; der entsprechenden Funktion muss ein „f_“ vorangestellt werden. (Dadurch können Variablenfunktionen denselben Namen wie interne Befehle haben.)

 

Beispielsweise:

 

 pszFunctions = "reverse,@reverse"

 

 Wenn Sie in der Befehlszeile den Namen „reverse“ eingeben, wird der Befehl „reverse()“ aufgerufen.

 Durch Eingabe des Namens „@reverse[]“ in der Befehlszeile wird die Variablenfunktion f_reverse() aufgerufen.

 

Variablenfunktionsnamen sind auf maximal 31 Zeichen beschränkt.

 

Interne Befehlsnamen sind eine beliebige Kombination aus alphanumerischen Zeichen (maximal 12 Zeichen).

 

Aufruf des PlugIns:

 

Für interne Variablen ist pszArguments leer (nur für die Ausgabe).

 

Bei Variablenfunktionen übergibt pszArguments die Argumente an die Plugin-Funktion

 

Bei internen Befehlen ist pszArguments die Befehlszeile abzüglich des Namens des internen Befehls

 

Zurück vom PlugIn:

 

Kopieren Sie für interne Variablen und Variablenfunktionen die Ergebniszeichenfolge über pszArguments. Die maximale Zeichenfolgenlänge für interne Variablen und Variablenfunktionen beträgt 32 KB (32767 Zeichen + abschließendes Nullzeichen).

 

Interne Variablen haben keinen sinnvollen ganzzahligen Rückgabewert. Bei Variablenfunktionen kann die Ganzzahlrückgabe sein:

 

 0 = Erfolg

 < 0 = Fehler; Fehlermeldung, die bereits von der PlugIn-Funktion angezeigt wird

 > 0 = Fehler; Der Fehlerwert sollte als Systemfehler interpretiert werden und

                 angezeigt von 4NT / TC

 

Es gibt einen speziellen Rückgabewert (0xFEDCBA98), der den Parser anweist, davon auszugehen, dass das Plugin entschieden hat, die Variable/Funktion/den Befehl nicht zu verarbeiten. Der Parser sucht dann weiter nach einem passenden internen und dann externen. Beachten Sie, dass Sie diesen Rückgabewert verwenden können, damit Ihr Plugin die Befehlszeile ändert und ihn dann an eine vorhandene interne Variable/Funktion/Befehl weitergibt!

 

Geben Sie bei internen Befehlen das ganzzahlige Ergebnis zurück (alles, was in pszArgument übrig bleibt, wird ignoriert).

 

Ausnahmebehandlung:

 

TCC fängt alle im Plugin auftretenden Ausnahmen ab, um zu verhindern, dass das Plugin den Befehlsprozessor zum Absturz bringt. Es wird eine Fehlermeldung angezeigt und das Plugin gibt einen Exit-Code = 2 zurück.

 

Vervollständigung des Dateinamens

 

Wann TCC die Vervollständigung des Dateinamens ("Tab") durchführt, wird nach einer Plugin-Funktion namens TABCOMPLETION gesucht. Wie TABCOMPLETE-Skripte ermöglicht Ihnen TABCOMPLETION die Erstellung von Plugin-Funktionen zur Anpassung TCCVervollständigung des Dateinamens. Die Syntax lautet:

 

INT WINAPI TABCOMPLETION(LPCTSTR-BefehlLPCTSTR-Argumentint-IndexLPCTSTR-Befehlszeile);

 

Befehl – ​​der Name des Befehls am Anfang der Befehlszeile

 

Argument – ​​das aktuelle Argument, das ausgewertet wird

 

Index – der Offset in der Befehlszeile vom Anfang von Argument

 

CommandLine – die gesamte Befehlszeile (doppelte Anführungszeichen)

 

Wenn die Plugin-Funktion beendet ist, sollte sie 0 zurückgeben, wenn sie den Abschluss verarbeitet hat, und die Ergebnisse in der Umgebungsvariablen TABCOMPLETIONRESULT speichern. Wenn die Funktion mehrere Vervollständigungsergebnisse hat, sollten diese zu TABCOMPLETIONRESULT hinzugefügt werden, getrennt durch ein Leerzeichen (und in doppelte Anführungszeichen gesetzt, wenn sie Leerzeichen enthalten).

 

TCC prüft den Inhalt von TABCOMPLETIONRESULT; wenn es einen einzelnen Wert enthält TCC fügt es am Abschlusspunkt in der Befehlszeile ein. Wenn es mehrere Rückgabewerte gibt, TCC zeigt ein Popup-Fenster zur Auswahl an (wie das F7-Abschlussfenster).

 

TCC wird zunächst versuchen, ein Skript zur Dateinamenvervollständigung zu finden; wenn keiner von ihnen den geforderten Abschluss erbringt, TCC wird nach der Plugin-Funktion suchen.

 

Sie können ein bestimmtes Plugin zur Ausführung angeben, indem Sie dem Funktions-/Variablen-/Befehlsnamen den Plugin-Namen und ein $ voranstellen. Zum Beispiel:

 

echo %_myplugin$variable

echo %@myplugin$func[abc]

meinplugin$mycommand