home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
misc
/
wingnuplot
/
source.lha
/
source
/
Commands.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-06-18
|
5KB
|
227 lines
#include "struct.c"
#include "OutlineFont.h"
#include "WinPlot.h"
struct MsgPort *RexxReplyPort = NULL;
static struct RexxMsg *OutRexxMsg = NULL;
static UBYTE *CmdArgstring = NULL;
/* Init the ARexx Port */
void _STI_250_OpenRexx(void)
{
RexxReplyPort = CreateMsgPort();
OutRexxMsg = CreateRexxMsg(RexxReplyPort,NULL,"REXXPLOT");
}
/* Close the ARexx Port */
void _STD_250_CloseRexx(void)
{
if (RexxReplyPort) DeleteMsgPort(RexxReplyPort);
if (OutRexxMsg) DeleteRexxMsg(OutRexxMsg);
}
/* the Rexx command list */
static struct List RexxList =
{
(struct Node *)&RexxList.lh_Tail, NULL, (struct Node *)&RexxList.lh_Head
};
static void SendFirst(void)
{
struct MsgPort *TargetPort;
char *Command = RexxList.lh_Head->ln_Name;
if (CmdArgstring=CreateArgstring(Command,strlen(Command)))
{
OutRexxMsg->rm_Action=RXCOMM|RXFF_NOIO|RXFF_STRING;
OutRexxMsg->rm_Args[0]=(STRPTR)CmdArgstring;
Forbid();
if (TargetPort=FindPort(RXSDIR))
PutMsg(TargetPort,&OutRexxMsg->rm_Node);
Permit();
}
}
void SendRexxMsg(char *Command)
{
struct Node *RexxNode;
char *QuotedCommand, *s, *t;
int Quotes, Length;
BOOL Send;
Send = RexxList.lh_Head->ln_Succ == NULL;
Quotes = Length = 0;
/* count ' and determine stringlength */
for(s = Command; *s; s++)
{
Length++;
if (*s == '\'') Quotes++;
}
/* ' => '' */
if (QuotedCommand = malloc(Length+Quotes+3))
{
t = QuotedCommand; *t++ = '\'';
for(s = Command; *s; s++)
{
*t++ = *s;
if (*s == '\'') *t++ = *s;
}
*t++ = '\''; *t = '\0';
if (RexxNode = malloc(sizeof(struct Node)))
{
RexxNode->ln_Name = QuotedCommand;
AddTail(&RexxList, RexxNode);
if (Send && RexxReplyPort && OutRexxMsg)
SendFirst();
}
free(QuotedCommand);
}
}
void ReplyRexxMsg(void)
{
struct Node *First;
DeleteArgstring(CmdArgstring);
First = RexxList.lh_Head;
RemHead(&RexxList);
free(First->ln_Name);
free(First);
if (RexxList.lh_Head->ln_Succ != NULL)
SendFirst();
}
void LoadFunc(void)
{
struct Window *wnd;
char Buffer[255], Buffer2[255];
set(AP_WinPlot, MUIA_Application_Sleep, TRUE);
get(Windows[ActiveWindow].WI_Plot, MUIA_Window_Window, &wnd);
if (MUI_AslRequestTags(FileReq,
ASLFR_DoSaveMode, FALSE,
ASLFR_Window, wnd,
ASLFR_TitleText, "Please select new file to plot",
ASLFR_DrawersOnly, FALSE,
TAG_END))
{
strcpy(Buffer2, FileReq->fr_Drawer);
AddPart(Buffer2, FileReq->fr_File, 255);
sprintf(Buffer, "load \"%s\"", Buffer2);
SendRexxMsg(Buffer);
}
set(AP_WinPlot, MUIA_Application_Sleep, FALSE);
}
void SaveFunc(void)
{
struct Window *wnd;
char Buffer[255], Buffer2[255];
set(AP_WinPlot, MUIA_Application_Sleep, TRUE);
get(Windows[ActiveWindow].WI_Plot, MUIA_Window_Window, &wnd);
if (MUI_AslRequestTags(FileReq,
ASLFR_DoSaveMode, TRUE,
ASLFR_Window, wnd,
ASLFR_TitleText, "Please select file to save gnuplot state",
ASLFR_DrawersOnly, FALSE,
TAG_END))
{
strcpy(Buffer2, FileReq->fr_Drawer);
AddPart(Buffer2, FileReq->fr_File, 255);
sprintf(Buffer, "save \"%s\"", Buffer2);
SendRexxMsg(Buffer);
}
set(AP_WinPlot, MUIA_Application_Sleep, FALSE);
}
void CDFunc(void)
{
struct Window *wnd;
char Buffer[255];
set(AP_WinPlot, MUIA_Application_Sleep, TRUE);
get(Windows[ActiveWindow].WI_Plot, MUIA_Window_Window, &wnd);
if (MUI_AslRequestTags(FileReq,
ASLFR_DoSaveMode, FALSE,
ASLFR_Window, wnd,
ASLFR_TitleText, "Please select new current directory",
ASLFR_DrawersOnly, TRUE,
TAG_END))
{
sprintf(Buffer, "cd \"%s\"", FileReq->fr_Drawer);
SendRexxMsg(Buffer);
}
set(AP_WinPlot, MUIA_Application_Sleep, FALSE);
}
void LoadConf()
{
FILE *f;
BOOL FontFound = FALSE;
char FontName[80];
int i;
if (f = fopen(CONFIG, "r"))
{
LONG Page;
fscanf(f, "%s\n", FontName);
fread(ColorEntries, sizeof(struct MUI_Palette_Entry), NUMCOLORS+1, f);
fread(&Page, sizeof(Page), 1, f);
set(RG_Set, MUIA_Group_ActivePage, Page);
fclose(f);
for(i=0;;i++)
{
char *FontName2;
DoMethod(LV_Font, MUIM_List_GetEntry, i, &FontName2);
if (!FontName2) break;
if (FontFound = strcmp(FontName, FontName2) == 0) break;
}
}
if (FontFound)
{
OpenOutlineFont(FontName);
set(LV_Font, MUIA_List_Active, i);
}
else
{
char *FontName;
DoMethod(LV_Font, MUIM_List_GetEntry, 0, &FontName);
OpenOutlineFont(FontName);
}
}
void SaveConf()
{
FILE *f;
LONG Page;
char *FontName;
if (f = fopen(CONFIG, "w"))
{
DoMethod(LV_Font, MUIM_List_GetEntry, MUIV_List_GetEntry_Active, &FontName);
fprintf(f, "%s\n", FontName);
fwrite(ColorEntries, sizeof(struct MUI_Palette_Entry), NUMCOLORS+1, f);
get(RG_Set, MUIA_Group_ActivePage, &Page);
fwrite(&Page, sizeof(Page), 1, f);
fclose(f);
}
}