home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / misc / wingnuplot / source.lha / source / Commands.c < prev    next >
C/C++ Source or Header  |  1994-06-18  |  5KB  |  227 lines

  1. #include "struct.c"
  2. #include "OutlineFont.h"
  3. #include "WinPlot.h"
  4.  
  5.        struct MsgPort *RexxReplyPort = NULL;
  6. static struct RexxMsg *OutRexxMsg = NULL;
  7. static        UBYTE   *CmdArgstring = NULL;
  8.  
  9. /* Init the ARexx Port */
  10. void _STI_250_OpenRexx(void)
  11. {
  12.  RexxReplyPort = CreateMsgPort();
  13.  OutRexxMsg = CreateRexxMsg(RexxReplyPort,NULL,"REXXPLOT");
  14. }
  15.  
  16. /* Close the ARexx Port */
  17. void _STD_250_CloseRexx(void)
  18. {
  19.  if (RexxReplyPort) DeleteMsgPort(RexxReplyPort);
  20.  if (OutRexxMsg) DeleteRexxMsg(OutRexxMsg);
  21. }
  22.  
  23. /* the Rexx command list */
  24. static struct List RexxList =
  25. {
  26.  (struct Node *)&RexxList.lh_Tail, NULL, (struct Node *)&RexxList.lh_Head
  27. };
  28.  
  29. static void SendFirst(void)
  30. {
  31.  struct MsgPort *TargetPort;
  32.  char           *Command = RexxList.lh_Head->ln_Name;
  33.  
  34.  if (CmdArgstring=CreateArgstring(Command,strlen(Command)))
  35.   {
  36.    OutRexxMsg->rm_Action=RXCOMM|RXFF_NOIO|RXFF_STRING;
  37.    OutRexxMsg->rm_Args[0]=(STRPTR)CmdArgstring;
  38.     
  39.    Forbid();
  40.    if (TargetPort=FindPort(RXSDIR))
  41.     PutMsg(TargetPort,&OutRexxMsg->rm_Node);
  42.    Permit();
  43.   }
  44. }
  45.  
  46. void SendRexxMsg(char *Command)
  47. {
  48.  struct Node    *RexxNode;
  49.  char           *QuotedCommand, *s, *t;
  50.  int             Quotes, Length;
  51.  BOOL            Send;
  52.  
  53.  Send = RexxList.lh_Head->ln_Succ == NULL;
  54.  
  55.  Quotes = Length = 0;
  56.  
  57.  /* count ' and determine stringlength */
  58.  for(s = Command; *s; s++)
  59.   {
  60.    Length++;
  61.    if (*s == '\'') Quotes++;
  62.   }
  63.  
  64.  /* ' => '' */
  65.  if (QuotedCommand = malloc(Length+Quotes+3))
  66.   {
  67.    t = QuotedCommand; *t++ = '\'';
  68.    
  69.    for(s = Command; *s; s++)
  70.     {
  71.      *t++ = *s;
  72.      if (*s == '\'') *t++ = *s;
  73.     }
  74.    
  75.    *t++ = '\''; *t = '\0';
  76.    
  77.    if (RexxNode = malloc(sizeof(struct Node)))
  78.     {
  79.      RexxNode->ln_Name = QuotedCommand;
  80.      AddTail(&RexxList, RexxNode);
  81.  
  82.      if (Send && RexxReplyPort && OutRexxMsg)
  83.       SendFirst();
  84.     }
  85.  
  86.    free(QuotedCommand);
  87.   }
  88. }
  89.  
  90. void ReplyRexxMsg(void)
  91. {
  92.  struct Node *First;
  93.  
  94.  DeleteArgstring(CmdArgstring);
  95.  
  96.  First = RexxList.lh_Head;
  97.  RemHead(&RexxList);
  98.  
  99.  free(First->ln_Name);
  100.  free(First);
  101.  if (RexxList.lh_Head->ln_Succ != NULL)
  102.   SendFirst();
  103. }
  104.  
  105. void LoadFunc(void)
  106. {
  107.  struct Window *wnd;
  108.  char           Buffer[255], Buffer2[255];
  109.  
  110.  set(AP_WinPlot, MUIA_Application_Sleep, TRUE);
  111.  get(Windows[ActiveWindow].WI_Plot, MUIA_Window_Window, &wnd);
  112.  if (MUI_AslRequestTags(FileReq,
  113.             ASLFR_DoSaveMode, FALSE,
  114.             ASLFR_Window, wnd,
  115.             ASLFR_TitleText,   "Please select new file to plot",
  116.             ASLFR_DrawersOnly, FALSE,
  117.             TAG_END))
  118.   {
  119.    strcpy(Buffer2, FileReq->fr_Drawer);
  120.    AddPart(Buffer2, FileReq->fr_File, 255);
  121.    sprintf(Buffer, "load \"%s\"", Buffer2);
  122.    SendRexxMsg(Buffer);
  123.   }
  124.  set(AP_WinPlot, MUIA_Application_Sleep, FALSE);
  125. }
  126.  
  127. void SaveFunc(void)
  128. {
  129.  struct Window *wnd;
  130.  char           Buffer[255], Buffer2[255];
  131.  
  132.  set(AP_WinPlot, MUIA_Application_Sleep, TRUE);
  133.  get(Windows[ActiveWindow].WI_Plot, MUIA_Window_Window, &wnd);
  134.  if (MUI_AslRequestTags(FileReq,
  135.             ASLFR_DoSaveMode, TRUE,
  136.             ASLFR_Window,      wnd,
  137.             ASLFR_TitleText, "Please select file to save gnuplot state",
  138.             ASLFR_DrawersOnly, FALSE,
  139.             TAG_END))
  140.   {
  141.    strcpy(Buffer2, FileReq->fr_Drawer);
  142.    AddPart(Buffer2, FileReq->fr_File, 255);
  143.    sprintf(Buffer, "save \"%s\"", Buffer2);
  144.    SendRexxMsg(Buffer);
  145.   }
  146.  set(AP_WinPlot, MUIA_Application_Sleep, FALSE);
  147. }
  148.  
  149. void CDFunc(void)
  150. {
  151.  struct Window *wnd;
  152.  char           Buffer[255];
  153.  
  154.  set(AP_WinPlot, MUIA_Application_Sleep, TRUE);
  155.  get(Windows[ActiveWindow].WI_Plot, MUIA_Window_Window, &wnd);
  156.  if (MUI_AslRequestTags(FileReq,
  157.             ASLFR_DoSaveMode, FALSE,
  158.             ASLFR_Window,      wnd,
  159.             ASLFR_TitleText,   "Please select new current directory",
  160.             ASLFR_DrawersOnly, TRUE,
  161.             TAG_END))
  162.   {
  163.    sprintf(Buffer, "cd \"%s\"", FileReq->fr_Drawer);
  164.    SendRexxMsg(Buffer);
  165.   }
  166.  set(AP_WinPlot, MUIA_Application_Sleep, FALSE);
  167. }
  168.  
  169. void LoadConf()
  170. {
  171.  FILE *f;
  172.  BOOL FontFound = FALSE;
  173.  char FontName[80];
  174.  int  i;
  175.  
  176.  if (f = fopen(CONFIG, "r"))
  177.   {
  178.    LONG Page;
  179.  
  180.    fscanf(f, "%s\n", FontName);
  181.    fread(ColorEntries, sizeof(struct MUI_Palette_Entry), NUMCOLORS+1, f);
  182.    fread(&Page, sizeof(Page), 1, f);
  183.    set(RG_Set, MUIA_Group_ActivePage, Page);
  184.  
  185.    fclose(f);
  186.  
  187.    for(i=0;;i++)
  188.     {
  189.      char *FontName2;
  190.  
  191.      DoMethod(LV_Font, MUIM_List_GetEntry, i, &FontName2);
  192.      if (!FontName2) break;
  193.      if (FontFound = strcmp(FontName, FontName2) == 0) break;
  194.     }
  195.   }
  196.  if (FontFound)
  197.  {
  198.   OpenOutlineFont(FontName);
  199.   set(LV_Font, MUIA_List_Active, i);
  200.  }
  201.  else
  202.   {
  203.    char *FontName;
  204.  
  205.    DoMethod(LV_Font, MUIM_List_GetEntry, 0, &FontName);
  206.    OpenOutlineFont(FontName);
  207.   }
  208. }
  209.  
  210. void SaveConf()
  211. {
  212.  FILE *f;
  213.  LONG Page;
  214.  char *FontName;
  215.  
  216.  if (f = fopen(CONFIG, "w"))
  217.   {
  218.    DoMethod(LV_Font, MUIM_List_GetEntry, MUIV_List_GetEntry_Active, &FontName); 
  219.    fprintf(f, "%s\n", FontName);
  220.    fwrite(ColorEntries, sizeof(struct MUI_Palette_Entry), NUMCOLORS+1, f);
  221.    get(RG_Set, MUIA_Group_ActivePage, &Page);
  222.    fwrite(&Page, sizeof(Page), 1, f);
  223.  
  224.    fclose(f);
  225.   }
  226. }
  227.