tw0i+@andrew.cmu.edu (Todd Andrew Williamson) (01/17/90)
To all of you DOS gurus:
1) Is there a way to do non-blocking reads from an AmigaDOS
FileHandle?
2) Is there a way to get a signal when I/O is available on
a FileHandle?
The reason that I ask is this: I'm writing a program that
needs to be able to do I/O on the serial & parallel ports
as well as on AmigaDOS FileHandles. But it needs to be able
to go about it's business until there is something to be read.
I guess what I'm looking for is something along the lines of
the UNIX select() call.
As you may have guessed, I don't have the DOS manual. (I was
hoping that the 1.3 version would come out soon, but it turns
out I need these answers sooner.)
Thanks,
Todd Williamson
tw0i@andrew.cmu.edu
r746tw0i@cmccvb.BITNETccplumb@lion.waterloo.edu (Colin Plumb) (02/08/90)
In article <sZh927G00WB_01qmID@andrew.cmu.edu> tw0i+@andrew.cmu.edu (Todd Andrew Williamson) writes: >1) Is there a way to do non-blocking reads from an AmigaDOS > FileHandle? Yes. All the DOS functions do is send a packet to the apropriate handler and wait for it to return. If you dive into the grungy bits yourself, use DeviceProc() to find the address of the handler and fill in packets, in all their BPTR-laden glory yourself, you can wait for them to come back to any message port you like. I believe some code to do this is in Matt Dillon's suplib. CMU has FTP, so have a look on ucbvax.berkeley.edu pub/dillon/... >2) Is there a way to get a signal when I/O is available on > a FileHandle? Well, an asynchronous read of one byte will work well. I can't think of a way, other than character-by-character, to get "whatever's currently available;" maybe someone else who's read the manual in the last moth has an idea? -- -Colin
new@udel.edu (Darren New) (02/08/90)
In article <20642@watdragon.waterloo.edu> ccplumb@lion.waterloo.edu (Colin Plumb) writes: >>1) Is there a way to do non-blocking reads from an AmigaDOS >> FileHandle? >Yes. All the DOS functions do is send a packet to the apropriate >handler and wait for it to return. But can you abort the I/O once your other stuff has come back? I.e., if I want to time out on a read of CON:, I can get my process to come back when the timer.device message comes back, but since DOS is not a device I can't AbortIO on the packet, can I? -- Darren
ccplumb@lion.waterloo.edu (Colin Plumb) (02/13/90)
In article <10541@nigel.udel.EDU> new@udel.edu (Darren New) writes: > But can you abort the I/O once your other stuff has come back? I.e., if > I want to time out on a read of CON:, I can get my process to come back when > the timer.device message comes back, but since DOS is not a device I > can't AbortIO on the packet, can I? -- Darren Sorry, no. An AbortPkt() function *might* exist in 1.4, but it's dubious. To do something like you describe, you have to use the underlying console.device. There's a way, described in AmigaMail and other places, to get the console.device behind a CON: window and you can do AbortIO() to it. Currently, all DOS handlers that can block arbitrarily long (CON:, SER:, PAR:, AUX:) are layered over Exec .devices, except for The various flavours of PIPE:. I don't know if there's a hack in PIPE: to allow for timeouts. -- -Colin
walker@sas.UUCP (Doug Walker) (02/13/90)
In article <sZh927G00WB_01qmID@andrew.cmu.edu> tw0i+@andrew.cmu.edu (Todd Andrew Williamson) writes: >1) Is there a way to do non-blocking reads from an AmigaDOS > FileHandle? Use the DOS Packet interface. Get a copy of PickPacket, by John Toebes and myself, and some back issues of Transactor for the Amiga - last April-June, I think - where we discuss the packet interface. >2) Is there a way to get a signal when I/O is available on > a FileHandle? Sure, just post a packet read of some large number of bytes. It will return when input is available with fewer bytes than you requested, but your MsgPort will signal you when it returns. Keep in mind, though, that if it's a console stream, CON: buffers its input until it sees a \n; you'll need to put it in RAW mode to get characters as they're typed. ***** =*|_o_o|\\=====Doug Walker, Software Distiller======================= *|. o.| || | o |// "I try to make everyone's day a little more surreal." ====== - Calvin usenet: ...mcnc!rti!sas!walker plink: dwalker bix: djwalker