The Programming Home Page

Listed below you will find several programs I have made over the past few years, some with the help of friends. Feel free to download them and test them out. Although there is no official intellectual property protection, these programs are copyright protected in the same way as any original creation is protected once completed. They are distributed in terms of the Free Software Foundation GNU General Public License and WITHOUT warranty. View the license. At the bottom of the page, you will find a table where you can download the programs and the source code for each program as well as a few files you may need to run them.

Programming Fonts

The new variable-spaced, True Type fonts are nice for textual display, but there are times when you want more of a console display. Like when writing code, for example. This is when monospaced fonts come in handy. I have previously used whatever defaults came with Windows, but I have recently found some additonal fonts which look much better. I have not tried them yet, but I will soon.

  • ProFont (Windows, Mac, Linux). This was originally a Macintosh font, so if you don't like that look, it may not be right for you.
  • Raize. This font looks better suited for HTML writing than ProFont.
  • Proggy. Another programming font.
Sketcher (Coming Soon)

This is a program I am currently working on. It is designed to read, render, and print FormFill Sketch 3.0 files (*.FSF). This was an old DOS program used for sketching the floor plans of houses. It does still run today under Windows XP, although it's kind of a hack to get it to print. This program will solve that problem. No reverse engineering is taking place since the files are stored as unencrypted ASCII text. Full specifications will also be published when available. It is currently under development.

Platform: Windows
Development Environment: Visual C++
Written: 2003-2004
Computer Landscape Generation and Smoothing
Bézier Patch Smoothed Landscape

For my Master's degree in Computer Science, I had to write a research paper similar to a journal article. It is different from a thesis in that it did not have to be an entirely original contribution, but could report on other ideas in the field as well. I chose to write about generating 3D landscapes for computer graphics. Various methods I investigated include height maps, fractional Brownian motion, and recursive subdivision methods such as triangular-edge, diamond-square, and square-square subdivision. However, these methods may produce a rather jagged terrain. If a more undulating terrain is desired, it can be smoothed by using Fourier or wavelet analysis, Bézier curves, B-Splines, or Bézier patches. I investigate these generation and smoothing techniques in my paper as well as describe some additional methods.

The program I wrote was mainly for investigating the various properties of randomly generated landscapes using a method described in the paper. The other methods were created as a matrix in Matlab and then read into the program. However, it does allow a bit of playing around with the landscape. The landscapes used in the document are created from random number 4 (at least on Windows). This program started out as a final project for a wavelets class I took (hence the long development time). I expanded the research as well as added other generation techniques when creating the research paper. This program was also written using GLUT, so it should compile cross-platform. I have included a makefile for *nix systems as well as the Visual Studio .NET 2002 solution file.

Platform: Independent
Development Environment: C++
Written: 2001-2003
Zip File land.zip
98 KB
PDF File macklem.pdf
1,108 KB
3D Graphics Library (Coming Soon)

For my computer graphics course, we built a 3D graphics library from scratch. Well, nearly from scratch. We learned the fast line rasterization algorithms, but used the primitives provided by the windowing environment. However, we extended to 3D using only these 2D primitives as a base. It has a z-buffer sorting algorithm and splits polygons when necessary. It also has ambient, diffuse, and specular lighting. Although finished, I would like to clean it up some before posting.

Platform: Windows/Linux
Development Environment: C++
Written: 2002
Mathematical Contest in Modeling

In February 2001, I participated in the Mathematical Contest in Modeling (MCM) along with two other Applied Math majors at CU. While there was some Matlab coding, it was solely to produce a paper. Consequently, I will not post the code here. The problem we chose dealt with professional cyclists choosing a spoked or a solid bicycle wheel to improve their performance. Rather than leave the decision to the individual racer, a more systematic approach was desired. Our paper documents our findings.

Platform: Independent
Development Environment: N/A
Written: 2001
PDF File MCM2001A.pdf
58 KB
PDF File bike.pdf
362 KB
System Shell

I wrote this program for my operating systems class. It demonstrates basic concepts with processes and input/output redirection. It is fairly basic, but a shell which will launch other programs, allow simple directory manipulations, background processes, and redirect standard input, standard output, as well as set up pipes between programs. It is written for *nix platforms. I have not tried, but I don't think it will compile on Windows.

Platform: *nix
Development Environment: C
Written: 2001
Zip File shell.zip
6 KB
Fractal
Fractal Image

This program will draw a fractal based upon the interaction of particles. When setting the program up, you specify what type of charge (positive or negative) and how many will be at any location. They are colored sequentially according to the basic indexed color scheme. While running, the program will take each pixel in the field and let both electrical attraction and electrostatic repulsion laws govern their behavior. If the pixel (test charge) ever intersects one of the setting charges, the pixel is then colored the same as the charge it collided with. A text file is also available for download detailing some of the fractals I've created. The program still has a few bugs in it that I have not fixed. The collision detection is a bit wrong because sometimes the test charge will move far enough in one time iteration that it actually intersects two charges. In this case, the correct (first encountered) charge color is not always used. The windowing is the same as the eyes.

Platform: Windows
Development Environment: Borland C++
Written: 1998
Zip File fractal.zip
85 KB
Text File fractal.txt
3 KB
Gene Evolution

This program was a project that I created. It was inspired by the book The Blind Watchmaker by Richard Dawkins, however. He made and presented in his book a similar program. It is a program to simulate evolution and to show how small changes on even one gene can affect the look of an entire organism (called "biomorphs" in the program). This program allows you to examine the biomorphs in greater detail or to enter your own values for genes and see what they create. For a bit more information, click here. The windowing is the same as the eyes.

Platform: Windows
Development Environment: Borland C++
Written: 1998
Zip File evolve.zip
91 KB
Snake Game

The object of this project was to create a game where a player could move the mouse around to control a person. It also uses double buffering to reduce flickering as well as interfaces with the mouse a bit more. This game relates the probability of the snake coming towards you to your total score. A file I/O system is also used for the saving and retrieval of high scores in the past. It also runs windowed like the eyes.

Platform: Windows
Development Environment: Borland C++
Written: 1998
Zip File snake.zip
103 KB
Rotating Cube

This is the second project I did and it was a bit more difficult, although still relied heavily on the math. I chose to attack this problem with information I learned in calculus 3: vector descriptions of lines and planes. By doing the program this way, I was able to choose an origin point for the rays and draw a ray from this point to a plane that would be the screen. Although the cube is drawn a bit backwards as a result of this, it works well. Zooming is achieved by simply moving the point of origin of the rays. A complete description is provided in the .cpp file. Information for controlling the cube is provided at startup. This runs windowed in the same way as the eyes.

I have also been asked for the source code to my OpenGL cube. I'm not quite sure why because I don't think I advertised it anywhere on this site. Regardless, I will provide it below. It is written using GLUT so it should compile without modification on any system where GLUT is provided. The included makefile is for use with g++ on *nix-based systems.

Platform: Windows
Development Environment: Borland C++
Written: 1998
Zip File cube.zip
85 KB
Platform: Independent
Development Environment: C++
Written: 1999
Zip File openglcube.zip
80 KB
Moving Eyes
Eyes Screen Shot

The first project I had to do in my freshman computing course was to make a pair of eyes that followed the mouse around the screen. It uses double buffering to eliminate flickering. By clicking either the right or left mouse buttons you can cycle the colors of the respective eye. It starts in a DOS window (that simply tells you to press 'Q' to quit) but runs windowed using the same functions as Borland's BGI. These functions are in the library "winbgim.h" and "winbgim.cpp" that my professor edited. Also, check out a Java version.

The C++ version is still being used a a project back at school, so I cannot provide the source code at this time. The link will download the executable

Platform: Windows
Development Environment: Borland C++
Written: 1998
Zip File eyes.zip
47 KB
Platform: Windows
Development Environment: Java
Written: 2000
Text File Eyes.java
9 KB
Birthday
Birthday Screen Shot

I have also made a birthday program that displays in real time the total days, total hours, total minutes, and total seconds until 12:00 AM on any particular day (ideally, one's birthday). It is a small program and is easily reconfigured. Note: Additional files may be required to run this program. See the bottom of this page.

Platform: Windows
Development Environment: Visual Basic 3.0 Professional
Written: 1996
Zip File birthday.zip
18 KB
BMP to Q-BASIC Converter

I had initially learned to program in BASIC and then QBASIC once it came preloaded on my computer. However, after a few years, it became necessary to display graphics without buying a new version of QBASIC. So, my friend Nate and I made this program that will take a 16 color image and transform it into commands than can be used in various ways in QBASIC to display it. The readme file that comes with the program explains how to incorporate all the methods into your QBASIC programs.

Speed varies greatly with the algorithms, the fastest of which being Nate's. The maximum resolution image is 640 x 480 set by QBASIC. A new algorithm would need to be developed to display the 320 x 200 images in 256 colors (the most colors available to QBASIC) since I did not find anything that works. However, while looking for these programs in order to share them with the world, I was unable to find the code for this program. Most likely, it was lost in a hard drive crash. If I do find the code, it will be presented with this. Otherwise, all I have available is the executable. Note: Additional files may be required to run this program. See the bottom of this page.

Platform: Windows
Development Environment: Visual Basic 3.0 Professional
Written: 1995
Zip File convert.zip
7 KB
PDF File bmpread.pdf
22 KB
ASCII Converter

Back before Al Gore invented the Internet, primary electronic messaging was done through BBS'. The one I used was called Grid Point. We used signatures back then just like today in e-mails, but I noticed one that stuck out. It was a picture of a bird, but in ASCII graphics, and was remarkably sharp. I inquired about how he got it and he replied that he used an ASCII converter. I wanted one of those, even if I didn't know exactly what I'd use it for. Well, I searched the files on that BBS, and he finally came back and talked again. He knew that I was a programmer, along with the rest of the BBS users, and so he told me to make one of my own.

Wow! I had never dreamed of doing this, and it was very new to me. I had just started using Microsoft Visual Basic, and about a week earlier I knew I read something about how to get a pixel color from a graphic image. Well, my friend Nathan and I started working on this and it turned out remarkably good for some aspiring computer programmers. We were happy. Below is my signature that was converted. It's not the greatest, but imagine the possibilities. Note: Additional files may be required to run this program. See the bottom of this page.

         3              _@=                      %%      3
      3  =3                     (_3=%=        -3 3@@_
     (((%@=             =(=    3(=%@ %@_  _  (=3
     %33(  %%            3%%(     %@==@%=%_^(@@=_ _3
    33    =@* % @@_(3 (  %       % _*Ƨ3_3!!!ܧ@@@=3@={
  @*     %=!@_@ا!(@       = = =%=@(@@@- %   @Ƨ@@3 =@@%%=
   (3333%3@3@% =3!%@!@= *3(
			

And this one is of the Coca-Cola Image.

                _._
            _%%QQQ]                        _%%QQQQQQQQQQ%.  _%OQ] _%]
          _%QQ%`[Q]                      _%OQQQO%Q] @%%QQQ%%%%`[%%Q]
         [%QO]_ @`                     _%QQ%`[%`[]    _%%QQQQQQQQ%`
        [QQ%` _%QQ]  _%QQO]_%%QQQQOQ%%_%QQ%`[Q][O]      [OQQQQ%%`.
       [QQ%`_%QQ][] [QQOQ%`%QO%QQ%%%%%%QQ%`_[%%%`      [OQ%,[%`
      [QQQ]_%QQ%%QQQQQ]_%%%Q%`%Q%`  %%QQ%_  |%%.      [QQ%%%]_
     _%QQ]_%QQ] [%%QQ%` _%QQ]%Q%%%]_%QQ%.[%Q%%  _%%%._%Q%[Q%%%%O%]_
     [QQQ][QQQ%%%`[QQ]_[QQQ][QQQQ]_[QQ%`%QO]%]_[Q%]%][QQQ%%%Q%%QQ]
     [QQ] [QQQQ%` [QQQQ%%QQQQQQ%` [OQQ][QQ%_%]%QQQ%%%OQ%`%%Q]_%Q%`
     [QQ]  0%%`   _%%%. %%%%%%%.  [QQO%Q%%]%%[QQ][QOQQ%.[OQ%`%Q%%.
     [QQ%_       __%%OQQQQ%%%_    [QQ%%`  [%[QQ]_%][QQ]_%QQ]%Q%[%`
     %OQQ%____[%%QQ%%%%QQQQQQQ%.  [QQO]_[%` [QQQQ%.[QQQQQQQQQQQ%`
      O%QQQQ%%%%`.     _[Q%%%%%Q%_ [OQQ%]_  [OQ%`  0%Q%%%%%%Q%]_

			

This is of the Bush Logo.


                                  %%Q%Q    %%Q%#
              __%%%              [@@@%    %@@@%`
           _%%@@@@@]            _O@@%    [Q@@O`                               _%]
         _%%%,  |%@]           _%@@%.   _%@@O`               _%%%%_          _%%]
       _[O% [%%  %0]          _%@@%`   _O@@0]              _%0QQ0@]         _O%
       %@]_%@@] [Q]           %@@O`    %@@Q]             _%@%%__[@]        _O%`__
       %]_%@%]_%%`          _%@@@]   _%@@@]            _%%%` [%.          %0@QQ@]
        _%@%[%/`            [@@0]   _%@@0]           _%0%`  [@]         _%@Q]`[@]
        [@%.,%O            [@@@]   _%@@Q]          _%@%`    [@]        %O@O` %O%
   %%._%@]   [O           [@@@O   #%@@@]          _%%|%%   _OQ]       _%@%` _Q%`
  %%%%%Q]  _[@]           %@@@0%%%@@@@%_%Q]         _%@]   %@%        _O%` _%@]_
 %] _%O%%@@@@%.           O@@@@@@@@@@@@@%`          [@@O%%%@O        _%@]  [@@%]
[00Q@%`%@@@%`             %@@@0%`[@@@@@%.           [@@@@@@O`        Q%%   _%%
_%00%` %Q%%               @Q%%`   [@0%`              %%@@0%.
                                   %%                 O,`
			
Platform: Windows
Development Environment: Visual Basic 3.0 Professional
Written: 1995
Zip File ascii.zip
54 KB
Some other files you might need

In order to run the Visual Basic programs, you may need a few additional files. These are provided below. To my knowledge, the above extra files may be placed on this web page for free distribution as long as the license file to use them for development is not included. If I am wrong on this, please let me know.

Platform: Windows
Zip File cmdialog.vbx
9 KB
Zip File msmasked.vbx
16 KB
Zip File threed.vbx
27 KB
Zip File vbrun300.dll
237 KB