Build Screensavers with a Custom Screensavers Library in Borland C++
- Get Acquainted with Borland C++ 5.5.1
- Tour the Screensavers Library
- Presenting a Circles and Rectangles Screensaver
- Conclusion
The Internet provides lots of Websites that advertise screensavers for the Microsoft Windows operating system. Perhaps you want to join this community by creating your own screensavers. The usual way to build Windows screensavers is to work with Microsoft’s Visual C++ product and its scrnsave.lib library. However, you might prefer to use my own screensavers library, for two important reasons:
- The library’s C source code is accessible. Along with providing educational value, this source code can be modified (if necessary) to deal with unusual kinds of screensavers (although I cannot think of a screensaver requiring a modified library, the possibility exists). In contrast, source code isn’t accessible (at least I couldn’t find any source code) for scrnsave.lib.
- You can link your screensavers with the library. You should be able to compile library source code (after possibly making some source code changes) and place the resulting object code into a .lib file using your own C/C++ tools. You can then link your screensaver object code with the .lib file. In contrast, I couldn’t link my Borland/Inprise screensaver object code with scrnsave.lib.
This article introduces you to my screensavers library. Because I created that library using Borland C++ 5.5.1, the article first shows you how to obtain a free copy of this product and presents a short product tutorial. The article next takes you on a tour of the screensavers library; you learn how to build this library with Borland C++. A presentation of an example screensaver that you can build with the library wraps up this article.
Get Acquainted with Borland C++ 5.5.1
If you like programming in C and C++, you’ll appreciate a good compiler. A few years ago, Borland (also known as Inprise) made its latest (at that time) C/C++ compiler technology and associated command-line tools freely available for download as the Borland C++ 5.5.1 product.
Borland C++ 5.5.1’s compiler technology produces very fast compiles, optimizes code, and targets Win32 Portable Executable (PE) programs. It includes ANSI/ISO C++ language support—including the Standard Template Library (STL) framework and support for C++ templates. It also includes Borland’s entire Runtime Library (RTL).
Although Borland C++ 5.5.1 dates back to 2000, this product is still useful; I have used this product to create various Win32 projects, including the screensavers library. If you’ve never worked with Borland C++ 5.5.1, this section will get you started.
Download, Install, and Configure Borland C++ 5.5.1
Point your Web browser at Borland’s Website and select the 8.7 Mb Compiler entry in the Downloads table on the resulting Web page. You will be prompted to enter your login information (your name or email address, and a password) and click the Login button to log into Borland’s Website. Because you probably will be a new user, click the New User button to set up a free account, and then log in. After successful login, follow the Website’s instructions to download the Borland C++ 5.5.1 installer program.
Assuming a successful download, start running the installer and follow its directions. Although the installer defaults to installing Borland C++ 5.5.1 into the c:\borland\BCC55 directory, you can choose a different directory if desired.
The installation directory contains Bin, Examples, Help, Include, and Lib directories. The Bin directory contains compiler and other command-line tools; Examples contains examples that illustrate different portions of the STL; Help contains a single help file that offers help on the various command-line tools; Include contains header files for the RTL, STL, and Windows SDK; and Lib contains all static and import library files—and the startup code modules.
After the installer completes, add Bin to your PATH environment variable, so that you can run the command-line tools from anywhere on your hard drive. For example, assuming that Borland C++ 5.5.1 has been installed into its default installation directory, set path=c:\borland\bcc55\bin;%path% makes those tools widely available. Case is not significant.
Command-Line Environment
Borland C++ 5.5.1’s tools are executed at the command line. Figure 1 reveals bcc32.exe (which contains the compiler technology) being executed, along with that tool’s output.
Figure 1 Borland C++ 5.5.1 command-line syntax and options
The output presents a variety of command-line options that control the operation of bcc32.exe. For example, the -P option forces C++ compilation.
The presence of -P suggests two compilation choices: C or C++. By default, a source file’s extension determines the compilation. C compilation occurs if the extension is .c. But if the extension is .cpp, C++ compilation takes place. Use the -P option to guarantee that C++ compilation occurs, no matter the extension.
When it comes to creating screensavers, you probably won’t use the -P option. Rather, you’ll use -I and -L to choose the directories to include in the compilation (these are the directories that contain the header files), and to choose the directories that contain those libraries and object files necessary for linking.
A First EXE
It’s easy to create programs with bcc32.exe. For example, let’s create a simple program that outputs the current time and date, adjusted for local time zone and daylight savings time. Listing 1 presents this program’s C source code.
Listing 1 now.c
// now.c #include <stdio.h> #include <time.h> void main (void) { time_t seconds; struct tm *tstruct; // Return the number of seconds that have elapsed since 00:00:00 GMT, // January 1, 1970. seconds = time (NULL); // Convert from seconds to a structure. Correct for time zone and daylight // savings time. tstruct = localtime (&seconds); // Output the structure’s contents in human-readable format. printf ("Local time is: %s", asctime (tstruct)); }
Invoke the following command line (where the current directory will be assumed to be c:\borland\BCC55) to compile now.c and create a now.exe program:
bcc32 -Iinclude -Llib now.c
The -I option specifies include as the directory that contains the stdio.h and time.h header files. The -L option specifies lib as the directory that contains library and startup code module files.
Assuming that there are no error messages, you should find a now.exe file in the current directory. (You will also notice now.obj and now.tds files—ignore them.) Run now.exe, and you should observe the current time and date based on your time zone and daylight savings time.
From Console Mode to GUI Mode
The bcc32.exe tool created now.exe as a console-mode PE program. This format is appropriate for programs that have a main() function, obtain their input from the standard input device, and send their output to the standard output device. It is not appropriate for programs (including the screensavers library) that have a WinMain() function, create windows, and contain message loops. Instead, you must create such as program as a GUI-mode PE program. For example, let’s create a simple GUI-mode program that outputs a message in a message box. Listing 2 presents this program’s C source code.
Listing 2 hellowin.c
// hellowin.c // Hello, from Windows. #include <windows.h> // ========================================================================== // int WINAPI WinMain (HINSTANCE hinstance, HINSTANCE hinstancePrev, // LPSTR lpszCmdLine, int iCmdShow) // // Program entry point. // // Arguments: // // hinstance - program’s instance handle (which uniquely identifies the // program when running under Windows) // // hinstancePrev - obsolete (leftover from Windows 3.1) // // lpszCmdLine - address of \0-terminated string that contains command-line // parameters (not used in this program) // // iCmdShow - number that indicates how the window is to be initially // displayed (not used in this program) // // Return - WM_QUIT message’s wParam value (0, in this simple program) // ========================================================================== #pragma argsused int WINAPI WinMain (HINSTANCE hinstance, HINSTANCE hinstancePrev, LPSTR lpszCmdLine, int iCmdShow) { MessageBox (HWND_DESKTOP, "Welcome to Windows!", "HelloWin", MB_ICONINFORMATION | MB_OK); return 0; }
Invoke the following command line to compile hellowin.c and build hellowin.exe:
bcc32 -tW -Iinclude -Llib hellowin.c
The -tW option indicates that the source code contains a WinMain() function and that a GUI-mode program is to be created.
If all goes well, you should find a hellowin.exe file in the current directory. Run that program. A message box appears with a welcome message.