From a0b8680a6d1f448491326cdfad7c7c31e38861a0 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Mon, 29 Sep 2008 19:35:30 +0000 Subject: 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 --- amiga/arexx.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ amiga/arexx.h | 32 +++++++++++++++++++++++++++++ amiga/gui.c | 10 ++++++++- 3 files changed, 106 insertions(+), 1 deletion(-) create mode 100755 amiga/arexx.c create mode 100755 amiga/arexx.h (limited to 'amiga') 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 + * + * 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 . + */ + +#include "arexx.h" +#include +#include +#include +#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 + * + * 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 . + */ + +#ifndef AMIGA_AREXX_H +#define AMIGA_AREXX_H + +#include +#include + +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 +#include "amiga/arexx.h" #ifdef WITH_HUBBUB #include @@ -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); -- cgit v1.2.3