chou@cs.washington.edu (Pai Chou) (04/25/91)
I wrote a terminal emulator program. It works fine when I'm connected directly as a terminal, or connected to certain brands of modem (e.g. SupraModem 2400). However, it would freeze on other brands, including Apple MacPortable internal 2400 and a few others. I tried to locate where the freezing occurs. It turns out the FSWrite() call is made but never returns. Can someone tell me what I might have done wrong? I did the following initializations and they all return noErr. (pascal syntax; listed in order of execution but not actual program segment) err := RAMSDOpen(sPortA); err := OpenDriver('.AOut', serOutNum); err := SerSetBuf(serOutNum, @outbuf, BUFSIZ); err := OpenDriver('.AIn', serInNum); err := SerSetBuf(serInNum, @inbuf, BUFSIZ); err := SerReset(serInNum, baud+stopBit+parity+dataBit); err := SerReset(serOutNum, baud+stopBit+parity+dataBit); flags.fXon := 0; flags.fInX := 0; fln := chr(17); flags.xOff := chr(19); flags.fCTS := 1; err := SerHShake(serInNum, flags); err := SerHShake(serOutNum, flags); Do these initialization calls look ok? All of them return noErr. then I have a loop (which also returns noErr) err := SerGetBuf(serInNum, icount); if icount > 0 then begin err := FSRead(serInNum, icount, @buf2); ... On a key down or file dump or paste, I call err := FSWrite(serOutNum, sz, @buf1); The FSWrite is executed but it never returns. I have no idea why. Again, this works fine with direct serial connection and certain modems, but not other modems. Another strange thing is that with the modem on, I would get the System Error bomb (id = 2) if I run it under Mac Taiwanese OS; but again, I have no problem with direct serial connection. Thanks in advance for any help or pointer to sample code. Pai Chou chou@june.cs.washington.edu