The 486SX

It’s not just COVID-19 vaccines receiving large quantities of disinformation. Even the 486SX has its own Holocaust Deniers. I couldn’t believe this popped up again months ago.

Image by Michael Schwarzenberger from Pixabay

The time honored (and correct) tale of the 486SX was that the original units were 486DX chips with a defective math co-processor. With every new chip design, especially back there and back then, there was always a bit of a yield problem until the manufacturing process got worked out. Many times you ended up with junk. INTEL got lucky with this defect. Since these chips weren’t technically “scrap” because everything other than the math co-processor worked, they stock piled them. Even in this state, it was an enhanced 386 processor so it wasn’t without value.

This tale was widely reported at the time. It is still reported today.

In April of 1991 Intel launched the Intel i486SX chip, bringing a lower-cost processor to the PC market. It was a modified i486DX with the FPU (floating-point unit) disabled. In fact, all early were in fact i486DX chips with a defective FPU, with the the FPU’s power and bus connections were destroyed with a laser.

Zdnet

Hopefully you will click the link and scroll down to read what the i487 really was. Here are some other links to read if you wish.

https://cpumuseum.jimdofree.com/museum/intel/80486/

https://arstechnica.com/civis/viewtopic.php?t=390388

Google books

Another Google books

Yet Another Google books

Even Byte Magazine told the 486SX story.

Even economists know the story of the 486SX.

Now we will check in with Nutter Central

Every time I hear this stuff spewed or see it written I cannot help thinking about the Armadillo Hat Wearing Guy from Dukes of Hazzard.

===== Nutter Central
This has widely been debunked.

The SXs were introduced to the market years after the introduction of
the DXs. Intel didn’t start to have massive production problems all of a
sudden and thus decided to pull this stunt. The SXs were designed to
have the FPU disabled, and their FPU was for this reason ever tested.
The only reason for the introduction of the SX was market segmentation
to compete against AMD.

Here’s some links for you, given you seem to able to Google “486 sx
defective” (and leave it in the URLs that you link), but somehow
conveniently IGNORING the first couple of results, even if they include
first-hand accounts of Intel engineers who worked on the 486 that
disprove the whole defective story:

http://www.os2museum.com/wp/lies-damn-lies-and-wikipedia/

By the way, did you notice that the Wikipedia page that YOU linked
doesn’t talk about those chips being “defective” DXs?
Because that’s a lie, as discussed in the talk page:

https://en.wikipedia.org/wiki/Talk:Intel_80486SX

=====

Back to Reality and Case Studies

When you take some business courses covering how to turn failure into profits the 486SX is generally one of the cases discussed. Here are some others:

  • Sony Walkman: A shiny new VP combined a failed portable tape recorder that couldn’t record with an earbud/headphone set that had no market. Both R&D failures that, when combined became a highly profitable.
  • 3M Post-It Notes: Engineers and scientists set out to create a glue so strong it made Crazy glue look like Elmer’s School Glue. They took the path of exponentially increasing the length of time to dry. The end result was it never really dries and bonds. It was a complete failure until someone used it to glue little yellow pieces of paper together in the form of note pads. People found you could stick them to anything and they would come right off.
  • Gasoline: This was largely a byproduct of making heating and lamp oil. It was dumped into rivers and burned off . . . Until Henry Ford came along.
  • Vulcanization: Mr. Goodyear meeting investors in a shed that had a wood stove for heat was raging that they wouldn’t give him more money. Rubber tires were so flimsy and blew out so often that “can I kick the tires” became a phrase in American culture. Flinging his new hunk of rubber around while hollering and gesturing with his arms, it landed on the hot wood stove. After scraping it off the stove they found the result was still flexible and far more impervious to cuts. He got his money.

I read a book covering that stuff years ago, but cannot remember the title. No, it wasn’t this economics book.

Interesting Take and Source of Confusion

Wikipedia has an interesting take on the 486SX. It is only interesting because it has this phrasing.

AMD had begun manufacturing its 386DX clone which was faster than Intel’s. To respond to this new situation Intel wanted to provide a lower cost i486 CPU for system integrators, but without sacrificing the better profit margins of a “full” i486. This was accomplished through a debug feature called Disable Floating Point (DFP), by grounding a certain bond wire in the CPU package. The i486SX was introduced in mid-1991 at 20 MHz in a PGA package. Later (1992) versions of the i486SX had the FPU entirely removed for cost-cutting reasons and comes in surface-mount packages as well.

Every story said they were defective 486DX chips, even this one. Whether the defect happened due to manufacturing error or by “grounding a certain bond wire in the CPU” what was initially sold as the 486SX was a defective 486DX. The nutters also overlook the fact that nothing stopped INTEL from taking 486DX chips that really did fail FPU testing and sending them down the 486SX line that disabled the non-functioning FPU.

My Tidbit

Prior to DEC releasing the first Alpha computers I was doing a project for Digital Equipment. Sometimes I was in the Elk Grove Village office and sometimes out at the client site in Melrose Park. When I was in the office, across the hall from where I sat was one of the many people working on the first Alpha computers. Cannot find a picture of the one I used to own or remember the exact model. Many looked like this.

DEC Alpha running Windows NT

You could firmware swap the console on these types of workstations. One console allowed you to run Windows NT special built for the Alpha (Microsoft actually preferred using the Alpha for development.) The other let you run OpenVMS. Technically I wasn’t supposed to see any of the stuff I saw, but the boys and girls at DEC liked me.

Sometimes a group of us would have lunch in the cafeteria. One day, one of the people who joined our table said he was working on the 486SX “Dandy.” He volunteered that Intel had told them the 486SX was a DX with a defective FPU.

Let me stress this part. Nobody cared. If those chips couldn’t be sold they would be scrapped. E-waste was a problem even back then. Giant tube type monitors failed after a few years. Newer, better, faster, computers were being announced every six months or so. By iPhone standards, we weren’t throwing as many units away, but they were much bigger units.

I really like the write-up CPU Museum has on these chips. Lots of nice pictures with details links. They don’t wade into the argument, they just move on.

Here’s the Reality

It was all of the above and you can prove it to yourself.

Simply go to Google Books and search for all of the trade rags printed during 1991. Computer World, Computer Shopper, PC Magazine, Info World, Byte, etc. You want to focus your attention (usually) on the “Letters” sections. It won’t take long for you to realize that INTEL had a team dedicated to reading the weekly trade rags and writing a polite nasty-gram each and every time the magazines published something unflattering about INTEL.

When you find a letter from INTEL take a quick glance at the previous article they are complaining about from the previous issue. Won’t take you long. I seem to remember the longest articles ever published in those things not exceeding an office bathroom trip.

After you have come to the same conclusion that INTEL had an entire group whose job it was to bitch about bad press use the search utility to find 486SX articles stating they are defective 486DX chips. Now look at the “letters” section for the next month. Not once do I remember reading a nasty-gram from INTEL complaining about the magazines claiming 486SX chips were defective 486DX chips initially. Search for yourself. Do the other search first though. You need to get a feel for just how hard INTEL beat back bad press. If it wasn’t “true enough” they wouldn’t have let it slide.

Disabling or Disabled

Personally, I’m willing to believe it was all of the above when it came to the disabling of the FPU. A robot or mechanically controlled laser (that they probably already had laying around) to do the much rumored cutting on the defective 486DX chips was logically the shortest path to 486SX production. They had no idea how well these were going to sell. If AMD hadn’t release a better 386 than INTEL had on the market, below the 486DX price point, INTEL might not have been shamed into releasing the 486SX. Really depends how high the pile of 486DX processors with defective FPU got.

Setting up a line to “ground a certain bond wire” would not have been a risk worth taking until they could know how well the 486SX would sell. The nutters never consider the fact that “bond wire” story did get out. I was active in the BBS world back then. There were lots of students enrolled in the electronics hardware programs at DeVry and other schools. Not once did I ever hear of any “hacked” or “unlocked” 486DX chips on the market.

Dudes would have tried that!

We were putting RLL controllers on Miniscribe MFM drives because we found out the MFM model numbers that corresponded to the RLL certified models. We were all young and dumb back then. Willing to fry something just to see if it would work. I fried two of those drives. Actually I fried the same pair of drives twice. There was a place you could send them to that would replace the one chip that would burn out in the on-drive logic board. You got over a year out of them doing that. You rarely got five years out of a hard drive back then anyway.

Overclocking isn’t something new.

You have firmware accessible from the keyboard to overclock now. We had dudes tweaking motherboards.

Even today I cannot find anyone claiming they made such a conversion from 486SX to 486DX. I can only find one mention of the “drill a hole in the right place” and that is as much as they mention. There would have been something on the BBS Echomail networks and it would have survived to the Internet Achive.

The CUTE Journey

Every now and then you will find yourself needing to install a really old Ubuntu version. I stumbled into this with CUTE and Scintilla. You see, the RedDiamond project really needs to jump ship from QPlainTextEdit. The syntax highlighting available in that module is horribly inefficient. If you never have more than a couple thousand lines in your source file and you don’t have multiple source files of that size, you can probably continue on fat, dumb, and happy with it. Life sucks if you routinely have source files tipping the scales at 5K lines or more. This makes for a long load time. Even the creator of Featherpad is starting to have updates tweaking the syntax highlighting because he too is using that class and the class is more of a student project than a robust editing widget.

Thankfully Scintilla is out there. Sadly, nobody had yet ported it to CopperSpice. I have a port but I haven’t had time to work on the new editor version so I cannot say for certain my port works. The Qt port that is part of Scintilla relies on a somewhat dangerous thing. It is relying on every character either being one byte or starting with some multi-byte indicator value making it a two byte character. I’m sure it works in America, just look at all of the editors using Scintilla and Qt.

QString in Qt is very different from what CopperSpice has implemented. I got pulled away from my coding helping out on the family farm and by life in general. I coded what I thought was going to work quite a while back. CopperSpice string changes made it sound like the existing QByteArray logic used by the Qt version wasn’t going to work. Internally CopperSpice uses QChar32 while internally Qt uses QChar which stores UTF-16.

At any rate, when I return to coding I will find out if my modifications were correct or if I need to force a UTF-16 QByteArray and use the previous logic. If I understood the logic correctly, UTF-16 cannot store all Unicode values in two bytes. CopperSpice chose QChar32 (wasting a bit of RAM) to embrace a wider Unicode set. This means the unofficial packages found in this post will be the last ones using QPlainTextEdit.

Research and Background

Make no mistake, there are hundreds of editors out there using Scintilla. The FOX Toolkit even includes one using a port of Scintilla for that GUI library. (The FOX Toolkit is worth kicking the tires on if you don’t need all of the bloat of Qt. It also doesn’t really push the C++ compiler which is why the toolkit works on so many systems.) I’ve known about Juffed for quite a while. Scintilla itself comes with Scite. Most everybody who does any serious programming on the x86 platform has heard of Notepadqq as well. A very robust free (as in beer) editor that doesn’t have the Microsoft tracking code.

The Internet is evil.

Burn that though into your brain. The Internet is evil. I got sucked into a all-of-my-free-time-and-then-some black hole because of one link. Once an editor was created using Scintilla it got added to that list and never removed. I glanced at several. One looked particularly interesting, and that one was CUTE.

CUTE text editor screenshot

I scraped that screenshot from this site. The screenshots had a Windows 95 era look to them but I wasn’t letting that bother me. There wasn’t a lot of code in the repo so it would be a good tire kicker getting started with Scintilla. (Yes, I was going to look at Scite code as well!)

There is a lesson for those who read on

There were things I added to RedDiamond I wanted to keep. There were things that started in Diamond and I was going to throw out. There were more features I wanted to add.

Above all, since I was going to use Scintilla as the editing core, I wanted to look at a lot of OpenSource editors for how-to ideas and features that might be worth adding to RedDiamond. I wanted to finally create the editor I had wanted my entire PC working career. I didn’t want a “general” text editor that got tabs wrong. I wanted a programmer’s text editor that got tabs correct, had EDT keypad navigation and a host of other features.

In short people, I wanted to make RedDiamond a kick-ass editor that would remain stable because it would not allow plug-ins. Admit it. You’ve all installed a plug-in for an editor and had it bust other things. Sometimes it busts the entire editor. Script-kiddies cutting their first programming teeth tend to write those things and they don’t know how to test. Worse yet, they suffer from “Oh, I’ll write my own” way more than us old people. That’s why between ELPA and MELPA Emacs has sooo many near-duplicate packages. Some might even be 100% duplicate, just written by someone else and placed in “the other” package library because someone didn’t bother to search both before writing.

One outright fantasy, would be if the final editor could not only get tabs correct, but could handle all/most legal COBOL source formats. Click the link for editors that got tabs wrong and read. Some time around COBOL-85 the source format dropped the line number/card format requirement. The drug induced hallucination would then be to extend that functionality to support BASIC line-number-era formatting and the no line required later. Same with FORTRAN and a few other languages. Before you go thinking that to be rather kooky, keep in mind PowerBasic created PBEdit with Scintilla. Sadly it isn’t OpenSource to look at.

I don’t care if you think those languages are old and obsolete. I want this to be the editor I’ve always wanted on the PC. There are thousands (possibly millions) of text editors out there and they all have things that suck about them. I want this editor to not have a sucky part.

Once it is close to perfect I can use it to create an IDE for CopperSpice. I’m old and want to retire so that IDE won’t be free, just the editor.

What’s the Lesson?

Never fixate on a “make it work today” project just because you have some time on your hands.

If you haven’t done that to yourself, you haven’t worked in IT long enough. I knew my brother wanted help with planting season and it was coming up fast. I knew there were other family obligations coming up. But “today,” whenever today was, I had the time. This seemed like a fun and interesting little challenge.

Pay somebody to slap you really hard when you start thinking like that.

The other lesson I’m saving until the very end.

Last Update 2013 and That was to Package Binaries

I saw that on SourceForge and didn’t care. Today I had time. Today I could play with trying to get this to build/run under Ubuntu 20.04 LTS. If that didn’t work, I was certain I could find a Ubuntu 12.04 LTS ISO to install in a VM.

Gotta say, I’ve been warned about thinking before. Doesn’t lead to good outcomes for me. This was no different. The little Gnome was cackling in the back of my mind. It really enjoys my enduring pointless frustration. That Gnome even helps me ignore obvious things like the fact this was written using Python 2 and the name of the missing library methods reminds me of something I can’t quite put my finger on.

qextscintilla.h – Why Does That Sound Familiar?

The Gnome kept stepping on this thought every time it popped up. I got most of the build to “work” using modern stuff once I installed Python and Qt development in a Ubuntu 20.04 LTS VM. I searched and I searched. There was something familiar about that file name. It had to be in one of the development package libraries.

Keep in mind I’m currently ignoring all of the other Scintilla based text editors that would actually compile because they are currently maintained. I want to get this one to work. The little Gnome is whispering “You can’t throw in the towel now. What will you do with the rest of your day? Are you really going to let a little program like this defeat you?”

It knows (gnows?) how to push my buttons.

Fine! I’ll set up a 12.04 LTS VM! Note, the setting up sections to follow are for

Setting up a Ubuntu 12.04 LTS VM in 2021

This part is only useful for those who want to set up 12.04 LTS in a VM today. I will be installing things that “should” have built CUTE.

Download Ubuntu 12.04 LTS release from here. Install into a VM.

sudo apt-get install build-essential
sudo apt-get install synaptic

Install all updates and if you are using Virtualbox, install the Guest Additions. This may require several reboots.

Reboot before proceeding.

sudo apt-get install subversion
sudo apt-get install python-dev   # this installs 2.7
sudo apt-get install jed jed-extra
sudo apt-get install qtcreator
sudo apt-get install libshiboken-dev
sudo apt-get install shiboken
sudo apt-get install pyqt-tools python-qt-dev
sudo apt-get install pyside-tools python-pyside.qtgui python-pyside.qtuitools python-pyside.qtxml
sudo apt-get install libpyside-dev
sudo apt-get install qt3-dev-tools libqt3-headers qt3-apps-dev python-qt3 libqt3-mt-dev
sudo apt-get install gnutls-bin libqt3-i18n python-qt3-gl
sudo apt-get install qt3-dev-tools-compat libfxscintilla-dev

Download and install version 2.10.0 of qscintilla from Riverbank Computering.

mkdir Projects
cd Projects
svn checkout https://svn.code.sf.net/p/cute/svn/trunk cute-svn
cd cute-svn/CUTE
jed configure.sh

Copy python 2.4 logic to make 2.7 in both places where 2.4 appears. You should have two sections in configure.sh looking much like the following:

elif test -f $withval/include/python2.4/Python.h; then
      PYTHON_INCDIR=$withval/include/python2.4
      PYTHON_LIBS="-L$withval/lib/python2.4/config -lpython2.4 -lutil -ldl"
elif test -f $withval/include/python2.7/Python.h; then
      PYTHON_INCDIR=$withval/include/python2.7
      PYTHON_LIBS="-L$withval/lib/python2.7/config -lpython2.7 -lutil -ldl"
if test -f /usr/include/python2.4/Python.h; then
      PYTHON_INCDIR=/usr/include/python2.4
      PYTHON_LIBS="-L/usr/lib/python2.4/config -lpython2.4 -lutil -ldl"
elif test -f /usr/include/python2.7/Python.h; then
      PYTHON_INCDIR=/usr/include/python2.7
      PYTHON_LIBS="-L/usr/lib/python2.7/config -lpython2.7 -lutil -ldl"

Configure still doesn’t work.

sudo apt-get install python-qscintilla2 libqscintilla2-dev

No Love!

Download Scintilla 3.2.4 from SourceForge and extract into Projects directory.

cd ~/Projects/scintilla/qt/ScintillaEdit
python WidgetGen.py
cd ~/Projects/scintilla/qt/ScintillaEditPy
python sepbuild.py

Start QtCreator.

Open project ~/Projects/scintilla/qt/ScintillaEdit/ScintillaEdit.pro

Build All

Result of build
cd ~/Projects/scintilla/bin
Everything seems to be there

You see, the configure script was expecting to find this library built from scratch at the same directory tree level as the CUTE project. It’s okay for those of you who are laughing right now. I’m sharing this so you can all get a good yuck while learning how to install really old Ubuntu versions in a VM.

cd ~/Projects/cute-svn/CUTE
still no love

Now we actually edit configure.sh.

The Help text lied

Obviously the help text lied.

That logic is a wee bit ugly

Basically there is a hard coded directory tree and you get to change the base via a command line parameter. That would be okay if it weren’t for one teeny tiny thing.

qextscintilla.h doesn’t exist anywhere.

Adding insult to injury for someone that is an old timer with Qt, the prefix “qext sounds very familiar.

Setting up a Ubuntu 8.04 LTS VM in 2021

This part will provide useful information for anyone that has to maintain something very old. In particular, medical devices that were approved long ago will force you to use the old tool chain.

Yes, Ubuntu 8.04 LTS has long since been officially dropped. Thing of it is, that means it moved to older, possibly slower and not mirrored servers. Most likely these servers are much like the ones you end up on when you sign up for $8.95/year hosting services. They will handle the tiny number of people who actually visit your blog or whatever.

The only real downsize of this is you have tweaking to do. If you are really lucky someone else has already had to do the tweaking and posted the answer like this one. That saved me a lot of searching. As I stated, the repos got moved.

Download Ubuntu 8.04 LTS from here and install into a VM. (I used the 64-bit version) Once you have completed your install and rebooted, open a terminal.

cd /etc/apt
sudo mv sources.list sources.list_orig

Now copy/save/whatever the new sources.list you pulled down from the link above. If you are too lazy to scrape it yourself from the other link then download u18-sources-list.txt here and rename once you get it. I was going to put it into this post but the Code block of WordPress block editor is busted bad. It was using the # character for something and really mangling the file.

Reboot. Login and open another terminal.

sudo rm -vf /var/lib/apt/lists/*
sudo apt-get update
sudo apt-get upgrade

Note: Ubuntu 8.04 (and several other Ubuntu flavors) had issues with monitors running in VMs. If your GUI stops working you can <ALT><CTRL><F2> to open a terminal. Just login there and type

sudo reboot now

The above works if Windows 10 is your host. It does not work if Ubuntu 16.04 LTS is your host. Why would anyone use Ubuntu 16.04 LTS as a host? To get the version of VirtualBox that works with the libxrandr-dev version found in Ubuntu 8.04 LTS. Otherwise you have a tiny little screen no matter what you do.

Assuming you are still progressing:

sudo apt-get install build-essential
sudo apt-get install libxrandr-dev

You need the build-essential for the Guest Additions. (I assume you are using Oracle Virtualbox.) “Insert Guest Additions” next. Autorun will not work. After you’ve inserted the CD via the Devices menu you have to open a terminal and type the following:

cd /media/cdrom0
sudo ./VBoxLinuxAdditions.run

Reboot. (Yes, all of the rebooting rather sucks.) Most likely your screen will remain a tiny box in the center of your actual screen. At least it will if you are using a current Virtualbox on Windows 10. I tried every video card Oracle provides. Found no monitor love. Newer Virtualbox needs version 1.4 and 1.2 is what the repo has. Use GUI tool that should be telling you about updates with big red arrow pointing down up by your name at the top of the screen to apply “held back” updates.

Reboot.

The following were installed in my hopeless attempt at getting CUTE to work.

sudo apt-get install python-kde3-dev python-qt3 python-qt-dev python-qtext 
sudo apt-get install libssl-dev libwww-ssl-dev libwww-ssl0 python-openssl 
sudo apt-get install subversion python2.4-dev qt3-dev-tools libqt3-mt-dev 
sudo apt-get install python-kde4-dev pyqt4-dev-tools python-qt4-dev python-qt4-dbus 
sudo apt-get install python-qt3-gl libqscintilla-dev python-pyopenssl epiphany-browser 
sudo apt-get install galeon autoconf python-qscintilla2 libqscintilla2-dev scite
sudo apt-get autoremove

Now I had to svn checkout CUTE on host computer and copy to shared folder to get into Ubuntu 8 as SSL is far too old. One of the reason’s I installed so many browsers was the hope one could work around the issue. Bad thing hope. Causes us to suffer needlessly.

The elusive header file

I couldn’t believe it when I found the header file. I thought “Yes! Now I’ve won.” Been warned about thinking before. I edited configure.sh and took out the /qt/ in the paths where the code was looking for qextscintilla.h

if test "${with_qscintilla+set}" = set; then
 withval="$with_qscintilla"
 QSCINTILLA=
  if test -f $withval/qextscintilla.h; then
      QSCINTILLA=$withval
   elif test -f $withval/include/qextscintilla.h; then
      QSCINTILLA=$withval/include

Now configure should actually build.

cd ~/Projects/cute-svn/CUTE
./configure.sh --with-qscintilla=/usr/include/qscintilla/

There was a dim glimmer of hope.

roland@roland-u8-desktop:~/share/cute-svn/CUTE$ ./configure.sh --with-qscintilla=/usr/include/qscintilla/
 checking for true… /bin/true
 checking for false… /bin/false
 checking for g++… g++
 checking for C++ compiler default output file name… a.out
 checking whether the C++ compiler works… yes
 checking whether we are cross compiling… no
 checking for suffix of executables… 
 checking for suffix of object files… o
 checking whether we are using the GNU C++ compiler… yes
 checking whether g++ accepts -g… yes
 configuring for CUTE 0.3.0 (12 April 2005)
 checking for a BSD-compatible install… /usr/bin/install -c
 checking for mv… /bin/mv
 checking for rm… /bin/rm
 checking for cp… /bin/cp
 checking for echo… /bin/echo
 checking for ar… /usr/bin/ar
 checking for qmake… /usr/bin/qmake
 checking build system type… x86_64-unknown-linux-gnu
 checking host system type… x86_64-unknown-linux-gnu
 checking for Operating System Distribution… done
 checking for Python location… yes
 checking for Qscintilla location… yes
 configure.sh: creating ./config.status
 config.status: creating Makefile
 config.status: creating src/cute.pro
 config.status: creating src/config.h
 config.status: src/config.h is unchanged
 config.status: executing default commands
 Configuration on Tue Jun 15 11:41:22 CDT 2021:
 Host:               x86_64-unknown-linux-gnu -- debian lenny/sid
   CUTE version:           0.3.0 (12 April 2005)
   Source code location:       .
   Install binaries:          ${exec_prefix}/sbin
   Install config files:       ${prefix}/etc
   Scripts directory:          
   C++ Compiler:           g++ 4.2.4
   Compiler flags:           -O
   Linker flags:            -O
   Libraries:              
 Python libs:              -L/usr/lib/python2.4/config -lpython2.4 -lutil -ldl
   Python include:          /usr/include/python2.4
   Qscintilla dir:          /usr/include/qscintilla/

Running make rather dashed hope, until I looked at it closely. This will seem obvious to you, but I had to first get a scrollback buffer setting big enough to get back here. For some reason it didn’t redirect to a file properly.

/usr/share/qt3/bin/uic ../ui/projectdialog.ui -o ../ui/projectdialog.h
 /usr/share/qt3/bin/uic ../ui/statusbar.ui -o ../ui/statusbar.h
 g++ -c -pipe -Wall -W -g -D_REENTRANT  -DQT_THREAD_SUPPORT -I/usr/share/qt3/mkspecs/default -I. -I.. -I/usr/include/qscintilla//qt/ -I/usr/include/qscintilla//include -I/usr/include/python2.4 -I/usr/include/qt3 -I../moc/ -o ../obj/cute.o cute.cpp
 cute.cpp:46:34: error: qextscintillaprinter.h: No such file or directory
 cute.cpp:47:31: error: qextscintillabase.h: No such file or directory
 In file included from cute.h:55,
                  from cute.cpp:49:
 c

Yes, stupid me should not have used a slash at the end of the directory path, but that is not the interesting part. Some other place in the command file is hard coding “/qt/” and “/include” on the end of that.

Hard coding of directory paths is always bad people!

That was hidden in autoconf/configure.in

autoconf/configure.in

And in src/cute.pro.in

src/cute.pro.in

They also screwed us with a hard coded /lib.

After cleaning up the first hosing I tried another clean build.

Newest build error

This is where the Gnome cackled the loudest. This is where I remember why Qext sounded so familiar.

There was a most unfortunate time in Qt’s history where they had this Website called “Playground.” Things that were being worked on unofficially, perhaps as proof of concept, got put here. They were all prefixed with “Qext” to indicate they were “Extra” classes/modules and not part of actual Qt. When something was deemed worthy of being included in Qt it was then taken out of the playground. The Qext became just Q. Many of the method names, parameters, and parameter types would change.

I got fried on this with the serial port class on a project. Early development started with the playground. Before we finished a new release of Qt came out that included QSerialPort. That was not just a quick substitution with the editor.

CUTE is abandonware. From what I’ve seen just looking at the compiler output, anyone looking to bring it back would have to start over. That last compilation error means this was written using a very old C/C++ standard. I remember during the days of DOS when we could just assume most pointers were interchangeable, but that was long ago.

Gnome 1 Rollie 0

The Lost Great Dane by B.L. Blair

The Lost and Found Pets Mysteries, Book #1

Cozy Mystery

Date Published: December 1, 2016

 

photo add-to-goodreads-button_zpsc7b3c634.png

 

The Lost Great Dane is the first novella in the Lost and Found Pets series.
Alexandra Prescott is a licensed private investigator specializing in
finding missing animals. Reuniting pet and owner is more than just a
job.

While looking for a lost cat, Alex finds a weak and injured Great Dane. The
dog has no collar, no tags, and no microchip. And the only person looking
for him is a man who might have murdered his own wife.

Within 24 hours, Alex has a hunted dog, a cryptic message, and a hitman
after her. She realizes the only way out of this mess is to solve the
mystery of the lost Great Dane.

 

 

Excerpt

“You have got to be kidding me,” I said, staring at the small hole in the chain-link fence. The little bit of grass on the other side was mostly dead, and the yard was full of debris. There was an old building not far from the fence that appeared to have been a small barn at one time. An abandoned pickup truck was nearby, but there wasn’t a house or other livable structure. The ground was damp and muddy as it had recently rained. I glanced down at my new, expensive tennis shoes before looking at my companion.

“Are you sure?” I asked. The only response was a sharp bark and pawing on the ground. Hero is a trained search-and-rescue dog, and he is very good at his job. He barked a second time and sat by the fence. I leaned over and gave him a brisk pat. “Okay, give me just a minute.”

Retrieving my cell phone from the pocket of my jeans, I placed a call. Although the property looked deserted, I wasn’t about to go traipsing around without verification. Claire answered on the first ring.

“Lost and Found Pets. This is Claire. How may I help you?”

Claire is my complete opposite. She is short and just a little chubby. She has long blond hair, pretty blue eyes, and a sweet smile. Her bubbly personality comes through with every word she speaks. She is friendly, kind, and supportive. How the two of us became friends is still a mystery to me.

“I need you to do a property search,” I said as soon as she finished her greeting. “Hero found Mr. Fluffy’s trail, but it leads to a fenced property.”

“What’s the address?”

I gave her the particulars and waited while she performed the search. Mr. Fluffy was the lost cat that I was currently trying to locate. The Lost and Found Pets agency tries to live up to its name. We attempt to find lost pets.

I have always loved animals, and I discovered that there was a need for someone to look for lost pets. People love their animal companions. They are willing to pay a great deal of money to find their furry friend. Our clientele consists mostly of those who have money to burn and prefer someone else do all the work. They may be young, up-and-coming professionals who want someone to come home to but don’t have the time to search for them should they get lost, or the elderly whose loss of a pet upsets them so much they have difficulty navigating a basic search for an animal. We also get clients who have exhausted all their own resources and turn to us as a last resort. Lost and Found Pets is a licensed private investigations firm. We are just very specialized.

“It looks like the last owner died about three years ago, and the property hasn’t been claimed. There are a couple of years of back taxes on the books but nothing else. I’m surprised no one has claimed it yet. It’s in a prime spot.”

“Okay, that’s what I needed to know. Thanks, Claire.”

Hero and I were standing on what was probably once a gravel road. Now it was just a large opening dividing several acres of land. I couldn’t see a gate or opening anywhere. It was probably on the other side of the property. If we went around, Hero might have lost Mr. Fluffy’s scent so I reached into my backpack and pulled out a pair of wire cutters. Searching for lost pets often takes me to hard-to-reach places. I carry a whole arsenal of tools. I made quick work of the fence. Hero bounded through first. He is a large brown German Shepherd, but I had to cut the fence even more before I could squeeze through.

After stepping through the fence, I gave Hero the command, and he took off running. I followed a little more slowly, hoping to avoid the muddier areas. Hero headed to the back of the barnlike structure. It was small and falling down. Whoever had owned the place hadn’t done any work on it in years. I heard Hero bark and sped up my pace. When I rounded the corner, I saw at once that I didn’t need to hurry.

“Damn it,” I said softly as I approached the doorway to the barn. The poor cat was dead. His collar had caught on a nail, and it looked like he might have choked to death. There were signs of a struggle. His collar was torn in places, but he hadn’t managed to tear it completely. Mr. Fluffy had been an indoor cat, and his collar was pretty but not designed to break away or stretch. He hadn’t been dead long as his body was still intact. The owners had only realized he was missing that morning. They contacted me midday after a brief search. It was a very typical scenario.

About 50 percent of the time, we are able to find the lost animal. Unfortunately, sometimes we find them too late. Like now. I blinked back tears as I pulled a plastic container from my backpack and gently placed Mr. Fluffy inside. Most of my clients don’t want to see their dead pet, but sometimes they need proof that the animal is actually gone. Hero whined softly. I handed him a treat, which he took but ate slowly, giving me a sad look. I rubbed his head.

“I know, boy. Me too.”

About the Author

B. L. Blair writes mystery/romance stories. Like most authors, she has been
writing most of her life and has dozens of books started. She just needs the
time to finish them.

She is the author of the Leah Norwood Mysteries and the Lost and Found Pets
Mystery Novellas. She loves reading books, writing books, and traveling
wherever and as often as time and money allows. She is currently working on
her latest book set in Texas, where she lives with her family.

 

Contact Links

Website

Facebook

Twitter

Blog

Goodreads

Pinterest

Instagram

BookBub

 

Purchase Link

Amazon

 

Some Mainframe Nostalgia

I only dabbled on the IBM mainframe over my 30+ year career. One thing that gives me great nostalgia now is SPF. SPFLite2 in particular.

I don’t actually remember what we had on ROSCOE when I made the mistake of attending DeVry in Lombard. It kind of reminded me of the editor I had to use later at client sites. You see, I was either a PC consultant or a DEC/VAX consultant. Prior to the Internet you either used VMSMail for company email, or you had to have a mainframe account because your client used PROFS. You can read more about VMSMail in this book.

The Minimum You Need to Know to Be an OpenVMS Application Developer

Since you already had an account and you could do COBOL on that VAX thing, once in a while they asked you to do some mainframe COBOL too. I talk quite a bit about terminals in my latest book.

https://www.theminimumyouneedtoknow.com/agile_book.html

In large part because that book walks through IT history from the days of paper tape and punched cards through to today. Everything happens because of what came before. The American Greenback determined the size of the punched card.

Sadly those images aren’t to scale, but the greenback determined the size of the punched card because people were already used to handling things of that size. We already had wallets to carry them and trays to hold them. The card divided out into 80 columns. Early terminals had to support 80 columns. Many paper terminals supported 132 from the beginning, but CRT and other video terminals weren’t viable until they could support at least 80 columns.

paper terminal
DEC Paper terminal commonly used for systems consoles long after the VT-100 was introduced

The featured image of this post is an IBM 3278 Courtesy of Richard Thomson and terminals-wiki.org and that is where our journey begins. Maybe I spent too much time using emulators? I seriously remember the later 3270 family terminals having quite a few colors.

There was also a red that would show up. Don’t get me wrong, they were still considered “green screens” but they had colors other than green on them. Given my mono-colored VT terminals of the day, I found that kind of nice. Kind of like you see in this emulator shot.

You need to understand the terminal being used so you can take my statements about SPFLite2 with the grain of salt they need. The default installation opted for a blue on white color scheme. It is easy on the eyes, but it saddened me as well.

First screen of first run

When you download and install SPF on Windows this will be what you see for your first run. Be sure to choose (C) for the keymap.

3277 keyboard

ENTER is that funky key on the right side of the space bar. RETURN is that hooked arrow key above the shift key. I talk a lot about this in the AGILE book because the CUA battle and the “ENTER is on the numeric keypad” insurgence left casualties. IBM had “smart” terminals. You could arrow to any cursor position on the screen in any application. The TAB key would navigate between fields flagged for entry. If you want to know more about those days and why things shook out the way they did, you can buy a copy of my AGILE book.

If you know nothing about IBM choose the (C) option because that key is about where the ENTER key was. Prior to Microsoft adding worthless Windows keys to the keyboard, IBM really spaced the CTRL keys out.

IBM 1391472 PS/2 Keyboard 84 Key keyboard

You have to be slightly better aim with 104 key keyboards.

right control key for typical 104 key keyboard.
Main Window with help open

What you have to understand is that we didn’t have GUI or mouse back then. ISPF (Interactive System Productivity Facility) was a complete file commander. You would have to dig back to DOS applications to find something close to part of it. GNU Midnight Commander would be the closest analogy to the file navigation now. GNU Emacs is the closest I’ve used. I’m told THE (The Hessling Editor) also has an SPF emulation mode.

The file path

Let me direct your attention to the File / Path line in the above image. You who have only worked on the x86-wanna-be-a-real-computer-one-day-when-I-grow-up platforms wont’ understand just how critical this was. With hundreds of network drives you might be starting to understand. Far too many of you have had one hard drive and maybe one DVD/CD drive. As drives got bigger people could not be trusted to be organized so Microsoft created a GUI file navigator and tried to force all of your stuff to be in Documents.

Imagine yourself during a time like this:

Tape library and librarian

There would be anywhere from six to forty tape drives. You would issue a mount request for a specific tape to operations. Some time later operations would reply to your request with the device where the tape was mounted.

The same thing happened with disk packs.

Removable disk pack in drive

We didn’t have GUI and nobody wanted to GUI navigate through a device hierarchy of forty-plus drives.

After entry

I type in the path and hit the funky enter key (mapped to right CTRL) and presto! I’m taken directly to the place of interest. Had I chosen to enter something for Filter Mask as well, only files passing the filter would show up.

Bottom of window

The bottom of the window displays incredibly useful information that we had to memorize. It is important to note that when on a file line the commands can be shortened to the single underlined letter. Please note that DIFFA/B has more than one underlined character. Just typing D will delete.

Brows a directory
OPEN on a source file will OPEN for EDIT. Yes, EDIT will do same. EDIT will always EDIT. OPEN may not.

Note: If OPEN opens for edit, it will OPEN in a new window that will have the File Manager tab and your file tab. EDIT will open a new tab in the existing window.

Define Profile

Here is the answer to the question your mind had about my previous statement. You from the PC world most likely have never worked on anything that did not have default file associations. SPFLite2 has its own file associations called profiles. Here I was opening a BASIC source file for the first time. Note that you can flag files to ‘Do not Edit’ and tell SPFLite2 to ‘Open with Windows.’ You can also do some kinky profile linking and associating one profile to multiple file extensions.

Editing our BASIC file

You will notice that SPFLite2 supports a tabbed interface. It also supports multiple windows ala the help window and others. Above is what the BASIC program looks like when I open it.

Note: The numbers on the left side are SPFLite2 line numbers. They do not exist in the source file though they look just like standard COBOL line numbers.

Some of you might now start to understand why I made such a stink about the 3270 terminal colors. I wanted a much more purist color scheme. The blue on white isn’t bad, it just isn’t 3270 SPF. You can try messing with this via the OPTIONS command.

OPTIONS

I like to set editors to Re-Open last file(s) at start if they support such a feature. I really like it when they are persistent and will save even unnamed buffers between sessions. No such luck here.

Note: You can change anything you want and just rename the configuration file to start over. You can also copy the configuration file to a new name.

Configuration file is under Documents/SPFLite

One of the download options was some AUTO color files for a few languages. I downloaded and installed them. I’m probably going to delete all of them. They assume a default color theme and, well, let me just show you how things went.

I’m pretty certain I could have fixed the line number coloring if I was willing to put more time into messing with all of the schemes. I was trying to see how COBOL was handled. I also wanted to see how other things were handled.

The file list didn’t look too bad.

I don’t think the COBOL AUTO recognized .COB as COBOL as many PC things only recognize .cob. Some might also recognize .cbl but that isn’t an old school standard.

The C-language stuff didn’t impress me either.

A large part of my disappointment with the AUTO stuff is I was unwilling to put however long it took doctoring the schema settings to get something I could live with. I might at some point, just not now. You can easily figure out which each AUTO uses. The AUTO files go in Documents/SPFLite/AUTO. Here is a snippet of the C-language one.

; SPFLite Colorize File
  MIXEDCASE YES
  ESCAPECHR \
  QUOTED    5
  NUMERIC   6
  COMMENT1  7 // 0
  COMMENT2  7 /* */
 ;DELIMS    !"#$%&'()*+,-./:;<=>?@[]^_{|}~    (all delimiters between 33 and 127)  DELIMS    !"$%&'()*+,-./:;<=>?@[\]^{|}~
 WORD  8 !
  WORD  8 "
  WORD  8 #
  WORD  8 $
  WORD  8 %
  WORD  8 &
  WORD  8 '
  WORD  8 (
  WORD  8 )
 …
  AUTOCAPS 10 #define
  AUTOCAPS 10 #elif
  AUTOCAPS 10 #else
  AUTOCAPS 10 #endif
  AUTOCAPS 10 #endregion
  AUTOCAPS 10 #error
 …
  AUTOCAPS 11 BOOL
  AUTOCAPS 11 BYTE
  WORD 11 break
  WORD 11 case
  WORD 11 char
  WORD 11 const
 …
 ; done

You will notice it appears 5, 6, 7, 8, 10, and 11 are what C uses. As long as each AUTO file for a language assigns 8 to symbols, 11 to keywords, and 10 to compiler directives one could come up with a color schema they really like that worked for all languages.

It was at this point when I nuked the config file and started over. I, like far too many humans, can spend days getting colors “just right.”

Both Screen and Schemes have color settings

For those who want to go down the path of getting things “just right” I need to point out that both the Screens and Schemes tabs have color settings. Schemes apply to the text and screens applies to everything around the text like tabs and line numbers. I cam here to set the font.

People who do not read the text to the right will find changing the font non-intuitive. While you can type the name in if you happen to know it, you click the “Choose” button below the values.

Font dialog
After new font

Ah, I should point out I downloaded the optional font library and installed just a token few of them.

Notice the dot lines in front of some directories. That is SPFLite telling you that your current priv level will not let you edit in those directories. When you own everything you don’t see that.

Drive I own everything on

Exiting a file isn’t as straight forward as most PC users would like. You can read the documentation for AUTOSAVE. This is a feature for automatically saving your files. I’m talking about ending the edit session in a single file tab. For that you use END at the command prompt. Close won’t work, quit won’t work, and EXIT will bail all the way out of that SPFLite2 window.

You can also right click on the file tab. Unlike many PC applications this will not bring up a special menu, it just closes the tab.

NEW isn’t a command either

Probably the shocking thing for me was “NEW” wasn’t a command. You can create a new tab by left-clicking on “New” or by typing the command EDIT NEW and hitting the ENTER key.

New blank tab not yet associated with a file

SPFLite2 is a Line Editor

The help text is massive for SPFLite. You could literally spend days skimming through all of the commands. There is so much kinky stuff you can do if you want to put the time into learning it. SPFLite2 deviates from the mainframe inspiration in some subtle but critical ways.

When you create a new file on the mainframe the editor opens to a screen of blank temporary lines. As you can see above, SPFLite does not do this. You have to insert at least one line yourself. The “Top” and “Bottom” things don’t exist.

I seem to remember being able to set an “insert mode” by typing I* in the line number area which would then just keep inserting lines while you typed on the mainframe. I have not found such a feature on SPFLite2. I’m sure there is something, I just haven’t found it.

Here’s a little beginning sequence to get you going. Be sure to remember to hit ENTER (the right <Ctrl> key if you followed my instructions) after each thing.

Note that temporary lines do not have line numbers. “I” inserts temporary lines and “N” inserts permanent. Temporary lines will use whatever MASK is set. When you set a MASK it is set for the entire edit session. You can change the MASK value but not actually get rid of the MASK. When you SPLIT lines or Insert temporary lines, the MASK is used.

After hitting ENTER I got the temporary line below the =MASK> prompt and my cursor was on that temporary. I had to arrow up to the MASK line, type the MASK and hit enter again. I’m sure there is an easier way, but this way was obvious.

The MASK can be very handy when you have a bunch of comments to enter. Remember, the editor defaults to overstrike.

Viewing file in Notepad++

You will note that SPFLite2 takes the term “temporary” seriously. We see lots of extra comment lines but they don’t have line numbers so they are temporary.

Summary

This is nowhere near a complete tutorial on SPFLite2. You could spend days reading the help text and learning the incredibly powerful features built into this editor. I had a blast reminiscing with this.

You have to remember that this is a different mode of thinking that all of today’s PC editors. This is from a time when we were told to keep functions and COBOL paragraphs to one screen length. Definitely no more than a page.

You can’t really understand the mainframe world until you get at least a tiny understanding of the primary editor.

You can’t really understand why people call midrange and mainframe systems real computers until you walk a mile in that world. This is not a hack-on-the-fly universe. We had to actually design things.

Darkness Hides by JC Gatlin

Mystery-Suspense

Date Published: Apr 27, 2021

Publisher: Milford House Press, Inc.

 

photo add-to-goodreads-button_zpsc7b3c634.png

 

A former Fish & Wildlife Officer conducts an off-the-book investigation
when a murder appears to have a connection to her deceased nephew, just as a
hurricane hits her Florida beach town.

 

 

Excerpt

Kate found a battery-operated Coleman lantern discarded on the kitchen floor and flipped it on. It lit up the room, and she carried it upstairs, where Elise sat alone in Noah’s bedroom.

“I want to be alone,” Elise said, sitting in the rocker.

Kate didn’t respond, listening to the rain and wind pummel the house. The walls creaked so eerily in the gale-force winds that she wondered if they could collapse around them. Stuffed animals above the bed trembled. Her pet squirrel, Doc, raised up on her shoulder, swishing his bushy tail. The lantern cast a pale glow around the bedroom. With the windows boarded up, any area outside the lantern light was lost in thick, inky blackness. Though she couldn’t see the lightning, she could hear the angry thunder compete with the rain beating the roof.

The bookcase rattled, keeping her on edge. She glanced at Elise, huddled in the rocking chair. Her sister wrapped the afghan tighter over her shoulders and locked her arms around her knees.

The walls trembled with another thunderclap, shaking the bookcase, and knocked the worn copy of Where the Darkness Hides to the floor. Kate jumped at the loud thump. Doc jumped too and leaped to the floor to investigate. She raised the lantern and looked around the room. Many of the stuffed animals had fallen onto the small bed. A model airplane dangled from the ceiling, swaying violently from the turbulence. A toy box sat positioned under the window.

Letting out a breath, she shut her eyes and focused on the rain thumping the roof. It intensified, then quieted. The sound was hypnotic, and she didn’t even hear Doogie enter the bedroom. He shined a flashlight in her direction and paused in the doorway.

“Sebastian made landfall”—his voice rose above another loud boom of thunder—“south of Sarasota.”

Kate couldn’t see him behind the blinding light in his hands, and when he lowered the flashlight, it still took a moment for her eyes to adjust. She sensed him stepping beside her. Out of the corner of her eye, she saw Doc dash across the floor toward him.

“We’ve just got to make it through the night.” He walked over to the rocking chair and put a hand on Elise’s shoulder.

Doc followed, cautiously investigating the cuff of his right pant leg.

“It’s about to get worse,” Kate said.

A corner of Elise’s mouth turned upward, but her smile was without humor. She turned to Doogie. “Why didn’t you sell her to gypsies or leave her in the woods somewhere?”

The wind howled at the window, and a sudden gust ripped the plywood from the casing. The glass shattered. Wind and rain blew into the room.

Elise screamed. The rocker overturned, spilling her to the floor. Kate and Doogie rushed to the bed, flipped the mattress off it, and forced it to the open window. They fought the incoming wind. The force bent the mattress, folded it like a sheet of paper, and pushed them back. Doogie shoved the mattress against the window and held it there. He yelled at Kate to move the bookcase. She got to one side of it and scooted it across the carpet to the front of the mattress.

The mattress shuddered in front of the broken window. The wind squealed and screamed like a dying thing. Kate and Doogie were silent for a couple of minutes, staring at each other.

“It’s not going to hold,” Kate yelled to him over the wind.

“We need to go downstairs.” He pointed toward the bedroom door. “It’s not safe in here.”

Elise turned the rocker right side up and sat down. “I’m not leaving Noah’s room.”

Doogie stepped to her, knelt beside the rocker. “C’mon, kid. It’s not safe.”

Kate watched her sister look up at him.

“I’m not leaving.” Gripping the edges of the afghan and pulling it taut against her back, she sank deeper into the cradle of the rocking chair. Her voice sounded raspy and tired, and a clap of thunder tapped her willpower.

The wind grew louder. It sounded like a howling wolf for a second and then a train. The roar became deafening. Debris hit the house. The roof rattled and banged.

Kate looked up.

Doogie moved the box spring and bedframe to the window, struggling to position them against the mattress. He looked back at Kate.

Elise picked up the weathered copy of Where the Darkness Hides from the floor. With the soft lantern light illuminating her face, she set the book in her lap and opened the cover.

Doogie looked puzzled. “We don’t have time for this.”

Elise read out loud, raising her voice over the shrieking wind.

“We don’t have time for this,” Doogie yelled. He turned to Kate. “Do something.”

Kate listened to the roar of the wind. Something massive hit the side of the house. The impact was loud and shook the walls. What could she do? If their number was up, she couldn’t possibly do anything to prevent it. And at least they’d be going as a family, together. She dropped to the floor, next to Elise. Doc scurried to her, his tail raised high, and hopped onto her thigh. He stood on his hind legs and pawed at Kate with his single arm.

Thunder rocked the house, and Elise stopped reading. She turned toward the bedroom door. Doc let out a series of warning chirps and clicks. Kate heard it too. A pounding that seemed separate from the rain beating the exterior of the house. BAM! BAM! BAM! Intense. Determined. It sounded different from the wind.

It was coming from downstairs.

The hairs on the back of Kate’s neck rose. Another BAM! BAM! BAM! She definitely didn’t imagine it. She turned to Doogie. His eyes widened.

“That’s the front door,” he said. “Someone’s at the door.”

About the Author

JC Gatlin is a Mystery Suspense author living in Tampa, Florida. He
self-published three mystery novels, including 21 DARES–which topped
Amazon’s Mystery-Suspense chart in 2016. Milford House Press published his
next mystery, H_NGM_N: MURDER IS THE WORD, and it won the Royal Palm
Literary Award for Best Mystery-Crime Fiction in 2019. His new mystery,
Darkness Hides, is scheduled for release on April 27, 2021.

 

Contact Links

Website

Facebook

Goodreads

Instagram

YouTube

 

Purchase Links

Amazon

B&N

 

a Rafflecopter giveaway