|
|
1.1 root 1: #define PADS_TERM
2: #include <pads.pri>
3:
4: static void Proto(p)
5: {
6: PutRemote(p);
7: }
8:
9: static void CheckProto( p )
10: {
11: if( GetRemote() != p ) ProtoErr("");
12: }
13:
14: static long ShiftIn( bytes )
15: register bytes;
16: {
17: register long shifter = 0;
18:
19: CheckProto( bytes );
20: while( bytes-- ) shifter = (shifter<<8) + (GetRemote()&0xFF);
21: return shifter;
22: }
23:
24: long RcvLong() { return (long) ShiftIn( P_LONG ); }
25: short RcvShort() { return (short) ShiftIn( P_SHORT ); }
26: unsigned char RcvUChar() { return (unsigned char) ShiftIn( P_UCHAR ); }
27:
28: static void ShiftOut( bytes, shifter )
29: register bytes;
30: register long shifter;
31: {
32: Proto( bytes );
33: do PutRemote( (char)(shifter>>( (--bytes)*8 )) ); while( bytes );
34: }
35:
36: void SendLong(x) long x; { ShiftOut( P_LONG, (long) x ); }
37: void SendShort(x) short x; { ShiftOut( P_SHORT, (long) x ); }
38: void SendUChar(x) unsigned char x; { ShiftOut( P_UCHAR, (long) x ); }
39:
40: char *RcvString( s )
41: register char *s;
42: {
43: register unsigned char len;
44:
45: assertf( (long) s );
46: CheckProto( P_STRING );
47: len = RcvUChar();
48: while( len-->0 ) *s++ = GetRemote();
49: *s = '\0';
50: return s;
51: }
52:
53: void SendString(s)
54: register char *s;
55: {
56: Proto( P_STRING );
57: SendUChar( strlen(s) );
58: while( *s ) PutRemote(*s++);
59: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.