gpt4 book ai didi

c++ - 通过 C++ 在 Tclsh 中即时字体着色

转载 作者:行者123 更新时间:2023-11-28 03:56:54 26 4
gpt4 key购买 nike

我是一个业余爱好者,尝试拼凑一个小项目。这是一个简单的笔记存储和检索控制台应用程序,适用于 Windows Vista(和 XP - 我希望通过 USB 内存棒运行整个程序)。

我使用 Sqlite 作为存储和 Tcl/SQL 脚本来添加注释(和标签!)并通过标签检索它们。 3 个表和一个“Toxi”架构。

所以无论如何...我想从“dos 提示符”或更频繁地使用它 tclsh(不希望!)我根本不想要窗口 shell 或使用 TK。但是为了帮助从视觉上区分某些东西,stdin 和 stdout,注释和时间戳等,我想用某种粗略的标记即时更改字体颜色。

我找到了一个 c++ 项目,可以做到这一点!厌倦的流浪汉把它放在:http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=9130 . Jaded Hobo 说头文件“Console.H”足以包含在 c++ 项目中,但他不了解 TCL。

我找到了 SWIG,接口(interface)编译器,我打算试一试。但我对一些事情一无所知:

  1. 仅仅一个头文件就够了吗?

  2. SWIG Win32 示例不像 'nix 示例那样具有启发性,它们使用 MS VC++ (VStudio) - 我想使用 Quincy/MinGW。

    (哦,顺便说一句,这是我第一次尝试使用任何类型的 C。所以你能展示如何将 SWIG 与 Quincy 结合使用吗?)

  3. 我如何才能从 header 源中收集到到底要在我的 Tcl 脚本中输入什么才能使用它?

感谢您阅读本文,更不用说回答了。我开始将它放在 comp.lang.tcl 上,但我不喜欢那样广播我的电子邮件地址。

最佳答案

标题本身是不够的。另一方面,自 this page 以来,您真的不需要做那么多工作。表明API实际上非常简单。这是您需要的 C 代码:

#include <tcl.h>
#include <windows.h>

static int MySetConsoleColorCmd(
ClientData clientData, Tcl_Interp *interp,
int objc, Tcl_Obj *const objv[])
{
HANDLE hConsole;
int code;

/* Parse arguments, first for argument count, then for number format */
if (objc != 2) {
Tcl_WrongNumArgs(interp, 1, objv, "colorCode");
return TCL_ERROR;
} else if (Tcl_GetIntFromObj(interp, objv[1], &code) != TCL_OK) {
return TCL_ERROR;
}

/* Get console handle, checking for the error case */
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE) {
Tcl_SetResult(interp, "not a console application", TCL_STATIC);
return TCL_ERROR;
}

/* Set the color! */
SetConsoleTextAttribute(hConsole, code);
return TCL_OK;
}

/* Standard entry point for loadable library */
int Consolecolor_Init(Tcl_Interp *interp) {
Tcl_CreateObjCommand(interp, "consolecolor", MySetConsoleColorCmd,
NULL, NULL);
return TCL_OK;
}

将它编译成一个名为 consolecolor.dll 的 DLL(除了 Tcl 本身,它根本没有花哨的依赖性)(名称应该与入口点函数有点匹配)然后你会能够使用 load命令将新的 consolecolor 命令导入到您的代码中,如下所示:

load /path/to/consolecolor.dll

# Duplicate example from the page mentioned at the top of this answer
for {set k 1} {$k < 255} {incr k} {
consolecolor $k
puts "$k => I want to be nice today!"
}

有关如何挑选颜色的指南,请参阅 this MSDN page .

关于c++ - 通过 C++ 在 Tclsh 中即时字体着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3191925/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com