summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2008-09-29 19:35:30 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2008-09-29 19:35:30 +0000
commita0b8680a6d1f448491326cdfad7c7c31e38861a0 (patch)
treef57a312ad183e86223e870061c6db2be4ed04453
parenteca332c8d57225f37ce8d98c1bcd46d436be9f65 (diff)
downloadnetsurf-a0b8680a6d1f448491326cdfad7c7c31e38861a0.tar.gz
netsurf-a0b8680a6d1f448491326cdfad7c7c31e38861a0.tar.bz2
Minimal ARexx port.
Port name: NETSURF Commands supported: OPEN OPEN URL/A Opens URL specified by URL argument in new browser window. svn path=/trunk/netsurf/; revision=5462
-rw-r--r--Makefile.sources2
-rwxr-xr-xamiga/arexx.c65
-rwxr-xr-xamiga/arexx.h32
-rwxr-xr-xamiga/gui.c10
4 files changed, 107 insertions, 2 deletions
diff --git a/Makefile.sources b/Makefile.sources
index 8b5e2b01c..c8758744c 100644
--- a/Makefile.sources
+++ b/Makefile.sources
@@ -88,7 +88,7 @@ S_DEBUG := $(addprefix debug/,$(S_DEBUG))
# S_AMIGA are sources purely for the Amiga build
S_AMIGA := compat.c gui.c tree.c history.c hotlist.c schedule.c \
thumbnail.c misc.c bitmap.c font.c filetype.c utf8.c login.c \
- plotters.c object.c menu.c save_pdf.c
+ plotters.c object.c menu.c save_pdf.c arexx.c
S_AMIGA := $(addprefix amiga/,$(S_AMIGA))
# S_FRAMEBUFFER are sources purely for the framebuffer build
diff --git a/amiga/arexx.c b/amiga/arexx.c
new file mode 100755
index 000000000..3c3c77c35
--- /dev/null
+++ b/amiga/arexx.c
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2008 Chris Young <chris@unsatisfactorysoftware.co.uk>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "arexx.h"
+#include <reaction/reaction_macros.h>
+#include <string.h>
+#include <proto/intuition.h>
+#include "desktop/browser.h"
+
+enum
+{
+ RX_OPEN=0,
+};
+
+STATIC VOID rx_open(struct ARexxCmd *, struct RexxMsg *);
+
+STATIC struct ARexxCmd Commands[] =
+{
+ {"OPEN",RX_OPEN,rx_open,"URL/A", 0, NULL, 0, 0, NULL },
+ { NULL, 0, NULL, NULL, 0, NULL, 0, 0, NULL }
+};
+
+void ami_arexx_init()
+{
+ if(arexx_obj = ARexxObject,
+ AREXX_HostName,"NETSURF",
+ AREXX_Commands,Commands,
+ AREXX_NoSlot,TRUE,
+ AREXX_ReplyHook,NULL,
+ AREXX_DefExtension,"nsrx",
+ End)
+ {
+ GetAttr(AREXX_SigMask, arexx_obj, &rxsig);
+ }
+}
+
+void ami_arexx_handle()
+{
+ RA_HandleRexx(arexx_obj);
+}
+
+void ami_arexx_cleanup()
+{
+ if(arexx_obj) DisposeObject(arexx_obj);
+}
+
+STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unused)))
+{
+ browser_window_create((char *)cmd->ac_ArgList[0],NULL,NULL,true,false);
+}
diff --git a/amiga/arexx.h b/amiga/arexx.h
new file mode 100755
index 000000000..bd83fb36f
--- /dev/null
+++ b/amiga/arexx.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2008 Chris Young <chris@unsatisfactorysoftware.co.uk>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef AMIGA_AREXX_H
+#define AMIGA_AREXX_H
+
+#include <proto/arexx.h>
+#include <classes/arexx.h>
+
+void ami_arexx_init(void);
+void ami_arexx_handle(void);
+void ami_arexx_execute(char *);
+void ami_arexx_cleanup(void);
+
+Object *arexx_obj;
+ULONG rxsig;
+#endif
diff --git a/amiga/gui.c b/amiga/gui.c
index ea528760e..1ed226a92 100755
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -65,6 +65,7 @@
#include "amiga/login.h"
#include "utils/url.h"
#include <string.h>
+#include "amiga/arexx.h"
#ifdef WITH_HUBBUB
#include <hubbub/hubbub.h>
@@ -186,6 +187,8 @@ void gui_init(int argc, char** argv)
filereq = (struct FileRequester *)AllocAslRequest(ASL_FileRequest,NULL);
+ ami_arexx_init();
+
if(iffh = AllocIFF())
{
if(iffh->iff_Stream = OpenClipboard(0))
@@ -841,7 +844,7 @@ void ami_get_msg(void)
ULONG winsignal = 1L << sport->mp_SigBit;
ULONG appsig = 1L << appport->mp_SigBit;
ULONG schedulesig = 1L << msgport->mp_SigBit;
- ULONG signalmask = winsignal | appsig | schedulesig;
+ ULONG signalmask = winsignal | appsig | schedulesig | rxsig;
ULONG signal;
struct Message *timermsg = NULL;
@@ -855,6 +858,10 @@ void ami_get_msg(void)
{
ami_handle_appmsg();
}
+ else if(signal & rxsig)
+ {
+ ami_arexx_handle();
+ }
else if(signal & schedulesig)
{
while(GetMsg(msgport))
@@ -928,6 +935,7 @@ void gui_quit(void)
if(iffh->iff_Stream) CloseClipboard((struct ClipboardHandle *)iffh->iff_Stream);
if(iffh) FreeIFF(iffh);
+ ami_arexx_cleanup();
FreeSysObject(ASOT_PORT,appport);
FreeSysObject(ASOT_PORT,sport);