The Pawn language

Skip to main content (skip navigation menu)






pawn

 
This product is made in the EU

Pawn's icon

An embedded scripting language

pawn is a simple, typeless, 32-bit extension language with a C-like syntax. A pawn "source" program is compiled to a binary file for optimal execution speed. The pawn compiler outputs P-code (or bytecode) that subsequently runs on an abstract machine. Execution speed, stability, simplicity and a small footprint were essential design criteria for both the language and the abstract machine.

At a glance


Current version 4.0.5749 (2020-04-03)
View the history of recent changes.
Downloads Microsoft Windows: a self-extracting setup.
Source code: stable source archive or the latest files on the GitHub project.
License Apache License 2.0, plus an exception clause to explicitly permit static linking of the library to commercial applications.
Installation Microsoft Windows: download the self-extracting setup and run it.
Linux & other: download a source archive as a ZIP file and read the README.TXT file after unpacking. (See also the "Getting started" section below).
Support pawn is hosted on GitHub. The project has an issue tracker.
For support on a commercial basis, please contact us by e-mail. We can build speed-optimized versions of the abstract machine (also known as "virtual machine" or VM) or JITs, add special language constructs, port the product to different microcontrollers, and write native function libraries for particular tasks.
Documentation All documentation is in "Adobe Acrobat" format (PDF). The main two books are the "Language Guide" and the "Implementer's Guide". Several extension modules are documented separately.
Screen shots pawn is a compiler and an abstract machine. The compiler is a console utility (i.e. you run it in a "DOS box" or a terminal), and the abstract machine is basically a library. As such, there isn't really something like a representative a screen shot. I have tried a few anyway... (Click on the pictures for a detailed view.)

Pawn IDE (for Windows and Linux)
Pawn IDE (for Windows and Linux)
Documentation extracted generated by the compiler
Documentation extracted generated by the compiler
Pawn Blocks Designer (visual programming)
Pawn Blocks Designer (visual programming)
Pawn console debugger
Pawn console debugger
Projects A list of projects and products that use pawn as a scripting language is on the page Where is pawn used?.

For any information not in this list, please browse through this page. Hopefully you will find what you are looking for.

 

Introduction

An introduction to the pawn language and abstract machine from a programmer's perspective was published in the October 1999 issue of Dr. Dobb's Journal —but at the time, the language was called Small. More verbose than the article, and more appropriate for non-expert programmers, is the manual. The manual contains a brief (tutorial) overview of the language, a language reference, programming notes on the abstract machine, casual notes about the why and how of many language features, and reference material.

Why pawn now that there is Java, Lua, REXX, and countless others? Well, when I needed a language toolkit whose executable code can be embedded in resource files or animation file formats, that had a good interface to native functions, that added little overhead to the main application and could run on platforms and microcontrollers with (very) little RAM, and that was pretty fast, I could not really find an existing toolkit that fitted my needs. See also a list of language features.

Unlike many languages, pawn is not intended to write complete full-scale applications in. pawn's purpose is to script the functionality provided by an application or by a device. It is in purpose similar to Microsoft's "Visual Basic for Applications", only quicker and smaller (and without the installation hassle).

pawn has been publicly available since 1998, and it has been steadily improving: more error checking, several bugs slashed, new features, and an increase in performance. There are still regular updates and patches: to fix bugs, to add features, or simply to enhance the ease-of-use.

A couple of other points are worth mentioning:

 
Pawn's icon

Getting started


The first question is: what do you need? If you are using Microsoft Windows, download the pawn toolkit as a self-extracting setup file; this gives everything that you need to get started:

Linux users must build the toolkit from the source code. You can get the source code from the GitHub project. The "README.TXT" file (in the GitHub project) contains a section for building binaries from the source code, by using the CMake makefile generator. You should also download the two documentation files "Language Guide" and "Implementer's guide". The "Implementers Guide" will inform you about the options and configurations that you have in building the binaries, and the "Language guide" will teach you the pawn language. If you are new to programming, the thin guide "A Gentle Introduction to Programming" aims at helping you with the first steps.

Assuming that you have obtained (somehow) an executable version of the pawn compiler and the pawn run-time, you should put it in a directory. However, the pawn compiler also needs to locate "include files". On many operating systems, the pawn compiler is able to automatically read these header files from the directory "include" that is below the directory that the compiler is in itself. Thus, if the pawn compiler is in directory "C:\WhatEver\Pawn", I suggest that you also create directory "C:\WhatEver\Pawn\include" and copy the ".inc" files there. If your operating system is not compatible with Win32 or Linux, the pawn compiler may not know how to locate the "include" directory and you have to specify it yourself with the "-i" command line option (when running the compiler).

That behind your back, locate one of the example scripts (e.g. "hello.p") and compile it with:

pawncc hello
This should produce "hello.amx", which you can then run with:
pawnrun hello

Many applications that use pawn, run the pawn compiler as a child process; that is, the pawn compiler is often a separate, self-contained program. The abstract machine, however, is almost never a separate process: typically you want the abstract machine to be integrated in the application so that scripts can call into the application. In other words, you might be using "pawncc" as is, but you won't be using "pawnrun" as is. This is why pawnrun is kept short and dumb, "pawnrun" is a program that is mostly developed in the pawn manual to show you what you should do at a minimum to embed pawn into a program.

 
Pawn's icon

Support


Please visit the GitHub project for support of pawn. Note, however, that pawn is usually embedded in another product —an application or a device. In that case, you may need to ask support on the site or forum of that product. (See also the page Where is pawn used?).

pawn is a free product that is maintained primarily in spare time. We make no money from the product, neither from the software, nor from the manual, nor from support. I therefore need to ask you for patience when we are slow in responding to your questions or. Obviously, if you really need support or a custom version of pawn, you can always hire us.

 
Pawn's icon

Downloads


If you want to find out more, you will need to download at least one or both manuals. The book "The Language" contains the syntax of the pawn language, and "Implementer's Guide" covers the interface functions of the abstract machine and various reference materials. If you are new to programming, first read the "Introduction to Programming" booklet (just 12 pages). You need to be able to view or print Adobe Acrobat ("PDF") files for example via Acrobat Reader.

Full install, Microsoft Windows
  • setup file icon The pawn toolkit for Microsoft Windows in a self-extracting setup, version 4.0.5749 (7.7 MiB; 2020-04-03).
    This setup puts the tools in the appropriate directories.
    It includes precompiled binaries, the Quincy IDE, all documentation, all source code, codepage files and the AMX DLLs.
Source code archives
Documentation
The documentation for pawn is in PDF format. You can download individual documents from the GitHub project. Alternatively, all documents are also contained in self-extracting setup for Microsoft Windows.
Regression test
  • ZIP file icon A regression test suite for the pawn compiler and the abstract machine is available (31 KiB; 2020-04-03).
    The test suite requires a "REXX" interpreter to run. The test script works on Microsoft Windows systems, and it probably works on other systems with only minor modifications (I am using the Regina REXX interpreter, which runs on many platforms). You may want to run your compiler/abstract machine through this if you have modified anything.
 
Pawn's icon

Exception clause to the Apache License version 2.0


As a special exception to the Apache License 2.0 (and referring to the definitions in Section 1 of that license), you may link, statically or dynamically, the "Work" to other modules to produce an executable file containing portions of the "Work", and distribute that executable file in "Object" form under the terms of your choice, without any of the additional requirements listed in Section 4 of the Apache License 2.0. This exception applies only to redistributions in "Object" form (not "Source" form) and only if no modifications have been made to the "Work".

 
Pawn's icon

Help requested


  1. As I said, my first priority is getting the bugs out. If you come across bad code generation problems or other errors, send me the shortest program that illustrates the bug. I will be grateful for it.
  2. pawn is reported to run under Microsoft DOS, all versions of Microsoft Windows (including Windows CE), Linux, MacOS, FreeBSD, XBox, PlayStation, FreeRTOS (on an ARM7-architecture), and µC/OS-II. If you have been able to port pawn to other environments, please send me the changes. Others will be grateful for it.
  3. The documentation is getting better, I think, but I am not a good critic of my own work. Comments on my writing (especially errors and obscure paragraphs) are appreciated.

To contact me, send e-mail to thiadmer @ compuphase.com. Note, however, that I am regularly abroad and sometimes need 8 days to answer an e-mail.