home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / arexx / easyrexx.lha / EasyREXX / Source / test.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-02-10  |  3.2 KB  |  141 lines

  1. /*
  2.  *    File:                    test.c
  3.  *    Description:    Small program to show how easy EasyRexx.library makes
  4.  *                                the AREXX handling.  Show how to handle AREXX messages
  5.  *                                checking the ID in the commandTable.
  6.  *
  7.  *    (C) 1994-1995, Ketil Hunn
  8.  *
  9.  *    Set tab to 2 for best readability
  10.  *
  11.  */
  12.  
  13. #include <stdio.h>
  14.  
  15. #include <libraries/easyrexx.h>
  16. struct Library *EasyRexxBase;
  17.  
  18. #define    AREXX_CLEAR            1
  19. #define    AREXX_OPEN            2
  20. #define    AREXX_SAVEAS        3
  21. #define    AREXX_HELP            4
  22. #define    AREXX_TEXT            5
  23. #define    AREXX_ROW                6
  24. #define    AREXX_QUIT            7
  25. #define    AREXX_VERSION        8
  26. #define    AREXX_NAME            9
  27.  
  28. /* This application supports these AREXX commands */
  29. struct ARexxCommandTable commandTable[]=
  30. {
  31. /*    ID          CMD       ARGUMENT TEMPLATE             USERDATA  */
  32.  
  33.     AREXX_CLEAR,        "CLEAR",        "FORCE/S",                                        NULL,
  34.     AREXX_OPEN,            "OPEN",            "PROJECT/S,TEXT/S,NAME/F",        NULL,
  35.     AREXX_SAVEAS,        "SAVEAS",        "NAME/K",                                            NULL,
  36.     AREXX_HELP,            "HELP",            "AMIGAGUIDE/S,TOPIC/F",                NULL,
  37.     AREXX_TEXT,            "TEXT",            "TEXT/A/F",                                        NULL,
  38.     AREXX_ROW,            "ROW",            "ROWNUMBER/A/N",                            NULL,
  39.     AREXX_QUIT,            "QUIT",            NULL,                                                    NULL,
  40.     AREXX_VERSION,    "VERSION",    NULL,                                                    NULL,
  41.     AREXX_NAME,            "NAME",            NULL,                                                    NULL,
  42.     TABLE_END,
  43. };
  44.  
  45.  
  46. BYTE myHandleARexx(struct ARexxContext *c)
  47. {
  48.     LONG    result    =RC_OK;
  49.     UBYTE *resultstring=NULL,
  50.                 myversion[]="EasyREXX.library demonstration";
  51.     BYTE    done        =FALSE;
  52.     ULONG resultint=0L;
  53.  
  54.     if(GetARexxMsg(c))
  55.     {
  56.         printf("Received: ");
  57.         switch(c->id)
  58.         {
  59.             case AREXX_CLEAR:
  60.                 printf("CLEAR");
  61.                 break;
  62.             case AREXX_OPEN:
  63.                 printf("OPEN");
  64.                 if(ARG(c, 1))
  65.                     printf(" TEXT");
  66.                 else
  67.                     printf(" PROJECT");
  68.                 if(ARG(c, 2))
  69.                     printf(" '%s'", ARGSTRING(c,2));
  70.                 break;
  71.             case AREXX_SAVEAS:
  72.                 printf("SAVEAS '%s'", ARGSTRING(c,0));
  73.                 break;
  74.             case AREXX_HELP:
  75.                 printf("HELP");
  76.                 if(ARG(c, 0))
  77.                     printf(" AMIGAGUIDE");
  78.                 if(ARG(c, 1))
  79.                     printf(" '%s'", ARGSTRING(c,1));
  80.                 break;
  81.             case AREXX_TEXT:
  82.                 printf("TEXT '%s'", ARGSTRING(c,0));
  83.                 break;
  84.             case AREXX_ROW:
  85.                 printf("ROW %ld", ARGNUMBER(c,0));
  86.                 break;
  87.             case AREXX_QUIT:
  88.                 printf("QUIT");
  89.                 done=TRUE;
  90.                 break;
  91.             case AREXX_VERSION:
  92.                 printf("VERSION");
  93.                 resultint=105L;
  94.                 break;
  95.             case AREXX_NAME:
  96.                 printf("NAME");
  97.                 resultstring=myversion;
  98.                 break;
  99.         }
  100.         printf("\n");
  101.  
  102.         ReplyARexxMsg(c,
  103.                                     ER_Result,                result,
  104.                                     ER_ResultLong,        resultint,
  105.                                     ER_ResultString,    resultstring,
  106.                                     TAG_DONE);
  107.     }
  108.     return done;
  109. }
  110.  
  111. void main(int argc, char **argv)
  112. {
  113.     if(EasyRexxBase=OpenLibrary(EASYREXXNAME, EASYREXXVERSION))
  114.     {
  115.         struct ARexxContext    *context;
  116.  
  117.         if(context=AllocARexxContext(    ER_Portname,            "EASYREXX_TEST",
  118.                                                                     ER_CommandTable,    commandTable,
  119.                                                                     TAG_DONE))
  120.         {
  121.             ULONG signal;
  122.             BYTE done=FALSE;
  123.  
  124.             printf(    "Welcome to a small EasyRexx demonstration\n"
  125.                             "-----------------------------------------\n"
  126.                             "Open another shell and start the small\n"
  127.                             "AREXX script: rx test\n"
  128.                             "or doubleclick on the test.rexx icon.\n");
  129.             while(!done)
  130.             {
  131.                 signal=Wait(ER_SIGNAL(context));
  132.  
  133.                 if(signal & ER_SIGNAL(context))
  134.                     done=myHandleARexx(context);
  135.             }
  136.             FreeARexxContext(context);
  137.         }
  138.         CloseLibrary(EasyRexxBase);
  139.     }
  140. }
  141.