A console IDE in the style of Borland Turbo C. Its interface is built on modern Turbo Vision port; user C and C++ sources are compiled with MinGW-w64 GCC.
TurboC/2 IDE is free software under the GNU GPL-3.0-or-later.
The goal is to recreate the authentic experience of Borland’s legendary classic IDE from the DOS era in the modern Windows console. There are some enhancements, such as
- Snippet;
- Macros;
- Code navigation and Class Browser; but care was taken to ensure they feel organic—as if, in some parallel universe, Borland still existed and continued developing TUI projects :)
Download the latest pre-release.
From the project directory in PowerShell:
cmake -S . -B .build/ide -G "Visual Studio 17 2022" -A x64
cmake --build .build/ide --config Release --target turboide
.\.build\ide\Release\turboide.exeOn the first configuration, CMake downloads the Turbo Vision revision pinned in
CMakeLists.txt from magiblot/tvision
through FetchContent. No separate installation or manual include/library setup
is needed; GitHub access is required for the first configuration.
Official x64 portable releases include a pinned Universal Ctags binary at
tools\ctags\ctags.exe. TurboC/2 IDE uses that private copy for symbol navigation;
it does not inspect PATH, so another installed ctags.exe cannot affect the
IDE. See THIRD_PARTY_NOTICES.md for its license and
source information.
To prepare the portable output locally, fetch and verify the pinned archive, then configure with bundling enabled:
$archive = .\tools\fetch_ctags.ps1
cmake -S . -B .build\portable -G "Visual Studio 17 2022" -A x64 `
-DTURBOIDE_BUNDLE_CTAGS=ON -DTURBOIDE_CTAGS_ARCHIVE=$archive
cmake --build .build\portable --config Release --target turboideZip the resulting .build\portable\Release directory without changing its
layout. Publish the TurboIDE source and the matching Universal Ctags 6.2.1
source alongside that ZIP in the same GitHub release; use
.\tools\fetch_ctags.ps1 -IncludeSource to retrieve the latter.
Ordinary developer builds do not download Ctags. They may opt into a local
copy for testing through TURBOIDE_CTAGS; this override is compiled out of
portable builds.
Search → Jump to symbol (Ctrl+F2) uses Universal Ctags to open a matching
definition. Back from symbol (Ctrl+Shift+F2) returns to the preceding
location; Word completion (Ctrl+Tab) completes an entered prefix from the
current buffer and the index; Class browser shows indexed C++ types and
members. The active modified file is indexed from a temporary snapshot, so a
Save is never required merely to navigate or complete a name. This is
tag-based navigation, not compiler-semantic resolution. Developer details,
limits, test procedure, and Ctags process contract are in
SYMBOL_NAVIGATION.md.
If Turbo Vision has already been downloaded, or if a local checkout is needed,
pass its root directory to CMake through FETCHCONTENT_SOURCE_DIR_TVISION:
git clone https://github.com/magiblot/tvision.git C:/dev/tvision
cmake -S . -B .build/ide-local -G "Visual Studio 17 2022" -A x64 `
-DFETCHCONTENT_SOURCE_DIR_TVISION=C:/dev/tvision
cmake --build .build/ide-local --config Release --target turboidePoint to the root of the tvision repository—the directory containing
CMakeLists.txt. TurboIDE applies small compatibility patches to Turbo Vision
sources while CMake configures, so use the revision pinned in CMakeLists.txt
or verify a newer version first. Quote paths containing spaces.
TurboIDE ships one native Turbo Vision help database,
help/tchelp.h32, beside turboide.exe. It combines the temporary historical
Borland C++ reference with TurboIDE-specific and rewritten topics. In the
editor, Ctrl+F1 looks up the identifier under the cursor in the historical
alphabetical index. F1 on a focused TurboIDE control or selected menu item
opens its contextual topic, falling back to legacy Contents when absent. Help
source, context IDs, status-line hints, authoring style, merging, validation,
and conversion instructions are in
HELP_CONVERSION.md. Borland documentation describes its
old compiler; TurboC/2 IDE uses GCC/GDB.
The IDE looks for gcc.exe in PATH. To provide an explicit path in the
current PowerShell session:
$env:TURBOIDE_GCC = "C:\tools\w64devkit\bin\gcc.exe"
.\.build\ide\Release\turboide.exeUse an x64 MinGW-w64 GCC. GCC supports Unicode user names in source paths; the
linker receives a relative ASCII output name inside .turboide-build.
The release includes the GCC-adapted coniow implementation. TurboC/2 IDE adds it
to every user C build, so legacy sources can use either #include <conio.h> or
#include <coniow.h> without project configuration.
Alt+F9compiles the current saved.cfile.F9builds the open project; when no project is loaded, it builds the current.cfile.- On errors, the Messages window opens automatically. Arrow keys and Space track the selected line; Enter navigates to the source and closes the window. F11 opens Project, Shift+F11 opens Messages, and F12 opens Compiler Messages.
- Before building, modified files can be saved, built from their on-disk versions, or the build can be cancelled.
- The result is
.turboide-build\program.exein the source or project working directory. This directory is excluded from Git.
To create a project, choose Project → New project... in the project
directory, then add source files with Project → Add item.... The IDE does
not modify an existing .prj when creating a project whose name is already in
use. A project file normally lives in the project root; the file dialog can
create or open a project in any accessible directory. The file uses TurboIDE's
text format, not Borland's binary format.
Example UTF-8 project file:
source=src/main.c
source=src/math.c
include=include
define=USE_FAST_MATH
library=user32
Paths are relative to the .prj directory. source may occur more than once;
include adds a header directory; define is passed as -D; and
library=foo is passed as -lfoo (a complete -lfoo argument is accepted as
well). Program arguments use repeated arg=... lines; the runtime directory
uses rundir=....
File → Change dir... sets TurboIDE's current directory. It is stored in
settings and is the root for file dialogs and new files; it does not prevent
opening a project in a different directory. The IDE stores each project's
session beside its .prj in a same-named .dsk: open files, window positions,
cursors, active window, breakpoints, and Watch expressions. The session is
restored the next time the project is opened. .dsk is TurboIDE's text format;
it is not compatible with FPC binary desktop files.
Builds use -g -O0 -Wall -Wextra so the subsequent GDB session can see symbols
and variables.
- Debug → Start debugging builds the current file or project and starts GDB.
Set
TURBOIDE_GDBtogdb.exe, or add it toPATH. - F4 continues, F7 steps into, F8 steps over, Ctrl+F2 stops debugging, and Ctrl+F8 toggles a breakpoint on the current line.
- Ctrl+F7 adds a Watch; Ctrl+F4 reevaluates Watches. In the Watches window, Del removes the selected expression. Values update whenever the debugger stops; TurboIDE prohibits memory writes and explicit register access. GDB 9.1+ also blocks function calls, so it supports arbitrary expressions; older versions accept only simple variable names.
- Locals and Watches appear in separate windows. When execution stops, the IDE shows the source line and values; Alt+F5 displays the program screen.
Ctrl+F9builds the current files and runs the program.- The program receives console input/output; after it exits, the IDE restores the screen and editor window from which it was launched.
Alt+F5displays the User Screen. Press Enter to opencmd.exethere; useexitto close the shell.Alt+F5or Esc returns to the IDE.- For project arguments, add one
arg=valueper.prjline; each value becomes oneargvargument.