[comp.sys.mac.hypercard] Need Help

mxmora@unix.SRI.COM (Matt Mora) (03/16/90)

I am in the process of writing a library routine for
Quickbasic that will allow you to call XCMD's & and 
XFCN's from any quickbasic program. The part that is tripping
me up is the callback part. 

For example: (using the code below supplied by apple's XCMDUtils)

function StringMatch;
 begin
  with paramPtr^ do
   begin
    inArgs[1] := ORD(@pattern);
    inArgs[2] := ORD(target);
    request := xreqStringMatch;
    DoJsr(entryPoint);
    StringMatch := Ptr(outArgs[1]);
   end;
 end;

where DoJsr is:

PROCEDURE DoJsr (addr : ProcPtr);
INLINE
	$205F, $4E90;	{MOVEA.L (A7)+,A0}
                        {JSR     (A0)}


When the library code starts I set entrypoint
to be the address of the procdure to handle the callback.

for example

paramPtr^.entryPoint:=@CallbackHandler;

How do I return control to the xcmd from my 
callbackhandler? RTS?

Now when I actually call the xcmd after filling in
then paramptr block, can I just do:

myXCmdhndl:=GetNamedResource('XCMD',Xcmdname);
if myXCmdHndl<> nil then
  begin 
    Hlock(myXCmdHndl);
    DoJSR(myXCmdHndl^^);
    HunLock(myXCmdHndl);
    ReleaseResource(myXCmdHndl);
  end;
end;
  
or will this blow up in my face :-)


And some other random questions.

What exactly is a zero string. Is that a C string?
And when I do ZeroToPas, Do I truncate the string if its > 255?



Thanks for any clues you can give me.



























-- 
___________________________________________________________
Matthew Mora
SRI International                       mxmora@unix.sri.com
___________________________________________________________