|
|
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.