TIP: Click on subject to list as thread! ANSI
echo: os2prog
to: David Muir
from: Peter Fitzsimmons
date: 1995-08-07 17:29:24
subject: Serial I/O {4 of 10}

DM>          if TX_free>0 then doswrite(Fport,fchar,1,ret);

Calling DosWrite/Read for each byte is __very__ expensive.  You should try
and combine your ReadChar and ReadBlock (and WriteChar/WriteBlock) so they
use the same buffer (which is emptied by another thread perhaps).

 DM> (*
 DM> Procedure WriteBLOCK(Var buf; Var towrite:longint; Var 
 DM> numb_writ:longint);
 DM>            Note that writeblock has been commented out because the method
 DM>            used is EXTREMELY prone to inaccuracies and 
 DM> loss of characters.
 DM>            Use "Writestring" instead.
 DM> BEGIN
 DM>    doswrite(Fport,buf,towrite,numb_writ);
 DM>    end;
 DM> *)

This is probably because of the write mode that the port is in.   I did not
see any ioctl call in your code to set the write mode (see DCBINFO).

If the write mode is "no wait" when your program starts,  the
code above will probably cause characters to be lost (you don't test to see
how many bytes were actually written).



--- Maximus/2 2.02p1

* Origin: Sol 3/Toronto (905)858-8488 (1:259/414)
SEEN-BY: 105/42 620/243 711/401 409 410 413 430 807 808 809 934 955 712/407
SEEN-BY: 515 628 704 713/888 800/1 7877/2809
@PATH: 259/414 400 99 250/99 3615/50 396/1 270/101 105/103 42 712/515
@PATH: 711/808 809 934

SOURCE: echomail via fidonet.ozzmosis.com

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.