diff options
-rw-r--r-- | Makefile.sources | 2 | ||||
-rwxr-xr-x | amiga/arexx.c | 65 | ||||
-rwxr-xr-x | amiga/arexx.h | 32 | ||||
-rwxr-xr-x | amiga/gui.c | 10 |
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); |