home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / HyperCard / reg_exp.XFCN / XCmdUtil.c < prev    next >
Text File  |  1989-09-18  |  5KB  |  213 lines

  1. /*
  2. | |  XCmdUtil.c:
  3. | |
  4. | |  Utility routines for HyperCard XCMDs and XFCNs.
  5. | |
  6. | |  Greg Anderson
  7. | |  29 Kerr Hall
  8. | |  Social Sciences Computing
  9. | |  University of California at Santa Cruz
  10. | |  sirkm@ssyx.ucsc.edu
  11. | |
  12.  */
  13. #include <MacTypes.h>
  14. #include "HyperXCmd.h"
  15. #include "XCmdUtil.h"
  16.  
  17. /*-----------------------------------------------------------------
  18. |  Convert a pascal string to a C string.  Note that it is legal to
  19. |  call with two pointers to the same string if desired.
  20. -----------------------------------------------------------------*/
  21. char *Pas2C(cstr,pstr)
  22.     char *cstr,*pstr;
  23. {
  24.     int len,i;
  25.     
  26.     len = pstr[0];
  27.     for(i=0;i<len;++i)
  28.         cstr[i] = pstr[i+1];
  29.     cstr[len] = 0;
  30.     return(cstr);
  31. }
  32.  
  33. /*-----------------------------------------------------------------
  34. |  Convert a C string to a pascal string.
  35. -----------------------------------------------------------------*/
  36. char *C2Pas(pstr,cstr)
  37.     char *pstr,*cstr;
  38. {
  39.     int len,i;
  40.     
  41.     len = strlen(cstr);
  42.     for(i=len;i;--i)
  43.         pstr[i] = cstr[i-1];
  44.     pstr[0] = len;
  45.     return(pstr);
  46. }
  47. /*-----------------------------------------------------------------
  48. |  Convert lower case characters in a string to upper case
  49. -----------------------------------------------------------------*/
  50. void MakeUpper(str)
  51.     char            *str;
  52. {
  53.     while(*str)
  54.     {
  55.         *str = toupper(*str);
  56.         ++str;
  57.     }
  58. }
  59.  
  60. /*-----------------------------------------------------------------
  61. |  Copy a string into a new handle
  62. -----------------------------------------------------------------*/
  63. Handle CopyStrToHand(string)
  64.     char *string;
  65. {
  66.     Handle    newHndl;
  67.     long    hsize;
  68.     
  69.     hsize = strlen(string) + 1;
  70.     newHndl = NewHandle( hsize );
  71.     strcpy( (char *)(*newHndl), string );
  72.     return(newHndl);
  73. }
  74.  
  75. /*-----------------------------------------------------------------
  76. |  Return a message to Hypercard
  77. -----------------------------------------------------------------*/
  78. void ReturnMsg(paramPtr,Message)
  79.     XCmdBlockPtr    paramPtr;
  80.     char            *Message;
  81. {
  82.     paramPtr->returnValue = CopyStrToHand(Message);
  83. }
  84.  
  85. /*-----------------------------------------------------------------
  86. |  Convert an ascii string to an integer
  87. -----------------------------------------------------------------*/
  88. int atoi(str)
  89.     char *str;
  90. {
  91.     int result = 0,neg=1;
  92.     char c;
  93.     
  94.     if( *str == '-' )
  95.     {
  96.         ++str;
  97.         neg = -1;
  98.     }
  99.     
  100.     while( (c = *str) )
  101.     {
  102.         if( (c >= '0') && (c <= '9') )
  103.             result = (result*10) + c - '0';
  104.         ++str;
  105.     }
  106.     return(result*neg);
  107. }
  108.  
  109. /*-----------------------------------------------------------------
  110. |  Convert an integer to an ASCII string
  111. -----------------------------------------------------------------*/
  112. void itoa(str,var)
  113.     char *str;
  114.     int    var;
  115. {
  116.     int i,m = 1;
  117.     
  118.     if(var < 0)
  119.     {
  120.         var = -var;
  121.         *(str++) = '-';
  122.     }
  123.     *str = 0;
  124.     
  125.     do
  126.     {
  127.         for(i=m;i>0;--i)
  128.             str[i] = str[i-1];
  129.         str[0] = '0' + (var % 10);
  130.         ++m;
  131.         var /= 10;
  132.     } while(var);
  133. }
  134.  
  135. /*-----------------------------------------------------------------
  136. |  Convert a long to an ASCII string
  137. -----------------------------------------------------------------*/
  138. void ltoa(str,var)
  139.     char    *str;
  140.     long    var;
  141. {
  142.     int i,m = 1;
  143.     
  144.     if(var < 0)
  145.     {
  146.         var = -var;
  147.         *(str++) = '-';
  148.     }
  149.     *str = 0;
  150.     
  151.     do
  152.     {
  153.         for(i=m;i>0;--i)
  154.             str[i] = str[i-1];
  155.         str[0] = '0' + (var % 10);
  156.         ++m;
  157.         var /= 10L;
  158.     } while(var);
  159. }
  160.  
  161. /*=================================================================
  162. || The following glue routines are similar to those given in
  163. || the file 'XCmdGlue.c; however, these routines take C strings
  164. || rather than pascal strings as arguements.
  165. =================================================================*/
  166. pascal void cSendHCMessage(paramPtr,msg)
  167.     XCmdBlockPtr    paramPtr;    char    *msg;
  168.     /* Send a HyperCard message (a command with arguments) to HyperCard.
  169.        msg is a pointer to a C format string.  */
  170. {
  171.     Str255 Pstr;
  172.     
  173.     C2Pas(Pstr,msg);
  174.     SendHCMessage(paramPtr,Pstr);
  175. }
  176.  
  177. pascal void cSendCardMessage(paramPtr,msg)
  178.     XCmdBlockPtr    paramPtr;    char    *msg;
  179.     /* Send a HyperCard message (a command with arguments) to the current card.
  180.        msg is a pointer to a C format string.  */
  181. {
  182.     Str255    Pstr;
  183.     
  184.     C2Pas(Pstr,msg);
  185.     SendCardMessage(paramPtr,Pstr);
  186. }
  187.  
  188. pascal Handle cEvalExpr(paramPtr,expr)
  189.     XCmdBlockPtr    paramPtr;    char    *expr;
  190.     /* Evaluate a HyperCard expression and return the answer.  The answer is
  191.        a handle to a zero-terminated string. */
  192. {
  193.     Str255    Pstr;
  194.     
  195.     C2Pas(Pstr,expr);
  196.     return(EvalExpr(paramPtr,Pstr));
  197. }
  198.  
  199. pascal void cSetGlobal(paramPtr,globalVar,msg)
  200.     XCmdBlockPtr    paramPtr;
  201.     char            *globalVar,
  202.                     *msg;
  203. {
  204.     Handle            tempHandle;
  205.     Str255            globName;
  206.     
  207.     tempHandle = CopyStrToHand(msg);
  208.     C2Pas(globName,globalVar);
  209.     SetGlobal(paramPtr,globName,tempHandle);
  210.     DisposHandle(tempHandle);
  211. }
  212.  
  213.