From the Editor's Desk

Dear Member,

Those of you who have been watching us closely will have noticed that we sort of skipped a newsletter. Although we did add more than 100 new volumes in the last quarter of 1991, I could not manage to collate and compile another full newsletter. I therefore decided not to include those descriptions which were sent to you in a leaflet format ("Great New Software") just before Christmas; this would be a waste of paper and resources.

But this does not mean that you are losing out - on the contrary! This is our volume 4 number 2 issue and we have devoted a special issue (number 3) to Windows 3.0 (just in the nick of time before 3.1 arrives!) which you will also find enclosed. Those of you who don't have Windows (yet) can keep it for future reference or pass it on to a friend. Your membership fee still entitles you to 4 newsletters, so this actually means that you get much more than "one year's" discounted fees.

Talking of fees, you will have noticed that we had to increase our fees to cover the VAT. Not since we started out in '87 did we have an increase (just the elimination of the option to send your own floppies). Members will hardly notice any difference: disks are now R 10 instead of R 9,50 (also makes calculations easier) whilst membership fees remain unchanged at R38 (individual)/R120 (corporate). Non-members, however, pay R 14 instead of R 12 per disk. Handling, P & P is now R 4. More bad news: if our costs continue to go up (printing, telephone, postage, salaries) we will no longer be able to absorb these increases and you might face another slight increase.

Yours in productive AND fun computing = Jean-Paul Van Belle.

Table of Contents

Shareware: a vital part of the PC industry

Inexpensive software and virus threats 2

Questions on Artificial Intelligence

A less-than-serious interview with an expert 3

Beginner's Corner: Taking Advantage of Your PC's Hard Disk

Part III: CONFIG.SYS and the Virtual Disk 5

Reviews of 4DOS and Virus Scan 9

COBOL - A brief History 12

The Life Story of a "REAL" Programmer

The ultimate credo of the real programmer 13

Against Software Patents

A provoking stand from The League for Programming Freedom 16

The Libray Pages

Another 150 or so new additions to the library 26

Shareware: a vital part of the PC industry.

Inexpensive software and virus threats

by Scheier, Robert L.

(PC Week v7 n6, p.62)

When the first rumblings of the computer virus scare began to shake computing environments, we began to look for a magic shield that would somehow protect corporate PCs from infection.

Among the precautions offered by some computer security experts was a blanket injunction to avoid using shareware -- the relatively inexpensive software most commonly associated with mom-and-pop vendors who distribute via electronic bulletin boards.

We reported that advice and were summarily bombarded by cries of "Foul!" from a slew of shareware vendors. Shareware is safe, they argued -- sometimes safer than shrink-wrapped software. What's more, the shareware vendors told us, many corporate PC users make shareware a central part of their software libraries.

We did some checking with corporate users, and they told us the vendors were right.

There's no reason to stay away from shareware because of a virus threat. What's important is to get your software from a safe source -- a well-known bulletin board such as CompuServe, the vendor itself or even a retailer.

Stay away from shareware that's passed hand to hand or downloaded from a little-known bulletin-board service run out of someone's spare bedroom.

Performing a virus scan on any software you buy and enforcing proper backup procedures doesn't hurt, either.

Especially heartening was the level of service users reported getting from the shareware companies, which are significantly smaller than the giants that dominate the industry.

Not only do some shareware firms turn out high-quality software at a reasonable price, users said, but the shareware vendors often do a better job of listening to customers than do the mainline software developers. In these days of multibillion- dollar mergers and takeovers, it's good to see that mom-and-pop entrepreneurs still have something truly worthwhile to offer corporate computer users.

It's a sign that the grass-roots innovation and creativity that launched and spurred the growth of this industry have not disappeared. And we're happy to set the record straight about the safety of shareware.

Questions on Artificial Intelligence.

Source: Unknown.

Q: What is the goal of AI?

A: It is, of course, a vast simplification to think of the whole of the Al movement moving towards a single goal. There are in fact three. These are:

1) To produce a program that plays noughts and crosses infallibly.

2) To produce a program that plays chess infallibly.

3) To produce a working replica of Robbie the Robot, as seen in the 1950s sci-fi film Forbidden Planet'.

Q: How far bas it moved toward these goals?

A: The noughts and crosses one they have more or less cracked. Chess is proving a tougher nut. It was easy to reproduce the skill level of the average human player gets the position of the rooks and the bishops the wrong way round, refers to the small doorknob-shaped pieces as 'prawns') or even the talented amateur (pretends to understand castling), but to achieve a true Grand Master level (genuinely interested in chess puzzles printed in Sunday Papers) is many years away yet. Sad to say, the chances of duplicating Robbie the Robot are receding as time passes - the art of fashioning Perspex with such skill having been lost in the early 1960s.

Q: What is the best example of a success; JWI Al application?

A: The only successful example of an Al application was the ELIZA program (Weizenbaum, 1957). This was able to hold a dialogue with the operator in natural English.

Q: Was that the silly program that pretended to be a psychologist?

A: Yes, it relied upon a system of identifying key phrases. The main disadvantage was that, whenever asked a difficult question, it tended to change the subject.

Q: Wasn't ELIZA a bit of a cheat, then?

A: Why don't you ask me about AI languages?

Q: Oh, all right; What about the Al languages?

A: They can be distinguished thus: LISP is the one with loads of brackets, Prolog(ue) is the European language with a US spelling and POP is the Great British Hope.

Q: And what are the best-known Al applications of these languages?

A: The best-known AI application of LISP is CAD, such as AutoCad. The best-known application of Prolog is to buy a copy of Turbo Prolog in a rash moment, and leave it on the shelf collecting dust, always meaning to take it down and have a go. The best known application of POP is to be the subject of magazine articles entitled: 'POP the British AI language.'

Q: No, I meant what programs are written using them?

A: Only one program has ever been written using these languages: the Towers of Hanoi' game.

Q: Surely the problem with Al languages is that they are too slow for commercial work?

A: There are certainly no flies on you. In 1988, a Respected Industry Commentator said that, in the next three years, hardware will speed up sufficiently to fix this.

Q: So AI will be viable in 1991?

A: No, in 1993. Al will always become feasible in d= years' time. This is an application of Carrollian logic programming -'Jam tomorrow'. Remember, 95% of AI text books contain a quote from Through the Looking Glass.

Q: Is there anything else I should know about AI?

A: An inference engine is a two-stroke version of a database engine. A knowledge engineer earns tons more money than you do. Backward chaining is still illegal in certain States of the US. Waltz's Algorithm is much less fun than its name.

Q: Verity, thanks ya much for your valiable time.

A: Always a pleasure for you, sweetie.

Beginner's Corner:

Taking Advantage of Your PC's Hard Disk

Part III: CONFIG.SYS and the Virtual Disk

Barry Gordon

New York Personal Computer, Inc.

[This series of three articles is aimed at novice PC users and covers (1) Hard Disk File Mangement; (2) Batch File Techniques; (3) Setting Up a Virtual Disk.]

There are some simple things you can do to enhance the performance of your hard drive. Creating a CONFIG.SYS file and a virtual disk can give you added power and speed in working on your PC by reconfiguring your operating system and Random Access Memory (RAM).

The CONFIG.SYS File

Another file that is useful in the root directory is the CONFIG.SYS file. It's a collection of miscellany to modify the way the PC system works. You may want to try a CONFIG.SYS file consisting of three lines:

BREAK=ON

FILES=16

BUFFERS=8

The BREAK command allows you to interrupt the system more easily should you wish to terminate the execution of a program.

The FILES command allows DOS to juggle more than the default of eight active files simultaneously. This is important, because DOS loads five files of its own, leaving you with only three. Sixteen should give you enough to handle most any situation.

The BUFFERS command can speed up certain kinds of disk operations. You may want to try as many as 16 or even 32 for a 20MB hard disk.

The Virtual Disk

A large internal RAM not only allows manipulation of larger files when necessary, but gives the user access to the speed of internal memory for processing data. Just as the hard disk increases computing speed over the diskette drive, so internal memory, if utilized, increases computing speed over the hard drive. To tap the speed and power of the internal memory, you might consider setting up a virtual disk. However, to attempt to set up a virtual disk, you should have more than 256KB of memory in your PC, preferably, 512KB or larger.

The virtual disk is a portion of RAM set aside to simulate a disk. The virtual disk is referred to by the drive designation letter following that of the system's last hard disk. Assuming a single hard disk C:, our virtual disk becomes D:. The virtual disk is created at startup by a program such as the VDISK command that comes with DOS 3.0., working together with a command you save in your CONFIG.SYS file.

With 512KB of RAM, a reasonable virtual disk size to try is 64KB. If you have a 640KB system, you may want to set up a virtual disk of 192KB. I suggest leaving about 448KB of available, active RAM to have ample memory for DOS to do its work.

A virtual disk of even 64KB can do wonders. It can also be effectively larger by specifying the smallest possible sector size -- e.g., 128 bytes -- for the greatest possible data packing density. Assuming VDISK.COM and 640KB of RAM, the virtual disk specification in your CONFIG.SYS might look like this:

DEVICE=C:\VDISK

The entire CONFIG.SYS file would look like this:

BREAK=ON

FILES=16

BUFFERS=8

DEVICE=C:\VDISK.SYS 192 128 64

[Ed.: MS-DOS v.5.0 uses the RAMDRIVE.SYS driver, e.g. my rather largish virtual disk is specified as follows:

DEVICE=\DOS\RAMDRIVE.SYS 1144 512 256 /E

i.e. Size = 1144 KB, sector size = 512 bytes, 256 directory entries, created in extended memory.]

The SETPATH.BAT and AUTOEXEC.BAT Files Revised

What do you do with this virtual disk D: now that it is set up? First, you can begin to take full advantage of your virtual disk's speed by adding a statement to AUTOEXEC.BAT to transfer the sub-directory of your most-used files to the virtual disk D:.

Your AUTOEXEC.BAT file now contains the following:

DATE

TIME

PROMPT $P$G

COPY \anyname1\*.* D:

D:SETPATH

Note that the SETPATH command must remain the last one in the file. Next, modify the PATH command (in SETPATH.BAT) to PATH D:\;C:\anyname2;C:\any3;C:\any4 replacing the c:\anyname1 you formerly had in SETPATH.BAT with the root directory of your virtual drive D:\. (Again, note that you specify complete paths, including all drive designations, to keep the command totally independent of what the default drive might happen to be.)

Finally, move the SETPATH.BAT file out of the root directory and into the \anyname1 directory for automatic transfer to D:. This allows you to execute the SETPATH command from any directory, entering it as simply SETPATH or D:SETPATH if necessary.

The root directory on your hard drive now contains the following files:

<IBMBIO.COM>

<IBMDOS.COM>

COMMAND.COM

AUTOEXEC.BAT

Sub-directory Names

CONFIG.SYS

VDISK.COM (or equivalent)

Tips Concerning The Virtual Drive

Now that your PC has the virtual disk D:, you will want to keep only your most-used files in your C:\anyname1 directory. I would suggest you put in some DOS external command files, plus regulars like BASIC.COM, or perhaps a few of your personal favorites, such as PE.EXE or your word processing program. Depending on the size of your virtual disk, you might even wish to add some non- executable, but nonetheless frequently used, files that you would like to have accessible from any sub-directory.

All of these would presumably reside permanently in your C:\anyname1 directory so that they transfer automatically to D: at system startup. The one thing you must not forget is that your virtual disk D: actually resides in RAM and not on a real disk drive. I suggest you do not store anything in your virtual drive that is not stored in a file on your hard disk or on a diskette, because whenever you turn your PC off or whenever the power fails, everything in your virtual disk is cleared.

Summary

That's it. My experience shows that a hard disk with large internal RAM, set up more or less as recommended here, can be a real pleasure to operate. A brief summary of what the various files might look like is given below:

-> The Root Directory

<IBMBIO.COM>

<IBMDOS.COM>

COMMAND.COM

AUTOEXEC.BAT

Sub-directory Names

CONFIG.SYS

VDISK.SYS (or equivalent)

-> CONFIG.SYS File

BREAK=ON

FILES=16

BUFFERS=8

DEVICE=C:\VDISK.SYS 192 128 64

The numercial values in the DEVICE command will vary depending on the size you wish your virtual disk to be.

-> AUTOEXEC.BAT File

DATE

TIME

COPY C:\anyname 1\*.* D:

PROMPT $P$G

D:SETPATH

The D: shown above presumes that you don't have a second hard disk attached to your PC. With two hard disks, the virtual disk would be E:.

C:\anyname1 (Directory)

SETPATH.BAT Most Frequently used Executable Files High Usage Reference/Data Files

-> SETPATH.BAT File

PATH D:\;C:\any1;C:\any2\;C:any3;...

-> C:\anyname 2 et al (Directories)

Other Executable Files by Frequency of Use

Other Data Files Grouped by Related Functions

REVIEWS of 4DOS and VIRUS SCAN

by David Batterson

(from his disk-based software reviews - library disk 2929)

4DOS - A PC-DOS/MS-DOS Command Processor

Most PC users have opted not to purchase OS/2, due to the expense. But many users are not satisfied with plain vanilla DOS either. So a few software companies have introduced enhancements, generally called DOS extenders, which add new features and commands to PC- and MS-DOS.

4DOS, a recent shareware software product, is another DOS extender. It replaces COMMAND.COM, the command interpreter used by PC- and MS-DOS. 4DOS has already been updated to Version 2.21 by its author, Rex Conn.

Although 4DOS is a DOS shell, it is not the same as other DOS shells, such as Marshall Magee's Automenu. It's NOT designed to eliminate the DOS command line, but rather to give the user superior DOS commands. In other words, if you are seeking a menu program which gets you away from DOS, this isn't it!

If you're worried about RAM hogging, 4DOS uses less than 5K for the resident portion; the transient portion can use EMS memory or disk swapping.

For those who like online help, 4DOS has it: for all the MS-DOS external commands as well as the 4DOS internal commands. Just press <F1> at the DOS prompt.

There's command line editing too, including insert and delete, so you don't have to rekey whole lines when you make a mistake. 4DOS includes command history, which means you can view, search, modify and re-execute previous commands.

You can enter file descriptions, up to 40 characters, for any file or directory. Whenever you use the DIR or SELECT command, the descriptions are displayed.

There are many more features in 4DOS, including flexible file wildcards, multiple commands on a single line, environment variables, conditional commands, more redirection options, and aliases (which let you rename and reconfigure commands).

The DIR command in 4DOS offers many options: 1, 2 or 5 column display; sorting by name, extension, size or date; display subdirectories; display file attributes, and display subtotals only.

With 4DOS you can RENAME directories as well as files. SELECT uses point- and-shoot selection to perform a command on selected files. LIST displays ASCII text files, with scrolling, search for text, and printing. EXCEPT executes a command except on the specified files.

These brief explanations only begin to reveal all the power and intricacies of 4DOS. This is a program for power users too, with an enhanced batch processor that is more versatile, and faster too.

4DOS is compatible with PC- and MS-DOS 2.0 through 4.01, DESQview, Novell Netware, 3Com 3Plus, InvisibleNet, and the Word Perfect Library. The shareware version of 4DOS may be downloaded from CompuServe and many BBSs, or obtained from shareware distribution companies.

The commercial version, including manual and next update free, costs $50 ($35 with no free update). For more information, contact J.P. Software, P.O. Box 1470, E. Arlington, MA 02174; 617-646-3975, CompuServe: 73577,243, BIX: trawson.

[Ed: Note that MS-DOS v.5.0 incorporates most of the features mentioned above; however, there are still a few benefits of using 4DOS. In addition, Rex is working on an update! Library disk 2736]

VIRUSCAN Ver. 3.1V62 - Finds Elusive Viruses!

The virus scare is partly real and partly a lack of knowledge on the part of many new users. I think it's accurate to state that in most cases where a PC user suspects a virus, that is NOT the problem!

However, viruses are indeed infecting PCs around the country. From reading BBS messages from around the country, I've learned that in many cases, the virus is not spread through shareware/BBSs, but rather through illegal copies of commercial software.

There's a lesson to be learned here: if you are ripping off software companies by using pirated copies, then perhaps you deserve to have your PC infected with a virus. You'll get no sympathy from here.

OK, let's assume that's not the case, and you strongly suspect that your PC is infected. Then you'd better get a copy of VIRUSCAN from McAfee Associates. You may have seen it simply as SCAN.EXE on BBSs.

The number of new viruses has grown from a handful to dozens, [Ed: hundreds] with new ones popping up overnight, like daisies in a meadow. So VIRUSCAN is updated on a constant basis. If you have an old version of SCAN.EXE, it just may not find a recent virus in your system.

Therefore, it's a good idea to send your registration fee of $25 [for home use; corp. site licenses available], and get the latest version of VIRUSCAN. It's also sure to be virus-free. [Some anti-virus programs have been downloaded from BBSs, and found to be infected themselves!]

VIRUSCAN contains a self-test which runs at load time. If SCAN.EXE has been modified in any way, a warning will be displayed. However, it will still continue to check for viruses. Also packaged is the VALIDATE program that will authenticate the integrity of SCAN.EXE and other programs.

VIRUSCAN will scans your disks or entire system, and identify any pre- existing PC virus infection. It will indicate the specific files or system areas that are infected and will identify the virus strain. SCAN version 3.1V62 can identify 86 virus strains and numerous sub-varieties for each strain. The 86 viruses include the ten most common viruses "which account for over 95% of all reported PC infections."

Removal can then be done automatically using the SCAN /D option. Automatic disinfectors are available for the majority of the known viruses. Registered VIRUSCAN users can contact McAfee Associates for free assistance in manually removing the virus or for information on disinfection utilities.

If the infection is widespread, you can get McAfee's CLEAN-UP VIRUS REMOVER, Ver. 3.1V62. This shareware product sells for $35 (home use).

All known viruses infect one of the following areas: The hard disk partition table; the DOS boot sector of hard disks or floppies; or one or more executable files within the system. The executable files may be operating system programs, system device drivers, .COM files, .EXE files, overlay files or any other file which can be loaded into memory and executed.

VIRUSCAN identifies every area or file that has become infected and indicates the name of the virus that has infected each file. VIRUSCAN can check the entire system, an individual diskette, a sub-directory or an individual file for an existing virus.

VIRUSCAN will require approximately 3 minutes of run time for each 1,000 files on the designated drive. SCAN will exit with the following exit codes:

0 - Normal termination, no viruses found

1 - One or more viruses found

2 - Abnormal termination (Error)

We've in a period in which treacherous viruses are causing a great deal of heartbreak for people: HIV (the AIDS virus) and computer viruses. Hopefully, the first will be wiped out in time. Thanks to John McAfee and others, at least the latter will become tamed if not eliminated.

To register VIRUSCAN shareware, or for more information, contact McAfee Associates, 4423 Cheeney Street, Santa Clara, CA 95054; 408-988-3832, BBS: 408-988-4004.

David Batterson reviews a lot of PC hardware and software. Contact him via virus-free MCI-Mail: DBATTERSON.

[Ed: Note that our latest version of SCAN is currently ver.86 (although it might already be updated by the time you read this). It comes bundled with various other anti-viral software such as CLEAN, NETSCAN, VCOPY etc. It recognizes over 1000 varieties (strains) of more than 300 different viruses, including all those that received a lot of publicity lately: Michelangelo, Brain, DIR etc. When we registered our copy, we did NOT receive the latest version, but we do now have the legal (and moral) right to use it (or its upgrades). We did receive a nice letter confirming registration and more mail at later stages. Library disks 2565 & 2566]

COBOL - A brief History

By J.Dean

In the 1950's the need became apparent for a computer language that would satisfy the needs of commerce and industry, to utilize their computer installations efficiently, for commercial purposes. Scientific languages, such as FORTRAN ( FORmula TRANslator ) and ALGOL ( ALGOrythmic Lannguage ) were, and still largely are, unsuitable for commercial applications, since they are mathmatically oriented, unsuited to large volume record handling, with obscure code requiring extensive documentation.

Thus in 1959 interested parties : Defence contractors, Educationalists, and Computer Manufacturers convened to become CODASYL ( Conference On Data SYstem Languages ) and under the leadership of Commander G. Hopper ( USN ) created COBOL ( COmmon Business Oriented Language ). This was designed to be powerful, flexible, easily learned, and, perhaps most importantly, hardware and operating system independent ( a novel idea at the time ). Most systems at present run 1974 ANSI COBOL which, as the name implies, conforms to the 1974 ANSI ( American National Standards Institute ) specifications with machine dependent additions.

In spite of new, faster, and more powerful hardware and software COBOL remains popular because : COBOL source code is to an extent self-documenting ( easy to understand and modify without external explanation ); file handling and database access is well supported as compared to previous languages ; but primarily because there is a large investment by commerce and industry in training, programs, and applications packages i.e. existing software.

In spite of the inherent advantages due to its planned, structured, and standardized creation, COBOL has a few serious shortcomings : it is a verbose language and thus requires large amounts of secondary storage for the source code, as well as large amounts of primary storage for manipulation during compilation. It does not utilize the later hardware efficiently ( although a 1980's ANSI standard is due ). These disadvantages are also the reasons why COBOL has, until recently ( with the advent of Microsoft COBOL ), not been implemented on microcomputer systems. On micro's, user-friendly, interactive BASIC ( Beginners All Purpose Symbolic Instruction Code ) has long held sway, with PASCAL ( named after Blaise Pascal ) a derivative of ALGOL, and speciality languages such as FORTH ( Jupiter Ace 1981 ) available on micro's since the early '80's. Thus the advent of COBOL on micro's for the convenience of trained COBOL programers had to await the advent of the late '80's with ( relatively ) cheap, powerful, and plentiful microcomputer hardware.

COBOL is a widely used commercial, high-level language that will continue to be used and maintained in the future due to considerable investment in training and software.

The Life Story of a "REAL" Programmer

Real Programmers don't eat quiche. They like Coke, junk-food, and Chinese food.

Real Programmers don't write application programs. They program right down on the bare metal. Application programming is for feebs who can't do systems programming.

Real Programmers don't write specs. Users should be grateful for whatever they get, and consider themselves lucky to get anything at all.

Real Programmers don't comment their code. If it was hard to write, it should be just as hard to understand and even harder to modify.

Real Programmers don't write documentation. Documentation is for the feeble-minded who can't read listings or the object code from the dump.

Real Programmers don't draw flowcharts. Flowcharts are the illiterate's form of documentation. Cavemen drew flow charts - look how much good it did for them.

Real Programmers don't read manuals. Reliance on a reference is the hallmark of the novice and the coward.

Real Programmers don't write in RPG. RPG is for gum-chewing dimwits who aren't smart enough to learn a REAL programming language.

Real Programmers don't write in COBOL. COBOL is for COmmon BOzo Laymen who can't run a business nor write a real program.

Real Programmers don't write in FORTRAN. FORTRAN is for wimpy engineers who wear white socks and plastic pocket protectors. They get excited over fourier transformations and finite state analysis. If God had meant for us to use FORTRAN, he would have included pointers in the language.

Real Programmers don't write in PL/I. PL/I is for insecure anal retentives who can't choose between COBOL and FORTRAN.

Real Programmers don't write in BASIC. Actually, no programmers write in BASIC after reaching puberty.

Real Programmers don't write in APL unless the whole program can be written on one line.

Real Programmers don't write in LISP. Only faggot programs contain more parentheses than actual code.

Real Programmers don't write in PASCAL, BLISS, ADA, or any other sissy pinko computer science languages. Strong typing is a crutch for fools with weak minds.

Real Programmers' programs never work right the first time. But they can always be hacked into some semblance of working order in only a few 30-hour debugging sessions.

Real Programmers never work 9 to 5. If a REAL PROGRAMMER is around at 9 AM, it's because he was there all night.

Real Programmers don't play tennis, or any other sport which requires a change of clothes. Mountain climbing is OK, and Real Programmers wear climbing boots to work in case a mountain should suddenly spring up in the middle of the machine room.

Real Programmers disdain structured programming. Structured programming is for compulsive neurotics who were prematurely toilet-trained. They wear neckties and carefully line up sharp pencils in a neat row on an otherwise uncluttered desk.

Real Programmers dislike the Team Programming concept, unless, of course, they are the Chief Programmer.

Real Programmers never write memos or letters on paper. They either send electronic mail, or don't send anything at all.

Real Programmers have no use for managers. Managers are a necessary evil. They exist only to deal with personnel bozos, bean counters, senior planners, and other mental defectives.

Real Programmers scorn floating point arithmetic. The decimal point was invented for pansy bedwetters who are unable to "think big".

Real Programmers don't believe in schedules. Planners make up schedules. Managers "firm up" schedules. Frightened coders strive to meet schedules. Real Programmers ignore schedules.

Real Programmers like vending-machine popcorn. Coders pop it in the microwave oven. Real Programmers use the heat given off by the CPU. They can tell which jobs are running just by listening to the rate of popping.

Real Programmers know every nuance of every instruction and use them all in every Real Program. Candyass architects won't allow Execute instructions to address another Execute as the target instruction. Real Programmers despise petty restrictions.

Real Programmers don't bring brown-bag lunches. If the vending machine sells it, they eat it. If the vending machine doesn't sell it, they don't eat it. Vending machines don't sell quiche.

Laws & Quotes

Dunn's Discovery:

The shortest measurable interval of time is the time between the moment

one puts a little extra aside for a sudden emergency and the arrival of

that emergency.

Durrell's Parameter:

The faster the plane, the narrower the seats.

Dyer's Law:

A continuing flow of paper is sufficient to continue the flow of paper.

Economists' Laws:

1) What men learn from history is that men do not learn from history.

2) If on an actuarial basis there is a 50-50 chance that something will

go wrong, it will actually go wrong nine times out of ten.

Edington's Theory:

The number of different hypotheses erected to explain a given biological

phenomenon is inversely proportional to the available knowledge.

Law of Editorial Correction:

Anyone nit-picking enough to write a letter of correction to an editor

doubtless deserves the error that provoked it.

Ehrlich's Rule:

The first rule of intelligent tinkering is to save all the parts.

Eliot's Observation:

Nothing is so good as it seems beforehand.

Ellenberg's Theory:

One good turn gets most of the blanket.

Emerson's Insight:

That which we call sin in others is experiment for us.

Old Engineer's Law:

The larger the project or job, the less time there is to do it.

Epstein's Law:

If you think the problem is bad now, just wait until we've solved it.

Against Software Patents

The League for Programming Freedom

Michael I. Bushnell, LFP, 3/15/91

Introduction

Software patents threaten to devastate America's computer industry. Patents granted in the past decade are now being used to attack companies such as the Lotus Development Corporation for selling programs that they have independently developed. Soon new companies will often be barred from the software arena---most major programs will require licenses for dozens of patents, and this will make them infeasible. This problem has only one solution: software patents must be eliminated.

The Patent System and Computer Programs

The framers of the United States Constitution established the patent system so that inventors would have an incentive to share their inventions with the general public. In exchange for divulging an invention, the patent grants the inventor a 17 year monopoly on the use of the invention. The patent holder can license others to use the invention, but may also refuse to do so. Independent reinvention of the same technique by others does not give them the right to use it. Patents do not cover specific systems: instead, they cover particular techniques that can be used to build systems, or particular features that systems can offer. Once a technique or feature is patented, it may not be used in a system without the permission of the patent- holder---even if it is implemented in a different way. Since a computer program typically uses many techniques and provides many features, it can infringe many patents at once.

Until recently, patents were not used in software field. Software developers copyrighted individual programs or made them trade secrets. Copyright was traditionally understood to cover the implementation details of a particular program; it did not cover the features of the program, or the general methods used. And trade secrecy, by definition, could not prohibit any development work by someone who did not know the secret. On this basis, software development was extremely profitable, and received considerable investment, without any prohibition on independent software development. But this scheme of things is no more. A change in U.S. government policy in the early 1980's stimulated a flood of applications. Now many have been approved, and the rate is accelerating. Many programmers are unaware of the change and do not appreciate the magnitude of its effects. Today the lawsuits are just beginning.

Absurd Patents

The Patent Office and the courts have had a difficult time with computer software. The Patent Office refused until recently to hire Computer Science graduates as examiners, and in any case does not offer competitive salaries for the field. Patent examiners are often ill-prepared to evaluate software patent applications to determine if they represent techniques that are widely known or obvious---both of which are grounds for rejection. Their task is made more difficult because many commonly-used software techniques do not appear in the scientific literature of computer science. Some seemed too obvious to publish while others seemed insufficiently general; some were open secrets.

Computer scientists know many techniques that can be generalized to widely varying circumstances. But the Patent Office seems to believe that each separate use of a technique is a candidate for a new patent. For example, Apple was sued because the Hypercard program allegedly violates patent number 4,736,308, a patent that covers displaying portions of two or more strings together on the screen---effectively, scrolling with multiple subwindows. Scrolling and subwindows are well-known techniques, but combining them is now apparently illegal. The granting of a patent by the Patent Office carries a presumption in law that the patent is valid. Patents for well-known techniques that were in use many years before the patent application have been upheld by federal courts.

It can be hard to prove a technique was well known at the time in question. For example, the technique of using exclusive-or to write a cursor onto a screen is both well known and obvious. (Its advantage is that another identical exclusive-or operation can be used to erase the cursor without damaging the other data on the screen.) This technique can be implemented in a few lines of a program, and a clever high school student might well reinvent it. But it is covered by patent number 4,197,590, which has been upheld twice in court even though the technique was used at least five years before the patent application. Cadtrak, the company that owns this patent, collects millions of dollars from large computer manufacturers. English patents covering customary graphics techniques, including airbrushing, stenciling, and combination of two images under control of a third one, were recently upheld in court, despite the testimony of the pioneers of the field that they had developed these techniques years before. (The corresponding United States patents, including 4,633,416 and 4,602,286, have not yet been tested in court, but they probably will be soon.) All the major developers of spreadsheet programs have been threatened on the basis of patent 4,398,249, covering ``natural order recalc''---the recalculation of all the spreadsheet entries that are affected by the changes the user makes, rather than recalculation in a fixed order. Currently Lotus alone is being sued, but a victory for the plaintiff in this case would leave the other developers little hope.

The League has found prior art that may defeat this patent, but this is not assured. Nothing protects programmers from accidentally using a technique that is patented, and then being sued for it. Taking an existing program and making it run faster may also make it violate half a dozen patents that have been granted, or are about to be granted. Even if the Patent Office learns to understand software better, the mistakes it is making now will follow us into the next century, unless Congress or the Supreme Court intervenes to declare these patents void. However, this is not the whole of the problem. Computer programming is fundamentally different from the other fields that the patent system previously covered. Even if the patent system were to operate ``as intended'' for software, it would still obstruct the industry it is supposed to promote.

What Is ``Obvious''?

The patent system will not grant or uphold patents that are judged to be obvious. However, the system interprets the word ``obvious'' in a way that might surprise computer programmers. The standard of obviousness developed in other fields is inappropriate for software. Patent examiners and judges are accustomed to considering even small, incremental changes as deserving new patents. For example, the famous in the number and order of layers of chemicals in a film---differences between the technique Kodak was using and those described by previous, expired patents. The court ruled that these differences were unobvious. Computer scientists solve problems quickly because the medium of programming is tractable. They are trained to generalize solution principles from one problem to another. One such generalization is that a procedure can be repeated or subdivided. Programmers consider this obvious---but the Patent Office did not think that it was obvious when it granted the patent on scrolling multiple strings, described above. Cases such as this cannot be considered errors. The patent system is functioning as it was designed to do-- -but with software, it produces outrageous results.

Patenting What Is Too Obvious to Publish

Sometimes it is possible to patent a technique that is not new precisely because it is obvious---so obvious that no one would have published a paper about it. For example, computer companies distributing the free X Window System developed by MIT are now being threatened with lawsuits by AT&T over patent number 4,555,775, covering the use of ``backing store.'' This technique is used when there are overlapping windows; the contents of a window that is partly hidden are saved in off-screen memory, so they can be put back quickly on the screen if the obscuring window disappears (as often happens). The technique of backing store was used in an earlier MIT project, the Lisp Machine System, before AT&T applied for the patent. The Lisp Machine developers published nothing about this detail at the time, considering it too obvious. It was mentioned years later when the programmers' reference manual explained how to turn it on and off. The Lisp Machine was the first computer to use this technique only because it had a larger memory than earlier machines that had window systems. Prior window system developers must have dismissed the idea because their machines had insufficient memory space to spare any for this purpose. Improvements in memory chips made development of backing store inevitable. Without a publication, the use of backing store in the Lisp Machine System may not count as prior art to defeat the patent. So the AT&T patent may stand, and MIT may be forbidden to continue using a method that MIT used before AT&T. The result is that the dozens of companies and hundreds of thousands of users who accepted the software from MIT on the understanding that it was free are now faced with possible lawsuits. (They are also being threatened with Cadtrak's exclusive-or patent.) The X Window System project was intended to develop a window system that all developers could use freely. This public service goal seems to have been thwarted by patents.

Why Software Is Different

Software systems are much easier to design than hardware systems of the same number of components. For example, a program of 100,000 components might be 50,000 lines long and could be written by two good programmers in a year. The equipment needed for this costs less than $10,000; the only other cost would be the programmers' own living expenses while doing the job. The total investment would be less than a $100,000. If done commercially in a large company, it might cost twice that. By contrast, an automobile typically contains under 100,000 components; it requires a large team and costs tens of millions of dollars to design. And software is also much cheaper to manufacture: copies can be made easily on an ordinary workstation costing under ten thousand dollars. To produce a hardware system often requires a factory costing tens of millions of dollars.

Why is this? A hardware system has to be designed using real components. They have varying costs; they have limits of operation; they may be sensitive to temperature, vibration or humidity; they may generate noise; they drain power; they may fail either momentarily or permanently. They must be physically assembled in their proper places, and they must be accessible for replacement in case they fail. Moreover, each of the components in a hardware design is likely to affect the behavior of many others. This greatly complicates the task of determining what a hardware design will do: mathematical modeling may prove wrong when the design is built.

By contrast, a computer program is built out of ideal mathematical objects whose behavior is defined, not modeled approximately, by abstract rules. When an if- statement follows a while-statement, there is no need to study whether the if-statement will draw power from the while-statement and thereby distort its output, nor whether it could overstress the while-statement and make it fail. Despite being built from simple parts, computer programs are incredibly complex. The program with 100,000 parts is as complex as an automobile, though far easier to design. While programs cost substantially less to write, market and sell than automobiles, the cost of dealing with the patent system will not be less. The same number of components will, on the average, involve the same number techniques that might be patented.

The Danger of a Lawsuit

Under the current patent system, a software developer who wishes to follow the law must determine which patents a program violates and negotiate with each patent holder a license to use that patent. Licensing may be prohibitively expensive, or even unavailable if the patent is held by a competitor. Even ``reasonable'' license fees for several patents can add up to make a project infeasible.

Alternatively, the developer may wish to avoid using the patent altogether; but there may be no way around it. The worst danger of the patent system is that a developer might find, after releasing a product, that it infringes one or many patents. The resulting lawsuit and legal fees could force even a medium-size company out of business. Worst of all, there is no practical way for a software developer to avoid this danger---there is no effective way to find out what patents a system will infringe. There is a way to try to find out---a patent search--- but searches are unreliable and in any case too expensive to use for software projects.

Patent Searches Are Prohibitively Expensive

A system with a hundred thousand components can use hundreds of techniques that might already be patented. Since each patent search costs thousands of dollars, searching for all the possible points of danger could easily cost over a million. This is far more than the cost of writing the program. The costs don't stop there.

Patent applications are written by lawyers for lawyers. A programmer reading a patent may not believe that his program violates the patent, but a federal court may rule otherwise. It is thus now necessary to involve patent attorneys at every phase of program development. Yet this only reduces the risk of being sued later---it does not eliminate the risk. So it is necessary to have a reserve of cash for the eventuality of a lawsuit.

When a company spends millions to design a hardware system, and plans to invest tens of millions to manufacture it, an extra million or two to pay for dealing with the patent system might be bearable. However, for the inexpensive programming project, the same extra cost is prohibitive. Individuals and small companies especially cannot afford these costs. Software patents will put an end to software entrepreneurs.

Patent Searches Are Unreliable

Even if developers could afford patent searches, these are not a reliable method of avoiding the use of patented techniques. This is because patent searches do not reveal pending patent applications (which are kept confidential by the Patent Office). Since it takes several years on the average for a software patent to be granted, this is a serious problem: a developer could begin designing a large program after a patent has been applied for, and release the program before the patent is approved. Only later will the developer learn that distribution of the program is prohibited.

For example, the implementors of the widely-used public domain data compression program COMPRESS followed an algorithm obtained from the journal IEEE Computer. They and the user community were surprised to learn later that patent number 4,558,302 had been issued to one of the authors of the article. Now Unisys is demanding royalties for using this algorithm. Although the program is still in the public domain, using it means risking a lawsuit. The Patent Office does not have a workable scheme for classifying software patents. Patents are most frequently classified by end results, such as ``converting iron to steel;'' but many patents cover algorithms whose use in a program is entirely independent of the purpose of the program. For example, a program to analyze human speech might infringe the patent on a speedup in the Fast Fourier Transform; so might a program to perform symbolic algebra (in multiplying large numbers); but the category to search for such a patent would be hard to predict.

You might think it would be easy to keep a list of the patented software techniques, or even simply remember them. However, managing such a list is nearly impossible. A list compiled in 1989 by lawyers specializing in the field omitted some of the patents mentioned in this paper.

Obscure Patents

When you imagine an invention, you probably think of something that could be described in a few words, such as ``a flying machine with fixed, curved wings'' or ``an electrical communicator with a microphone and a speaker''. But most patents cover complex detailed processes that have no simple descriptions - often they are speedups or variants of well-known processes that are themselves complex. Most of these patents are neither obvious nor brilliant; they are obscure. A capable software designer will ``invent'' several such improvements in the course of a project. However, there are many avenues for improving a technique, so no single project is likely to find any given one.

For example, IBM has several patents (including patent number 4,656,583) on workmanlike, albeit complex, speedups for well-known computations performed by optimizing compilers, such as register coloring and computing the available expressions. Patents are also granted on combinations of techniques that are already widely used. One example is IBM patent 4,742,450, which covers ``shared copy-on-write segments.'' This technique allows several programs to share the same piece of memory that represents information in a file; if any program writes a page in the file, that page is replaced by a copy in all of the programs, which continue to share that page with each other but no longer share with the file. Shared segments and copy-on-write have been used since the 1960's; this particular combination may be new as a specific feature, but is hardly an invention.

Nevertheless, the Patent Office thought that it merited a patent, which must now be taken into account by the developer of any new operating system. Obscure patents are like land mines: other developers are more likely to reinvent these techniques than to find out about the patents, and then they will be sued. The chance of running into any one of these patents is small, but they are so numerous that you cannot go far without hitting one.

Every basic technique has many variations, and a small set of basic techniques can be combined in many ways. The patent office has now granted at least 2000 software patents---no less than 700 in 1989 alone, according to a list compiled by EDS. We can expect the pace to accelerate. In ten years, programmers will have no choice but to march on blindly and hope they are lucky.

Patent Licensing Has Problems, Too

Most large software companies are trying to solve the problem of patents by getting patents of their own. Then they hope to cross-license with the other large companies that own most of the patents, so they will be free to go on as before. While this approach will allow companies like Microsoft, Apple and IBM to continue in business, it will shut new companies out of the field. A future start-up, with no patents of its own, will be forced to pay whatever price the giants choose to impose. That price might be high: established companies have an interest in excluding future competitors. The recent Lotus lawsuits against Borland and the Santa Cruz Operation (although involving an extended idea of copyright rather than patents) show how this can work. Even the giants cannot protect themselves with cross- licensing from companies whose only business is to obtain exclusive rights to patents and then threaten to sue.

For example, consider the New York-based Refac Technology Development Corporation, representing the owner of the ``natural order recalc'' patent. Contrary to its name, Refac does not develop anything except lawsuits---it has no business reason to join a cross- licensing compact. Cadtrak, the owner of the exclusive-or patent, is also a litigation company. Refac is demanding five percent of sales of all major spread-sheet programs. If a future program infringes on twenty such patents---and this is not unlikely, given the complexity of computer programs and the broad applicability of many patents---the combined royalties could exceed 100% of the sales price. (In practice, just a few patents can make a program unprofitable.)

The Fundamental Question

According to the Constitution of the United States, the purpose of patents is to ``promote the progress of science and the useful arts.'' Thus, the basic question at issue is whether software patents, supposedly a method of encouraging software progress, will truly do so, or will retard progress instead. So far we have explained the ways in which patents will make ordinary software development difficult.

But what of the intended benefits of patents: more invention, and more public disclosure of inventions? To what extent will these actually occur in the field of software? There will be little benefit to society from software patents because invention in software was already flourishing before software patents, and inventions were normally published in journals for everyone to use. Invention flourished so strongly, in fact, that the same inventions were often found again and again.

In Software, Independent Reinvention Is Commonplace

A patent is an absolute monopoly; everyone is forbidden to use the patented process, even those who reinvent it independently. This policy implicitly assumes that inventions are rare and precious, since only in those circumstances is it beneficial. The field of software is one of constant reinvention; as some people say, programmers throw away more ``inventions'' each week than other people develop in a year.

And the comparative ease of designing large software systems makes it easy for many people to do work in the field. A programmer solves many problems in developing each program. These solutions are likely to be reinvented frequently as other programmers tackle similar problems. The prevalence of independent reinvention negates the usual purpose of patents.

Patents are intended to encourage inventions and, above all, the disclosure of inventions. If a technique will be reinvented frequently, there is no need to encourage more people to invent it; since some of the developers will choose to publish it (if publication is merited), there is no point in encouraging a particular inventor to publish it---not at the cost of inhibiting use of the technique.

Overemphasis of Inventions

Many analysts of American and Japanese industry have attributed Japanese success at producing quality products to the fact that they emphasize incremental improvements, convenient features and quality rather than noteworthy inventions. It is especially true in software that success depends primarily on getting the details right. And that is most of the work in developing any useful software system. Inventions are a comparatively unimportant part of the job. The idea of software patents is thus an example of the mistaken American preoccupation with inventions rather than products. And patents will encourage this mistaken focus, even as they impede the development work that actually produces better software.

Impeding Innovation

By reducing the number of programmers engaged in software development, software patents will actually impede innovation. Much software innovation comes from programmers solving problems while developing software, not from projects whose specific purpose is to make inventions and obtain patents. In other words, these innovations are byproducts of software development. When patents make development more difficult, and cut down on development projects, they will also cut down on the byproducts of development---new techniques.

Could Patents Ever Be Beneficial?

Although software patents in general are harmful to society as a whole, we do not claim that every single software patent is necessarily harmful. Careful study might show that under certain specific and narrow conditions (necessarily excluding the vast majority of cases) it is beneficial to grant software patents. Nonetheless, the right thing to do now is to eliminate all software patents as soon as possible, before more damage is done. The careful study can come afterward.

Clearly software patents are not urgently needed by anyone except patent lawyers. The pre-patent software industry had no problem that was solved by patents; there was no shortage of invention, and no shortage of investment. Complete elimination of software patents may not be the ideal solution, but it is close, and is a great improvement. Its very simplicity helps avoid a long delay while people argue about details. If it is ever shown that software patents are beneficial in certain exceptional cases, the law can be changed again at that time -- if it is important enough. There is no reason to continue the present catastrophic situation until that day.

Software Patents Are Legally Questionable

It may come as a surprise that the extension of patent law to software is still legally questionable. It rests on an extreme interpretation of a particular 1981 Supreme Court decision, Diamond vs. Deihr---See ``Legally Speaking'' in Communications of the ACM, August 1990. Traditionally, the only kinds of processes that could be patented were those for transforming matter (such as, for transforming iron into steel). Many other activities which we would consider processes were entirely excluded from patents, including business methods, data analysis, and ``mental steps.'' This was called the ``subject matter'' doctrine.

Diamond vs. Deihr has been interpreted by the Patent Office as a reversal of this doctrine, but the court did not explicitly reject it. The case concerned a process for curing rubber---a transformation of matter. The issue at hand was whether the use of a computer program in the process was enough to render it unpatentable, and the court ruled that it was not. The Patent Office took this narrow decision as a green light for unlimited patenting of software techniques, and even for the use of software to perform specific well-known and customary activities. Most patent lawyers have embraced the change, saying that the new boundaries of patents should be defined over decades by a series of expensive court cases. Such a course of action will certainly be good for patent lawyers, but it is unlikely to be good for software developers and users.

One Way to Eliminate Software Patents

We recommend the passage of a law to exclude software from the domain of patents. That is to say that, no matter what patents might exist, they would not cover implementations in software; only implementations in the form of hard-to-design hardware would be covered. An advantage of this method is that it would not be necessary to classify patent applications into hardware and software when examining them. Many have asked how to define software for this purpose---where the line should be drawn.

For the purpose of this legislation, software should be defined by the characteristics that make software patents especially harmful:

-> Software is built from ideal infallible mathematical components, whose outputs are not affected by the components they feed into. Ideal mathematical components are defined by abstract rules, so that failure of a component is by definition impossible. The behavior of any system built of these components is likewise defined by the consequences of applying the rules step by step to the components.

-> Software can be easily and cheaply copied. Following this criterion, a program to compute prime numbers is a piece of software. A mechanical device designed specifically to perform the same computation is not software, since mechanical components have friction, can interfere with each other's motion, can fail, and must be assembled physically to form a working machine. Any piece of software needs a hardware platform in order to run. The software operates the features of the hardware in some combination, under a plan.

Our proposal is that combining the features in this way can never create infringement. If the hardware alone does not infringe a patent, then using it in a particular fashion under control of a program should not infringe either. In effect, a program is an extension of the programmer's mind, acting as a proxy for the programmer to control the hardware. Usually the hardware is a general purpose computer, which implies no particular application. Such hardware cannot infringe any patents except those covering the construction of computers. Our proposal means that, when a user runs such a program on a general purpose computer, no patents other than those should apply.

The traditional distinction between hardware and software involves a complex of characteristics that used to go hand in hand. Some newer technologies, such as gate arrays and silicon compilers, blur the distinction because they combine characteristics associated with hardware with others associated with software. However, most of these technologies can be classified unambiguously for patent purposes, either as software or as hardware, using the criteria above. A few gray areas may remain, but these are comparatively small, and need not be an obstacle to solving the problems patents pose for ordinary software development. They will end up being treated as hardware, as software, or as something in between.

What You Can Do

One way to help eliminate software patents is to join the League for Programming Freedom. The League is a grass-roots organization of programmers and users opposing software patents and interface copyrights. (The League is not opposed to copyright on individual programs.) Annual dues for individual members are $42 for employed professionals, $10.50 for students, and $21 for others. We appreciate activists, but members who cannot contribute their time are also welcome.

To contact the League, phone USA-(617) 243-4091, send Internet mail to the address league@@prep.ai.mit.edu or write to: League for Programming Freedom 1 Kendall Square #143 PO Box 9171 Cambridge, MA 02139, USA.

Fighting Patents One by One

Until we succeed in eliminating all patenting of software, we must try to overturn individual software patents. This is very expensive and can solve only a small part of the problem, but that is better than nothing. Overturning patents in court requires prior art, which may not be easy to find. The League for Programming Freedom will try to serve as a clearing house for this information, to assist the defendants in software patent suits.

This depends on your help. If you know about prior art for any software patent, please send the information to the League at the address given above. If you work on software, you can personally help prevent software patents by refusing to cooperate in applying for them. The details of this may depend on the situation.

Conclusion

Exempting software from the scope of patents will protect software developers from the insupportable cost of patent searches, the wasteful struggle to find a way clear of known patents, and the unavoidable danger of lawsuits. If nothing is changed, what is now an efficient creative activity will become prohibitively expensive.

To picture the effects, imagine if each square of pavement on the sidewalk had an owner, and pedestrians required a license to step on it. Imagine the negotiations necessary to walk an entire block under this system. That is what writing a program will be like if software patents continue. The sparks of creativity and individualism that have driven the computer revolution will be snuffed out.

[Ed.: This article is one of the many thought-provoking articles in the "ShareDebate International" electronic magazine - volumes 2586 to 2591, each disk contains a separate (independent) issue]

Laws & Quotes

Donohue's Law:

Anything worth doing is worth doing for money.

Donsen's Law:

The specialist learns more and more about less and less until, finally,

he knows everything about nothing; whereas the generalist learns less

and less about more and more until, finally, he knows nothing about

everything.

Douglas's Law of Practical Aeronautics:

When the weight of the paperwork equals the weight of the plane, the

plane will fly.

Principle of Displaced Hassle:

To beat the bureaucracy, make your problem their problem.

Dow's Law:

In a hierarchical organization, the higher the level, the greater the

confusion.

Durant's Discovery:

One of the lessons of history is that nothing is often a good thing to

do and always a clever thing to say.

The Library Pages

**** PROGRAM UPDATES ****

2771 PKZIP 1.1 compression utility.

Update to the traditionally most popular suite of compression programs PKZIP/PKUNZIP. This version includes minimal overhead (2K) for self-extracting programs and much faster operation. (updates 1364)

2772 LHARC compression utilities.

LHARC is probably the most efficient compression utility (although often slower in compression) and is slowly taking over the scene. Includes the MAD front-end which shows the content of all popular formats (ARC, PAK, ZIP, ZOO, LZS, DWC and LZH). (updates 2018)

2773 LZE: reclaim your hard disk space by compressing .EXE program files.

Comes with a shell to allow on-the-fly compression of .COM files as well.

2774 & 2775 CXL Tesseract "C" User Interface Library.

Contains over 375 multi-purpose function to add to your library of standard C routines. Includes menu-, windows-, data entry & formatting, device, memory (EMS/XMS) and video routines. Supports all popular commercial C compilers. (HD and commercial C compiler)

2776 MS-KERMIT v 3.00 for mainframe communications & terminal emulation.

Implements almost complete DEC VT-102 terminal emulation for use with most mainframes and minis. Includes comprehensive source code and documentation. (HD)

2777 Mr LABEL v.5: a versatile label generating program.

Includes text editor, multi-font support, auto-increment, multiple formats and flexible design formats.

2778 PC-BILLING v.2.2: a simple invoicing and debtors tracking program.

PC-Billing is an easy-to-use, no-nonsense program that prints invoices and automatically tracks information about your customers. Consolidates receipts and reports on outstanding debts.

2779 PC-DRAFT-CAD v.3.02.

A comprehensive CAD 2-dimensional drafting program. It stores all graphical elements (curves, boxes, circles, ellipses etc.) as individual objects for easy manipulation. Includes several fonts and common objects. Exports to .GEM (Venture) and .WPG (WordPerfect) graphics formats. Updates 1657/8. (CGA, HD)

2780 PAPERS database for scientific literature references.

This great database allows up to 6 keywords, notes of several pages, and all elements of scientific references. Features dBase-compatibility, ultra-fast search & sort, DOS shell. Ideal for academics, students & librarians. (HD) Updates 2039.

**** ACCOUNTING & ADMINISTRATION ****

2781 The FAST INVOICE WRITER for small businesses.

An simple but powerful program to produce invoices, statements, requisitions, orders etc. Does all the calculations, prints multiple copies and mailing labels, and keeps date in a customer & cashbook file. All you need!

2782 PC-BILLING automates your invoicing and debt collection.

Prints invoices, stores customer data, automatically prints "past-due" notices after 30 and 60 days and provides several management reports on the outstanding debt. Menu-driven and comes with sample data.

2783 BANK STATEMENT TAMER & BANK-BOOK for home finance & small business.

The Bank Statement Tamer is a menu-driven program to check your bank account statements. Provides full, step-by-step assisted statement reconciliation. BankBook is a very intuitive checkbook manager support full statement reconciliation (incl. ATM and EFT slips) and even prints checks. It allows you to analyze your expenses according to specific categories, using Year-To-Date and other trend patterns.

2784 CCI HOME BUDGET.

This menu-driven home finance program allows you to monitor and control your family income & expenses against your budget. Supports many different expense categories, transactions, accounts, etc.

2785 & 2786 CHEQUE-IT-OUT: Your personal financial manager.

This professional looking, menu-driven personal finance system is intuitive to use but generates impressive reports on your net worth, income & expenditure, cash flow, budgets, etc. Puts you back in charge of your money. Context-sensitive help, optional sound effects, cheque printing etc.

2787 & 2788 EXPRESS CHECK v.3.05 Cheque account manager.

This very popular cheque account program sports a very attractive and well-thought out user interface. Recurring payments need only 2 keystrokes, the screens look like real cheque books, etc. A wide variety of reports available (eg all cheques for a certain payee, uncleared cheques, certain budget codes, ...). Prints cheques as well.

2789 HOME MANAGEMENT II: 5 home/small business financial programs.

This package contains the following 5 modules: BUDGET to manage your finances and cheque account, TYPEWRITER, personal budget PLANNING, QUIK-LOAN analyzer and STOCK BROKER portfolio tracker and performance analysis.

2790 MULTI-ASSISTANT: your personal executive secretary.

This multi-function program takes care of your finances (cheque account management, budget analysis, cheque printing) and tracks your personal investments (records, valuation and regular commitments). It also incorporates a telephone book and mailing lists as well as a comprehensive calendar/appointment/project manager.

2791 PC-MONEY v.2.2: loan and investment analysis tool.

PC-Money will calculate anything about any standard type of loan. It will also analyze annuities, mutual funds and other investments based on regular payments.

2792 PC-FLOW: your personal cash-flow budgeting system.

This program allows you to forecast your home or business cash flow. Enter financial transactions with exact or estimated amounts, daily-weekly-monthly periodicity and categorize them by expense/income category.

2793 & 2794 ACCOUNT+ PLUS integrated accounting manager.

This menu-driven package with on-line help integrates a general ledger, inventory, checkbook, receivables and payables module. Many reports available.

2795 ACCOUNTING 101 basic accounting package.

This no-frills, user-friendly program performs all the basic accounting functions and hides all the "double entry" complications. It automatically maintains deposit, general, cheque and payables ledgers.

2796 NON-PROFIT General Ledger.

NGL will suit the accounting needs of small not-for-profit and service organizations. It has a fixed but suitable account structure with multiple fund & service accounts. Includes an interesting manual on non-profit accounting.

2797, 2798 & 2799 PAINLESS ACCOUNTING fully integrated accounting package.

A full-featured program with general ledger, billing, accounts receivable & payable, purchasing, reports & year-end/start modules. Features: very customizable, help, network, multiple department/company, budgeting, window/menu, passwords, ...

2800 RAMBase Accounting: very fast accounting package.

Runs completely in RAM, therefore extremely fast. Switch immediately between payables, receivables (very quick invoicing!), inventory, checkbook, point-of-sale and reports.

2801 ROSEWOOD JOURNAL: invoice & receivables system.

Tracks sales, invoicing and cash/account payments. Prints statements (for window-type envelopes) and labels. Can be used with any other general ledger.

2802 & 2803 SWB: SYSTEM for BUSINESS and the WORKPLACE.

A business management system written for dBase III+ with the following modules: customer information system, production system, human resources (personnel), accounting (incl A/R & A/P), inventory management. Source code is included and can be changed to suit your needs. (needs dBase III+)

2804 EASY INVENTORY for small business.

Simple yet suitably powerful inventory control and management system for the small retailer and/or manufacturer. Tracks quantities (on-hand, minimum, to order), prices, locations and suppliers. Monitors sales (time/location/product), prints re-orders and backordering info etc. (HD)

2805 & 2806 THE PRICE BOOK: item pricing/costing system.

Keeps track of the cost & sales price of many 1000s of items. Will generate quotes, invoices, purchase orders and order acknowledgments.

2807 COST-BIZ job costing program.

Straightforward single-job price estimation program. Caters for labour, materials, subcontractor and equipment costs. Cost methods: percentage or quantity-based. Can handle very large jobs and item cost tables.

2808 & 2809 JOB COST: cost & budget-based project management.

A complete system for budget and cost control/monitoring/forecasting. Handles multiple jobs, many cost centres, partially completed jobs, job profitability, cost variance etc. Menu-driven, on-screen help. (HD)

2810 THE BILLING STATEMENT.

A quick and fuss-free way for small businesses to produce standard billing statements and to track customer accounts.

2811 PC-BILL: time-based service billing system.

Menu-driven system for flat-fee/hour-based billing. Sophisticated features include summary bills for multiple account clients, ageing reports, client account error/query flagging, customizable "late account" messages with optional late-charge interest, automated monthly data backup. (HD)

**** MISCELLANEOUS ****

2812 ARJ: the latest file compression system.

Claims best compression, 32-bit CRC, multi-floppy backup, string archive search, self-extraction, many security options and full sub-directory support.

2813 DSTUFF: Archive utils.

Display internal structure of ZIP, ARC, dBase and ICE files. (needs CGA!)

2814 ESIE: Expert System Inference Engine.

This oldish simple program serves as a nice introduction to expert system. This is the old program but with three small sample knowledge bases (animal, doctor & glass).

2815 EYESIGHT: beginner's introduction to computer vision.

Experimental environment for performing various image processing functions (used in computer-based recognition) on image files. Shows how edge detection, region recognition etc. works. Comes with sample files and tutorial on computer vision. (CGA/EGA)

2816 SCHEDULE MAGIC: vehicle loading & scheduling.

Calculates and optimizes commercial vehicle schedules to minimize number of vehicles needed. Uses the concept of grid coordinates of all points to minimize distance & travel times. Ideal for multi-branch pickup/drop-offs, (school) bus routing, delivery of drugs/groceries/hardware/fuel... and customer location-based services (plumbing, appliance installation/repairs, pest control,...).

2817 VEHICLE RECORD SYSTEM vehicle management system.

Tracks fuel, maintenance, insurance, registration, tires, loans, travel, cost and more for any number of vehicles. Aids in cost, maintenance and service management. Suitable for home or business. (needs Hard Disk, AT recommended)

2818 CAPTAIN VIDEO: video-cassette management system.

For video stores, libraries or video fanatics. Tracks & organizes cassettes. Full administration system for customer, rental, maintenance, employee and inventory management. Prints many reports, labels & letters.

2819 ELECTRONIC INFORMATION SYSTEM: bulletin board.

Electronic mail and communication system for small business & BBS with virtually unlimited message facilities, high security, LAN support and easy installation procedures.

2820 FREE SPEECH BBS.

High message throughput , multi-language, "zero-maintenance" bulletin board system. Run as stand-alone, front-end or door.

2821 to 2825 RBBS-PC v.17.3.

The complete, popular public domain bulletin board system with all whistles and bells. Includes source code, is fully modularized and supports subscriptions, many protocols, CD-ROM. (updates 1163/5)

2826 VARI-TALE: branching story script writer.

Vari-tale allows one or more people to create stories with alternative chapters. Different people can add various versions or add different twists at any stage. For stand-alone or BBS systems.

***** BUSINESS SPECIFIC *****

2827 & 2828 CALL-MASTER: service business management system.

Ideal for lawn care, appliance repair/maintenance or installation, pest control and other home-calling service contract-based businesses, this menu-driven system handles all admin & accounting tasks: call management, accounts receivables, basic accounting, mailing labels, call schedules, telephone listings etc. (HD).

2829 ELECTRONIC CATALOGUE CONSTRUCTION KIT.

Replace or supplement your traditional paper catalogue with a catalogue "on floppy". Create a catalogue (use your own word processor if you like) with short descriptions an prices; add standard ordering info and let the user select the items (on his/her own PC or at your premises) after which an invoice/order is printed automatically.

2830 & 2831 SERVICE PLUS: service business admin system.

Maintenance and repair businesses can use this to organize, track & control service calls, record expenses and generate bills. Very well documented. For car/bus/taxi repair, plumbing, appliance service/repair/rental/installation,...

2832 SOFTWARE SALES TRACKER.

For software authors who distribute directly to customer, it tracks all info about your users. Can track several products simultaneously, with different versions or models. Also allows patching of your distributed .EXE files with serial number and customer name. (HD)

2833 THE WINNING BID: auctioneer assistant.

Recommended for anyone who organizes a fund-raising auction - includes 70-page DIY manual! Records sellers/donors, merchandise, lot details (number, description and minimum bid) etc. Many options to suit different types of auctions.

2834 SHEETCUT: sheet material optimization system.

Displays or prints best way to cut a given sheet of plywood, glass, plastic, metal, cloth etc to minimize the wastage. This program pays for itself (and your PC) in days! Menu-driven, can print final "work order". Needs CGA (or EGA/VGA).

***** CAD & GRAPHICS DESIGN *****

(unless specified otherwise, programs will work with any graphics card)

2835 DRAFT CHOICE fast, powerful CAD program.

For novice and expert. Pull-down menus offer object-element based control. Print to dot-matrix printer or HP plotter. Slide show option.

2836, 2837 & 2838 MEGACAD: 2-D professional CAD, 2x faster than AutoCad.