PROTEL 2026 · Open source

Back onthe line.

PROTEL, the Procedure Oriented Type Enforcing Language, was designed at Bell-Northern Research in 1975 to program Nortel’s DMS‑100 switches. Now it’s back as PROTEL 2026: a free, open toolchain that enforces types at compile time, transpiles to C++, and builds native code with GCC or clang++ on macOS and UNIX/Linux.

GPLv3 · Free and open · Backed by Binary Systems

The why

The field is a terrible place to find a bug.

PROTEL was built for software that couldn’t afford to fail: real-time call processing on telephone switches. Its answer was strict typing, so mistakes surface when you compile, not when a customer is on the line. That idea never stopped being right.

Typed to the range

Declare {0 TO 255} and mean it. Assign 300 and Pc stops the build with a type error. Ranged subtypes, sets, tables, structures and descriptors come standard.

Procedures, not ceremony

Block-structured and procedure oriented, in the Algol and Pascal family. Classes and methods are there when you want them, not stacked on everything by default.

Heritage worth keeping

A language with decades in production telecom shouldn’t die with the company that made it. PROTEL 2026 keeps the semantics and adds a modern, open toolchain.

“Strong typing aspects allow errors to be caught at compile time, not run time. It’s all in the name, Procedure Oriented Type Enforcing Language. This is not retro computing, it is smart computing.”

Vincente D’Ingianni, author of PROTEL 2026

Heritage

Born in the switch room.

Over the decades, Nortel teams wrote tens of millions of lines of PROTEL for production switches around the world. Then came bankruptcy and corporate mismanagement, and the language was left for dead. PROTEL 2026 brings it back.

  1. 1975Designed at Bell-Northern Research for the DMS-100 and its Switching Operating System.
  2. 1979Protel: a high level language for telephony, IEEE COMPSAC.
  3. 1981Experience With a Modular Typed Language: Protel, ICSE.
  4. 1987The Introductory Manual revision that PROTEL 2026’s manual is derived from.
  5. 2026PROTEL 2026: open toolchain, GCC/clang++ backend, new manuals.

Historical references are drawn from the project README and manuals. Nortel, BNR, DMS and SOS are named for history only. PROTEL 2026 is an independent revival and isn’t affiliated with or endorsed by any successor of those companies.

What PROTEL 2026 does

A whole toolchain. One idea.

Write PROTEL. Pc parses it, enforces the types, transpiles it to readable C++ and hands it to the compiler you already trust.

Pc

The compiler

Parses, type-checks and transpiles to C++, or to C with --emit-c. Then it drives GCC or clang++ to build an object, an executable or a run with --run.

§11.3

Strong typing at compile time

Out-of-range constants, incompatible pointers and mismatched return types are caught before anything gets linked.

EXTERNAL / EXPORT

Plays well with others

Call C, C++, Rust, Swift, Python and Java from PROTEL, or call PROTEL from them, all through the C calling convention. Working examples ship in examples/interop/.

--classical

Legacy code welcome

Identifiers are case-sensitive by default. --classical restores Nortel DMS case-insensitivity, and PLS edition suffixes from .AA01 to .ZZ99 are recognized.

CLASS

Object-oriented extensions

Classes and methods, added cleanly on top of the procedural core, in the spirit of PROTEL-2.

Pc!

Scripts with a shebang

Put #!/usr/bin/env Pc! on the first line, chmod +x, and run a .P file like any script.

Pb

The Beautifier

Uppercases reserved keywords and can bold them for the terminal. Comments, strings and everything else are left alone.

protel-mode

GNU Emacs mode

A major mode for .P and related suffixes, with the Beautifier on C-c C-f.

Docs

Manuals, man pages, tests

A 97-page Introductory Manual and a 123-page Reference Manual, Markdown editions in docs/, man Pc and man Pb, and a pytest suite.

Read it like the signal

Left to right. No surprises.

PROTEL assigns left to right with ->, known colloquially as gazinta. There’s no C-style operator precedence to memorize. Here’s the factorial from the Introductory Manual, and what Pc says when a value won’t fit its type.

 examples/intro_1_3_factorial.P
SECTION factorial_demo;

TYPE integer {-32768 TO 32767};

DCL factorial PROC(n integer) RETURNS integer IS
BLOCK
   DCL result, i integer;
   n -> i -> result;
   WHILE (i - 1 -> i) > 1
   DO
      i * result -> result;
   ENDDO;
   RETURN result;
ENDBLOCK;
 Terminal
$ Pc examples/Hello.P --run
Hello, World!

$ Pc examples/intro_1_3_factorial_cli.P \
     -o build/fact --run -- 5
5! = 120

$ Pc examples/errors/err_constant_out_of_range.P
Pc: type error in '...err_constant_out_of_range.P':
value 300..300 is out of range for
{0 TO 255} in assignment statement
Output from PROTEL 2026 (Pc 0.3.0) on Linux with g++. Paths and line breaks shortened to fit.

Quick start

Dial tone in four commands.

You need: Python 3, GCC or clang++ with C++20 support, and make. Optional: GNU Emacs, plus Swift, Rust, Python or Java for the interop examples.

Install system-wide

Installs to /usr/local/protel and links Pc, Pc! and Pb into /usr/local/bin, with man pages.

git clone https://github.com/vincente666/PROTEL.git
cd PROTEL
sudo make install-system
Pc /usr/local/protel/examples/Hello.P --run

Or work from a checkout

make install sets up a project .venv and local man pages.

make install
export PATH="$PWD:$PATH"
export MANPATH="$PWD/man:$MANPATH"
make test

Compile, name, run

Transpile to stdout, build a named executable, or pass arguments to an ENTRY program.

Pc examples/Hello.P
Pc examples/Hello.P -o build/Hello --run
Pc examples/intro_5_5_2_args_exit.P \
   -o build/ArgsExit --run -- one two
Pc mymodule.P --classical --run

Make it a script

Add the shebang, mark it executable, and run it. Pretty-print with Pb.

#!/usr/bin/env Pc!
chmod +x myprog.P && ./myprog.P
Pb --bold < myprog.P > myprog.pretty.P
man Pc

Open source

Read every line.

No black box in this switch room. PROTEL 2026 is free software under the GNU General Public License v3. The compiler, runtime, grammar, Beautifier, Emacs mode, manuals and tests are all in the repo.

  • Use itRun it for any purpose, at no cost.
  • Inspect itThe grammar, type checker and transpiler are right there.
  • Extend itChange it, fork it, build on it.
  • Share itPass it on under the same GPLv3 terms.

Contribute

Star it, try it, break it, and tell us what you find.

  • Open an issue or a pull request on GitHub
  • Read AGENTS.md for architecture and contributor notes
  • Run make test before you send a change
  • Port a sample from the manuals into examples/

Backed by Binary Systems

Free and open. Backed by Binary Systems.

PROTEL 2026 is written by Vincente D’Ingianni, Director of Professional Services at Binary Systems, Inc. in Richardson, Texas, and a former Advisor and Manager in BNR/Nortel DMS‑500 development. The code is free. When you want the people who know it, BSI Professional Services is a call away.

  • Getting started. Setup, onboarding and training for your team.
  • Integration. Wiring PROTEL into C, C++, Rust, Swift, Python or Java code through EXTERNAL and EXPORT.
  • Legacy code. Working with classical PROTEL and PLS edition sources in --classical mode.
  • Custom work. Scoped toolchain extensions and support engagements.