Classic Computer Magazine Archive ST-Log ISSUE 30 / APRIL 1989 / PAGE 35

STEP 1: Understanding Atari GDOS Part 1

by Maurice Molyneaux

When not writing articles for ST-LOG or otherwise working on computers, Maurice Molyneaux studies classic cel and modern computer animation, deadens his eardrums with overloud classical music and further damages his already questionable sanity by listening to recordings of Monty Python, Tom Lehrer and Laurie Anderson. Otherwise he just makes a nuisance of himself. His DELPHI username is MAURICEM.

I have to admit. I've put this topic off for as long as I thought I possibly could. Not because I didn't want to write about it, but, to be perfectly honest, because I didn't feel I understood the subject enough to do it justice. In the past few months I've become much better acquainted with GDOS, so now Step 1 returns to its roots, explaining the mysteries of the ST, as we finally discuss Atari's infamous GDOS.

What the heck is it?

GDOS is a part of GEM that was, for various reasons, not included in the ST operating system (OS). It is available now, as a small program that is run from an AUTO folder at boot-up that hooks into GEM and acts as if it were part of the OS. GDOS is an acronym for "graphics device operating system," which sounds more impressive than it really is. What GDOS does is load a set of specified graphics device drivers and fonts and allow metafiles, graphics and fonts to be output to a device at its maximum possible resolution.

Wait a second. We're already getting into too much terminology that most of you proably don't understand. Allow me to define a few key terms we'll be using.

Device drivers: These are special programs that take the information provided by a GDOS application and translate it to a form that can be used by a particular output device (like a printer or a monitor). Without such drivers, the information coming from the application would be meaningless to the output device.

GDOS application: A program which uses GDOS and its device drivers, fonts, etc.

GDOS fonts: A font is a complete selection of type in one style, and with GDOS it is also one size. Thus, if you wanted to use a Gothic font in four different point sizes, GDOS would have to load four different font files, each one a font of the appropriate size. If you wanted to print the font as well, you'd also have to load four printer fonts equivalent to the screen fonts! Currently GDOS doesn't support rescalable, vector plotted fonts, so a font doesn't look very good when rescaled. ("Vector plotted" means the symbols in the font are defined by a series of points, lines and arcs, and scaling them up and down involves nothing more than increasing or decreasing the distance between points and the size of arcs.)

Metafile: A metafile is a (supposedly) standardized file that can be used by many different GDOS applications. It is an image stored in a resolution-independent (meaning it can be used on any output device, regardless of its maximum resolution). GEM file, which stores all information about the image, such as commands on how the image was drawn (the actual commands for drawing lines, ellipses, etc., in addition to storing the font information in a similar way). Using this information, a .GEM file-compatible program should be able to recreate the image and output it to a printer and/or monitor. In this manner, you should be able to create a metafile with Easy Draw (Migraph) and use it in Timeworks Desktop Publisher ST (Timeworks). While this is what metafiles are supposed to do, sometimes they don't. Unfortunately, GEM files haven't been completely standardized, so metafiles from some programs can not be utilized by others.

Getting back to what GDOS does, the following are its main uses (please excuse a small amount of repetition):

—Loads multiple output device "drivers" to allow printers, monitors, etc., to display/output information passed down by GDOS applications. Resolutions of output devices can be up to a maximum of 32,727 × 32,727, including emulation of this resolution on a monitor screen! This is a huge number of points. For example, a laser printer with 300 dpi (dots per inch) resolution would at maximum be able to output 2,250 × 3,300 on an 8.5 × 11-inch sheet of paper, which is under &frac110; of the maximum resolution allowed under GDOS.

—Allows a program to load and utilize multiple fonts in various point sizes that can be displayed on a monitor, or output to a printer, plotter or other output device.

—Allows the application to create .GEM metafiles that are useful for moving images and data from one GDOS application to another.

While not a lot of ST programs use GDOS now, the number is increasing slowly. If you buy any amount of applications software, sooner or later you are likely to pick up a GDOS application. Programs that use GDOS include CAD-3D, DEGAS Elite, Easy Draw, Timeworks Desktop Publisher ST and WordUp.

As to why a program would use GDOS, the aforementioned portability of metafiles is one reason, and the device-independent nature of the images created with it are another. Because GDOS applications usually build images using vector-plotting routines, the images can be rescaled endlessly with no loss in detail (if you make the image too small it's possible your output device won't be able to display enough detail, and the image may appear garbled; but it's still there in its entirety).

Versions and releases

Over the past two years there have been several revisions of GDOS, all sporting a "version" number. In the very recent past, Atari has supplied revisions sporting a "release" number. Apparently the "version" ones were pre-release models, and the "release" ones are finished models. Most programs written to use an older version of GDOS will usually work with all newer versions, but the reverse is not always true (as some older GDOS versions were incomplete or buggier). If you have several programs that use GDOS and they came with different versions/releases, check to see which is the most recent one (the higher the number the newer it is) and use it. If one is a version and the other a release, use the release as that is newer than any version. (If you have GDOS Version 1.8, replace it with any other version you can, because apparently it's buggy.)

To see the version/release number, you will have to boot your ST with a GDOS in the AUTO folder. When run, GDOS will display a message like: Atari GDOS Release 1.1 Installed.

Although this is not the place to go into details on all it can do—since I'm talking about GDOS versions—I have to mention that there is a commercial replacement for GDOS available, which is so good that if you use GDOS regularly, you really should have it. It's called G + Plus and is distributed by CodeHead Software (more on it later).

Order now!

As to where you get GDOS: It is usually supplied with the application program that uses it. It is not offered as a commercial product or in any other fashion.

As to using it: There's not much to it. All you have to do is put the GDOS.PRG program into the AUTO folder of your boot drive and that's it. But, GDOS alone won't do anything. You need to provide it with information as to which drivers to load, etc. This data is provided by a file by the name of. . .

ASSIGN.SYS

The ASSIGN.SYS file is the main element required for GDOS to do anything at all. You could have ten device drivers and 50 fonts, but without one ASSIGN.SYS file, they would all be useless. ASSIGN.SYS is nothing more than an ASCII text file that specifies what GDOS is to use and where to find it (most GDOS applications will supply a sample ASSIGN.SYS file).

The ASSIGN.SYS file must be in the root directory of the boot drive. A typical one might look like this:

If you have one or more GDOS applications, you might want to take a look at its ASSIGN.SYS file right now and compare it to the one here (you can either print it or just show it on the screen (double-click on ASSIGN.SYS and select the "show" button on the alert box that appears).

Let's go through it a line at a time. All text to the right of a semicolon is treated as a comment and ignored by GDOS.

PATH = E:/FONTDRIV.SYS

This tells GDOS from which directory path to load the device drivers and fonts. The slash following the last folder name isn't necessary, but neither does it do any harm.

01p SCREEN.SYS

This is the ST's "default" screen driver, one of four built-in screen drivers built into the machine. This driver is used when a GDOS application doesn't care about the screen resolution. The "01" tells GDOS that this is device driver number 01 (the built-in drivers are numbers 01 through 04). The "p" following the "01" is a flag used to tell GDOS that the driver is "permanent" (part of the ST OS) and that it does not have to be loaded. "SCREEN.SYS" is a place holder filename, as GDOS isn't really loading a driver. However, place holder or not, it must be present.

02p SCREEN.SYS

This is the built-in low-resolution screen driver. Immediately following it are the names of the six low-resolution font files loaded by this ASSIGN.SYS file.

03p SCREEN.SYS

PATH=D:\FONTDRIV.SYS\  ; Driver & font path
;
01p SCREEN.SYS  ; Default screen driver
;
02p SCREEN.SYS  ; Low resolution screen driver
ATSS10.FNT      ; Low res screen fonts
ATSS18.FNT
ATTP10.FNT
ATTR18.FNT
;
03p SCREEN.SYS  ; Medium resolution driver
ATSS10CG.FNT    ; Medium res fonts
ATSS18CG.FNT
ATTR10CG.FNT
ATTR18CG.FNT
;
04p SCREEN.SYS  ; High resolution driver
ATSS10.FNT      ; High res fonts
ATSS18.FNT
ATTR10.FNT
ATTR18.FNT
;
21 FX80.SYS  ; Epson 9-pin dot-matrix printer
ATSS10EP.FNT ; Epson printer fonts
ATSS18EP.FNT
ATTR10EP.FNT
ATTR18EP.FNT
;
31r META.SYS  ; Metafile driver -- "resident"

The built-in medium-resolution screen driver, followed by the names of the medium-resolution font files to be loaded.

04p SCREEN.SYS

The built-in high-resolution screen driver, followed by the names of the high-resolution font files to be loaded.

21 FX80.SYS

The number 21 tells GDOS that the filename following is a printer driver. "FX80.SYS" is the filename of the device driver for an Epson-compatible 9-pin dot-matrix printer (in my case a Star SG-10). Note that there is no "p" flag after the driver number as there was on the screen drivers. It also does not have an "r" flag as does the following item. If there is no flag present, GDOS will load only that device driver when an application opens/accesses that device. This could also be followed with a list of filenames of printer fonts to be loaded.

31r META.SYS

The "31" tells GDOS that this is a metafile driver. The "r" flag tells GDOS that the driver is to be a "resident" one, and that it should load it immediately and keep it in memory at all times. "META.SYS" is the filename of the driver proper.

There are cases where you may see a list of "fonts" following the metafile driver in an ASSIGN.SYS file. These are not fonts, in fact, but rather width-tables designed to keep character spacing correct in files to be used in different GDOS applications. (When you save a file as a metafile the fonts in it are saved as vector-plotted elements, thus becoming objects, rather than remaining as GDOS fonts.) Such "metafile fonts" are so rarely used that it's unlikely you will ever see one, and if you do happen to have some, you will probably discover that discarding and stripping them from your ASSIGN.SYS file will have little or no effect on your metafiles.

The ASSIGN.SYS file looks pretty simple, all in all. In many ways it is. However, creating or editing one can be a colossal pain in the bum. Before going on to how to create/edit one of these beasties, let's go into some more details on a few of the parameters seen in the above breakdown.

The first line in the file is the pathname for loading all drivers, fonts, etc. This really should be right at the beginning of the file, so there's no chance of GDOS looking for files in the wrong path. This line always begins with PATH = followed by a pathname of up to 64 characters.

Afterwards, all that is necessary is the list of device drivers and their associated fonts. In each case, what we have is a block beginning with a line identifying the driver, followed by a list of fonts. The driver identifier consists of three parts. First is a driver identification number. A list of these follows:

01-10 Screen drivers (01-04 are the builtin ST drivers)

11-20 Plotter drivers

21-30 Printer drivers

31-40 Metafile drivers

41-50 Camera drivers

51-60 Tablet drivers

(I have heard that some ASSIGN.SYS files also have a device 00 screen driver defined (as in "00 SCREEN.SYS") that is supposedly to help prevent incompatibilities between GDOS and some programs that seem to have trouble when GDOS is installed. Apparently while helping with some older programs, using device 00 can cause problems with other programs, so it's recommended that you not use it unless you absolutely have to.)

Please note that most GDOS applications allow you to use only one driver for an output device of a given category. The only program I know of that allows you to select between multiple drivers is Migraph's OUTPRINT (provided with Easy Draw). If you put multiple drivers under one category (such as printers), most programs will load the first one they encounter and ignore any others. But if you are using a program (like OUTPRINT) that allows you to select drivers, and you have more than one output device, you will have to give each a different ID number within the range for that type. For example, if you had both an FX-80 dot-matrix printer and a SLM804 laser printer, you would have to put both in the ASSIGN.SYS file, one before the other (probably in order of most use). So you might assign the FX-80 driver the ID number 21 and the SLM804 the ID 22.

After the driver number is the "load flag" (if any). These are the "r" (resident) and "p" (permanent) flags, as well as the absence of flags, discussed before.

Following the load flag is the filename of the driver. If it is one of the system's own screen drivers (01-04), then the "filename" must be SCREEN.SYS, otherwise the name must be the name of the file as it appears on disk.

Immediately below the driver identification line is a list of any and all fonts to be used by that driver.

Creation

While most programs that use GDOS come complete with an ASSIGN.SYS file, that file may not always meet your needs or even be set up properly in the first place. If you want to install your fonts and drivers on a hard disk or on a drive other than the one set up in the default ASSIGN.SYS file, or if you want to delete or add fonts, you will have to either edit the file or create a new one.

To create or edit an ASSIGN.SYS file, you'll need only a program capable of saving an ASCII text file (no control codes). You can use EMACS, 1st Word (word processor mode off), Flash!, WordPerfect (use the TEXTOUT function). Heck even Cyber Control will do it! If you're going to edit one, load it into the editor of your choice. If you want to create one, open a blank document and get ready to start typing. (For reference you may want to make a list of fonts and drivers before starting.)

The first thing you may want to do is title your file. Type a semicolon at the start of the topmost line in your file, and then type a name. For example, if this ASSIGN.SYS file is for Easy Draw, you may want to type something like the following as the first line in your file:

; -- EASYDRAW.SYS --

This way you can view your file later and easily know what it is for (in the event that you forget or get some files confused). You may also want add comments after certain information, for reference purposes, or add lines to indicate the start of certain sections, as below:

21r FX80.SYS ; Epson 9-pin printer

or. . .

; -- LOW-RES SWISS FONTS --

Next, you need to set the path from which you'll be loading all drivers and fonts. I recommend putting these in a folder so they will be out of the way and not cluttering up often-accessed directories. If you are creating an ASSIGN.SYS file for a specific program, you may want to set a very specific path (especially if you have a hard disk). If you were creating one for DEGAS Elite and had that program on Drive D in a folder called ELITE, you might want to make a folder in that one called ELITE.SYS and put all drivers and fonts in it. Thus, your path line might look like this (remember, you must start the line with PATH =):

PATH = D : \ELITE\ELITE.SYS\

If you are working off a floppy drive, you'll have to make sure you put the disk with the fonts and drivers in the same drive every time (easy if you only have one drive). If GDOS is also booted from floppy, your best bet would be to have the AUTO folder containing GDOS on the same floppy with the folder containing your fonts and drivers. If you have two floppy drives, you could put GDOS in the boot drive (A) and set the path for loading drivers and fonts to B. But I don't recommend this as it's easy to get confused and forget to put the proper disk in at boot-up.

Furthermore, if some drivers have no load flags set, the disk containing the driver and fonts will have to be in the drive specified by PATH = whenever you access the device in question, or the driver and fonts won't load. Furthermore, contrary to popular belief, GDOS does not load fonts on boot-up, but does so only when an application opens a device and requests the fonts (even if a driver is set as a "resident" one loaded at boot-up, the fonts aren't loaded until needed). Thus, the disk with the fonts and drivers would have to be present when this happens as well. So, to avoid confusion, put GDOS, ASSIGN.SYS, and the folder containing the fonts and drivers on one floppy and keep it in Drive A; then load the program you want to use from Drive B if you want (unless it is on the same disk as GDOS, etc., in which case this is both unnecessary and undesirable).

If you have a hard disk, but your system boots from Drive A (in other words, if it reads the AUTO folder from A), then you will have to keep GDOS in the AUTO folder of the floppy disk you use for booting your system. But you can set PATH = to the hard drive with no problems.

After setting up the PATH = line, all you have to do is type in the identification line for each driver, followed by a list of fonts to be used with it. In the case of screen drivers 01-04, which are in the ST's ROM, you will have no choice but to set the "p" flag (and there's no reason why you wouldn't want to). In all other cases you will have to determine whether you want the driver to be loaded at boot-up and stay resident (used by setting the "r" flag) or to load the driver only when the device is accessed (by setting no flags). The latter is probably the best way to go with printer and screen drivers. In this way all that GDOS loads at boot-up is the name of the driver and not the driver itself. So you don't lose RAM to the driver until it is needed and then it will be loaded.

As to listing the fonts under a device driver, apparently some GDOS applications have trouble finding fonts if you do not list the fonts in ascending order by font ID. (For information on finding out a font's ID number, see the end of this article.) All fonts of the same type have the same ID number, regardless of size. For example, all Helvetica fonts have the same ID number, regardless of whether they are 6 point or 30 point in size.

I have seen some users recommend creating a single all-purpose ASSIGN.SYS file for use with any and all programs you may have that use GDOS. I do not recommend this method, because creating one file to load all the necessary device drivers and fonts for several programs could be large, chew up a lot of memory when all fonts are loaded and run into potential problems with different font files having identical identification numbers and point sizes. (This is because GDOS ignores font names and your filenames for them; it goes by the font's internal ID number and point size.) It's unlikely you will run into this problem with an ASSIGN.SYS, which is for a single application, but you are more likely to run into it if you try to create an all-in-one file. (How to deal with multiple ASSIGN.SYS files will be discussed in the next issue.)

When you complete your ASSIGN.SYS file, you will want to save it (make sure it's ASCII output, unformatted—no tabs, control characters, etc.) to the root directory of the floppy disk or hard-drive partition that you will use as your boot directory. Once you've done this you'll have to reboot your system to see if your new assignments will work under GDOS. If not, you'll have to re-examine your ASSIGN.SYS file. Make sure everything is correct, and make sure your drivers and fonts are in the proper directory path. (It's easy to make a typo in either the ASSIGN.SYS file or in naming a folder or file.)

Fonts

The way GDOS handles fonts is a subject about which there is probably more confusion than almost any other topic. Let's try to set the record straight. First and foremost, as I mentioned earlier, GDOS does not load the fonts defined in the ASSIGN.SYS file at boot-up, even if the driver they are installed under is a "resident" one. In fact, it seems GDOS flat out cannot load the fonts at boot-up, period! Only at such time as a GDOS application opens the device in question will GDOS attempt to load the fonts specified for it. If an error occurs when GDOS attempts to load one font (such as if it runs out of memory, or if it cannot find the font file), it will abort that load attempt and move on to the next font in the list.

Also, contrary to popular belief, GDOS fonts are unloaded when you exit an application, and any memory used by the fonts is then available for use by other programs.

GDOS fonts can be rescaled by an application, but because the fonts are not vector plotted, they don't usually rescale well and tend to come out looking bad.

Furthermore, neither GDOS nor the fonts it loads determine line spacing. The application program using the fonts does this. Sometimes, according to internal rules of its own, the system will rescale fonts and return them as valid point sizes to a running application. This rescaling is most often done to create large point sizes from smaller point sizes. For instance, the system may generate a 48-point font from a 24-point font, even though no 48-point font file exists. However, this "automatic scaling" is of limited use. The scaling method is actually a simple pixel-doubling algorithm that often gives the scaled font a blocky, "stair-stepped" appearance. If you can use actual fonts for the larger point sizes, the appearance will be much cleaner.

The filename of a font means nothing at all to GDOS. It reads size information and font ID numbers from values internal to the font file. The filenames are for the reference of the user only. About a year ago (as of this writing) Atari established a format for naming GDOS font files. A typical font filename might be ATTR06LB.FNT.

The first two characters identify the creator of the font. In this case, AT for Atari. (Atari suggests that all fonts for the ST begin with these two letters; but no one pays attention to that, and most users and companies will use something like NC for fonts originating at Neocept or MG for fonts originating at Migraph.)

The third and fourth characters identify the font style. In our example, it is TR, Atari's code for Times Roman. (Atari also uses SS for Sans Serif/Atari Swiss and TP for Typewriter style.) Other companies may have their own standards, in which case, the use of the first two characters to identify the origin of the font can be handy, for another company might use the same two letters for style that another does for a different typestyle.

The fifth and sixth characters contain the point size of the font. In our example, 06 stands for a 6-point font size. This number should ideally represent the size of the font as it appears on the output device, not the height of the font in dots, pixels, etc. As with the 06, use a zero to precede all single-digit point size values.

The seventh and eighth characters identify the output device for which the font is intended. In our example, LB identifies the font as for use with an Atari SMM804 dot-matrix printer. Other Atari accepted identifiers for devices include: CG for color graphics, EP for Epson compatible 9-pin dot-matrix printer, SP for Star NB-15 24-pin dot-matrix printer, LS for standard laser printer and MF for metafile.

The three-letter filename extender is always .FNT to identify the file as a font.

If you create your own fonts or obtain some whose names do not adhere to this standard, it may be to your benefit to name them along these lines in order to avoid confusion. If you are creating or importing fonts with style and device identifiers not already established, you may want to create your own standard list, such as GT for a Gothic font or CI for a Cannon Inkjet printer.

Before this standard was implemented, there was another font naming system employed. Since you may want to rename fonts using this old convention, I will describe it here. The first three characters of the filename were used to identify either the creator of the font (such as ATA for Atari) or the device it was intended for (such as EPS for an Epson 9-pin printer). The fourth character identified the resolution (such as using H for high-resolution). The fifth and sixth characters identified the typeface. (Atari's identifiers, such as TR for Times Roman, do not appear to have changed). The seventh and eighth characters were the point size. The extender, as above, was .FNT.

Quite a few GDOS fonts are floating around in the public domain. Some are commercially available. Furthermore, you can create your own fonts if you have the appropriate software (you can use Neocept's Fontz! or Brad Christie's excellent public-domain GEMFED (GEM Font Editor) for this purpose, as either will allow you to create both screen and printer fonts. DEGAS Elite's font editing program can also be used, but only for screen fonts, and those can only be of limited detail (converting them to the correct format is a bit of a pain too).

When creating your own font, you must give the font a unique ID number. Make sure it isn't one already used by another font. (See addenda.) The ID can be any number from 0 to 32,767, though some GDOS applications seem unable to use fonts with an ID number over 255.

Now it's time to say goodbye

Sheesh! At first I thought this article was going to run short! I underestimated. I'm not finished yet, so we'll have to conclude this discussion next issue, when we'll talk about how to keep more than one ASSIGN.SYS file and how to load the correct one for a given application, in addition to covering the problems spots of GDOS and giving a few examples of using GDOS in an application. Also, we'll discuss G + Plus, the GDOS replacement and why you might find it worth buying. Until then, au revoir!

Addenda: The author would like to thank Charles F. Johnson for his help in researching and editing this article. He also acknowledges Douglas Wheeler's excellent text Everything You Ever Wanted to Know About GDOS (and More), which provided invaluable information and references.

In response to a question I asked him concerning how to find a GDOS font's ID number, Charles F. Johnson told me that the only way he knew of was to use a program like Fontz! or GEMDEF to load the font and check it. He then told me that he could write a stand-alone utility to do that job; one that would also allow the user to change a font's ID number (in the event that two fonts had duplicate IDs). We discussed it; then he went off to write it. True to his word (and less than 12 hours later), it was finished and in my hands. You will find this useful utility on page 32 of this month's issue.