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