💾 Archived View for mirrors.apple2.org.za › archive › apple.cabi.net › System › GSOS.P8.Anatomy › CO… captured on 2024-02-05 at 14:49:04.

View Raw

More Information

⬅️ Previous capture (2023-01-29)

-=-=-=-=-=-=-

ClearBackup
$200B

GS/OS ProDOS 8
Purpose:

To clear the backup-needed bit in the access code for the file.
Under ProDOS 8, use the SET FILE - INFO command instead.
Parameter table:

GS/OS Input
or

bet Symbolic Name Result
+0to +1 pcount I
+2to +5 pathname I

Descrtptions of parameters:

Description

Number of parameters (1)
Pointer to the pathname string

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 1; the maximum is 1.

pathname A pointer to a class 1 GS/OS string describing the current pathname
of the file to be used. If the pathname specified is not preceded by a
separator (/ or :), the operating system appends the name to the
default prefix (the 0/ prefix) to create a full pathname.

Common error codes:

$40 The pathname contains invalid characters or a full pathname was not
specified (and no default prefix has been set up). Verify that the
filenames and directory names specified in the pathname adhere to
the naming rules described in Chapter 2 and, if a partial pathname
was specified, that a default prefix has been set up.

$44 A directory in the pathname was not found. Solution: Double-check
the spelling of the pathname, insert the disk containing the correct
directory, or change the default prefix.

$45 The volume directory was not found.
$46 The file was not found.
Other possible error codes are $07, $4A, $52, $58.

Command Descriptions 97

Programming example:

A file-backup program capable of doing incremental backups acts on only those files
that have been modified since the last backup operation. The program checks the state
of a file's backup bit to determine whether it needs to be backed up; it does if the bit
is set to 1. (GS/OS and ProDOS 8 automatically set the bit after any write operation or
any operation that changes the directory entry.) Once the backup copy has been made,
the program should clear the backup bit by calling ClearBackup.
Here is the trivial piece of code for doing this:

_ClearBackup CBB_Parms
RTS

CBB_Parms ANOP
DC I2'1' The number of parameters
DC I4'Pathname' Pointer to pathname

Pathname GSString '/nISK/NEW.FILE' The file to act on

98 GS/OS and ProDOS 8 Commands

Close
$2014

GS/OS ProDOS 8
Purpose:

To close an open file. This causes the operating system to write the contents of the
data portion of the file's I/O buffer to disk (if necessary) and to update the file's
directory entry. Once it does this, the operating system releases the memory used for
the file's I/O buffer to the system and prevents fUrther access to the file (until it is
reopened).

Parameter table:

ProDOS 8 Input

or

bet Symbolic Name Result Description
+0 num~parms I Number of parameters (1)
+ 1 ref num I Reference number for the file

GS/oS Input
or

bet Symbolic Name Result Description
+ 0 to + 1 pcount I Number of parameters (1)
+ 2 to + 3 ref~ num I Reference number for the file

Descriptions of parameters:

num - parms The number of parameters in the ProDOS 8 parameter table (always 1).

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 1; the maximum is 1.

ref~ num The reference number the operating system assigned to the file

when it was first opened.

If you set refnum to 0, all open files at or above the system file
level are closed. To set the value of the file level under ProDOS 8,
store the value at lLEVEL ($BF94). Under GS/OS, use the SetLevel
command.

Command Descriptions 99

Common error codes:

$2B The disk is write-protected.

$43 The file reference number is invalid. You might be using a reference
number for a file that you've already closed.

Other possible error codes are $04, $07, $27, $5A.
Programming example:

To close all open files at or above level 1, use SetLevel to set the level and use the
Close command with ref~ num set to 0. Here's how to do it if GS/OS is active:

_SetLevel SL_Parms Set system file level to 1
_Close Cl_Parms

BCS
RTS

SL_Parms DC
DC

Cl_Parms DC

DC

Error ;Branch if error occurred
II']'

II']' New file level

II',' Parameter count

lID' reference number = 0 (close all files)

If ProDOS 8 is active, set the system file level by storing the new value at LEVEL
($BF94).

100 GS/OS and ProDOS 8 Commands

Create
$2001

GS/OS ProDOS 8
Purpose:

To create a new disk file. The operating system does this by placing an entry for the
file in the specified directory. You must create every new file, except the volume
directory file, with this command. (GS/OS automatically creates the volume directory
when you use the Format or EraseDisk command. ProDOS 8 formatting programs
create the volume directory by using the WRITE - BLOCK command to write an
image of the four volume directory blocks to disk.)
Parameter table:

ProDOS 8 Input

or

bet Symbolic Name Result
+0 num~parms I
+1 to +2 pathname I
+3 access I
+4 file-type I
+5to +6 auxtype I
+7 storagetype I
+8to +9 createdate I
+10 to +11 createtime I

GS/OS Input
or

bet Symbolic Name Result
+0to +1 pcount I
+2to +5 pathname I
+ 6 to + 7 access I
+8to +9 file-type I

Description

Number of parameters (7)
Pointer to the pathname string
Access code
File type code
Auxiliary type code
Storage type code
Creation date
Creation time

Description

Number of parameters (7)
Pointer to the pathname string
Access code
File type code

Command Descriptions 101

+ 10 to +13 auxtype I Auxiliary type code
+ 14 to + 15 storage - type I Storage type code
+ 16 to + 19 eof I Anticipated size of data fork
+ 20 to + 23 resource - eof I Anticipated size of resource fork

Descriptions of parameters:

num - parms The number of parameters in the ProDOS 8 parameter table (always 7).

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 1; the maximum is 7.

pathname A pointer to a class 0 (ProDOS 8) or class 1 (GS/OS) string describ-
ing the pathname of the file to be created. If the pathname specified
is not preceded by a separator (/ for ProDOS 8; / or: for GS/OS), the
operating system appends the name to the default prefix (in GS/OS,
this is the 0/ prefix) to create a full pathname.

access This field contains several 1-bit codes defining the access attributes
of the file to be created. (The other bits must set to zero.) See Figure
2-10 for a description of these bits. The backup-needed bit of the
access code is forced to 1 by this command.

file - type A code indicating the type of data the file holds. See Table 2-5 for a

description of the file type codes for the ProDOS file system.
aux - type This is the auxiliary type code. The meaning of the code depends on

the file type code and on the program that created the file in the first
place. For SYS, BIN, BAS, and VAR files, it is a default loading
address; for TXT files, it is a record length; for SRC files, it is an
APW language type code.

storage - type This field indicates how the operating system is to store the file on

the disk:
$00-$03 standard tree-structured data file
$05 extended file

$0D linked-list directory file

If you specifi' a code of $00, $02, or $03, ProDOS 8 or GS/OS
converts it to a code of $01 and returns that value in this field.
Note that you cannot change the storage - type of a file once it has
been created.

create - date This field contains the date (year, month, day) that ProDOS 8 will

save as the file's creation date. Figure 8-1 in Chapter 8 shows the

102 GS/OS and ProDOS 8 Commands

format of these bytes. If these bytes are both zero, the current date
will be used.

create - time This field contains the time (hour, minute) that ProDOS 8 will save

as the file's creation time. Figure 8-1 in Chapter 8 shows the format of
these bytes. If these bytes are both zero, the current time will be used.

eof If the file being created is a standard file (storage - type $01), this
field indicates the anticipated size of the file in bytes. GS/OS preal-
locates enough blocks on disk to hold a file of this size.
If the file is an extended file (storage - type = $05), this field
indicates the anticipated size of the data fork, in bytes. GS/OS
preallocates enough blocks on disk to hold a data fork of this size.
If the file is a subdirectory file (storage - type = $0D), this field indi-
cates the anticipated number of entries in the subdirectory. GS/OS
preallocates enough blocks on disk to hold a subdirectory of this size.
resource - eof If the file being created is an extended file (storage - type = $05), this

field indicates the anticipated size of the resource fork in bytes. GS/OS
preallocates enough blocks on disk to hold a resource fork of this size.
Common error codes:

$2B The disk is write-protected.

$40 The pathname contains invalid characters or a full pathname was not
specified (and no default prefix has been set up). Verify that the
filenames and directory names specified in the pathname adhere to
the naming rules described in Chapter 2 and, if a partial pathname
was specified, that a default prefix has been set up.

$44 A directory in the pathname was not found. Solution: Double-check
the spelling of the pathname, insert the disk containing the correct
directory, or change the default prefix.

$45 The volume directory was not found.

$47 The filename specified already exists. You can't have two files with
the same name in the same subdirectory.

$48 The disk is full.

$49 The volume directory is full. Only 51 files can be stored in the
volume directory.

$4B Invalid storage type code. Solution: Set the storage type code to $0D
for directory files, to $01 for standard data files, or (for GS/OS only)
to $05 for extended files.

Command Descriptions 103

Other possible error codes are $04, $07, $10, $27, $52, $53, $58.
Programming example:

Here is a short GS/OS subroutine you can use to create a standard textfile; the
filename for the textfile is JUPITER, and the full pathname is :PLANETS:JUPITER.

_Create Cr_Parms
BCS Error
RTS

Cr_Parms DC II'S'

DC I4'PathName'

;Branch if error occurred
Only using 5 parameters

DC
DC

DC II'$E3' ;standard access code (unlocked)
DC II'$04' file type = 4 (textfile)
I4'0' auxiliary type (0 = sequential)
II'$0l' ;storage type = I (standard file)

PathName GSString ':PLANETS:JUPITER' ;Pathname (in ASCII)

Note that when you create a file under GS/OS, the date and time of creation is always
set to the current date and time. (Under ProDOS 8 you can specifi' any time you want
in the parameter table for CREATE.) To set a different date and time of creation, use
the SetFileInfo command.

104 GS/OS and Pro DOS 8 Commands

DControl
$202E
GS/OS
Purpose:

To send control commands to a GS/OS device.
There is no equivalent ProDOS 8 command.
Parameter table:

GS/OS Input
or

ProDOS 8

Cllrset Symbolic Name Result
+0to +1 pcount I
+2to +3 devnum I
+4 to +5 controlcode I
+6 to +9 controlh.st I
+ 10 to +13 request-count I
+ 14 to + 17 transfer-count R

Description

Number of parameters (5)
Device reference number
Control request code
Pointer to control list
Size of the control list
Number of bytes transferred

Descriptions of parameters:

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 5; the maximum is 5.

dev - num The device's reference number.

control - code A code indicating what control operation is to be performed:

$0000 reset device
$0001 format device medium
$0002 eject device medium
$0003 set configuration parameters
$0004 set wait/no-wait mode
$0005 set format options
$0006 assign partition owner
$0007 arm signal
$0008 disarm signal
$0009 set partition map
$000A-$7FFF [reserved]

$8000-$FFFF device-specific operations

Command Descriptions 105

control - list

This is a pointer to a buffer that contains any supplementary data
that GS/OS may need to perform the control operation.

request - count The size of the control list buffer.

transfer - count The number of bytes in the control list buffer that were transferred

to the device is returned here.

Common error codes:

$11 The device reference number is invalid.
$53 The parameter is out of range.
Another possible error code is $07.
Programming example:

The only control command you're ever likely to need for a disk device is the eject
command. Here is a GS/OS subroutine for ejecting the disk medium from a drive:

_DControl DC_Parms
RTS

DC_Parms ANOP
DC II'S'
DC III'
DC II'I'

DC I4'Ctrl List'
DC I4'0'
DS 4

The number of parameters
Device number

;Control code (I = eject)

4 Nothing in control list

Ctrl _List DS

You can determine if the disk medium is removable by doing a DInfo call and
examining bit 2 of the characteristics word; if the bit is 1, the medium is removable.
You will use several device-specific control commands to communicate with the
Console Driver (see chapter 9). For a detailed discussion of the standard control
commands, see GS/OS Reference, Volume 2.

106 GS/OS and ProDOS 8 Commands

none

GS/OS ProDOS 8
Purpose:

To remove the address of an interrnpt-handling subroutine from the internal ProDOS
8 interrupt vector table.

Under GS/OS, use the UnbindInt command instead.
Parameter table:

ProDOS 8

bet Symbolic Name

+0 numparms
+1 int~num

Input
or

Result Description

Descriptions of parameters:

I Number of parameters (1)
I Interrupt handler reference number

num - parms The number of parameters in the ProDOS 8 parameter table (always 1).
int - num The identification number for the interrupt handler. ProDOS 8 assigned

this number when the handler was installed using the ALLOC -
INTERRUPT command.

Important: Do not remove an interrupt-handling subroutine until your application has
first told the source of the interrupts to stop generating interrupts. If you remove the
subroutine first, the system will crash the next time an interrupt occurs.
Common error codes:

$53 The intnum parameter is not valid. Use the number ALLOC
INTERRUPT returned when you installed the interrupt handler.

Another possible error code is $04.
Programming example:

Here's how to remove the interrupt vector table entry for an interrupt-handling
subroutine assigned the code number 1 when it was installed using the ALLOC -
INTERRUPT command:

Command Descriptions 107

JSR MLI

DFB $41 ;DEALLOC_INTERRUPT
DA PARMTBL ;Address of parameter table
BCS ERROR Branch if error occurred
RTS

PARMTBL DFB 1 ;The # of parameters
DFB 1 Interrupt code number

108 GS/OS and Pro DOS 8 Commands

Destroy

$2002 _______________________

GS/OS ProDOS 8
Purpose:

To remove a file from disk. When you destroy a file, the operating system frees up all
the disk blocks the file uses and zeros the length byte in the file's directory entry. You
can destroy any file (except a volume directory file) whose destroy-enabled access
code bit is set to 1; subdirectory files must be empty before you can destroy them,
however.

Parameter table:

ProDOS 8 Input

or

C))rset Symbolic Name Result
+0 numparms I
+1 to +2 pathname I

Description

Number of parameters (1)
Pointer to the pathname string

GS/OS Input
or

Cllrset Symbolic Name Result

+0 to + 1 pcount I
+2to +5 pathname I

Descriptions of parameters:

Description

Number of parameters (1)
Pointer to the pathname string

num - parms The number of parameters in the ProDOS 8 parameter table (always 1).
pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 1; the maximum is 1.

pathname A pointer to a class 0 (ProDOS 8) or class 1 (GS/OS) string describ-
ing the pathname of the file to be destroyed. If the pathname
specified is not preceded by a separator (/ for ProDOS 8; / or : for
GS/OS), the operating system appends the name to the default prefix
(in GS/OS, this is the 0/ prefix) to create a full pathname.
If the pathname describes an extended file (storagetype = $05),
both forks are destroyed.

Command Descriptions 109

Common error codes:

$2B The disk is write-protected.

$40 The pathname contains invalid characters, or a full pathname was not
specified (and no default prefix has been set up). Verify that the
filenames and directory names specified in the pathname adhere to
the naming rnles described in Chapter 2 and, if a partial pathname
was specified, that a default prefix has been set up.

$44 A directory in the pathname was not found. Solution: Double-check
the spelling of the pathname, insert the disk containing the correct
directory, or change the default prefix.

$45 The volume directory was not found. Solution: Double-check the
spelling of the volume directory name, insert the correct disk, or
change the default prefix.

$46 The file was not found.

$4E The file cannot be accessed. Solution: Set the destroy-enabled bit of
the access code to 1 using SETFILEINFO.

$50 The file is open. You can destroy closed files only.
Other possible error codes are $04, $07, $10, $27, $4A, $4B, $52, $58.
Programming example:

Consider a situation in which the 0/prefix is /DEMOS/GAMES. To destroy a file that
has a full pathname of /DEMOS/GAMES/TRIVIA.BLITZ, you could use the follow-
ing GS/OS subroutine.

_Destroy DY_Parms

BCS Error
RTS

DY_Parms DC II']'

DC I4'PathName'

;Branch if error occurred

1 parameter

PathName GSString 'TRIVIA.BLITZ' ;Pathname (in ASCII)

Notice that it was not necessary to specify the fUll pathname in this program. GS/OS
automatically appends the name specified to the 01 prefix to create the fUll pathname
that it acts on.

The ProDOS file system does several things when it destroys a file. First, it zeros the
name - length byte in the file's directory entry. (This is the first byte in the entry.)
Then it frees up the disk blocks the file uses by setting the appropriate bits in the
volume bit map. Finally, it reads in the file's index blocks from disk, reverses the two
256-byte halves of each block (meaning the low-order block number appears in the

110 GS/OS and Pro DOS 8 Commands

upper half and the high-order block number appears in the lower half), and then
writes the blocks back to disk. (Versions of ProDOS 8 numbered 1.2 or lower actually
zeroed the index blocks, making it impossible for a utility program to recover a
deleted file.)

Note that you cannot destroy an extended file (storage ~ type = $05) with the
ProDOS 8 version of the DESTROY command. It can be destroyed only with the
GS/OS Destroy command.

Command Descriptions 111

none

GS/OS ProDOS 8
Purpose:

To determine information about a device connected to the system.
There is no equivalent ProDOS 8 command.
Parameter table:

GS/OS Input
or

Cl)'set Symbolic Name Result
+0to +1 pcount I
+2 to +3 devnum I
+4to +7 devname R
+ 8 to + 9 characteristics R
+ 10 to +13 totalblocks R
+14 to +15 slotnum R
+16 to +17 umtnum R
+ 18 to + 19 version R
+20 to +21 deviceIDnum R
+22 to +23 headh.nk R
+24 to +25 forwardhnk R

Descriptions of parameters:

Description

Number of parameters (10)
Device reference number
Pointer to the device name string
Device characteristics
Capacity of volume, in blocks
Slot number for device
Unit number for device
Device driver version number
Device ID number
First related device
Next related device

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 2; the maximum is 10.

dev - num The device's reference number.

dev - name A pointer to a class 1 output buffer in which GS/OS returns the

device name. A device name may be up to 31 characters long, so set
the buffer size word in the class 1 output buffer to 35 bytes.

characteristics The bits in this word reflect the characteristics of the device:

112 GS/OS and ProDOS 8 Commands

bit 15 1 = device is a RAMdisk or ROMdisk
bit 14 1 = device driver was generated
bit 13 [reserved]
bit II 1 = device is busy
bit]] [reserved]
bit 10 [reserved]
bit 9 device speed (high)
bit 8 device speed (low)
bit 7 1 = device is a block device
bit 6 1 = write is allowed
bit 5 1 = read is allowed
bit 4 [reserved]

bit 3 1 = format is allowed
bit I 1 = device contains removable media
bit] [reserved]
bit 0 [reserved]

Bits 9 and 8, the device speed bits, indicate the speed at which the
device can operate:

00 1 MHz device
01 1.6 MHz device
10 >1.6 MHz device
11 not speed dependent

total-blocks For a block device, the capacity of the volume in blocks. For a
character device, this field is zero.

slot - num The slot number of the firmware driver for the device.
unit - num The SmartPort unit number for the device.
version The version number of the device driver:

bits 15-II major version number
bits 11- primary minor version number
bits 7-4 secondary minor version number
bits 3-0 version type:

$0 = released final

$A = alpha
$B = beta

$E = experimental
$F = unreleased final

For example, version 2.12 beta would be represented by the version
word $212B.

device - ID - num This is a code number that identifies the device type:

$0000
$0001
$0002
$0003
$0004

5.25-inch disk drive
ProFile hard disk (5Mb)
ProFile hard disk (10Mb)
3.5-inch disk drive
generic SCSI device

Command Descriptions 113

$0005 SCSI hard disk
$0006 SCSI tape drive
$0007 SCSI CD-ROM drive
$0008 SCSI printer
$0009 serial modem
$000A console
$000B serial printer
$000C serial LaserWriter
$000D AppleTalk LaserWriter
$000E RAM Disk
$000F ROM Disk
$0010 file server
$0011 IBX telephone
$0012 Apple desktop bus device
$0013 generic hard disk drive
$0014 generic floppy disk drive
$0015 generic tape drive
$0016 generic character device
$0017 MFM-style floppy disk drive
$0018 generic AppleTalk network device
$0019 SCSI sequential access device
$001A SCSI scanner
$001B non-SCSI scanner
$001C SCSI LaserWriter
$001D AppleTalk main driver
$001E AppleTalk file service driver
$001F AppleTalk RPM driver

head - link This is a device number that is the first entry in a linked list of

device numbers. The devices in the list are related in that they each
have a distinct partition on the same disk medium. If head - link is
zero, there is no link.

forward - link This is a device number that is the next entry in a linked list of

device numbers. The devices in the list are related in that they each
have a distinct partition on the same disk medium. If forward - link
is zero, there is no link.

Common error codes:

$11 Invalid device reference number.
Another possible error code is $07.
Programming example:

You can use DInfo to determine the names of all the devices connected to the system.
To do this, make a series of calls to DInfo, incrementing dev - num by 1 after each
call, until DInfo returns an error code of $11 ("invalid device reference number"). The
first dev - num you pass to DInfo should be 1 since this is the device number GS/OS
assigns to the first device it finds when it boots up.

114 GS/OS and ProDOS 8 Commands

Keep in mind, however, that the number of active devices in the system may change
during program execution. For example, server volumes may come on line or go off
line at almost any time. As a result, if you're designing a program which has a "list
volumes" command, you should form the list each time the user requests it. It is not
good enough to form the list once at the beginning of the program.
Here is a GS/OS code fragment that shows how you might do this in an application:

LDA #1
STA DevNum

Get_Name _DInfo DI_Parms
BCS Exit

LDA DevName ;Get length word
XBA ;(Put low-order byte at
STA DevName beginning of string)
PushPtr DevName+1 (point to length byte)
_DrawString Display name in window
JSR CRLF ;(CRLF moves cursor to next line)
BRA Get_Name

Exit RTS
DI_Parms ANOP
DC II' 10' ;The number of parameters

DevNum DC II' 1' ;Device number
DC I4'DevSpace' ;Pointer to device name buffer

DevSpace DC II'35' Size of buffer

DevName

DS 33 Name stored here

Call this subroutine after positioning the cursor with the Move or - MoveTo macro.
- DrawString is the macro for a QuickDraw II tool set fUnction that displays a
Pascal-like string (one preceded by a length byte) in the current window.

Command Descriptions 115

none

GS/OS ProDOS 8
Purpose:

To perform low-level read operations on a GS/OS device.
Under ProDOS 8, use the READ BLOCK command instead.
Parameter table:

GS/OS Input
or

O[Cset Symbolic Name Result
+0to +1 pcount I
+2 to +3 devnum I
+4 to +7 buffer R
+8to +11 requestcount I
+ 12 to + 15 startingblock I
+16 to +17 blocksize I
+ 18 to +21 transfrr~count R

Descriptions of parameters:

Description

Number of parameters (6)
Device reference number
Data buffer

Number of bytes to read
First block to read from
Number of bytes per block
Number of bytes actually read

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 6; the maximum is 6.

dev - num The device's reference number.

buffer A pointer to a class 0 output buffer into which the data is to be read.
request - count The number of bytes to read.

starting - block If the device is a block device, this is the number of the block to start

reading from. For character devices, this field is not used.
block size The size of a block in bytes.

transfer - count The number of bytes actually read from the device.
Common error codes:

$11 The device reference number is invalid.
$53 Parameter out of range.

116 GS/OS and Pro DOS 8 Commands

Another possible error code is $07.
Programming example:

For block-structured devices, DRead is most often used to read the contents of data
blocks on the disk volume. Here is a GS/OS subroutine you could use to read blocks 6
and 7 on a disk volume containing 512-byte blocks:

_DRead DR_Parms
RTS

DR_Parms DC II '6' ;The number of parameters
DC II'I' ;Device number
DC I4'Buffer'

DC I4' 1024' Read 1024 bytes

DC I4'100'
DC II'512'
DS 4

Buffer DS 1024

starting with block 100

512 bytes per block
;transfer_count result

Note that after DRead reads the 512 bytes in block 100, it proceeds to the next
higher-numbered block, 101, to read the next 512 bytes.

Command Descriptions 117

none

ProDOS 8

GS/OS
Purpose:

To determine the status of a GS/OS device.
There is no equivalent ProDOS 8 command.
Parameter table:

GS/OS Input
or

bet Symbolic Name Result
+0to +1 pcount I
+2to +3 devnum I
+4to +5 statuscode I
+6to +9 statush.st R
+ 10 to + 13 requestcount I
+ 14 to + 17 transfercount R

Descriptions of parameters:

Description

Number of parameters (5)
Device reference number
Control request code
Pointer to control list
Size of the control list
Number of bytes transferred

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 5; the maximum is 5.

dev - num The device's reference number.
status - code A code indicating what status request is to be made:

$0000 get device status
$0001 get configuration parameters
$0002 get wait/no-wait status
$0003 get format options
$0004 get partition status
$0005-$7FFF [reserved]

$8000-$FFFF device-specific status calls

status list This is a pointer to a class 0 buffer that holds any status data that the

status call may return.

request - count The number of status bytes to be returned in the status list.
transfer - count The actual number of bytes returned in the status list is returned here.

118 GS/OS and ProDOS 8 Commands

error codes:

I The device reference number is invalid.
Parameter out of range.
.1 possible error code is $07.

application should rarely have to use the DStatus command unless it is commu-
with the Console Driver (see Chapter 9). For a discussion of the standard
status commands, see GS/OS Reference Volume 2.

Command Descriptions 119

none

GS/OS ProDOS 8
Purpose:

To perform low-level write operations on a GS/OS device.
Under ProDOS 8, use the WRITE - BLOCK command instead.
Parameter table:

GS/OS Input
or

O)l'set Symbolic Name Result
+0to +1 pcount I
+2 to +3 devnum I
+4to +7 buffer I
+8 to + 11 request-count I
+ 12 to + 15 startingblock I
+ 16 to +17 blocksize I
+ 18 to +21 transfercount R

Descriptions of parameters:

Description

Number of parameters (6)
Device reference number
Data buffer

Number of bytes to write
First block to write to
Number of bytes per block
Number of bytes actually written

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 6; the maximum is 6.

dev - num
buffer

The device's reference number.

A pointer to a buffer in which the data to be written is stored.

requestcount The number of bytes to write.

starting - block
block size

If the device is a block device, this is the number of the block to start
writing to. For character devices, this field is not used.
The size of a block, in bytes.

transfer count The number of bytes actually written to the device.
Common error codes:

$11 The device reference number is invalid.
$53 Parameter out of range.

120 GS/OS and ProDOS 8 Commands

Another possible error code is $07.
Comments:

This command is for low-level transfer of data to a character or block device. The file
system on the block device is not relevant.

Command Descriptions 121

none

GS/OS ProDOS 8
Purpose:

To perform all disk block write operations that have not been made because a
write-deferral session is in progress. EndSession also terminates the current write-
deferral session.

There is no equivalent ProDOS 8 command.
Parameter table:

GS/OS Input
or

Offset Symbolic Name Result
+0to +1 pcount I
Descriptions of parameters:

Description

Number of parameters (0)

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 0; the maximum is 0.

Common error codes:
[none]

Comments:

You must call EndSession if your application began a disk-deferral session by calling
BeginSession and wants to close the session.

122 GS/OS and ProDOS 8 Commands

EraseDisk
$2025

GS/OS ProDOS 8
Purpose:

To write to disk the boot record, volume bit map, and empty root directory for the
specified file system. Unlike Format, EraseDisk does not initialize the disk first, so
you can use it only with previously initialized disks.

There is no equivalent ProDOS 8 command. Under ProDOS 8, you must use
WRITE - BLOCK to perform the required disk-write operations needed to erase a
disk.

Parameter table:

GS/OS Input
or

Offset Symbolic Name Result
+0to +1 pcount I
+2to +5 devname I
+6to +9 volname I
+10 to +11 Msysid R
+12 to +13 requestedfsys I

Description

Number of parameters (4)
Pointer to the device name string
Pointer to the volume name string
ID code for selected file system
ID code for requested file system

Descriptions of parameters:

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 3; the maximum is 4.

dev - name A pointer to a class 1 device name string.
vol - name A pointer to a class 1 disk volume name string. The name must be

preceded by a slash.

file - sys - id If the requested - fsys field is zero, GS/OS displays a dialog box that

lets the user pick the file system to be used on the disk volume. On
return, the file - sys - id field indicates which file system was selected:

$01 = ProDOS/SOS
$02 = DOS 3.3
$03 = DOS 3.2/3.1
$04 = Apple II Pascal
$05 = Macintosh MFS

Command Descriptions 123

$06 = Macintosh HFS
$07 = Macintosh XL (LISA)
$08 = Apple CP/M
$09 = [never used]
$0A = MS-DOS

$0B = High Sierra (CD-ROM)
$0C = 1509660 (CD-ROM)

If GS/OS returns a zero in this field, the user canceled the operation.
requested - fsys This field contains the ID code for the file system to be written to

the disk volume. (The codes are the same as those described for
file - sys - id.) If the field is zero, GS/OS displays a dialog box that
lets the user pick his or her own file system; GS/OS returns the
selected ID in the file - sys - id field.
Common error codes:

$10 The specified device name does not exist.
$40 The volume name specified contains invalid characters or does not
start with a valid separator (1 or:).

$5D The specified file system is not supported.
Other possible error codes are $07, $11, $27.
Programming example:

Suppose you want to erase a disk whose device name is .APPLEDISK3.5A and give it
the name :BLANK. Here is the GS/OS subroutine to use:

EraseIt _EraseDisk ED_Parms
RTS

ED_Parms ANOP
DC II '4'

DC I4'DevName'
DC I4'VolName'
DS I

DC II'O'

The number of parameters
;Pointer to device name
Pointer to volume name
file_sys_id

0 = let user pick

DevName GSString '.APPLEDISK3.5A'
'i-~w~ ~c+,'.,~ '.Dl

124 GS/OS and ProDOS 8 CommandsExpandPath
$200E

GS/OS ProDOS 8
Purpose:

To convert a filename, partial pathname, or full pathname into a full pathname with
colon separators.

There is no equivalent ProDOS 8 command.
Parameter table:

GS/oS Input
or

C(rset Symbolic Name Result
+Oto +1 pcount I
+2to +5 inputpath I
+6to +9 output-path It
+10 to +11 flags I

Descriptions of parameters:

Description

Number of parameters (3)
Pathname to be expanded
Pointer to expanded pathname
Uppercase conversion flag

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 2; the maximum is 3.

input - path Pointer to a class 1 pathname string that is to be expanded.
output - path Pointer to a class 1 output buffer where GS/OS returns the expanded

pathname.

flags Bit 15 of this flag indicates whether lowercase characters are to be
converted to uppercase:

bit IS 1 = convert to uppercase characters

0 = don't convert characters

bits 14-0 must be zero
Common error codes:

$40 The pathname syntax is invalid.
$4F The class 1 output buffer is too small to hold the result.

Comments:

The input - path parameter does not have to represent an existing filename on disk.

Command Descriptions 125

FLUSH

$CD

GS/OS ProDOS 8
Purpose:

To force the operating system to write the contents of the data portion of a file's 110
buffer to disk and to update the file's directory entry. The operating system does this
without closing the file.

Parameter table:

ProDOS 8 Input

or
Cll'set Symbolic Name Result Description

+0 numparms I Number of parameters (1)
+ 1 ref num I Reference number for the file

GSIoS Input
or

bet Symbolic Name Result

+0 to + 1 pcount I
+2 to +3 refnum I

Descriptions of parameters:

Description

Number of parameters (1)
Reference number for the file

num - parms The number of parameters in the ProDOS 8 parameter table (always 1).
pcount The number of parameters in the GS/0S parameter table. The min-
imum value is 1; the maximum is 1.

ref num The reference number ProDOS 8 or GS/OS assigned to the file when

it was first opened.

If refnum is 0, all open files at or above the system file level are
flushed. To set the value of the file level under ProDOS 8, store the
value at LEVEL ($BF94). Under CSlOS, use the SetLevel command.
Common error codes:

$2B The disk is write-protected.

126 CS/OS and ProDOS 8 Commands

$43 The file reference number is invalid. You might be using a reference
number for a file that you've already closed.

Other possible error codes are $04, $07, $27, $48.
Programming example:

To flush all open ProDOS 8 files at or above file level 2, use the FLUSH command
with ref num equal to 0 and LEVEL ($BF94) equal to 2. Here's the code:

LDA #2

STA LEVEL
JSR MLI
nFB $CD

PA PARMTBL
BCS ERROR
RTS

PARMTBL BFB 1
0FB 0

Set LEVEL to 2
FLUSH

Address of parameter table
;Branch if error occurred

The # of parameters

reference number = 0 (close all files)

Command Descriptions 127

none

GS/OS ProDOS 8
Purpose:

To format a disk and write out the boot record, volume bit map, and empty root
directory for the specified disk operating system.

There is no equivalent ProDOS 8 command. Under ProDOS 8, You must use a utility
program like System Utilities to format a disk.
Parameter table:

GSlOS Input
or

bet Symbolic Name Result
+0to +1 pcount I
+2to +5 devname I
+6 to +9 volname I
+10 to +11 file~sys~id It
+ 12 to + 13 requestedfi;ys I

Descriptions of parameters:

Description

Number of parameters (4)

Pointer to the device name string
Pointer to the volume name string
ID code for selected file system
ID code for requested file system

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 3; the maximum is 4.

dev - name A pointer to a class 1 device name string.

vol - name A pointer to a class 1 disk volume name string. The name must be

preceded by a slash.

file - sys - id If the requested - fsys field is zero, GS/OS displays a dialog box that

lets the user pick the file system to be used on the disk volume. On
return, the file - sys - id field indicates which file system was selected:

$01 = ProDOS/SOS

$02 = DOS 3.3
$03 = DOS 3.2/3.1

$04 = Apple II Pascal
$05 = Macintosh MFS
$06 = Macintosh HFS
$07 = Macintosh XL (LISA)

128 GS/OS and ProDOS 8 Commands

$08 = Apple CP/M
$09 = [never used]
$0A = MS-DOS

$0B = High Sierra (CD-ROM)
$0C = 1509660 (CD-ROM)

If CS/OS returns a zero in this field, the user canceled the operation.
requested - fsys This field contains the ID code for the file system to be written to

the disk volume. (The codes are the same as those described for
file - sys - id.) If the field is zero, CS/OS displays a dialog box that
lets the user pick his or her own file system; GS/OS returns the
selected ID in the file - sys - id field.

Common error codes:

$10 The specified device name does not exist.
$40 The volume name specified contains invalid characters or does not
start with a valid separator (/ or :).

$5D The specified file system is not supported.
Other possible error codes are $07, $11, $27.
Programming example:

See the example given for the EraseDisk command. The only change to make is to
replace the ~ EraseDisk macro with the Format macro.

Command Descriptions 129

none

GS/OS ProDOS 8
Purpose:

To perform operations which are unique to a particular file system translator.
There is no equivalent ProDOS 8 command. ProDOS 8 does not use file system
translators.

Parameter table:

GS/OS Input
or

C))cset Symbolic Name Result
+0to +1 pcount I
+2 to +3 file~sysid I
+4 to +5 commandnum I
+6to +7/9 command~parm I/It

Description

Number of parameters (3)
File system ID code

FST-specific command number
Command parameter or result

Descriptions of parameters:

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 3; the maximum is 3.

file - sys - id This field indicates the file system that the FST implements:

$01 = ProDOS/SOS

$02 = DOS 3.3
$03 = DOS 3.2/3.1
$04 = Apple II Pascal
$05 = Macintosh MFS
$06 = Macintosh HFS
$07 = Macintosh XL (LISA)
$08 = Apple CP/M
$09 = Character FST
$0A = MS-DOS

$0B = High Sierra z(CD-ROM)
$0C = 1509660 (CD-ROM)

This field contains an FST-specific command code.

130 GS/0S and ProDOS 8 Commands

command - parm This can be either an Input or a Result field, depending on com-
mand - num. Its meaning depends on which FST you are communi-
cating with.

Common error codes:

$53 Invalid parameter.
Other possible error codes are $04, $54.
Comments:

This command is for performing operations unique to a particular file system. The
nature of these operations varies from one FST to another. Consult the technical
description of the FST you want to deal with for an explanation of the FSTSpecific
calls it supports.

Command Descriptions 131

none

GS/OS ProDOS 8
Purpose:

To determine the name of the disk volume from which the GS/OS operating system
was booted.

There is no equivalent ProDOS 8 command. ProDOS 8 does not keep track of the
name of the disk it was booted from.
Parameter table:

GS/OS Input
or

O(rset Symbolic Name Result
+0to +1 pcount I
+2 to +5 vol~name It

Description

Number of parameters (1)
Pointer to the volume name string

Note: The volume name CetBootVol returns is the same as the name GS/OS assigns to
the ~/ prefix when it first boots up.

Descriptions of parameters:

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 1; the maximum is 1.

vol - name A pointer to a class 1 output buffer in which CS/OS returns the disk

volume name (preceded and followed by a pathname separator). The
output buffer should be 35 bytes long.
Common error codes:
[none]

Another possible error code is $07.
Programming example:

An application never really needs to know the actual name of the GS/OS boot volume.
If it needs to define a pathname on the boot volume, it should use the */ shorthand
notation to identify the root directory.

It may be convenient, however, to display the name for information or when debug-
ging. Here is a GS/OS subroutine that shows how to use GetBootVol:
Get_Boot _GetBootVol GBV_Farms
RTS

132 CS/OS and ProDOS 8 Commands

Parms AH0P
PC I2'1' The number of parameters
PC I4'BootSpace' Pointer to output buffer

~tSpace PC I2'35'

~tName PS 33 Space for name

exit from the subroutine, the name is stored at BootName, preceded by a length word.

Command Descriptions 133

GETBUF

$D3

GS/OS ProDOS 8
Purpose:
To determine the starting address of the 1024-byte 1/0 buffer an open file uses.
There is no equivalent GS/OS command. CS/OS takes care of all buffer-management
operations internally.
Parameter table:

Pro DOS 8

bet Symbolic Name

+0 num~parms
+ 1 ref~num
+2to +3 io~bufler

Input
or

Result Description

Descriptions of parameters:

I Number of parameters (2)
I Reference number for the file
It Pointer to 1/0 buffer

num - parms The number of parameters in the ProDOS 8 parameter table (always 2).
ref~ num The reference number ProDOS 8 assigned to the file when it was

first opened.

io - buffer A pointer to the 1024-byte file buffer used by the open file. The

low-order byte of this pointer is always $00. (That is, the buffer
begins on a page boundary.)
Common error codes:

$43 The file reference number is invalid. You might be using a reference
number for a file that you've already closed.

Another possible error code is $04.
Programming example:

You can use the following program to determine the address ~f the file buffer for file 2.
After the GETS BUF command executes, the address will be stored at BUFFPTR.

JSR MLI
PFB $P3

PA PARMTBL
BCS ERROR
RTS

;GET_BUF

;Address of parameter table
Branch if error occurred

134 GS/OS and ProDOS 8 Commands

PARMTBL PFB 2 The # of parameters
PFB 2 File reference number

BUFFPTR PS 2 Buffer address is returned here

Command Descriptions 135

GetDe"Number
$2020

GS/OS ProDOS 8
Purpose:

To determine the device reference number corresponding to a specified device name
or volume name.

There is no equivalent ProDOS 8 command.
Parameter table:

GS/OS Input
or

bet Symbolic Name Result
+0to +1 pcount I
+2to +5 dev~name I

+6 to +7 dev~num It

Description

Number of parameters (2)
Pointer to device/volume name
string

Device reference number

Descriptions of parameters:

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 1; the maximum is 2.

dev - name A pointer to a class 1 device name string or the class 1 volume name

string. A volume name must be preceded by a pathname separator.

dev - nun'

The device's reference number.

Note: If dev - name points to a volume name, the dev - num GS/OS returns repre-
sents the current device reference number for the volume. The volume's dev - num
will change if the disk is removed and placed in another disk drive.

Common error codes:

$10 The specified device name does not exist.

$40 The volume name specified contains invalid characters or does not
start with a valid separator (/or :).

$45 The disk with the specified volume name can't be found, or the
name, although preceded by a separator, is otherwise invalid.
Other possible error codes are $07, $11.

136 GS/OS and ProDOS 8 Commands

Programming example:

Here is a GS/OS code fragment you can use to determine the device reference
number for a disk whose name is /APPLEWOItKS.GS:

GetPevNumber GPN_Parms
RTS

GPN_Parms AN0P
PC I2'2' The number of parameters
PC I4'VolName'

PS 2 ;Pevice ref number returned here

VolName GSString '/APPLEW0RKS.GS'

Don't forget to include a leading slash (or colon) in the volume name.

Command Descriptions 137

none

GS/OS ProDOS 8
Purpose:

To read an open directory file. GS/OS returns entries that contain informatiop about
the files in a directory.

There is no equivalent ProDOS 8 command. Under ProDOS 8, you must open the
directory file, read it into memory, and interpret the data yourself. This requires an
understanding of the structure of a directory file. See Chapter 2.
Parameter table:

GS/OS Input
or

Olfset Symbolic Name Result
+0to +1 pcount I
+2to +3 ref~num I
+4 to +5 flags It
+6to +7 base I
+8to +9 displacement I
+ 10 to +13 namebufler I
+ 14 to + 15 entry~num It
+16 to +17 file-type It
+18 to +21 eof It
+22 to +25 block-count It
+26 to +33 create~td It
+34 to +41 modify~td It
+42 to +43 access It
+44 to +47 auxtype It
+48 to +49 file~sys~id It
+50 to +53 option-list It
+54 to +57 res~eof It
+58 to +61 res~block~count It

Description

Number of parameters (17)
Reference number for the file
Extended file flag

Base code
Displacement code
Pointer to name buffer
Absolute directory entry number
File type code
Size of the file

Number of blocks file uses

Time and date of creation
Time and date of modification
Access code

Auxiliary type code
Operating system ID code
Pointer to option list
Size of the resource fork
Number of blocks resource fork uses

138 GS/OS and ProDOS 8 CommandsDescriptions of parameters:

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 5; the maximum is 15.

ref~ num The reference number GS/OS assigned to the directory file when it

was first opened.

Bags Bit 15 of this word indicates whether the file represented by the current
directory entry is an extended file (bit 15 = 1) or not (bit 15 = 0).

base This code tells GS/OS how to calculate the number of the next
directory entry to read. If base = 0, displacement is an absolute
directory entry; if base = 1, GS/OS adds displacement to the current
entry number to get the next entry number; if base = 2, GS/OS
subtracts displacement from the current entry number to get the
next entry number. Note that GS/OS sets the current entry number
to 0 when it first opens a file and updates it each time the application
calls GetDirEntry.

If base = 0, this represents the absolute number of the directory
entry to be returned. Otherwise, it represents the displacement to
the next directory entry to be returned, which can be positive or
negative, depending on the value of base.

Note that if base and displacement are both zero, GS/OS returns in
the entry - num field the total number of active entries in the subdi-
rectory. It also sets the current entry number to the first entry in the
subdirectory.

To step through the directory one entry at a time, set both base and
displacement to 1 and keep calling GetDirEntry until error $61 (end
of directory) occurs.

bufler A pointer to a class 1 output buffer in which GS/OS stores the
filename it finds in the directory entry. For volumes formatted for
the ProDOS file system, the buffer size should be 19 bytes (15 for
the name bytes, 2 for the length word, and 2 for the buffer size
word). Since GetDirEntry could also be used to read directories of
foreign operating systems that use longer filenames (such as Macin-
tosh HFS or CD-ItOM High Sierra), you might want to make the
buffer even larger.

If the output buffer you provide is too small, GetDirEntry returns as
much of the name as will fit in the buffer, but returns the actual length.

- num The absolute directory entry number of the current entry.
file - type A code indicating the type of data the file holds. See Table 2-5 for a

description of the ProDOS file type codes.

Command Descriptions 139

eof A value that holds the current EOF position. This value is equal to
the size of the file (in bytes). If the file is an extended file, this field
relates to the data lork of the file only.

block - count This field contains the total number of blocks used by the file for data

storage and index blocks. If the file is an extended file, this field
relates to the data fork of the file only.

create - td The time and date of creation. These 8 bytes represent the following

parameters in the following order:

seconds
minutes

hour in 24-hour military format
year year minus 1900
day day of month minus 1
month 0 = January, 1 = February, and so on
[not used]

weekday 1 = Sunday, 2 = Monday, and so on

Note: This format is the same as the one used by the ReadTimeHex
function in the IIcs's Miscellaneous Tool Set but is different from
the one used in a standard file entry for the ProDOS file system.

modify - td The time and date of last modification. The ordering of these 8 bytes

is the same as for create - time.

access This field contains several 1-bit codes defining the access attributes
of the file. See Figure 2-10 for a description of these bits.

aux - type This is the auxiliary type code. The meaning of the code depends on

the file type code and on the program that created the file in the first
place. For SYS, BIN, BAS, and VAIt files, it is a default loading
address; for TXT files, it is a record length; for SItC files, it is an
APW language type code.

file - sys - id The file system identification code. The currently defined values are

$00 = [reserved]

$01 = ProDOS/SOS
$02 = DOS 3.3
$03 = DOS 3.2/3.1
$04 = Apple II Pascal
$05 = Macintosh MFS
$06 = Macintosh HFS
$07 = Macintosh XL (LISA)
$08 = Apple CP/M
$09 = [reserved]
$0A = MS-DOS

140 GS/OS and ProDOS 8 Commands

$0B = High Sierra (CD-ROM)
$0C = 1509660 (CD-ItOM)

All other values are reserved.

n - list A pointer to a class 1 output buffer where GS/OS returns file infor-
mation unique to the file system translator used to access the file.
- eof A value that holds the current EOF position of the resource fork of

an extended file. This value is equal to the size of the resource fork of
the file (in bytes).

block-count This field contains the total number of blocks used by the resource
fork of an extended file for data storage and for index blocks.
error codes:

The name buffer is too small to hold the filename.
End of directory. When you receive this error, close the subdirectory
file you opened before calling GetDirEntry.

possible error codes are $07, $27, $43, $4A, $41a, $52, $53, $58.

example:

is a GS/OS subroutine that displays the names of all the files in a given

by repeatedly calling GetDirEntry. On entry to the subroutine, the
'pointer to the subdirectory pathname must be in the A (high word) and X
word) registers.
- START
STX Name_Ptr Set up pointer to pathname
STA Name_Ptr+2

Open Open_Prms Open the subdirectory file
LPA ref num
STA ref_num1
STA ref_num2

Pir _GetPirEntry GPE_Parms
BCS Exit

LPA NameBuff+2
XBA

STA NameBuff+2

PushPtr NameBuff+3
_PrawString

JSR CRLF

Put length in high byte
so it's just before the
filename

Point to length byte
;Pisplay filename

Move to start of next line

Command Descriptions 141

BRA Read Pir

Exit _Close Close_Prms Close subdirectory file
RTS

Open_Prms ANOP
PC 12'2' The number of parameters

ref_num PS 2 ;Reference number
Name_Ptr PS 4 ;Pointer to subdir pathname

Close_Prms ANOP
PC 12' 1'

ref num1 PS 2

GPE Parms ANOP

PC 12'S'

ref_num2 PS 2 ;reference number
PS 2 ;flags
PC 12' 1' Base = "increment"
PC 12' 1' ;displacement = +1
PC 14' NameBuff' Pointer to name buffer

NameBuff PC 12' 19' ;Buffer size
PS 2 ;Length
PS 15 ;Filename

ENP

Notice that the values for base and displacement are both set to 1 in the GetDirEntry
parameter table so that all active entries in the directory will be returned as Get-
DirEntry is called again and again. The read loop ends when GetDirEntry returns an
error. (This will normally be error code $61 - "end of directory.")
Also notice the trickery used to set up a standard Pascal-type string for - DrawString
to act on. Pascal strings are preceded by a single length byte, but the length in the
GetDirEntry name buffer occupies 2 bytes. The low-order length byte is stored at
Name - Buff+ 3 to set up the Pascal-type string. The subroutine assumes that the file
name will not exceed 255 characters.

142 CS/OS and ProDOS 8 Commands

GetEOF
$2019

GS/OS ProDOS 8
Purpose:

To determine the value of the current end-of-file pointer (EOF) of an open file. This
value represents the size of the file.

Parameter table:

Pro DOS 8 Input

or

O(rset Symbolic Name Result Description

+ 0 num - parms I Number of parameters (2)
+ 1 ref~num I Reference number for the file
+ 2 to + 4 eof It The end-of-file position

GS/OS Input
or

bet Symbolic Name Result Description

+ 0 to + 1 pcount I Number of parameters (2)
+ 2 to + 3 ref~ num I Reference number for the file
+ 4 to + 7 eof It The end-of-file position

Descriptions of parameters:

num - parms The number of parameters in the ProDOS 8 parameter table (always 2).

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 2; the maximum is 2.

ref~num The reference number ProDOS 8 or GS/OS assigned to the file when
it was first opened.

eof A value that holds the current EOF position. This value is equal to
the size of the file (in bytes).

Command Descriptions 143

Common error codes:

$43 The file reference number is invalid. You might be using a reference
number for a file that you've already closed.

Other possible error codes are $04, $07.
Programming example:

Use the GetEOF command to quickly determine how big an open file is. For example,
after you call this GS/OS subroutine, the size of open file #1 is stored at Position
(low-order bytes first):
GetEOF GE Parms

BCS Error
RTS

GE_Parms PC 12'2'
PC I2'1'

Position PS 4

;Branch if error occurred
The # of parameters
File reference number
;Current EOF position

144 GS/OS and ProDOS 8 Commands

GS/OS

retrieve the information stored in a file's directory entry. This includes the access

file type code, auxiliary type code, storage type code, the number of blocks the
uses, and the date and time the file was created and last modified.

table:

Input
or

Symbolic Name Result
num~parms I

to +2 pathname I

access It
file-type It

to +6 aux~type It

storage-type It

to +9 blocks-used It
to +11 modify-date It
to +13 modifytime It
to +15 createdate It
to +17 create-time It

Description

Number of parameters (10)
Pointer to the pathname string
Access code
File type code
Auxiliary type codea
Storage type code
Blocks used by the filea
Modification date
Modification time
Creation date
Creation time

pathname points to the name of a volume directory rather than the name of a standard file, the
size (in hlocks) is returned in the aux - type field, and the uumher of hlocks currently in use hy all
the volume is returned in the blocks - used field.

Command Descriptions 145

GS/OS Input
or

-set Symbolic Name Result Description
+0 to + 1 pcount I Number of parameters (12)
+ 2 to + 5 pathname I Pointer to the pathname string
+ 6 to + 7 access It Access code
+8to +9 filetype It File type code
+ 10 to + 13 auxtype It Auxiliary type code
+ 14 to + 15 storage - type It Storage type code
+ 16 to + 23 create - td It Creation time and date
+ 24 to + 31 modify - td It Modification time and date
+ 32 to + 35 option - list It Pointer to option list
+36 to +39 eof It Size of the file
+40 to +43 blocksused It Blocks used by the file
+ 44 to + 47 resource - eof It Size of resource fork
+ 48 to + 51 resource blocks It Blocks used by resource fork

Descriptions of parameters:
num - parms The number of parameters in the ProDOS 8 parameter table (always

10).

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 1; the maximum is 12.

pathname A pointer to a class 0 (ProDOS 8) or class 1 (GS/OS) string describ-
ing the pathname of the file to be used. If the pathname specified is
not preceded by a separator (/for ProDOS 8; / or : for GS/OS), the
operating system appends the name to the default prefix (in GS/OS,
this is the 0/ prefix) to create a full pathname.

access This field contains several 1-bit codes that define the access at-
tributes of the file. See Figure 2-10 for a description of these bits.

file-type This code indicates the type of data the file holds. See Table 2-5 for
a description of the ProDOS file type codes.

aux - type This is the auxiliary type code. The meaning of the code depends on

the file type code and on the program that created the file in the first

146 GS/OS and ProDOS 8 Commands

place. For 5Y5, BIN, BAS, and VAR files, it is a default loading
address; for TXT files, it is a record length; for SRC files, it is an
APW language type code.

Exception: Under ProDOS 8, if the pathuame is a volume direc-
tory name, aux - type holds the volume size (in blocks).
storage - type This code describes the physical organization of the file on the

disk:

$01 = seedling file
$02 = sapling file
$03 = tree file

$04 = Pascal region on a partitioned disk
$05 = extended file

$0D = directory file (linked list)
$0F = volume directory file (linked list)

block5 - used This field contains the total number of blocks used by the file for

data storage and index blocks. (Use GetEOF to determine the
number of bytes in a file.) If the file is an extended file, this is the
number of blocks used by the data fork only. This field is unde-
fined for a GS/OS subdirectory file.

Exception: Under ProDOS 8, if the pathname field points to a
volume directory name, blocks - used contains the number of
blocks in use on the disk by all files.

modify - date This field contains the date (year, month, day) the file was last

modified. Figure 8-1 in Chapter 8 shows the format of these
bytes.

modify - time This field contains the time (hour, minute) the file was last modi-
fied. Figure 8-1 in Chapter 8 shows the format of these bytes.

ereate~date This field contains the date (year, month, day) the file was created.
Figure 8-1 in Chapter 8 shows the format of these bytes.
create - time This field contains the time (hour, minute) the file was created.

Figure 8-1 in Chapter 8 shows the format of these bytes.

create - td The time and date of creation. These eight bytes represent the

following parameters in the following order:

seconds
minutes

hour in 24-hour military format
year year minus 1900
day day of month minus 1
month 0 = January, 1 = February, and so on
[not used]

weekday 1 = Sunday, 2 = Monday, and so on

Command Descriptions 147

Note: This format is the same as the one used by the ReadTimeHex
function in the IIcs's Miscellaneous Tool Set, but is different from
the one used in a standard directory entry for the ProDOS file
system.

modify~td The time and date of last modification. The ordering of these eight
bytes is the same as for create - td.

option - list A pointer to a class 1 output buffer where GS/OS returns file infor-
mation unique to the file system translator used to access the file.

eof The size of the file in bytes. If the file is an extended file, this is the size
of the data fork only. This field has no meaning for a subdirectory file.
resource - eof If the file is an extended file, this is the size of the resource fork.
resource-blocks If the file is an extended file, this is the number of blocks the
resource fork uses on disk.

Common error codes:

$40 The pathname contains invalid characters, or a full pathname was not
specified (and no default prefix has been set up). Verify that the
filenames and directory names specified in the pathname adhere to
the naming rules described in Chapter 2 and, if a partial pathname
was specified, that a default prefix has been set up.

$44 A directory in the pathname was not found. Solution: Double-check
the spelling of the pathname, insert the disk containing the correct
directory, or change the default prefix.

$45 The volume directory was not found. Solution: Double-check the
spelling of the volume directory name, insert the correct disk, or
change the default prefix.

$46 The file was not found.

Other possible error codes are $04, $07, $27, $4A, $4B, $52, $53, $58.
Programming example:

See the example given for the SetFileInfo command.

148 GS/OS and ProDOS 8 Commands

GetFSTInfo
$202B

GS/OS

ProDOS 8

Purpose:

To get general information about the characteristics of a GS/OS file system translator.
There is no equivalent ProDOS 8 command.

Parameter table:

GS/OS Input
or

Olfset Symbolic Name Result
+0 to + 1 pcount I
+2 to +3 FST~num I
+4 to +5 M~sys~id It
+6 to +9 FST~name It
+10 to +11 version It
+ 12 to + 13 attributes It
+ 14 to + 15 block-size It
+16 to +19 max~volsize It
+20 to +23 max~filesize It

Descriptions of parameters:

Description

Number of parameters (8)
FST reference number
File system ID
Pointer to FST name
FST version number
FST attributes
FST block size
FST volume size
FST file size

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 1; the maximum is 8.

FST - num The FST reference number. GS/OS assigns consecutive reference

numbers, beginning with 1, to the FSTs it finds in the system.
file - sys - id The identification code for the file system that the FST supports:

$01 = ProDOS/SOS
$02 = DOS 3.3
$03 = DOS 3.2/3.1
$04 = Apple II Pascal
$05 = Macintosh MFS
$06 = Macintosh HFS
$07 = Macintosh XL (LISA)

Command Descriptions 149

$08 Apple CP/M
$09 = Character FST
$0A = MS-DOS

$0B = High Sierra (CD-ROM)
$0C = 1509660 (CD-ROM)

FST~name A pointer to class 1 output buffer where GS/OS returns the name of
the file system translator.

version The version number of the file system translator:

bit 15 1 = prototype version

0 = final version

bits 14-8 major version number
bits 7-0 minor version number

attributes The attributes of the file system translator:

bit IS 1 = FST wants filenames in uppercase
bit 14 1 = character FST; 0 = block FST
bit 12 1 = FST wants the characters in

filenames to have the high-order
bit clear

block-size The size (in bytes) of the blocks the FST handles.
max~vol~size The maximum size (in blocks) of the disk volumes the FST handles.
max - file - size The maximum size (in bytes) of the files the FST handles.
Common error codes:

$53 Parameter out of range. GS/OS returns this error if the FST refer-
ence number does not exist.

Another possible error code is $07.
Comments:

GS/OS provides no simple way to determine how many FSTs are active. To get
information on all FSTs, keep calling GetFSTInfo with successively higher FST -
num values (beginning at 1) until GS/OS returns an error code of $53.

150 CS/OS and ProDOS 8 CommandsGetLevel
$201B

GS/OS ProDOS 8
Purpose:

To determine the value of the system file level.

z There is no equivalent ProDOS 8 command. The system file level is stored at LEVEL
($BF94) in the ProDOS 8 system global page.
Parameter table:

GS/OS Input
or

O)(ket Symbolic Name Result
+0to +1 pcount I
+2 to +3 level It

Descriptions of parameters:

Description

Number of parameters (1)
The system file level

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 1; the maximum is 1.

level The value of the system file level. The values that can be returned
range from $0000 to $00FF.
Common error codes:
[none]

Another possible error code is $07.
Programming example:

Here is a GS/OS subroutine for returning the system file level number:

_Get Level GL_Parms
RTS

GL_Parms ANOP
PC 12' 1' The number of parameters

theLevel PS 2 ;System file level returned here

Command Descriptions 151

GetMark GET-MARK
$2017 $CF
GS/OS ProDOS 8
Purpose:

To determine the value of the current position-in-file pointer (Mark) of an open file.
Subsequent read or write operations take place at this position.
Parameter table:

ProDOS 8 Input

or

bet Symbolic Name Result Description

+ 0 num - parms I Number of parameters (2)
+ 1 ref~num I Reference number for the file
+ 2 to + 4 position It The current Mark position

GS/OS Input
or

bet Symbolic Name Result

+0to +1 pcount I
+2to +3 ref~num I
+4to +7 position It

Descriptions of parameters:

Description

Number of parameters (2)
Reference number for the file
The current Mark position

num - parms The number of parameters in the ProDOS 8 parameter table (always 2).
pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 2; the maximum is 2.

ref num The reference number ProDOS 8 or GS/OS assigned to the file when

it was first opened.

position The current Mark position in bytes.
Common error codes:

$43 The file reference number is invalid. You might be using a reference
number for a file that you've already closed.

152 GS/OS and ProDOS 8 Commands

Other possible error codes are $04, $07.
Programming example:

Here is a ProDOS 8 subroutine that reads and displays the current Mark position of
an open file:

JSR MLI
PFB $CF

PA PARMTBL
BCS ERROR

LPA POSITION+2

JSR PRBYTE Print high part (PRBYTE=$FPPA)
LPA POSITION+1

JSR PRBYTE Print mid part
LPA POSITION

JSR PRBYTE ;Print low part
LPA #$8P

JSR COUT ;Followed by CR (COUT=$FPEP)
RTS

PARMTBL PFB 2 ;The # of parameters

;GET_MARK

Address of parameter table
Branch if error occurred

~ITION

PFB 1 ;File reference number
PS 3 ;Current Mark position

The system Monitor subroutine called PRBYTE ($FDDA) prints the byte in the
~umulator as two hexadecimal digits.

Command Descriptions 153

none

GS/OS ProDOS 8
Purpose:

To determine the name of the application currently running.
There is no equivalent ProDOS 8 command. Under ProDOS 8, you can deduce the
name by examining the pathname or partial pathname stored at $280 when the
application starts up.
Parameter table:

GS/OS Input
or

O(rset Symbolic Name Result
+0to +1 pcount I
+2to +5 data~bufler It

Descriptions of parameters:

Description

Number of parameters (1)

Pointer to application name string

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 1; the maximum is 1.

data - buffer A pointer to a class 1 output buffer where the name of the curren

application is to be returned. The name is an ASCII string preceded
by a length word. The output buffer should be 35 bytes long to
accommodate the longest filename you might encounter. (Macintosh
filenames can be up to 31 characters long.)
Common error codes:
[none]

Other possible error codes are $07, $4F.
Programming example:

A running application sometimes needs to be able to determine what its name is. It
would need to know this, for example, if it had to transfer a copy of itself to a RAM disk
when it was started up. The application shouldn't assume a specific name because the
user may have renamed the application.
Here is how to determine the name of the application:

GetName GN_Parms
RTS

154 GS/OS and ProDOS 8 Commands

GM_Parms ANOP
PC II' 1' The number of parameters
PC 14' NameSpace' Pointer to class I buffer

NameSpace PC I2'35' Size of buffer

TheName PS

33 ,Space for class I name string

GetName returns the filename only, preceded by a length word. The subdirectory it
resides in is given by the 1/ prefix, provided the application, or a desk accessory,
hasn't changed it since the application was launched. Use GetPrefix to determine the
specific value of this prefix.

Command Descriptions 155

GetPrefix
$200A
GS/OS
Purpose:

GET-PREFIX

$C7

ProDOS 8

To determine the name of the default prefix (ProDOS 8) or any of the 32 GS/OS
prefixes (0/ through 31/).
Parameter table:

ProDOS 8 Input

or

bet Symbolic Name Result
+0 num~parms 1
+1to +2 prefix R

Description

Number of parameters (1)
Pointer to prefix name string

GS/OS Input
or

bet Symbolic Name Result

+0to +1 pcount I
+2to +3 prefix~num I
+4to +7 prefix R

Description

Number of parameters (2)
Prefix number (0 to 31)

Pointer to prefix name string

Note: The GS/OS GetPrefix command uses the colon as a separator character in the
prefix strings which it returns. In addition, if the prefix name used with SetPrefix
contained lowercase characters, GetPrefix does not convert them to uppercase (but the
ProDOS 8 GETS PREFIX command does).

Descriptions of parameters:

num - parms The number of parameters in the ProDOS 8 parameter table (always 1).

prefix A pointer to a class 0 (ProDOS 8) or class 1 (GS/OS) output buffer in
which the operating system returns the prefix name. The name is in
ASCII and is preceded and followed by a pathname separator char-
acter (/for ProDOS 8; / or : for GS/OS).

For ProDOS 8, the buffer must be 67 bytes long to accommodate the
longest possible prefix that might be active (64 characters) plus the
preceding length byte and the two separator characters.

156 GS/OS and Pro DOS 8 Commands

For GS/OS, a pathname can be up to 8K in size, but it is rare to
encounter any longer than 67 characters. You should set the class 1
buffer length word to 69 when you call GetPrefix; if the buffer isn't
big enough, GS/OS returns error code $4F, and you can call the
command again using the length word returned after the buffer size
length word.

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 2; the maximum is 2.

prefix - num

The GS/OS prefix number (0 to 31). This is a binary number, not an
ASCII number string followed by a slash.

Common error codes:

$56 The pathname buffer address is invalid because it has been marked
as in use in the ProDOS 8 system bit map. Specify a buffer address
that does not conflict with areas already used by ProDOS 8 or its file
buffers. Examine the system bit map to determine the free and
protected areas.

Other possible error codes are $04, $07, $4F, $53.
Programming example:

This GS/OS subroutine gets the 7/ prefix and stores it in the buffer beginning at
PathName (preceded by a length word):

_GetPrefix GP_Parms

BCS Error Branch if error occurred
RTS

GP Parms PC I2'2'

PC I2'7' Get prefix 71
PC I4'PathBuff'

PathBuff PC 12'69' Size of buffer
PathNamePS 67

Note that if a 7/prefix has not yet been set up (with SetPrefix), the prefix length word
returned by GetPrefix will be zero.

Command Descriptions 157

none

GS/OS ProDOS 8
Purpose:

To determine the state of the system preferences status word.
There is no equivalent ProDOS 8 command.
Parameter table:

GS/OS Input
or

O(rset Symbolic Name Result
+0to +1 pcount I
+2 to +3 preferences I

Descriptions of parameters:

Description

Number of parameters (1)
System preferences

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 1; the maximum is 1.

preferences The system preferences status word:

bit IS I = display mount volume dialog

0 = don't display the dialog

Common error codes:
[none]

Comments:

GS/OS commands that have pathnames as input parameters normally display a mount
volume dialog box (to ask the user to insert a specified disk volume) if the commands
can t find the volume they are expecting. If the application wants to handle "volume
not found" errors itself it can use SetSysPrefs to clear bit 15 of the preferences word.

158 GS/OS and ProDOS 8 Commands

none

GS/OS ProDOS 8
Purpose:

To read the date and time from the system clock into the ProDOS 8 system global
page at DATE ($BF90-$BF91) and TIME ($BF92-$BF93).
There is no equivalent GS/OS command. Use the ReadAsciiTime and ReadTimeHex
functions in the IIcs's Miscellaneous Tool Set instead. Sec Chapter 8.
Parameter table:

[no parameter table, but the caller must point to a dummy table]
Common error codes:
[none]

Programming example:

When you use this command, the current date (year, month, day) and time (hour,
minute) are stored in a reserved area of the ProDOS 8 system global page from $BF90
to $BF93. The date is stored in the DATE locations ($BF90 and $BF91), and the time
is stored in the TIME locations ($BF92 and $BF93) in the special packed format
described in Figure 8-1 of Chapter 8.

Note, however, that GET-TIME returns the time only if a ProDOS-compatible
clock, like the built-in II&s clock, Thunderware Thunderclock, Prometheus Versacard,
or Applied Engineering Timemaster H.O., is installed. When ProDOS 8 first starts up,
it installs a special clock driver for reading these types of cards. (We see how to install
custom clock drivers in Chapter 8.)

The subroutine to use to read the current date and time is very simple since no
parameter table is required and no errors can occur. Here it is:

JSR MLI

PFB $82 GET_TIME

PA $0000 Dummy parameter table
RTS

Notice the use of a dummy parameter table pointer of $0000.

Command Descriptions 159

none

GS/OS ProDOS 8
Purpose:

To return the GS/OS version number.

There is no equivalent ProDOS 8 command. Under ProDOS 8, the minor release
number is stored at $BFFF in the ProDOS 8 system global page. The major release
number is always 1.
Parameter table:

GS/OS Input
or

bet Symbolic Name Result
+0 to +1 pcount I
+2 to +3 version R

Descriptions of parameters:

Description

Number of parameters (1)
GS/OS version number

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 1; the maximum is 1.

version The version of the GS/OS operating system currently in use. The
low-order byte contains the minor release number, and the high-
order byte contains the major release number. (This means, for
example, that version 2.1 would be represented by $0201.) Bit 7 of
the high-order byte is 1 if the release is a prototype (beta) version.

Common error codes:
[none]

Another possible error code is $07.
Programming example:

Here is a subroutine that will print out the GS/OS version number in ASCII in the
current desktop window:

Show_Vers START

GetVersion GV_Parms
LPA Version

RHA

Get version word

;(Save two copies on stack)

160 GS/OS and ProDOS 8 Commands

PHA
XBA

AND #$OO7F
ORA ,'$0O30
PHA

_DrawChar
PushWord ,'$2E
_PrawChar
PLA

AND ,'$OOFF
ORA #$0030
PHA
_PrawChar

PLA
BPL Exit

PushWord ,i'$7O
_PrawChar

Exit RTS
GV_Parms ANOP
DC II' I'

Version PS 2
END

Swap high/low

Isolate major version
Convert to ASCII

Period

Get version word back
Isolate minor version
;Convert to ASCII

;Get version word back
;Branch if prototype bit not I

;'p' for prototype

The number of parameters
;Version word returned here

This subroutine works only if the major and minor version numbers are less than 10.

Command Descriptions 161

NEWLINE

$C9

GS/OS ProDOS 8
Purpose:

To enable or disable newline read mode. When you enable newline read mode,
subsequent read operations automatically terminate once the specified character (the
newline character) has been read. When you disable newline read mode, read opera-
tions terminate when the end-of-file position is reached or the requested number of
characters has been read.

Parameter table:
ProDOS 8

bet Symbolic Name

+0 numparms
+1 ref~num
+2 enable-mask
+3 neMne~char

Input
or

Result Description

I Number of parameters (3)
I Reference number for the file
I Newline enable mask
I Newline character

GS/OS

Input
or

bet Symbolic Name

+ 0 to + 1 pcount
+2 to +3 ref~num
+4 to +5 enaM~mask
+6to +7 num~chars
+8to +11 newline~table

Result Description

Descriptions of parameters:

I Number of parameters (4)
I Reference number for the file
I Newline enable mask
I Number of characters in table
I Pointer to newline character table

num~parms The number of parameters in the ProDOS 8 parameter table (always 3).
ref~ num The reference number ProDOS 8 or GS/OS assigned to the file when

it was first opened.

162 CS/OS and ProDOS 8 Commandsenable - mask This value is logically ANDed with each byte subsequently read from

the file. If the result of the AND operation is the same as newline - char
(or, for CS/OS, any of the characters in newline - table), the read
request terminates; otherwise, the read continues normally.
Exception: If enable - mask is zero, newline read mode is disabled, and
read operations are not affected.

newline - char The value of the newline character. Read requests automatically

terminate if the logical AND of enable - mask and the character
being read equals newline - char.

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 3; the maximum is 3.

num - chars The number of characters in the newline character table. If enable -

mask is not zero num_chars cannot be zero.

newlinetable A pointer to a table of active GS/OS newline characters. Each character
occupies one byte in the table and the table can be up to 256 bytes long.
Common error codes:

$43 The file reference number is invalid. You might be using a reference
number for a file that you've already closed.

Other possible error codes are $04, $07.
Programming example:

A common situation is one where you want to read one line at a time from a textfile.
Since each line in a standard ProDOS textfile is terminated by $0D, the ASCII code
for the carriage return character, you could simply set enable - mask equal to $~F and
the newline character to $0D before executing the Newline command. But some
applications may use the negative ASCII code for the carriage return character ($8D)
for an end-of-line character. If you want to terminate a read operation for either $0D
or $8D, use a newline character of $0D and set the enable - mask to $7F.
Here is a GS/OS subroutine that sets the $0D/$8D newline read mode for you:

NewLine NL_Parms
BCS Error
RTL

PARMTBL DC 12 '4' ;4 parameters
DC I2'1' File reference number (#1 assumed)
DC I2'$7F' enable_mask

DC 12' 1' Number of newline characters

NL_Table

DC 14'NL_Table' Pointer to table
DC I1'$OD' Carriage return

Command Descriptions 163

none

GS/OS ProDOS 8
Purpose:

To execute pending events in the GS/OS signal queue and the Schedulers task queue.
There is no equivalent ProDOS 8 command.
Parameter table:

GS/oS

bet Symbolic Name

+ 0 to + 1 pcount

Input
or

Result Description

Meanings of parameters:

I Number of parameters (0)

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 0; the maximum is 0.

Common error codes:
[none]

Comments:

As explained in Chapter 6, some interrupt handlers place events in the GS/OS signal
queue to ensure that they are dealt with when the system isn't busy. They can also
place tasks into the Scheduler tool set's task queue if they wish.
The events in the signal and task queues are normally processed when a GS/OS
command ends or, if no GS/OS commands are being used, every sixtieth of a second,
in response to a task triggered by a vertical blanking interrupt.
If your application isn't making CS/OS commands for extended periods, and inter-
rupts are disabled, it should call the Null command periodically so that signal queue
and task queue events may be processed.

164 GS/OS and ProDOS 8 Commands

none

GS/OS ProDOS 8
Purpose:

To determine the volume directory name of a specific disk or the names of all active
ProDOS 8 volumes.

Under CS/OS, use the Volume command instead.
Parameter table:

ProDOS 8 Input

or

O(fret Symbolic Name Result Description

+ 0 num - parms I Number of parameters (2)
+ 1 umtnum I Unit number
+2 to +3 data~bufier 1 Pointer to data buffer

Descriptions of parameters:

num - parms The number of parameters in the ProDOS 8 parameter table (always 2).
unit - num The slot and drive number for the disk drive to be accessed. The

format of this byte is as follows:

ProDOS 8 assigns a drive number of1 or 2 to each drive in the system.
DR 0 for drive 1, and DR = 1 for drive 2. SLOT is usually the actual
slot number for the disk controller card (1-7 decimal; 001-111 binary)
but may be the number of a phantom, or logical, slot.
The unit - num value for the ~M volume is $B0, meaning it is the
logical slot 3, drive 2 device.
Exception: If unit - num is 0, the volume names of all drives are re-
turned.

data - buffer A pointer to a buffer containing the volume name information for the

specified drive. If unit - num is 0, the volume names of all drives are
returned. Each volume name entry is 16 bytes long.
The first byte of each 16-byte record contains the drive and slot
number for the disk volume and the length of its volume name in the
following format:

Command Descriptions 165

7 6 $ 4 3 2 1 0
DR SLOT [name length]

DR and SLOT are defined in the same way as unitnum. Name
length contains the length of the volume name for the device defined
by DR and SLOT. (If name length is zero, an error occurred; in
this case, the error code is stored in the next byte. If the error code is
$57 ("duplicate volume"), the third byte of the record contains the
unit - num for the duplicate.)

The next 15 bytes of the record contain the volume name (in stan-
dard ASCII). This name is not preceded by a slash (I).
If unit - num is 0, the record after the last valid 16-byte record
begins with a $00 byte. You must reserve a 256-byte buffer area if
you call ONLINE with umtnum set toO.
Common error codes:

$27 The disk is unreadable probably because a portion of the disk me-
dium is permanently damaged. This error also occurs if the drive
door on a 5.25-inch drive is open or no disk is in the drive.

$28 No device connected. ProDOS 8 returns this error if you do not have
a second 5.25-inch drive connected to the drive controller, but you
try to access it.

$2E A disk with an open file was removed from its drive before executing
the command. Solution: Close all files on the disk to be removed
before executing the ON - LINE command.

$2F Device not on line. ProDOS 8 returns this error if no disk is in a
3.5-inch drive.

$52 The disk in the drive specified by unit - num is not a ProDOS-
formatted disk. Solution: Use only ProDOS-formatted disks with
ProDOS 8!

$56 The pathname buffer address is invalid because it has been marked
as in use in the ProDOS 8 system bit map. Specily a buffer address
that does not conflict with areas already used by ProDOS 8 or its file
buffers. Examine the system bit map to determine the free and
protected areas.

Other possible error codes are $04, $55.

ON - LINE handles error conditions quite differently from how the other MLI
commands do. Generally, if an error occurs, name length is set to 0, and the error code
is stored in the second byte of the corresponding 16-byte record. ""he error code is not
stored in the accumulator, and the carry flag is not set. Errors are handled in the

166 GS/OS and ProDOS 8 Commands

way, however, when errors $55 ("Volume Control Block full"), $56 ("buffer
- invalid"), and $04 ("incorrect number of parameters") occur.

amming example:

ProDOS 8 program reads the volume directory name of a disk that is in the slot
drive 2 disk device.
JSR MLI

DFB $CS ;ONL1NE

DA PARMTBL Address of parameter table
BCS ERROR Branch if error occurred
RTS

z DFB 2
DFB $EO
0A BUFFER

OFFER DS 1
DS 15

The # of parameters is stored here
unit_num = slot 6, drive 2
Pointer to 16-byte buffer

Slot/drive (bits 4-7) and length
of volume name (bits 0-3)
Volume name (in ASCII)

If the volume directory name was ASM.FILES, the byte stored at BUFFER would be
1E9, and the bytes stored beginning at BUFFER + 1 would be

41 $3 40 2E 46 49 4C 45 $3

These are the ASCII codes for the characters in ASM.FILES.

Command Descriptions 167

OPEN

$C8

GS/OS ProDOS 8
Purpose:

To prepare a file for subsequent read and write operations. When you open a file, the
position-in-file pointer (Mark) points to the start of the file (that is, Mark = 0), and its
file level is set equal to the system file level. Under GS/OS open also returns all the
file's directory attributes.
Parameter table:

Pro DOS 8 Input

or

bet Symbolic Name Result
+0 numparms 1
+1 to +2 pathname I
+3to +4 iobufier R
+5 refnum R

Description

Number of parameters (3)
Pointer to the pathname string
Pointer to 1/0 buffer
Reference number for the file

GS/OS Input
or

O(rset Symbolic Name Result

+0to +1 pcount I
+2 to +3 refnum R
+4to +7 pathname I
+8to +9 requestaccess I
+ 10 to +11 resource~num I
+12 to +13 access R
+14 to +15 filetype R
+16 to +19 aux~type R
+20 to +21 storagetype R

Description

Number of parameters (15)
Reference number for the file
Pointer to the pathname string
Access permissions requested
Fork designator

Access code
File type code
Auxiliary type code
Storage type code

168 65/05 and ProDOS 8 Commands

+22 to +29 createtd R Creation time and date
+ 30 to + 37 modif' - td R Modification time and date
+ 38 to + 41 option - list R Pointer to option list
+42 to +45 eof R Size of the file
+46 to +49 blocksused R Blocks used by the file
+ 50 to + 53 resource - eof R Size of resource fork

+ 54 to + 57 resource - blocks R

Blocks used by resource fork

Important: You can usually open a closed file only. But, if a file is open, and its
write-enabled access code bit is not set (that is, you aren't allowed to write to it), it
may be opened more than once simultaneously.
Descriptions of parameters:

num parms The number of parameters in the ProDOS 8 parameter table (always 3).
pathname A pointer to a class 0 (ProDOS 8) or class 1 (65/05) string describ-
ing the pathname of the file to be used. If the pathname specified is
not preceded by a separator (/for ProDOS 8; / or : for 65/05), the
operating system appends the name to the default prefix (in 65/05,
this is the 0/ prefix) to create a full pathname.

io - buffer A pointer to a 1024-byte file buffer that the open file can use. The

low-order byte of this pointer must be $00. (That is, the buffer must
begin on a page boundary.)

The first half of the file buffer for a standard file contains a copy of
the current file data block being accessed; the second half contains
the current file index block. Only the first half of the buffer is used
for a directory file; it contains the current directory file block.

z ref_num The reference number ProDOS 8 or 65/05 assigns to the file. All file

operations on open files use this reference number (instead of a path-
name) to identi~ the file. The file level is set to the value of the system
file level. (For ProDOS 8, this value is stored at $BF94. For 65/05, use
GetLevel and SetLevel to read and set the system file level.)

pcount The number of parameters in the 65/05 parameter table. The min-
imum value is 2; the maximum is 15. If the file is for a character
device, the maximum value is only 3.

request - access This word describes the requested access permission:

bit 1 1 = request write access
bit 0 1 = request read access
bit 0 == request ~~8 ~CC~~~

Command Descriptions 169

You cannot request write access for files on a CD-ROM drive.
If this word is $0000, the access granted is the same as allowed

resource - num

the access - code word.

If the file is an extended file, this word tells 65/05 which fork
open:

$0000 open data fork
$0001 open resource fork

Note: The rest of the parameters in the 65/05 parameter list are the same as
returned by the GetFileInfo command.

Common error codes:

$40 The pathname contains invalid characters, or a full pathname was
specified (and no default prefix has been set up). Verify that
filenames and directory names specified in the pathname adhere
the naming rules described in Chapter 2 and, if a partial
was specified, that a default prefix has been set up.

$42 An attempt was made to open a ninth file. ProDOS 8 allows only
eight open files.

$44 A directory in the pathname was not found. Solution: Double-check
the spelling of the pathname, insert the disk containing the correct
directory, or change the default prefix.

$45 The volume directory was not found. Solution: Double-check the
spelling of the volutne directory name, insert the correct disk, or
change the default prefix.

$46 The file was not found.

$50 The file is open. You can open only files that are closed unless the
file is not write-enabled.

$56 The pathname buffer address is invalid because it has been marked
as in use in the ProDOS 8 system bit map. Speciiy a buffer address
that does not conflict with areas already used by ProDOS 8 or its file
buffers. Examine the system bit map to determine the free and
protected areas.

Other possible error codes are $04, $07, $27, $4A, $4B, $52.
Programming example:

The following 65/05 subroutine opens a file called SESAME that resides in the
subdirectory identified by 0/:

170 65/05 and ProDOS 8 Commands

_Open OP_Parms

BCS Error ;Branch if error occurred
RTS

OP_Parms DC 12 '2' Only need 2 parameters
05 2 ;ref_num returned here
DC 14' PathName' Pointer to pathname

PathName GSString 'SESAME' ;Filename

GS/OS returns an error code of $46 if the file you try to open does not yet exist.
Once you open a file, you should take the reference number Open returns and store it
in the parameter tables of other GS/OS commands which you might use to access the
file while it is open.

Command Descriptions 171

GS/OS ProDOS 8
Purpose:

To shut down GS/OS prior to a cold reboot or power down operation.
There is no equivalent ProDOS 8 command.
Parameter table:

CS/OS Input
or

O(rset Symbolic Name Result
+0 to + 1 pcount I
+2to +5 shutdown-flag I

Description

Number of parameters (1)
Pointer to next pathname

Descriptions of parameters:

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 1; the maximum is 1.

shutdown - flag The two low-order bits in this flag control the mechanics of the

shutdown operation:

bit 0 : 1 = GS/OS shuts down and system is rebooted

0 = 65/05 shuts down and the user is asked

to either reboot or power down

bit 1 1 = RAM disk is left intact upon reboot

0 = RAM disk is initialized upon reboot

Common error codes:
[none]

Comments:

When GS/OS shuts down it writes to disk any blocks in the disk cache, closes all new

z desk accessories, shuts down the Desk Manager, then disposes of all device drivers
and file system translators. The OSShutdown command should be used by program
selectors like the Finder, not applications.

172 GS/OS and ProDOS 8 Commands

Quit
$2029

GS/OS
Purpose:

To terminate the current application. Under ProDOS 8, control passes to the ProDOS
8 selector program or, if GS/OS was the boot operating system, to a system program
(ProDOS 8 or GS/OS) the application specifies. (The standard selector program asks
the user to enter the prefix and pathname of the next ProDOS 8 system program to run.)
Under GS/OS, the application can pass control to another system program (ProDOS 8 or
GS/OS) or return control to the application that called it (typically the Finder).
Parameter table:

ProDOS 8 Input

or

bet Symbolic Name Result Description

+ 0 num - parms I Number of parameters (4)
+1 qmttype I Quit type code
+ 2 to + 3 pathname I Pointer to next pathname

+ 4 [reserved] I
+5 to +6 [reserved] I

CS/OS Input
or

Oll'set Symbolic Name Result

+0to +1 pcount I
+2 to +5 pathname I
+6to +7 flags I

Descriptions of parameters:

Reserved area
Reserved area

Description

Number of parameters (2)
Pointer to next pathname
Return/Restart flags

numparms The number of parameters in the ProDOS 8 parameter table (always 4).
quit - type The ProDOS 8 quit type code. The only quit types currently defined

are $00 (standard quit) and $EE (quit to system program). Type $EE
may be used only if the system was first booted up under GS/OS.

Command Descriptions 173

pathname A pointer to the class 0 (ProDOS 8) or class 1 (GS/OS) pathname of
the next system program to run. The file type code of the program
must be $FF (ProDOS 8 system) or $B3 (GS/OS system). Note: The
pathname cannot reside in page 2 of memory since the QUIT com-
mand handler uses this area. For ProDOS 8, this field must be zero if
quittype is $00.

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 0; the maximum is 2.

flags The Quit option flags; only bits 15 and 14 are significant. If bit 15 is
1, the program's UserID is to be placed on the Quit Return Stack so
that the program can be restarted later. If bit 14 is 1, the program is
capable of being restarted from memory.

Note: The reserved areas in the ProDOS 8 parameter table must be zeroed before
calling the QUIT command.
Common error codes:

$46 The file with the specified pathname was not found.
$5C The file with the specified pathname is not an executable program.
The pathname must be a ProDOS 8 system program (file type $FF)
or a GS/OS system program (file type $B3).

$5D The specified pathname represents a ProDOS 8 system program, but
the P8 system file (which contains the ProDOS 8 operating system)
is not present in the SYSTEM/ subdirectory of the GS/OS boot disk.

$5F The Quit Return Stack has overflowed. This stack can hold only 16
entries.

Other possible error codes are $04, $07, $40, $5E.
Programming example:

All well-designed system programs use QUIT to exit so that control can pass to
another system program. Here is the usual calling sequence from a ProDOS 8

application:

JSR ML1
DFB $6$

DA PARMTBL
BCS ERROR
RTS

PARMTBL DFB 4
DFB 0

QUIT

;Address of parameter table
Branch if error occurred

The number of parameters
Quit type code

174 GS/OS and Pro DOS 8 Commands

DA $0000
DFB 0

DA $0000

When you execute a QUIT command with a quit type of $00, ProDOS 8 moVes the
code residing at $D100-$D3FF in the second 4K bank of bank-switched RAM (called
the selector code or dispatcher code) to location $1000 in main memory and then
executes a JMP $1000 instruction.

When the standard ProDOS 8 selector (the one defined inside the PRODOS file)
takes over, it performs the iollowing steps:

z It asks you to enter the prefix and name of the next system program to be
executed.

z It stores the length of the name of the system program at $280, followed by the
ASCII-encoded name itself.

z It closes all open files.

z It clears the ProDOS 8 system bit map and marks as in use zero page, the stack
(page 1), the video RAM area (pages 4-7), and the ProDOS 8 global page (page
$BF).

z It enables the 4O-column screen and connects the standard input (keyboard) and
output (video) subroutines. (You can do this in your own selector program by
executing the following group of instructions:

LDA $C082 Read-enable monitor ROM
STA $C000 ;Turn off 8OSTORE
STA $CO0E ;Turn off alternate char. set
STA $COOC Turn off 80 columns
JSR SETNORM ;$FE84: normal-video characters
JSR INIT ;$FB2F: full-screen text mode
JSR SETKBD ;$FE89: connect keyboard
JSR SETVID ;$FE93: connect 40-column video

The writes to the $C000, $C00E, and $C00C soft switches don't do anything on
an Apple II Plus but are required for a lIe, tIc, or tIcs to ensure the system
switches to standard 4O-column mode. Note that the Monitor ROM must be
read-enabled before calling the SETNORM, INIT, SETKBD, and SETVID sub-
routines because it will have been disabled when the selector first takes over.)

z It loads the specified system program at $2000 and starts executing it by jumping
to that location.

You can also install your own ProDOS 8 selector code if you wish. If you do, it must
:~ with a CLD instruction and it must perform the steps indicated above.
4-5 shows an alternative selector program that follows the above steps. To
the new selector at $D100 (bank2), BRUN the program file from disk. This
is not interactive since it always passes control to the same system program:

Command Descriptions 175

Table 4-5 A ProDOs 8 selector program

2 ******~~~*~~~~~~~~~~~~~~~~~~~~~~~~~~~~

3
4
$
6
7
8
9

10
11
12
13
14
1$
16
17
18
19
20
21
22

23 _
24
2$
26
27
28
29

30 11STORE80 EQU
31 COL8O0FF EQU
32 XALTCHAR EQU
33

SSPACE EQU

INIT EQU
HOME EQU
SETNORM EQU
SETKBD EQU
SETVID EQU
0RG

$C0O0 ;Enable normal page2 switching
$COOC ;Turn off 80-column hardware
$CO0E Disable MouseText characters

$0100 Selector space (in bank2)
$FB2F Set full-screen text mode
$FC$8 Clear the screen
$FE84 Set normal video
$FE89 ;Connect keyboard driver
$FE93 ;Connect video driver

$2000



LDA $CO81

LDA $C081 ;Write-enable bank2 BSR

176 GS/OS and Pro DOS 8 Commands

Table 4-5 Continued

2006: A2 00 $0 LDX
2008: BD 1$ 20 $1 MOVEC0DE LDA
20OB: 9D 00 01 $2 STA
200E: E8 $3 INX
200F: DO F7 $4 BNE

2011: AD 82 CO $6 LDA

$7

2014:60 $8 RTS
$9

60 SELECTOR EQU

#0

SELECTOR,X Move the new code
SSPACE,X to its proper place

M0VEC0DE

$C082 Write-protect BSR

61

62 * Here is the actual selector code:
63

64 ORG $1000
6$

1000: 08 66 CLD (Required by ProDOS)

67

68 Get into plain vanilla 40-column mode:
69

1001: AD 82 CO 70 LDA $CO82 Read-enable monitor ROM

71

1004: 8D 0C CO 72 STA COL8O0FF 40-column screen
1007: 80 OE CO 73 STA XALTCHAR No MouseText
100A: 80 00 CO 74 STA XSTORE80 Normal page2 switching

7$

1000: 20 84 FE 76 JSR SETNORM ;Normal video
1010: 20 2F FB 77 JSR INIT Full text window
1013: 20 93 FE 78 JSR SETVID Standard video output
1016: 20 89 FE 79 JSR SETKB0 Standard keyboard input
1019: 20 $8 FC 80 JSR HOME Clear the screen

81
101C: 20 00 BF 82 JSR MLI

z 101F: C6 83 0F8 $C6 Set a null prefix
1020: BE 10 84 0A PFX_PRMS

8$

1022: 20 00 BF 86 JSR MLI

z 102$: C$ 87 DFB $C$ ;ONLINE for the boot volume
1026: 9A 10 88 0A 0L PARMS
1028: B0 38 89 BCS ERROR

90

102A: AD 9E 10 91 L0A NAMELEN Get returned length
1020: 29 OF 92 AND #$0F Strip slot, drive bits
102F: F0 31 93 BEQ ERROR If zero, then error

1031: 80 9E 10 94 STA NAMELEN

9$

96 Put prefix at $281:
97

1034: A9 2F 98 LDA

Store length

;Start prefix with slash
Command Descriptions 177

Table 4-5 Continued

1036: 8D 81 02 99 STA PATHNAME+1

100

1039: A2 00 101 LDX #0
103B: BD 9F 10 102 PUTNAME LDA V0L_NAME,X
103E: 9D 82 02 103 STA PATHNAME*2,X
1041: E8 104 INX
1042: EC 9E 10 10$ CPX NAME_LEN
104$: DO F4 106 BNE PUTNAME

107

1047: A9 2F 108 LDA #'/ ;End prefix with slash
1049: 9D 82 02 109 STA PATHNAME+2,X
104C: E8 110 INX

111

112 * ... and then tack on the BASIC.SYSTEM filename:
113

1O4D: AO 00 114 LDY #0
104F: B9 C3 10 11$ PUTSYS LDA SYS_NAME,Y
10$2: FO 07 116 BEQ SAVELEN ;Done if zero
1O$4: 90 82 02 117 STA PATHNAME+2,X
10$7: E8 118 INX
1O$8: C8 119 INY

10$9: DO F4 120 BNE PUTSYS (Al ways taken)

121

10$B: E8 122 SAVELEN INX ;Add 1 for initial slash
1O$C: 8E 80 02 123 STX PATHNAME Store length before pathname

124

10$F: 4C 6$ 10 12$ JMP RUN_SYS

126

1062: 4C 62 10 127 ERROR JMP ERROR

128

106$: 20 00 BF 129 RUN_SYS JSR MLI

1068: C8 130 DFB $C8 Open system file
1069: AE 10 131 DA OP_PARMS
106B: BO F$ 132 BCS ERROR

133

1060: AD B3 10 134 LDA REFNUM

1070: 80 B$ 10 13$ STA REFNUM1 Store ref # in READ table

136

1073: 20 00 BF 137 JSR MLI

1076: CA 138 DFB $CA ;Read system file
1077: B4 10 139 0A RD_PARMS
1079: BO E7 140 BCS ERROR

141

107B: 20 00 BF 142 JSR MLI

1O7E: CC 143 DFB $CC ;Close system file
107F: BC 10 144 0A CL_PARMS
1081: BO OF 14$ BCS ERROR

146

147 Initialize the system bit map:

178 GS/OS and ProDOS 8 CommandsTable 4-5 Continued

148

1083: A9 CF 149 LDA #$CF ;Pages 0,1,4. .7 in use
108$: 8D $8 BF 1$0 STA BITMAP

1$1

1088: A9 00 1$2 LDA #0
108A: A2 16 1$3 LDX #22
108C: 9D $8 BF 1$4 INITMAP STA BITMAP,X ;Pages 8. .$BE free
1O8F: CA 1$ DEX
1090: DO FA 1$6 BNE INITMAP

1$7

1092: A9 01 1$8 LDA #1 Page $BF in use
1094: 8D 6F BF 1$9 STA BITMAP+23

160

1097: 4C 00 20 161 JMP

162

SYS_LOAD Execute system file

164

109A: 02 16$ OL_PARMS DFB 2

109B: 60 166 DFB SLOT*16 ;Boot slot 16

163 0NLINE parameter table:

1O9C: 9E 10 167 DA

168

1O9E: 00 169 NAME_LEN DS
1O9F: 00 00 00 170 VOL_NAME DS
1OA2: 00 00 00 00 00 00 00 00
10AA: 00 00 00 00

171
172
173

10AE: 03 174 _
lOAF: 80 02 17$
10B1: 00 11 176
10B3: 00 177

178
179
180

10B4: 04 181 _
1OB$: 00 182
1OB6: 00 20 183
10B8: FF FF 184
1OBA: 00 00 18$

186
187
188

10BC: 01 189 _
10BD: 00 190

191

10BE: 01 192 _
10BF: C1 10 193

194

NAME_LEN Pointer to len+name

_ 1 ;Length (bits 0. .3)
_ 1$ Volume name


OP_PARMS DFB 3

DA PATHNAME
DA FILEBUFF
DS 1

REFNUM


RD_PARMS DFB 4
REFNUM1 DS 1
DA SYS_LOAD
OW $FFFF
OW $0000

CLOSE parameter table:
CL_PARMS DFB 1
DFB 0

PFX_PRMS DFB 1
0A PFXNAME

;Pointer to pathname
File reference number

Start of load buffer
;(Enough for entire file)

;All files

Command Descriptions 179

Table 4-5 Continued

10C1: 01 19$ PFX_NAME DFB 1
10C2: 2F 196 ASC '/'

197

10C3: 42 41 $3 198 SYS_NAME ASC 'BASIC.SYSTEM' ;Name of system program

10C6: 49 43 2E $3 $9 $3 $4 4$
10CE: 40

10CF: 00 199 DFB

0 ,... followed by zero

BAStC.SYSTEM in the volume directory of the slot 6, drive 1 disk device. However,
this is the program that many users of ProDOS 8 will always want to select after
leaving other system programs. From BAStC.SYSTEM, you can use the - (dash)
command to execute any other system program.

In certain situations, your selector code may be permitted to pass the name of a file to the
system program it selects so that the system program can work with it when it first starts
up. For example, you can pass the name of an Applesofi program to BAStC.SYSTEM, and
BAS1C.SYSTEM will run it as soon as its starts up. (If the selector does not pass a name,
BAStC.SYSTEM runs the STARTUP program.) For the system program to accept a
filename, it must adhere to a special anto-rvn protocol that we look at in Chapter 5.
If you are using a ttcs and you ran the ProDOS 8 application after booting GS/OS,
you can take advantage of quit - type $EE to pass control from a ProDOS 8 applica-
tion directly to a ProDOS 8 or GS/OS system program without going through the
selector code. All you have to do is place a pointer to the program's pathname in the
QUIT parameter list. These programs have file type codes of $FF (SYS) and $B3
(516), respectively. GS/OS was the bootup operating system if value at location
$E100BD is $01.

CS/OS considerations:

Under GS/OS, an application can use the Quit command to either pass control to a
specific system program (ProDOS 8 or GS/OS) or return control to the system
program whose UserID is on the top of a Quit Return Stack. (GS/OS assigns a unique
UserID to a system program when it starts up the program.)

The Quit Return Stack is where an application places its UserID if it wishes to regain
control the next time an application quits without speciiying the pathname of the next
application to run. The availability of a Quit Return Stack makes it easy for a
supervisory program to execute subsidiary programs so that control always eventually
returns to the original program. tn fact, the tIcs Launcher or Finder always pushes its
UserID on the Quit Return Stack before launching an application. If it did not, you
would not return to it when an application ended.

180 GS/OS and ProDOS 8 Commands

If the pathname pointer is 0, and the Quit Return Stack is not empty, GS/OS pulls a
UserID from the Quit Return Stack and executes the program with that ID. If the
Quit Return Stack is empty, GS/OS executes the program launched when the system
was booted.

Only the two high-order bits of the flags parameter are significant. If bit 15 is 1,
GS/OS places the current application's UserID on the Quit Return Stack before
passing control to the application described by the pathname pointer. This means
eontrol eventually will return to the current application as later programs quit with a
0 pathname parameter. If bit 15 is 0, nothing is placed on the Quit Return Stack.
If bit 14 of the flags is 1, the calling program is capable of being restarted without
being reloaded from disk. (Programs that initialize all their data areas when they start
up should be restartable.) If control returns to the calling program, the program will
not be loaded from disk unless it has been purged from memory by the tIcs Memory
Manager.

Command Descriptions 181

READ

$CA

GS/OS ProDOS 8
Purpose:

To read bytes of data from an open file beginning at the current Mark position. After
the read operation, the operating system increases Mark by the number of bytes read
from the file. The read operation ends when the specified number of bytes have been
transferred, when a newline character is encountered, or when the end of the file has
been reached.

Parameter table:

ProDOS 8 Input

or

O]fret Symbolic Name Result Description

+ 0 num - parms I Number of parameters (4)

+ 1 ref num I
+2 to +3 data~bufler I
+4to +5 request-count I
+6to +7 transfercount R

Reference number for file

Pointer to start of data buffer
Number of bytes to read
Number of bytes actually read

GS/OS
O(fret

+ 0 to + 1
+ 2 to + 3
+4 to +7
+8to +11
+ 12 to + 15
+ 16 to + 17

Input
or

Symbolic Name Result

pcount I
refnum I
databufler I
request count I
transfer count R
cache priority I

182 GS/OS and ProDOS 8 Commands'

Description

Number of parameters (5)
Reference number for file
Pointer to start of data buffer
Number of bytes to read

Number of bytes actually read
Block caching priority level

Descriptions of parameter5;

num - parms The number ofparameter5 in the ProDOS 8 parameter table (always 4).
ref_num The reference number ProDOS 8 or GS/OS assigned to the file when
it was first opened.

data - buffer A pointer to the beginning of a block of memory into which file data is

to be read. The size of the buffer must be request - count characters.
request - count The number of characters to be read from the file and placed in the

buffer pointed to by data buffer.

transler count The number of characters actually read from the file. It usually equals

request - count, but it will be less if the operating system reaches the
end of the file or if newline read mode is active and a newline character
is read. See the discussion of the NewLine command.

pcount The number of paramete~5 in the GS/OS parameter table. The min-
imum value is 4; the maximum is 5 (or 4 if the file is a character file).
cache priority This code indicates how GS/OS is to handle the caching of disk

blocks related to the read operations

$0000 do not cache blocks
$Oooj cache blocks

This field is not used for character devices.
Common error codes:

$43 The file reference number is invalid. You might be using a reference
number for a file that you've already closed.

$4C The end-of-file position has been reached. Solution: Stop reading
from the file. Note that ProDOS 8 or GS/OS flags this error only if
no bytes were read from the file. (That is, transier count is 0.)

$4E The file cannot be accessed. Solution: Set the read-enabled bit of the
file's access code to 1 using SET FILE - INFO.

$56 The pathname buffer address is invalid because it has been marked
as in use in the ProDOS 8 system bit map. Specily a buffer address
that does not conflict with areas already used by ProDOS 8 or its file
buffers. Examine the system bit map to determine the free and
protected areas.

Other possible error codes are $04, $07, $27.

Programming example:

The following GS/OS subroutine reads up to $1000 bytes from open file #1 into the
block of memory beginning at Buffer. As usual, the reading operation begins at the
current Mark position in the file. By making repeated calls to the program, further
$1O00-byte blocks of the file can be read.

Command Description5 183

Read RDParns

BCS Error Branch if error occurred
RT5

RDParms DC 12 '4' ;Parameter count
DC 12']' ;File reference number
DC 14' Buffer' ;Pointer to data buffer
DC 14' $1000' ;Number of bytes to read

TransCnt 05 4 ;# of bytes actually read

Buffer 05 $1000 ;Data buffer

After every call to this subroutine, you must examine the 4-byte number at TransCnt
to determine how many bytes were actually read. This number may be less than $1000
if GS/OS reaches the end-of-file position part way through the reading operation or il
it encounters a newline character. (See the discussion of the NewLine command for
information on newline characters.)

If the Read command returns error code $4C ("end of file"), no bytes were read, and
you can close the file.

184 GS/OS and Pro DOS 8 Commands

none
GS/OS

Purpose:

To transfer one block (512 bytes) of information from an Apple-formatted disk device
to a buffer in memory.

Under GS/OS, use the DRead command instead.
Parameter table:

ProDOS 8 Input

or

Ol'set Symbolic Name Result Description

+0 num - parms I Number of parameters (3)
+1 unitnum I Unit number

+2 to + 3 data - buffer R
+4to +5 blocknum I

Pointer to the data input buffer
Number of block to be read from

Warning: Do not use READ - BLOCK if you want your application to work with an
AppleShare file server volume over AppleTalk.

Descriptions of parameters:

numparms The number of parameters in the ProDOS 8 parameter table (always 3).

unit - num

databufler

The slot and drive number for the disk drive to be accessed. The
format of this byte is as follows:

ProDOS 8 assigns a drive number of 1 or 2 to each drive in the
system. DR = 0 for drive 1, and DR = 1 for drive 2. SLOT is
usually the actual slot number for the disk controller card (1-7
decimal; 001-111 binary) but may be the number of a phantom, or
logical, slot.

The unit - num value for the /RAM volume is $B0, meaning it is the
logical slot 3, drive 2 device.

A pointer to the beginning of a 512-byte block of memory that is to
hold the contents of the specified block when READ - BLOCK
successfully completes.

Command Descriptions 185

block - num The number of the block to be read. The permitted values for

block - num depend on the disk device:

z 0-279 for 5.25-inch drives
z 0-1599 for 3.5-inch drives
z 0-127 for the ProDOS 8 /RAM volume

You can determine the volume size for a device using the GET -
FILE - INFO command and specifying the name of the volume
directory for the disk in the device. The size (in blocks) is returned at
relative positions $5 and $6 in the parameter table.

Common error codes:

$27 The disk is unreadable, probably because a portion of the disk
medium is permanently damaged. This error also occurs if the drive
door on a 5.25-inch drive is open or no disk is in the drive.

$28 No device connected. This error comes back if you do not have a
second 5.25-inch drive connected to the drive controller, but you try
to access it.

Other possible error codes are $04, $07, $11, $2F, $53, $56.
Programming example:

READBLOCK is one of two low-level disk-access commands ProDOS 8 provides.
(WRITE - BLOCK is the other.) Use it to read any block on a ProDOS-formatted disk,
whether it be a file data block, index block, directory block, or a boot record block.
You can also use READ - BLOCK to read any sector on a DOS 3.3-formatted disk.
See Appendix II for suggestions on how to do this.

Here's a short ProDOS 8 program that reads into memory the volume bit map block
(block 6) on a 5.25-inch disk in slot 6, drive 1 and then calculates the number of free
blocks on the disk:

JSR MLI
DFB $80

DA PARMTBL
BCS ERROR

LDA #0

STA COUNTER
STA COUNTER+1

LDY #34

NEXTBYTE LDA BLKBUFF,v
LDX #8

TESTBIT LSR
BCC NEXTBIT

;READ_BLOCK

;Address of parameter table
Branch if error occurred

Zero the counter

;Bit map bytes from 0 to 34
Get next bit in volume bit map

8 bits to test

Put next bit into carry
;Branch if block not free

186 GS/OS and ProDOS 8 Commands

INC COUNTER

BNE NEXTBIT ;Branch if not past 2$
INC COUNTER+1 ... else bump high part

flEXTBIT DEX ;Decrement bit counter
BNE TESTBIT Branch if not done

DEY

BPL NEXTBYTE
RTS

PARMTBL DFB 3
DFB $60

DA BLKBUFF
DW 6

BLKBUFF DS $12
COUNTER DS 2

;Move to next byte
;Branch if not done

;The # of parameters

;unit number code (slot 6, drive 1)
;Pointer to $12-byte buffer
Block number for volume bit map

;This is the block buffer

of free blocks stored here

Recall from Chapter 2 that the first 280 bits (35 bytes) in the volume bit map act as

usage flags for the 280 blocks on a standard disk. If the bit is 1, the block is not in use;
if it is 0, it is. This program simply scans through these 35 bytes and counts the
number of 1 bits. The 2-byte result is stored in COUNTER and COUNTER + 1.

Command Descriptions 187

RENAME

$C2

GS/OS ProDOS 8
Purpose:

To change the name of a file on disk.
Under GS/OS, use the ChangePath command instead.
Parameter table:

ProDOS 8 Input

or

O(fret Symbolic Name Result
+0 numparms I
+1to +2 currname I
+3to +4 newname I

Descriptions of parameters:

Description

Number of parameters (2)
Pointer to current pathname
Pointer to new pathname

num - parms The number of parameters in the ProDOS 8 parameter table (always 2).
currname A pointer to a class 0 ProDOS 8 string describing the current
pathname of the file to be renamed. If the pathname specified is not
preceded by a separator (/), the operating system appends the name
to the default prefix to create a full pathname.

new name A pointer to a class 0 ProDOS 8 string describing the new pathname

for the file. If the pathname specified is not preceded by a separator
(/), the operating system appends the name to the default prefix to
create a full pathname. The new - name must be the same as curr
- name except for the filename itself. (That is, it must describe a file
in the same directory.) For example, you can rename a file called
/FOOTBALL/CANADA/BC.LIONS

/FOOTBALL/CANADANANCOUVER.LIONS but not as
/FOOTBALL/USA/DETROIT.LIONS.
Common error codes:

$2B The disk is write-protected.

$40 The pathname contains invalid characters, or a full pathname was not
specified (and no default prefix has been set up). Verif' that the
filenames and directory names specified in the pathname adhere to

188 GS/OS and ProDOS 8 Commands

the naming rules described in Chapter 2 and, if a partial pathname
was specified, that a default prefix has been set up.

$44 A directory in the pathname was not found. Solution: Double-check
the spelling of the pathname, insert the disk containing the correct
directory, or change the default prefix.

$45 The volume directory was not found. Solution: Double-check the
spelling of the volume directory name, insert the correct disk, or
change the default prefix.

$46 The file was not found.
$47 The new filename specified already exists.
$4E The file cannot be accessed. Solution: Set the rename-enabled bit of
the file's access code to 1 using SETH FILE - INFO.

$50 The file is open. You can rename only closed files.
Other possible error codes are $04, $27, $4A.
Programming example:

Here is a subroutine that will change the name of a file called BATMAN in the
/SUPER.HEROES volume directory to a file called BRUCE.WAYNE in the same
directory.

JSR MLI

DFB $C2
DA PARMS
BCs ERROR
RTS

PARMS DFB 2
DA PATH]
DA PATH2

RENAME code

;Address of parameter table
,;Rra.nr,h f ,,"- ~',,,r:v'

2 parameters

Pointer to current pathname
Pointer to new pathname

PATH] STR '/SUPER.HEROES/BATMAN' Old pathname
PATH2 STR '/SUPER.HEROES/BRUCE.WAYNE' ;New pathname

Note that you cannot rename /SUPER.HEROES/BATMAN as /IDENTITIES/BRUCE.
WAYNE because this would violate the rule that the two pathnames must identifi' files in
the same directory.

Command Descriptions 189

none

GS/OS ProDOS 8
Purpose:

To force an immediate resizing of the GS/OS disk cache using the size value stored in
Battery RAM. (Battery RAM holds system configuration and preferences information
even when the Apple IIcs has been turned off.)

There is no equivalent ProDOS 8 command.
Parameter table:

GS/OS Input
or

O(fret Symbolic Name Result
+0to +1 pcount I
Descriptions of parameters:

Description

Number of parameters (0)

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 0; the maximum is 0.

Common error codes:
[none]

Comments:

A program can use the Miscellaneous Tool Set's WriteBParam function to change the
size of the GS/OS disk cache, as follows:
PushWord #newCacheSize

PushWord #$OO81 ;Parameter reference number

LDX #$0B03 ;WriteBParam
JSL $E10000

The newCacheSize value represents the size of the cache (in K units) divided by 32.
This means, for example, that you would use a value of4 to set up a 128K cache. You
can only set the cache size to a multiple of 32K.

The new cache size setting usually doesn't take effect until the system is rebooted. If the
program calls ResetCache, however, the change takes effect immediately. Utility pro--
grams like the Disk Cache desk accessory on the GS/OS system disk use ResetCache.

190 CS/OS and ProDOS 8 CommandsSessionStatus

$201F ___________________

GS/OS ProDOS 8
Purpose:

To determine whether a write-deferral session (initiated with a BeginSession com-
mand) is in progress.

There is no equivalent ProDOS 8 command.
Parameter table:

GS/OS Input
or

Descriptions of parameters:

O(fret Symbolic Name Result
+0to +1 pcount I
+2to +3 status R

Description

Number of parameters (1)
Status code

pcount The number of parameters in the GS/OS parameter table. The min

imum value is 0; the maximum is 1.

status This code indicates whether a write-deferral session is in progress:

$0000 write-deferral session not in progress
$0001 write-deferral session in progress

Common error codes:
[none]

Comments:

Write-deferral sessions are useful for accelerating file transfer operations. You can

begin such a session with BeginSession and end it with EndSession. SessionStatus
tells you whether a session is currently in progress.

Command Descriptions 191

SET BUT
$D2

GS/OS ProDOS 8
Purpose:

To move the ProDOS 8 file buffer for an open file from its current position to another
1024-byte area in memory.

There is no equivalent GS/OS command. GS/OS takes care of all buffer-management

operations internally.
Parameter table:
ProDOS 8

bet Symbolic Name
+0 num~parms
+1 refnum
+2 to +3 iobufler

Descriptions of parameters:

Input
or

Result Description

I Number of parameters (2)
I Reference number for the file
I Pointer to 1/0 buffer

num - parms The number of parameters in the ProDOS 8 parameter table (always 2).
ref num The reference number ProDOS 8 assigned to the file when it was

first opened.

io - buffer

A pointer to the new 1024-byte area to which the file's current buffer
is to be transferred. The low-order byte of this pointer must be $00
(that is, the buffer must begin on a page boundary).

Common error codes:

$43 The file reference number is invalid. You might be using a reference
number for a file that you've already closed.

$56 The pathname buffer address is invalid because it has been marked
as in use in the ProDOS 8 system bit map. Speciiy a buffer address
that does not conflict with areas already used by ProDOS 8 or its file
buffers. Examine the system bit map to determine the free and
protected areas.

Another possible error code is $04.

192 GS/OS and ProDOS 8 Commands

Programming example:

The following ProDOS 8 program will move the file buffer for file 1 from its current
position to $2000. You are responsible for ensuring that the area $200~$23FF will
not be used for any other purpose.

JSR MLI

DFB $D2
DA PARMTBL
BCS ERROR
RTS

PARMTBL DFB 2
DFB 1

DA $2000

;SET_BUF

;Address of parameter table
;Branch if error occurred

The # of parameters
;File reference number
Pointer to new buffer

Command Descriptions 193

SET~EOF

$D0

GS/OS ProDOS 8
Purpose:

To change the current end-of-file pointer (EOF) of an open file. If you reduce EOF,
all data blocks past the end of the new EOF are freed up; if you increase EOF,
however, ProDOS 8 and GS/OS do not allocate new blocks for the file until you
actually write data to the new part of the file. If the new EOF is less than Mark, Mark
is set equal to the new EOF. You can change the EOF of any file whose write-enabled
access code bit is set to 1.

Parameter table:
Pro DOS 8

O(fret Symbolic Name

+0 numparms
+ 1 refnum
+2 to +4 eof

Input
or

Result Description

I Number of parameters (2)
I Reference number for the file
I The new end-of-file position

GS/OS

Input
or

bet Symbolic Name

+ 0 to + 1 pcount
+2 to +3 refnum
+4to +5 base
+6to +9 displacement

Result Description

I Number of parameters (3)
I Reference number for the file
I

Code for determining new eof

I The new end-offile position

Descriptions of parameters:

num - parms The number of parameters in the ProDOS 8 parameter table (always 2).
ref num The reference number ProDOS 8 or GS/OS assigned to the file when

it was first opened.

eof The new EOF position.

194 GS/OS and ProDOS 8 Commands

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 3; the maximum is 3.

base This code tells GS/OS how to determine the new value for the
end-of-file pointer:

$0000 new E0F = displacement
$0001 new EOF = old EOF + displacement
$0002 new E0F = Mark + displacement
$0003 new EOF = Mark - displacement

displacement GS/OS uses this value in conjunction with the base code to deter-
mine the new value for the end-of-file pointer.
Common error codes:

$2B The disk is write-protected.

$43 The file reference number is invalid. You might be using a reference
number for a file that you've already closed.

$4D The position is out of range.
$4E

The file cannot be accessed. Solution: Set the write-enabled bit of

the file's access code to 1 using SET FILE - INFO.
Other possible error codes are $04, $07, $27, $4E.
Programming example:

Consider a situation in which you must read an entire file into memory, modifi' it, and
then write it back to the same file. If you are not careful, and the new file is smaller
than the original, the tail end of the old file (the part not overwritten) will unexpect-
edly remain as part of the new file.

To avoid this, you can do one of two things: Delete the file before rewriting it, or write
to the file and then use the SetEOF command to fix the new EOF position. The
second method is faster and more convenient because it is not necessary to go to the
trouble of first deleting, and then re-creating, a file.

Suppose the new file length is $1534 bytes. To set the EOF fur this file, you would
call a GS/OS subroutine like this:

LDA

STA _
LDA
STA

_SetE0F EOF_Parms
BCS Error
RTS

#$1$34 Set up new EOF value
New_E0F
#$0OO0
New EOF+2

;Branch if error occurred

Command Descriptions 195

E0F_Parms DC 12'3' ;The # of parameters
DC 12']' File reference number
DC 12'O' ;E0F = displacement

New_EOF DS 4 ;New E0F position

196 CS/OS and ProDOS 8 Commands

SetFileInfo
$2005

GS/OS ProDOS 8
Purpose:

To modifi' the information stored in a file's directory entry. This includes the access code,
file type code, auxiliary type code, and the date and time the file was last modified.

Parameter table:

ProDOS 8 Input

or

O[fret Symbolic Name Result
+0 num~parms I
+1 to +2 pathname I
+3 access I
+4 file-type I
+5to +6 anxtype I
+7 [not used] I
+8to +9 [not used] I
+10 to +11 modifi'date I
+ 12 to +13 modi~~time I

Description

Number of parameters (10)
Pointer to the pathname string
Access code
File type code
Auxiliary type code

Modification date
Modification time

GS/OS

O(rset Symbolic Name
+0to +1 pcount
+2to +5 pathname
+ 6 to + 7 access
+8to +9 file-type
+10 to +13 anxtype
+ 14 to + 15 [not used]

Input
or

Result

I
I
I
I
I
I

Description

Number of parameters (12)
Pointer to the pathname string
Access code
File type code
Auxiliary type code

Command Descriptions 197

+ 16 to +23 createdt I Creation date and time
+24 to +31 modiiydt I Modification date and time
+ 32 to + 35 option - list I Pointer to option list
+36 to +39 [not used] I
+40 to +43 [not used] I
+44 to +47 [not used] I
+48 to +51 [not used] I

Descriptions of parameters:

num - parms The number of parameters in the ProDOS 8 parameter table (always fl.

pathname A pointer to a class 0 (ProDOS 8) or class 1 (GS/OS) string describ-
ing the pathname of the file to be used. If the pathname specified is
not preceded by a separator (/fur ProDOS 8; / or : for GS/OS), the
operating system appends the name to the default prefix (in GS/OS,
this is the 0/ prefix) to create a full pathname.

access This field contains several 1-bit codes that define the access at-
tributes of the file. See Figure 2-10 for a description of these bits.
Note, however, that under GS/OS you cannot clear the backup-
needed attribute with SetFileInfo; use the ClearBackup command
instead. Under ProDOS 8, you can clear the bit but only if you first
store $FF at BUBIT ($BF95) in the ProDOS 8 system global page.
Backup programs should clear this attribute to indicate that the file
has been backed up.

filetype This code indicates the type of data the file holds. See Table 2-5 for
a description of ProDOS file type codes. Under the ProDOS FST, 1
only the low-order byte of file - type is significant.

aux - type This is the auxiliary type code. The meaning of the code depends on

the file type code and on the program that created the file in the first
place. For SYS, BIN, BAS, and VAR files, it is a default loading
address; for TXT files, it is a record length; for SRC files, it is an
APW language type code. Under the ProDOS FST, only the low--
order word is significant.

[Not Used] These bytes are not used. They act as padding to preserve symmetry be-
tween this parameter list and the GET FILE - INFO parameter list.

198 GS/OS and ProDOS 8 Commands

modify - date This field contains the date (year, month, day) the file was last modified.

The current date should be stored here before executing the command.
Figure 8-1 in Chapter 8 shows the format of these bytes.

modify - time This field contains the time (hour, minute) the file was last modified.

The current time should be stored here before executing the com-
mand. Figure 8-1 in Chapter 8 shows the format of these bytes.
create - date This field contains the date (year, month, day) the file was created.

Figure 8-1 in Chapter 8 shows the format of these bytes.
create - time This field contains the time (hour, minute) the file was created.

Figure 8-1 in Chapter 8 shows the format of these bytes.

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 2; the maximum is 12.

create - td The time and date of creation. These eight bytes represent the

following parameters in the following order:

seconds
minutes

hour in 24-hour military format
year year minus ]90O
day day of month minus
month 0 = January, ] = February, and so on
[not used]

weekday ] = Sunday, 2 = Monday, and so on

Note: This format is the same as the one used by the ReadTimeHex function in the
IIcs's Miscellaneous Tool Set but is different from the one used in a standard file
entry for the ProDOS file system.

modify - td The time and date of last modification. The ordering of these 8 bytes

is the same as for create - time.

option - list A pointer to a class 1 input buffer containing information unique to

the file system translator used to access the file. The ProDOS FST
does not require any such information.

Note: The parameters marked by [not used] must be set to zero.
Common error codes:

$2B The disk is write-protected.

$40 The pathname contains invalid characters, or a full pathname was not
specified (and no default prefix has been set up). Veri(y that the
filenames and directory names specified in the pathname adhere to
the naming rules described in Chapter 2 and, if a partial pathname
was specified, that a default prefix has been set up.

Corntnand Descriptions 199

$44 A directory in the pathname was not fuund. Solution: Double. -
the spelling of the pathname, insert the disk containing the
directory, or change the default prefix.

$45 The volume directory was not found. Solution: Double-check
spelling of the volume directory name, insert the correct disk
change the default prefix.

$46 The file was not found.

$4E The access code specified for the file is not permitted. Sc
Ensure that the reserved bits of the access code are all zero.

Other possible error codes are $04, $07, $27, $4A, $4B, $52, $53, $58.
Programming example:

The following ProDOS 8 program will lock a file called PRISONER by changing *L
value of its access code byte. It is assumed that PRISONER is located in the cur
active directory (the one specified by the default prefix).

LDA #10

STA PARMTBL
JSR MLI
DFB $C4

DA PARMTBL
BCS ERROR

LDA PARMTBL+3
AND #$3D

STA PARMTBL+3
LDA #7

STA PARMTBL
JSR MLI
DFB $C3

DA PARMTBL
BCS ERROR
RTS

PARMTBL DS 1
DA PATHNAME
DS 1
DS 1
DS 2
DS 1
DS 2
DS 2
DS 2
DS 2

Store # of parms for GET_FILE_INFO
;GET_FILE_INFO

;Address of parameter table
Branch if error occurred

Get current access code
;Clear bits 1, 6, and 7 (write,

rename, and destroy bits)
Store new access code

Store # of parms for SET_FILE_INFO
Save new access code to disk
;SET_FILE_INFO

Address of parameter table
;Branch if error occurred

;The # of parameters is stored here
;access code
;file type code

auxiliary type code
;storage type code
;blocks used

;date of modification
;time of modification
;date of creation

200 GS/OS and Pro DOS 8 Commands

DS 2 ;time of creation

PATHNAME STR 'PRISONER'

;Pathname (in ASCII)

There are two interesting things to note about this program. First, it uses the
GET - FILE - INFO command to read the file's current access code and other
directory information. Since the parameter table fur this command and the SET -
FILE - INFO command are symmetric, there is no need to create two tables; all that
has to be done is store the proper parameter number at the head of the table before
calling each command.

Second, notice how the file is locked. The existing access code is logically ANDed
with $3D (binary 00111101) to clear bits 1, 6, and 7 to zero while leaving the others
unaffected. As Figure 2-10 in Chapter 2 indicates, clearing these bits will disable
write, rename, and destroy operations, respectively.

Command Descriptions 201

none

GS/OS ProDOS 8
Prroose:

To set the system file level.

There is no equivalent ProDOS 8 command. To change the value of the system file
level, store the new value at LEVEL ($BF94) in the system global page.
Parameter table:

GS/OS Input
or

OgCset Symbolic Name Result
+0 to + 1 pcount I
+2to +3 level I

Meanings of parameters:

Description

Number of parameters (1)
The new system file level

pcount The number of parameters in the GS/OS parameter table. The min-
imum value is 1; the maximum is 1.

level The value of the system file level. Legal values range from $0000 to
$00FF.

Common error codes:

$59 Invalid file level. The file level must be a number between $0000
and $00FF.

Another possible error code is $07.
Programming example:

Here is how to set the system file level to 2:

SetLevel SL_Parms
RTS

SLParms ANOP

DC 12' 1'
DC I2'2'

The number of parameters
;New system file level

The system file level affects the performance of subsequent Open, Close, and Flush
operalions.

202 GS/OS and Pro DOS 8 Commands