From: Jeff Law Date: Tue, 3 Aug 1999 09:34:18 +0000 (-0600) Subject: Delete questionable files X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=da630e12536e600c36ad08caae7c2c42fedd35ce;p=gcc.git Delete questionable files From-SVN: r28460 --- diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh43.C b/gcc/testsuite/g++.old-deja/g++.mike/eh43.C deleted file mode 100644 index c5fbde939d0..00000000000 --- a/gcc/testsuite/g++.old-deja/g++.mike/eh43.C +++ /dev/null @@ -1,741 +0,0 @@ -// Build don't link: -// Special g++ Options: -fexceptions - -// testcase to check obstack allocation for cleanups - -typedef unsigned char byte; -typedef unsigned short word16; -typedef unsigned long word32; -typedef unsigned char boolean; -enum {FALSE, TRUE}; -extern "C" { -extern void __eprintf (const char *, const char *, unsigned, const char *); -} -extern "C" { -typedef unsigned int size_t; -extern void *memccpy(void *, const void *, int, size_t); -extern void *memchr(const void *, int, size_t); -extern void *memset(void *, int, size_t); -} -template struct SecBlock -{ -public: - SecBlock(unsigned int size) - : size(size), ptr((new T [( size )]) ) {} - ~SecBlock() - {(memset(( ptr ), 0, ( size )*sizeof(*( ptr ))), delete [] ( ptr )) ;} - operator T *() const - {return ptr;} - T *operator +(unsigned int offset) - {return ptr+offset;} - T& operator[](int index) - {((void) (( index SecByteBlock; -void xorbuf(byte *buf, const byte *mask, unsigned int count); -void byteReverse(word16 *out, const word16 *in, unsigned int byteCount); -void byteReverse(word32 *out, const word32 *in, unsigned int byteCount); -inline word16 Invert(const word16 value) -{ - return (value << 8) | (value >> 8); -} -inline word32 Invert(const word32 value) -{ - word32 work = ((value & 0xFF00FF00L) >> 8) | ((value & 0x00FF00FFL) << 8); - return (work << 16) | (work >> 16); -} -template inline T min (const T t1, const T t2) -{ - return (t1 < t2 ? t1 : t2); -} -template inline T max (const T t1, const T t2) -{ - return (t1 > t2 ? t1 : t2); -} -template inline void swap (T &a, T &b) -{ - T temp = a; - a = b; - b = temp; -} -template inline T rotl(T x, unsigned int y) -{ - return ((x<>(sizeof(T)*8-y))); -} -template inline T rotr(T x, unsigned int y) -{ - return ((x>>y) | (x<<(sizeof(T)*8-y))); -} -int BytePrecision(unsigned long); -int BitPrecision(unsigned long); -unsigned long Crop(unsigned long, int size); -enum CipherDir {ENCRYPTION, DECRYPTION}; -class BlockTransformation -{ -public: - virtual ~BlockTransformation() {} - virtual void ProcessBlock(byte *inoutBlock) =0; - virtual void ProcessBlock(const byte *inBlock, byte *outBlock) =0; - virtual unsigned int BlockSize() const =0; -}; -class StreamCipher -{ -public: - virtual ~StreamCipher() {} - virtual byte ProcessByte(byte input) =0; - virtual void ProcessString(byte *outString, const byte *inString, unsigned int length); - virtual void ProcessString(byte *inoutString, unsigned int length); -}; -class RandomAccessStreamCipher : public StreamCipher -{ -public: - virtual ~RandomAccessStreamCipher() {} - virtual void Seek(unsigned long position) =0; -}; -class RandomNumberGenerator -{ -public: - virtual ~RandomNumberGenerator() {} - virtual byte GetByte() =0; - virtual int GetBit(); - virtual word32 GetLong(word32 min=0, word32 max=0xffffffffL); - virtual word16 GetShort(word16 min=0, word16 max=0xffff) - {return (word16)GetLong(min, max);} - virtual void GetBlock(byte *output, unsigned int size); -}; -template void Shuffle(RandomNumberGenerator &rng, T *array, unsigned int size) -{ - while (--size) - swap(array[size], array[(unsigned int)rng.GetLong(0, size)]); -} -class HashModule -{ -public: - virtual ~HashModule() {} - virtual void Update(const byte *input, unsigned int length) =0; - virtual void Final(byte *digest) =0; - virtual int DigestSize() const =0; - virtual void CalculateDigest(byte *digest, const byte *input, int length) - {Update(input, length); Final(digest);} -}; -class BufferedTransformation -{ -public: - virtual ~BufferedTransformation() {} - virtual unsigned long MaxRetrieveable() =0; - virtual void TransferTo(BufferedTransformation &target); - virtual boolean Attachable() {return FALSE;} - virtual void Detach(BufferedTransformation *) {} - virtual void Attach(BufferedTransformation *) {} - virtual void Close() {InputFinished();} - virtual void Put(byte inByte) =0; - virtual void Put(const byte *inString, unsigned int length) =0; - virtual void InputFinished() {} - void PutShort(word16 value, boolean highFirst=TRUE); - void PutLong(word32 value, boolean highFirst=TRUE); - virtual int Get(byte &outByte) =0; - virtual unsigned int Get(byte *outString, unsigned int getMax) =0; - int GetShort(word16 &value, boolean highFirst=TRUE); - int GetLong(word32 &value, boolean highFirst=TRUE); - unsigned int Skip(unsigned int skipMax); -}; -class PK_CryptoSystem -{ -public: - virtual ~PK_CryptoSystem() {}; - virtual unsigned int MaxPlainTextLength() const =0; - virtual unsigned int CipherTextLength() const =0; -}; -class PK_Encryptor : public PK_CryptoSystem -{ -public: - virtual void Encrypt(RandomNumberGenerator &rng, const byte *plainText, unsigned int plainTextLength, byte *cipherText) =0; -}; -class PK_Decryptor : public PK_CryptoSystem -{ -public: - virtual unsigned int Decrypt(const byte *cipherText, byte *plainText) =0; -}; -class PK_SignatureSystem -{ -public: - virtual ~PK_SignatureSystem() {}; - virtual unsigned int MaxMessageLength() const =0; - virtual unsigned int SignatureLength() const =0; -}; -class PK_Signer : public PK_SignatureSystem -{ -public: - virtual void Sign(RandomNumberGenerator &rng, const byte *message, unsigned int messageLen, byte *signature) =0; -}; -class PK_Verifier : public PK_SignatureSystem -{ -public: - virtual boolean Verify(const byte *message, unsigned int messageLen, const byte *signature) =0; -}; -class ByteQueueNode; -class ByteQueue : public BufferedTransformation -{ -public: - ByteQueue(); - ~ByteQueue(); - unsigned long CurrentSize() const; - unsigned long MaxRetrieveable() - {return CurrentSize();} - void Put(byte inByte); - void Put(const byte *inString, unsigned int length); - int Get(byte &outByte); - unsigned int Get(byte *outString, unsigned int getMax); -private: - ByteQueueNode *head, *tail; -}; -enum ASNTag {INTEGER=0x02, BIT_STRING=0x03, SEQUENCE=0x10}; -enum ASNIdFlag {CONSTRUCTED = 0x20}; -unsigned int DERLengthEncode(unsigned int length, byte *output); -unsigned int DERLengthEncode(unsigned int length, BufferedTransformation &); -class BERDecodeErr {}; -boolean BERLengthDecode(BufferedTransformation &, unsigned int &); -class BERSequenceDecoder : public BufferedTransformation -{ -public: - BERSequenceDecoder(BufferedTransformation &inQueue); - ~BERSequenceDecoder(); - void Put(byte inByte) {} - void Put(const byte *, unsigned int) {} - unsigned long MaxRetrieveable() - {return inQueue.MaxRetrieveable();} - int Get(byte &outByte) - {return inQueue.Get(outByte);} - unsigned int Get(byte *outString, unsigned int getMax) - {return inQueue.Get(outString, getMax);} -private: - BufferedTransformation &inQueue; - boolean definiteLength; - unsigned int length; -}; -class DERSequenceEncoder : public ByteQueue -{ -public: - DERSequenceEncoder(BufferedTransformation &outQueue); - ~DERSequenceEncoder(); -private: - BufferedTransformation &outQueue; -}; -extern "C" { -} -extern "C" { -extern void *memmove(void *, const void *, size_t); -extern char *strcpy(char *, const char *); -extern char *strncpy(char *, const char *, size_t); -extern char *strcat(char *, const char *); -extern char *strncat(char *, const char *, size_t); -extern int strcmp(const char *, const char *); -extern int strcoll(const char *, const char *); -extern int strncmp(const char *, const char *, size_t); -extern size_t strxfrm(char *, const char *, size_t); -extern void * __hide_memchr (const void *, int, size_t); -extern char * __hide_strchr (const char *, int); -extern size_t strcspn(const char *, const char *); -extern char * __hide_strpbrk (const char *, const char *); -extern char * __hide_strrchr (const char *, int); -extern size_t strspn(const char *, const char *); -extern char * __hide_strstr (const char *, const char *); -extern char *strtok(char *, const char *); -extern void *memset(void *, int, size_t); -extern char *strerror(int); -extern void *memccpy(void *, const void *, int, size_t); -extern char *strdup(const char *); -extern char *strsignal(int); -extern int ffs(const int); -extern int strcasecmp(const char *, const char *); -extern int strncasecmp(const char *, const char *, size_t); -} -typedef int ptrdiff_t; -extern "C" const char *strchr (const char *, int); -inline char * -strchr (char *s, int c) -{ - return (char*) strchr ((const char *) s, c); -} -extern "C" const char *strpbrk (const char *, const char *); -inline char * -strpbrk (char *s1, const char *s2) -{ - return (char *) strpbrk ((const char *) s1, s2); -} -extern "C" const char *strrchr (const char *, int); -inline char * -strrchr (char *s, int c) -{ - return (char *) strrchr ((const char *) s, c); -} -extern "C" const char *strstr (const char *, const char *); -inline char * -strstr (char *s1, const char *s2) -{ - return (char *) strstr ((const char *) s1, s2); -} -extern "C" void *memchr (const void *, int, size_t); -inline void * -memchr (void *s, int c, size_t n) -{ - return (void *) memchr ((const void *) s, c, n); -} -typedef word16 unit; -typedef short signedunit; -typedef unit *unitptr; -extern short global_precision; -boolean mp_addc - (register unitptr r1,const unit * r2,register boolean carry); -boolean mp_subb - (register unitptr r1,const unit * r2,register boolean borrow); -boolean mp_rotate_left(register unitptr r1,register boolean carry); -void mp_shift_right_bits(register unitptr r1,register short bits); -short mp_compare(const unit * r1,const unit * r2); -boolean mp_inc(register unitptr r); -boolean mp_dec(register unitptr r); -void mp_neg(register unitptr r); -void mp_init(register unitptr r, word16 value); -short significance(const unit * r); -int mp_udiv(register unitptr remainder,register unitptr quotient, - const unit * dividend,const unit * divisor); -int mp_recip(register unitptr quotient,const unit * divisor); -int mp_div(register unitptr remainder,register unitptr quotient, - unit * dividend, unit * divisor); -word16 mp_shortdiv(register unitptr quotient, - const unit * dividend,register word16 divisor); -int mp_mod(register unitptr remainder, - const unit * dividend,const unit * divisor); -word16 mp_shortmod(register unitptr dividend,register word16 divisor); -int mp_mult(register unitptr prod, - const unit * multiplicand,const unit * multiplier); -int countbits(const unit * r); -int stage_peasant_modulus(const unit * n); -int stage_merritt_modulus(const unit * n); -int stage_upton_modulus(const unit * n); -int stage_smith_modulus(const unit * n); -int peasant_modmult(register unitptr prod, - const unit * multiplicand,const unit * multiplier); -int merritt_modmult(register unitptr prod, - const unit * multiplicand,const unit * multiplier); -int upton_modmult(register unitptr prod, - const unit * multiplicand,const unit * multiplier); -int smith_modmult(register unitptr prod, - const unit * multiplicand,const unit * multiplier); -void peasant_burn(); -void merritt_burn(); -void upton_burn(); -void smith_burn(); -int mp_modexp(register unitptr expout,const unit * expin, - const unit * exponent,const unit * modulus); -int mp_modexp_crt(unitptr expout, const unit * expin, - const unit * p, const unit * q, const unit * ep, const unit * eq, const unit * u); -word16 fetch_word16(byte *buf); -byte *put_word16(word16 w, byte *buf); -word32 fetch_word32(byte *buf); -byte *put_word32(word32 w, byte *buf); -int string_length(const char *s); -int str2reg(unit * reg,const char* digitstr); -int reg2str(char * s,const unit * n,short radix); -void mp_display(char * s,unitptr r); -word16 checksum(register byte * buf, register word16 count); -void cbc_xor(register unitptr dst, register unitptr src, word16 bytecount); -void hiloswap(byte * r1,short numbytes); -short mpi2reg(register unitptr r, register byte * buf); -short reg2mpi(register byte * buf, register unitptr r); -enum RandomNumberType {ANY, ODD, PRIME, BLUMINT}; -class MPIRegister : public SecBlock -{ -public: - MPIRegister() : SecBlock((2048 / 16 ) ) {} -}; -class ostream; -class bignum -{ -public: - bignum() - {} - bignum(unsigned long value); - bignum(const char *str) - {str2reg(reg, str);} - enum Signedness{UNSIGNED, SIGNED}; - bignum(const byte *encodedBignum, unsigned int byteCount, Signedness s=UNSIGNED) - {Decode(encodedBignum, byteCount, s);} - bignum(const byte *BEREncodedInteger) - {BERDecode(BEREncodedInteger);} - bignum(BufferedTransformation &bt) - {BERDecode(bt);} - bignum(RandomNumberGenerator &rng, unsigned int bitcount) - {Randomize(rng, bitcount);} - bignum(RandomNumberGenerator &rng, const bignum &min, const bignum &max, RandomNumberType rnType=ANY) - {Randomize(rng, min, max, rnType);} - bignum(const bignum& t) - {memcpy(reg, t.reg, (2048 /8) );} - unsigned int Encode(byte *output) const; - unsigned int Encode(byte *output, unsigned int outputLen) const; - void Decode(const byte *input, unsigned int inputLen, Signedness=UNSIGNED); - unsigned int DEREncode(byte *output) const; - unsigned int DEREncode(BufferedTransformation &bt) const; - void BERDecode(const byte *input); - void BERDecode(BufferedTransformation &bt); - void Randomize(RandomNumberGenerator &rng, unsigned int bitcount); - void Randomize(RandomNumberGenerator &rng, const bignum &min, const bignum &max); - void Randomize(RandomNumberGenerator &rng, const bignum &min, const bignum &max, RandomNumberType rnType); - unsigned int ByteCount() const - { - return ((countbits( reg )+7)>>3) ; - } - int BitCount() const - { - return countbits(reg); - } - bignum& operator++() - { - mp_inc(reg); - return *this; - } - bignum& operator--() - { - mp_dec(reg); - return *this; - } - int operator!() const - { - return ( ((* (( reg.ptr )+( global_precision )-1) ) ==( 0 )) && (significance( reg.ptr )<=1) ) ; - } - bignum& operator=(const bignum& t) - { - memcpy(reg, t.reg, (2048 /8) ); - return *this; - } - bignum& operator+=(const bignum& t) - { - mp_addc( reg , t.reg ,(boolean)0) ; - return *this; - } - bignum& operator-=(const bignum& t) - { - mp_subb( reg , t.reg ,(boolean)0) ; - return *this; - } - bignum& operator*=(const bignum& t) - { - *this = (*this) * t; - return *this; - } - bignum& operator/=(const bignum& t) - { - *this = (*this) / t; - return *this; - } - bignum& operator%=(const bignum& t) - { - *this = (*this) % t; - return *this; - } - bignum& operator<<=(unsigned int); - bignum& operator>>=(unsigned int); - unsigned MaxBitPrecision() const {return 2048 ;} - int operator[](unsigned int n) const; - friend bignum operator+(bignum a, const bignum &b) - { - return (a+=b); - } - friend bignum operator-(bignum a, const bignum &b) - { - return (a-=b); - } - friend bignum operator*(const bignum &a, const bignum &b); - friend bignum operator/(const bignum &a, const bignum &b); - friend bignum operator%(const bignum &a, const bignum &b); - friend bignum operator/(const bignum &a, word16 b); - friend word16 operator%(const bignum &a, word16 b); - friend bignum operator>>(bignum a, unsigned int n) - {return (a>>=n);} - friend bignum operator<<(bignum a, unsigned int n) - {return (a<<=n);} - void Negate() {mp_neg(reg);} - friend bignum operator-(bignum a) - { - a.Negate(); - return a; - } - friend int operator==(const bignum &a, const bignum &b) - { - return (memcmp(a.reg.ptr, b.reg.ptr, (2048 /8) )==0); - } - friend int operator!=(const bignum& a, const bignum& b) - { - return (memcmp(a.reg.ptr, b.reg.ptr, (2048 /8) )!=0); - } - friend int operator>(const bignum& a, const bignum& b) - { - return (mp_compare(a.reg, b.reg)>0); - } - friend int operator>=(const bignum& a, const bignum& b) - { - return (mp_compare(a.reg, b.reg)>=0); - } - friend int operator<(const bignum& a, const bignum& b) - { - return (mp_compare(a.reg, b.reg)<0); - } - friend int operator<=(const bignum& a, const bignum& b) - { - return (mp_compare(a.reg, b.reg)<=0); - } - friend bignum a_times_b_mod_c(const bignum &x, const bignum& y, const bignum& m); - friend bignum a_exp_b_mod_c(const bignum &x, const bignum& e, const bignum& m); - class DivideErr {}; - friend void Divide(bignum &r, bignum &q, - const bignum &a, const bignum &d, - Signedness s=SIGNED); - friend boolean Negative(const bignum &a) - { - return ((signedunit) (* ( a.reg.ptr ) ) < 0) ; - } - friend bignum Abs(bignum a) - { - (((signedunit) (* ( a.reg.ptr ) ) < 0) ? (mp_neg( a.reg.ptr ),TRUE) : FALSE) ; - return a; - } - friend ostream& operator<<(ostream& out, const bignum &a); - unit lsUnit() {return (* (( reg.ptr )+( global_precision )-1) ) ;} -private: - MPIRegister reg; -}; -class RSAPublicKey : public PK_Encryptor, public PK_Decryptor, - public PK_Verifier -{ -public: - RSAPublicKey(const bignum &n, const bignum &e); - RSAPublicKey(BufferedTransformation &bt); - void DEREncode(BufferedTransformation &bt) const; - void Encrypt(RandomNumberGenerator &rng, const byte *plainText, unsigned int plainTextLength, byte *cipherText); - unsigned int Decrypt(const byte *cipherText, byte *plainText); - boolean Verify(const byte *message, unsigned int messageLen, const byte *signature); - unsigned int MaxPlainTextLength() const {return modulusLen-11;} - unsigned int CipherTextLength() const {return modulusLen;} - unsigned int MaxMessageLength() const {return modulusLen-11;} - unsigned int SignatureLength() const {return modulusLen;} - const bignum& Exponent() const {return e;} - const bignum& Modulus() const {return n;} -protected: - void RawEncrypt(const bignum &in, bignum &out) const; -private: - friend class RSAPrivateKey; - RSAPublicKey() {} - bignum n; - bignum e; - unsigned int modulusLen; -}; -class RSAPrivateKey : public RSAPublicKey, public PK_Signer -{ -public: - RSAPrivateKey(const bignum &n, const bignum &e, const bignum &d, - const bignum &p, const bignum &q, const bignum &dp, const bignum &dq, const bignum &u); - RSAPrivateKey(RandomNumberGenerator &rng, int keybits, bignum eStart=17); - RSAPrivateKey(BufferedTransformation &bt); - void DEREncode(BufferedTransformation &bt) const; - void Encrypt(const byte *plainText, unsigned int plainTextLength, byte *cipherText); - unsigned int Decrypt(const byte *cipherText, byte *plainText); - void Encrypt(RandomNumberGenerator &, const byte *plainText, unsigned int plainTextLength, byte *cipherText) - {Encrypt(plainText, plainTextLength, cipherText);} - void Sign(const byte *message, unsigned int messageLen, byte *signature) - {Encrypt(message, messageLen, signature);} - void Sign(RandomNumberGenerator &, const byte *message, unsigned int messageLen, byte *signature) - {Encrypt(message, messageLen, signature);} - unsigned int MaxMessageLength() const {return modulusLen-11;} - unsigned int SignatureLength() const {return modulusLen;} -protected: - void RawEncrypt(const bignum &in, bignum &out) const; -private: - bignum d; - bignum p; - bignum q; - bignum dp; - bignum dq; - bignum u; -}; -bignum Gcd(const bignum &a, const bignum &b); -bignum Inverse(const bignum &a, const bignum &m); -boolean IsSmallPrime(const bignum &p); -boolean SmallDivisorsTest(const bignum &p); -boolean FermatTest(const bignum &p, unsigned int rounds); -boolean RabinMillerTest(RandomNumberGenerator &rng, const bignum &w, unsigned int rounds); -inline boolean IsPrime(const bignum &p) -{ - return (IsSmallPrime(p) || (SmallDivisorsTest(p) && FermatTest(p, 2))); -} -boolean NextPrime(bignum &p, const bignum &max, boolean blumInt=FALSE); -bignum a_exp_b_mod_pq(const bignum &a, const bignum &ep, const bignum &eq, - const bignum &p, const bignum &q, const bignum &u); -class PrimeAndGenerator -{ -public: - PrimeAndGenerator(RandomNumberGenerator &rng, unsigned int pbits); - PrimeAndGenerator(RandomNumberGenerator &rng, unsigned int pbits, unsigned qbits); - const bignum& Prime() const {return p;} - const bignum& SubPrime() const {return q;} - const bignum& Generator() const {return g;} -private: - bignum p, q, g; -}; -extern "C" { -extern void __eprintf (const char *, const char *, unsigned, const char *); -} -RSAPublicKey::RSAPublicKey(const bignum &n, const bignum &e) - : n(n), e(e), modulusLen(n.ByteCount()) -{ -} -RSAPublicKey::RSAPublicKey(BufferedTransformation &bt) -{ - BERSequenceDecoder seq(bt); - n.BERDecode(seq); - modulusLen = n.ByteCount(); - e.BERDecode(seq); -} -void RSAPublicKey::DEREncode(BufferedTransformation &bt) const -{ - DERSequenceEncoder seq(bt); - n.DEREncode(seq); - e.DEREncode(seq); -} -void RSAPublicKey::Encrypt(RandomNumberGenerator &rng, const byte *input, unsigned int inputLen, byte *output) -{unsigned int i; - ((void) (( inputLen <= MaxPlainTextLength() ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "rsa.cpp" , 30 , "inputLen <= MaxPlainTextLength()" ), 0) )) ; - SecByteBlock pkcsBlock(modulusLen); - pkcsBlock[0] = 0; - pkcsBlock[1] = 2; - for (i = 2; i < modulusLen - inputLen - 1; i++) - { - do - pkcsBlock[i] = rng.GetByte(); - while (pkcsBlock[i] == 0); - } - pkcsBlock[i++] = 0; - memcpy(pkcsBlock+i, input, inputLen); - bignum c; - RawEncrypt(bignum(pkcsBlock, modulusLen), c); - c.Encode(output, modulusLen); -} -unsigned int RSAPublicKey::Decrypt(const byte *input, byte *output) -{unsigned int i; - bignum m; - RawEncrypt(bignum(input, modulusLen), m); - SecByteBlock pkcsBlock(modulusLen); - m.Encode(pkcsBlock, modulusLen); - if ((pkcsBlock[0] != 0) || (pkcsBlock[1] != 1)) - return 0; - for (i = 2; i < modulusLen-1; i++) - if (pkcsBlock[i] != 0xff) - break; - if (pkcsBlock[i++] != 0) - return 0; - unsigned int outputLen = modulusLen - i; - if (outputLen > MaxPlainTextLength()) - return 0; - memcpy (output, pkcsBlock+i, outputLen); - return outputLen; -} -boolean RSAPublicKey::Verify(const byte *message, unsigned int messageLen, const byte *signature) -{ - ((void) (( messageLen <= MaxMessageLength() ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "rsa.cpp" , 83 , "messageLen <= MaxMessageLength()" ), 0) )) ; - SecByteBlock m(MaxMessageLength()); - unsigned int mLen = RSAPublicKey::Decrypt(signature, m); - return (mLen==messageLen && memcmp(message, m, mLen)==0); -} -void RSAPublicKey::RawEncrypt(const bignum &in, bignum &out) const -{ - out = a_exp_b_mod_c(in, e, n); -} -RSAPrivateKey::RSAPrivateKey(const bignum &nIn, const bignum &eIn, const bignum &dIn, - const bignum &pIn, const bignum &qIn, - const bignum &dpIn, const bignum &dqIn, const bignum &uIn) - : RSAPublicKey(nIn, eIn) -{ - d=dIn; - if (pIn < qIn) - { - p=pIn; - q=qIn; - dp=dpIn; - dq=dqIn; - } - else - { - p=qIn; - q=pIn; - dp=dqIn; - dq=dpIn; - } - u=uIn; -} -RSAPrivateKey::RSAPrivateKey(RandomNumberGenerator &rng, int keybits, bignum eStart) -{ - p = bignum(rng, keybits/2, PRIME); - const bignum minQ = ((bignum(1) << (keybits-1)) / p) + 1; - const bignum maxQ = (bignum(1) << keybits) / p; - do - { - bignum temp(rng, minQ, maxQ, PRIME); - if (p>temp && p.BitCount()-(p-temp).BitCount() < 7) - { - q=p; - p=temp; - break; - } - if (pq) - { - swap(p, q); - swap(dp, dq); - } -} -void RSAPrivateKey::DEREncode(BufferedTransformation &bt) const -{ - DERSequenceEncoder seq(bt); - byte version[] = {INTEGER, 1, 0}; - seq.Put(version, sizeof(version)); - n.DEREncode(seq); - e.DEREncode(seq); - d.DEREncode(seq); - q.DEREncode(seq); - p.DEREncode(seq); - dq.DEREncode(seq); - dp.DEREncode(seq); - u.DEREncode(seq); -} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p785.C b/gcc/testsuite/g++.old-deja/g++.mike/p785.C deleted file mode 100644 index 7d61b093edd..00000000000 --- a/gcc/testsuite/g++.old-deja/g++.mike/p785.C +++ /dev/null @@ -1,8074 +0,0 @@ -// Special g++ Options: -w -// Build don't link: -// prms-id: 785 - -//# 1 "GctNameRef.List.cc" -//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine++.h" 1 -// -*- C++ -*- -#ifndef FALSE -#define FALSE false -#endif -#ifndef TRUE -#define TRUE true -#endif - - -// -// WATCHOUT - CC 2.1 uses regular old cpp as its #ifdef processor -// whereas GNU uses a special preprocessor (actually ``gcc-cpp -+'') -// This implies that there can be no C++ comments on lines which are -// to be understood by cpp. Actually it turns out that only lines -// with grammatical structures (such as ``#if defined( ... )'') are -// affected, but this is probably a good rule to follow elsewhere too. -// - -// -// Define a ``Standard C++ Unix Machine'' -// -// By whatever means are available in sumachine and elsewhere, -// figure out what type of C++ world we are on. -// -// See also "sumachine.h" -// -// -// This file is expected to be included as the first #include file in -// all .cc files This file should be included in each and every src file -// compiled b/c it ensures that the environment which those src files -// expect exists either by fiat or by faking it. -// - - -// -// Its GNU C++ -// -// This pragma only works under g++ 1 (it no longer works for gcc2) - - - - -// Because between releases of Cygnus' stuff, the definitions keep bouncing -// around between so fast that one can't -// keep one's code compiling ... Just include them all and be done with it. -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stdlib.h" 1 - - - - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 1 - - -extern "C" { - - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/mips/lib/gcc/decstatn/cygnus-1.96/include/stddef.h" 1 - - - - - - -/* This avoids lossage on Sunos but only if stdtypes.h comes first. - There's no way to win with the other order! Sun lossage. */ - -/* In case nobody has defined these types, but we aren't running under - GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE__TYPE__, and - __WCHAR_TYPE__ have reasonable values. This can happen if the - parts of GCC is compiled by an older compiler, that actually - include gstddef.h, such as collect2. */ - -/* Signed type of difference of two pointers. */ - - - - - - - - - - - - - - -typedef long int ptrdiff_t; - - - - - - -/* Unsigned type of `sizeof' something. */ - - - - - - - - - - - - - - -typedef int size_t; - - - - - - -/* Data type for wide chars. */ - - - - - - - - - - - - - - -typedef int wchar_t; - - - - - - - - -/* A null pointer constant. */ - - - - -/* Offset of member MEMBER in a struct of type TYPE. */ - - - - - -//# 7 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 2 - - - - -} - -//# 6 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stdlib.h" 2 - - -extern "C" { - -int abs(int); - - -void abort(void); - - - - -double atof(const char*); -int atoi(const char*); -long atol(const char*); - -int atexit(auto void (*p) (void)); -int bsearch (const void *, const void *, size_t, - size_t, auto int (*ptf)(const void*, const void*)); -void* calloc(size_t, size_t); -void cfree(void*); - - -void exit(int); - - - - -char* fcvt(double, int, int*, int*); -void free(void*); -char* getenv(const char*); -int getopt(int, const char**, const char*); -int getpw(int, char*); -char* gcvt(double, int, char*); -char* ecvt(double, int, int*, int*); -extern char** environ; - -long labs(long); -void* malloc(size_t); -size_t malloc_usable_size(void*); -int putenv(const char*); -extern char* optarg; -extern int opterr; -extern int optind; -void qsort(void*, size_t, size_t, auto int (*ptf)(void*,void*)); -int rand(void); -void* realloc(void*, size_t); -int setkey(const char*); -int srand(unsigned int); -double strtod(const char*, char**); -long strtol(const char*, char**, int); -unsigned long stroul(const char**, int); -int system(const char*); - -long random(void); -void srandom(int); -char* setstate(char*); -char* initstate(unsigned, char*, int); - -double drand48(void); -void lcong48(short*); -long jrand48(short*); -long lrand48(void); -long mrand48(void); -long nrand48(short*); -short* seed48(short*); -void srand48(long); - -char* ctermid(char*); -char* cuserid(char*); -char* tempnam(const char*, const char*); -char* tmpnam(char*); - -} - -//# 44 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine++.h" 2 - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" 1 -// This may look like C code, but it is really -*- C++ -*- -/* -Copyright (C) 1988, 1992 Free Software Foundation - written by Doug Lea (dl@rocky.oswego.edu) - -This file is part of the GNU C++ Library. This library is free -software; you can redistribute it and/or modify it under the terms of -the GNU Library General Public License as published by the Free -Software Foundation; either version 2 of the License, or (at your -option) any later version. This library is distributed in the hope -that it will be useful, but WITHOUT ANY WARRANTY; without even the -implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with this library; if not, write to the Free Software -Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - - - - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 1 -//# 12 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" - -//# 23 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" 2 - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stdlib.h" 1 - - -//# 80 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stdlib.h" - -//# 24 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" 2 - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/string.h" 1 - - - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 1 -//# 12 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" - -//# 5 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/string.h" 2 - - - -extern "C" { - -char* strcat(char*, const char*); -char* strchr(const char*, int); -int strcmp(const char*, const char*); -int strcoll(const char*, const char*); -char* strcpy(char*, const char*); -size_t strcspn(const char*, const char*); -char* strdup(const char*); - -char* strncat(char*, const char*, size_t); -int strncmp(const char*, const char*, size_t); -char* strncpy(char*, const char*, size_t); -char* strpbrk(const char*, const char*); -char* strrchr(const char*, int); -size_t strspn(const char*, const char*); -char* strstr(const char*, const char *); -char* strtok(char*, const char*); -size_t strxfrm(char*, const char*, size_t); - -} - - - - - - - -extern "C" { -char* index(const char*, int); -char* rindex(const char*, int); -} - - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/memory.h" 1 - - - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 1 -//# 12 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" - -//# 5 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/memory.h" 2 - - -extern "C" { - -void* memalign(size_t, size_t); -void* memccpy(void*, const void*, int, size_t); -void* memchr(const void*, int, size_t); - - -void* memset(void*, int, size_t); -int ffs(int); -size_t getpagesize(void); -void* valloc(size_t); - -} - - - - - - - - - -extern "C" { -void bcopy(const void*, void*, size_t); // USG uses version in bcopy.c -int bcmp(const void*, const void*, int); -void bzero(void*, int); -} - - - - - - - - - - - - - - - - -//# 43 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/string.h" 2 - - - -//# 25 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" 2 - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/memory.h" 1 - -//# 49 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/memory.h" - -//# 26 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" 2 - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/unistd.h" 1 - - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 1 -//# 12 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" - -//# 4 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/unistd.h" 2 - - -extern "C" { - - -void _exit(int); - - - - -unsigned alarm(unsigned); -int brk(void*); -int chdir(const char*); -int chmod(const char*, int); -int chown(const char*, int, int); -int close(int); -char* crypt(const char*, const char*); -int dup(int); -int dup2(int, int); -char* encrypt(char*, int); -int execl(const char*, const char *, ...); -int execle(const char*, const char *, ...); -int execlp(const char*, const char*, ...); -int exect(const char*, const char**, char**); -int execv(const char*, const char**); -int execve(const char*, const char**, char**); -int execvp(const char*, const char**); -int fchown(int, int, int); -int fork(void); -int fsync(int); -int ftruncate(int, unsigned long); -char* getcwd(char*, int); -int getdomainname(char*, int); -int getdtablesize(void); - -int getgroups(int, int*); -int geteuid(void); -int getegid(void); -int getgid(void); -long gethostid(void); -int gethostname(char*, int); -int getpgrp(...); -int getpid(void); -int getppid(void); -char* getlogin(void); -char* getpass(const char*); -unsigned getuid(void); -int ioctl(int, int, void*); -int isatty(int); -int link(const char*, const char*); -int mkstemp(char*); -char* mktemp(char*); -int nice(int); - -void volatile pause(void); - - - -int pipe(int*); -int readlink(const char*, char*, int); -int rename(const char*, const char*); -int rmdir(const char*); -void* sbrk(int); -int syscall(int, ...); -int setgid(int); -int sethostname(const char*, int); -int setpgrp(...); -int setregid(int, int); -int setreuid(int, int); -int setuid(int); -unsigned sleep(unsigned); -void swab(void*, void*, int); -int symlink(const char*, const char*); -int truncate(const char*, unsigned long); -char* ttyname(int); -int ttyslot(void); -// int umask(int); /* commented out for now; wrong for SunOs4.1 */ -int unlink(const char*); -int vfork(void); -int vadvise(int); -int vhangup(void); - -long lseek(int, long, int); -int read(int, void*, size_t); -int write(int, const void*, size_t); -int access(const char*, int); - -int flock(int, int); - - -} - - - - -//# 27 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" 2 - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stdio.h" 1 -// This may look like C code, but it is really -*- C++ -*- -/* -Copyright (C) 1988 Free Software Foundation - written by Doug Lea (dl@rocky.oswego.edu) - -This file is part of the GNU C++ Library. This library is free -software; you can redistribute it and/or modify it under the terms of -the GNU Library General Public License as published by the Free -Software Foundation; either version 2 of the License, or (at your -option) any later version. This library is distributed in the hope -that it will be useful, but WITHOUT ANY WARRANTY; without even the -implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with this library; if not, write to the Free Software -Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -/* - * Please check the following before installing this file: - * - * Make sure USG is #defined if you are on a USG system! - * - * Check the value of _NFILE against the one in your /usr/include/stdio.h. - * (USG only) - * - * Check whether your libc.a sprintf function returns - * an int (as do most) versus a char* (BSD), and (un)comment - * the corresponding SPRINTF_RETURNS_INT line. - * - * Check the value of BUFSIZ against the one in your /usr/include/stdio.h. - * - * Carefully check the fields and order of _iobuf declaration against - * the one in your /usr/include/stdio.h. Xenix-based systems - * may need some re-ordering of _iobuf. fields. - * - * Note that some _IOXXX #defines may not be present in your - * /usr/include/stdio.h. This is ok, so long as the ones that - * are present in both are set to the same values. - * - * Some of the prototypes refer to functions that may not be - * present in your libc.a. This is ok so long as you do not - * actually call such functions. - * - */ - - - -//#pragma interface - - - - - - - -// Note: The #define _stdio_h is at the end of this file, -// in case #include_next finds an installed version of this -// same file -- we want it to continue until it finds the C version. - -/* - HAVE_VPRINTF should be set if vprintf is in libc.a - HAVE_SETVBUF should be set if setvbuf is in libc.a - HAVE_SETLINEBUF should be set if setlinebuf in libc.a - - The following are probably correct for the listed systems - -*/ - - - - - -//# 85 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stdio.h" - - - -//# 158 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stdio.h" - - -extern "C" { - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//# 1 "/usr/include/stdio.h" 1 -/* @(#)stdio.h 4.6 (ULTRIX) 3/1/91 */ -/************************************************************************ - * * - * Copyright (c) 1985 by * - * Digital Equipment Corporation, Maynard, MA * - * All rights reserved. * - * * - * This software is furnished under a license and may be used and * - * copied only in accordance with the terms of such license and * - * with the inclusion of the above copyright notice. This * - * software or any other copies thereof may not be provided or * - * otherwise made available to any other person. No title to and * - * ownership of the software is hereby transferred. * - * * - * This software is derived from software received from the * - * University of California, Berkeley, and from Bell * - * Laboratories. Use, duplication, or disclosure is subject to * - * restrictions under license agreements with University of * - * California and with AT&T. * - * * - * The information in this software is subject to change without * - * notice and should not be construed as a commitment by Digital * - * Equipment Corporation. * - * * - * Digital assumes no responsibility for the use or reliability * - * of its software on equipment which is not supplied by Digital. * - * * - ************************************************************************/ -/************************************************************************ - * Modification History - * - * Mitch Condylis 28-Feb-1991 - * Changed _file member of FILE structure from char to short - * as part of work to increase max number of open file descriptors. - * - * Mike Thomas, 7-Sep-1990 - * 016 Back out most of 015. Leave in explicit declarations. - * - * Mike Thomas, 21-Aug-1990 - * 015 DECwest ANSI - change _filbuf to __filbuf for ANSI compliance. - * Explicitly declare __filbuf under __STDC__. - * Likewise flsbuf. - * - * 014 Mike Thomas, 08-Jun-90 - * Changed _POSIX_SOURCE reference back to POSIX. - * - * 013 Dan Smith, 23-Feb-90 - * Added const to several prototypes. More namespace protection. - * Changed reference of POSIX to _POSIX_SOURCE. - * - * Jon Reeves, 07-Dec-1989 - * 012 Namespace protection. - * - * Jon Reeves, 09-Nov-1989 - * 011 Fix putc properly: could still sign-extend in some cases before. - * - * Linda Wilson, 06-Oct-1989 - * 010 Declare sprintf as int for std conformance - * - * Jon Reeves, 25-Aug-1989 - * 009 Fix putc[har] for 8-bit mode (unsigned int->char) - * - * Jon Reeves, 18-Jul-1989 - * 008 Add getw, putw for X/Open conformance. - * - * Jon Reeves, 31-May-1989 - * 007 ANSI conformance; clean up rogue comments. sprintf is still - * wrong. - * - * Lu Anne Van de Pas, 02-Jun-1986 - * 006 Added ending "/" to P_tmpdir string. - * - * David L Ballenger, 22-Nov-1985 - * 005 Correct definition of sprintf() for System V environment. - * - * David L Ballenger, 01-Aug-1985 - * 004 Add _IOAPPEND flag for files opened with "A" or "A+". - * - * David L Ballenger, 26-Jun-1985 - * 003 Add changes so that FILE structures are allocated dynamically. - * - * Larry Cohen, 23-April-1985 - * - change NFILE from 20 to 64 - * - * David L Ballenger, 13-Mar-1985 - * 0001 Add System V definitions. - ************************************************************************/ - -//# 1 "/usr/include/ansi_compat.h" 1 -/* - * @(#)ansi_compat.h 4.4 (ULTRIX) 10/8/90 - */ - -/************************************************************************ - * * - * Copyright (c) 1990 by * - * Digital Equipment Corporation, Maynard, MA * - * All rights reserved. * - * * - * This software is furnished under a license and may be used and * - * copied only in accordance with the terms of such license and * - * with the inclusion of the above copyright notice. This * - * software or any other copies thereof may not be provided or * - * otherwise made available to any other person. No title to and * - * ownership of the software is hereby transferred. * - * * - * The information in this software is subject to change without * - * notice and should not be construed as a commitment by Digital * - * Equipment Corporation. * - * * - * Digital assumes no responsibility for the use or reliability * - * of its software on equipment which is not supplied by Digital. * - * * - ************************************************************************/ - -/* - * To avoid namespace pollution when using the ULTRIX header files under the - * DEC ANSI compiler, all user-visible header files were modifed to reference - * ANSI-style predefined macro name rather than their traditional names - * (__ultrix vice ultrix). Every file which accesses a predefined macro name - * must include this file before any other files are included or the macros - * are tested. - * - * In strict ANSI mode, the appropriate ANSI-style macros are already - * defined and the redefinitions in this file will not be seen. When using - * pcc, the traditional macro names are defined and this file will define - * ANSI-style equivalents of the traditional names. When using the DEC C - * compiler, both the traditional and ANSI predefined macro names are - * available so the definitions in this file are not made visible. - * - */ - - -//# 116 "/usr/include/ansi_compat.h" - -//# 89 "/usr/include/stdio.h" 2 - - - - - - - - - - - - - - /* Note: spacing must match, too, to avoid warnings */ - - - - -extern struct _iobuf { - int _cnt; - char *_ptr; - char *_base; - int _bufsiz; - short _flag; - short _file; -} _iob[3 ]; -typedef struct _iobuf FILE; - -typedef long fpos_t; - - - - - - - - - - - - - - - - - -/* fseek() values */ - - - - - - - -/* - * prototype - * - */ -extern int getc( FILE *__stream ); -extern int getchar( void ); -extern int putc( int __c, FILE *__stream); -extern int putchar( int __c); -extern int feof( FILE *__stream ); -extern int ferror( FILE *__stream ); -extern int fileno( FILE *__stream ); -extern int _filbuf( FILE *p); -extern int _flsbuf( unsigned char x , FILE *p); - - - - - - - - - - - - - - - - -typedef char *va_list; - -/* - * prototypes - * - */ -extern void clearerr( FILE *__stream); -extern int fclose( FILE *__stream ); -extern FILE * c_proto_fdopen ( int __filedes, char *__type ); -extern int fflush( FILE *__stream ); -extern int fgetc( FILE *__stream ); -extern int fgetpos( FILE *__stream, fpos_t *__pos ); -extern char * fgets( char *__s, int __n, FILE *__stream ); -extern FILE * c_proto_fopen ( const char *__filename, const char *__type ); -extern int c_proto_fprintf ( FILE *__stream, const char *__format, ... ); -extern int fputc( int __c, FILE *__stream ); -extern int c_proto_fputs ( const char *__s, FILE *__stream ); -extern size_t fread( void *__ptr, size_t __size, - size_t __nitems, FILE *__stream ); -extern FILE * c_proto_freopen ( const char *__filename, const char *__type, - FILE *__stream ); -extern int c_proto_fscanf ( FILE *__stream, const char *__format, ... ); -extern int fseek( FILE *__stream, long __offset, int __ptrname ); -extern int fsetpos( FILE *__stream, const fpos_t *__pos ); -extern long ftell( FILE *__stream ); -extern size_t c_proto_fwrite ( const void *__ptr, size_t __size, - size_t __nitems, FILE *__stream ); -extern char * gets( char *__s ); -extern void c_proto_perror ( const char *__s ); -extern FILE * c_proto_popen (const char *__command, const char *__type ); -extern int c_proto_printf ( const char *__format, ... ); -extern int c_proto_puts ( const char *__s ); -extern int remove( const char *__filename ); -extern int rename( const char *__from, const char *__to ); -extern void c_proto_rewind ( FILE *__stream ); -extern int c_proto_scanf ( const char *__format, ... ); -extern void c_proto_setbuf ( FILE *__stream, char *__buf ); -extern int c_proto_setvbuf ( FILE *__stream, char *__buf, - int __type, size_t __size ); -extern int c_proto_sscanf ( const char *__s, const char *__format, ... ); -extern FILE * tmpfile( void ); -extern char * tmpnam( char *__s ); -extern int ungetc( int __c, FILE *__stream ); -extern int c_proto_vfprintf ( FILE *__stream, const char *__format, va_list __ap ); -extern int c_proto_vprintf ( const char *__format, va_list __ap ); -extern int c_proto_vsprintf ( char *__s, const char *__format, va_list __ap); - - -extern char * c_proto_tempnam ( const char *__dir, const char *__pfx); -extern int c_proto_putw ( int __w, FILE *__stream ); -extern int getw(FILE *__stream); -extern int pclose( FILE *__stream ); - - -//# 298 "/usr/include/stdio.h" - - - -/* function prototype */ -extern int c_proto_sprintf ( char *__s, const char *__format, ... ); - - - - - - - - - - - - - - - - - - - -//# 189 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stdio.h" 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} - - - - - -extern "C" { - -//# 239 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stdio.h" - -int fclose(FILE*); -FILE* fdopen(int, const char*); -int fflush(FILE*); -int fgetc(FILE*); -char* fgets(char*, int, FILE *); -FILE* fopen(const char*, const char*); -int fprintf(FILE*, const char* ...); -int fputc(int, FILE*); -int fputs(const char*, FILE*); -size_t fread(void*, size_t, size_t, FILE*); - - - -FILE* freopen(const char*, const char*, FILE*); - -int fscanf(FILE*, const char* ...); -int fseek(FILE*, long, int); -long ftell(FILE *); -unsigned int fwrite(const void*, unsigned int, unsigned int, FILE*); -char* gets(char*); -int getw(FILE*); -int pclose(FILE*); -void perror(const char*); -FILE* popen(const char*, const char*); -int printf(const char* ...); -int puts(const char*); -int putw(int, FILE*); -int rewind(FILE*); -int scanf(const char* ...); -int setbuf(FILE*, char*); -int setbuffer(FILE*, char*, int); -int setlinebuf(FILE*); -int setvbuf(FILE*, char*, int, unsigned int); -int sscanf(char*, const char* ...); -FILE* tmpfile(); -int ungetc(int, FILE*); -int vfprintf(FILE*, const char*, ...); - -// Third arg to vprintf must be '...' for some machines, & doesn't -// hurt for others. - -int vprintf(const char*, ... ); - - - - - -char* sprintf(char*, const char*, ...); -char* vsprintf(char*, const char*, ...); - - -} - - - - - - - - - - - - - - - - - - -//# 28 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" 2 - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/errno.h" 1 - - -extern "C" { - - - - - -//# 1 "/usr/include/errno.h" 1 -/* @(#)errno.h 2.4 (ULTRIX) 11/10/89 */ - -/************************************************************************ - * * - * Copyright (c) 1984, 1987 by * - * Digital Equipment Corporation, Maynard, MA * - * All rights reserved. * - * * - * This software is furnished under a license and may be used and * - * copied only in accordance with the terms of such license and * - * with the inclusion of the above copyright notice. This * - * software or any other copies thereof may not be provided or * - * otherwise made available to any other person. No title to and * - * ownership of the software is hereby transferred. * - * * - * This software is derived from software received from the * - * University of California, Berkeley, and from Bell * - * Laboratories. Use, duplication, or disclosure is subject to * - * restrictions under license agreements with University of * - * California and with AT&T. * - * * - * The information in this software is subject to change without * - * notice and should not be construed as a commitment by Digital * - * Equipment Corporation. * - * * - * Digital assumes no responsibility for the use or reliability * - * of its software on equipment which is not supplied by Digital. * - * * - ************************************************************************/ -/* - * - * Modification history: - * - * 10 Jul 89 -- jlr - * Added ENOSYS for POSIX - * - * 13 Jan 88 -- map - * Added ENOLCK for POSIX - * - * 4 Aug 86 -- chet - * Moved NFS error codes to match SUN's. - * - * 24 Feb 86 -- depp - * Added EALIGN error code - * - * 28-Mar-85 -- David L Ballenger - * Add mapping of System V error numbers from BRL package. - * - * 01 Mar 85 -- depp - * Added System V IPC error codes error codes. - * - */ - -/* - * Error codes - */ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/* math software */ - - - -/* non-blocking and interrupt i/o */ - - - -/* ipc/network software */ - - /* argument errors */ - - - - - - - - - - - - - - /* operational errors */ - - - - - - - - - - - - - - /* */ - - - -/* should be rearranged */ - - - - -/* quotas & mush */ - - - - -/* NFS error codes */ - - - -/* IPC errors - */ - - - -/* Alignment error of some type (i.e., cluster, page, block ...) */ - - -/* System V mappings from BRL package - */ - - -/* POSIX errnos - */ - - - -/* - * DUP (Diagnostic/Utilities Protocol) related error numbers. - */ - - - - - - - - - - - - - - -/* External definition of errno from System V - */ - -extern int errno; - -//# 9 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/errno.h" 2 - - - - -extern char* sys_errlist[]; -extern int sys_nerr; -extern int errno; -void perror(const char*); -char* strerr(int); - - -} - - -//# 29 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" 2 - - - -//# 45 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine++.h" 2 - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/builtin.h" 1 -// This may look like C code, but it is really -*- C++ -*- - -/* -Copyright (C) 1988, 1992 Free Software Foundation - written by Doug Lea (dl@rocky.oswego.edu) - -This file is part of the GNU C++ Library. This library is free -software; you can redistribute it and/or modify it under the terms of -the GNU Library General Public License as published by the Free -Software Foundation; either version 2 of the License, or (at your -option) any later version. This library is distributed in the hope -that it will be useful, but WITHOUT ANY WARRANTY; without even the -implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with this library; if not, write to the Free Software -Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -/* - arithmetic, etc. functions on built in types -*/ - - - - -//#pragma interface - - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 1 -//# 12 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" - -//# 31 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/builtin.h" 2 - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" 1 -// This may look like C code, but it is really -*- C++ -*- -/* -Copyright (C) 1988, 1992 Free Software Foundation - written by Doug Lea (dl@rocky.oswego.edu) - -This file is part of the GNU C++ Library. This library is free -software; you can redistribute it and/or modify it under the terms of -the GNU Library General Public License as published by the Free -Software Foundation; either version 2 of the License, or (at your -option) any later version. This library is distributed in the hope -that it will be useful, but WITHOUT ANY WARRANTY; without even the -implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with this library; if not, write to the Free Software -Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - - -//# 31 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" - -//# 32 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/builtin.h" 2 - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/math.h" 1 -// This may look like C code, but it is really -*- C++ -*- -/* -Copyright (C) 1988 Free Software Foundation - written by Doug Lea (dl@rocky.oswego.edu) - -This file is part of the GNU C++ Library. This library is free -software; you can redistribute it and/or modify it under the terms of -the GNU Library General Public License as published by the Free -Software Foundation; either version 2 of the License, or (at your -option) any later version. This library is distributed in the hope -that it will be useful, but WITHOUT ANY WARRANTY; without even the -implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with this library; if not, write to the Free Software -Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - - - - -//#pragma interface - - - - - - - - - - - -//# 64 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/math.h" - -extern "C" { - -double acos(double); -double acosh(double); -double asin(double); -double asinh(double); -double atan(double); -double atan2(double, double); -double atanh(double); -double cbrt(double); -double ceil(double); -double copysign(double,double); -double cos(double); -double cosh(double); -double drem(double,double); -double erf(double); -double erfc(double); -double exp(double); -double expm1(double); -double fabs(double); -double finite(double); -double floor(double); -double frexp(double, int*); -double gamma(double); -double hypot(double,double); -double infnan(int); - -/* see below */ -int isinf(double); -int isnan(double); - -double j0(double); -double j1(double); -double jn(int, double); -double ldexp(double, int); -double lgamma(double); -double log(double); -double log10(double); -double log1p(double); -double logb(double); -double modf(double, double*); -double pow(double, double); -double rint(double); -double scalb(double, int); -double sin(double); -double sinh(double); -double sqrt(double); -double tan(double); -double tanh(double); -double y0(double); -double y1(double); -double yn(int, double); - -double aint(double); -double anint(double); -int irint(double); -int nint(double); -} - - - -/* libg++ doesn't use this since it is not available on some systems */ - -/* the following ifdef is just for compiling OOPS */ - - -struct libm_exception -{ - int type; - char* name; - double arg1, arg2, retval; -}; - - - - - - - - -extern "C" int matherr(libm_exception*); - - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/values.h" 1 -// This may look like C code, but it is really -*- C++ -*- -/* -Copyright (C) 1988 Free Software Foundation - written by Doug Lea (dl@rocky.oswego.edu) - -This file is part of the GNU C++ Library. This library is free -software; you can redistribute it and/or modify it under the terms of -the GNU Library General Public License as published by the Free -Software Foundation; either version 2 of the License, or (at your -option) any later version. This library is distributed in the hope -that it will be useful, but WITHOUT ANY WARRANTY; without even the -implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with this library; if not, write to the Free Software -Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - - - - - - - - - - - - - - - - - - - - - - - - - - - -//# 150 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/values.h" - - - - - - - - - - - - - - - - - - - - - - - - - -//# 149 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/math.h" 2 - - -/* On some systems, HUGE ought to be MAXFLOAT or IEEE infinity */ - - - - - - -/* sequents don't supply these. The following should suffice */ - - - - - - - - - -/* These seem to be sun & sysV names of these constants */ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//# 33 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/builtin.h" 2 - - -typedef void (*one_arg_error_handler_t)(const char*); -typedef void (*two_arg_error_handler_t)(const char*, const char*); - -long gcd(long, long); -long lg(unsigned long); -double pow(double, long); -long pow(long, long); - -double start_timer(); -double return_elapsed_time(double last_time = 0.0); - -char* itoa(long x, int base = 10, int width = 0); -char* itoa(unsigned long x, int base = 10, int width = 0); - -char* itoa(long long x, int base = 10, int width = 0); -char* itoa(unsigned long long x, int base = 10, int width = 0); - -char* dtoa(double x, char cvt = 'g', int width = 0, int prec = 6); - -char* hex(long x, int width); -char* hex(unsigned long x, int width); -char* hex(int x, int width); -char* hex(short x, int width); -char* hex(unsigned int x, int width); -char* hex(unsigned short x, int width); - -char* oct(long x, int width); -char* oct(unsigned long x, int width); -char* oct(int x, int width); -char* oct(short x, int width); -char* oct(unsigned int x, int width) ; -char* oct(unsigned short x, int width); - -char* dec(long x, int width); -char* dec(unsigned long x, int width); -char* dec(int x, int width); -char* dec(short x, int width); -char* dec(unsigned int x, int width) ; -char* dec(unsigned short x, int width); - -char* form(const char* fmt ...); -char* chr(char ch, int width = 0); -char* str(const char* s, int width = 0); - -unsigned int hashpjw(const char*); -unsigned int multiplicativehash(int); -unsigned int foldhash(double); - -extern void default_one_arg_error_handler(const char*); -extern void default_two_arg_error_handler(const char*, const char*); - -extern two_arg_error_handler_t lib_error_handler; - -extern two_arg_error_handler_t - set_lib_error_handler(two_arg_error_handler_t f); - - -double abs(double arg); -float abs(float arg); -short abs(short arg); -long abs(long arg); -int sign(long arg); -int sign(double arg); -long sqr(long arg); -double sqr(double arg); -int even(long arg); -int odd(long arg); -long lcm(long x, long y); -void setbit(long& x, long b); -void clearbit(long& x, long b); -int testbit(long x, long b); - -signed char min(signed char a, signed char b); -unsigned char min(unsigned char a, unsigned char b); - -signed short min(signed short a, signed short b); -unsigned short min(unsigned short a, unsigned short b); - -signed int min(signed int a, signed int b); -unsigned int min(unsigned int a, unsigned int b); - -signed long min(signed long a, signed long b); -unsigned long min(unsigned long a, unsigned long b); - -float min(float a, float b); - -double min(double a, double b); - -signed char max(signed char a, signed char b); -unsigned char max(unsigned char a, unsigned char b); - -signed short max(signed short a, signed short b); -unsigned short max(unsigned short a, unsigned short b); - -signed int max(signed int a, signed int b); -unsigned int max(unsigned int a, unsigned int b); - -signed long max(signed long a, signed long b); -unsigned long max(unsigned long a, unsigned long b); - -float max(float a, float b); - -double max(double a, double b); - - - - -inline double abs(double arg) -{ - return (arg < 0.0)? -arg : arg; -} - -inline float abs(float arg) -{ - return (arg < 0.0)? -arg : arg; -} - -inline short abs(short arg) -{ - return (arg < 0)? -arg : arg; -} - -inline long abs(long arg) -{ - return (arg < 0)? -arg : arg; -} - -inline int sign(long arg) -{ - return (arg == 0) ? 0 : ( (arg > 0) ? 1 : -1 ); -} - -inline int sign(double arg) -{ - return (arg == 0.0) ? 0 : ( (arg > 0.0) ? 1 : -1 ); -} - -inline long sqr(long arg) -{ - return arg * arg; -} - -inline double sqr(double arg) -{ - return arg * arg; -} - -inline int even(long arg) -{ - return !(arg & 1); -} - -inline int odd(long arg) -{ - return (arg & 1); -} - -inline long lcm(long x, long y) -{ - return x / gcd(x, y) * y; -} - -inline void setbit(long& x, long b) -{ - x |= (1 << b); -} - -inline void clearbit(long& x, long b) -{ - x &= ~(1 << b); -} - -inline int testbit(long x, long b) -{ - return ((x & (1 << b)) != 0); -} - - - - -//# 46 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine++.h" 2 - - -//# 65 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine++.h" - - -// Take the nice stuff that the regular sumachine.h provides -extern "C" { -//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" 1 - - - -/* - * Define a ``Standard Unix Machine'' - * - * By whatever means are available in /lib/cpp, figure out - * what type of operating system, maker, machine architecture - * and architecture instance we are on. - * - * OPSYS_TYPE - the type of operating system (e.g. vms) - * OPSYS_SUBTYPE - the subtype of operating system (e.g. bsd, sys5, etc) - * OPSYS_MFR - the manufacturer (e.g. Hewlett-Packard) - * OPSYS_VERS - the operating system version (e.g. sun 4.0) - * - * CPU_TYPE - the architecture (e.g. 68K) - * CPU_MODEL - the architecture instance (e.g. 68010) - * - * - * This file should be #included as the 1st line of each and every .c file - * - * It ensures that the environment which those src files expect exists - * either by fiat or by faking it where the host operating system is not - * up to snuff. - */ - -/* - * The OPSYS specifics - * - * Parameterized with the best known /lib/cpp predefines - */ - - - - - - - - - -/* - * Note that everyone defines the symbol unix except IBM's AIX 3.1 - * which doesn't define unix but DOES define the symbol _AIX - */ - - - - - - - - - - - - - - - - - - - - - -/* - * WATCHOUT - the newer gcc doesn't define __GNU__ - * So we may have to define __GNU__ ourselves - * - * __GNU__ is the old way - * __GNUC__ is the new way - * - * Use gcc -v somefile.c to determine what is being passed. - */ - -/* - * GNU doesn't know about any opsys-specific - * cpp tokens, so we must figure them out for it. - * GNU does however know about architecture-tokens - */ -//# 93 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" - - - - -/* then if defined(vax) || defined(mips) */ -/* then if >= ultrix 4.2 => defined(__vax) || defined(__mips) */ - - -/* - * gcc 1.39 uses the words mips and __mips__ while Ultrix 4.2 has - * been coded in terms of __mips (only!) - so we have to hack it. - * - * See from Ultrix 4.2 - * - * Unfortunately also, is turned on only if __STDC__ - * is undefined. gcc defines __STDC__ and you can't undef it. So - * We are forced here (as with math.h) to copy and - * strip off the #if !defined(__STDC__). - * - * Further unfortunateness occurs in that the only way we have of - * discovering that we're in Ultrix 4.2 is to #include - * and check for the vector unit support #defined there. However - * we need the workarounds to be defined first in - * order to get the full effect of . - * - * So we have to do all this stuff under any and all Ultrix versions. - * - * We also have to work around the fact that the GNU (gcc 1.95.0 and later) - * compilers may be defining this stuff already - */ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/* end of fakeout */ - - -/* - * The r2000 and r3000 are indistinguishable (so far) - */ - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/sys/types.h" 1 - - -extern "C" -{ - - - - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 1 -//# 12 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" - -//# 10 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/sys/types.h" 2 - - - - - -//# 1 "/usr/include/sys/types.h" 1 -/* @(#)types.h 4.3 (ULTRIX) 2/28/91 */ - -/************************************************************************ - * * - * Copyright (c) 1984 - 1989 by * - * Digital Equipment Corporation, Maynard, MA * - * All rights reserved. * - * * - * This software is furnished under a license and may be used and * - * copied only in accordance with the terms of such license and * - * with the inclusion of the above copyright notice. This * - * software or any other copies thereof may not be provided or * - * otherwise made available to any other person. No title to and * - * ownership of the software is hereby transferred. * - * * - * This software is derived from software received from the * - * University of California, Berkeley, and from Bell * - * Laboratories. Use, duplication, or disclosure is subject to * - * restrictions under license agreements with University of * - * California and with AT&T. * - * * - * The information in this software is subject to change without * - * notice and should not be construed as a commitment by Digital * - * Equipment Corporation. * - * * - * Digital assumes no responsibility for the use or reliability * - * of its software on equipment which is not supplied by Digital. * - * * - ************************************************************************/ - -/* ------------------------------------------------------------------------ - * Modification History: /sys/h/types.h - * - * 20-Dec-1989 Larry Scott - * added #ifdef's for compliance - * - * 16-Jun-1989 Jon Reeves - * size_t must be unsigned, per ANSI and X/Open - * - * 05-Jun-1989 Jon Reeves - * Change latch name for size_t; it's in lots of headers. - * - * 12-May-1989 Todd M. Katz TMK0001 - * Added volatile type definitions: vu_long, vu_short, vu_char, - * v_long, v_short, and v_char. - * - * 08-May-1989 -- Ken Lesniak - * Conditionalize items also defined in time.h. - * - * 1-Feb-89 -- jmartin - * typedef s_char - * - * 15-Jan-88 lp - * Merge of final 43BSD changes. - * - * 31-August-1987 -- Mark Parenti - * Add definitions needed for POSIX compliance - * - * 27-April-1987 -- Larry Cohen - * Modify the typedef "fd_set" to accomodate 64 file descriptors. - * - * David L Ballenger, 8-Mar-1985 - * 0002 Add types for System V compatibility. - * - * 23 Oct 84 -- jrs - * Add ifdef so we can be nested without problem - * Derived from 4.2BSD, labeled: - * types.h 6.2 84/06/09 - * - * ----------------------------------------------------------------------- - */ - - - - - - - -//# 1 "/usr/include/ansi_compat.h" 1 -/* - * @(#)ansi_compat.h 4.4 (ULTRIX) 10/8/90 - */ - -/************************************************************************ - * * - * Copyright (c) 1990 by * - * Digital Equipment Corporation, Maynard, MA * - * All rights reserved. * - * * - * This software is furnished under a license and may be used and * - * copied only in accordance with the terms of such license and * - * with the inclusion of the above copyright notice. This * - * software or any other copies thereof may not be provided or * - * otherwise made available to any other person. No title to and * - * ownership of the software is hereby transferred. * - * * - * The information in this software is subject to change without * - * notice and should not be construed as a commitment by Digital * - * Equipment Corporation. * - * * - * Digital assumes no responsibility for the use or reliability * - * of its software on equipment which is not supplied by Digital. * - * * - ************************************************************************/ - -/* - * To avoid namespace pollution when using the ULTRIX header files under the - * DEC ANSI compiler, all user-visible header files were modifed to reference - * ANSI-style predefined macro name rather than their traditional names - * (__ultrix vice ultrix). Every file which accesses a predefined macro name - * must include this file before any other files are included or the macros - * are tested. - * - * In strict ANSI mode, the appropriate ANSI-style macros are already - * defined and the redefinitions in this file will not be seen. When using - * pcc, the traditional macro names are defined and this file will define - * ANSI-style equivalents of the traditional names. When using the DEC C - * compiler, both the traditional and ANSI predefined macro names are - * available so the definitions in this file are not made visible. - * - */ - - -//# 116 "/usr/include/ansi_compat.h" - -//# 79 "/usr/include/sys/types.h" 2 - - - - -/* - * Basic system types and major/minor device constructing/busting macros. - */ - -/* major part of a device */ - - -/* minor part of a device */ - - -/* make a device number */ - - -typedef unsigned char u_char; -typedef unsigned short u_short; -typedef unsigned int u_int; -typedef unsigned int uint; /* sys V compatibility */ -typedef unsigned long u_long; -typedef unsigned short ushort; /* sys III compat */ - -typedef volatile char v_char; -typedef volatile short v_short; -typedef volatile long v_long; -typedef volatile unsigned char vu_char; -typedef volatile unsigned short vu_short; -typedef volatile unsigned long vu_long; - -typedef - - signed - - char s_char; - - - - - - - - - -typedef struct _physadr { int r[1]; } *physadr; -/* - * WARNING: - * this must match the definition of kernel jmpbuf's in machine/pcb.h - */ -typedef struct label_t { - int val[12]; -} label_t; - - -typedef struct _quad { long val[2]; } quad; -typedef long daddr_t; -typedef char * caddr_t; -typedef u_long gno_t; -typedef short cnt_t; /* sys V compatibility */ -typedef long swblk_t; -typedef long paddr_t; /* sys V compatibility */ -typedef long audit_ID_t; - - -typedef short dev_t; -typedef short gid_t; /* POSIX compliance */ -typedef unsigned long ino_t; -typedef unsigned short mode_t; /* POSIX compliance */ -typedef short nlink_t; /* POSIX compliance */ -typedef int off_t; - - -typedef int pid_t; /* POSIX compliance */ - -typedef short uid_t; /* POSIX compliance */ - - -typedef int time_t; - - - - - - - - - -typedef int clock_t; /* POSIX compliance */ - -typedef long key_t; /* sys V compatibility */ - - - - -/* - * The maximum number of file descriptors is now a configurable option - * (max_nofile variable in /sys/conf/{mips|vax}/param.c). - * The getdtablesize(2) system call should be used to obtain the - * current limit. The value returned by getdtablesize() must be greater - * than 64, and less than or equal to MAX_NOFILE in types.h . The - * MAX_NOFILE define is needed for backward compatability with broken - * programs that need a static sized array for selecting. These programs - * should be modified to use the getdtablesize() interface for sizing. - */ - - -/* - * Select uses bit masks of file descriptors in longs. - * These macros manipulate such bit fields (the filesystem macros use chars). - * FD_SETSIZE may be defined by the user, but the default here - * should be >= NOFILE (param.h). - */ - - - - -/* How many things we'll allow select to use. 0 if unlimited */ - -typedef long fd_mask; - - - - - - -typedef struct fd_set { - fd_mask fds_bits[(((4096 )+(( (sizeof(fd_mask) * 8 ) )-1))/( (sizeof(fd_mask) * 8 ) )) ]; -} fd_set; - - - - - - - - -//# 15 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/sys/types.h" 2 - - - - - - -} - - - - -//# 199 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" 2 - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/signal.h" 1 -// This may look like C code, but it is really -*- C++ -*- -/* -Copyright (C) 1989 Free Software Foundation - written by Doug Lea (dl@rocky.oswego.edu) - -This file is part of the GNU C++ Library. This library is free -software; you can redistribute it and/or modify it under the terms of -the GNU Library General Public License as published by the Free -Software Foundation; either version 2 of the License, or (at your -option) any later version. This library is distributed in the hope -that it will be useful, but WITHOUT ANY WARRANTY; without even the -implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with this library; if not, write to the Free Software -Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - - - -extern "C" { - - - - -//# 1 "/usr/include/signal.h" 1 -/* @(#)signal.h 2.8 (ULTRIX) 11/9/89 */ - -/************************************************************************ - * * - * Copyright (c) 1987-1989 by * - * Digital Equipment Corporation, Maynard, MA * - * All rights reserved. * - * * - * This software is furnished under a license and may be used and * - * copied only in accordance with the terms of such license and * - * with the inclusion of the above copyright notice. This * - * software or any other copies thereof may not be provided or * - * otherwise made available to any other person. No title to and * - * ownership of the software is hereby transferred. * - * * - * This software is derived from software received from the * - * University of California, Berkeley, and from Bell * - * Laboratories. Use, duplication, or disclosure is subject to * - * restrictions under license agreements with University of * - * California and with AT&T. * - * * - * The information in this software is subject to change without * - * notice and should not be construed as a commitment by Digital * - * Equipment Corporation. * - * * - * Digital assumes no responsibility for the use or reliability * - * of its software on equipment which is not supplied by Digital. * - * * - ************************************************************************/ -/************************************************************************ - * Modification History * - * * - * Debby Haeck 11/14/90 * - * added new Vector Arithmetic Exception handling codes * - * Debby Haeck 9/4/90 * - * added new u_code for vector support * - * ILL_VECOP_FAULT, ILL_VECINST_FAULT, TERM_VECT_HARD and * - * TERM_VECT_TOOMANY * - * Tak Yin Wong 3/390 * - * Add ifdef's for POSIX and XOPEN * - * Linda Wilson 9/12/89 * - * typedef sigset_t for X/OPEN * - * Linda Wilson 9/12/89 * - * ifdef out sigmask for POSIX * - * Jon Reeves 7/14/89 * - * Add X/Open mandated function declarations. * - * Jon Reeves 5/16/89 * - * Add new BRK_STACKOVERFLOW def from MIPS 2.0 cmplrs * - * Jon Reeves 5/12/89 * - * Add raise() and sig_atomic_t for ANSI * - * Mark Parenti 2/06/88 * - * Change SA_CLDSTOP to SA_NOCLDSTOP per POSIX change * - * Fred Glover 1/12/88 * - * Add SIGLOST - server crash Sys-V lock notification * - * * - * Larry Cohen 10/1/85 * - * Add SIGWINCH - window change signal * - * * - * Greg Depp 25 Jun 85 * - * Moved SIGUSR1 and SIGUSR2 to 30 and 31 to conform with Berkeley * - * * - * David L Ballenger, 28-Mar-1985 * - * 0001 Add definitions for System V compatibility * - * * - ************************************************************************/ - - - - - - - - -//# 1 "/usr/include/ansi_compat.h" 1 -/* - * @(#)ansi_compat.h 4.4 (ULTRIX) 10/8/90 - */ - -/************************************************************************ - * * - * Copyright (c) 1990 by * - * Digital Equipment Corporation, Maynard, MA * - * All rights reserved. * - * * - * This software is furnished under a license and may be used and * - * copied only in accordance with the terms of such license and * - * with the inclusion of the above copyright notice. This * - * software or any other copies thereof may not be provided or * - * otherwise made available to any other person. No title to and * - * ownership of the software is hereby transferred. * - * * - * The information in this software is subject to change without * - * notice and should not be construed as a commitment by Digital * - * Equipment Corporation. * - * * - * Digital assumes no responsibility for the use or reliability * - * of its software on equipment which is not supplied by Digital. * - * * - ************************************************************************/ - -/* - * To avoid namespace pollution when using the ULTRIX header files under the - * DEC ANSI compiler, all user-visible header files were modifed to reference - * ANSI-style predefined macro name rather than their traditional names - * (__ultrix vice ultrix). Every file which accesses a predefined macro name - * must include this file before any other files are included or the macros - * are tested. - * - * In strict ANSI mode, the appropriate ANSI-style macros are already - * defined and the redefinitions in this file will not be seen. When using - * pcc, the traditional macro names are defined and this file will define - * ANSI-style equivalents of the traditional names. When using the DEC C - * compiler, both the traditional and ANSI predefined macro names are - * available so the definitions in this file are not made visible. - * - */ - - -//# 116 "/usr/include/ansi_compat.h" - -//# 74 "/usr/include/signal.h" 2 - - - - - - - - - - - - - - - - - - - /* absent or non-vector capable sys */ -/* CHME, CHMS, CHMU are not yet given back to users reasonably */ - - - - - - - - - - - - - - - - - - - -/* the following are used to for Vector Arithmetic Exception handling */ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/* Add System V signal definitions (DLB001) */ - - - - - - - -/* - * Codes for the mips break instruction. - */ - - - - - - - - - - - - - - - - -/* Accesses to sig_atomic_t are atomic, even with async interrupts. - Not an issue for us, but ANSI requires the definition. */ -typedef long sig_atomic_t; -typedef int sigset_t; /* type used for sigsetops() functions */ - - -/* - * Signal vector "template" used in sigvec call. - */ -struct sigvec { - void (*sv_handler)(); /* signal handler */ - sigset_t sv_mask; /* signal mask to apply */ - int sv_flags; /* see signal options below */ -}; - - -/* - * The following structure must be exactly the same as the above structure - * with the names changed for POSIX compliance. - */ -struct sigaction { - void (*sa_handler)(); /* signal handler */ - sigset_t sa_mask; /* signal mask to apply */ - int sa_flags; /* see signal options below */ -}; - - - - - - - - - - - - - - -/* Defines for sigprocmask() call. POSIX. - */ - - - - - - -/* - * Structure used in sigstack call. - */ -struct sigstack { - char *ss_sp; /* signal stack pointer */ - int ss_onstack; /* current status */ -}; - -/* - * Information pushed on stack when a signal is delivered. - * This is used by the kernel to restore state following - * execution of the signal handler. It is also made available - * to the handler to allow it to properly restore state if - * a non-standard exit is performed. - * -//#ifdef __vax - * XXX - sigcontext needs updating per 4.3BSD - rr - * -//#endif __vax -//#ifdef __mips - * WARNING: THE sigcontext MUST BE KEPT CONSISTENT WITH /usr/include/setjmp.h - * AND THE LIBC ROUTINES setjmp() AND longjmp() -//#endif __mips - */ -struct sigcontext { - - /* - * BEGIN REGION THAT MUST CORRESPOND WITH setjmp.h - * BEGIN REGION THAT MUST CORRESPOND WITH A jmp_buf - */ - - int sc_onstack; /* sigstack state to restore */ - int sc_mask; /* signal mask to restore */ - - - - - - - int sc_pc; /* pc at time of signal */ - /* - * General purpose registers - */ - int sc_regs[32]; /* processor regs 0 to 31 */ - int sc_mdlo; /* mul/div low */ - int sc_mdhi; /* mul/div high */ - /* - * Floating point coprocessor state - */ - int sc_ownedfp; /* fp has been used */ - int sc_fpregs[32]; /* fp regs 0 to 31 */ - int sc_fpc_csr; /* floating point control and status reg */ - int sc_fpc_eir; /* floating point exception instruction reg */ - /* - * END OF REGION THAT MUST AGREE WITH setjmp.h - * END OF jmp_buf REGION - */ - /* - * System coprocessor registers at time of signal - */ - int sc_cause; /* cp0 cause register */ - int sc_badvaddr; /* cp0 bad virtual address */ - int sc_badpaddr; /* cpu bd bad physical address */ - -}; - - - - - - - - - - - - - - - - - - - - - - - -/* - * prototypes - * - */ -extern void (*signal(int __sig, void(*__func)(int)))(int); -int raise( int __sig ); -int kill( pid_t __pid, int __sig ); -int sigemptyset( sigset_t *__set ); -int sigfillset( sigset_t *__set ); -int sigaddset( sigset_t *__set, int __signo ); -int sigdelset( sigset_t *__set, int __signo ); -int sigismember( const sigset_t *__set, int __signo ); -int sigaction( int __sig, const struct sigaction *__act, - struct sigaction *__oact ); -int sigprocmask( int __how, const sigset_t *__set, sigset_t *__oset ); -int sigpending( sigset_t *__set ); -int sigsuspend( const sigset_t *__sigmask ); - - - - - - - - - - - -/* - * Macro for converting signal number to a mask suitable for - * sigblock(). - */ - - - - - - -//# 26 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/signal.h" 2 - - - - -// The Interviews folks call this SignalHandler. Might as well conform. -// Beware: some systems think that SignalHandler returns int. -typedef void (*SignalHandler) (int); - -extern SignalHandler signal(int sig, SignalHandler action); -extern SignalHandler sigset(int sig, SignalHandler action); -extern SignalHandler ssignal(int sig, SignalHandler action); -extern int gsignal (int sig); -extern int kill (int pid, int sig); -extern int killpg(int, int); -extern int siginterrupt(int, int); -extern void psignal(unsigned, char*); - - -extern int sigsetmask(int mask); -extern int sigblock(int mask); -extern int sigpause(int mask); -extern int sigvec(int sig, struct sigvec* v, struct sigvec* prev); - - -// The Interviews version also has these ... - - - - - - - - - - - - - -} - - - -//# 200 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" 2 - - -/* - * Note that in Ultrix 4.2 renames all of the - * previously-predefined cpp names to __names. Also there is - * new support for vector processors - TERM_VECT_HARD etc. - */ - -//# 244 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" - - -//# 263 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" - -//# 283 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" - -/* { */ -//# 298 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" - -//# 319 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" - -//# 328 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" - -//# 345 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" - - - - - - - - - - - - - - - - - - - - - - - - - - -//# 387 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" - - - - - - - -/* - * THE CPU specifics - * - * Parameterized with the best known /lib/cpp predefines - * Set up for a middle-of-the-road machine. - */ - -/* - * DECstation Processor - * 2100 R2000 (slower clock) - * 3100 R2000 - * 5000 R3000 - * 5400 R3000 - * ???? R6000 - */ -/* - * We might be on the R3000 machine, but there is really - * no way of distinguishing that from the src-code level. - * The GNU people define some stuff, but its usually wrong. - */ - - - - - - - - - - - - - - - - - -//# 453 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" - - - - - - - - - -//# 471 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//# 512 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" - -/* will we be porting to this? */ -//# 522 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" - - -//# 537 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" - - -/* - * The following MUST be literals else /lib/cpp cannot do - * == operations on them. Remember cpp does strcmps, not MATH - * - * OPSYS_TYPE - * - * #if OPSYS_TYPE == MD_opsystype - * #endif - */ - - - - - - -/* - * OPSYS_SUBTYPE - * - * #if OPSYS_SUBTYPE == MD_opsyssubtype - * #endif - */ - - - - - - - - - - - -/* - * OPSYS_MFR - * - * #if OPSYS_MFR == MD_opsysmfr - * #endif - */ - - - - - - - - - - - - - - - -/* - * OPSYS_VERS - * - * #if OPSYS_VERS == MD_opsysvers - * #endif - * #if OPSYS_MFR == MD_opsysmfr && OPSYS_VERS <= MD_opsysvers - * #endif - */ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/* - * CPU_TYPE - * - * #if CPU_TYPE == MD_cputype - * #endif - */ - - - - - - - - - - - - - - - - - - - - -/* - * CPU_MODEL - * - * #if CPU_MODEL == MD_modelname - * #endif - */ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/* don't add this stuff in if the query program display.sh is being run */ - -//# 1754 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" - - - - - -//# 69 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine++.h" 2 - -} - -// Always turn this stuff on b/c otherwise nothing works - - - - - -//# 1 "GctNameRef.List.cc" 2 - -//# 1 "../../../../mips/include/Gct/genclasses.h" 1 -// -*- C++ -*- - - - -// -// genclasses - The GNU Container Classes -// -// Expects to be included by Gct.h or where appropriate -// especially before any genclass class headerfile is included. -// -// Wendell Baker, Berkeley CAD Group, 1991 (wbaker@ic.Berkeley.EDU) -// - - -// Make sure that we get all of the inline functions too but prevent duplicate -// definition warnings. - - - - - - - - - - -// -// Turn off the definitions of these hash functions -// -// unsigned hash(GctAstRef&) -// -// So that the following will match and be used instead: -// -// unsigned hash(GctRef&) -// -// The idea is to not allow the various header files to -// create (say) ``unsigned hash(GctAstRef&)'' but to use -// ``hash(x)'' for the hash function anyway. We just want -// the hash() function used to be ``unsigned hash(GctRef&)'' -// - - -//# 1 "../../../../mips/include/Gct/Reference.h" 1 -// -*- C++ -*- - - - -// -// Classes: -// GctRef -// GctReferenceObject -// -// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) -// - - - - - -//#pragma interface - - - -//# 1 "../../../../mips/include/Gct/Reference/GctReferenceCount.h" 1 -// -*- C++ -*- - - - -// -// GctReferenceCount class -// -// Expects to be included by Gct/Reference.h -// -// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) -// - - - - - -//#pragma interface - - - - - -//# 25 "../../../../mips/include/Gct/Reference/GctReferenceCount.h" 2 - - -//# 1 "../../../../mips/include/Gct/GctErrorHandler.h" 1 -// -*- C++ -*- - - - -// -// GctErrorHandler class -// -// Expects to be included by Gct.h -// -// Wendell Baker, Berkeley CAD Group, 1991 (wbaker@ic.Berkeley.EDU) -// - - - - - -//#pragma interface - - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1 - - - - - - - -//# 25 "../../../../mips/include/Gct/GctErrorHandler.h" 2 - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" 1 -// This may look like C code, but it is really -*- C++ -*- -/* -Copyright (C) 1988 Free Software Foundation - written by Doug Lea (dl@rocky.oswego.edu) - -This file is part of the GNU C++ Library. This library is free -software; you can redistribute it and/or modify it under the terms of -the GNU Library General Public License as published by the Free -Software Foundation; either version 2 of the License, or (at your -option) any later version. This library is distributed in the hope -that it will be useful, but WITHOUT ANY WARRANTY; without even the -implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with this library; if not, write to the Free Software -Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - - - - -//#pragma interface - - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stream.h" 1 - - - -// Compatibility with old library. - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 -// This is part of the iostream library, providing -*- C++ -*- input/output. -// Copyright (C) 1991 Per Bothner. -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the Free -// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - - -//#pragma interface - - - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/streambuf.h" 1 -// This is part of the iostream library, providing -*- C++ -*- input/output. -// Copyright (C) 1991 Per Bothner. -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the Free -// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - - - -//#pragma interface - - -/* KLUDGES!! */ -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 1 -//# 12 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" - -//# 25 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/streambuf.h" 2 - - - - - - - - - - - - - - - - -class ostream; class streambuf; - -typedef long streamoff, streampos; - -struct _ios_fields { // The data members of an ios. - streambuf *_strbuf; - ostream* _tie; - long _width; - unsigned long _flags; - char _fill; - unsigned char _state; - unsigned short _precision; -}; - - -enum state_value { _good = 0, _eof = 1, _fail = 2, _bad = 4 }; - - -class ios : public _ios_fields { - public: - enum io_state { goodbit=0, eofbit=1, failbit=2, badbit=4 }; - enum open_mode { - in=1, - out=2, - ate=4, - app=8, - trunc=16, - nocreate=32, - noreplace=64 }; - enum seek_dir { beg, cur, end}; - enum { skipws=01, left=02, right=04, internal=010, - dec=020, oct=040, hex=0100, - showbase=0200, showpoint=0400, uppercase=01000, showpos=02000, - scientific=04000, fixed=0100000, unitbuf=020000, stdio=040000, - dont_close=0x80000000 //Don't close streambuf when destroying stream - }; - - ostream* tie() { return _tie; } - ostream* tie(ostream* val) { ostream* save=_tie; _tie=val; return save; } - - // Methods to change the format state. - char fill() { return _fill; } - char fill(char newf) { char oldf = _fill; _fill = newf; return oldf; } - unsigned long flags() { return _flags; } - unsigned long flags(unsigned long new_val) { - unsigned long old_val = _flags; _flags = new_val; return old_val; } - unsigned short precision() { return _precision; } - unsigned short precision(int newp) { - unsigned short oldp = _precision; _precision = (unsigned short)newp; - return oldp; } - unsigned long setf(unsigned long val) { - unsigned long oldbits = _flags; - _flags |= val; return oldbits; } - unsigned long setf(unsigned long val, unsigned long mask) { - unsigned long oldbits = _flags; - _flags = (_flags & ~mask) | (val & mask); return oldbits; } - unsigned long unsetf(unsigned long mask) { - unsigned long oldbits = _flags & mask; - _flags &= ~mask; return oldbits; } - long width() { return _width; } - long width(long val) { long save = _width; _width = val; return save; } - - static const unsigned long basefield; - static const unsigned long adjustfield; - static const unsigned long floatfield; - - streambuf* rdbuf() { return _strbuf; } - void clear(int state = 0) { _state = state; } - int good() { return _state == 0; } - int eof() { return _state & ios::eofbit; } - int fail() { return _state & (ios::badbit|ios::failbit); } - int bad() { return _state & ios::badbit; } - int rdstate() { return _state; } - void set(int flag) { _state |= flag; } - operator void*() { return fail() ? (void*)0 : (void*)this; } - int operator!() { return fail(); } - - - void unset(state_value flag) { _state &= ~flag; } - void close(); - int is_open(); - int readable(); - int writable(); - - - protected: - ios(streambuf*sb) { _strbuf=sb; _state=0; _width=0; _fill=' '; - _flags=ios::skipws; _precision=6; } -}; - - - - -typedef ios::seek_dir _seek_dir; - - -// Magic numbers and bits for the _flags field. -// The magic numbers use the high-order bits of _flags; -// the remaining bits are abailable for variable flags. -// Note: The magic numbers must all be negative if stdio -// emulation is desired. - - - - - - - - - - - - - - - -struct __streambuf { - // NOTE: If this is changed, also change __FILE in stdio/stdio.h! - int _flags; /* High-order word is _IO_MAGIC; rest is flags. */ - char* _gptr; /* Current get pointer */ - char* _egptr; /* End of get area. */ - char* _eback; /* Start of putback+get area. */ - char* _pbase; /* Start of put area. */ - char* _pptr; /* Current put pointer. */ - char* _epptr; /* End of put area. */ - char* _base; /* Start of reserve area. */ - char* _ebuf; /* End of reserve area. */ - struct streambuf *_chain; -}; - -struct streambuf : private __streambuf { - friend class ios; - friend class istream; - friend class ostream; - protected: - static streambuf* _list_all; /* List of open streambufs. */ - streambuf*& xchain() { return _chain; } - void _un_link(); - void _link_in(); - char* gptr() const { return _gptr; } - char* pptr() const { return _pptr; } - char* egptr() const { return _egptr; } - char* epptr() const { return _epptr; } - char* pbase() const { return _pbase; } - char* eback() const { return _eback; } - char* ebuf() const { return _ebuf; } - char* base() const { return _base; } - void xput_char(char c) { *_pptr++ = c; } - int xflags() { return _flags; } - int xflags(int f) { int fl = _flags; _flags = f; return fl; } - void xsetflags(int f) { _flags |= f; } - void gbump(int n) { _gptr += n; } - void pbump(int n) { _pptr += n; } - void setb(char* b, char* eb, int a=0); - void setp(char* p, char* ep) { _pbase=_pptr=p; _epptr=ep; } - void setg(char* eb, char* g, char *eg) { _eback=eb; _gptr=g; _egptr=eg; } - public: - static int flush_all(); - static void flush_all_linebuffered(); // Flush all line buffered files. - virtual int underflow(); // Leave public for now - virtual int overflow(int c = (-1) ); // Leave public for now - virtual int doallocate(); - virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out); - virtual streampos seekpos(streampos pos, int mode = ios::in|ios::out); - int sputbackc(char c); - int sungetc(); - streambuf(); - virtual ~streambuf(); - int unbuffered() { return _flags & 2 ? 1 : 0; } - int linebuffered() { return _flags & 0x4000 ? 1 : 0; } - void unbuffered(int i) - { if (i) _flags |= 2 ; else _flags &= ~2 ; } - void linebuffered(int i) - { if (i) _flags |= 0x4000 ; else _flags &= ~0x4000 ; } - int allocate() { - if (base() || unbuffered()) return 0; - else return doallocate(); } - virtual int sync(); - virtual int pbackfail(int c); - virtual int ungetfail(); - virtual streambuf* setbuf(char* p, int len); - int in_avail() { return _egptr - _gptr; } - int out_waiting() { return _pptr - _pbase; } - virtual int sputn(const char* s, int n); - virtual int sgetn(char* s, int n); - long sgetline(char* buf, size_t n, char delim, int putback_delim); - int sbumpc() { - if (_gptr >= _egptr && underflow() == (-1) ) return (-1) ; - else return *(unsigned char*)_gptr++; } - int sgetc() { - if (_gptr >= _egptr && underflow() == (-1) ) return (-1) ; - else return *(unsigned char*)_gptr; } - int snextc() { - if (++_gptr >= _egptr && underflow() == (-1) ) return (-1) ; - else return *(unsigned char*)_gptr; } - int sputc(int c) { - if (_pptr >= _epptr) return overflow(c); - return *_pptr++ = c, (unsigned char)c; } - int vscan(char const *fmt0, char* ap); - int vform(char const *fmt0, char* ap); -}; - -struct __file_fields { - char _fake; - char _shortbuf[1]; - short _fileno; - int _blksize; - char* _save_gptr; - char* _save_egptr; - long _offset; -}; - -class filebuf : public streambuf { - struct __file_fields _fb; - void init(); - public: - filebuf(); - filebuf(int fd); - filebuf(int fd, char* p, int len); - ~filebuf(); - filebuf* attach(int fd); - filebuf* open(const char *filename, const char *mode); - filebuf* open(const char *filename, int mode, int prot = 0664); - virtual int underflow(); - virtual int overflow(int c = (-1) ); - int is_open() { return _fb._fileno >= 0; } - int fd() { return is_open() ? _fb._fileno : (-1) ; } - filebuf* close(); - virtual int doallocate(); - virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out); - int sputn(const char* s, int n); - int sgetn(char* s, int n); - protected: // See documentation in filebuf.C. - virtual int pbackfail(int c); - virtual int sync(); - int is_reading() { return eback() != egptr(); } - char* cur_ptr() { return is_reading() ? gptr() : pptr(); } - /* System's idea of pointer */ - char* file_ptr() { return _fb._save_gptr ? _fb._save_egptr : egptr(); } - int do_flush(); - // Low-level operations (Usually invoke system calls.) - virtual int sys_read(char* buf, size_t size); - virtual long sys_seek(long , _seek_dir); - virtual long sys_write(const void*, long); - virtual int sys_stat(void*); // Actually, a (struct stat*) - virtual int sys_close(); -}; - - -inline int ios::readable() { return rdbuf()->_flags & 4 ; } -inline int ios::writable() { return rdbuf()->_flags & 8 ; } -inline int ios::is_open() {return rdbuf()->_flags & 4 +8 ;} - - - - -//# 25 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 2 - - -class istream; class ostream; -typedef istream& (*__imanip)(istream&); -typedef ostream& (*__omanip)(ostream&); - -extern istream& ws(istream& ins); -extern ostream& flush(ostream& outs); -extern ostream& endl(ostream& outs); -extern ostream& ends(ostream& outs); - -class ostream : public ios -{ - void do_osfx(); - public: - ostream(); - ostream(streambuf* sb, ostream* tied=0 ); - ~ostream(); - - int opfx() { if (!good()) return 0; if (_tie) _tie->flush(); return 1; } - void osfx() { if (flags() & (ios::unitbuf|ios::stdio)) - do_osfx(); } - streambuf* ostreambuf() const { return _strbuf; } - ostream& flush(); - ostream& put(char c); - ostream& write(const char *s, int n); - ostream& write(const unsigned char *s, int n) { return write((char*)s, n);} - ostream& write(const void *s, int n) { return write((char*)s, n);} - ostream& seekp(streampos); - ostream& seekp(streamoff, _seek_dir); - streampos tellp(); - ostream& form(const char *format ...); - ostream& vform(const char *format, char* args); -}; - -ostream& operator<<(ostream&, char c); -ostream& operator<<(ostream& os, unsigned char c) { return os << (char)c; } -//ostream& operator<<(ostream &os, signed char c) { return os << (char)c; } -extern ostream& operator<<(ostream&, const char *s); -inline ostream& operator<<(ostream& os, const unsigned char *s) -{ return os << (const char*)s; } -//inline ostream& operator<<(ostream& os, const signed char *s) -//{ return os << (const char*)s; } -ostream& operator<<(ostream&, void *p); -ostream& operator<<(ostream&, int n); -ostream& operator<<(ostream&, long n); -ostream& operator<<(ostream&, unsigned int n); -ostream& operator<<(ostream&, unsigned long n); -ostream& operator<<(ostream& os, short n) {return os << (int)n;} -ostream& operator<<(ostream& os, unsigned short n) -{return os << (unsigned int)n;} -ostream& operator<<(ostream&, float n); -ostream& operator<<(ostream&, double n); -ostream& operator<<(ostream& os, __omanip func) { return (*func)(os); } -ostream& operator<<(ostream&, streambuf*); - -class istream : public ios -{ - size_t _gcount; - public: - istream(); - istream(streambuf* sb, ostream*tied=0 ); - ~istream(); - streambuf* istreambuf() const { return _strbuf; } - istream& get(char& c); - istream& get(unsigned char& c); - istream& read(char *ptr, int n); - istream& read(unsigned char *ptr, int n) { return read((char*)ptr, n); } - istream& read(void *ptr, int n) { return read((char*)ptr, n); } - int get() { return _strbuf->sbumpc(); } - istream& getline(char* ptr, int len, char delim = '\n'); - istream& get(char* ptr, int len, char delim = '\n'); - istream& gets(char **s, char delim = '\n'); - int ipfx(int need) { - if (!good()) { set(ios::failbit); return 0; } - if (_tie && (need == 0 || rdbuf()->in_avail())) ; /* THIS IS BAD */ - if (!need && (flags() & ios::skipws) && !ws(*this)) return 0; - return 1; - } - int ipfx0() { // Optimized version of ipfx(0). - if (!good()) { set(ios::failbit); return 0; } - if (_tie) _tie->flush(); - if ((flags() & ios::skipws) && !ws(*this)) return 0; - return 1; - } - int ipfx1() { // Optimized version of ipfx(1). - if (!good()) { set(ios::failbit); return 0; } - if (_tie && rdbuf()->in_avail() == 0) _tie->flush(); - return 1; - } - size_t gcount() { return _gcount; } - istream& seekg(streampos); - istream& seekg(streamoff, _seek_dir); - streampos tellg(); - istream& putback(char ch) { - if (good() && _strbuf->sputbackc(ch) == (-1) ) clear(ios::badbit); - return *this;} - istream& unget() { - if (good() && _strbuf->sungetc() == (-1) ) clear(ios::badbit); - return *this;} - - istream& unget(char ch) { return putback(ch); } - int skip(int i); - -}; - -istream& operator>>(istream&, char*); -istream& operator>>(istream& is, unsigned char* p) { return is >> (char*)p; } -//istream& operator>>(istream& is, signed char* p) { return is >> (char*)p; } -istream& operator>>(istream&, char& c); -istream& operator>>(istream&, unsigned char& c); -//istream& operator>>(istream&, signed char& c); -istream& operator>>(istream&, int&); -istream& operator>>(istream&, long&); -istream& operator>>(istream&, short&); -istream& operator>>(istream&, unsigned int&); -istream& operator>>(istream&, unsigned long&); -istream& operator>>(istream&, unsigned short&); -istream& operator>>(istream&, float&); -istream& operator>>(istream&, double&); -istream& operator>>(istream& is, __imanip func) { return (*func)(is); } - -class iostream : public ios { - size_t _gcount; - public: - iostream(); - operator istream&() { return *(istream*)this; } - operator ostream&() { return *(ostream*)this; } - ~iostream(); - // NOTE: These duplicate istream methods. - istream& get(char& c) { return ((istream*)this)->get(c); } - istream& get(unsigned char& c) { return ((istream*)this)->get(c); } - istream& read(char *ptr, int n) { return ((istream*)this)->read(ptr, n); } - istream& read(unsigned char *ptr, int n) - { return ((istream*)this)->read((char*)ptr, n); } - istream& read(void *ptr, int n) - { return ((istream*)this)->read((char*)ptr, n); } - int get() { return _strbuf->sbumpc(); } - istream& getline(char* ptr, int len, char delim = '\n') - { return ((istream*)this)->getline(ptr, len, delim); } - istream& get(char* ptr, int len, char delim = '\n') - { return ((istream*)this)->get(ptr, len, delim); } - istream& gets(char **s, char delim = '\n') - { return ((istream*)this)->gets(s, delim); } - int ipfx(int need) { return ((istream*)this)->ipfx(need); } - int ipfx0() { return ((istream*)this)->ipfx0(); } - int ipfx1() { return ((istream*)this)->ipfx1(); } - size_t gcount() { return _gcount; } - istream& putback(char ch) { return ((istream*)this)->putback(ch); } - istream& unget() { return ((istream*)this)->unget(); } - istream& seekg(streampos pos) { return ((istream*)this)->seekg(pos); } - istream& seekg(streamoff off, _seek_dir dir) - { return ((istream*)this)->seekg(off, dir); } - streampos tellg() { return ((istream*)this)->tellg(); } - - istream& unget(char ch) { return putback(ch); } - - - // NOTE: These duplicate ostream methods. - int opfx() { return ((ostream*)this)->opfx(); } - void osfx() { ((ostream*)this)->osfx(); } - ostream& flush() { return ((ostream*)this)->flush(); } - ostream& put(char c) { return ((ostream*)this)->put(c); } - ostream& write(const char *s, int n) - { return ((ostream*)this)->write(s, n); } - ostream& write(const unsigned char *s, int n) - { return ((ostream*)this)->write((char*)s, n); } - ostream& write(const void *s, int n) - { return ((ostream*)this)->write((char*)s, n); } - ostream& form(const char *format ...); - ostream& vform(const char *format, char* args) - { return ((ostream*)this)->vform(format, args); } - ostream& seekp(streampos pos) { return ((ostream*)this)->seekp(pos); } - ostream& seekp(streamoff off, _seek_dir dir) - { return ((ostream*)this)->seekp(off, dir); } - streampos tellp() { return ((ostream*)this)->tellp(); } -}; - -extern istream cin; -extern ostream cout, cerr, clog; // clog->rdbuf() == cerr->rdbuf() - -inline ostream& ostream::put(char c) { _strbuf->sputc(c); return *this; } - -struct Iostream_init { } ; // Compatibility hack for AT&T libraray. - - -//# 7 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stream.h" 2 - - -extern char* form(char*, ...); - -extern char* dec(long, int=0); -extern char* dec(int, int=0); -extern char* dec(unsigned long, int=0); -extern char* dec(unsigned int, int=0); - -extern char* hex(long, int=0); -extern char* hex(int, int=0); -extern char* hex(unsigned long, int=0); -extern char* hex(unsigned int, int=0); - -extern char* oct(long, int=0); -extern char* oct(int, int=0); -extern char* oct(unsigned long, int=0); -extern char* oct(unsigned int, int=0); - -inline istream& WS(istream& str) { return ws(str); } - - -//# 26 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" 2 - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/Regex.h" 1 -// This may look like C code, but it is really -*- C++ -*- -/* -Copyright (C) 1988 Free Software Foundation - written by Doug Lea (dl@rocky.oswego.edu) - -This file is part of the GNU C++ Library. This library is free -software; you can redistribute it and/or modify it under the terms of -the GNU Library General Public License as published by the Free -Software Foundation; either version 2 of the License, or (at your -option) any later version. This library is distributed in the hope -that it will be useful, but WITHOUT ANY WARRANTY; without even the -implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with this library; if not, write to the Free Software -Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - - - - -//#pragma interface - - - - - - - - - -struct re_pattern_buffer; // defined elsewhere -struct re_registers; - -class Regex -{ -private: - - Regex(const Regex&) {} // no X(X&) - void operator = (const Regex&) {} // no assignment - -protected: - re_pattern_buffer* buf; - re_registers* reg; - -public: - Regex(const char* t, - int fast = 0, - int bufsize = 40, - const char* transtable = 0); - - ~Regex(); - - int match(const char* s, int len, int pos = 0) const; - int search(const char* s, int len, - int& matchlen, int startpos = 0) const; - int match_info(int& start, int& length, int nth = 0) const; - - int OK() const; // representation invariant -}; - -// some built in regular expressions - -extern const Regex RXwhite; // = "[ \n\t\r\v\f]+" -extern const Regex RXint; // = "-?[0-9]+" -extern const Regex RXdouble; // = "-?\\(\\([0-9]+\\.[0-9]*\\)\\| - // \\([0-9]+\\)\\|\\(\\.[0-9]+\\)\\) - // \\([eE][---+]?[0-9]+\\)?" -extern const Regex RXalpha; // = "[A-Za-z]+" -extern const Regex RXlowercase; // = "[a-z]+" -extern const Regex RXuppercase; // = "[A-Z]+" -extern const Regex RXalphanum; // = "[0-9A-Za-z]+" -extern const Regex RXidentifier; // = "[A-Za-z_][A-Za-z0-9_]*" - - - -//# 27 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" 2 - - -struct StrRep // internal String representations -{ - unsigned short len; // string length - unsigned short sz; // allocated space - char s[1]; // the string starts here - // (at least 1 char for trailing null) - // allocated & expanded via non-public fcts -}; - -// primitive ops on StrReps -- nearly all String fns go through these. - -StrRep* Salloc(StrRep*, const char*, int, int); -StrRep* Scopy(StrRep*, StrRep*); -StrRep* Sresize(StrRep*, int); -StrRep* Scat(StrRep*, const char*, int, const char*, int); -StrRep* Scat(StrRep*, const char*, int,const char*,int, const char*,int); -StrRep* Sprepend(StrRep*, const char*, int); -StrRep* Sreverse(StrRep*, StrRep*); -StrRep* Supcase(StrRep*, StrRep*); -StrRep* Sdowncase(StrRep*, StrRep*); -StrRep* Scapitalize(StrRep*, StrRep*); - -// These classes need to be defined in the order given - -class String; -class SubString; - -class SubString -{ - friend class String; -protected: - - String& S; // The String I'm a substring of - unsigned short pos; // starting position in S's rep - unsigned short len; // length of substring - - void assign(StrRep*, const char*, int = -1); - SubString(String& x, int p, int l); - SubString(const SubString& x); - -public: - -// Note there are no public constructors. SubStrings are always -// created via String operations - - ~SubString(); - - void operator = (const String& y); - void operator = (const SubString& y); - void operator = (const char* t); - void operator = (char c); - -// return 1 if target appears anywhere in SubString; else 0 - - int contains(char c) const; - int contains(const String& y) const; - int contains(const SubString& y) const; - int contains(const char* t) const; - int contains(const Regex& r) const; - -// return 1 if target matches entire SubString - - int matches(const Regex& r) const; - -// IO - - friend ostream& operator<<(ostream& s, const SubString& x); - -// status - - unsigned int length() const; - int empty() const; - const char* chars() const; - - int OK() const; - -}; - - -class String -{ - friend class SubString; - -protected: - StrRep* rep; // Strings are pointers to their representations - -// some helper functions - - int search(int, int, const char*, int = -1) const; - int search(int, int, char) const; - int match(int, int, int, const char*, int = -1) const; - int _gsub(const char*, int, const char* ,int); - int _gsub(const Regex&, const char*, int); - SubString _substr(int, int); - -public: - -// constructors & assignment - - String(); - String(const String& x); - String(const SubString& x); - String(const char* t); - String(const char* t, int len); - String(char c); - - ~String(); - - void operator = (const String& y); - void operator = (const char* y); - void operator = (char c); - void operator = (const SubString& y); - -// concatenation - - void operator += (const String& y); - void operator += (const SubString& y); - void operator += (const char* t); - void operator += (char c); - - void prepend(const String& y); - void prepend(const SubString& y); - void prepend(const char* t); - void prepend(char c); - - -// procedural versions: -// concatenate first 2 args, store result in last arg - - friend void cat(const String&, const String&, String&); - friend void cat(const String&, const SubString&, String&); - friend void cat(const String&, const char*, String&); - friend void cat(const String&, char, String&); - - friend void cat(const SubString&, const String&, String&); - friend void cat(const SubString&, const SubString&, String&); - friend void cat(const SubString&, const char*, String&); - friend void cat(const SubString&, char, String&); - - friend void cat(const char*, const String&, String&); - friend void cat(const char*, const SubString&, String&); - friend void cat(const char*, const char*, String&); - friend void cat(const char*, char, String&); - -// double concatenation, by request. (yes, there are too many versions, -// but if one is supported, then the others should be too...) -// Concatenate first 3 args, store in last arg - - friend void cat(const String&,const String&, const String&,String&); - friend void cat(const String&,const String&,const SubString&,String&); - friend void cat(const String&,const String&, const char*, String&); - friend void cat(const String&,const String&, char, String&); - friend void cat(const String&,const SubString&,const String&,String&); - friend void cat(const String&,const SubString&,const SubString&,String&); - friend void cat(const String&,const SubString&, const char*, String&); - friend void cat(const String&,const SubString&, char, String&); - friend void cat(const String&,const char*, const String&, String&); - friend void cat(const String&,const char*, const SubString&, String&); - friend void cat(const String&,const char*, const char*, String&); - friend void cat(const String&,const char*, char, String&); - - friend void cat(const char*, const String&, const String&,String&); - friend void cat(const char*,const String&,const SubString&,String&); - friend void cat(const char*,const String&, const char*, String&); - friend void cat(const char*,const String&, char, String&); - friend void cat(const char*,const SubString&,const String&,String&); - friend void cat(const char*,const SubString&,const SubString&,String&); - friend void cat(const char*,const SubString&, const char*, String&); - friend void cat(const char*,const SubString&, char, String&); - friend void cat(const char*,const char*, const String&, String&); - friend void cat(const char*,const char*, const SubString&, String&); - friend void cat(const char*,const char*, const char*, String&); - friend void cat(const char*,const char*, char, String&); - - -// searching & matching - -// return position of target in string or -1 for failure - - int index(char c, int startpos = 0) const; - int index(const String& y, int startpos = 0) const; - int index(const SubString& y, int startpos = 0) const; - int index(const char* t, int startpos = 0) const; - int index(const Regex& r, int startpos = 0) const; - -// return 1 if target appears anyhere in String; else 0 - - int contains(char c) const; - int contains(const String& y) const; - int contains(const SubString& y) const; - int contains(const char* t) const; - int contains(const Regex& r) const; - -// return 1 if target appears anywhere after position pos -// (or before, if pos is negative) in String; else 0 - - int contains(char c, int pos) const; - int contains(const String& y, int pos) const; - int contains(const SubString& y, int pos) const; - int contains(const char* t, int pos) const; - int contains(const Regex& r, int pos) const; - -// return 1 if target appears at position pos in String; else 0 - - int matches(char c, int pos = 0) const; - int matches(const String& y, int pos = 0) const; - int matches(const SubString& y, int pos = 0) const; - int matches(const char* t, int pos = 0) const; - int matches(const Regex& r, int pos = 0) const; - -// return number of occurences of target in String - - int freq(char c) const; - int freq(const String& y) const; - int freq(const SubString& y) const; - int freq(const char* t) const; - -// SubString extraction - -// Note that you can't take a substring of a const String, since -// this leaves open the possiblility of indirectly modifying the -// String through the SubString - - SubString at(int pos, int len); - SubString operator () (int pos, int len); // synonym for at - - SubString at(const String& x, int startpos = 0); - SubString at(const SubString& x, int startpos = 0); - SubString at(const char* t, int startpos = 0); - SubString at(char c, int startpos = 0); - SubString at(const Regex& r, int startpos = 0); - - SubString before(int pos); - SubString before(const String& x, int startpos = 0); - SubString before(const SubString& x, int startpos = 0); - SubString before(const char* t, int startpos = 0); - SubString before(char c, int startpos = 0); - SubString before(const Regex& r, int startpos = 0); - - SubString through(int pos); - SubString through(const String& x, int startpos = 0); - SubString through(const SubString& x, int startpos = 0); - SubString through(const char* t, int startpos = 0); - SubString through(char c, int startpos = 0); - SubString through(const Regex& r, int startpos = 0); - - SubString from(int pos); - SubString from(const String& x, int startpos = 0); - SubString from(const SubString& x, int startpos = 0); - SubString from(const char* t, int startpos = 0); - SubString from(char c, int startpos = 0); - SubString from(const Regex& r, int startpos = 0); - - SubString after(int pos); - SubString after(const String& x, int startpos = 0); - SubString after(const SubString& x, int startpos = 0); - SubString after(const char* t, int startpos = 0); - SubString after(char c, int startpos = 0); - SubString after(const Regex& r, int startpos = 0); - - -// deletion - -// delete len chars starting at pos - void del(int pos, int len); - -// delete the first occurrence of target after startpos - - void del(const String& y, int startpos = 0); - void del(const SubString& y, int startpos = 0); - void del(const char* t, int startpos = 0); - void del(char c, int startpos = 0); - void del(const Regex& r, int startpos = 0); - -// global substitution: substitute all occurrences of pat with repl - - int gsub(const String& pat, const String& repl); - int gsub(const SubString& pat, const String& repl); - int gsub(const char* pat, const String& repl); - int gsub(const char* pat, const char* repl); - int gsub(const Regex& pat, const String& repl); - -// friends & utilities - -// split string into array res at separators; return number of elements - - friend int split(const String& x, String res[], int maxn, - const String& sep); - friend int split(const String& x, String res[], int maxn, - const Regex& sep); - - friend String common_prefix(const String& x, const String& y, - int startpos = 0); - friend String common_suffix(const String& x, const String& y, - int startpos = -1); - friend String replicate(char c, int n); - friend String replicate(const String& y, int n); - friend String join(String src[], int n, const String& sep); - -// simple builtin transformations - - friend String reverse(const String& x); - friend String upcase(const String& x); - friend String downcase(const String& x); - friend String capitalize(const String& x); - -// in-place versions of above - - void reverse(); - void upcase(); - void downcase(); - void capitalize(); - -// element extraction - - char& operator [] (int i); - char elem(int i) const; - char firstchar() const; - char lastchar() const; - -// conversion - - operator const char*() const; - const char* chars() const; - - -// IO - - friend ostream& operator<<(ostream& s, const String& x); - friend ostream& operator<<(ostream& s, const SubString& x); - friend istream& operator>>(istream& s, String& x); - - friend int readline(istream& s, String& x, - char terminator = '\n', - int discard_terminator = 1); - -// status - - unsigned int length() const; - int empty() const; - -// preallocate some space for String - void alloc(int newsize); - -// report current allocation (not length!) - - int allocation() const; - - - volatile void error(const char* msg) const; - - int OK() const; -}; - -typedef String StrTmp; // for backward compatibility - -// other externs - -int compare(const String& x, const String& y); -int compare(const String& x, const SubString& y); -int compare(const String& x, const char* y); -int compare(const SubString& x, const String& y); -int compare(const SubString& x, const SubString& y); -int compare(const SubString& x, const char* y); -int fcompare(const String& x, const String& y); // ignore case - -extern StrRep _nilStrRep; -extern String _nilString; - -// other inlines - -String operator + (const String& x, const String& y); -String operator + (const String& x, const SubString& y); -String operator + (const String& x, const char* y); -String operator + (const String& x, char y); -String operator + (const SubString& x, const String& y); -String operator + (const SubString& x, const SubString& y); -String operator + (const SubString& x, const char* y); -String operator + (const SubString& x, char y); -String operator + (const char* x, const String& y); -String operator + (const char* x, const SubString& y); - -int operator==(const String& x, const String& y); -int operator!=(const String& x, const String& y); -int operator> (const String& x, const String& y); -int operator>=(const String& x, const String& y); -int operator< (const String& x, const String& y); -int operator<=(const String& x, const String& y); -int operator==(const String& x, const SubString& y); -int operator!=(const String& x, const SubString& y); -int operator> (const String& x, const SubString& y); -int operator>=(const String& x, const SubString& y); -int operator< (const String& x, const SubString& y); -int operator<=(const String& x, const SubString& y); -int operator==(const String& x, const char* t); -int operator!=(const String& x, const char* t); -int operator> (const String& x, const char* t); -int operator>=(const String& x, const char* t); -int operator< (const String& x, const char* t); -int operator<=(const String& x, const char* t); -int operator==(const SubString& x, const String& y); -int operator!=(const SubString& x, const String& y); -int operator> (const SubString& x, const String& y); -int operator>=(const SubString& x, const String& y); -int operator< (const SubString& x, const String& y); -int operator<=(const SubString& x, const String& y); -int operator==(const SubString& x, const SubString& y); -int operator!=(const SubString& x, const SubString& y); -int operator> (const SubString& x, const SubString& y); -int operator>=(const SubString& x, const SubString& y); -int operator< (const SubString& x, const SubString& y); -int operator<=(const SubString& x, const SubString& y); -int operator==(const SubString& x, const char* t); -int operator!=(const SubString& x, const char* t); -int operator> (const SubString& x, const char* t); -int operator>=(const SubString& x, const char* t); -int operator< (const SubString& x, const char* t); -int operator<=(const SubString& x, const char* t); - - - - -// status reports, needed before defining other things - -inline unsigned int String::length() const { return rep->len; } -inline int String::empty() const { return rep->len == 0; } -inline const char* String::chars() const { return &(rep->s[0]); } -inline int String::allocation() const { return rep->sz; } -inline void String::alloc(int newsize) { rep = Sresize(rep, newsize); } - -inline unsigned int SubString::length() const { return len; } -inline int SubString::empty() const { return len == 0; } -inline const char* SubString::chars() const { return &(S.rep->s[pos]); } - - -// constructors - -inline String::String() - : rep(&_nilStrRep) {} -inline String::String(const String& x) - : rep(Scopy(0, x.rep)) {} -inline String::String(const char* t) - : rep(Salloc(0, t, -1, -1)) {} -inline String::String(const char* t, int tlen) - : rep(Salloc(0, t, tlen, tlen)) {} -inline String::String(const SubString& y) - : rep(Salloc(0, y.chars(), y.length(), y.length())) {} -inline String::String(char c) - : rep(Salloc(0, &c, 1, 1)) {} - -inline String::~String() { if (rep != &_nilStrRep) delete rep; } - -inline SubString::SubString(const SubString& x) - :S(x.S), pos(x.pos), len(x.len) {} -inline SubString::SubString(String& x, int first, int l) - :S(x), pos(first), len(l) {} - -inline SubString::~SubString() {} - -// assignment - -inline void String::operator = (const String& y) -{ - rep = Scopy(rep, y.rep); -} - -inline void String::operator=(const char* t) -{ - rep = Salloc(rep, t, -1, -1); -} - -inline void String::operator=(const SubString& y) -{ - rep = Salloc(rep, y.chars(), y.length(), y.length()); -} - -inline void String::operator=(char c) -{ - rep = Salloc(rep, &c, 1, 1); -} - - -inline void SubString::operator = (const char* ys) -{ - assign(0, ys); -} - -inline void SubString::operator = (char ch) -{ - assign(0, &ch, 1); -} - -inline void SubString::operator = (const String& y) -{ - assign(y.rep, y.chars(), y.length()); -} - -inline void SubString::operator = (const SubString& y) -{ - assign(y.S.rep, y.chars(), y.length()); -} - -// Zillions of cats... - -inline void cat(const String& x, const String& y, String& r) -{ - r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length()); -} - -inline void cat(const String& x, const SubString& y, String& r) -{ - r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length()); -} - -inline void cat(const String& x, const char* y, String& r) -{ - r.rep = Scat(r.rep, x.chars(), x.length(), y, -1); -} - -inline void cat(const String& x, char y, String& r) -{ - r.rep = Scat(r.rep, x.chars(), x.length(), &y, 1); -} - -inline void cat(const SubString& x, const String& y, String& r) -{ - r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length()); -} - -inline void cat(const SubString& x, const SubString& y, String& r) -{ - r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length()); -} - -inline void cat(const SubString& x, const char* y, String& r) -{ - r.rep = Scat(r.rep, x.chars(), x.length(), y, -1); -} - -inline void cat(const SubString& x, char y, String& r) -{ - r.rep = Scat(r.rep, x.chars(), x.length(), &y, 1); -} - -inline void cat(const char* x, const String& y, String& r) -{ - r.rep = Scat(r.rep, x, -1, y.chars(), y.length()); -} - -inline void cat(const char* x, const SubString& y, String& r) -{ - r.rep = Scat(r.rep, x, -1, y.chars(), y.length()); -} - -inline void cat(const char* x, const char* y, String& r) -{ - r.rep = Scat(r.rep, x, -1, y, -1); -} - -inline void cat(const char* x, char y, String& r) -{ - r.rep = Scat(r.rep, x, -1, &y, 1); -} - -inline void cat(const String& a, const String& x, const String& y, String& r) -{ - r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length()); -} - -inline void cat(const String& a, const String& x, const SubString& y, String& r) -{ - r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length()); -} - -inline void cat(const String& a, const String& x, const char* y, String& r) -{ - r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y, -1); -} - -inline void cat(const String& a, const String& x, char y, String& r) -{ - r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), &y, 1); -} - -inline void cat(const String& a, const SubString& x, const String& y, String& r) -{ - r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length()); -} - -inline void cat(const String& a, const SubString& x, const SubString& y, String& r) -{ - r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length()); -} - -inline void cat(const String& a, const SubString& x, const char* y, String& r) -{ - r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y, -1); -} - -inline void cat(const String& a, const SubString& x, char y, String& r) -{ - r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), &y, 1); -} - -inline void cat(const String& a, const char* x, const String& y, String& r) -{ - r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y.chars(), y.length()); -} - -inline void cat(const String& a, const char* x, const SubString& y, String& r) -{ - r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y.chars(), y.length()); -} - -inline void cat(const String& a, const char* x, const char* y, String& r) -{ - r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y, -1); -} - -inline void cat(const String& a, const char* x, char y, String& r) -{ - r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, &y, 1); -} - - -inline void cat(const char* a, const String& x, const String& y, String& r) -{ - r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length()); -} - -inline void cat(const char* a, const String& x, const SubString& y, String& r) -{ - r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length()); -} - -inline void cat(const char* a, const String& x, const char* y, String& r) -{ - r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y, -1); -} - -inline void cat(const char* a, const String& x, char y, String& r) -{ - r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), &y, 1); -} - -inline void cat(const char* a, const SubString& x, const String& y, String& r) -{ - r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length()); -} - -inline void cat(const char* a, const SubString& x, const SubString& y, String& r) -{ - r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length()); -} - -inline void cat(const char* a, const SubString& x, const char* y, String& r) -{ - r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y, -1); -} - -inline void cat(const char* a, const SubString& x, char y, String& r) -{ - r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), &y, 1); -} - -inline void cat(const char* a, const char* x, const String& y, String& r) -{ - r.rep = Scat(r.rep, a, -1, x, -1, y.chars(), y.length()); -} - -inline void cat(const char* a, const char* x, const SubString& y, String& r) -{ - r.rep = Scat(r.rep, a, -1, x, -1, y.chars(), y.length()); -} - -inline void cat(const char* a, const char* x, const char* y, String& r) -{ - r.rep = Scat(r.rep, a, -1, x, -1, y, -1); -} - -inline void cat(const char* a, const char* x, char y, String& r) -{ - r.rep = Scat(r.rep, a, -1, x, -1, &y, 1); -} - - -// operator versions - -inline void String::operator +=(const String& y) -{ - cat(*this, y, *this); -} - -inline void String::operator +=(const SubString& y) -{ - cat(*this, y, *this); -} - -inline void String::operator += (const char* y) -{ - cat(*this, y, *this); -} - -inline void String:: operator +=(char y) -{ - cat(*this, y, *this); -} - -// constructive concatenation - - - -inline String operator + (const String& x, const String& y) return r; -{ - cat(x, y, r); -} - -inline String operator + (const String& x, const SubString& y) return r; -{ - cat(x, y, r); -} - -inline String operator + (const String& x, const char* y) return r; -{ - cat(x, y, r); -} - -inline String operator + (const String& x, char y) return r; -{ - cat(x, y, r); -} - -inline String operator + (const SubString& x, const String& y) return r; -{ - cat(x, y, r); -} - -inline String operator + (const SubString& x, const SubString& y) return r; -{ - cat(x, y, r); -} - -inline String operator + (const SubString& x, const char* y) return r; -{ - cat(x, y, r); -} - -inline String operator + (const SubString& x, char y) return r; -{ - cat(x, y, r); -} - -inline String operator + (const char* x, const String& y) return r; -{ - cat(x, y, r); -} - -inline String operator + (const char* x, const SubString& y) return r; -{ - cat(x, y, r); -} - -inline String reverse(const String& x) return r; -{ - r.rep = Sreverse(x.rep, r.rep); -} - -inline String upcase(const String& x) return r; -{ - r.rep = Supcase(x.rep, r.rep); -} - -inline String downcase(const String& x) return r; -{ - r.rep = Sdowncase(x.rep, r.rep); -} - -inline String capitalize(const String& x) return r; -{ - r.rep = Scapitalize(x.rep, r.rep); -} - -//# 883 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" - - -// prepend - -inline void String::prepend(const String& y) -{ - rep = Sprepend(rep, y.chars(), y.length()); -} - -inline void String::prepend(const char* y) -{ - rep = Sprepend(rep, y, -1); -} - -inline void String::prepend(char y) -{ - rep = Sprepend(rep, &y, 1); -} - -inline void String::prepend(const SubString& y) -{ - rep = Sprepend(rep, y.chars(), y.length()); -} - -// misc transformations - - -inline void String::reverse() -{ - rep = Sreverse(rep, rep); -} - - -inline void String::upcase() -{ - rep = Supcase(rep, rep); -} - - -inline void String::downcase() -{ - rep = Sdowncase(rep, rep); -} - - -inline void String::capitalize() -{ - rep = Scapitalize(rep, rep); -} - -// element extraction - -inline char& String::operator [] (int i) -{ - if (((unsigned)i) >= length()) error("invalid index"); - return rep->s[i]; -} - -inline char String::elem (int i) const -{ - if (((unsigned)i) >= length()) error("invalid index"); - return rep->s[i]; -} - -inline char String::firstchar() const -{ - return elem(0); -} - -inline char String::lastchar() const -{ - return elem(length() - 1); -} - -// searching - -inline int String::index(char c, int startpos) const -{ - return search(startpos, length(), c); -} - -inline int String::index(const char* t, int startpos) const -{ - return search(startpos, length(), t); -} - -inline int String::index(const String& y, int startpos) const -{ - return search(startpos, length(), y.chars(), y.length()); -} - -inline int String::index(const SubString& y, int startpos) const -{ - return search(startpos, length(), y.chars(), y.length()); -} - -inline int String::index(const Regex& r, int startpos) const -{ - int unused; return r.search(chars(), length(), unused, startpos); -} - -inline int String::contains(char c) const -{ - return search(0, length(), c) >= 0; -} - -inline int String::contains(const char* t) const -{ - return search(0, length(), t) >= 0; -} - -inline int String::contains(const String& y) const -{ - return search(0, length(), y.chars(), y.length()) >= 0; -} - -inline int String::contains(const SubString& y) const -{ - return search(0, length(), y.chars(), y.length()) >= 0; -} - -inline int String::contains(char c, int p) const -{ - return match(p, length(), 0, &c, 1) >= 0; -} - -inline int String::contains(const char* t, int p) const -{ - return match(p, length(), 0, t) >= 0; -} - -inline int String::contains(const String& y, int p) const -{ - return match(p, length(), 0, y.chars(), y.length()) >= 0; -} - -inline int String::contains(const SubString& y, int p) const -{ - return match(p, length(), 0, y.chars(), y.length()) >= 0; -} - -inline int String::contains(const Regex& r) const -{ - int unused; return r.search(chars(), length(), unused, 0) >= 0; -} - -inline int String::contains(const Regex& r, int p) const -{ - return r.match(chars(), length(), p) >= 0; -} - - -inline int String::matches(const SubString& y, int p) const -{ - return match(p, length(), 1, y.chars(), y.length()) >= 0; -} - -inline int String::matches(const String& y, int p) const -{ - return match(p, length(), 1, y.chars(), y.length()) >= 0; -} - -inline int String::matches(const char* t, int p) const -{ - return match(p, length(), 1, t) >= 0; -} - -inline int String::matches(char c, int p) const -{ - return match(p, length(), 1, &c, 1) >= 0; -} - -inline int String::matches(const Regex& r, int p) const -{ - int l = (p < 0)? -p : length() - p; - return r.match(chars(), length(), p) == l; -} - - -inline int SubString::contains(const char* t) const -{ - return S.search(pos, pos+len, t) >= 0; -} - -inline int SubString::contains(const String& y) const -{ - return S.search(pos, pos+len, y.chars(), y.length()) >= 0; -} - -inline int SubString::contains(const SubString& y) const -{ - return S.search(pos, pos+len, y.chars(), y.length()) >= 0; -} - -inline int SubString::contains(char c) const -{ - return S.search(pos, pos+len, 0, c) >= 0; -} - -inline int SubString::contains(const Regex& r) const -{ - int unused; return r.search(chars(), len, unused, 0) >= 0; -} - -inline int SubString::matches(const Regex& r) const -{ - return r.match(chars(), len, 0) == len; -} - - -inline int String::gsub(const String& pat, const String& r) -{ - return _gsub(pat.chars(), pat.length(), r.chars(), r.length()); -} - -inline int String::gsub(const SubString& pat, const String& r) -{ - return _gsub(pat.chars(), pat.length(), r.chars(), r.length()); -} - -inline int String::gsub(const Regex& pat, const String& r) -{ - return _gsub(pat, r.chars(), r.length()); -} - -inline int String::gsub(const char* pat, const String& r) -{ - return _gsub(pat, -1, r.chars(), r.length()); -} - -inline int String::gsub(const char* pat, const char* r) -{ - return _gsub(pat, -1, r, -1); -} - - - -inline ostream& operator<<(ostream& s, const String& x) -{ - s << x.chars(); return s; -} - -// a zillion comparison operators - -inline int operator==(const String& x, const String& y) -{ - return compare(x, y) == 0; -} - -inline int operator!=(const String& x, const String& y) -{ - return compare(x, y) != 0; -} - -inline int operator>(const String& x, const String& y) -{ - return compare(x, y) > 0; -} - -inline int operator>=(const String& x, const String& y) -{ - return compare(x, y) >= 0; -} - -inline int operator<(const String& x, const String& y) -{ - return compare(x, y) < 0; -} - -inline int operator<=(const String& x, const String& y) -{ - return compare(x, y) <= 0; -} - -inline int operator==(const String& x, const SubString& y) -{ - return compare(x, y) == 0; -} - -inline int operator!=(const String& x, const SubString& y) -{ - return compare(x, y) != 0; -} - -inline int operator>(const String& x, const SubString& y) -{ - return compare(x, y) > 0; -} - -inline int operator>=(const String& x, const SubString& y) -{ - return compare(x, y) >= 0; -} - -inline int operator<(const String& x, const SubString& y) -{ - return compare(x, y) < 0; -} - -inline int operator<=(const String& x, const SubString& y) -{ - return compare(x, y) <= 0; -} - -inline int operator==(const String& x, const char* t) -{ - return compare(x, t) == 0; -} - -inline int operator!=(const String& x, const char* t) -{ - return compare(x, t) != 0; -} - -inline int operator>(const String& x, const char* t) -{ - return compare(x, t) > 0; -} - -inline int operator>=(const String& x, const char* t) -{ - return compare(x, t) >= 0; -} - -inline int operator<(const String& x, const char* t) -{ - return compare(x, t) < 0; -} - -inline int operator<=(const String& x, const char* t) -{ - return compare(x, t) <= 0; -} - -inline int operator==(const SubString& x, const String& y) -{ - return compare(y, x) == 0; -} - -inline int operator!=(const SubString& x, const String& y) -{ - return compare(y, x) != 0; -} - -inline int operator>(const SubString& x, const String& y) -{ - return compare(y, x) < 0; -} - -inline int operator>=(const SubString& x, const String& y) -{ - return compare(y, x) <= 0; -} - -inline int operator<(const SubString& x, const String& y) -{ - return compare(y, x) > 0; -} - -inline int operator<=(const SubString& x, const String& y) -{ - return compare(y, x) >= 0; -} - -inline int operator==(const SubString& x, const SubString& y) -{ - return compare(x, y) == 0; -} - -inline int operator!=(const SubString& x, const SubString& y) -{ - return compare(x, y) != 0; -} - -inline int operator>(const SubString& x, const SubString& y) -{ - return compare(x, y) > 0; -} - -inline int operator>=(const SubString& x, const SubString& y) -{ - return compare(x, y) >= 0; -} - -inline int operator<(const SubString& x, const SubString& y) -{ - return compare(x, y) < 0; -} - -inline int operator<=(const SubString& x, const SubString& y) -{ - return compare(x, y) <= 0; -} - -inline int operator==(const SubString& x, const char* t) -{ - return compare(x, t) == 0; -} - -inline int operator!=(const SubString& x, const char* t) -{ - return compare(x, t) != 0; -} - -inline int operator>(const SubString& x, const char* t) -{ - return compare(x, t) > 0; -} - -inline int operator>=(const SubString& x, const char* t) -{ - return compare(x, t) >= 0; -} - -inline int operator<(const SubString& x, const char* t) -{ - return compare(x, t) < 0; -} - -inline int operator<=(const SubString& x, const char* t) -{ - return compare(x, t) <= 0; -} - - -// a helper needed by at, before, etc. - -inline SubString String::_substr(int first, int l) -{ - if (first >= length() ) - return SubString(_nilString, 0, 0) ; - else - return SubString(*this, first, l); -} - - - - - -//# 26 "../../../../mips/include/Gct/GctErrorHandler.h" 2 - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 -// This is part of the iostream library, providing -*- C++ -*- input/output. -// Copyright (C) 1991 Per Bothner. -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the Free -// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" - -//# 27 "../../../../mips/include/Gct/GctErrorHandler.h" 2 - - -//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 1 -// -*- C++ -*- - - - -// -// Fake up a libstuff++ -// -// This is done as a complete and utter hack; this library has no function -// at all being in the boot area; it is here solely in order to provide a -// libstuff++ against which the Makefiles can resolve link lines. -// -// The only reason that this is done is to allow the STANDARD_C++_LIBRARIES -// as provided by the Makefile templates in the boot area to be the same -// ones that are used by the tools outside this hierarchy. -// -// The tools outside this hierarchy use a different libstuff++; one that is -// written in C++. This one is not written in C++ in order to be simpler. -// - - - - - -//#pragma interface - - - -extern "C" { -//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" 1 - - - -/* - * Useful stuff - */ - -/* - */ - -//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/ansi.h" 1 - - - - -/* - * ANSI Compiler Support - * - * David Harrison - * University of California, Berkeley - * 1988 - * - * ANSI compatible compilers are supposed to define the preprocessor - * directive __STDC__. Based on this directive, this file defines - * certain ANSI specific macros. - * - * ARGS: - * Used in function prototypes. Example: - * extern int foo - * ARGS((char *blah, double threshold)); - */ - -/* - * - * Modifications - * Wendell C Baker - * University of California, Berkeley - */ - -/* Function prototypes */ - - - - - - - - - - - - - - - - - - - - - - - - - - - -//# 15 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" 2 - - - -/* - * If g++, then we stub out part of this thing and let the C++ types take - * over and do the same job; some compatibility must be given however - */ - -/* - * Use the GNU libg++ definition - */ -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1 - - - - - - - -//# 26 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" 2 - -//# 35 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" - - -/* - * Make various pieces of C code that use the old ``Boolean'' - * be compatible by faking up the definition of Boolean using - * the new bool type. - */ - - -//# 58 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" - - -typedef long FitAny; /* can fit any integral type */ - -/* - * typedef char *String; - DO NOT USE THIS - it conflicts with C++ - * typedef char **Stringv; - just use char* and char** instead. - * - void* can be used for arbitrary pointers - */ - - - - -extern int nocase_strcmp (char *, char *) ; -extern int nocase_strncmp (char *, char *, int) ; - -extern bool nocase_strequal (char *, char *) ; -extern bool nocase_strnequal (char *, char *, int) ; - -extern bool lead_strequal (char *, char *) ; -extern bool nocase_lead_strequal (char *, char *) ; - -extern int strhash (char *, int) ; -extern int nocase_strhash (char *, int) ; - -extern int sign (int) ; - -/* - * Some useful macros. - */ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//# 33 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2 - -} - -// -// This is here because we wish to provide externs for the two -// functions btoa(bool, unsigned = 0) and operator<<(ostream&, bool) -// because they are not provided in bool.h. -// -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1 - - - - - - - -//# 41 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2 - -extern const char *stringify(bool b); -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 -// This is part of the iostream library, providing -*- C++ -*- input/output. -// Copyright (C) 1991 Per Bothner. -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the Free -// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" - -//# 43 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2 - -extern ostream& operator<<(ostream&, bool); - -// Should this be kept separate? bool isn't, but then is -// included here only to define ostream& operator<<(ostream&, bool) -//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/unit.h" 1 -// -*- C++ -*- - - - -// -// unit enum -// -// Wendell Baker, Berkeley CAD Group, 1991 (wbaker@ic.Berkeley.EDU) -// - - -// -// unit enum -// -// This _looks_ silly, but it has an important theoretical basis in category -// theory. For the pragmatic reason for its existence, see the example below. -// -enum unit { - UNIT = 1, -}; - -extern const char *stringify(unit u); - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 -// This is part of the iostream library, providing -*- C++ -*- input/output. -// Copyright (C) 1991 Per Bothner. -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the Free -// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" - -//# 28 "/sandbox/wbaker/wbaker0/source/mips/include/unit.h" 2 - -extern ostream& operator<<(ostream&, unit); - -// -// A unit is used in cases where the type signature of an overloaded -// function must be differentiated in some stronger way than can be -// denoted unambiguously in the C++ syntax. This enum is used to give -// one of the functions a different type signature, thereby allowing -// the overloading. -// -// The use of ``unit'' instead of int or bool is important because a unit -// has only one possible value; therefore it adds no more information to -// the code. For example, say a bool was used instead, then in the testing -// phase, would have to ask: what if TRUE was given, what if FALSE was given. -// The problem is compounded if char or int is used. -// -// Example: -// -// class ID { -// public: -// ID(); // construct a null ID -// ID(unit); // alloc a ID with a new id -// private: -// static unsigned high_water; -// unsigned id; -// }; -// -// Try working this example save that ID implements all of the generic -// features of the identifier object, but the high_water is stored -// in the heir. That is what originally motivated the creation of unit. -// - - -//# 48 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2 - - -// -// In the spirit of the standard GNU error handler functions -// as described in -// typedef void (*one_arg_error_handler_t)(const char*); -// a one argument error handler function pointer -// typedef void (*two_arg_error_handler_t)(const char*, const char*); -// a two argument error handler function pointer -// -// And now the NEW -// -// typedef void (*zero_arg_error_handler_t)(); -// a zero argument error handler function pointer -// -typedef void (*zero_arg_error_handler_t)(); - -// -// In the spirit of the default GNU error handler functions -// as described in -// extern void default_one_arg_error_handler(const char *message); -// print out message on stderr, and do the default thing (abort) -// extern void default_two_arg_error_handler(const char *kind, const char *message); -// print out kind and message on stderr, and do the default thing (abort) -// -// And now the NEW -// -// extern void default_zero_arg_error_handler(const char *message); -// do the default thing (abort) -// -extern void default_zero_arg_error_handler(); - -// Guaranteed to exit (1) -extern void exit_zero_arg_error_handler(); -extern void exit_one_arg_error_handler(const char *message); -extern void exit_two_arg_error_handler(const char *kind, const char *message); - -// Guaranteed to abort() -extern void abort_zero_arg_error_handler(); -extern void abort_one_arg_error_handler(const char *message); -extern void abort_two_arg_error_handler(const char *kind, const char *message); - -// -// In the spirit of the standard GNU error handlers -// as described in -// extern void verbose_File_error_handler(const char*); -// perror and set errno = 0 -// extern void quiet_File_error_handler(const char*); -// set errno = 0 -// extern void fatal_File_error_handler(const char*); -// perror and exit 1 -// -// And now the NEW -// -// extern void preserve_File_error_handler(const char *message); -// no perror, no assignment to errno. -// -extern void preserve_File_error_handler(const char *message); - - -//# 29 "../../../../mips/include/Gct/GctErrorHandler.h" 2 - -//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1 -// -*- C++ -*- - - - -// -// tostrstream class -// -// A terminated oststream - an ostsrstream that auto-terminates on str() -// -// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) -// - - - - - -//#pragma interface - - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/strstream.h" 1 -// This is part of the iostream library, providing input/output for C++. -// Copyright (C) 1991 Per Bothner. -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the Free -// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - - - -//#pragma interface - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 -// This is part of the iostream library, providing -*- C++ -*- input/output. -// Copyright (C) 1991 Per Bothner. -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the Free -// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" - -//# 23 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/strstream.h" 2 - - -class strstreambuf : public streambuf { - size_t *lenp; /* current (logical) length (i.e. valid data bytes) */ - size_t *sizep; /* allocated (physical) buffer size */ - char **bufp; - size_t _len; - size_t _size; - char *buf; - int _frozen; - protected: - virtual int overflow(int = (-1) ); - public: - strstreambuf(); - strstreambuf(int initial); - strstreambuf(char *ptr, int size, char *pstart = 0 ); - ~strstreambuf(); - int frozen() { return _frozen; } - void freeze(int n=1) { _frozen = n != 0; } - size_t pcount(); - char *str(); -}; - -class istrstream : public istream { - public: - istrstream(char*); - istrstream(char*, int); - strstreambuf* rdbuf() { return (strstreambuf*)_strbuf; } -}; - -class ostrstream : public ostream { - public: - ostrstream(); - ostrstream(char *cp, int n, int mode=ios::out); - size_t pcount() { return ((strstreambuf*)_strbuf)->pcount(); } - char *str() { return ((strstreambuf*)_strbuf)->str(); } - void freeze(int n = 1) { ((strstreambuf*)_strbuf)->freeze(n); } - int frozen() { return ((strstreambuf*)_strbuf)->frozen(); } - strstreambuf* rdbuf() { return (strstreambuf*)_strbuf; } -}; - - -//# 25 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 2 - - -// -// tostrstream class -// -// An isteam class that doesn't have that nasty skipws parameter that -// you have to remember to set. This class simply provides the istream -// functionality with a set of constructors which defaults skipws to -// FALSE (instead of defaulting to TRUE as is the case with plain istream). -// -class tostrstream: public ostrstream { -public: - tostrstream(): ostrstream() - { } - // This constructor defines cp as the buffer to use for the - // stream (instead of one of its own devising); it does NOT - // initialize the ostrstream to contain cp (of length n). - tostrstream(char *cp, int n, int mode=ios::out): ostrstream(cp, n, mode) - { } - char *str() - { - char *s = ostrstream::str(); - s[ostrstream::pcount()] = '\0'; - return s; - } -}; - - -//# 30 "../../../../mips/include/Gct/GctErrorHandler.h" 2 - - -//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 1 -// -*- C++ -*- - - - -// -// GttObject class (is abstract) -// -// Expects to be included where needed explicitly. -// -// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) -// - - - - - -//#pragma interface - - - -//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1 -// -*- C++ -*- -//# 52 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" - -//# 25 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 2 - - -//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 1 -// -*- C++ -*- - - - -// -// GttErrorHandler class -// -// Expects to be included by Gtt.h -// -// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) -// - - - - - -//#pragma interface - - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1 - - - - - - - -//# 25 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 2 - - -//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 1 -// -*- C++ -*- -//# 107 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" - -//# 27 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 2 - -//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1 -// -*- C++ -*- -//# 52 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" - -//# 28 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 2 - - -// -// It is expected that this will be virtually multiply inherited -// into all of the classes that need error reporting services. -// -// The typical way to have that done is by inheriting the GttObject -// as a virtual base class. -// - -// -// GttErrorHandler class -// -class GttErrorHandler { -public: - GttErrorHandler(); - GttErrorHandler(const char *program); - virtual ~GttErrorHandler(); - - // - // Error messages - // - an unacceptable, but expected and recoverable condition - // was detected (but the test fails) - // - errors are for ``the expected environment was not found'' - // rather than for ``file couldn't be opened'' - // - these messages cannot be shut off - // - the error handler determines the recovery action - // TODO - one day exceptions will be used here - // - static void error(const char *message); - static void error(tostrstream& message); - - static void error(const char *function, const char *message); - static void error(const char *function, tostrstream& message); - - static void error(const char *class_name, const char *method, const char *message); - static void error(const char *class_name, const char *method, tostrstream& message); - - // - // Fatal messages - // - an unacceptable and unexpected error was detected - // the data invariants were violated, there is no recovery - // - these messages cannot be shut off - // - the error handler determines the recovery action - // TODO - one day exceptions will be used here - // - static void fatal(const char *message); - static void fatal(tostrstream& message); - - static void fatal(const char *function, const char *message); - static void fatal(const char *function, tostrstream& message); - - static void fatal(const char *class_name, const char *method, const char *message); - static void fatal(const char *class_name, const char *method, tostrstream& message); -private: - // - // Two underscores are used here in order to prevent confusion of these - // private variables with any of the heir's private variables. Note that - // access control is different than visibility in C++, so all the variable - // names in a class hierarchy must be unique. - // - - static bool __partial_init; - static void __partial_initialize(); - static bool __full_init; - static void __full_initialize(const char *program); - static char *__program; - - static void __handle_error(); - static void __handle_fatal(); - static void __add_newline(const char *message); - - static bool __output_valid(); - static ostream *__output; -}; - - -//# 27 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 2 - - -// -// GttObject class (is abstract) -// -class GttObject: virtual public GttErrorHandler { -protected: - GttObject(); - GttObject(const GttObject&); - virtual ~GttObject(); // ensure descendants have virtual destructors - -public: - // - // I/O Support - // - // The value typically persists only long enough for an i/o operation - // to be performed (see the defintion of output via operator<<(... ) below) - virtual const char *stringify(); -protected: - // This is the buffer into which the printed representation of this - // object will be put when the time comes. It is associated with the - // object so it will never go away (so long as the object exists). - // Use a pointer so that you only pay for the space when I/O is used - tostrstream *stringbuf; - void clear_stringbuf(); - -public: - // - // Consistency - // - // The global data invariant for the whole object (heirs included). - // This OK function will call the local invariant function ok() if - // necessary and in addition the OK functions of the heirs - // This is expected to compute the data invariant of the object. - // It will execute GctErrorHandler::fatal if there is wrong. - virtual void OK() const; - -protected: - // - // consistency - // - // This function computes the invariant which is local to this object. - // It does not call any of the ancestor's OK() or ok() functions. - // It is not a virtual function so that it can be called from within a - // constructor with impunity. Thus this function MUST NOT call any - // virtual functions either; it should call them by their full name if - // that is necessary. The global OK() function will call this function - // as necessary. - // - // This function must NOT NEVER EVER be made virtual. - void ok() const; - -protected: - // - // Class Name - // - // This must return a static (constant) string which is the name - // of the class being declared. By convention, not all classes - // must have one of these, but the major root abstract class must - // have one in order to allow the stringify() to work approximately - // correctly. - virtual const char *class_name() const = 0; -}; - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 -// This is part of the iostream library, providing -*- C++ -*- input/output. -// Copyright (C) 1991 Per Bothner. -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the Free -// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" - -//# 91 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 2 - -extern ostream& operator<<(ostream&, GttObject&); - -// There may be other X& operator<<(X&, GttObject&) defined in the -// packages defining class X. For example see the definition of -// GttUnitObject& operator<<(GttUnitObject&, GttObject&) in Unit. - - -//# 32 "../../../../mips/include/Gct/GctErrorHandler.h" 2 - - -// -// It is expected that this will be virtually multiply inherited -// into all of the classes that need error reporting services. -// -// The typical way to have that done is by inheriting the GctObject -// as a virtual base class. -// - -// -// GctErrorHandler class -// -// GPP_1_96_BUG -// NOTE - virtual public GttObject should be MI into GctObject - but that -// causes g++ 1.96 to segfault; so we must inherit GttObject here and use SI -// GPP_1_96_BUG -class GctErrorHandler: virtual public GttObject { -public: - GctErrorHandler(); - GctErrorHandler(const String& program); - virtual ~GctErrorHandler(); - - // - // Debugging messages - // - these are turned off for production code. - // - these messages can be shut off - // - static void debug(const char *message); - static void debug(tostrstream& message); - - static void debug(const char *function, const char *message); - static void debug(const char *function, tostrstream& message); - - static void debug(const char *class_name, const char *method, const char *message); - static void debug(const char *class_name, const char *method, tostrstream& message); - - static bool debug(); // current debug switch - static void debug(bool value); // change the debug switch - - // - // Informational messages - // - these correspond to a ``verbose'' mode - // - these are not errors, just chatty progress reports - // - these messages can be shut off - // - static void note(const char *message); - static void note(tostrstream& message); - - static void note(const char *function, const char *message); - static void note(const char *function, tostrstream& message); - - static void note(const char *class_name, const char *method, const char *message); - static void note(const char *class_name, const char *method, tostrstream& message); - - static bool note(); // current note switch - static void note(bool value); // change the note switch - - // - // Warning messages - // - warnings are system-recoverable errors - // - the system has noticed something and taken some - // corrective action - // - these messages can be shut off - // - static void warning(const char *message); - static void warning(tostrstream& message); - - static void warning(const char *function, const char *message); - static void warning(const char *function, tostrstream& message); - - static void warning(const char *class_name, const char *method, const char *message); - static void warning(const char *class_name, const char *method, tostrstream& message); - - static bool warning(); // current warning switch - static void warning(bool value); // change the warning switch - - // - // Error messages - // - an unacceptable, but expected and recoverable - // condition was detected - // - errors are for ``the expected environment was not found'' - // rather than for ``file couldn't be opened'' - // - these messages cannot be shut off - // - the error handler determines the recovery action - // TODO - one day exceptions will be used here - // - static void error(const char *message); - static void error(tostrstream& message); - - static void error(const char *function, const char *message); - static void error(const char *function, tostrstream& message); - - static void error(const char *class_name, const char *method, const char *message); - static void error(const char *class_name, const char *method, tostrstream& message); - - // can't turn off errors - no ``static void error(bool value);'' - static zero_arg_error_handler_t error(); // current error handler - static void error(zero_arg_error_handler_t handler);// change the error handler - - static void error_is_lib_error_handler(); // change the error handler - static void error_is_exit(); // change the error handler - - // Describes the fatal handler - WATCHOUT - implicitly uses AllocRing - static const char *error_handler_description(); - - // - // Fatal messages - // - an unacceptable and unexpected error was detected - // the data invariants were violated, there is no recovery - // - these messages cannot be shut off - // - the error handler determines the recovery action - // TODO - one day exceptions will be used here - // - static void fatal(const char *message); - static void fatal(tostrstream& message); - - static void fatal(const char *function, const char *message); - static void fatal(const char *function, tostrstream& message); - - static void fatal(const char *class_name, const char *method, const char *message); - static void fatal(const char *class_name, const char *method, tostrstream& message); - - // can't turn off fatals - no ``static void fatal(bool value);'' - static zero_arg_error_handler_t fatal(); // return the fatal handler - static void fatal(zero_arg_error_handler_t handler); // change the fatal handler - - static void fatal_is_exit(); // change the fatal handler - static void fatal_is_abort(); // change the fatal handler - - // Describes the fatal handler - WATCHOUT - implicitly uses AllocRing - static const char *fatal_handler_description(); -private: - // - // Two underscores are used here in order to prevent confusion of these - // private variables with any of the heir's private variables. Note that - // access control is different than visibility in C++, so all the variable - // names in a class hierarchy must be unique. - // - static bool __debug; - static bool __note; - static bool __warning; - static void (*__error_handler)(); // can't turn off errors - static void (*__fatal_handler)(); // can't turn off fatals - - static bool __partial_init; - static void __partial_initialize(); - static bool __full_init; - static void __full_initialize(const char *program); - static char *__program; - - static void __handle_error(); - static void __handle_fatal(); - static void __add_newline(const char *message); - static void __message_switch(bool value, bool& flag, const char *description); - static void __message_switch(bool value, bool& flag); - static const char *__describe_handler(zero_arg_error_handler_t handler); - - static bool __output_valid(); - static ostream *__output; - - // GPP_1_96_BUG - const char *class_name() const; - // GPP_1_96_BUG -}; - - -//# 27 "../../../../mips/include/Gct/Reference/GctReferenceCount.h" 2 - - -class GctReferenceCount: virtual public GctErrorHandler { -public: - GctReferenceCount(); - - void inc(); - void dec(); - bool zero() const; -private: - unsigned _count; -}; - -inline -GctReferenceCount::GctReferenceCount() -{ - this->_count = 0; -} - -inline void -GctReferenceCount::inc() -{ - this->_count++; -} - -inline void -GctReferenceCount::dec() -{ - if (this->debug()) { - if (this->_count == 0) - this->error("GctReferenceCount", "dec()", - "attempt to decrement a zero refcount"); - } - - // Protect against decrementing off zero in case - // this->debug() is not turned on to signal the error. - if (this->_count) - this->_count--; -} - -inline bool -GctReferenceCount::zero() const -{ - return (bool)(this->_count == 0); -} - - -//# 25 "../../../../mips/include/Gct/Reference.h" 2 - -//# 1 "../../../../mips/include/Gct/Reference/GctReferenceObject.h" 1 -// -*- C++ -*- - - - -// -// GctReferenceObject class -// -// Expects to be included by Gct/Reference.h -// -// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) -// - - - - - -//#pragma interface - - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1 - - - - - - - -//# 25 "../../../../mips/include/Gct/Reference/GctReferenceObject.h" 2 - - -//# 1 "../../../../mips/include/Gct/Object/GctHashObject.h" 1 -// -*- C++ -*- - - - -// -// GctHashObject class (is abstract) -// -// Expects to be included by Object.h or where needed explicitly. -// -// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) -// - - - - - -//#pragma interface - - - -//# 1 "../../../../mips/include/Gct/Object/GctObject.h" 1 -// -*- C++ -*- - - - -// -// GctObject class (is abstract) -// -// Expects to be included by Object.h or where needed explicitly. -// -// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) -// - - - - - -//#pragma interface - - - -//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1 -// -*- C++ -*- -//# 52 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" - -//# 25 "../../../../mips/include/Gct/Object/GctObject.h" 2 - - -//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 1 -// -*- C++ -*- -//# 98 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" - -//# 27 "../../../../mips/include/Gct/Object/GctObject.h" 2 - - -//# 1 "../../../../mips/include/Gct/GctErrorHandler.h" 1 -// -*- C++ -*- -//# 198 "../../../../mips/include/Gct/GctErrorHandler.h" - -//# 29 "../../../../mips/include/Gct/Object/GctObject.h" 2 - - -// -// GctObject class (is abstract) -// -class GctObject: virtual public GctErrorHandler /*, virtual public GttObject*/ { -protected: - GctObject(); - GctObject(const GctObject&); - virtual ~GctObject(); // ensure descendants have virtual destructors - -public: - // - // I/O Support - // - // The value typically persists only long enough for an i/o operation - // to be performed (see the defintion of output via operator<<(... ) below) - virtual const char *stringify(); -protected: - // This is the buffer into which the printed representation of this - // object will be put when the time comes. It is associated with the - // object so it will never go away (so long as the object exists). - // Use a pointer so that you only pay for the space when I/O is used - tostrstream *stringbuf; - void clear_stringbuf(); - -public: - // - // Consistency (global consistency) - // - // The global data invariant for the whole object (heirs included). - // This OK function will call the local invariant function ok() if - // necessary and in addition the OK functions of the heirs - // This is expected to compute the data invariant of the object. - // It will execute GctErrorHandler::fatal if there is wrong. - virtual void OK() const; - -protected: - // - // consistency (local consistency) - // - // This function computes the invariant which is local to this object. - // It does not call any of the ancestor's OK() or ok() functions. - // It is not a virtual function so that it can be called from within a - // constructor with impunity. Thus this function MUST NOT call any - // virtual functions either; it should call them by their full name if - // that is necessary. The global OK() function will call this function - // as necessary. - // - // This function must NOT NEVER EVER be made virtual. - void ok() const; -protected: - // - // Class Name - // - // This must return a static (constant) string which is the name - // of the class being declared. By convention, not all classes - // must have one of these, but the major root abstract class must - // have one in order to allow the stringify() to work approximately - // correctly. - virtual const char *class_name() const = 0; - -public: - // - // The ``id'' of this object - // - // NOTE - we explicitly allow the situation where this function - // can return the address of the object - the ``this'' pointer - // instead of a computed id field (the __object_id field below). - // - // This function is protected because we don't want too much dependence - // on this notion of object identity. I want to be able to rip it - // out if it becomes to cumbersome. - unsigned objectId() const; -private: - // - // Symbolic ID - // - // NOTE - Normally this would be implemented by the `this' pointer. - // TODO - remove this for production code - // - // However, in order to make the test suites run on all machines, we - // make this into a symbolic id that is maintained with each object. - // Thus the valid outputs are always consistent across all machines. - unsigned __object_id; - static unsigned __next_id; -}; - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 -// This is part of the iostream library, providing -*- C++ -*- input/output. -// Copyright (C) 1991 Per Bothner. -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the Free -// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" - -//# 117 "../../../../mips/include/Gct/Object/GctObject.h" 2 - -extern ostream& operator<<(ostream&, GctObject&); - - -//# 25 "../../../../mips/include/Gct/Object/GctHashObject.h" 2 - - -// -// GctHashObject class (is abstract) -// -class GctHashObject: virtual public GctObject { -protected: - GctHashObject(); - GctHashObject(const GctHashObject&); - -public: - // - // hash support - // - virtual unsigned hash() const; -}; - - -//# 27 "../../../../mips/include/Gct/Reference/GctReferenceObject.h" 2 - - -class GctRef; - -// -// GctReferenceObject class -// -class GctReferenceObject: virtual public GctHashObject { -public: - // Aid in using operator new() to allocate dynamic - // instances of heirs to GctReferenceObject. - // An error is reported if result_of_new is nil. - static void ensure_new_succeeded(GctReferenceObject *result_of_new, - const char *class_name, - const char *args_supplied = ""); - - // the stringify() is standard - void OK() const; -protected: - GctReferenceObject(const bool refcounting = FALSE); - GctReferenceObject(const GctReferenceObject&, - const bool refcounting = FALSE); - virtual ~GctReferenceObject(); - - void operator=(const GctReferenceObject&); - - void ok() const; - - // Disallowed (create pointers to objects via new only) - // It is kept protected so that heirs can do *-cast-& tricks to work - // around the contravariance of abstract virtuals. This operator should - // never be used to return an address of a GctReferenceObject. - GctReferenceObject *operator&() const; -private: - const char *class_name() const; - - bool _destructed; // ensure no use of destructed objects - // this bit guards against the destruct-before-copy g++ bug - - bool _refcounting; // was allocated via operator new() - GctReferenceCount _refcount; - - // TODO - these names can never be used again in a derived - // class; should they be obfuscated some to free up the - // names (these are good, commonly-used names). - void reference(); - void dereference(GctReferenceObject *&); - void kill(); - - bool refcounted() const; - void refcounting(); // as if given in the constructor - - // Using this scheme, only GctRef can manipulate the - // reference count via reference(), dereference(). The derived - // classes cannot do such, and the _refcount field is not - // available to be tweaked by GctRef in any way other - // way than the inc/dec/zero interface. - friend class GctRef; -}; - - -//# 26 "../../../../mips/include/Gct/Reference.h" 2 - -//# 1 "../../../../mips/include/Gct/Reference/GctRef.h" 1 -// -*- C++ -*- - - - -// -// GctRef class -// -// Expects to be included by Gct/Reference.h -// -// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) -// - - - - - -//#pragma interface - - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1 - - - - - - - -//# 25 "../../../../mips/include/Gct/Reference/GctRef.h" 2 - - -//# 1 "../../../../mips/include/Gct/Object/GctHashObject.h" 1 -// -*- C++ -*- -//# 42 "../../../../mips/include/Gct/Object/GctHashObject.h" - -//# 27 "../../../../mips/include/Gct/Reference/GctRef.h" 2 - - -class GctReferenceObject; - -class GctRef: virtual public GctHashObject { -public: - GctRef(); - GctRef(const GctRef&); - virtual ~GctRef(); - - void operator=(GctRef&); - - // Accessor functions - bool valid() const; // the managed pointer is !null - bool null() const; // the managed pointer is null - - GctReferenceObject *ref() const; // faults if not valid - operator void*() const; // unchecked reference - - void nullify(); // set the managed pointer to null - void invalidate(); // set the managed pointer to null - - unsigned hash() const; - - // the stringify() is standard - void OK() const; -protected: - void ok() const; - - // We want to make sure pointers do not float around for very long. - // This constructor is used by descendants of this class only; it is - // expected that such descendants will have friend functions which - // will call ``new MumbleObject()'' and return a GctRef to THAT. - // MumbleObject would be a descendant of GctReferenceObject - GctRef(GctReferenceObject *); - friend class GctReferenceObject; -private: - const char *class_name() const; - - GctReferenceObject *_pointer; // may store 0 - - bool _destructed; // ensure no use of destructed objects - // this bit guards against the destruct-before-copy g++ bug -}; - -inline -GctRef::operator void*() const -{ return this->_pointer; } - -inline bool -GctRef::valid() const -{ return (bool)(this->_pointer != 0); } - -inline bool -GctRef::null() const -{ return (bool)(this->_pointer == 0); } - -// -// Required operations for the container classes -// -// NOTE: we can't use const here because the genclass code doesn't -// That is the ONLY reason for not using const reference args here. -// -extern int operator==(GctRef&, GctRef&); -extern int operator!=(GctRef&, GctRef&); - -extern int operator<=(GctRef&, GctRef&); -extern int operator<(GctRef&, GctRef&); - -extern int operator>=(GctRef&, GctRef&); -extern int operator>(GctRef&, GctRef&); - -extern unsigned hash(GctRef&); - - -//# 27 "../../../../mips/include/Gct/Reference.h" 2 - - - -//# 47 "../../../../mips/include/Gct/genclasses.h" 2 - - -//# 1 "../../../../mips/include/Gct/Ast/GctAstRef.h" 1 -// -*- C++ -*- - - - -// -// GctAstRef class -// -// Expects to be included by Gct/Ast.h -// -// Wendell Baker, Berkeley CAD Group, 1991 (wbaker@ic.Berkeley.EDU) -// - - - - - -//#pragma interface - - - -//# 1 "../../../../mips/include/Gct/Reference.h" 1 -// -*- C++ -*- -//# 29 "../../../../mips/include/Gct/Reference.h" - -//# 25 "../../../../mips/include/Gct/Ast/GctAstRef.h" 2 - - -//# 1 "../../../../mips/include/Gct/Ast/GctAstType.h" 1 -// -*- C++ -*- - - - -// -// GctAstType enum -// -// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) -// - - -// -// GctAstType enum -// -enum GctAstType { - Gct_Leaf, - Gct_Tree -}; - -extern const char *stringify(GctAstType a); - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 -// This is part of the iostream library, providing -*- C++ -*- input/output. -// Copyright (C) 1991 Per Bothner. -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the Free -// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" - -//# 26 "../../../../mips/include/Gct/Ast/GctAstType.h" 2 - -extern ostream& operator<<(ostream&, GctAstType); - - -//# 27 "../../../../mips/include/Gct/Ast/GctAstRef.h" 2 - - -class GctAst; -class GctTree; -class GctLeaf; - -class GctAstRef: public GctRef { -public: - GctAstRef(); - GctAstRef(const GctAstRef&); - - GctAst *ref() const; // may return 0 (not requires valid) - - GctAstType concrete_type() const; // requires valid() - GctTree *tree() const; // never return 0 - typechecked - GctLeaf *leaf() const; // never return 0 - typechecked -protected: - // We make sure pointers do not float around for very long. - // This constructor cooperates with Gct{Leaf,Tree}::New - // (all flavors) to allow for the creation of new dynamic structures. - GctAstRef(GctAst *); - friend class GctLeaf; - friend class GctTree; -}; - - -//# 49 "../../../../mips/include/Gct/genclasses.h" 2 - - - -//# 2 "GctNameRef.List.cc" 2 - -//# 1 "../../../../mips/include/Gct/Name/GctNameRef.h" 1 -// -*- C++ -*- - - - -// -// GctNameRef class -// -// Expects to be included by Gct/Name.h -// -// Wendell Baker, Berkeley CAD Group, 1991 (wbaker@ic.Berkeley.EDU) -// - - - - - -//#pragma interface - - - -//# 1 "../../../../mips/include/Gct/Reference.h" 1 -// -*- C++ -*- -//# 29 "../../../../mips/include/Gct/Reference.h" - -//# 25 "../../../../mips/include/Gct/Name/GctNameRef.h" 2 - - -//# 1 "../../../../mips/include/Gct/Name/GctNameType.h" 1 -// -*- C++ -*- - - - -// -// GctNameType enum -// -// Wendell Baker, Berkeley CAD Group, 1991 (wbaker@ic.Berkeley.EDU) -// - - -// -// GctNameType enum -// -enum GctNameType { - Gct_Identifier, - Gct_Signature, -}; - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 -// This is part of the iostream library, providing -*- C++ -*- input/output. -// Copyright (C) 1991 Per Bothner. -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the Free -// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" - -//# 24 "../../../../mips/include/Gct/Name/GctNameType.h" 2 - - -extern char *ntoa(GctNameType n, unsigned width = 0); -extern ostream& operator<<(ostream&, GctNameType); - - -//# 27 "../../../../mips/include/Gct/Name/GctNameRef.h" 2 - - -class GctName; -class GctIdentifier; -class GctSignature; - -class GctNameRef: public GctRef { -public: - GctNameRef(); - GctNameRef(const GctNameRef&); - - GctName *ref() const; // may return 0 (not requires valid()) - - GctNameType concrete_type() const; // requires valid() - GctIdentifier *identifier() const; // never return 0 - typechecked - GctSignature *signature() const; // never return 0 - typechecked -protected: - // We make sure pointers do not float around for very long. - // This constructor cooperates with GctIdentifier::New and - // GctSignature::New (all flavors) to allow for the creation of new - // dynamic structures. - GctNameRef(GctName *); - friend class GctIdentifier; - friend class GctSignature; - -private: - const char *class_name() const; -}; - -// -// Required operations for use by genclass container classes -// -// These are more specific than the ones supplied by GctRef -// because they use the name of the attribute as the key for -// comparison instead of the pointer stored as a void* value. -// -// NOTE: we can't use const here because the genclass code doesn't -// That is the ONLY reason for not using const reference args here. -// -extern int operator==(GctNameRef&, GctNameRef&); -extern int operator!=(GctNameRef&, GctNameRef&); - -extern int operator<=(GctNameRef&, GctNameRef&); -extern int operator<(GctNameRef&, GctNameRef&); - -extern int operator>=(GctNameRef&, GctNameRef&); -extern int operator>(GctNameRef&, GctNameRef&); - -// extern unsigned hash(GctNameRef&) -// is handled by the previous declaration of -// extern unsigned hash(GctRef&); - - -//# 3 "GctNameRef.List.cc" 2 - -// This may look like C code, but it is really -*- C++ -*- -/* -Copyright (C) 1988 Free Software Foundation - written by Doug Lea (dl@rocky.oswego.edu) - -This file is part of GNU CC. - -GNU CC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY. No author or distributor -accepts responsibility to anyone for the consequences of using it -or for whether it serves any particular purpose or works at all, -unless he says so in writing. Refer to the GNU CC General Public -License for full details. - -Everyone is granted permission to copy, modify and redistribute -GNU CC, but only under the conditions described in the -GNU CC General Public License. A copy of this license is -supposed to have been given to you along with GNU CC so you -can know your rights and responsibilities. It should be in a -file named COPYING. Among other things, the copyright notice -and this notice must be preserved on all copies. -*/ - - -//#pragma implementation - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/builtin.h" 1 -// This may look like C code, but it is really -*- C++ -*- - -/* -Copyright (C) 1988, 1992 Free Software Foundation - written by Doug Lea (dl@rocky.oswego.edu) - -This file is part of the GNU C++ Library. This library is free -software; you can redistribute it and/or modify it under the terms of -the GNU Library General Public License as published by the Free -Software Foundation; either version 2 of the License, or (at your -option) any later version. This library is distributed in the hope -that it will be useful, but WITHOUT ANY WARRANTY; without even the -implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with this library; if not, write to the Free Software -Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -/* - arithmetic, etc. functions on built in types -*/ - - -//# 214 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/builtin.h" - -//# 30 "GctNameRef.List.cc" 2 - -//# 1 "genclasses/GctNameRef.List.h" 1 -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/Pix.h" 1 - - - -typedef void* Pix; - -//# 1 "genclasses/GctNameRef.List.h" 2 - -// This may look like C code, but it is really -*- C++ -*- -/* -Copyright (C) 1988 Free Software Foundation - written by Doug Lea (dl@rocky.oswego.edu) - -This file is part of GNU CC. - -GNU CC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY. No author or distributor -accepts responsibility to anyone for the consequences of using it -or for whether it serves any particular purpose or works at all, -unless he says so in writing. Refer to the GNU CC General Public -License for full details. - -Everyone is granted permission to copy, modify and redistribute -GNU CC, but only under the conditions described in the -GNU CC General Public License. A copy of this license is -supposed to have been given to you along with GNU CC so you -can know your rights and responsibilities. It should be in a -file named COPYING. Among other things, the copyright notice -and this notice must be preserved on all copies. -*/ - - - - -//#pragma once -//#pragma interface - - - - - -typedef void (*GctNameRefProcedure)(GctNameRef&); -typedef GctNameRef (*GctNameRefMapper)(GctNameRef&); -typedef GctNameRef& (*GctNameRefCombiner)(const GctNameRef&, - const GctNameRef&); -typedef int (*GctNameRefPredicate)(GctNameRef&); -typedef int (*GctNameRefComparator)(GctNameRef&, GctNameRef&); - - -//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/Pix.h" 1 - - - - - -//# 42 "genclasses/GctNameRef.List.h" 2 - - -struct GctNameRefListNode -{ - GctNameRefListNode* tl; - short ref; - GctNameRef hd; -}; - -extern GctNameRefListNode NilGctNameRefListNode; - -class GctNameRefList -{ -protected: - GctNameRefListNode* P; - - GctNameRefList(GctNameRefListNode* p); -public: - GctNameRefList(); - GctNameRefList(GctNameRef& head); - GctNameRefList(GctNameRef& head, GctNameRefList& tl); - GctNameRefList(const GctNameRefList& a); - GctNameRefList(Pix p); - ~GctNameRefList(); - - GctNameRefList& operator = (const GctNameRefList& a); - - int null(); - int valid(); - operator const void* (); - int operator ! (); - - int length() const; - int list_length(); - - GctNameRef& get(); - GctNameRef& head(); - GctNameRef& operator [] (int n); - - GctNameRefList nth(int n); - GctNameRefList tail(); - GctNameRefList last() const; - - GctNameRefList find(GctNameRef& targ); - GctNameRefList find(GctNameRefList& targ); - int contains(GctNameRef& targ) const; - int contains(GctNameRefList& targ) const; - int position(GctNameRef& targ); - - friend GctNameRefList copy(GctNameRefList& a); - friend GctNameRefList concat(GctNameRefList& a, GctNameRefList& b); - friend GctNameRefList append(GctNameRefList& a, GctNameRefList& b); - friend GctNameRefList map(GctNameRefMapper f, GctNameRefList& a); - friend GctNameRefList merge(GctNameRefList& a, GctNameRefList& b, GctNameRefComparator f); - friend GctNameRefList combine(GctNameRefCombiner f, GctNameRefList& a, GctNameRefList& b); - friend GctNameRefList reverse(GctNameRefList& a); - friend GctNameRefList select(GctNameRefPredicate f, GctNameRefList& a); - friend GctNameRefList remove(GctNameRef& targ, GctNameRefList& a); - friend GctNameRefList remove(GctNameRefPredicate f, GctNameRefList& a); - friend GctNameRefList subst(GctNameRef& old, GctNameRef& repl, GctNameRefList& a); - - void push(GctNameRef& x); - GctNameRef pop(); - - void set_tail(GctNameRefList& p); - void append(GctNameRefList& p); - void prepend(GctNameRefList& p); - void del(GctNameRef& targ); - void del(GctNameRefPredicate f); - void select(GctNameRefPredicate f); - void subst(GctNameRef& old, GctNameRef& repl); - void reverse(); - void sort(GctNameRefComparator f); - - void apply(GctNameRefProcedure f); - GctNameRef reduce(GctNameRefCombiner f, GctNameRef& base); - - friend int operator == (GctNameRefList& a, GctNameRefList& b); - friend int operator != (GctNameRefList& a, GctNameRefList& b); - - Pix first() const; - void next(Pix& p) const; - Pix seek(GctNameRef& item) const; - GctNameRef& operator () (Pix p) const; - int owns(Pix p) const; - - void error(const char*) const; - int OK() const; -}; - - - -inline void reference(GctNameRefListNode* p) -{ - if (p->ref >= 0) ++p->ref; -} - -inline void dereference(GctNameRefListNode* p) -{ - while (p->ref > 0 && --p->ref == 0) - { - GctNameRefListNode* n = p->tl; - delete(p); - p = n; - } -} - - -inline GctNameRefListNode* newGctNameRefListNode(const GctNameRef& h) -{ - GctNameRefListNode* p = new GctNameRefListNode; - p->ref = 1; - p->hd = (GctNameRef&) h; - return p; -} - -inline GctNameRefListNode* newGctNameRefListNode(GctNameRef& h, GctNameRefListNode* t) -{ - GctNameRefListNode* p = new GctNameRefListNode; - p->ref = 1; - p->hd = h; - p->tl = t; - return p; -} - - -inline GctNameRefList::~GctNameRefList() -{ - dereference(P); -} - -inline GctNameRefList::GctNameRefList() -{ - P = &NilGctNameRefListNode; -} - -inline GctNameRefList::GctNameRefList(GctNameRefListNode* p) -{ - P = p; -} - -inline GctNameRefList::GctNameRefList(GctNameRef& head) -{ - P = newGctNameRefListNode(head); - P->tl = &NilGctNameRefListNode; -} - -inline GctNameRefList::GctNameRefList(GctNameRef& head, GctNameRefList& tl) -{ - P = newGctNameRefListNode(head, tl.P); - reference(P->tl); -} - -inline GctNameRefList::GctNameRefList(const GctNameRefList& a) -{ - GctNameRefList& gl = (GctNameRefList&) a; - reference(gl.P); - P = a.P; -} - - -inline GctNameRef& GctNameRefList::get() -{ - return P->hd; -} - -inline GctNameRef& GctNameRefList::head() -{ - return P->hd; -} - - -inline GctNameRefList GctNameRefList::tail() -{ - reference(P->tl); - return GctNameRefList(P->tl); -} - - - -inline int GctNameRefList::null() -{ - return P == &NilGctNameRefListNode; -} - -inline int GctNameRefList::valid() -{ - return P != &NilGctNameRefListNode; -} - -inline GctNameRefList::operator const void* () -{ - return (P == &NilGctNameRefListNode)? 0 : this; -} - -inline int GctNameRefList::operator ! () -{ - return (P == &NilGctNameRefListNode); -} - - -inline void GctNameRefList::push(GctNameRef& head) -{ - GctNameRefListNode* oldp = P; - P = newGctNameRefListNode(head, oldp); -} - - -inline int operator != (GctNameRefList& x, GctNameRefList& y) -{ - return !(x == y); -} - -inline Pix GctNameRefList::first() const -{ - return (P == &NilGctNameRefListNode)? 0 : Pix(P); -} - -inline GctNameRef& GctNameRefList::operator () (Pix p) const -{ - return ((GctNameRefListNode*)p)->hd; -} - -inline void GctNameRefList::next(Pix& p) const -{ - if (p != 0) - { - p = Pix(((GctNameRefListNode*)p)->tl); - if (p == &NilGctNameRefListNode) p = 0; - } -} - -inline GctNameRefList::GctNameRefList(Pix p) -{ - P = (GctNameRefListNode*)p; - reference(P); -} - - - -//# 31 "GctNameRef.List.cc" 2 - - -GctNameRefListNode NilGctNameRefListNode; - -class init_NilGctNameRefListNode -{ -public: - inline init_NilGctNameRefListNode() - { - NilGctNameRefListNode.tl = &NilGctNameRefListNode; - NilGctNameRefListNode.ref = -1; - } -}; - -static init_NilGctNameRefListNode NilGctNameRefListNode_initializer; - -GctNameRefList& GctNameRefList::operator = (const GctNameRefList& a) -{ - reference(a.P); - dereference(P); - P = a.P; - return *this; -} - -GctNameRef GctNameRefList::pop() -{ - GctNameRef res = P->hd; - GctNameRefListNode* tail = P->tl; - reference(tail); - dereference(P); - P = tail; - return res; -} - -void GctNameRefList::set_tail(GctNameRefList& a) -{ - reference(a.P); - dereference(P->tl); - P->tl = a.P; -} - -GctNameRefList GctNameRefList::nth(int n) -{ - GctNameRefListNode* p; - for (p = P; n-- > 0; p = p->tl); - reference(p); - return GctNameRefList(p); -} - -GctNameRefList GctNameRefList::last() const -{ - GctNameRefListNode* p = P; - if (p != &NilGctNameRefListNode) while (p->tl != &NilGctNameRefListNode) p = p->tl; - reference(p); - return GctNameRefList(p); -} - -void GctNameRefList::append(GctNameRefList& l) -{ - GctNameRefListNode* p = P; - GctNameRefListNode* a = l.P; - reference(a); - if (p != &NilGctNameRefListNode) - { - while (p->tl != &NilGctNameRefListNode) p = p->tl; - p->tl = a; - } - else - P = a; -} - -int GctNameRefList::length() const -{ - int l = 0; - for (GctNameRefListNode* p = P; p != &NilGctNameRefListNode; p = p->tl) ++l; - return l; -} - -GctNameRef& GctNameRefList::operator [] (int n) -{ - GctNameRefListNode* p; - for (p = P; n-- > 0; p = p->tl); - return (p->hd); -} - -int operator == (GctNameRefList& x, GctNameRefList& y) -{ - GctNameRefListNode* a = x.P; - GctNameRefListNode* b = y.P; - - for (;;) - { - if (a == &NilGctNameRefListNode) - return b == &NilGctNameRefListNode; - else if (b == &NilGctNameRefListNode) - return 0; - else if (a->hd == b->hd) - { - a = a->tl; - b = b->tl; - } - else - return 0; - } -} - - -void GctNameRefList::apply(GctNameRefProcedure f) -{ - for(GctNameRefListNode* p = P; p != &NilGctNameRefListNode; p = p->tl) - (*f)((p->hd)); -} - -void GctNameRefList::subst(GctNameRef& old, GctNameRef& repl) -{ - for(GctNameRefListNode* p = P; p != &NilGctNameRefListNode; p = p->tl) - if (p->hd == old) - p->hd = repl; -} - -GctNameRef GctNameRefList::reduce(GctNameRefCombiner f, GctNameRef& base) -{ - GctNameRef r = base; - for(GctNameRefListNode* p = P; p != &NilGctNameRefListNode; p = p->tl) - r = (*f)(r, (p->hd)); - return r; -} - -int GctNameRefList::position(GctNameRef& targ) -{ - int l = 0; - GctNameRefListNode* p = P; - for (;;) - { - if (p == &NilGctNameRefListNode) - return -1; - else if (p->hd == targ) - return l; - else - { - ++l; - p = p->tl; - } - } -} - -int GctNameRefList::contains(GctNameRef& targ) const -{ - GctNameRefListNode* p = P; - for (;;) - { - if (p == &NilGctNameRefListNode) - return 0; - else if (p->hd == targ) - return 1; - else - p = p->tl; - } -} - -GctNameRefList GctNameRefList::find(GctNameRef& targ) -{ - GctNameRefListNode* p; - for (p = P; p != &NilGctNameRefListNode && !(p->hd == targ); p=p->tl); - reference(p); - return GctNameRefList(p); -} - -Pix GctNameRefList::seek(GctNameRef& targ) const -{ - GctNameRefListNode* p = P; - for (;;) - { - if (p == &NilGctNameRefListNode) - return 0; - else if (p->hd == targ) - return Pix(p); - else - p = p->tl; - } -} - -int GctNameRefList::owns(Pix i) const -{ - GctNameRefListNode* p = P; - for (;;) - { - if (p == &NilGctNameRefListNode) - return 0; - else if (Pix(p) == i) - return 1; - else - p = p->tl; - } -} - -GctNameRefList GctNameRefList::find(GctNameRefList& target) -{ - GctNameRefListNode* targ = target.P; - if (targ == &NilGctNameRefListNode) - return GctNameRefList(targ); - - GctNameRefListNode* p = P; - while (p != &NilGctNameRefListNode) - { - if (p->hd == targ->hd) - { - GctNameRefListNode* a = p->tl; - GctNameRefListNode* t = targ->tl; - for(;;) - { - if (t == &NilGctNameRefListNode) - { - reference(p); - return GctNameRefList(p); - } - else if (a == &NilGctNameRefListNode || !(a->hd == t->hd)) - break; - else - { - a = a->tl; - t = t->tl; - } - } - } - p = p->tl; - } - return GctNameRefList(&NilGctNameRefListNode); -} - -int GctNameRefList::contains(GctNameRefList& target) const -{ - GctNameRefListNode* targ = target.P; - if (targ == &NilGctNameRefListNode) - return 0; - - GctNameRefListNode* p = P; - while (p != &NilGctNameRefListNode) - { - if (p->hd == targ->hd) - { - GctNameRefListNode* a = p->tl; - GctNameRefListNode* t = targ->tl; - for(;;) - { - if (t == &NilGctNameRefListNode) - return 1; - else if (a == &NilGctNameRefListNode || !(a->hd == t->hd)) - break; - else - { - a = a->tl; - t = t->tl; - } - } - } - p = p->tl; - } - return 0; -} - -void GctNameRefList::del(GctNameRef& targ) -{ - GctNameRefListNode* h = P; - - for (;;) - { - if (h == &NilGctNameRefListNode) - { - P = h; - return; - } - else if (h->hd == targ) - { - GctNameRefListNode* nxt = h->tl; - reference(nxt); - dereference(h); - h = nxt; - } - else - break; - } - - GctNameRefListNode* trail = h; - GctNameRefListNode* p = h->tl; - while (p != &NilGctNameRefListNode) - { - if (p->hd == targ) - { - GctNameRefListNode* nxt = p->tl; - reference(nxt); - dereference(p); - trail->tl = nxt; - p = nxt; - } - else - { - trail = p; - p = p->tl; - } - } - P = h; -} - -void GctNameRefList::del(GctNameRefPredicate f) -{ - GctNameRefListNode* h = P; - for (;;) - { - if (h == &NilGctNameRefListNode) - { - P = h; - return; - } - else if ((*f)(h->hd)) - { - GctNameRefListNode* nxt = h->tl; - reference(nxt); - dereference(h); - h = nxt; - } - else - break; - } - - GctNameRefListNode* trail = h; - GctNameRefListNode* p = h->tl; - while (p != &NilGctNameRefListNode) - { - if ((*f)(p->hd)) - { - GctNameRefListNode* nxt = p->tl; - reference(nxt); - dereference(p); - trail->tl = nxt; - p = nxt; - } - else - { - trail = p; - p = p->tl; - } - } - P = h; -} - -void GctNameRefList::select(GctNameRefPredicate f) -{ - GctNameRefListNode* h = P; - for (;;) - { - if (h == &NilGctNameRefListNode) - { - P = h; - return; - } - else if (!(*f)(h->hd)) - { - GctNameRefListNode* nxt = h->tl; - reference(nxt); - dereference(h); - h = nxt; - } - else - break; - } - GctNameRefListNode* trail = h; - GctNameRefListNode* p = h->tl; - while (p != &NilGctNameRefListNode) - { - if (!(*f)(p->hd)) - { - GctNameRefListNode* nxt = p->tl; - reference(nxt); - dereference(p); - trail->tl = nxt; - p = nxt; - } - else - { - trail = p; - p = p->tl; - } - } - P = h; -} - -void GctNameRefList::reverse() -{ - GctNameRefListNode* l = &NilGctNameRefListNode; - GctNameRefListNode* p = P; - while (p != &NilGctNameRefListNode) - { - GctNameRefListNode* nxt = p->tl; - p->tl = l; - l = p; - p = nxt; - } - P = l; -} - - -GctNameRefList copy(GctNameRefList& x) -{ - GctNameRefListNode* a = x.P; - if (a == &NilGctNameRefListNode) - return GctNameRefList(a); - else - { - GctNameRefListNode* h = newGctNameRefListNode(a->hd); - GctNameRefListNode* trail = h; - for(a = a->tl; a != &NilGctNameRefListNode; a = a->tl) - { - GctNameRefListNode* n = newGctNameRefListNode(a->hd); - trail->tl = n; - trail = n; - } - trail->tl = &NilGctNameRefListNode; - return GctNameRefList(h); - } -} - - -GctNameRefList subst(GctNameRef& old, GctNameRef& repl, GctNameRefList& x) -{ - GctNameRefListNode* a = x.P; - if (a == &NilGctNameRefListNode) - return GctNameRefList(a); - else - { - GctNameRefListNode* h = new GctNameRefListNode; - h->ref = 1; - if (a->hd == old) - h->hd = repl; - else - h->hd = a->hd; - GctNameRefListNode* trail = h; - for(a = a->tl; a != &NilGctNameRefListNode; a = a->tl) - { - GctNameRefListNode* n = new GctNameRefListNode; - n->ref = 1; - if (a->hd == old) - n->hd = repl; - else - n->hd = a->hd; - trail->tl = n; - trail = n; - } - trail->tl = &NilGctNameRefListNode; - return GctNameRefList(h); - } -} - -GctNameRefList combine(GctNameRefCombiner f, GctNameRefList& x, GctNameRefList& y) -{ - GctNameRefListNode* a = x.P; - GctNameRefListNode* b = y.P; - if (a == &NilGctNameRefListNode || b == &NilGctNameRefListNode) - return GctNameRefList(&NilGctNameRefListNode); - else - { - GctNameRefListNode* h = newGctNameRefListNode((*f)(a->hd, b->hd)); - GctNameRefListNode* trail = h; - a = a->tl; - b = b->tl; - while (a != &NilGctNameRefListNode && b != &NilGctNameRefListNode) - { - GctNameRefListNode* n = newGctNameRefListNode((*f)(a->hd, b->hd)); - trail->tl = n; - trail = n; - a = a->tl; - b = b->tl; - } - trail->tl = &NilGctNameRefListNode; - return GctNameRefList(h); - } -} - -GctNameRefList reverse(GctNameRefList& x) -{ - GctNameRefListNode* a = x.P; - if (a == &NilGctNameRefListNode) - return GctNameRefList(a); - else - { - GctNameRefListNode* l = newGctNameRefListNode(a->hd); - l->tl = &NilGctNameRefListNode; - for(a = a->tl; a != &NilGctNameRefListNode; a = a->tl) - { - GctNameRefListNode* n = newGctNameRefListNode(a->hd); - n->tl = l; - l = n; - } - return GctNameRefList(l); - } -} - -GctNameRefList append(GctNameRefList& x, GctNameRefList& y) -{ - GctNameRefListNode* a = x.P; - GctNameRefListNode* b = y.P; - reference(b); - if (a != &NilGctNameRefListNode) - { - GctNameRefListNode* h = newGctNameRefListNode(a->hd); - GctNameRefListNode* trail = h; - for(a = a->tl; a != &NilGctNameRefListNode; a = a->tl) - { - GctNameRefListNode* n = newGctNameRefListNode(a->hd); - trail->tl = n; - trail = n; - } - trail->tl = b; - return GctNameRefList(h); - } - else - return GctNameRefList(b); -} - -void GctNameRefList::prepend(GctNameRefList& y) -{ - GctNameRefListNode* b = y.P; - if (b != &NilGctNameRefListNode) - { - GctNameRefListNode* h = newGctNameRefListNode(b->hd); - GctNameRefListNode* trail = h; - for(b = b->tl; b != &NilGctNameRefListNode; b = b->tl) - { - GctNameRefListNode* n = newGctNameRefListNode(b->hd); - trail->tl = n; - trail = n; - } - trail->tl = P; - P = h; - } -} - -GctNameRefList concat(GctNameRefList& x, GctNameRefList& y) -{ - GctNameRefListNode* a = x.P; - GctNameRefListNode* b = y.P; - if (a != &NilGctNameRefListNode) - { - GctNameRefListNode* h = newGctNameRefListNode(a->hd); - GctNameRefListNode* trail = h; - for(a = a->tl; a != &NilGctNameRefListNode; a = a->tl) - { - GctNameRefListNode* n = newGctNameRefListNode(a->hd); - trail->tl = n; - trail = n; - }; - for(;b != &NilGctNameRefListNode; b = b->tl) - { - GctNameRefListNode* n = newGctNameRefListNode(b->hd); - trail->tl = n; - trail = n; - } - trail->tl = &NilGctNameRefListNode; - return GctNameRefList(h); - } - else if (b != &NilGctNameRefListNode) - { - GctNameRefListNode* h = newGctNameRefListNode(b->hd); - GctNameRefListNode* trail = h; - for(b = b->tl; b != &NilGctNameRefListNode; b = b->tl) - { - GctNameRefListNode* n = newGctNameRefListNode(b->hd); - trail->tl = n; - trail = n; - } - trail->tl = &NilGctNameRefListNode; - return GctNameRefList(h); - } - else - return GctNameRefList(&NilGctNameRefListNode); -} - -GctNameRefList select(GctNameRefPredicate f, GctNameRefList& x) -{ - GctNameRefListNode* a = x.P; - GctNameRefListNode* h = &NilGctNameRefListNode; - while (a != &NilGctNameRefListNode) - { - if ((*f)(a->hd)) - { - h = newGctNameRefListNode(a->hd); - GctNameRefListNode* trail = h; - for(a = a->tl; a != &NilGctNameRefListNode; a = a->tl) - { - if ((*f)(a->hd)) - { - GctNameRefListNode* n = newGctNameRefListNode(a->hd); - trail->tl = n; - trail = n; - } - } - trail->tl = &NilGctNameRefListNode; - break; - } - else - a = a->tl; - } - return GctNameRefList(h); -} - -GctNameRefList remove(GctNameRefPredicate f, GctNameRefList& x) -{ - GctNameRefListNode* a = x.P; - GctNameRefListNode* h = &NilGctNameRefListNode; - while (a != &NilGctNameRefListNode) - { - if (!(*f)(a->hd)) - { - h = newGctNameRefListNode(a->hd); - GctNameRefListNode* trail = h; - for(a = a->tl; a != &NilGctNameRefListNode; a = a->tl) - { - if (!(*f)(a->hd)) - { - GctNameRefListNode* n = newGctNameRefListNode(a->hd); - trail->tl = n; - trail = n; - } - } - trail->tl = &NilGctNameRefListNode; - break; - } - else - a = a->tl; - } - return GctNameRefList(h); -} - -GctNameRefList remove(GctNameRef& targ, GctNameRefList& x) -{ - GctNameRefListNode* a = x.P; - GctNameRefListNode* h = &NilGctNameRefListNode; - while (a != &NilGctNameRefListNode) - { - if (!(a->hd == targ)) - { - h = newGctNameRefListNode(a->hd); - GctNameRefListNode* trail = h; - for(a = a->tl; a != &NilGctNameRefListNode; a = a->tl) - { - if (!(a->hd == targ)) - { - GctNameRefListNode* n = newGctNameRefListNode(a->hd); - trail->tl = n; - trail = n; - } - } - trail->tl = &NilGctNameRefListNode; - break; - } - else - a = a->tl; - } - return GctNameRefList(h); -} - -GctNameRefList map(GctNameRefMapper f, GctNameRefList& x) -{ - GctNameRefListNode* a = x.P; - GctNameRefListNode* h = &NilGctNameRefListNode; - if (a != &NilGctNameRefListNode) - { - h = newGctNameRefListNode((*f)(a->hd)); - GctNameRefListNode* trail = h; - for(a = a->tl; a != &NilGctNameRefListNode; a = a->tl) - { - GctNameRefListNode* n = newGctNameRefListNode((*f)(a->hd)); - trail->tl = n; - trail = n; - } - trail->tl = &NilGctNameRefListNode; - } - return GctNameRefList(h); -} - - -GctNameRefList merge(GctNameRefList& x, GctNameRefList& y, GctNameRefComparator f) -{ - GctNameRefListNode* a = x.P; - GctNameRefListNode* b = y.P; - - if (a == &NilGctNameRefListNode) - { - if (b == &NilGctNameRefListNode) - return GctNameRefList(&NilGctNameRefListNode); - else - return copy(y); - } - else if (b == &NilGctNameRefListNode) - return copy(x); - - GctNameRefListNode* h = new GctNameRefListNode; - h->ref = 1; - if ((*f)(a->hd, b->hd) <= 0) - { - h->hd = a->hd; - a = a->tl; - } - else - { - h->hd = b->hd; - b = b->tl; - } - - GctNameRefListNode* r = h; - - for(;;) - { - if (a == &NilGctNameRefListNode) - { - while (b != &NilGctNameRefListNode) - { - GctNameRefListNode* n = new GctNameRefListNode; - n->ref = 1; - n->hd = b->hd; - r->tl = n; - r = n; - b = b->tl; - } - r->tl = &NilGctNameRefListNode; - return GctNameRefList(h); - } - else if (b == &NilGctNameRefListNode) - { - while (a != &NilGctNameRefListNode) - { - GctNameRefListNode* n = new GctNameRefListNode; - n->ref = 1; - n->hd = a->hd; - r->tl = n; - r = n; - a = a->tl; - } - r->tl = &NilGctNameRefListNode; - return GctNameRefList(h); - } - else if ((*f)(a->hd, b->hd) <= 0) - { - GctNameRefListNode* n = new GctNameRefListNode; - n->ref = 1; - n->hd = a->hd; - r->tl = n; - r = n; - a = a->tl; - } - else - { - GctNameRefListNode* n = new GctNameRefListNode; - n->ref = 1; - n->hd = b->hd; - r->tl = n; - r = n; - b = b->tl; - } - } -} - -void GctNameRefList::sort(GctNameRefComparator f) -{ - // strategy: place runs in queue, merge runs until done - // This is often very fast - - if (P == &NilGctNameRefListNode || P->tl == &NilGctNameRefListNode) - return; - - int qlen = 250; // guess a good queue size, realloc if necessary - - GctNameRefListNode** queue = (GctNameRefListNode**)malloc(qlen * sizeof(GctNameRefListNode*)); - - GctNameRefListNode* h = P; - GctNameRefListNode* a = h; - GctNameRefListNode* b = a->tl; - int qin = 0; - - while (b != &NilGctNameRefListNode) - { - if ((*f)(a->hd, b->hd) > 0) - { - if (h == a) // minor optimization: ensure runlen >= 2 - { - h = b; - a->tl = b->tl; - b->tl = a; - b = a->tl; - } - else - { - if (qin >= qlen) - { - qlen *= 2; - queue = (GctNameRefListNode**)realloc(queue, qlen * sizeof(GctNameRefListNode*)); - } - queue[qin++] = h; - a->tl = &NilGctNameRefListNode; - h = a = b; - b = b->tl; - } - } - else - { - a = b; - b = b->tl; - } - } - - int count = qin; - queue[qin] = h; - if (++qin >= qlen) qin = 0; - int qout = 0; - - while (count-- > 0) - { - a = queue[qout]; - if (++qout >= qlen) qout = 0; - b = queue[qout]; - if (++qout >= qlen) qout = 0; - - if ((*f)(a->hd, b->hd) <= 0) - { - h = a; - a = a->tl; - } - else - { - h = b; - b = b->tl; - } - queue[qin] = h; - if (++qin >= qlen) qin = 0; - - for (;;) - { - if (a == &NilGctNameRefListNode) - { - h->tl = b; - break; - } - else if (b == &NilGctNameRefListNode) - { - h->tl = a; - break; - } - else if ((*f)(a->hd, b->hd) <= 0) - { - h->tl = a; - h = a; - a = a->tl; - } - else - { - h->tl = b; - h = b; - b = b->tl; - } - } - } - P = queue[qout]; - free(queue); -} - -int GctNameRefList::list_length() -{ - GctNameRefListNode* fast = P; - if (fast == &NilGctNameRefListNode) - return 0; - - GctNameRefListNode* slow = fast->tl; - if (slow == &NilGctNameRefListNode) - return 1; - - fast = slow->tl; - int n = 2; - - for (;;) - { - if (fast == &NilGctNameRefListNode) - return n; - else if (fast->tl == &NilGctNameRefListNode) - return n+1; - else if (fast == slow) - return -1; - else - { - n += 2; - fast = fast->tl->tl; - slow = slow->tl; - } - } -} - -void GctNameRefList::error(const char* msg) const -{ - (*lib_error_handler)("List", msg); -} - -int GctNameRefList::OK() const -{ - int v = P != 0; // have a node - // check that all nodes OK, even if circular: - - GctNameRefListNode* fast = P; - if (fast != &NilGctNameRefListNode) - { - v &= fast->ref != 0; - GctNameRefListNode* slow = fast->tl; - v &= slow->ref != 0; - if (v && slow != &NilGctNameRefListNode) - { - fast = slow->tl; - v &= fast->ref != 0; - while (v) - { - if (fast == &NilGctNameRefListNode) - break; - else if (fast->tl == &NilGctNameRefListNode) - break; - else if (fast == slow) - break; - else - { - v &= fast->ref != 0 && slow->ref != 0; - fast = fast->tl->tl; - slow = slow->tl; - } - } - } - } - if (!v) error ("invariant failure"); - return v; -}