|
|
1.1 ! root 1: /* ! 2: * Sydney C Compiler. ! 3: * ! 4: * Copyright 1984, Bruce Ellis. ! 5: * ! 6: * Unauthorised possesion, sale or use prohibited. ! 7: */ ! 8: ! 9: extern char *err_ptr; ! 10: extern char *put_ptr; ! 11: extern char *get_end; ! 12: extern char *get_ptr; ! 13: extern char err_buff[]; ! 14: extern char put_buff[]; ! 15: extern char get_buff[]; ! 16: extern void err_flush(); ! 17: extern void put_flush(); ! 18: ! 19: #define put(c) if (*put_ptr++ = (c), put_ptr == &put_buff[BUFFZ]) \ ! 20: put_flush(); \ ! 21: else ! 22: ! 23: #ifdef PUT_CALLS ! 24: extern void putz(); ! 25: extern void vput(); ! 26: extern void uput(); ! 27: #else PUT_CALLS ! 28: /* ! 29: * vput and uput pack longs into 1, 2 or 4 bytes. ! 30: * putz() is equivalent to [uv]put(0) but less optimisable. ! 31: * ! 32: * If packing is not required we can replace them with ! 33: * four put()s. The argument to the [uv]put macros should ! 34: * be a register (look at how often it is accessed). ! 35: */ ! 36: #define putz() put(0) ! 37: ! 38: #define vput(i) if ((unsigned long)(i) < 0x80) \ ! 39: put(i); \ ! 40: else if ((unsigned long)(i) < 0x4000) \ ! 41: { \ ! 42: put((((int)(i) >> 8) & 0x3F) | 0x80); \ ! 43: put((int)(i) & 0xFF); \ ! 44: } \ ! 45: else \ ! 46: { \ ! 47: put((((i) >> 24) & 0x3F) | 0xC0); \ ! 48: put(((i) >> 16) & 0xFF); \ ! 49: put(((int)(i) >> 8) & 0xFF); \ ! 50: put((int)(i) & 0xFF); \ ! 51: } ! 52: ! 53: #define uput(i) if ((i) < 0x40) \ ! 54: { \ ! 55: if ((i) < -0x40) \ ! 56: { \ ! 57: if ((i) < -0x2000) \ ! 58: { \ ! 59: put((((i) >> 24) & 0x3F) | 0xC0); \ ! 60: put(((i) >> 16) & 0xFF); \ ! 61: put(((int)(i) >> 8) & 0xFF); \ ! 62: put((int)(i) & 0xFF); \ ! 63: } \ ! 64: else \ ! 65: { \ ! 66: put((((int)(i) >> 8) & 0x3F) | 0x80); \ ! 67: put((int)(i) & 0xFF); \ ! 68: } \ ! 69: } \ ! 70: else \ ! 71: put(i); \ ! 72: } \ ! 73: else if ((i) < 0x2000) \ ! 74: { \ ! 75: put((((int)(i) >> 8) & 0x3F) | 0x80); \ ! 76: put((int)(i) & 0xFF); \ ! 77: } \ ! 78: else \ ! 79: { \ ! 80: put((((i) >> 24) & 0x3F) | 0xC0); \ ! 81: put(((i) >> 16) & 0xFF); \ ! 82: put(((int)(i) >> 8) & 0xFF); \ ! 83: put((int)(i) & 0xFF); \ ! 84: } ! 85: #endif PUT_CALLS
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.