[Coco] OT: new territitory for me

Wayne Campbell asa.rand at gmail.com
Fri Jan 1 10:48:49 EST 2010


You are correct, Curtis. I am familiar with syscall and getstat. I can write 
the call to check for the status of the port now. :)

And thank you, Aaron.

Wayne

----- Original Message ----- 
From: "L. Curtis Boyle" <curtisboyle at sasktel.net>
To: "CoCoList for Color Computer Enthusiasts" <coco at maltedmedia.com>
Sent: Friday, January 01, 2010 3:09 AM
Subject: Re: [Coco] OT: new territitory for me


> Just use the SYSCALL subroutine to call all system calls (including 
> getstat/setstat calls) from Basic09.
>
> Sent from my iPhone
> L. Curtis Boyle
>
>
> On Jan 1, 2010, at 2:31 AM, Aaron Wolfe <aawolfe at gmail.com> wrote:
>
>> When writing a program to work with the new DW server, TCP/IP
>> connections are presented to your program as a serial port, and data
>> is sent and read using exactly the same calls as a terminal program or
>> BBS would use.  There are some special commands that can be sent over
>> this port that cause DW to make an IP connection  Not too different
>> from talking to a modem and telling it to dial, in fact if you want to
>> use existing telecom software, DW includes a Hayes compatible mode
>> where you can 'dial' internet addresses using ATD.
>>
>> Using these virtual ports is actually much easier than writing
>> software for a real serial port, because there are no baud rate or
>> parity settings to worry about, and no flow control in necessary.  The
>> DW server has an effectively infinite buffer for both incoming and
>> outgoing data.  All your program has to do is read and write to the
>> port when it wants to do so.
>>
>> There are a number of tried and true strategies for dealing with
>> incoming data that can happen at unpredictable times (keyboard input,
>> an IRC message from the server).  The simplest is called polling.  In
>> a program that is dealing with a small, fixed number of potential
>> inputs, this is probably the best technique to use.
>>
>> To use a polling design, you must find some may to determine whether
>> or not an input source has data ready for you.  Your program has a
>> small loop that checks all possible inputs for data, and hopefully
>> sleeps for a while to avoid what's called "busy waiting", basically
>> wasting lots of CPU waiting for something to happen.
>>
>> You can check whether the virtual port has data waiting for you with
>> the os9 system call GETSTAT and the argument SS.Ready.  It will return
>> E$NotRdy if there is nothing, or set the calling routine's B register
>> to the number of bytes available if there is data waiting in the
>> buffer.  I don't know how you access this from basic09, but I'm sure
>> it's possible.   There should be a way to check for a keystroke in a
>> similar manner, I am not familiar enough with OS-9 to tell you how
>> though.
>>
>> The key is that you never do a READ unless you already know there is
>> data ready to be read.  This avoids "blocking", your program won't
>> grind to a halt waiting on input from one stream while missing input
>> from the other.
>>
>> In this strategy you must also read and process input very quickly.
>> While you are handling input from the virtual port, you aren't reading
>> keystrokes.  They'll be buffered and waiting for you when you get
>> there to read them, but you need to be quick about it so that the user
>> has a good experience.  I've found in testing the DW routines that
>> 100ms is pretty acceptable for a response to a keystroke.  Coco can do
>> a lot in 100ms, but keep that in mind when writing code that handles
>> input.
>>
>> In a polling design, any processing that going to take more time than
>> is acceptable must be started in a separate process so that the
>> polling loop can continue handling input.  chances are this won't be
>> an issue in an IRC client.
>>
>> Hope that helps,
>> -Aaron
>>
>>
>>
>>
>> On Fri, Jan 1, 2010 at 1:27 AM, Wayne Campbell <asa.rand at gmail.com> 
>> wrote:
>>> One of the things that I have not understood in the past, and am  not 
>>> sure I understand even now, is network communications. I've  never 
>>> actually tried to write a terminal, or bbs, or message-board,  or a 
>>> server or client of any kind before. I know how to parse text- based 
>>> messages, which is what the internet is based on, and which  irc is 
>>> based on, but knowing how to handle the incoming and  outgoing data 
>>> streams has been elusive. In trying to do something  with it, I am 
>>> finding myself remembering another thing I have never  really 
>>> understood, event-driven programming, as opposed to  procedural, which 
>>> is what I am most familiar with.
>>>
>>> I find myself looking at the streaming issue, and seeing where I  need 
>>> to be able to handle things in a similar manner to the event- driven 
>>> style. Because I have to constantly read and process the  incoming 
>>> stream, while at the same time processing the messages  being typed by 
>>> the user. In addition, I have to manage the output  so that each thing 
>>> appears in the appropriate place on the screen,  or is held in the right 
>>> table for access as a sub-menu. I really  don't understand how this is 
>>> done, even though I did learn  something about it when I had my old Mac 
>>> Quadra 605. I do know  that, if I don't do it right, the interface will 
>>> be slow and kludgy.
>>>
>>> Parsing character streams usig strings, and building message  strings, 
>>> is easy in comparison. I may have questions, as I go.  Aaron Wolfe is a 
>>> great help, and has already given me a few clues  to build on. I am 
>>> working on them now, to see if I can produce  something that will 
>>> communicate with a irc server.
>>>
>>> Wayne
>>>
>>> --
>>> Coco mailing list
>>> Coco at maltedmedia.com
>>> http://five.pairlist.net/mailman/listinfo/coco
>>>
>>
>> --
>> Coco mailing list
>> Coco at maltedmedia.com
>> http://five.pairlist.net/mailman/listinfo/coco
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> http://five.pairlist.net/mailman/listinfo/coco 




More information about the Coco mailing list