UD069225@NDSUVM1.BITNET (Eric H. Romo) (05/25/88)
[HyperTerm XCMD sources]
[Moderator's Note: This posting contains the source files for the
xcmds in the HyperTerm stack posted in comp.binaries.mac.]
---
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# breakSPort.p
# bufferSPort.p
# openPort.p
# portHasChar.p
# recvPort.p
# recvString.p
# recvUpTo.p
# resetPort.p
# sendPort.p
# This archive created: Tue May 24 08:36:57 1988
# By: Roger L. Long (bytebug@dhw68k.cts.com)
export PATH; PATH=/bin:$PATH
echo shar: extracting "'breakSPort.p'" '(1932 characters)'
if test -f 'breakSPort.p'
then
echo shar: will not over-write existing file "'breakSPort.p'"
else
sed 's/^X//' << \SHAR_EOF > 'breakSPort.p'
X{$R-}
X
X(*
X breakSPort(port number, trueOrFalse) -- Send or clear a break on the serial port.
X
X To compile and link this file using Macintosh Programmer's Workshop,
X
X pascal -w resetPort.p
X link -m ENTRYPOINT -o HyperCommands -rt XCMD=1 -sn Main=breakSPort breakSPort.p.o "{MPW}"Libraries:interface.o
X
X*)
X
X{$S breakSPort } { Segment name must be the same as the command name. }
X
Xunit DummyUnit;
X
Xinterface
X
Xuses MemTypes, QuickDraw, OSIntf, HyperXCmd;
X
Xprocedure EntryPoint(paramPtr: XCmdPtr);
X
Ximplementation
X
Xtype
X
XStr31 = String[31];
X
Xprocedure breakSPort(paramPtr: XCmdPtr); forward;
X
Xprocedure EntryPoint(paramPtr: XCmdPtr);
X
X begin
X breakSPort(paramPtr);
X end;
X
Xprocedure breakSPort(paramPtr: XCmdPtr);
X
X var portNumber: integer;
X setting: integer;
X outPort: integer;
X str: Str255;
X doBreak: boolean;
X
X {$I XCmdGlue.inc}
X
X procedure Fail(errMsg: Str255); { set theResult and quit }
X begin
X paramPtr^.returnValue := PasToZero(errMsg);
X exit(breakSPort);
X end;
X
X begin
X if paramPtr^.paramCount <> 2 then Fail('parameter count is not 2');
X
X ZeroToPas(paramPtr^.params[1]^,str); { First parameter is port number. }
X portNumber := StrToNum(str);
X if (portNumber < 1) or (portNumber > 2) then Fail('invalid port number');
X ZeroToPas(paramPtr^.params[2]^,str); { Second parameter is setting. }
X doBreak := false;
X if length(str) > 0 then
X if (str[1] = 't') or (str[1] = 'T') then doBreak := true;
X
X if portNumber = 1 then outPort := -7
X else outPort := -9;
X if doBreak then
X begin
X if SerSetBrk(outPort) <> noErr then Fail('SerSetBrk failed');
X end
X else
X begin
X if SerClrBrk(outPort) <> noErr then Fail('SerClrBrk failed');
X end;
X end;
X
Xend.
SHAR_EOF
if test 1932 -ne "`wc -c < 'breakSPort.p'`"
then
echo shar: error transmitting "'breakSPort.p'" '(should have been 1932 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'bufferSPort.p'" '(2504 characters)'
if test -f 'bufferSPort.p'
then
echo shar: will not over-write existing file "'bufferSPort.p'"
else
sed 's/^X//' << \SHAR_EOF > 'bufferSPort.p'
X{$R-}
X
X(*
X bufferSPort(port number, oldBuffer,sizeOfBuffer) -- Free the old buffer at the address specified by
X oldBuffer (if non-zero), and allocate a new buffer of sizeOfBuffer (or revert to default buffer if
X zero). Return the address of the allocated buffer or zero if sizeOfBuffer is zero.
X
X To compile and link this file using Macintosh Programmer's Workshop,
X
X pascal -w bufferSPort.p
X link -m ENTRYPOINT -o HyperCommands -rt XFCN=3 -sn Main=bufferSPort bufferSPort.p.o "{MPW}"Libraries:interface.o
X
X*)
X
X{$S bufferSPort } { Segment name must be the same as the command name. }
X
Xunit DummyUnit;
X
Xinterface
X
Xuses MemTypes, QuickDraw, OSIntf, ToolIntf, HyperXCmd;
X
Xprocedure EntryPoint(paramPtr: XCmdPtr);
X
Ximplementation
X
Xconst
X
Xreturn = chr(13);
Xlinefeed = chr(10);
Xbs = chr(8);
X
Xtype
X
XStr31 = String[31];
X
Xprocedure bufferSPort(paramPtr: XCmdPtr); forward;
X
Xprocedure EntryPoint(paramPtr: XCmdPtr);
X
X begin
X bufferSPort(paramPtr);
X end;
X
Xprocedure bufferSPort(paramPtr: XCmdPtr);
X
X var portNumber: integer;
X oldBufferPtr: Ptr;
X newBufferPtr: Ptr;
X newBufferSize: longInt;
X inPort, outPort: integer;
X str: Str255;
X
X {$I XCmdGlue.inc}
X
X procedure Fail(errMsg: Str255); { set theResult and quit }
X begin
X paramPtr^.returnValue := PasToZero(errMsg);
X exit(bufferSPort);
X end;
X
X begin
X if paramPtr^.paramCount <> 3 then Fail('parameter count is not 3');
X
X ZeroToPas(paramPtr^.params[1]^,str); { First parameter is port number. }
X portNumber := StrToNum(str);
X if (portNumber < 1) or (portNumber > 2) then Fail('invalid port number');
X ZeroToPas(paramPtr^.params[2]^,str); { Second parameter is old buffer address. }
X oldBufferPtr := Ptr(StrToNum(str));
X ZeroToPas(paramPtr^.params[3]^,str); { Third parameter is new buffer size. }
X newBufferSize := StrToNum(str);
X
X if portNumber = 1 then inPort := -6
X else inPort := -8;
X
X if newBufferSize = 0 then newBufferPtr := nil
X else newBufferPtr := NewPtr(newBufferSize);
X if SerSetBuf(inPort,newBufferPtr,newBufferSize) <> noErr then
X begin
X DisposPtr(newBufferPtr);
X Fail('SetSetBuf failed');
X end;
X if oldBufferPtr <> NIL then DisposPtr(oldBufferPtr);
X str := LongToStr(ord4(newBufferPtr));
X paramPtr^.returnValue := PasToZero(str);
X end;
Xend.
SHAR_EOF
if test 2504 -ne "`wc -c < 'bufferSPort.p'`"
then
echo shar: error transmitting "'bufferSPort.p'" '(should have been 2504 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'openPort.p'" '(2102 characters)'
if test -f 'openPort.p'
then
echo shar: will not over-write existing file "'openPort.p'"
else
sed 's/^X//' << \SHAR_EOF > 'openPort.p'
X{$R-}
X
X(*
X openSPort portNumber -- Open the serial port driver.
X
X To compile and link this file using Macintosh Programmer's Workshop,
X
X pascal -w openPort.p
X link -m ENTRYPOINT -o HyperCommands -rt XCMD=0 -sn Main=openSPort openPort.p.o "{MPW}"Libraries:interface.o
X
X*)
X
X{$S openSPort } { Segment name must be the same as the command name. }
X
Xunit DummyUnit;
X
Xinterface
X
Xuses MemTypes, QuickDraw, OSIntf, HyperXCmd;
X
Xprocedure EntryPoint(paramPtr: XCmdPtr);
X
Ximplementation
X
Xtype
X
XStr31 = String[31];
X
Xprocedure openSPort(paramPtr: XCmdPtr); forward;
X
Xprocedure EntryPoint(paramPtr: XCmdPtr);
X
X begin
X openSPort(paramPtr);
X end;
X
Xprocedure openSPort(paramPtr: XCmdPtr);
X
X var portNumber: integer;
X inPort, outPort: integer;
X actualIn, actualOut: integer;
X i: integer;
X str: Str255;
X shakes: SerShk;
X
X {$I XCmdGlue.inc}
X
X procedure Fail(errMsg: Str255); { set theResult and quit }
X begin
X paramPtr^.returnValue := PasToZero(errMsg);
X exit(openSPort);
X end;
X
X begin
X if paramPtr^.paramCount <> 1 then Fail('parameter count is not 1');
X
X ZeroToPas(paramPtr^.params[1]^,str); { First parameter is port number. }
X portNumber := StrToNum(str);
X if (portNumber < 1) or (portNumber > 2) then Fail('invalid port number');
X
X if portNumber = 1 then
X begin
X inPort := -6; outPort := -7;
X end
X else
X begin
X inPort := -8; outPort := -9;
X end;
X if (OpenDriver('.AOut',actualOut) <> noErr) or (OpenDriver('.AIn',actualIn) <> noErr) then
X Fail('OpenDriver failed');
X if (actualOut <> outPort) or (actualIn <> inPort) then Fail('openDriver failed');
X with shakes do
X begin
X fXOn := 0; fCTS := 0; errs := 0; evts := 0; fInX := 0;
X end;
X if SerHShake(inPort,shakes) <> noErr then Fail('SerHShake failed');
X if SerHShake(outPort,shakes) <> noErr then Fail('SerHShake failed');
X end;
X
Xend.
SHAR_EOF
if test 2102 -ne "`wc -c < 'openPort.p'`"
then
echo shar: error transmitting "'openPort.p'" '(should have been 2102 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'portHasChar.p'" '(1638 characters)'
if test -f 'portHasChar.p'
then
echo shar: will not over-write existing file "'portHasChar.p'"
else
sed 's/^X//' << \SHAR_EOF > 'portHasChar.p'
X{$R-}
X
X(*
X SPortHasChar(port number) -- Return "true" if the serial port has data; "false" otherwise.
X
X To compile and link this file using Macintosh Programmer's Workshop,
X
X pascal -w portHasChar.p
X link -m ENTRYPOINT -o HyperCommands -rt XFCN=0 -sn Main=SPortHasChar portHasChar.p.o "{MPW}"Libraries:interface.o
X
X*)
X
X{$S SPortHasChar } { Segment name must be the same as the command name. }
X
Xunit DummyUnit;
X
Xinterface
X
Xuses MemTypes, QuickDraw, OSIntf, HyperXCmd;
X
Xprocedure EntryPoint(paramPtr: XCmdPtr);
X
Ximplementation
X
Xtype
X
XStr31 = String[31];
X
Xprocedure SPortHasChar(paramPtr: XCmdPtr); forward;
X
Xprocedure EntryPoint(paramPtr: XCmdPtr);
X
X begin
X SPortHasChar(paramPtr);
X end;
X
Xprocedure SPortHasChar(paramPtr: XCmdPtr);
X
X var portNumber: integer;
X inPort: integer;
X str: Str255;
X l: longInt;
X
X {$I XCmdGlue.inc}
X
X procedure Fail(errMsg: Str255); { set theResult and quit }
X begin
X paramPtr^.returnValue := PasToZero(errMsg);
X exit(SPortHasChar);
X end;
X
X begin
X if paramPtr^.paramCount <> 1 then Fail('parameter count is not 1');
X
X ZeroToPas(paramPtr^.params[1]^,str); { First parameter is port number. }
X portNumber := StrToNum(str);
X if (portNumber < 1) or (portNumber > 2) then Fail('invalid port number');
X
X if portNumber = 1 then inPort := -6
X else inPort := -8;
X if SerGetBuf(inPort,l) <> noErr then Fail('SerGetBuf failed');
X if l = 0 then paramPtr^.returnValue := PasToZero('false')
X else paramPtr^.returnValue := PasToZero('true');
X end;
X
Xend.
SHAR_EOF
if test 1638 -ne "`wc -c < 'portHasChar.p'`"
then
echo shar: error transmitting "'portHasChar.p'" '(should have been 1638 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'recvPort.p'" '(1614 characters)'
if test -f 'recvPort.p'
then
echo shar: will not over-write existing file "'recvPort.p'"
else
sed 's/^X//' << \SHAR_EOF > 'recvPort.p'
X{$R-}
X
X(*
X recvSPort(port number) -- Return a character from the serial port.
X
X To compile and link this file using Macintosh Programmer's Workshop,
X
X pascal -w recvPort.p
X link -m ENTRYPOINT -o HyperCommands -rt XFCN=1 -sn Main=recvSPort recvPort.p.o "{MPW}"Libraries:interface.o
X
X*)
X
X{$S recvSPort } { Segment name must be the same as the command name. }
X
Xunit DummyUnit;
X
Xinterface
X
Xuses MemTypes, QuickDraw, OSIntf, HyperXCmd;
X
Xprocedure EntryPoint(paramPtr: XCmdPtr);
X
Ximplementation
X
Xtype
X
XStr31 = String[31];
X
Xprocedure recvSPort(paramPtr: XCmdPtr); forward;
X
Xprocedure EntryPoint(paramPtr: XCmdPtr);
X
X begin
X recvSPort(paramPtr);
X end;
X
Xprocedure recvSPort(paramPtr: XCmdPtr);
X
X var portNumber: integer;
X inPort: integer;
X str: Str255;
X l: longInt;
X
X {$I XCmdGlue.inc}
X
X procedure Fail(errMsg: Str255); { set theResult and quit }
X begin
X paramPtr^.returnValue := PasToZero(errMsg);
X exit(recvSPort);
X end;
X
X begin
X if paramPtr^.paramCount <> 1 then Fail('parameter count is not 1');
X
X ZeroToPas(paramPtr^.params[1]^,str); { First parameter is port number. }
X portNumber := StrToNum(str);
X if (portNumber < 1) or (portNumber > 2) then Fail('invalid port number');
X
X if portNumber = 1 then inPort := -6
X else inPort := -8;
X l := 1;
X str[0] := chr(1);
X if FSRead(inPort,l,Ptr(ord4(@str)+1)) <> noErr then Fail('FSRead failed');
X if l <> 1 then str[0] := chr(0);
X paramPtr^.returnValue := PasToZero(str);
X end;
X
Xend.
SHAR_EOF
if test 1614 -ne "`wc -c < 'recvPort.p'`"
then
echo shar: error transmitting "'recvPort.p'" '(should have been 1614 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'recvString.p'" '(6707 characters)'
if test -f 'recvString.p'
then
echo shar: will not over-write existing file "'recvString.p'"
else
sed 's/^X//' << \SHAR_EOF > 'recvString.p'
X{$R-}
X
X(*
X recvString(port number, termination character, waitTime, echo, edit,oldString) -- Return a string from the
X serial port; return everything available, up to the termination character (if any). Pass an empty
X termination character to receive everything available. WaitTime is the amount of time to wait
X for the input, in ticks (60ths of a second). Echo is true to enable echoing. Edit is true to enable edit
X characters (i.e., backspace). oldString is what was read the last call (presumably terminated
X due to a time-out).
X
X To compile and link this file using Macintosh Programmer's Workshop,
X
X pascal -w recvString.p
X link -m ENTRYPOINT -o HyperCommands -rt XFCN=0 -sn Main=recvUpTo recvString.p.o "{MPW}"Libraries:interface.o
X
X*)
X
X{$S recvString } { Segment name must be the same as the command name. }
X
Xunit DummyUnit;
X
Xinterface
X
Xuses MemTypes, QuickDraw, OSIntf, ToolIntf, HyperXCmd;
X
Xprocedure EntryPoint(paramPtr: XCmdPtr);
X
Ximplementation
X
Xconst
X
Xreturn = chr(13);
Xlinefeed = chr(10);
Xbs = chr(8);
X
Xtype
X
XStr31 = String[31];
X
Xprocedure recvString(paramPtr: XCmdPtr); forward;
X
Xprocedure EntryPoint(paramPtr: XCmdPtr);
X
X begin
X recvString(paramPtr);
X end;
X
Xprocedure recvString(paramPtr: XCmdPtr);
X
X var portNumber: integer;
X inPort, outPort: integer;
X str: Str255;
X l: longInt;
X waitForChars: longInt;
X lookForTerm: boolean;
X termChar: char;
X echoOn: boolean;
X editOn: boolean;
X linefeedStr: string[1];
X bsStr: string[3];
X resultHand: Handle;
X resultSize: longInt;
X theChar: char;
X p: Ptr;
X
X {$I XCmdGlue.inc}
X
X procedure Fail(errMsg: Str255); { set theResult and quit }
X begin
X paramPtr^.returnValue := PasToZero(errMsg);
X exit(recvString);
X end;
X
X begin
X if paramPtr^.paramCount <> 6 then Fail('parameter count is not 6');
X
X ZeroToPas(paramPtr^.params[1]^,str); { First parameter is port number. }
X portNumber := StrToNum(str);
X if (portNumber < 1) or (portNumber > 2) then Fail('invalid port number');
X ZeroToPas(paramPtr^.params[2]^,str); { Second parameter is termination character. }
X if length(str) = 0 then lookForTerm := false
X else
X begin
X lookForTerm := true;
X termChar := str[1];
X end;
X ZeroToPas(paramPtr^.params[3]^,str); { Third parameter is whether to wait. }
X waitForChars := StrToNum(str);
X ZeroToPas(paramPtr^.params[4]^,str); { Fourth parameter is whether to echo. }
X echoOn := false;
X if length(str) > 0 then
X if (str[1] = 't') or (str[1] = 'T') then echoOn := true;
X ZeroToPas(paramPtr^.params[5]^,str); { Fifth parameter is whether to edit. }
X editOn := false;
X if length(str) > 0 then
X if (str[1] = 't') or (str[1] = 'T') then editOn := true;
X resultHand := paramPtr^.params[6]; { Sixth parameter is the old string. }
X if resultHand = NIL then Fail('NIL resultHandle!');
X l := GetHandleSize(resultHand);
X p := resultHand^;
X resultSize := 1;
X while resultSize < l do
X begin
X if p^ = 0 then leave;
X p := Ptr(ord4(p)+1);
X resultSize := resultSize + 1;
X end;
X if resultSize < 1 then Fail('Input string size too small!');
X if HandToHand(resultHand) <> noErr then Fail('HandToHand failed!');
X resultSize := resultSize-1;
X SetHandleSize(resultHand,resultSize);
X
X if portNumber = 1 then
X begin
X inPort := -6;
X outPort := -7;
X end
X else
X begin
X inPort := -8;
X outPort := -9;
X end;
X linefeedStr[0] := chr(1); linefeedStr[1] := linefeed;
X bsStr := ' '; bsStr[1] := bs; bsStr[3] := bs;
X waitForChars := waitForChars + TickCount;
X while TickCount <= waitForChars do
X begin
X if SerGetBuf(inPort,l) <> noErr then
X begin
X DisposHandle(resultHand);
X Fail('SerGetBuf failed');
X end;
X if l = 0 then cycle;
X l := 1;
X resultSize := resultSize+1;
X SetHandleSize(resultHand,resultSize);
X if MemError <> noErr then
X begin
X DisposHandle(resultHand);
X Fail('SetHandleSize failed!');
X end;
X HLock(resultHand);
X if FSRead(inPort,l,Ptr(ord4(resultHand^)+resultSize-1)) <> noErr then
X begin
X DisposHandle(resultHand);
X Fail('FSRead failed');
X end;
X HUnlock(resultHand);
X p := Ptr(ord4(resultHand^)+resultSize-1);
X p^ := BAND(p^,$7F);
X theChar := chr(p^);
X if echoOn then
X begin
X l := 1;
X if FSWrite(outPort,l,Ptr(ord4(resultHand^)+resultSize-1)) <> noErr then
X Fail('FSWriter failed');
X if theChar = return then
X begin
X l := length(linefeedStr);
X if FSWrite(outPort,l,Ptr(ord4(@linefeedStr)+1)) <> noErr then Fail('FSWrite failed');
X end;
X if editOn and (theChar = bs) then
X begin
X l := length(bsStr);
X if FSWrite(outPort,l,Ptr(ord4(@bsStr)+1)) <> noErr then Fail('FSWrite failed');
X end;
X end;
X if editOn then
X begin
X if theChar = bs then
X begin
X resultSize := resultSize-2;
X if resultSize < 0 then resultSize := 0;
X SetHandleSize(resultHand,resultSize);
X end;
X end;
X if lookForTerm then
X if theChar = termChar then leave;
X if resultSize > 30000 then leave;
X end;
X SetHandleSize(resultHand,resultSize+1);
X p := ptr(ord4(resultHand^)+resultSize);
X p^ := 0;
X paramPtr^.returnValue := resultHand;
X end;
X
Xend.
SHAR_EOF
if test 6707 -ne "`wc -c < 'recvString.p'`"
then
echo shar: error transmitting "'recvString.p'" '(should have been 6707 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'recvUpTo.p'" '(4983 characters)'
if test -f 'recvUpTo.p'
then
echo shar: will not over-write existing file "'recvUpTo.p'"
else
sed 's/^X//' << \SHAR_EOF > 'recvUpTo.p'
X{$R-}
X
X(*
X recvUpTo(port number, termination character, waitTime, echo, edit) -- Return a string from the
X serial port; return everything available, up to the termination character (if any). Pass an empty
X termination character to receive everything available. WaitTime is the amount of time to wait
X for the input, in ticks (60ths of a second). Echo is true to enable echoing. Edit is
X true to enable edit characters (i.e., backspace).
X
X To compile and link this file using Macintosh Programmer's Workshop,
X
X pascal -w recvUpTo.p
X link -m ENTRYPOINT -o HyperCommands -rt XFCN=0 -sn Main=recvUpTo recvUpTo.p.o "{MPW}"Libraries:interface.o
X
X*)
X
X{$S recvUpTo } { Segment name must be the same as the command name. }
X
Xunit DummyUnit;
X
Xinterface
X
Xuses MemTypes, QuickDraw, OSIntf, ToolIntf, HyperXCmd;
X
Xprocedure EntryPoint(paramPtr: XCmdPtr);
X
Ximplementation
X
Xconst
X
Xreturn = chr(13);
Xlinefeed = chr(10);
Xbs = chr(8);
X
Xtype
X
XStr31 = String[31];
X
Xprocedure recvUpTo(paramPtr: XCmdPtr); forward;
X
Xprocedure EntryPoint(paramPtr: XCmdPtr);
X
X begin
X recvUpTo(paramPtr);
X end;
X
Xprocedure recvUpTo(paramPtr: XCmdPtr);
X
X var portNumber: integer;
X inPort, outPort: integer;
X str: Str255;
X l: longInt;
X waitForChars: longInt;
X lookForTerm: boolean;
X termChar: char;
X echoOn: boolean;
X editOn: boolean;
X linefeedStr: string[1];
X bsStr: string[3];
X
X {$I XCmdGlue.inc}
X
X procedure Fail(errMsg: Str255); { set theResult and quit }
X begin
X paramPtr^.returnValue := PasToZero(errMsg);
X exit(recvUpTo);
X end;
X
X begin
X if paramPtr^.paramCount <> 5 then Fail('parameter count is not 5');
X
X ZeroToPas(paramPtr^.params[1]^,str); { First parameter is port number. }
X portNumber := StrToNum(str);
X if (portNumber < 1) or (portNumber > 2) then Fail('invalid port number');
X ZeroToPas(paramPtr^.params[2]^,str); { Second parameter is termination character. }
X if length(str) = 0 then lookForTerm := false
X else
X begin
X lookForTerm := true;
X termChar := str[1];
X end;
X ZeroToPas(paramPtr^.params[3]^,str); { Third parameter is whether to wait. }
X waitForChars := StrToNum(str);
X ZeroToPas(paramPtr^.params[4]^,str); { Fourth parameter is whether to echo. }
X echoOn := false;
X if length(str) > 0 then
X if (str[1] = 't') or (str[1] = 'T') then echoOn := true;
X ZeroToPas(paramPtr^.params[5]^,str); { Fifth parameter is whether to edit. }
X editOn := false;
X if length(str) > 0 then
X if (str[1] = 't') or (str[1] = 'T') then editOn := true;
X
X if portNumber = 1 then
X begin
X inPort := -6;
X outPort := -7;
X end
X else
X begin
X inPort := -8;
X outPort := -9;
X end;
X linefeedStr[0] := chr(1); linefeedStr[1] := linefeed;
X bsStr := ' '; bsStr[1] := bs; bsStr[3] := bs;
X str := '';
X waitForChars := waitForChars + TickCount;
X while TickCount <= waitForChars do
X begin
X if SerGetBuf(inPort,l) <> noErr then Fail('SerGetBuf failed');
X if l = 0 then cycle;
X str[0] := chr(integer(str[0])+1);
X l := 1;
X if FSRead(inPort,l,Ptr(ord4(@str)+ord(str[0]))) <> noErr then Fail('FSRead failed');
X if echoOn then
X begin
X l := 1;
X if FSWrite(outPort,l,Ptr(ord4(@str)+ord(str[0]))) <> noErr then Fail('FSWriter failed');
X if str[length(str)] = return then
X begin
X l := length(linefeedStr);
X if FSWrite(outPort,l,Ptr(ord4(@linefeedStr)+1)) <> noErr then Fail('FSWrite failed');
X end;
X if editOn and (str[length(str)] = bs) then
X begin
X l := length(bsStr);
X if FSWrite(outPort,l,Ptr(ord4(@bsStr)+1)) <> noErr then Fail('FSWrite failed');
X end;
X end;
X if editOn then
X begin
X if str[length(str)] = bs then
X begin
X str[0] := chr(length(str)-1);
X if length(str) > 0 then str[0] := chr(length(str)-1);
X end;
X end;
X if lookForTerm then
X if str[length(str)] = termChar then leave;
X if length(str) = 255 then leave;
X end;
X paramPtr^.returnValue := PasToZero(str);
X end;
X
Xend.
SHAR_EOF
if test 4983 -ne "`wc -c < 'recvUpTo.p'`"
then
echo shar: error transmitting "'recvUpTo.p'" '(should have been 4983 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'resetPort.p'" '(1800 characters)'
if test -f 'resetPort.p'
then
echo shar: will not over-write existing file "'resetPort.p'"
else
sed 's/^X//' << \SHAR_EOF > 'resetPort.p'
X{$R-}
X
X(*
X resetSPort(port number, setting) -- Reset the serial port driver.
X
X To compile and link this file using Macintosh Programmer's Workshop,
X
X pascal -w resetPort.p
X link -m ENTRYPOINT -o HyperCommands -rt XCMD=1 -sn Main=resetSPort resetPort.p.o "{MPW}"Libraries:interface.o
X
X*)
X
X{$S resetSPort } { Segment name must be the same as the command name. }
X
Xunit DummyUnit;
X
Xinterface
X
Xuses MemTypes, QuickDraw, OSIntf, HyperXCmd;
X
Xprocedure EntryPoint(paramPtr: XCmdPtr);
X
Ximplementation
X
Xtype
X
XStr31 = String[31];
X
Xprocedure resetSPort(paramPtr: XCmdPtr); forward;
X
Xprocedure EntryPoint(paramPtr: XCmdPtr);
X
X begin
X resetSPort(paramPtr);
X end;
X
Xprocedure resetSPort(paramPtr: XCmdPtr);
X
X var portNumber: integer;
X setting: integer;
X inPort, outPort: integer;
X str: Str255;
X
X {$I XCmdGlue.inc}
X
X procedure Fail(errMsg: Str255); { set theResult and quit }
X begin
X paramPtr^.returnValue := PasToZero(errMsg);
X exit(resetSPort);
X end;
X
X begin
X if paramPtr^.paramCount <> 2 then Fail('parameter count is not 2');
X
X ZeroToPas(paramPtr^.params[1]^,str); { First parameter is port number. }
X portNumber := StrToNum(str);
X if (portNumber < 1) or (portNumber > 2) then Fail('invalid port number');
X ZeroToPas(paramPtr^.params[2]^,str); { Second parameter is setting. }
X setting := StrToNum(str);
X
X if portNumber = 1 then
X begin
X inPort := -6; outPort := -7;
X end
X else
X begin
X inPort := -8; outPort := -9;
X end;
X if (SerReset(inPort,setting) <> noErr) or (SerReset(outPort,setting) <> noErr) then
X Fail('SerReset failed');
X end;
X
Xend.
SHAR_EOF
if test 1800 -ne "`wc -c < 'resetPort.p'`"
then
echo shar: error transmitting "'resetPort.p'" '(should have been 1800 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'sendPort.p'" '(2502 characters)'
if test -f 'sendPort.p'
then
echo shar: will not over-write existing file "'sendPort.p'"
else
sed 's/^X//' << \SHAR_EOF > 'sendPort.p'
X{$R-}
X
X(*
X sendSPort portNumber, addLFs, string -- Send a string to the serial port driver.
X
X To compile and link this file using Macintosh Programmer's Workshop,
X
X pascal -w sendPort.p
X link -m ENTRYPOINT -o HyperCommands -rt XCMD=2 -sn Main=sendSPort sendPort.p.o "{MPW}"Libraries:interface.o
X
X*)
X
X{$S sendSPort } { Segment name must be the same as the command name. }
X
Xunit DummyUnit;
X
Xinterface
X
Xuses MemTypes, QuickDraw, OSIntf, HyperXCmd;
X
Xprocedure EntryPoint(paramPtr: XCmdPtr);
X
Ximplementation
X
Xconst
X
Xreturn = 13;
Xlinefeed = 10;
X
Xtype
X
XStr31 = String[31];
X
Xprocedure sendSPort(paramPtr: XCmdPtr); forward;
X
Xprocedure EntryPoint(paramPtr: XCmdPtr);
X
X begin
X sendSPort(paramPtr);
X end;
X
Xprocedure sendSPort(paramPtr: XCmdPtr);
X
X var portNumber: integer;
X outPort: integer;
X sendLFs: boolean;
X str: Str255;
X p: Ptr;
X l: longInt;
X linefeedByte: SignedByte;
X
X {$I XCmdGlue.inc}
X
X procedure Fail(errMsg: Str255); { set theResult and quit }
X begin
X paramPtr^.returnValue := PasToZero(errMsg);
X exit(sendSPort);
X end;
X
X begin
X if paramPtr^.paramCount <> 3 then Fail('parameter count is not 3');
X
X ZeroToPas(paramPtr^.params[1]^,str); { First parameter is port number. }
X portNumber := StrToNum(str);
X if (portNumber < 1) or (portNumber > 2) then Fail('invalid port number');
X ZeroToPas(paramPtr^.params[2]^,str); { Third parameter is whether to wait. }
X sendLFs := false;
X if length(str) > 0 then
X if (str[1] = 't') or (str[1] = 'T') then sendLFs := true;
X HLock(paramPtr^.params[3]);
X p := paramPtr^.params[3]^; { Second parameter is string to send. }
X
X if portNumber = 1 then outPort := -7
X else outPort := -9;
X linefeedByte := linefeed;
X while p^ <> 0 do
X begin
X l := 1;
X if FSWrite(outPort,l,p) <> noErr then Fail('FSWrite failed');
X if l <> 1 then Fail('not all characters sent');
X if sendLFs and (p^ = return) then
X begin
X l := 1;
X if FSWrite(outPort,l,@linefeedByte) <> noErr then Fail('FSWrite failed');
X if l <> 1 then Fail('not all characters sent');
X end;
X p := ptr(ord4(p)+1);
X end;
X HUnlock(paramPtr^.params[3]);
X end;
X
Xend.
SHAR_EOF
if test 2502 -ne "`wc -c < 'sendPort.p'`"
then
echo shar: error transmitting "'sendPort.p'" '(should have been 2502 characters)'
fi
fi # end of overwriting check
# End of shell archive
exit 0
---