[comp.sys.mac.programmer] Alternative pkg interfaces for Pascal

ccc_ldo@waikato.ac.nz (Lawrence D'Oliveiro, Waikato University) (05/29/90)

Ever found the standard Pascal definition for SFGetFile/SFPGetFile to
be a nuisance? I have. An SFTypeList of 4 elements is almost never what
I want. Often I just want one type. Several times I've wanted a dynamic
list of types, which could be of any length.

Also, call me irresponsible, but I think it's inelegant to have an assembly-
language glue routine when a short inline will do the trick.

So here my alternative declarations of some toolbox calls. First of all,
the disk-initialisation package in DiskInit.p:

   Procedure DILoad;

      Inline
	 $3F3C, $0002,	   {move.w #2, -(sp)}
	 $A9E9; 	   {_Pack2}

   Procedure DIUnload;

      Inline
	 $3F3C, $0004,	   {move.w #4, -(sp)}
	 $A9E9; 	   {_Pack2}

   Function DIBadMount
     (
      where : Point;
      evtMessage : LongInt
     ) : Integer;

      Inline
	 $4267, 	   {clr.w -(sp)}
	 $A9E9; 	   {_Pack2}

   Function DIFormat
     (
      drvNum : Integer
     ) : OSErr;

      Inline
	 $3F3C, $0006,	   {move.w #6, -(sp)}
	 $A9E9; 	   {_Pack2}

   Function DIVerify
     (
      drvNum : Integer
     ) : OSErr;

      Inline
	 $3F3C, $0008,	   {move.w #8, -(sp)}
	 $A9E9; 	   {_Pack2}

   Function DIZero
     (
      drvNum : Integer;
      volName : Str255
     ) : OSErr;

      Inline
	 $3F3C, $000A,	   {move.w #10, -(sp)}
	 $A9E9; 	   {_Pack2}

And here are new definitions for most of the routines in Packages.p
(IUCompString and IUEqualString are a little more complicated, so I leave
them as glue). SFGetFile and SFPGetFile have their typeList arguments
declared as "Ptr", so you can pass just about anything you like.

Oh, and StringToNum is a function, which I've found to be far more
convenient, particularly when I only want an integer result.

  { Standard File Package ----------------------------------------------}

   Procedure SFPutFile
     (
      where : Point;
      prompt : Str255;
      origName : Str255;
      dlgHook : ProcPtr;
      var reply : SFReply
     );

      Inline
	 $3F3C, $0001,	   {move.w #1, -(sp)}
	 $A9EA; 	   {_Pack3}

   Procedure SFPPutFile
     (
      where : Point;
      prompt : Str255;
      origName : Str255;
      dlgHook : ProcPtr;
      var reply : SFReply;
      dlgID : Integer;
      filterProc : ProcPtr
     );

      Inline
	 $3F3C, $0003,	   {move.w #3, -(sp)}
	 $A9EA; 	   {_Pack3}

   Procedure SFGetFile
     (
      where : Point;
      prompt : Str255;
      fileFilter: ProcPtr;
      numTypes : Integer;
      typeList : Ptr;
      dlgHook : ProcPtr;
      var reply : SFReply
     );

      Inline
	 $3F3C, $0002,	   {move.w #2, -(sp)}
	 $A9EA; 	   {_Pack3}

   Procedure SFPGetFile
     (
      where : Point;
      prompt : Str255;
      fileFilter : ProcPtr;
      numTypes : Integer;
      typeList : Ptr;
      dlgHook : ProcPtr;
      var reply : SFReply;
      dlgID : Integer;
      filterProc : ProcPtr
     );

      Inline
	 $3F3C, $0004,	   {move.w #4, -(sp)}
	 $A9EA; 	   {_Pack3}

  { International Utilities Package ------------------------------------}

   Function IUGetIntl
     (
      theID : Integer
     ) : Handle;

      Inline
	 $3F3C, $0006,	   {move.w #6, -(sp)}
	 $A9ED; 	   {_Pack6}

   Procedure IUSetIntl
     (
      refNum : Integer;
      theID : Integer;
      intlParam : Handle
     );

      Inline
	 $3F3C, $0008,	   {move.w #8, -(sp)}
	 $A9ED; 	   {_Pack6}

   Procedure IUDateString
     (
      dateTime : LongInt;
      longFlag : DateForm;
      var result : Str255
     );

      Inline
	 $4267, 	   {clr.w -(sp)}
	 $A9ED; 	   {_Pack6}

   Procedure IUDatePString
     (
      dateTime : LongInt;
      longFlag : DateForm;
      var result : Str255;
      intlParam : Handle
     );

      Inline
	 $3F3C, $000E,	   {move.w #14, -(sp)}
	 $A9ED; 	   {_Pack6}

   Procedure IUTimeString
     (
      dateTime : LongInt;
      wantSeconds : Boolean;
      var result : Str255
     );

      Inline
	 $3F3C, $0002,	   {move.w #2, -(sp)}
	 $A9ED; 	   {_Pack6}

   Procedure IUTimePString
     (
      dateTime : LongInt;
      wantSeconds : Boolean;
      var result : Str255;
      intlParam : Handle
     );

      Inline
	 $3F3C, $0010,	   {move.w #16, -(sp)}
	 $A9ED; 	   {_Pack6}

   Function IUMetric : Boolean;

      Inline
	 $3F3C, $0004,	   {move.w #4, -(sp)}
	 $A9ED; 	   {_Pack6}

   Function IUMagString
     (
      aPtr, bPtr : Ptr;
      aLen, bLen : Integer
     ) : Integer;

      Inline
	 $3F3C, $000A,	   {move.w #10, -(sp)}
	 $A9ED; 	   {_Pack6}

   Function IUMagIDString
     (
      aPtr, bPtr : Ptr;
      aLen, bLen : Integer
     ) : Integer;

      Inline
	 $3F3C, $000C,	   {move.w #12, -(sp)}
	 $A9ED; 	   {_Pack6}

  { Binary-Decimal Conversion Package ----------------------------------}

   Function StringToNum
     (
      theString : Str255
     ) : LongInt;

      Inline
	 $205F, 	   {move.l (sp)+, a0}
	 $3F3C, $0001,	   {move.w #1, -(sp)}
	 $A9EE, 	   {_Pack7}
	 $2E80; 	   {move.l d0, (sp)}

   Procedure NumToString
     (
      theNum : LongInt;
      var theString : Str255
     );

      Inline
	 $205F, 	   {move.l (sp)+, a0}
	 $201F, 	   {move.l (sp)+, d0}
	 $4267, 	   {clr.w -(sp)}
	 $A9EE; 	   {_Pack7}

Lawrence D'Oliveiro
Computer Services Dept                    fone: +64-71-562-889
University of Waikato                      fax: +64-71-384-066
Hamilton, New Zealand            electric mail: ldo@waikato.ac.nz
"What makes you say that I'm always answering a question with a question?"