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
This commit is contained in:
Chris Young 2008-09-29 19:35:30 +00:00
parent eca332c8d5
commit a0b8680a6d
4 changed files with 107 additions and 2 deletions

View File

@ -88,7 +88,7 @@ S_DEBUG := $(addprefix debug/,$(S_DEBUG))
# S_AMIGA are sources purely for the Amiga build # S_AMIGA are sources purely for the Amiga build
S_AMIGA := compat.c gui.c tree.c history.c hotlist.c schedule.c \ 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 \ 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_AMIGA := $(addprefix amiga/,$(S_AMIGA))
# S_FRAMEBUFFER are sources purely for the framebuffer build # S_FRAMEBUFFER are sources purely for the framebuffer build

65
amiga/arexx.c Executable file
View File

@ -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);
}

32
amiga/arexx.h Executable file
View File

@ -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

View File

@ -65,6 +65,7 @@
#include "amiga/login.h" #include "amiga/login.h"
#include "utils/url.h" #include "utils/url.h"
#include <string.h> #include <string.h>
#include "amiga/arexx.h"
#ifdef WITH_HUBBUB #ifdef WITH_HUBBUB
#include <hubbub/hubbub.h> #include <hubbub/hubbub.h>
@ -186,6 +187,8 @@ void gui_init(int argc, char** argv)
filereq = (struct FileRequester *)AllocAslRequest(ASL_FileRequest,NULL); filereq = (struct FileRequester *)AllocAslRequest(ASL_FileRequest,NULL);
ami_arexx_init();
if(iffh = AllocIFF()) if(iffh = AllocIFF())
{ {
if(iffh->iff_Stream = OpenClipboard(0)) if(iffh->iff_Stream = OpenClipboard(0))
@ -841,7 +844,7 @@ void ami_get_msg(void)
ULONG winsignal = 1L << sport->mp_SigBit; ULONG winsignal = 1L << sport->mp_SigBit;
ULONG appsig = 1L << appport->mp_SigBit; ULONG appsig = 1L << appport->mp_SigBit;
ULONG schedulesig = 1L << msgport->mp_SigBit; ULONG schedulesig = 1L << msgport->mp_SigBit;
ULONG signalmask = winsignal | appsig | schedulesig; ULONG signalmask = winsignal | appsig | schedulesig | rxsig;
ULONG signal; ULONG signal;
struct Message *timermsg = NULL; struct Message *timermsg = NULL;
@ -855,6 +858,10 @@ void ami_get_msg(void)
{ {
ami_handle_appmsg(); ami_handle_appmsg();
} }
else if(signal & rxsig)
{
ami_arexx_handle();
}
else if(signal & schedulesig) else if(signal & schedulesig)
{ {
while(GetMsg(msgport)) while(GetMsg(msgport))
@ -928,6 +935,7 @@ void gui_quit(void)
if(iffh->iff_Stream) CloseClipboard((struct ClipboardHandle *)iffh->iff_Stream); if(iffh->iff_Stream) CloseClipboard((struct ClipboardHandle *)iffh->iff_Stream);
if(iffh) FreeIFF(iffh); if(iffh) FreeIFF(iffh);
ami_arexx_cleanup();
FreeSysObject(ASOT_PORT,appport); FreeSysObject(ASOT_PORT,appport);
FreeSysObject(ASOT_PORT,sport); FreeSysObject(ASOT_PORT,sport);