Est. 1995 Beginner

O'Basic

O'Basic, Celtech Software's shareware desktop script language for Windows 95, a BASIC-like interpreter with built-in system objects, try/catch error handling and a script-to-EXE compiler.

Created by Sean O'Dell (Celtech Software)

Paradigm Procedural, with built-in and extension objects
Typing Sigil-typed: $ suffix for strings, # suffix for numbers (e.g. a$, b#); string and number arrays
First Appeared 1995 (copyright year of O'Basic95; earliest dated release files 21 January 1996)
Latest Version O'Basic97 97.034 (current by April 2000, still offered in 2002)

O’Basic was a shareware script language for Microsoft Windows made by Celtech Software, a small company in the Los Angeles area run by Sean O’Dell. It first shipped as O’Basic95, which Celtech called a “system script language for Windows95”. It was later renamed O’Basic97, billed as a “Desktop Script Language for Windows95”. The language looked like simple BASIC. Behind that syntax was an object model for the Windows 95 shell, registry, clipboard, DDE, serial ports, sockets and printers. It also had structured Try/Catch exception handling, which was unusual for a BASIC of the time, and could call any Windows API function directly.

O’Basic was one of several Windows scripting tools of the mid-1990s that tried to give power users and administrators more than DOS batch files offered, before Windows Script Host and VBScript became standard parts of Windows. It never became widely used. Its main historical interest is as a well-documented example of a small-vendor shareware language that was eventually released from its licence checks by its own author.

History & Origins

Celtech Software

In 1996 Celtech Software’s web site listed a small family of Windows utilities, all sharing the “O’” prefix:

ProductDescription (from Celtech’s 1996 home page)
O’Setup / O’Setup95Application installation toolkit (Windows 3.1 / Windows 95)
O’Basic95System scripting toolkit
O’Ledger95Credit/debit register
O’JournalTime-tracking register
O’FolderWindows 95-style folders
O’DateGraphical calendar
GunDesktop toy

The company’s address was Valley Village, California, and later Woodland Hills. The shareware documentation names Sean O’Dell as the contact for distribution questions. O’Dell also signed the 2002 Freedom Patch “Sean O’Dell, Celtech Software”. The page names him as creator on that basis, since he is the only developer the surviving material identifies.

O’Basic95

The shareware package’s README gives the language’s copyright year as 1995. Windows 95 itself shipped in August 1995, so any O’Basic95 release can only date from late 1995 or after. The earliest copies found online are on shareware CD-ROMs from early 1996, such as DP Tool Club 28, Cream of the Crop 12 and Night Owl 20, where obasic95.zip holds a single SETUP.EXE plus README, SYSOPS and FILE_ID files, all dated 21 January 1996. Its description calls O’Basic95 a “System script language for Windows95” with “Standard object-oriented basic syntax with extended registry access, clipboard, DDE client, INI file writing, printing, and more!” A 1995 shareware release is plausible, since a January 1996 upload could follow a late-1995 one, but it is not confirmed. 1995 is best read as the year development or copyright began, and January 1996 as the earliest documented release.

A revised obasic95.zip, on The Best of Windows 95.com CD-ROM of September 1996 with every file dated 8 August 1996, adds “For registered users: ODBC access, high-level FTP service and a script-to-EXE compiler” to the description. That package contained:

  • OB95DE.EXE, the editor (the code editor and dialog editor in one program)
  • OBENG10.DLL, the interpreter engine
  • OBMAKE.EXE, the script-to-EXE compiler, available to registered users only
  • FTP.OBX and ODBC.OBX, two extension objects
  • TEMPLATE.COD, a starter script, and EXAMPLES.ZIP

It was sold under the shareware model of the day. The trial was fully functional, but O’Basic would refuse to run any .COD script more than 30 days after it was created. Registering with Celtech (reportedly also possible through the RegNet registration service, though the surviving package text names only Celtech) unlocked existing scripts again. The price list in the package, dated 12 June 1996, gave $40 for O’Basic95 with the SDK free. The order form also listed Professional ($120) and Developer ($290) editions.

O’Basic97

By late 1997 the product had become O’Basic97 and used version numbers of the form 97.0nn. Celtech’s announcements page shows a fast release pace in late 1997 and early 1998:

VersionDateChanges noted by Celtech
97.01728 Oct 1997Set, Reset; Form.Controls and Form.ControlCount
97.0188 Nov 1997MatchText (DOS-style wildcards), CompareText, Socket Link
97.01913 Nov 1997Forms can be shown as icons in the system tray; Socket improvements
97.02015 Nov 1997Macro-evaluation methods on arrays; a Telnet protocol implementation
97.02124 Nov 1997Updated InternetFTP and Network extensions; array Min/Max
97.0227 Jan 1998SelectStart and SelectLength on TextBox objects
97.02316 Jan 1998Macro-recorder crash fix; SoundEx function

The installer page listed 97.025 in April 1998. By April 2000 the current version was 97.034, sold as a single-user licence for Windows 95/98/NT at $80 or a site licence at $1,600. No later version number appears in any surviving Celtech page. In 2002 the separate obasic.com site still offered 97.034 as both the trial and the full version.

Celtech’s 2000 product page also says that Ziff-Davis (ZDNet) gave O’Basic97 a four-star rating. That review has not been found independently, so the claim rests on the vendor’s word only.

The Freedom Patch

Some time after June 2002, Celtech published an “O’Basic Freedom Patch” on obasic.com (the earliest archived copy dates from 2006). It replaces three files in a trial installation: OBEngine.dll, the editor OB97DE.exe, and the compiler OBMake.exe. All three are dated 11 June 2002. In its README, O’Dell explains that the new engine “performs no more checks for a license file, so it will execute any O’Basic scripts it finds”, and calls the result “complete freedom”. The patch is labelled beta and comes with no warranty. In effect it ended O’Basic as a commercial product.

Design Philosophy

Celtech’s 1996 overview sets out the goals plainly:

  • One file per script. Code and dialog resources were stored together in a single .COD file. The editor had a code pane and a dialog editor, and at run time the dialogs became real Windows 95 windows that the script could control.
  • BASIC syntax, object power. The syntax “looks a lot like simple BASIC code”. Celtech said what made O’Basic distinctive was its use of objects, which it compared to C++ and Delphi.
  • Errors are exceptions, not return codes. Functions always return valid values. When something fails, an exception is thrown and the script stops at that point, unless the code is wrapped in a Try/Catch block. Celtech claimed that scripts could therefore be written “with virtually no testing” and still be trusted not to carry on silently after an error.
  • Open-ended extensibility. New objects could be added as .OBX extension DLLs, written with the free SDK in Visual C++ 4.0 or Delphi. Those objects then became part of the language.

Key Features

Language

The November 1996 command list groups the core language as follows:

AreaStatements and functions
Control flowIf, For, While, Select, Proc (user-defined statements and functions), Goto, GoSub/Return, Exit
Dynamic allocationNew, Delete, plus the “old-style” Dim and ArraySize for arrays
Error handlingTry, Catch, Throw (user-defined errors), Resume
MetaprogrammingEval and EvalArray (run a string as script code), Run (run another .COD file)
IntrospectionIsStringVar, IsNumberVar, IsStringArray, IsNumberArray, IsObject
StringsMid, Left, Right, Pos, ParseTok, UCase, LTrim, Str, Hex, Oct and others; + concatenates

Variables carry their type in a sigil, $ for strings and # for numbers. Arrays are indexed with square brackets, as in Array$[1] and Array#[1]. String and number arrays are also objects, with methods such as Sort (documented as a quicksort), ParseTok, ReplaceAll, Total and Average.

Built-in objects

Some objects were static, meaning they always existed, such as Clipboard. Others were dynamic and had to be created with New and freed with Delete, such as Port for serial I/O. Printer worked both ways: one static instance connected to prn, and further instances could be created for ports such as lpt2. The 1996 list includes Application, StringArray, NumArray, Clipboard, Clock, DDEClient, Dialog, DLL, Heap, IniFile, MailSlot, Port, Printer, Registry, Status and Socket.

The DLL and Heap objects together let a script declare and call any Windows API function, with Heap managing raw memory buffers. From the Visual Basic world O’Basic also borrowed FindWindow and SendKeys, so a script could drive programs that had no programming interface by typing into them.

Windows shell integration

The language included commands for long and short (8.3) file names, creating shortcuts (CreateLink), setting the wallpaper, shell file operations with the standard progress animation (FileOperation), ExitWindows, folder-browse and open/save dialogs, and a hideable DOS-style console for Print and GetString.

Extension objects (OBX)

OBXPurpose (per Celtech, 1996)
ArchiverCreate and edit compressed archives using deflate/inflate
CGIManagerWrite CGI scripts: decodes GET/POST input and merges HTML templates
InternetFTPHigh-level FTP client built on Microsoft’s ActiveX Internet extensions
MailEncoderUUencode and MIME encoding
NetworkMap network drives and redirect printers
ODBCSourceView and edit ODBC data sources and run SQL

Added in O’Basic97

Celtech’s 2000 feature list adds a macro recorder that turned keyboard and mouse activity into script code, an editor with an integrated debugger, OLE Automation objects, an SMTP mail client with attachments, native Microsoft Access database support, script locking against viewing and editing, and the script-to-EXE compiler. Some of these features were for registered users only.

Example

This is Philipp Winterberg’s O’Basic program from 99-bottles-of-beer.net (2005), shown as published. It uses $ and # variables, a For…EndFor loop, + for concatenation, and a two-argument str(). The ^J and ^M sequences appear to stand for linefeed and carriage-return characters, but this has not been checked against an O’Basic manual.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
' O'Basic version of 99 Bottles of beer (Bottles.cod)
' See http://www.obasic.com/
' Philipp Winterberg, http://www.winterbergs.de

a$ = " bottle(s) of beer"
c$ = a$ + " on the wall"
for b# = 1 to 99
  print str(100 - b#, 2) + c$ + ","^J"^M"
  print str(100 - b#, 2) + a$ + "."^J"^M"
  print "Take one down, pass it around,"^J"^M"
  print str(99 - b#, 2) + c$ + "."^J"^M"^J"^M"
endfor

Community

Besides Celtech’s own message board and newsgroup, the 2000 product page points to three community resources:

  • Contacts!, Jim Vaughan’s contact manager written entirely in O’Basic
  • The O’Basic Domain, a site of facts and code snippets run by Simeon Wood
  • O’Basic.de, a German site run by Helmut Reibold. Celtech says Reibold worked at the magazine CD+Extra, which ran an O’Basic programming contest

Current Relevance

O’Basic is a historical language. It had no releases after the 97.034 line and the 2002 Freedom Patch. It was built for Windows 95 and sold for 95/98/NT, and nothing documents support for any later version of Windows. Its jobs were later covered by tools that came with Windows or were free: Windows Script Host with VBScript and JScript from 1998, then AutoIt, AutoHotkey and eventually PowerShell. There is no maintained interpreter and no Docker image. The trial installer and the Freedom Patch survive only in web archives and on shareware CD-ROM collections.

Why It Matters

O’Basic shows what a very small shareware company could do in the early Windows 95 years. Celtech put an object model for the new Windows shell, direct Win32 API calls, sockets, ODBC, a dialog designer and a native compiler behind a BASIC syntax, and sold it for $40. A few of its choices were early for a hobbyist BASIC, notably exception-style Try/Catch error handling in place of ON ERROR GOTO, and a plug-in object system with a free SDK. Its end is also typical of the era: the author did not shut it down, but released a patch that removed the licence checks.

Sources and caveats

  • Celtech Software web pages at celsoft.com (1996–2000) and obasic.com (2001–2006), read from the Internet Archive: product overview, command list (22 November 1996), extension-object page, announcements (1997–98), install page (1998), product and pricing pages (2000).
  • obasic95.zip (files dated 21 January 1996) on DP Tool Club 28 and other early-1996 shareware CD-ROMs, read via discmaster.textfiles.com: README.TXT, SYSOPS.TXT, FILE_ID.DIZ.
  • obasic95.zip (files dated 8 August 1996) on The Best of Windows 95.com, September 1996, read via discmaster.textfiles.com: README.TXT, INFO.TXT, FILE_ID.DIZ.
  • The README of the O’Basic Freedom Patch (archived from obasic.com).
  • 99-bottles-of-beer.net entry 502 (Philipp Winterberg, 20 April 2005).
  • Not independently verified: whether O’Basic95 was released in 1995 or only copyrighted then, the RegNet registration route, the ZDNet four-star rating, the CD+Extra contest, the 99-bottles-of-beer.net entry (not re-checked in review), and the date O’Basic97 was first released.

Timeline

1995
Copyright year given for O'Basic95 by Celtech Software, in the README.TXT of the shareware package ("O'Basic95 Copyright (c) 1995 Celtech Software")
1996
The earliest surviving O'Basic95 shareware package, obasic95.zip with files dated 21 January 1996, appears on several early-1996 shareware CD-ROMs (among them DP Tool Club 28, Cream of the Crop 12 and Night Owl 20)
1996
A revised obasic95.zip, with files dated 8 August 1996, adds ODBC access, high-level FTP and a script-to-EXE compiler for registered users; it is included on The Best of Windows 95.com CD-ROM (September 1996). Its price list is dated 12 June 1996: $40 for O'Basic95, SDK free
1996
Celtech's web site at celsoft.com documents the language, publishes a command list dated 22 November 1996, and offers six extension objects (Archiver, CGIManager, InternetFTP, MailEncoder, Network, ODBCSource) plus a free SDK for Visual C++ 4.0 and Delphi
1997
The product is now called O'Basic97 and uses date-style version numbers. Celtech's announcements page logs v97.017 on 28 October 1997, followed by six more releases through v97.023 on 16 January 1998
1998
The installer page lists version 97.025 (obasic97.exe, dated 18 April 1998)
2000
Version 97.034 is current. O'Basic97 is now sold for Windows 95/98/NT at $80 per user or $1,600 for a site licence, and has gained a macro recorder, an integrated debugger, an SMTP client and Microsoft Access support
2001
A dedicated O'Basic web site at obasic.com appears (pages dated December 2001), still offering the 30-day trial and full version 97.034
2002
Sean O'Dell publishes the "O'Basic Freedom Patch" (files dated 11 June 2002; the earliest archived copy is from 2006). It replaces the engine, editor and compiler with builds that no longer check for a licence file
2005
Philipp Winterberg adds an O'Basic version of 99 Bottles of Beer to 99-bottles-of-beer.net (dated 20 April 2005), one of the few O'Basic programs still easy to find online

Notable Uses & Legacy

Contacts! by Jim Vaughan

A complete contact manager written entirely in O'Basic. Celtech linked to it from the product page from 1996 onward as its showcase of what the language could do

CD+Extra programming contest

According to Celtech's product page (2000), the German computer magazine CD+Extra ran a contest to find the best O'Basic program. The contest was linked through Helmut Reibold's German fan site, O'Basic.de

Windows system automation and CGI scripting

O'Basic was marketed for automating Windows 95: driving other programs with FindWindow and SendKeys, editing the registry, mapping network drives and making FTP transfers. With the CGIManager extension it could also run as a web-server CGI script language

Language Influence

Influenced By

Running Today

Run examples using the official Docker image:

docker pull
Last updated: