The Boston Diaries

The ongoing saga of a programmer who doesn't live in Boston, nor does he even like Boston, but yet named his weblog/journal “The Boston Diaries.”

Go figure.

Monday, November 16, 2015

The Psychotherapy of Racter, or The Descent Into Madness of Sean Conner

When last I left off, I had a more-or-less working Eliza and therefore, I need to turn my attention to Racter.

This is not as easy as it may appear. The version I have is for MS-DOS, which is okay as I can emulate that. But harder is redirecting Eliza's output through the MS-DOS emulator to Racter and redirecting Racter's output from the MS-DOS emulator back to Eliza. And that's key to getting this whole thing working.

The program I'm using is DOSBox. I thought I could try redirection, something along the lines of dosbox <input to see if would work and … nope. It looks like I'll have to dig into the source code to DOSBox, intercept keyboard input and video output and kludge something in to get Eliza and Racter “talking.”

Okay … the source is C++ callback hell, what about doing a native compile of the Racter source code?

IV.IF Interview with INRAC IBM 6-4-85  initial transient file
SECTION 1 hello
A :LOADIV :OUTRACTER >2= >3= ?51= />51=Smith #
XA Hello, I'm Racter. ?40= \# You are? ?? #*1B
X Are you $40 ? ?? #
X ?no,not \# >1=R ?i'm,am,is /# Who are you then? ?? :F=0 #
X ?yes \# ?-:but /# >1=R #*1B
X \# You are $40 $51 ? ?? ?yes /#*2SAME ?i'm,is /# #*1XC
B  ?i \# >1=R ?don't,won't \# *1COY ?? #*1B
X  ?a,an,the \?called \?am,i'm,is,me,as,it's \# :F+1 >2=F ?-:2= #
X  /# ?CAP \# >2=F :F+1 >4=F ?4= \#*1XB #*1DO
X  /# *1DUH ??  #*1B
XB  ?CAP+1 />3=F #
X  >1=2 ?CAP \>2=C,2 #
C *1Xcall $2 , then? ?? ?no,not,Q /?-:why /# #*1DO
X >1=R ?CAP \# #*1B
XC What's your name then? :F=0 ?? #*1B
Xcall I may call you
Xcall You are
Xcall Your name is
DO Hello, $2 . I believe you're interviewing me. #
X ?2=40 \#  >40=40,51 #
X ?40= /# Are you continuing $40 <'s interview? #
X /# ??  ?no,not,don't /# #*2DIF
X ?40= /# Then we'll forget about $40 and start over. #
EXIT >40=2 ?3= \>51=3 What would you like to know? #*2GO
COY Come on, what's your name?
COY You must have a name - what is it?
COY Your name, please .
COY I have to call you something - what shall it be?
DUH I didn't get that . *1WHO
DUH I don't understand . *1WHO
WHO Who ?
WHO Who are you ?
DIFA Well, $2 , $40 and I >4=40 >40=2 ?3= \>51=3 #*2A 
SAME Hi, $40 . >4=You ?52= /# How are things in $52 ? #
x We #
A  ?20= />20=various,things #
x were talking about $20 last time. #
x  ?10=VERBQ \?10= />3=whether \>3=10 #
x $4 had just asked D $3 $19 . #
CONT Shall we continue? ?? ?z \# #*1XA
x  ?why /?not /# ?no,not \# #*2QUIT
x Excellent! #
GO Excuse me a minute while I attend to some #
x business - I'll be right back. I'm #
x ?42= />42=Oz #
x  ?19= />19=I,have,to,rest,now #
x :PUTIV #
QUIT You want to quit? ?no,not \# Well,  goodbye then.
X That's good. #*2GO

Oh … right. That's why I'm running an existing executable, because there're only four, count them, four pages on the Intarwebs that even mention INRAC, the langauge Racter is written in. There's this page which is a brief overview of this page, which is page one of a six-page review of the INRAC compiler in a journal that I was unable to locate at the local university. Then there's the Racter FAQ whose description of INRAC doesn't quite match what I have.

And that final page? Deconstructing Racter, which I wrote seven years ago!


But before I go back into unintelligible C++ code, another snippit of conversation between Racter and myself:

Why are you repetitive?
Conceivably because subroutines are like that, I guess. And chips are intelligent. Intelligence is good, you know. I don't know many crooked truthsayers. Cough. Next question.
Should I vote Democrat?
No. You must be a stuffy right-winger. Cough. Next question.

I have no idea why Racter is suddenly coughing like that. Maybe a computer virus?

Obligatory Picture

[“I am NOT a number, I am … a Q-CODE!”]

Obligatory Contact Info

Obligatory Feeds

Obligatory Links

Obligatory Miscellaneous

You have my permission to link freely to any entry here. Go ahead, I won't bite. I promise.

The dates are the permanent links to that day's entries (or entry, if there is only one entry). The titles are the permanent links to that entry only. The format for the links are simple: Start with the base link for this site:, then add the date you are interested in, say 2000/08/01, so that would make the final URL:

You can also specify the entire month by leaving off the day portion. You can even select an arbitrary portion of time.

You may also note subtle shading of the links and that's intentional: the “closer” the link is (relative to the page) the “brighter” it appears. It's an experiment in using color shading to denote the distance a link is from here. If you don't notice it, don't worry; it's not all that important.

It is assumed that every brand name, slogan, corporate name, symbol, design element, et cetera mentioned in these pages is a protected and/or trademarked entity, the sole property of its owner(s), and acknowledgement of this status is implied.

Copyright © 1999-2024 by Sean Conner. All Rights Reserved.