summaryrefslogtreecommitdiff
path: root/frontends/amiga/arexx.c
diff options
context:
space:
mode:
Diffstat (limited to 'frontends/amiga/arexx.c')
-rw-r--r--frontends/amiga/arexx.c120
1 files changed, 77 insertions, 43 deletions
diff --git a/frontends/amiga/arexx.c b/frontends/amiga/arexx.c
index 9484ee92b..243e927f8 100644
--- a/frontends/amiga/arexx.c
+++ b/frontends/amiga/arexx.c
@@ -69,7 +69,8 @@ enum
RX_ACTIVE,
RX_CLOSE,
RX_HOTLIST,
- RX_SLABSTATS
+ RX_SLABSTATS,
+ RX_EXEC
};
static Object *arexx_obj = NULL;
@@ -98,6 +99,7 @@ RXHOOKF(rx_active);
RXHOOKF(rx_close);
RXHOOKF(rx_hotlist);
RXHOOKF(rx_slabstats);
+RXHOOKF(rx_exec);
STATIC struct ARexxCmd Commands[] =
{
@@ -118,6 +120,7 @@ STATIC struct ARexxCmd Commands[] =
{"CLOSE", RX_CLOSE, rx_close, "W=WINDOW/K/N,T=TAB/K/N", 0, NULL, 0, 0, NULL },
{"HOTLIST", RX_HOTLIST, rx_hotlist, "A=ACTION/A", 0, NULL, 0, 0, NULL },
{"SLABSTATS", RX_SLABSTATS, rx_slabstats, "FILE", 0, NULL, 0, 0, NULL },
+ {"EXEC", RX_EXEC, rx_exec, "W=WINDOW/K/N,T=TAB/K/N,COMMAND/A/F", 0, NULL, 0, 0, NULL },
{ NULL, 0, NULL, NULL, 0, NULL, 0, 0, NULL }
};
@@ -191,9 +194,9 @@ static struct gui_window *ami_find_tab_gwin(struct gui_window_2 *gwin, int tab)
struct Node *ntab;
struct gui_window *gw;
- if((tab == 0) || (gwin->tabs == 0)) return gwin->gw;
+ if((tab == 0) || (ami_gui2_get_tabs(gwin) == 0)) return ami_gui2_get_gui_window(gwin);
- ctab = GetHead(&gwin->tab_list);
+ ctab = GetHead(ami_gui2_get_tab_list(gwin));
do
{
@@ -215,9 +218,9 @@ static int ami_find_tab_bw(struct gui_window_2 *gwin, struct browser_window *bw)
struct Node *ntab;
struct gui_window *tgw = NULL;
- if((bw == NULL) || (gwin->tabs == 0)) return 1;
+ if((bw == NULL) || (ami_gui2_get_tabs(gwin) == 0)) return 1;
- ctab = GetHead(&gwin->tab_list);
+ ctab = GetHead(ami_gui2_get_tab_list(gwin));
do
{
@@ -226,7 +229,7 @@ static int ami_find_tab_bw(struct gui_window_2 *gwin, struct browser_window *bw)
GetClickTabNodeAttrs(ctab,
TNA_UserData, &tgw,
TAG_DONE);
- if(tgw->bw == bw) return tabs;
+ if(ami_gui_get_browser_window(tgw) == bw) return tabs;
} while((ctab=ntab));
return 0;
@@ -235,6 +238,7 @@ static int ami_find_tab_bw(struct gui_window_2 *gwin, struct browser_window *bw)
static struct gui_window *ami_find_tab(int window, int tab)
{
struct nsObject *node, *nnode;
+ struct MinList *window_list = ami_gui_get_window_list();
if(!IsMinListEmpty(window_list))
{
@@ -260,7 +264,7 @@ static struct gui_window *ami_find_tab(int window, int tab)
RXHOOKF(rx_open)
{
struct dlnode *dln;
- struct gui_window *gw = cur_gw;
+ struct gui_window *gw = ami_gui_get_active_gw();
nsurl *url;
cmd->ac_RC = 0;
@@ -281,8 +285,8 @@ RXHOOKF(rx_open)
dln->filename = strdup((char *)cmd->ac_ArgList[3]);
dln->node.ln_Name = strdup((char *)cmd->ac_ArgList[0]);
dln->node.ln_Type = NT_USER;
- AddTail(&gw->dllist, (struct Node *)dln);
- browser_window_navigate(gw->bw,
+ AddTail(ami_gui_get_download_list(gw), (struct Node *)dln);
+ browser_window_navigate(ami_gui_get_browser_window(gw),
url,
NULL,
BW_NAVIGATE_DOWNLOAD,
@@ -303,11 +307,11 @@ RXHOOKF(rx_open)
BW_CREATE_TAB,
url,
NULL,
- gw->bw,
+ ami_gui_get_browser_window(gw),
NULL);
if(cmd->ac_ArgList[6]) {
- ami_gui_switch_to_new_tab(gw->shared);
+ ami_gui_switch_to_new_tab(ami_gui_get_gui_window_2(gw));
}
}
}
@@ -323,7 +327,7 @@ RXHOOKF(rx_open)
{
if(gw)
{
- browser_window_navigate(gw->bw,
+ browser_window_navigate(ami_gui_get_browser_window(gw),
url,
NULL,
BW_NAVIGATE_HISTORY,
@@ -346,9 +350,7 @@ RXHOOKF(rx_open)
RXHOOKF(rx_save)
{
BPTR fh = 0;
- ULONG source_size;
- const char *source_data;
- struct gui_window *gw = cur_gw;
+ struct gui_window *gw = ami_gui_get_active_gw();
cmd->ac_RC = 0;
@@ -357,19 +359,23 @@ RXHOOKF(rx_save)
if(!gw) return;
- ami_set_pointer(gw->shared, GUI_POINTER_WAIT, false);
+ ami_set_pointer(ami_gui_get_gui_window_2(gw), GUI_POINTER_WAIT, false);
if((fh = FOpen((char *)cmd->ac_ArgList[0], MODE_NEWFILE, 0)))
{
- struct hlcache_handle *h = browser_window_get_content(gw->bw);
- if((source_data = content_get_source_data(h, &source_size)))
+ const uint8_t *source_data;
+ size_t source_size;
+ struct hlcache_handle *h = browser_window_get_content(ami_gui_get_browser_window(gw));
+ source_data = content_get_source_data(h, &source_size);
+ if (source_data != NULL) {
FWrite(fh, source_data, 1, source_size);
+ }
FClose(fh);
- SetComment((char *)cmd->ac_ArgList[0], nsurl_access(browser_window_get_url(gw->bw)));
+ SetComment((char *)cmd->ac_ArgList[0], nsurl_access(browser_window_access_url(ami_gui_get_browser_window(gw))));
}
- ami_reset_pointer(gw->shared);
+ ami_reset_pointer(ami_gui_get_gui_window_2(gw));
}
RXHOOKF(rx_quit)
@@ -381,21 +387,21 @@ RXHOOKF(rx_quit)
RXHOOKF(rx_tofront)
{
cmd->ac_RC = 0;
- ScreenToFront(scrn);
+ ScreenToFront(ami_gui_get_screen());
}
RXHOOKF(rx_geturl)
{
- struct gui_window *gw = cur_gw;
+ struct gui_window *gw = ami_gui_get_active_gw();
cmd->ac_RC = 0;
if((cmd->ac_ArgList[0]) && (cmd->ac_ArgList[1]))
gw = ami_find_tab(*(ULONG *)cmd->ac_ArgList[0], *(ULONG *)cmd->ac_ArgList[1]);
- if(gw && gw->bw)
+ if(gw && ami_gui_get_browser_window(gw))
{
- strcpy(result, nsurl_access(browser_window_get_url(gw->bw)));
+ strcpy(result, nsurl_access(browser_window_access_url(ami_gui_get_browser_window(gw))));
}
else
{
@@ -407,7 +413,7 @@ RXHOOKF(rx_geturl)
RXHOOKF(rx_gettitle)
{
- struct gui_window *gw = cur_gw;
+ struct gui_window *gw = ami_gui_get_active_gw();
cmd->ac_RC = 0;
@@ -416,10 +422,10 @@ RXHOOKF(rx_gettitle)
if(gw)
{
- if(gw->shared->tabs > 1)
- strcpy(result, gw->tabtitle);
+ if(ami_gui2_get_tabs(ami_gui_get_gui_window_2(gw)) > 1)
+ strcpy(result, ami_gui_get_tab_title(gw));
else
- strcpy(result, gw->shared->wintitle);
+ strcpy(result, ami_gui_get_win_title(gw));
}
else
{
@@ -513,32 +519,32 @@ RXHOOKF(rx_pubscreen)
RXHOOKF(rx_back)
{
- struct gui_window *gw = cur_gw;
+ struct gui_window *gw = ami_gui_get_active_gw();
cmd->ac_RC = 0;
if((cmd->ac_ArgList[0]) && (cmd->ac_ArgList[1]))
gw = ami_find_tab(*(ULONG *)cmd->ac_ArgList[0], *(ULONG *)cmd->ac_ArgList[1]);
- if(gw) ami_gui_history(gw->shared, true);
+ if(gw) ami_gui_history(ami_gui_get_gui_window_2(gw), true);
}
RXHOOKF(rx_forward)
{
- struct gui_window *gw = cur_gw;
+ struct gui_window *gw = ami_gui_get_active_gw();
cmd->ac_RC = 0;
if((cmd->ac_ArgList[0]) && (cmd->ac_ArgList[1]))
gw = ami_find_tab(*(ULONG *)cmd->ac_ArgList[0], *(ULONG *)cmd->ac_ArgList[1]);
- if(gw) ami_gui_history(gw->shared, false);
+ if(gw) ami_gui_history(ami_gui_get_gui_window_2(gw), false);
}
RXHOOKF(rx_home)
{
- struct gui_window *gw = cur_gw;
+ struct gui_window *gw = ami_gui_get_active_gw();
nsurl *url;
cmd->ac_RC = 0;
@@ -551,7 +557,7 @@ RXHOOKF(rx_home)
if (nsurl_create(nsoption_charp(homepage_url), &url) != NSERROR_OK) {
amiga_warn_user("NoMemory", 0);
} else {
- browser_window_navigate(gw->bw,
+ browser_window_navigate(ami_gui_get_browser_window(gw),
url,
NULL,
BW_NAVIGATE_HISTORY,
@@ -564,7 +570,7 @@ RXHOOKF(rx_home)
RXHOOKF(rx_reload)
{
- struct gui_window *gw = cur_gw;
+ struct gui_window *gw = ami_gui_get_active_gw();
cmd->ac_RC = 0;
@@ -575,11 +581,11 @@ RXHOOKF(rx_reload)
{
if(cmd->ac_ArgList[0]) /* FORCE */
{
- browser_window_reload(gw->bw, true);
+ browser_window_reload(ami_gui_get_browser_window(gw), true);
}
else
{
- browser_window_reload(gw->bw, false);
+ browser_window_reload(ami_gui_get_browser_window(gw), false);
}
}
}
@@ -602,9 +608,10 @@ RXHOOKF(rx_windows)
RXHOOKF(rx_active)
{
int window = 0, tab = 0;
- struct gui_window *gw = cur_gw;
+ struct gui_window *gw = ami_gui_get_active_gw();
struct nsObject *node, *nnode;
struct gui_window_2 *gwin = NULL;
+ struct MinList *window_list = ami_gui_get_window_list();
cmd->ac_RC = 0;
@@ -623,7 +630,7 @@ RXHOOKF(rx_active)
if(node->Type == AMINS_WINDOW)
{
windows++;
- if(gwin->gw == gw)
+ if(IS_CURRENT_GW(gwin,gw))
{
window = windows;
break;
@@ -634,7 +641,7 @@ RXHOOKF(rx_active)
if(cmd->ac_ArgList[0])
{
- tab = ami_find_tab_bw(gwin, gw->bw);
+ tab = ami_find_tab_bw(gwin, ami_gui_get_browser_window(gw));
}
if(cmd->ac_ArgList[0]) sprintf(result, "%d", tab);
@@ -644,7 +651,7 @@ RXHOOKF(rx_active)
RXHOOKF(rx_close)
{
- struct gui_window *gw = cur_gw;
+ struct gui_window *gw = ami_gui_get_active_gw();
cmd->ac_RC = 0;
@@ -652,11 +659,11 @@ RXHOOKF(rx_close)
gw = ami_find_tab(*(ULONG *)cmd->ac_ArgList[0], *(ULONG *)cmd->ac_ArgList[1]);
else if(cmd->ac_ArgList[0])
{
- ami_gui_close_window(gw->shared);
+ ami_gui_close_window(ami_gui_get_gui_window_2(gw));
return;
}
- if(gw) browser_window_destroy(gw->bw);
+ if(gw) browser_window_destroy(ami_gui_get_browser_window(gw));
}
RXHOOKF(rx_hotlist)
@@ -670,6 +677,33 @@ RXHOOKF(rx_hotlist)
}
}
+RXHOOKF(rx_exec)
+{
+ struct gui_window *gw = ami_gui_get_active_gw();
+ bool res = false;
+
+ if(nsoption_bool(arexx_allow_exec) == false) {
+ cmd->ac_RC = RETURN_FAIL;
+ return;
+ }
+
+ if((cmd->ac_ArgList[0]) && (cmd->ac_ArgList[1]))
+ gw = ami_find_tab(*(ULONG *)cmd->ac_ArgList[0], *(ULONG *)cmd->ac_ArgList[1]);
+
+ if(gw) {
+ NSLOG(netsurf, WARNING, "Executing js: %s", (char *)cmd->ac_ArgList[2]);
+ res = browser_window_exec(ami_gui_get_browser_window(gw),
+ (char *)cmd->ac_ArgList[2], strlen((char *)cmd->ac_ArgList[2]));
+ }
+
+ if(res == false) {
+ cmd->ac_RC = RETURN_ERROR;
+ } else {
+ cmd->ac_RC = RETURN_OK;
+ }
+
+}
+
RXHOOKF(rx_slabstats)
{
#ifndef __amigaos4__