Apple II
Technical Notes
_____________________________________________________________________________
                                                  Developer Technical Support

GS/OS
#11:    About EraseDisk and Format

Written by:    Dave Lyons & Matt Deatherage                         July 1990

This Technical Note explains how an application can tell when a user chooses 
Cancel from an EraseDisk or Format dialog box and explains why the file_sys_ID 
field is ignored in class-zero calls.
_____________________________________________________________________________

Detecting a Canceled Erase or Format Dialog Box

GS/OS Reference says that EraseDisk and Format return with the carry flag set 
and A equal to zero when the user cancels the operation.  This is great, 
except that the calls actually return with the carry clear, making a Cancel 
hard to distinguish from a successful EraseDisk or Format operation.  This 
happens in System Software 5.0.2 and earlier; it will eventually be changed to 
work as documented in GS/OS Reference.

In the mean time, this Note presents a safe way around the problem (it will 
keep working even after the system software is changed):

  1.  In the parameter block for class-one EraseDisk or Format, set the 
      fileSysID field to 0.  (See note below.)
  2.  Make the call.
  3.  If the error code is non-zero, there was an error.  Handle it.
  4.  Otherwise, the error code is zero.  Check the fileSysID field in 
      the parameter block.  If it is still zero, the user chose to 
      cancel the operation.

Note that this method only works for class-one calls. For the class-zero 
ERASE_DISK and FORMAT calls, the file_sys_ID word is only an input 
parameter and always remains unchanged.


About the Class-Zero file_sys_ID Parameter

Even though fileSysID is an input parameter for the class-zero calls 
ERASE_DISK and FORMAT, all versions of the system software ignore the supplied 
value and always give the user a dialog for selecting a file system.  This 
means no functionality is lost by putting a zero there.

The reasons for this decision are historical.  Although the Apple IIgs ProDOS 
16 Reference indicates that the input parameter file_sys_ID would be used in 
future versions to choose destination file systems, ProDOS 16 always returned 
an error if the file system specified was not $0001 (ProDOS).

Since this effectively means no ERASE_DISK or FORMAT call can be made under 
ProDOS 16 with any file_Sys_ID other than $0001, the GS/OS team chose to 
ignore the parameter and always give users the choice when using class zero 
calls.  Otherwise, no program that existed when GS/OS was released would ever 
allow users to choose interleaves or file systems (they would always format 
for ProDOS, file system $0001).  (Note that the class-one Format and EraseDisk 
calls have a new reqFileSysID parameter; if this field is present, the dialog 
box is bypassed.)


Further Reference
_____________________________________________________________________________
  o  GS/OS Reference
  o  Apple IIgs ProDOS 16 Reference

