Hi,I've written a program that works as two separate chunks but I cannotfind a way to add the chunks together.My little program (assembler and not wimp) firstly uses WGET to download a file from the interweb. This is done in a subroutine where SWI"OS_CLI" R0 points at a string with WGET in it and the file downloadsno problem. When it returns from the subroutine, the program then*should* use the downloaded data to produce another angle on the data.The two parts work fine apart but I can't join them
In article <t2p8ka$1db3$1@gioia.aioe.org>,
Steve Drain <steve@kappa.me.uk> wrote:
I woud guess Wimp_StartTask rather OS_CLI to avoid overwriting
your application space.
Thanks Steve. That gives me something to read up about.
I don't understand what overwrites the application space though.
I woud guess Wimp_StartTask rather OS_CLI to avoid overwriting
your application space.
In article <t2p8ka$1db3$1@gioia.aioe.org>,
Steve Drain <steve@kappa.me.uk> wrote:
I woud guess Wimp_StartTask rather OS_CLI to avoid overwriting
your application space.
Thanks Steve. That gives me something to read up about.
I don't understand what overwrites the application space though.
WGet, which is an application that you've just started in
application space.
RISC OS is a single tasking operating system with a thin veneer of
fake multi-tasking applied on top by the Wimp. As far as all of the
non-Wimp bits of the OS are concerned, applications reside at
0x8000. Since there can only be one application at 0x8000 at a
time, the act of launching WGet overwrites and completely
obliterates your application. This is why the subroutine can never
return: by that point, your application doesn't exist any more.
As Harriet notes, there are some messy work-arounds: either the old Arthur-era one of shifting memory around, or the RISC OS-era one of
passing the problem to the Wimp.
As I understand it, when you use OSCLI to start a new application
directly then control never returns to the original program - you
are executing the equivalent of a GOTO rather than a PROC.
(Unless, apparently, you have a 'quit handler': http://www.verycomputer.com/24_f48d3602910d170e_1.htm )
Wimp_StartTask launches it as an independent task with its own
Wimpslot, etc (although it also means that your program won't wait
for this new task to return before continuing on with its own next instruction - and in the case of a wget command, I imagine that the
result might potentially take quite a while).
Wimp_StartTask launches it as an independent task with its own
Wimpslot, etc (although it also means that your program won't wait
for this new task to return before continuing on with its own next instruction - and in the case of a wget command, I imagine that the
result might potentially take quite a while).
'Invalid Wimp operation in this context.'
In article <6a8503d659.harriet@bazleyfamily.co.uk>,
Harriet Bazley <harriet@bazleyfamily.co.uk> wrote:
Wimp_StartTask launches it as an independent task with its own
Wimpslot, etc (although it also means that your program won't wait
for this new task to return before continuing on with its own next instruction - and in the case of a wget command, I imagine that the
result might potentially take quite a while).
Naively I tried this with fingers crossed.
I get an error..
'Invalid Wimp operation in this context.'
Clearly this is way beyond my understanding.
On 9 Apr, Bob Latham wrote in message
<59d6672366bob@sick-of-spam.invalid>:
'Invalid Wimp operation in this context.'
Ah. Wimp_StartTask must be called from a Wimp application which is
already calling Wimp_Poll.
I think your options are either to look at the Arthur way of doing
stuff (fiddle with the environment and shift things around in
memory) or do without WGet.
If you're using RISC OS 5, could you use the built-in HTTP fetcher?
As a module called by SWIs, that might run as part of your
application (I don't know; I've not looked at how it works, so I'm
not sure if it expects to be called from a polling application or
not). If so, that would sidestep the problem of launching a
separate task to do the fetching.
Bob Latham <bob@sick-of-spam.invalid> wrote:
In article <6a8503d659.harriet@bazleyfamily.co.uk>,
Harriet Bazley <harriet@bazleyfamily.co.uk> wrote:
Wimp_StartTask launches it as an independent task with its own
Wimpslot, etc (although it also means that your program won't wait
for this new task to return before continuing on with its own next instruction - and in the case of a wget command, I imagine that the result might potentially take quite a while).
Naively I tried this with fingers crossed.
I get an error..
'Invalid Wimp operation in this context.'
Clearly this is way beyond my understanding.
Wimp_StartTask only works if you're already in a Wimp task. That
might be a desktop app, or a command line app running in a
TaskWindow. If you are outside the desktop the Wimp isn't running
so you can't launch other tasks.
Try your code in a Taskwindow?
Theo
In article <mpro.ra2pxr01s2b8u07k5.news@stevefryatt.org.uk>,
Steve Fryatt <news@stevefryatt.org.uk> wrote:
On 9 Apr, Bob Latham wrote in message
<59d6672366bob@sick-of-spam.invalid>:
'Invalid Wimp operation in this context.'
Ah. Wimp_StartTask must be called from a Wimp application which is
already calling Wimp_Poll.
I think your options are either to look at the Arthur way of doing
stuff (fiddle with the environment and shift things around in
memory) or do without WGet.
If you're using RISC OS 5, could you use the built-in HTTP fetcher?
As a module called by SWIs, that might run as part of your
application (I don't know; I've not looked at how it works, so I'm
not sure if it expects to be called from a polling application or
not). If so, that would sidestep the problem of launching a
separate task to do the fetching.
Thanks Steve.
I did look into that but quickly realised this is beyond my baby
steps.
Must admit, it surprises me that fetching a file from the net is so
difficult to do.
Thanks again.
Bob.
In message <59d68649a5bob@sick-of-spam.invalid>
Bob Latham <bob@sick-of-spam.invalid> wrote:
In article <mpro.ra2pxr01s2b8u07k5.news@stevefryatt.org.uk>,
Steve Fryatt <news@stevefryatt.org.uk> wrote:
On 9 Apr, Bob Latham wrote in message
<59d6672366bob@sick-of-spam.invalid>:
'Invalid Wimp operation in this context.'
Ah. Wimp_StartTask must be called from a Wimp application which is already calling Wimp_Poll.
I think your options are either to look at the Arthur way of doing
stuff (fiddle with the environment and shift things around in memory)
or do without WGet.
If you're using RISC OS 5, could you use the built-in HTTP fetcher? As
a module called by SWIs, that might run as part of your application (I don't know; I've not looked at how it works, so I'm not sure if it expects to be called from a polling application or not). If so, that would sidestep the problem of launching a separate task to do the fetching.
Thanks Steve.
I did look into that but quickly realised this is beyond my baby steps.
Must admit, it surprises me that fetching a file from the net is so difficult to do.
From BASIC wget is easy to fetch files from the internet I use the followiong:
SYS "Wimp_StartTask", "wget ...
Whilst fetching the computer is single tasking,
So it's not difficult, really, but you do need to know some
important bits of information. One is that you can't do Wimp
operations except from a registered Wimp task; another is that, in
most cases, you can't just do *OSCLI for an app because the new app
will wipe out the app that launched it.
In article <mpro.ra2pxr01s2b8u07k5.news@stevefryatt.org.uk>,
Steve Fryatt <news@stevefryatt.org.uk> wrote:
Ah. Wimp_StartTask must be called from a Wimp application which
is already calling Wimp_Poll.
From BASIC wget is easy to fetch files from the internet I use the followiong:
SYS "Wimp_StartTask", "wget ...
Whilst fetching the computer is single tasking,
Must admit, it surprises me that fetching a file from the net is so
difficult to do.
You originally said that you had two separate working routines but
simply couldn't seem to paste them together - would it not be
possible to have a 'parent' BASIC file that could call them both in succession?
(Registering yourself as a WIMP task is not in fact that
complicated, and I don't think your program actually needs to
implement a Wimp_Poll loop if it is single-tasking and not
attempting to interact with the desktop in any way -
I seem to remember writing some pretty crude software that just
called Wimp_Initialise claiming to be a RISC OS 2 application,
executed a few lines of BASIC and then quit.)
In article <13d593d659.Kevin@Kevsoft>,
Kevin Wells <kev@kevsoft.co.uk> wrote:
In article <mpro.ra2pxr01s2b8u07k5.news@stevefryatt.org.uk>,
Steve Fryatt <news@stevefryatt.org.uk> wrote:
Ah. Wimp_StartTask must be called from a Wimp application which
is already calling Wimp_Poll.
From BASIC wget is easy to fetch files from the internet I use the
followiong:
SYS "Wimp_StartTask", "wget ...
Whilst fetching the computer is single tasking,
When you say "Basic", I'm starting to think you mean a full wimp
application written in Basic?
Thanks.
Bob.
Doesn't surprise me - fetching a file across the Internet is an order of complexity above fetching a file from the local hard disc, and in
addition you're launching an external application in order to do it,
which is quite a lot for a small assembler routine to handle....
In message <59d6dc7625bob@sick-of-spam.invalid>
Bob Latham <bob@sick-of-spam.invalid> wrote:
In article <13d593d659.Kevin@Kevsoft>,
Kevin Wells <kev@kevsoft.co.uk> wrote:
In article <mpro.ra2pxr01s2b8u07k5.news@stevefryatt.org.uk>,
Steve Fryatt <news@stevefryatt.org.uk> wrote:
Ah. Wimp_StartTask must be called from a Wimp application which
is already calling Wimp_Poll.
From BASIC wget is easy to fetch files from the internet I use the
followiong:
SYS "Wimp_StartTask", "wget ...
Whilst fetching the computer is single tasking,
When you say "Basic", I'm starting to think you mean a full wimp >>application written in Basic?
Yes under DR Wimp
Another method I used in my QrCode application is to create an Obey file
with just wget ... in it file typed as FEB so that I can have more than
256 characters in it. If going down that route then anything with a % in
it will need %%
Thanks.
Bob.
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 293 |
Nodes: | 16 (2 / 14) |
Uptime: | 223:52:11 |
Calls: | 6,623 |
Calls today: | 5 |
Files: | 12,171 |
Messages: | 5,318,370 |