#!/bin/sh
# This is a shar archive.
# The rest of this file is a shell script which will extract:
#
# 6_8a.c 6_8a.cmp 6_8a0.h 6_8a1.h 6_8a2.h 6_8a3.h 6_8a_tst.c 6_8a_tst.h makefile
#
# To extract the files from this shell archive file simply
# create a directory for this file, move the archive file
# to it and enter the command
#
#	sh filename
# 
# The files will be extracted automatically.
# Note: Do not use csh.
#
# Archive created: Mon Jul 30 23:08:26 EDT 1990
#
echo x - 6_8a.c
sed 's/^X//' > 6_8a.c << '!EOF!'
/* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
/* The C++ Answer Book */
/* Tony Hansen */
/* All rights reserved. */
// Exercise 6.8
// Define a class INT which acts just like integers
#ifndef INT_H
# define INT_H

#include "6_8a0.h"	/* EXPAND */

#include "6_8a1.h"	/* EXPAND4 */

#include "6_8a2.h"	/* EXPAND4 */

#include "6_8a3.h"	/* EXPAND4 */
};
#endif /* INT_H */
!EOF!
ls -l 6_8a.c
echo x - 6_8a.cmp
sed 's/^X//' > 6_8a.cmp << '!EOF!'
I1=9
i1=9
I2=200
i2=200
!EOF!
ls -l 6_8a.cmp
echo x - 6_8a0.h
sed 's/^X//' > 6_8a0.h << '!EOF!'
/* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
/* The C++ Answer Book */
/* Tony Hansen */
/* All rights reserved. */
struct INT
{
    int i;
    // ...
!EOF!
ls -l 6_8a0.h
echo x - 6_8a1.h
sed 's/^X//' > 6_8a1.h << '!EOF!'
/* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
/* The C++ Answer Book */
/* Tony Hansen */
/* All rights reserved. */
// constructors
INT() {}			// INT x;
INT(int &j) { i = j; }		// INT x = 0;
INT(INT &j) { i = j.i; }	// INT x = INT
!EOF!
ls -l 6_8a1.h
echo x - 6_8a2.h
sed 's/^X//' > 6_8a2.h << '!EOF!'
/* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
/* The C++ Answer Book */
/* Tony Hansen */
/* All rights reserved. */
// conversion to int
operator int() { return i; }
!EOF!
ls -l 6_8a2.h
echo x - 6_8a3.h
sed 's/^X//' > 6_8a3.h << '!EOF!'
/* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
/* The C++ Answer Book */
/* Tony Hansen */
/* All rights reserved. */
// assignment operators
INT operator +=(int j) { return (i += j); }
INT operator -=(int j) { return (i -= j); }
INT operator *=(int j) { return (i *= j); }
INT operator /=(int j) { return (i /= j); }
INT operator %=(int j) { return (i %= j); }
INT operator &=(int j) { return (i &= j); }
INT operator ^=(int j) { return (i ^= j); }
INT operator |=(int j) { return (i |= j); }
INT operator <<=(int j) { return (i <<= j); }
INT operator >>=(int j) { return (i >>= j); }
INT operator ++() { return (i++); }
INT operator --() { return (i--); }
!EOF!
ls -l 6_8a3.h
echo x - 6_8a_tst.c
sed 's/^X//' > 6_8a_tst.c << '!EOF!'
/* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
/* The C++ Answer Book */
/* Tony Hansen */
/* All rights reserved. */
#include <stream.h>

#include "6_8a.c"

main() {
    INT I1 = 9;			    int i1 = 9;
    INT I2;			    int i2 = 0;
    INT I3 = I2;		    int i3 = i2;
    int X = 1, Y = 2;		    int x = 1, y = 2;

    X = I1;			    x = i1;
    I2 = Y;			    i2 = y;
    I2 = I1;			    i2 = i1;
    I2 = 9;			    i2 = 9;
    I2 = I1 + 99;		    i2 = i1 + 99;
    I2 = I1 + I1;		    i2 = i1 + i1;
    I2 *= 5;			    i2 *= 5;
    I2 += 9;			    i2 += 9;
    I2 += I2;			    i2 += i2;
    I2++;			    i2++;
    ++I2;			    ++i2;
    cout << "I1=" << int(I1) << "\n";
    cout << "i1=" << int(i1) << "\n";
    cout << "I2=" << int(I2) << "\n";
    cout << "i2=" << int(i2) << "\n";
    return 0;	// DELETE
}
!EOF!
ls -l 6_8a_tst.c
echo x - 6_8a_tst.h
sed 's/^X//' > 6_8a_tst.h << '!EOF!'
/* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
/* The C++ Answer Book */
/* Tony Hansen */
/* All rights reserved. */
struct INT { int i;
// constructors
    INT() {}			// INT x;
    INT(int j) { i = j; }	// INT x = 0;
    INT(INT j) { i = j.i; }	// INT x = INT
// conversion to int
    operator int() { return i; }
// assignment operators
    INT operator +=(int j) { return (i += j); }
    INT operator -=(int j) { return (i -= j); }
    INT operator *=(int j) { return (i *= j); }
    INT operator /=(int j) { return (i /= j); }
    INT operator %=(int j) { return (i %= j); }
    INT operator &=(int j) { return (i &= j); }
    INT operator ^=(int j) { return (i ^= j); }
    INT operator |=(int j) { return (i |= j); }
    INT operator <<=(int j) { return (i <<= j); }
    INT operator >>=(int j) { return (i >>= j); }
//    INT operator ++() { return (i++); }
//    INT operator --() { return (i--); }
};
!EOF!
ls -l 6_8a_tst.h
echo x - makefile
sed 's/^X//' > makefile << '!EOF!'
CC= CC -I. -I../../CC

all: 6_8a

6_8a: 6_8a.c 6_8a_tst.c 6_8a0.h 6_8a1.h 6_8a2.h 6_8a3.h
	$(CC) 6_8a_tst.c -o 6_8a

CMP= 6_8a.cmp
OUT= 6_8a.out

6_8a.out: 6_8a ;	6_8a > 6_8a.out

test: all $(OUT) $(CMP)
	cmp 6_8a.out 6_8a.cmp
	echo tests done
!EOF!
ls -l makefile
# The following exit is to ensure that extra garbage 
# after the end of the shar file will be ignored.
exit 0
